blob: 40664d21d30319c77cdb317936e4616300a6cdd4 (
plain)
- <!doctype html>
- <html lang="en">
- <head>
- <meta charset="utf-8">
- <title>commonmark.js demo</title>
- <script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
- <script src="//maxcdn.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
- <link href="//maxcdn.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
- <script src="js/commonmark.js"></script>
- <script type="text/javascript">
- var writer = new commonmark.HtmlRenderer();
- var reader = new commonmark.DocParser();
- 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;
- }
- // via http://stackoverflow.com/questions/499126/jquery-set-cursor-position-in-text-area
- function setSelectionRange(input, selectionStart, selectionEnd) {
- if (input.setSelectionRange) {
- input.focus();
- input.setSelectionRange(selectionStart, selectionEnd);
- }
- else if (input.createTextRange) {
- var range = input.createTextRange();
- range.collapse(true);
- range.moveEnd('character', selectionEnd);
- range.moveStart('character', selectionStart);
- range.select();
- }
- }
- // via http://stackoverflow.com/questions/499126/jquery-set-cursor-position-in-text-area
- function setCaretToPos(input, pos) {
- setSelectionRange(input, pos, pos);
- }
- $(document).ready(function() {
- var timer;
- var x;
- var parsed;
- var render = function() {
- if (parsed === undefined) {
- return;
- }
- var startTime = new Date().getTime();
- var result = writer.renderBlock(parsed);
- var endTime = new Date().getTime();
- var renderTime = endTime - startTime;
- $("#preview").html(result);
- $("#html").text(result);
- $("#ast").text(commonmark.ASTRenderer(parsed));
- $("#rendertime").text(renderTime);
- };
- 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($("#text").val());
- var endTime = new Date().getTime();
- var parseTime = endTime - startTime;
- $("#parsetime").text(parseTime);
- $(".timing").css('visibility','visible');
- /*
- var warnings = parsed.warnings;
- $("#warnings").html('');
- for (i=0; i < warnings.length; i++) {
- var w = warnings[i];
- var warning = $("#warnings").append('<li></li>');
- $("#warnings li").last().text('Line ' + w.line + ' column ' + w.column + ': ' + w.message);
- }
- */
- render();
- }, 0); // ms delay
- };
- var initial_text = getQueryVariable("text");
- if (initial_text) {
- $("#text").val(initial_text);
- // show HTML tab if text is from query
- $('#result-tabs a[href="#result"]').tab('show');
- }
- // make tab insert a tab in the text box:
- $("#text").keydown(function(e) {
- if (e.which == 9) {
- e.preventDefault();
- if (this.selectionStart !== undefined) {
- var pos = this.selectionStart;
- this.value = this.value.substring(0, pos) + "\t" + this.value.substring(pos);
- setCaretToPos(this, pos + 1);
- } else {
- this.value += "\t";
- }
- }
- });
- parseAndRender();
- $("#clear-text-box").click(function(e) {
- $("#text").val('');
- window.location.search = "";
- parseAndRender();
- });
- $("#permalink").click(function(e) {
- window.location.pathname = "/index.html";
- window.location.search = "text=" + encodeURIComponent($("#text").val());
- });
- $("#text").bind('keyup paste cut mouseup', parseAndRender);
- $(".option").change(render);
- });
- </script>
- <style type="text/css">
- h1.title { font-family: monospace; font-size: 120%; font-weight: bold;
- margin-top: 0.5em; margin-bottom: 0; }
- textarea#text { height: 400px; width: 95%; font-family: monospace; font-size: 92%; }
- pre code#html { font-size: 92%; font-family: monospace; }
- pre#htmlpre { height: 400px; overflow: scroll; resize: vertical; width: 95%; }
- div#astpre { height: 400px; overflow: scroll; resize: vertical; width: 95%; }
- div#preview { height: 400px; overflow: scroll; resize: vertical; width: 95%; }
- div.row { margin-top: 1em; }
- blockquote { font-size: 100%; }
- footer { color: #555; text-align: center; margin: 1em; }
- pre { display: block; padding: 0.5em; color: #333; background: #f8f8ff }
- #warnings li { color: red; font-weight: bold; }
- label { padding-left: 1em; padding-top: 0; padding-bottom: 0; }
- div.timing { color: gray; visibility: hidden; height: 2em; }
- p#text-controls { height: 1em; margin-top: 1em; }
- a#permalink { margin-left: 1em; }
- span.timing { font-weight: bold; }
- span.timing { font-weight: bold; }
- </style>
- </head>
- <body>
- <div class="container">
- <div class="row">
- <div class="col-md-6">
- <h1 class="title">commonmark.js dingus</h1>
- </div>
- </div>
- <div class="row">
- <div class="col-md-6">
- <p id="text-controls"><a id="clear-text-box">clear</a> <a
- id="permalink">permalink</a></p>
- <textarea id="text"></textarea>
- <ul id="warnings"></ul>
- <div class="timing">Parsed in <span class="timing" id="parsetime"></span>
- ms. Rendered in <span class="timing" id="rendertime"></span> ms.</div>
- </div>
- <div class="col-md-6">
- <ul id="result-tabs" class="nav nav-tabs" role="tablist">
- <li class="active"><a href="#preview" role="tab" data-toggle="tab">Preview</a></li>
- <li><a href="#result" role="tab" data-toggle="tab">HTML</a></li>
- <li><a href="#result-ast" role="tab" data-toggle="tab">AST</a></li>
- </ul>
- <div class="tab-content">
- <div id="preview" class="tab-pane active">
- </div>
- <div id="result" class="tab-pane">
- <pre id="htmlpre"><code id="html"></code></pre>
- </div>
- <div id="result-ast" class="tab-pane">
- <pre id="astpre"><code id="ast"></code></pre>
- </div>
- </div>
- </div>
- </div>
- </body>
- </html>
|