-
Notifications
You must be signed in to change notification settings - Fork 310
/
Copy patheff.js
101 lines (88 loc) · 2.84 KB
/
eff.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
(function(window, document) {
var textareas = document.getElementsByTagName('textarea');
var ascii = textareas[0];
var binary = textareas[1];
var permalink = document.getElementById('permalink');
var regexBinaryGroup = /\s*[01]{8}\s*/g;
var regexAnyCharacter = /[\s\S]/g;
var regexBinary = /^(\s*[01]{8}\s*)*$/;
var regexExtendedASCII = /^[\x00-\xff]*$/;
// https://mathiasbynens.be/notes/localstorage-pattern
var storage = (function() {
var uid = new Date;
var storage;
var result;
try {
(storage = window.localStorage).setItem(uid, uid);
result = storage.getItem(uid) == uid;
storage.removeItem(uid);
return result && storage;
} catch (exception) {}
}());
var stringFromCharCode = String.fromCharCode;
function encode(string) {
// URL-encode some more characters to avoid issues when using permalink URLs in Markdown
return encodeURIComponent(string).replace(/['()_*]/g, function(character) {
return '%' + character.charCodeAt().toString(16);
});
}
function zeroPad(number) {
return '00000000'.slice(String(number).length) + number;
}
function toASCII(string) {
return string.replace(regexBinaryGroup, function(group) {
return stringFromCharCode(parseInt(group, 2));
});
}
function toBinary(string) {
return string.replace(regexAnyCharacter, function(character) {
return zeroPad(character.charCodeAt().toString(2)) + ' ';
});
}
function convert(inputElement, regex, fn, outputElement) {
var value = inputElement.value,
result = '';
if (regex.test(value)) {
outputElement.value = result = fn(value);
inputElement.className = outputElement.className = '';
} else {
outputElement.value = 'ERROR: invalid input';
inputElement.className = outputElement.className = 'invalid';
}
return inputElement == ascii ? value : result;
}
function update() {
var value = this == binary
? // convert from binary to extended ASCII
convert(binary, regexBinary, toASCII, ascii)
: // convert from extended ASCII to binary
convert(ascii, regexExtendedASCII, toBinary, binary);
permalink.hash = encode(value);
storage && (storage.ascii = value);
};
// https://mathiasbynens.be/notes/oninput
ascii.onkeyup = binary.onkeyup = update;
ascii.oninput = binary.oninput = function() {
ascii.onkeyup = binary.onkeyup = null;
update.call(this);
};
if (storage) {
storage.ascii && (ascii.value = storage.ascii);
update();
}
window.onhashchange = function() {
ascii.value = decodeURIComponent(location.hash.slice(1));
update();
};
if (location.hash) {
window.onhashchange();
}
}(this, document));
// Google Analytics
window._gaq = [['_setAccount', 'UA-6065217-60'], ['_trackPageview']];
(function(d, t) {
var g = d.createElement(t);
var s = d.getElementsByTagName(t)[0];
g.src = 'https://www.google-analytics.com/ga.js';
s.parentNode.insertBefore(g, s);
}(document, 'script'));