diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 00000000..e4d02f42 --- /dev/null +++ b/.eslintignore @@ -0,0 +1 @@ +demo/markdownlint-browser.js diff --git a/.gitignore b/.gitignore index df9af16b..00b55f20 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ coverage +demo/markdownlint-browser.js node_modules npm-debug.log diff --git a/demo/default.css b/demo/default.css new file mode 100644 index 00000000..666bc27b --- /dev/null +++ b/demo/default.css @@ -0,0 +1,45 @@ +html, body { + height: 100%; +} +body { + margin: 0px; + font-family: "Segoe UI", GillSans, Helvetica, sans-serif; + font-weight: lighter; +} +header { + font-size: 140%; +} +footer { + font-size: 90%; + text-align: right; +} +textarea { + padding: 0; + resize: none; +} +.flex-rows { + display: flex; + flex-direction: column; + height: 100%; +} +.flex-columns { + display: flex; + flex-direction: row; + width: 100%; +} +.flex-fill { + flex-grow: 1; + flex-basis: 0; +} +.inset { + box-sizing: border-box; + padding: 2px; +} +.outlined { + border: 1px solid black; + margin: 1px; +} +.overflow-auto-scroll { + overflow-x: auto; + overflow-y: scroll; +} diff --git a/demo/default.htm b/demo/default.htm new file mode 100644 index 00000000..3f7b532a --- /dev/null +++ b/demo/default.htm @@ -0,0 +1,35 @@ + + + + + + + markdownlint demo + + +
+
+
markdownlint demo
+
+
+ +
+
+
+ +
+
+
+
+
+
+
+ +
+
+ + + + + + diff --git a/demo/default.js b/demo/default.js new file mode 100644 index 00000000..f231b7e2 --- /dev/null +++ b/demo/default.js @@ -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); +}()); diff --git a/demo/require-stub.js b/demo/require-stub.js new file mode 100644 index 00000000..9fcb8013 --- /dev/null +++ b/demo/require-stub.js @@ -0,0 +1,8 @@ +"use strict"; + +// Aliases "markdown-it" (expected) for "markdownit" (exported) +function require(module) { + if (module === "markdown-it") { + return window.markdownit; + } +} diff --git a/package.json b/package.json index dd27dae5..bd78d54c 100644 --- a/package.json +++ b/package.json @@ -15,13 +15,15 @@ "test": "nodeunit", "test-cover": "istanbul cover node_modules/nodeunit/bin/nodeunit", "debug": "node debug node_modules/nodeunit/bin/nodeunit", - "lint": "eslint lib test & eslint --rule \"no-console: 0, no-shadow: 0\" example", + "lint": "eslint lib test & eslint --env browser --global markdownit --global markdownlint --rule \"no-unused-vars: 0\" demo & eslint --rule \"no-console: 0, no-shadow: 0\" example", + "build-demo": "browserify lib/markdownlint.js --standalone markdownlint --exclude markdown-it --outfile demo/markdownlint-browser.js", "example": "npm install through2 & cd example & node standalone.js & grunt markdownlint & gulp markdownlint" }, "dependencies": { "markdown-it": "^4.1.1" }, "devDependencies": { + "browserify": "^10.0.0", "eslint": "^0.19.0", "istanbul": "^0.3.8", "nodeunit": "^0.9.1",