Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(docs): add passing test results to documentation #3541

Merged
merged 5 commits into from
Nov 24, 2024
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 1 addition & 5 deletions docs/INDEX.md
Original file line number Diff line number Diff line change
Expand Up @@ -143,11 +143,7 @@ Marked offers [advanced configurations](/using_advanced) and [extensibility](/us

We actively support the features of the following [Markdown flavors](https://github.com/commonmark/CommonMark/wiki/Markdown-Flavors).

| Flavor | Version | Status |
| :--------------------------------------------------------- | :------ | :----------------------------------------------------------------- |
| The original markdown.pl | -- | |
| [CommonMark](http://spec.commonmark.org/0.31.2/) | 0.31 | [Work in progress](https://github.com/markedjs/marked/issues/1202) |
| [GitHub Flavored Markdown](https://github.github.com/gfm/) | 0.29 | [Work in progress](https://github.com/markedjs/marked/issues/1202) |
<!--{{test-results-table}}-->

By supporting the above Markdown flavors, it's possible that Marked can help you use other flavors as well; however, these are not actively supported by the community.

Expand Down
40 changes: 37 additions & 3 deletions docs/build.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,41 @@
import '../marked.min.js';
import { promises } from 'fs';
import { join, dirname, parse, format } from 'path';
import { fileURLToPath } from 'url';
import { markedHighlight } from 'marked-highlight';
import { HighlightJS } from 'highlight.js';
import titleize from 'titleize';
import { getTests } from '@markedjs/testutils';

const { mkdir, rm, readdir, stat, readFile, writeFile, copyFile } = promises;
const { highlight, highlightAuto } = HighlightJS;
const cwd = process.cwd();
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const inputDir = join(cwd, 'docs');
const outputDir = join(cwd, 'public');
const templateFile = join(inputDir, '_document.html');
const isUppercase = str => /[A-Z_]+/.test(str);
const getTitle = str => str === 'INDEX' ? '' : titleize(str.replace(/_/g, ' ')) + ' - ';
const convertTestsToTable = (name, tests) => {
styfle marked this conversation as resolved.
Show resolved Hide resolved
let total = 0;
let passing = 0;
let table = '\n| Section | Passing | Percent |\n';
table += '|:--------|:--------|--------:|\n';
for (const [key, value] of Object.entries(tests)) {
total += value.total;
passing += value.pass;
table += ` | ${key}`;
table += ` | ${(value.pass)} of ${(value.total)}`;
table += ` | ${((value.pass) / value.total * 100).toFixed()}%`;
table += ' |\n';
}
return `\n<details name="markdown-spec">
<summary>${name} (${(passing / total * 100).toFixed()}%)</summary>
${table}
</details>\n`;
};
styfle marked this conversation as resolved.
Show resolved Hide resolved

const markedInstance = new marked.Marked(markedHighlight((code, language) => {
if (!language) {
return highlightAuto(code).value;
Expand All @@ -31,7 +54,16 @@ async function init() {
await copyFile(join(cwd, 'marked.min.js'), join(outputDir, 'marked.min.js'));
const tmpl = await readFile(templateFile, 'utf8');
console.log('Building markdown...');
await build(inputDir, tmpl);
const [original, commonmark, gfm] = await getTests([
join(__dirname, '../test/specs/original'),
join(__dirname, '../test/specs/commonmark'),
join(__dirname, '../test/specs/gfm'),
]);
const testResultsTable =
convertTestsToTable('Markdown 1.0', original)
+ convertTestsToTable('CommonMark 0.31', commonmark)
+ convertTestsToTable('GitHub Flavored Markdown 0.29', gfm);
await build(inputDir, tmpl, testResultsTable);
console.log('Build complete!');
}

Expand All @@ -41,7 +73,7 @@ const ignoredFiles = [
join(cwd, 'docs', '_document.html'),
];

async function build(currentDir, tmpl) {
async function build(currentDir, tmpl, testResultsTable) {
const files = await readdir(currentDir);
for (const file of files) {
const filename = join(currentDir, file);
Expand All @@ -56,7 +88,9 @@ async function build(currentDir, tmpl) {
let html = await readFile(filename, 'utf8');
const parsed = parse(filename);
if (parsed.ext === '.md' && isUppercase(parsed.name)) {
const mdHtml = markedInstance.parse(html);
const mdHtml = markedInstance.parse(
html.replace('<!--{{test-results-table}}-->', testResultsTable),
);
html = tmpl
.replace('<!--{{title}}-->', getTitle(parsed.name))
.replace('<!--{{content}}-->', mdHtml);
Expand Down
9 changes: 9 additions & 0 deletions docs/css/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,15 @@ pre code {
border-radius: 3px;
}

summary {
cursor: pointer;
padding: 3px 0px;
}

summary:hover {
color: #0366d6;
}

.div-copy {
position: absolute;
top: 0;
Expand Down