1
+ import hljs from '@highlightjs/cdn-assets/es/highlight.js' ;
2
+ import '@highlightjs/cdn-assets/styles/vs2015.css' ;
3
+
1
4
import { onReset } from "./reset" ;
2
5
6
+
3
7
/**
4
8
*
5
9
* @param {string } language
@@ -184,7 +188,7 @@ export const renderCodeBlocks = () => {
184
188
const newCodeFragment = document . createFragment = document . createDocumentFragment ( ) ;
185
189
186
190
const originalCode = document . createElement ( 'div' ) ;
187
- originalCode . className = 'original-code' ;
191
+ originalCode . className = 'original-code' + ( codeBlock . className ? ' ' + codeBlock . className : '' ) ;
188
192
originalCode . innerHTML = codeBlock . innerHTML ;
189
193
newCodeFragment . appendChild ( originalCode ) ;
190
194
@@ -194,40 +198,61 @@ export const renderCodeBlocks = () => {
194
198
copyButton . addEventListener ( 'click' , ( ) => {
195
199
navigator . clipboard . writeText ( originalCode . textContent ) ;
196
200
copyButton . textContent = "Copied!"
201
+ copyButton . parentElement . querySelector ( '.copy-toast' ) . classList . add ( 'visible' ) ;
197
202
setTimeout ( function ( ) {
198
- copyButton . textContent = "Copy"
203
+ copyButton . textContent = "Copy" ;
204
+ copyButton . parentElement . querySelector ( '.copy-toast' ) . classList . remove ( 'visible' ) ;
199
205
} ,
200
206
2000 )
201
207
} ) ;
202
208
newCodeFragment . appendChild ( copyButton ) ;
209
+ const copyToast = document . createElement ( "div" ) ;
210
+ copyToast . className = "copy-toast" ;
211
+ copyToast . textContent = "Copied to clipboard" ;
212
+ newCodeFragment . appendChild ( copyToast ) ;
203
213
214
+ hljs . highlightElement ( codeBlock ) ;
215
+ console . log ( 'codeBlock:' , codeBlock ) ;
204
216
const newCode = [ ] ;
205
217
const codeLines = codeBlock . innerHTML . split ( '\n' ) ;
206
218
codeLines . forEach ( ( line , index ) => {
207
- newCode . push ( `<div class="code-line" style="--line-number: '${ index + 1 } '; --max-line-number-length: ${ ( codeLines . length + 1 ) . toString ( ) . length } ;">${ line } </div>` ) ;
219
+ newCode . push ( `<div class="code-line" style="--line-number: '${ index + 1 } '; --max-line-number-length: ${ ( codeLines . length + 1 ) . toString ( ) . length } ;"><span> ${ line } </span> </div>` ) ;
208
220
} ) ;
209
221
codeBlock . innerHTML = newCode . join ( '' ) ;
210
222
codeBlock . classList . add ( 'code-block' ) ;
211
223
if ( codeLines . length === 1 ) {
212
224
codeBlock . classList . add ( 'single-line' ) ;
213
225
}
226
+
214
227
codeBlock . appendChild ( newCodeFragment ) ;
215
228
} ) ;
216
229
217
230
if ( import . meta. webpackHot ) onReset ( ( ) => {
218
231
Array . from ( document . querySelectorAll ( '.programlisting' ) ) . forEach ( ( codeBlock ) => {
219
- const resetCodeFragment = document . createDocumentFragment ( ) ;
220
- resetCodeFragment . appendChild ( codeBlock . querySelector ( '.code-button' ) ) ;
221
232
const originalCode = codeBlock . querySelector ( '.original-code' ) ;
222
233
if ( originalCode ) {
223
234
codeBlock . innerHTML = originalCode . innerHTML ;
235
+ codeBlock . className = originalCode . className
236
+ codeBlock . classList . remove ( 'original-code' ) ;
237
+ delete ( codeBlock . dataset . highlighted ) ;
224
238
}
225
- codeBlock . appendChild ( resetCodeFragment ) ;
226
- codeBlock . classList . remove ( 'code-block' ) ;
227
- codeBlock . classList . remove ( 'single-line' ) ;
228
239
} ) ;
229
240
} ) ;
230
- }
241
+ } ;
242
+
243
+ export const renderCodeBlocksWithHighlightJs = ( ) => {
244
+ let originalCodeBlocks = [ ] ;
245
+ Array . from ( document . querySelectorAll ( '.programlisting' ) ) . forEach ( ( codeBlock ) => {
246
+ originalCodeBlocks . push ( codeBlock . innerHTML ) ;
247
+ hljs . highlightElement ( codeBlock ) ;
248
+ } ) ;
249
+
250
+ if ( import . meta. webpackHot ) onReset ( ( ) => {
251
+ Array . from ( document . querySelectorAll ( '.programlisting' ) ) . forEach ( ( codeBlock , index ) => {
252
+ codeBlock . innerHTML = originalCodeBlocks [ index ] ;
253
+ } ) ;
254
+ } ) ;
255
+ } ;
231
256
232
257
export const renderNavbarSearch = ( ) => {
233
258
const navbarHeader = document . querySelector ( '.navbar-header' ) ;
0 commit comments