-
Notifications
You must be signed in to change notification settings - Fork 3.4k
/
demo.js
107 lines (87 loc) · 2.82 KB
/
demo.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
102
103
104
105
106
107
(function () {
var $inputElem = document.querySelector('#input');
var $outputTypeElem = document.querySelector('#outputType');
var $previewElem = document.querySelector('#preview');
var $htmlElem = document.querySelector('#html');
var $lexerElem = document.querySelector('#lexer');
var $syntaxElem = document.querySelector('#syntax');
var $pane = document.querySelector('#rightContainer .pane');
var inputDirty = true;
var $activeElem = null;
if (top.document.location.href.match(/\?blank=1$/)) {
$inputElem.value = '';
}
var handleChange = function () {
var panes = document.querySelectorAll('#rightContainer .pane');
for (var i = 0; i < panes.length; i++) {
panes[i].style.display = 'none';
}
$activeElem = document.querySelector('#' + $outputTypeElem.value);
$activeElem.style.display = 'block';
};
$outputTypeElem.addEventListener('change', handleChange, false);
handleChange();
var handleInput = function () {
inputDirty = true;
};
$inputElem.addEventListener('change', handleInput, false);
$inputElem.addEventListener('keyup', handleInput, false);
$inputElem.addEventListener('keypress', handleInput, false);
$inputElem.addEventListener('keydown', handleInput, false);
var jsonString = function (input) {
var output = (input + '').
replace(/\n/g, '\\n').
replace(/\r/g, '\\r').
replace(/\t/g, '\\t').
replace(/\f/g, '\\f').
replace(/[\\"']/g, '\\$&').
replace(/\u0000/g, '\\0');
return '"' + output + '"';
};
var getScrollSize = function () {
var e = $activeElem;
return e.scrollHeight - e.clientHeight;
};
var getScrollPercent = function () {
var size = getScrollSize();
if (size <= 0) {
return 1;
}
return $activeElem.scrollTop / size;
};
var setScrollPercent = function (percent) {
$activeElem.scrollTop = percent * getScrollSize();
};
var delayTime = 1;
var checkForChanges = function () {
if (inputDirty) {
inputDirty = false;
var startTime = new Date();
var scrollPercent = getScrollPercent();
var lexed = marked.lexer($inputElem.value);
var lexedList = [];
for (var i = 0; i < lexed.length; i ++) {
var lexedLine = [];
for (var j in lexed[i]) {
lexedLine.push(j + ':' + jsonString(lexed[i][j]));
}
lexedList.push('{' + lexedLine.join(', ') + '}');
}
var parsed = marked.parser(lexed);
$previewElem.innerHTML = (parsed);
$htmlElem.value = (parsed);
$lexerElem.value = (lexedList.join('\n'));
setScrollPercent(scrollPercent);
var endTime = new Date();
delayTime = endTime - startTime;
if (delayTime < 50) {
delayTime = 50;
} else if (delayTime > 500) {
delayTime = 1000;
}
}
window.setTimeout(checkForChanges, delayTime);
};
checkForChanges();
setScrollPercent(0);
})();