UNPKG

commonmark

Version:

a strongly specified, highly compatible variant of Markdown

102 lines (96 loc) 3.31 kB
"use strict"; /*eslint-env browser*/ /*global $ */ var commonmark = window.commonmark; var writer = new commonmark.HtmlRenderer({ sourcepos: true }); var xmlwriter = new commonmark.XmlRenderer({ sourcepos: true }); var reader = new commonmark.Parser(); function getQueryVariable(variable) { var query = window.location.search.substring(1); var vars = query.split("&"); for (var i = 0; i < vars.length; i++) { var pair = vars[i].split("="); if (pair[0] === variable){ return decodeURIComponent(pair[1]); } } return null; } $(document).ready(function() { var editor = window.ace.edit("text"); editor.getSession().setUseWrapMode(false); editor.renderer.setShowGutter(false); // editor.setBehavioursEnabled(false); var timer; var x; var parsed; var render = function() { if (parsed === undefined) { return; } var startTime = new Date().getTime(); var result = writer.render(parsed); var endTime = new Date().getTime(); var renderTime = endTime - startTime; $("#preview").html(result); $("#html").text(result); $("#ast").text(xmlwriter.render(parsed)); $("#rendertime").text(renderTime); }; var syncScroll = function(e) { var lineHeight = editor.renderer.lineHeight; var lineNumber = Math.floor(e / lineHeight); var elt = $("#preview [data-sourcepos^='" + lineNumber + ":']").last(); if (elt.length > 0) { if (elt.offset()) { var curTop = $("#preview").scrollTop(); $("#preview").animate({ scrollTop: curTop + elt.offset().top - 100 }, 50); } } }; var markSelection = function() { var lineNumber = editor.selection.getCursor().row + 1; var elt = $("#preview [data-sourcepos^='" + lineNumber + ":']").last(); if (elt.length > 0) { $("#preview .selected").removeClass("selected"); elt.addClass("selected"); var curTop = $("#preview").scrollTop(); syncScroll(editor.getSession().getScrollTop()); } }; var parseAndRender = function() { if (x) { x.abort(); } // If there is an existing XHR, abort it. clearTimeout(timer); // Clear the timer so we don't end up with dupes. timer = setTimeout(function() { // assign timer a new timeout var startTime = new Date().getTime(); parsed = reader.parse(editor.getValue()); var endTime = new Date().getTime(); var parseTime = endTime - startTime; $("#parsetime").text(parseTime); $(".timing").css('visibility', 'visible'); render(); markSelection(); }, 0); // ms delay }; var initial_text = getQueryVariable("text"); if (initial_text) { editor.setValue(initial_text); // show HTML tab if text is from query $('#result-tabs a[href="#result"]').tab('show'); } parseAndRender(); $("#clear-text-box").click(function() { editor.setValue(''); parseAndRender(); }); $("#permalink").click(function() { window.location.pathname = "/index.html"; window.location.search = "text=" + encodeURIComponent(editor.getValue()); }); editor.getSession().on('change', parseAndRender); editor.getSession().on('changeScrollTop', syncScroll); editor.getSession().selection.on('changeCursor', markSelection); $(".option").change(render); });