Skip to content

Commit 5960ade

Browse files
mmalerbatinayuangao
authored andcommitted
class alias tags in html generated from markdown (#3525)
* class alias tags in html generated from markdown * addressed comments * address comments
1 parent fc31717 commit 5960ade

File tree

2 files changed

+44
-4
lines changed

2 files changed

+44
-4
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@
6868
"gulp-clean-css": "^3.0.3",
6969
"gulp-cli": "^1.2.2",
7070
"gulp-connect": "^5.0.0",
71+
"gulp-dom": "^0.9.17",
7172
"gulp-flatten": "^0.3.1",
7273
"gulp-highlight-files": "0.0.4",
7374
"gulp-htmlmin": "^3.0.0",

tools/gulp/tasks/docs.ts

Lines changed: 43 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ const highlight = require('gulp-highlight-files');
99
const rename = require('gulp-rename');
1010
const flatten = require('gulp-flatten');
1111
const hljs = require('highlight.js');
12+
const dom = require('gulp-dom');
1213

1314
// Our docs contain comments of the form `<!-- example(...) -->` which serve as placeholders where
1415
// example code should be inserted. We replace these comments with divs that have a
@@ -21,6 +22,26 @@ const EXAMPLE_PATTERN = /<!--\W*example\(([^)]+)\)\W*-->/g;
2122
// documentation page. Using a RegExp to rewrite links in HTML files to work in the docs.
2223
const LINK_PATTERN = /(<a[^>]*) href="([^"]*)"/g;
2324

25+
// HTML tags in the markdown generated files that should receive a .docs-markdown-${tagName} class
26+
// for styling purposes.
27+
const MARKDOWN_TAGS_TO_CLASS_ALIAS = [
28+
'a',
29+
'h1',
30+
'h2',
31+
'h3',
32+
'h4',
33+
'h5',
34+
'li',
35+
'ol',
36+
'p',
37+
'table',
38+
'tbody',
39+
'td',
40+
'th',
41+
'tr',
42+
'ul'
43+
];
44+
2445
task('docs', ['markdown-docs', 'highlight-docs', 'api-docs']);
2546

2647
task('markdown-docs', () => {
@@ -38,6 +59,7 @@ task('markdown-docs', () => {
3859
}
3960
}))
4061
.pipe(transform(transformMarkdownFiles))
62+
.pipe(dom(createTagNameAliaser('docs-markdown')))
4163
.pipe(dest('dist/docs/markdown'));
4264
});
4365

@@ -49,10 +71,10 @@ task('highlight-docs', () => {
4971
};
5072

5173
return src('src/examples/**/*.+(html|css|ts)')
52-
.pipe(flatten())
53-
.pipe(rename(renameFile))
54-
.pipe(highlight())
55-
.pipe(dest('dist/docs/examples'));
74+
.pipe(flatten())
75+
.pipe(rename(renameFile))
76+
.pipe(highlight())
77+
.pipe(dest('dist/docs/examples'));
5678
});
5779

5880
task('api-docs', () => {
@@ -95,3 +117,20 @@ function fixMarkdownDocLinks(link: string, filePath: string): string {
95117
// guides can be loaded in the Material docs.
96118
return `guide/${baseName}`;
97119
}
120+
121+
/**
122+
* Returns a function to be called with an HTML document as its context that aliases HTML tags by
123+
* adding a class consisting of a prefix + the tag name.
124+
* @param classPrefix The prefix to use for the alias class.
125+
*/
126+
function createTagNameAliaser(classPrefix: string) {
127+
return function() {
128+
MARKDOWN_TAGS_TO_CLASS_ALIAS.forEach(tag => {
129+
for (let el of this.querySelectorAll(tag)) {
130+
el.classList.add(`${classPrefix}-${tag}`);
131+
}
132+
});
133+
134+
return this;
135+
};
136+
}

0 commit comments

Comments
 (0)