Add ability to fix issues with markdownlint demo page, refactor slightly.

This commit is contained in:
David Anson 2020-09-15 21:15:35 -07:00
parent e1134f0db9
commit 3f637ba8e5
5 changed files with 44 additions and 30 deletions

View file

@ -1,4 +1,5 @@
demo/markdown-it.min.js
demo/markdownlint-browser.js
demo/markdownlint-browser.min.js
demo/markdownlint-rule-helpers-browser.js
example/typescript/type-check.js

1
.gitignore vendored
View file

@ -1,6 +1,7 @@
coverage
demo/markdown-it.min.js
demo/markdownlint-browser.min.js
demo/markdownlint-rule-helpers-browser.js
lib-es3
node_modules
npm-debug.log

View file

@ -16,8 +16,6 @@
var markdownit = window.markdownit({ "html": true });
var newLineRe = /\r\n|\r|\n/;
var hashPrefix = "%m";
var rulesMd = "https://github.com/DavidAnson/markdownlint" +
"/blob/main/doc/Rules.md";
// Do-nothing function
function noop() {}
@ -55,17 +53,15 @@
"config": {
"MD013": false
},
"handleRuleFailures": true
"handleRuleFailures": true,
"resultVersion": 3
};
var results = window.markdownlint.sync(options);
violations.innerHTML = results.content.map(function mapResult(result) {
var ruleName = result.ruleNames[0];
var ruleRef = rulesMd + "#" + ruleName.toLowerCase() + "---" +
result.ruleDescription.toLowerCase()
.replace(/ /g, "-")
.replace(/[()]/g, "");
return "<a href='#" + result.lineNumber + "'><em>" + result.lineNumber +
"</em></a> - <a href='" + ruleRef + "'>" + ruleName + "</a> " +
var ruleName = result.ruleNames.slice(0, 2).join(" / ");
return "<em><a href='#line' target='" + result.lineNumber + "'>" +
result.lineNumber + "</a></em> - <a href='" + result.ruleInformation +
"'>" + ruleName + "</a> " +
result.ruleDescription +
(result.errorDetail ?
" [<span class='detail'>" +
@ -76,13 +72,12 @@
" [<span class='detail'>Context: \"" +
sanitize(result.errorContext) +
"\"</span>]" :
"") +
(result.fixInfo ?
" [<a href='#fix' target='" +
encodeURIComponent(JSON.stringify(result)) +
"' class='detail'>Fix</a>]" :
"");
// + (result.errorRange ?
// " <u style='white-space: pre-wrap'>" +
// lines[result.lineNumber - 1].substr(
// result.errorRange[0] - 1, result.errorRange[1]) +
// "</u>" :
// "");
}).join("<br/>");
}
@ -127,16 +122,33 @@
}
// Handle violation navigation
function onLineNumberClick(e) {
var line = document.getElementById("l" + e.target.textContent);
if (line) {
var highlighted = document.getElementsByClassName("highlight");
Array.prototype.forEach.call(highlighted, function forElement(element) {
element.classList.remove("highlight");
});
line.classList.add("highlight");
line.scrollIntoView();
e.preventDefault();
function onViolationClick(e) {
switch (e.target.hash) {
case "#fix":
var error = JSON.parse(decodeURIComponent(e.target.target));
var errors = [ error ];
var fixed = window.helpers.applyFixes(markdown.value, errors);
markdown.value = fixed;
onMarkdownInput();
e.preventDefault();
break;
case "#line":
var line = document.getElementById("l" + e.target.target);
if (line) {
var highlighted = document.getElementsByClassName("highlight");
Array.prototype.forEach.call(
highlighted,
function forElement(element) {
element.classList.remove("highlight");
}
);
line.classList.add("highlight");
line.scrollIntoView();
}
e.preventDefault();
break;
default:
break;
}
}
@ -157,7 +169,7 @@
document.body.addEventListener("drop", onDrop);
openFile.addEventListener("change", onOpenFileChange);
markdown.addEventListener("input", onMarkdownInput);
violations.addEventListener("click", onLineNumberClick, true);
violations.addEventListener("click", onViolationClick, true);
copyLink.addEventListener("click", onCopyLinkClick);
/* eslint-disable max-len */
@ -205,7 +217,7 @@
// Detect legacy browsers
try {
/* eslint-disable-next-line no-new */
new URL(rulesMd);
new URL("https://example.com/");
/* eslint-disable-next-line unicorn/prefer-optional-catch-binding */
} catch (error) {
markdown.value = [

View file

@ -3435,7 +3435,7 @@ module.exports={
"ci": "npm run test-cover && npm run lint && npm run test-declaration",
"build-config-schema": "node schema/build-config-schema.js",
"build-declaration": "tsc --allowJs --declaration --outDir declaration --resolveJsonModule lib/markdownlint.js && cpy declaration/lib/markdownlint.d.ts lib && rimraf declaration",
"build-demo": "cpy node_modules/markdown-it/dist/markdown-it.min.js demo && cd demo && rimraf markdownlint-browser.* && cpy file-header.js . --rename=markdownlint-browser.js && tsc --allowJs --resolveJsonModule --outDir ../lib-es3 ../lib/markdownlint.js && cpy ../helpers/package.json ../lib-es3/helpers && browserify ../lib-es3/lib/markdownlint.js --standalone markdownlint >> markdownlint-browser.js && uglifyjs markdownlint-browser.js --compress --mangle --comments --output markdownlint-browser.min.js",
"build-demo": "cpy node_modules/markdown-it/dist/markdown-it.min.js demo && cd demo && rimraf markdownlint-browser.* && cpy file-header.js . --rename=markdownlint-browser.js && tsc --allowJs --resolveJsonModule --outDir ../lib-es3 ../lib/markdownlint.js && cpy ../helpers/package.json ../lib-es3/helpers && browserify ../lib-es3/lib/markdownlint.js --standalone markdownlint >> markdownlint-browser.js && browserify ../lib-es3/helpers/helpers.js --standalone helpers >> markdownlint-rule-helpers-browser.js && uglifyjs markdownlint-browser.js markdownlint-rule-helpers-browser.js --compress --mangle --comments --output markdownlint-browser.min.js",
"build-example": "npm install --no-save --ignore-scripts grunt grunt-cli gulp through2",
"example": "cd example && node standalone.js && grunt markdownlint --force && gulp markdownlint",
"clone-test-repos": "make-dir test-repos && cd test-repos && git clone https://github.com/eslint/eslint eslint-eslint --depth 1 --no-tags --quiet && git clone https://github.com/mkdocs/mkdocs mkdocs-mkdocs --depth 1 --no-tags --quiet && git clone https://github.com/pi-hole/docs pi-hole-docs --depth 1 --no-tags --quiet",

View file

@ -21,7 +21,7 @@
"ci": "npm run test-cover && npm run lint && npm run test-declaration",
"build-config-schema": "node schema/build-config-schema.js",
"build-declaration": "tsc --allowJs --declaration --outDir declaration --resolveJsonModule lib/markdownlint.js && cpy declaration/lib/markdownlint.d.ts lib && rimraf declaration",
"build-demo": "cpy node_modules/markdown-it/dist/markdown-it.min.js demo && cd demo && rimraf markdownlint-browser.* && cpy file-header.js . --rename=markdownlint-browser.js && tsc --allowJs --resolveJsonModule --outDir ../lib-es3 ../lib/markdownlint.js && cpy ../helpers/package.json ../lib-es3/helpers && browserify ../lib-es3/lib/markdownlint.js --standalone markdownlint >> markdownlint-browser.js && uglifyjs markdownlint-browser.js --compress --mangle --comments --output markdownlint-browser.min.js",
"build-demo": "cpy node_modules/markdown-it/dist/markdown-it.min.js demo && cd demo && rimraf markdownlint-browser.* && cpy file-header.js . --rename=markdownlint-browser.js && tsc --allowJs --resolveJsonModule --outDir ../lib-es3 ../lib/markdownlint.js && cpy ../helpers/package.json ../lib-es3/helpers && browserify ../lib-es3/lib/markdownlint.js --standalone markdownlint >> markdownlint-browser.js && browserify ../lib-es3/helpers/helpers.js --standalone helpers >> markdownlint-rule-helpers-browser.js && uglifyjs markdownlint-browser.js markdownlint-rule-helpers-browser.js --compress --mangle --comments --output markdownlint-browser.min.js",
"build-example": "npm install --no-save --ignore-scripts grunt grunt-cli gulp through2",
"example": "cd example && node standalone.js && grunt markdownlint --force && gulp markdownlint",
"clone-test-repos": "make-dir test-repos && cd test-repos && git clone https://github.com/eslint/eslint eslint-eslint --depth 1 --no-tags --quiet && git clone https://github.com/mkdocs/mkdocs mkdocs-mkdocs --depth 1 --no-tags --quiet && git clone https://github.com/pi-hole/docs pi-hole-docs --depth 1 --no-tags --quiet",