"use strict"; (function main() { // Dependencies var markdownit = window.markdownit; var markdownlint = window.markdownlint.library; var helpers = window.markdownlint.helpers; var micromark = window.micromarkBrowser; var micromarkHtml = window.micromarkHtmlBrowser; // DOM elements var markdown = document.getElementById("markdown"); var markup = document.getElementById("markup"); var numbered = document.getElementById("numbered"); var violations = document.getElementById("violations"); var form = document.getElementsByTagName("form")[0]; var openFile = document.getElementById("openFile"); var copyLink = document.getElementById("copyLink"); // Variables var newLineRe = /\r\n|\r|\n/; var hashPrefix = "%m"; var allLintErrors = []; // Do-nothing function function noop() {} // Sanitize string for HTML display function sanitize(str) { return str .replace(/&/g, "&") .replace(//g, ">"); } // Renders directive metadata function handleDirective(directive) { const content = directive.content; delete directive.content; if (content) { this.tag("
");
}
this.tag("");
this.raw(this.encode(JSON.stringify(directive)));
this.tag("
");
this.raw(content);
if (content) {
this.tag("
");
}
}
// Renders Markdown to HTML
function render(markdown) {
const match = /^\?renderer=([a-z-]+)$/.exec(window.location.search);
const renderer = match ? match[1] : "micromark";
if (renderer === "markdown-it") {
return markdownit({ "html": true }).render(markdown);
} else if (renderer === "micromark") {
const parseOptions = {
"extensions": [
micromark.directive(),
micromark.gfmAutolinkLiteral(),
micromark.gfmFootnote(),
micromark.gfmTable(),
micromark.math()
]
};
const context = micromark.parse(parseOptions);
const chunks = micromark.preprocess()(markdown, undefined, true);
const events = micromark.postprocess(context.document().write(chunks));
const compileOptions = {
"allowDangerousHtml": true,
"htmlExtensions": [
micromarkHtml.directiveHtml({ "*": handleDirective }),
micromarkHtml.gfmAutolinkLiteralHtml(),
micromarkHtml.gfmFootnoteHtml(),
micromarkHtml.gfmTableHtml(),
micromarkHtml.mathHtml()
]
};
try {
return micromarkHtml.compile(compileOptions)(events);
} catch (error) {
return `[Exception: "${error}"]`;
}
}
return `[Unsupported renderer "${renderer}"]`;
}
// Handle input
function onMarkdownInput() {
// Markdown
var content = markdown.value;
// Markup
markup.innerHTML = render(content);
// Numbered
var lines = content.split(newLineRe);
var padding = lines.length.toString().replace(/\d/g, " ");
numbered.innerHTML = lines
.map(function mapNumberedLine(line, index) {
line = sanitize(line);
index++;
var paddedIndex = (padding + index).slice(-padding.length);
return "" + paddedIndex + ": " +
line + "";
}).join("\n");
// Violations
var options = {
"strings": {
"content": content
},
"config": {
"MD013": false
},
"handleRuleFailures": true
};
allLintErrors = markdownlint.sync(options).content;
violations.innerHTML = allLintErrors.map(function mapResult(result) {
var ruleName = result.ruleNames.slice(0, 2).join(" / ");
return "" +
result.lineNumber + " - " + ruleName + " " +
result.ruleDescription +
(result.errorDetail ?
" [" +
sanitize(result.errorDetail) +
"]" :
"") +
(result.errorContext ?
" [Context: \"" +
sanitize(result.errorContext) +
"\"]" :
"") +
(result.fixInfo ?
" [Fix]" :
"");
}).join("