Add interactive demo page to show how markdownlint handles user content.

This commit is contained in:
David Anson 2015-05-03 21:50:25 -07:00
parent 43f28b90c1
commit dce6024e16
7 changed files with 178 additions and 1 deletions

85
demo/default.js Normal file
View file

@ -0,0 +1,85 @@
"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);
}());