UNPKG

2.51 kBJavaScriptView Raw
1$(function () {
2 var $inputElem = $('#input');
3 var $outputTypeElem = $('#outputType');
4 var $previewElem = $('#preview');
5 var $htmlElem = $('#html');
6 var $lexerElem = $('#lexer');
7 var $syntaxElem = $('#syntax');
8 var inputDirty = true;
9 var $activeElem = null;
10
11 if (top.document.location.href.match(/\?blank=1$/)) {
12 $inputElem.val('');
13 }
14
15 $outputTypeElem.change(function () {
16 $('#rightContainer .pane').hide();
17 $activeElem = $('#' + $outputTypeElem.val()).show();
18 }).change();
19
20 var noticeChange = function () {
21 inputDirty = true;
22 };
23 $inputElem.
24 change(noticeChange).
25 keyup(noticeChange).
26 keypress(noticeChange).
27 keydown(noticeChange);
28
29 var jsonString = function (input) {
30 var output = (input + '').
31 replace(/\n/g, '\\n').
32 replace(/\r/g, '\\r').
33 replace(/\t/g, '\\t').
34 replace(/\f/g, '\\f').
35 replace(/[\\"']/g, '\\$&').
36 replace(/\u0000/g, '\\0');
37 return '"' + output + '"';
38 };
39
40 var getScrollSize = function () {
41 var e = $activeElem[0];
42
43 return e.scrollHeight - e.clientHeight;
44 };
45 var getScrollPercent = function () {
46 var size = getScrollSize();
47
48 if (size <= 0) {
49 return 1;
50 }
51
52 return $activeElem.scrollTop() / size;
53 };
54 var setScrollPercent = function (percent) {
55 $activeElem.scrollTop(percent * getScrollSize());
56 };
57
58 var delayTime = 1;
59 var checkForChanges = function () {
60 if (inputDirty) {
61 inputDirty = false;
62 var startTime = new Date();
63
64 // Save scroll position
65 var scrollPercent = getScrollPercent();
66
67 // Convert
68 var markdown = $inputElem.val();
69 var lexed = marked.lexer(markdown);
70
71 // Grab lexed output and convert to a string before the parser
72 // destroys the data
73 var lexedList = [];
74
75 for (var i = 0; i < lexed.length; i ++) {
76 var lexedLine = [];
77 for (var j in lexed[i]) {
78 lexedLine.push(j + ":" + jsonString(lexed[i][j]));
79 }
80 lexedList.push("{" + lexedLine.join(", ") + "}");
81 }
82
83 var parsed = marked.parser(lexed);
84
85 // Assign
86 $previewElem.html(parsed);
87 $htmlElem.val(parsed);
88 $lexerElem.val(lexedList.join("\n"));
89
90 // Set the scroll percent
91 setScrollPercent(scrollPercent);
92
93 var endTime = new Date();
94 delayTime = endTime - startTime;
95 if (delayTime < 50) {
96 delayTime = 50;
97 } else if (delayTime > 500) {
98 delayTime = 1000;
99 }
100 }
101 window.setTimeout(checkForChanges, delayTime);
102 };
103 checkForChanges();
104 setScrollPercent(0);
105});