@@ -7,18 +7,21 @@ const hljs = require('highlight.js/lib/highlight.js')
77hljs . registerLanguage ( 'javascript' , require ( 'highlight.js/lib/languages/javascript' ) )
88hljs . registerLanguage ( 'typescript' , require ( 'highlight.js/lib/languages/typescript' ) )
99hljs . registerLanguage ( 'json' , require ( 'highlight.js/lib/languages/json' ) )
10- hljs . registerLanguage ( 'xml' , require ( 'highlight.js/lib/languages/xml' ) ) // includes HTML
10+ hljs . registerLanguage ( 'xml' , require ( 'highlight.js/lib/languages/xml' ) ) // Includes HTML
1111hljs . registerLanguage ( 'css' , require ( 'highlight.js/lib/languages/css' ) )
1212hljs . registerLanguage ( 'scss' , require ( 'highlight.js/lib/languages/scss' ) )
13- hljs . registerLanguage ( 'bash' , require ( 'highlight.js/lib/languages/bash' ) ) // includes sh
13+ hljs . registerLanguage ( 'bash' , require ( 'highlight.js/lib/languages/bash' ) ) // Includes sh
1414hljs . registerLanguage ( 'shell' , require ( 'highlight.js/lib/languages/shell' ) )
1515hljs . registerLanguage ( 'plaintext' , require ( 'highlight.js/lib/languages/plaintext' ) )
1616
17- // Create a new marked renderer
18- const renderer = new marked . Renderer ( )
17+ // --- Constants ---
18+
19+ const RX_CODE_FILENAME = / ^ \/ \/ ( [ \w , \s - ] + \. [ A - Z a - z ] { 1 , 4 } ) \n / m
1920
2021const ANCHOR_LINK_HEADING_LEVELS = [ 2 , 3 , 4 , 5 ]
2122
23+ // --- Utility methods ---
24+
2225// Get routes by a given dir
2326const getRoutesByDir = ( root , dir , excludes = [ ] ) =>
2427 fs
@@ -27,20 +30,42 @@ const getRoutesByDir = (root, dir, excludes = []) =>
2730 . filter ( c => ! / \. ( s ? c s s | j s | t s ) $ / . test ( c ) )
2831 . map ( page => `/docs/${ dir } /${ page } ` )
2932
33+ // --- Custom renderer ---
34+
35+ // Create a new marked renderer
36+ const renderer = new marked . Renderer ( )
37+
3038// Custom "highlight.js" implementation for markdown renderer
3139renderer . code = ( code , language ) => {
40+ const attrs = {
41+ class : `hljs ${ language } p-2` ,
42+ translate : 'no'
43+ }
44+
45+ const [ , filename ] = RX_CODE_FILENAME . exec ( code ) || [ ]
46+ if ( filename ) {
47+ attrs [ 'data-filename' ] = filename
48+ code = code . replace ( RX_CODE_FILENAME , '' )
49+ }
50+
3251 const validLang = ! ! ( language && hljs . getLanguage ( language ) )
3352 const highlighted = validLang ? hljs . highlight ( language , code ) . value : code
34- return `<pre class="hljs ${ language } text-monospace p-2 notranslate" translate="no">${ highlighted } </pre>`
53+
54+ const attrsMarkup = Object . keys ( attrs ) . reduce (
55+ ( markup , attr ) => `${ markup } ${ markup ? ' ' : '' } ${ attr } ="${ attrs [ attr ] } "` ,
56+ ''
57+ )
58+
59+ return `<div class="bd-code"><pre ${ attrsMarkup } >${ highlighted } </pre></div>`
3560}
3661
37- // Instruct google translate not to translate `<code>` content, and
38- // don't let browsers wrap the contents across lines
39- renderer . codespan = text => {
40- return `<code translate="no" class="notranslate text-nowrap">${ text } </code>`
62+ // Instruct Google Translate not to translate `<code>` content
63+ // and don't let browsers wrap the contents across lines
64+ renderer . codespan = code => {
65+ return `<code class="text-nowrap" translate="no" >${ code } </code>`
4166}
4267
43- // Custom link renderer, to update bootstrap docs version in href
68+ // Custom link renderer, to update Bootstrap docs version in href
4469// Only applies to markdown links (not explicit `<a href="..">...</a>` tags
4570renderer . link = ( href , title , text ) => {
4671 let target = ''
@@ -92,7 +117,7 @@ renderer.heading = function(text, level, raw, slugger) {
92117 return `<h${ level } ${ attrs } >${ getTextMarkup ( text + anchor ) } </h${ level } >\n`
93118}
94119
95- // Convert lead-in blockquote paragraphs to true bootstrap docs leads
120+ // Convert lead-in blockquote paragraphs to true Bootstrap docs leads
96121renderer . blockquote = function ( text ) {
97122 return text . replace ( '<p>' , '<p class="bd-lead">' )
98123}
@@ -107,6 +132,8 @@ renderer.table = function() {
107132 return `<div class="table-responsive-sm">${ table } </div>`
108133}
109134
135+ // --- Main export ---
136+
110137module . exports = {
111138 srcDir : __dirname ,
112139
0 commit comments