| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- $(function () {
- var $inputElem = $('#input');
- var $outputTypeElem = $('#outputType');
- var $previewElem = $('#preview');
- var $htmlElem = $('#html');
- var $lexerElem = $('#lexer');
- var $syntaxElem = $('#syntax');
- var inputDirty = true;
- var $activeElem = null;
- if (top.document.location.href.match(/\?blank=1$/)) {
- $inputElem.val('');
- }
- $outputTypeElem.change(function () {
- $('#rightContainer .pane').hide();
- $activeElem = $('#' + $outputTypeElem.val()).show();
- }).change();
- var noticeChange = function () {
- inputDirty = true;
- };
- $inputElem.
- change(noticeChange).
- keyup(noticeChange).
- keypress(noticeChange).
- keydown(noticeChange);
- 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[0];
- 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();
- // Save scroll position
- var scrollPercent = getScrollPercent();
- // Convert
- var markdown = $inputElem.val();
- var lexed = marked.lexer(markdown);
- // Grab lexed output and convert to a string before the parser
- // destroys the data
- 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);
- // Assign
- $previewElem.html(parsed);
- $htmlElem.val(parsed);
- $lexerElem.val(lexedList.join("\n"));
- // Set the scroll percent
- 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);
- });
|