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
+
+
+
+
+
+
+
+
+
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",