"use strict"; (function main() { // 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"); // Instances var markdownit = window.markdownit(); var newLineRe = /\r\n|\r|\n/; // Handle input function onMarkdownInput() { // Markdown var content = markdown.value; // Markup markup.innerHTML = markdownit.render(content); // Numbered numbered.innerText = content.split(newLineRe) .map(function mapNumberedLine(line, index) { return (index + 1) + ": " + line; }).join("\n"); // Violations var options = { "strings": { "content": content } }; var results = window.markdownlint.sync(options).toString(); violations.innerText = results.split(newLineRe) .map(function mapResultLine(line) { return line.replace(/^content: /, ""); }).join("\n"); } // Load from a string or File object function loadMarkdown(source) { // Reset input element form.reset(); if (typeof source === "string") { // Update from string markdown.value = source; onMarkdownInput(); } else { // Update from File object var reader = new FileReader(); reader.onload = function readerOnload(e) { markdown.value = e.target.result; onMarkdownInput(); }; reader.readAsText(source); } } // Handle drag-and-drop function onDragOver(e) { if (e.dataTransfer && e.dataTransfer.dropEffect) { e.dataTransfer.dropEffect = "link"; e.preventDefault(); } } function onDrop(e) { if (e.dataTransfer && e.dataTransfer.files) { loadMarkdown(e.dataTransfer.files[0]); e.preventDefault(); } } // Handle file open function onOpenFileChange(e) { if (e.target && e.target.files) { loadMarkdown(e.target.files[0]); } } // Add event listeners document.body.addEventListener("dragover", onDragOver); document.body.addEventListener("drop", onDrop); openFile.addEventListener("change", onOpenFileChange); markdown.addEventListener("input", onMarkdownInput); }());