Skip to content

Commit 4e4049c

Browse files
authored
docs: optimize code block structure (#16669)
* docs: optimize code block structure * docs: fix ui for firefox * docs: fix highlighter * fix: do not escape text code * Revert "fix: do not escape text code" This reverts commit 0e5c31e.
1 parent 54a7ade commit 4e4049c

3 files changed

Lines changed: 21 additions & 42 deletions

File tree

docs/.eleventy.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ const Image = require("@11ty/eleventy-img");
1010
const path = require("path");
1111
const { slug } = require("github-slugger");
1212
const yaml = require("js-yaml");
13-
const { highlighter, preWrapperPlugin, lineNumberPlugin } = require("./src/_plugins/md-syntax-highlighter");
13+
const { highlighter, lineNumberPlugin } = require("./src/_plugins/md-syntax-highlighter");
1414
const {
1515
DateTime
1616
} = require("luxon");
@@ -208,7 +208,6 @@ module.exports = function(eleventyConfig) {
208208
return generateAlertMarkup("important", tokens, idx);
209209
}
210210
})
211-
.use(preWrapperPlugin)
212211
.use(lineNumberPlugin)
213212
.disable("code");
214213

docs/src/_plugins/md-syntax-highlighter.js

Lines changed: 6 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ const loadLanguages = require("prismjs/components/");
3232
* @param {MarkdownIt} md markdown-it
3333
* @param {string} str code
3434
* @param {string} lang code language
35-
* @returns
35+
* @returns {string} highlighted result wrapped in pre
3636
*/
3737
const highlighter = function (md, str, lang) {
3838
let result = "";
@@ -41,29 +41,15 @@ const highlighter = function (md, str, lang) {
4141
loadLanguages([lang]);
4242
result = Prism.highlight(str, Prism.languages[lang], lang);
4343
} catch (err) {
44-
console.log(err);
44+
console.log(lang, err);
45+
// we still want to wrap the result later
46+
result = md.utils.escapeHtml(str);
4547
}
4648
} else {
4749
result = md.utils.escapeHtml(str);
4850
}
4951

50-
return `<pre><code>${result}</code></pre>`;
51-
};
52-
53-
/**
54-
*
55-
* modified from https://github.com/vuejs/vitepress/blob/main/src/node/markdown/plugins/preWrapper.ts
56-
* @param {MarkdownIt} md
57-
* @license MIT License. See file header.
58-
*/
59-
const preWrapperPlugin = (md) => {
60-
const fence = md.renderer.rules.fence;
61-
md.renderer.rules.fence = (...args) => {
62-
const [tokens, idx] = args;
63-
const lang = tokens[idx].info.trim();
64-
const rawCode = fence(...args);
65-
return `<div class="language-${lang}">${rawCode}</div>`;
66-
};
52+
return `<pre class="language-${lang}"><code>${result}</code></pre>`;
6753
};
6854

6955
/**
@@ -93,15 +79,13 @@ const lineNumberPlugin = (md) => {
9379
const lineNumbersWrapperCode = `<div class="line-numbers-wrapper" aria-hidden="true">${lineNumbersCode}</div>`;
9480

9581
const finalCode = rawCode
96-
.replace(/<\/div>$/, `${lineNumbersWrapperCode}</div>`)
82+
.replace(/<\/pre>\n/, `${lineNumbersWrapperCode}</pre>`)
9783
.replace(/"(language-\S*?)"/, '"$1 line-numbers-mode"')
9884
.replace(/<code>/, `<code class="language-${lang}">`)
99-
.replace(/<pre>/, `<pre class="language-${lang}">`);
10085

10186
return finalCode;
10287
};
10388
};
10489

10590
module.exports.highlighter = highlighter;
106-
module.exports.preWrapperPlugin = preWrapperPlugin;
10791
module.exports.lineNumberPlugin = lineNumberPlugin;

docs/src/assets/scss/syntax-highlighter.scss

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ pre[class*="language-"] {
3232
}
3333

3434
/* Code blocks */
35-
div[class*="language-"] {
35+
pre[class*="language-"] {
3636
padding: 1.5rem;
3737
margin: 1.5rem 0;
3838
overflow: auto;
@@ -43,6 +43,10 @@ div[class*="language-"] {
4343
[data-theme="dark"] & {
4444
color: var(--color-neutral-100);
4545
}
46+
47+
&.line-numbers-mode {
48+
padding-left: calc(1.5rem + 2.4em + 1.2rem);
49+
}
4650
}
4751

4852
:not(pre) > code[class*="language-"],
@@ -103,29 +107,21 @@ pre[class*="language-"] {
103107
.line-numbers-wrapper {
104108
position: absolute;
105109
top: 0;
110+
left: 1.5rem;
106111
text-align: right;
107112
padding-top: 1.5rem;
108113
font-size: 1em;
109114
font-family: var(--mono-font), Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;
110115
line-height: 1.5;
111116
color: var(--icon-color);
112-
}
113-
114-
.line-number {
115-
user-select: none;
116-
color: var(--icon-color);
117-
display: inline-block;
118-
font-variant-numeric: tabular-nums;
119-
text-align: right;
120-
width: 1.2em;
121-
}
122-
123-
div[class*="language-"].line-numbers-mode {
124-
position: relative;
117+
font-variant-ligatures: none;
125118

126-
pre[class*="language-"] {
127-
padding-left: calc(2.4em + 1.2rem);
128-
margin-top: 0;
129-
margin-bottom: 0;
119+
.line-number {
120+
user-select: none;
121+
color: var(--icon-color);
122+
display: inline-block;
123+
font-variant-numeric: tabular-nums;
124+
text-align: right;
125+
width: 1.2em;
130126
}
131127
}

0 commit comments

Comments
 (0)