jdvp-codetabs-commonmark 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: eca94444e9aba079c4b5558382a600ae0c0d17c2b65e79664810a1b20fb39ba5
4
+ data.tar.gz: 1ba887d303d496aee0e35271fa3af259e14802fa7b2093429d93cebac1ea6494
5
+ SHA512:
6
+ metadata.gz: 91d4d73f46d90d2dfd0c4242074d771312abfdd13fa17c7bcf2aa8eb07644e492b362c080dbb277bd5a852b0d0de7ffaabdcf7f1046b094863fa1d56b3b29f76
7
+ data.tar.gz: 6e976ced253d219f8d99d357e6f9260956afea28cfe6f26df4819d480dae1b0adb67da732221dad04547fcf477cba4255cacd66e02a0fd671f96f7b7c0992abf
@@ -0,0 +1,823 @@
1
+ html,
2
+ html[data-code-block-theme="light"] {
3
+ --code-block-background-color: #F9F9F9;
4
+ --code-block-default-text-color: #555;
5
+ --code-block-action-button-color: #666666;
6
+ --code-block-bp-color: #366;
7
+ --code-block-c-color: #999;
8
+ --code-block-c1-color: #999;
9
+ --code-block-cd-color: #555;
10
+ --code-block-ch-color: #555;
11
+ --code-block-cm-color: #09f;
12
+ --code-block-cp-color: #099;
13
+ --code-block-cpf-color: #555;
14
+ --code-block-cs-color: #999;
15
+ --code-block-dl-color: #555;
16
+ --code-block-err-color: #a00;
17
+ --code-block-err-background-color: #faa;
18
+ --code-block-gd-color: #555;
19
+ --code-block-gd-background-color: #fcc;
20
+ --code-block-gh-color: #030;
21
+ --code-block-gi-color: #555;
22
+ --code-block-gi-background-color: #cfc;
23
+ --code-block-gi-border-color: #0c0;
24
+ --code-block-go-color: #aaa;
25
+ --code-block-gp-color: #009;
26
+ --code-block-gr-color: #f00;
27
+ --code-block-gt-color: #9c6;
28
+ --code-block-gu-color: #030;
29
+ --code-block-il-color: #f60;
30
+ --code-block-k-color: #069;
31
+ --code-block-kc-color: #069;
32
+ --code-block-kd-color: #069;
33
+ --code-block-kn-color: #069;
34
+ --code-block-kp-color: #069;
35
+ --code-block-kr-color: #069;
36
+ --code-block-kt-color: #078;
37
+ --code-block-m-color: #f60;
38
+ --code-block-mb-color: #f60;
39
+ --code-block-mf-color: #f60;
40
+ --code-block-mh-color: #f60;
41
+ --code-block-mi-color: #f60;
42
+ --code-block-mo-color: #f60;
43
+ --code-block-mx-color: #f60;
44
+ --code-block-na-color: #4f9fcf;
45
+ --code-block-nb-color: #366;
46
+ --code-block-nc-color: #0a8;
47
+ --code-block-nd-color: #99f;
48
+ --code-block-ne-color: #c00;
49
+ --code-block-nf-color: #c0f;
50
+ --code-block-ni-color: #999;
51
+ --code-block-nl-color: #99f;
52
+ --code-block-nn-color: #0cf;
53
+ --code-block-no-color: #360;
54
+ --code-block-nt-color: #2f6f9f;
55
+ --code-block-nv-color: #033;
56
+ --code-block-o-color: #555;
57
+ --code-block-ow-color: #000;
58
+ --code-block-p-color: #555;
59
+ --code-block-pi-color: #555;
60
+ --code-block-s-color: #d44950;
61
+ --code-block-s1-color: #c30;
62
+ --code-block-s2-color: #c30;
63
+ --code-block-sa-color: #555;
64
+ --code-block-sb-color: #c30;
65
+ --code-block-sc-color: #c30;
66
+ --code-block-sd-color: #c30;
67
+ --code-block-se-color: #c30;
68
+ --code-block-sh-color: #c30;
69
+ --code-block-si-color: #a00;
70
+ --code-block-sr-color: #3aa;
71
+ --code-block-ss-color: #fc3;
72
+ --code-block-sx-color: #c30;
73
+ --code-block-vc-color: #033;
74
+ --code-block-vg-color: #033;
75
+ --code-block-vi-color: #033;
76
+ --code-block-w-color: #bbb;
77
+ }
78
+
79
+ html[data-code-block-theme="dark"] {
80
+ --code-block-background-color: #272822;
81
+ --code-block-default-text-color: #f8f8f2;
82
+ --code-block-action-button-color: #a8a8a8;
83
+ --code-block-bp-color: #f8f8f2;
84
+ --code-block-c-color: #75715e;
85
+ --code-block-c1-color: #75715e;
86
+ --code-block-cd-color: #75715e;
87
+ --code-block-ch-color: #75715e;
88
+ --code-block-cm-color: #75715e;
89
+ --code-block-cp-color: #f4bf75;
90
+ --code-block-cpf-color: #75715e;
91
+ --code-block-cs-color: #75715e;
92
+ --code-block-dl-color: #a6e22e;
93
+ --code-block-err-color: #272822;
94
+ --code-block-err-background-color: #f92672;
95
+ --code-block-gd-color: #f92672;
96
+ --code-block-gd-background-color: transparent;
97
+ --code-block-gh-background-color: #272822;
98
+ --code-block-gh-color: #66d9ef;
99
+ --code-block-gh-font-weight: bold;
100
+ --code-block-gi-color: #a6e22e;
101
+ --code-block-gi-background-color: transparent;
102
+ --code-block-gi-border-color: transparent;
103
+ --code-block-go-color: #f8f8f2;
104
+ --code-block-gp-color: #f8f8f2;
105
+ --code-block-gr-color: #f8f8f2;
106
+ --code-block-gt-color: #f8f8f2;
107
+ --code-block-gu-color: #f8f8f2;
108
+ --code-block-il-color: #a6e22e;
109
+ --code-block-k-color: #ae81ff;
110
+ --code-block-kc-color: #fd971f;
111
+ --code-block-kd-color: #fd971f;
112
+ --code-block-kn-color: #ae81ff;
113
+ --code-block-kp-color: #ae81ff;
114
+ --code-block-kr-color: #ae81ff;
115
+ --code-block-kt-color: #fd971f;
116
+ --code-block-kv-color: #ae81ff;
117
+ --code-block-m-color: #a6e22e;
118
+ --code-block-mb-color: #a6e22e;
119
+ --code-block-mf-color: #a6e22e;
120
+ --code-block-mh-color: #a6e22e;
121
+ --code-block-mi-color: #a6e22e;
122
+ --code-block-mo-color: #a6e22e;
123
+ --code-block-mx-color: #a6e22e;
124
+ --code-block-na-color: #66d9ef;
125
+ --code-block-nb-color: #f8f8f2;
126
+ --code-block-nc-color: #f4bf75;
127
+ --code-block-nd-color: #f8f8f2;
128
+ --code-block-ne-color: #f8f8f2;
129
+ --code-block-nf-color: #f8f8f2;
130
+ --code-block-ni-color: #f8f8f2;
131
+ --code-block-nl-color: #f8f8f2;
132
+ --code-block-nn-color: #f4bf75;
133
+ --code-block-no-color: #f4bf75;
134
+ --code-block-nt-color: #f4bf75;
135
+ --code-block-nv-color: #f8f8f2;
136
+ --code-block-o-color: #f8f8f2;
137
+ --code-block-ow-color: #f8f8f2;
138
+ --code-block-p-color: #f8f8f2;
139
+ --code-block-pi-color: #f8f8f2;
140
+ --code-block-s-color: #a6e22e;
141
+ --code-block-s1-color: #a6e22e;
142
+ --code-block-s2-color: #a6e22e;
143
+ --code-block-sa-color: #ae81ff;
144
+ --code-block-sb-color: #a6e22e;
145
+ --code-block-sc-color: #a6e22e;
146
+ --code-block-sd-color: #a6e22e;
147
+ --code-block-se-color: #cc6633;
148
+ --code-block-sh-color: #a6e22e;
149
+ --code-block-si-color: #cc6633;
150
+ --code-block-sr-color: #a1efe4;
151
+ --code-block-ss-color: #a6e22e;
152
+ --code-block-sx-color: #a6e22e;
153
+ --code-block-vc-color: #f8f8f2;
154
+ --code-block-vg-color: #f8f8f2;
155
+ --code-block-vi-color: #f8f8f2;
156
+ --code-block-w-color: #f8f8f2;
157
+ }
158
+
159
+ @media (prefers-color-scheme: dark) {
160
+ html,
161
+ html[data-code-block-theme="dark"] {
162
+ --code-block-background-color: #272822;
163
+ --code-block-default-text-color: #f8f8f2;
164
+ --code-block-action-button-color: #a8a8a8;
165
+ --code-block-bp-color: #f8f8f2;
166
+ --code-block-c-color: #75715e;
167
+ --code-block-c1-color: #75715e;
168
+ --code-block-cd-color: #75715e;
169
+ --code-block-ch-color: #75715e;
170
+ --code-block-cm-color: #75715e;
171
+ --code-block-cp-color: #f4bf75;
172
+ --code-block-cpf-color: #75715e;
173
+ --code-block-cs-color: #75715e;
174
+ --code-block-dl-color: #a6e22e;
175
+ --code-block-err-color: #272822;
176
+ --code-block-err-background-color: #f92672;
177
+ --code-block-gd-color: #f92672;
178
+ --code-block-gd-background-color: transparent;
179
+ --code-block-gh-background-color: #272822;
180
+ --code-block-gh-color: #66d9ef;
181
+ --code-block-gh-font-weight: bold;
182
+ --code-block-gi-color: #a6e22e;
183
+ --code-block-gi-background-color: transparent;
184
+ --code-block-gi-border-color: transparent;
185
+ --code-block-go-color: #f8f8f2;
186
+ --code-block-gp-color: #f8f8f2;
187
+ --code-block-gr-color: #f8f8f2;
188
+ --code-block-gt-color: #f8f8f2;
189
+ --code-block-gu-color: #f8f8f2;
190
+ --code-block-il-color: #a6e22e;
191
+ --code-block-k-color: #ae81ff;
192
+ --code-block-kc-color: #fd971f;
193
+ --code-block-kd-color: #fd971f;
194
+ --code-block-kn-color: #ae81ff;
195
+ --code-block-kp-color: #ae81ff;
196
+ --code-block-kr-color: #ae81ff;
197
+ --code-block-kt-color: #fd971f;
198
+ --code-block-kv-color: #ae81ff;
199
+ --code-block-m-color: #a6e22e;
200
+ --code-block-mb-color: #a6e22e;
201
+ --code-block-mf-color: #a6e22e;
202
+ --code-block-mh-color: #a6e22e;
203
+ --code-block-mi-color: #a6e22e;
204
+ --code-block-mo-color: #a6e22e;
205
+ --code-block-mx-color: #a6e22e;
206
+ --code-block-na-color: #66d9ef;
207
+ --code-block-nb-color: #f8f8f2;
208
+ --code-block-nc-color: #f4bf75;
209
+ --code-block-nd-color: #f8f8f2;
210
+ --code-block-ne-color: #f8f8f2;
211
+ --code-block-nf-color: #f8f8f2;
212
+ --code-block-ni-color: #f8f8f2;
213
+ --code-block-nl-color: #f8f8f2;
214
+ --code-block-nn-color: #f4bf75;
215
+ --code-block-no-color: #f4bf75;
216
+ --code-block-nt-color: #f4bf75;
217
+ --code-block-nv-color: #f8f8f2;
218
+ --code-block-o-color: #f8f8f2;
219
+ --code-block-ow-color: #f8f8f2;
220
+ --code-block-p-color: #f8f8f2;
221
+ --code-block-pi-color: #f8f8f2;
222
+ --code-block-s-color: #a6e22e;
223
+ --code-block-s1-color: #a6e22e;
224
+ --code-block-s2-color: #a6e22e;
225
+ --code-block-sa-color: #ae81ff;
226
+ --code-block-sb-color: #a6e22e;
227
+ --code-block-sc-color: #a6e22e;
228
+ --code-block-sd-color: #a6e22e;
229
+ --code-block-se-color: #cc6633;
230
+ --code-block-sh-color: #a6e22e;
231
+ --code-block-si-color: #cc6633;
232
+ --code-block-sr-color: #a1efe4;
233
+ --code-block-ss-color: #a6e22e;
234
+ --code-block-sx-color: #a6e22e;
235
+ --code-block-vc-color: #f8f8f2;
236
+ --code-block-vg-color: #f8f8f2;
237
+ --code-block-vi-color: #f8f8f2;
238
+ --code-block-w-color: #f8f8f2;
239
+ }
240
+ html[data-code-block-theme="light"] {
241
+ --code-block-background-color: #F9F9F9;
242
+ --code-block-default-text-color: #555;
243
+ --code-block-action-button-color: #666666;
244
+ --code-block-bp-color: #366;
245
+ --code-block-c-color: #999;
246
+ --code-block-c1-color: #999;
247
+ --code-block-cd-color: #555;
248
+ --code-block-ch-color: #555;
249
+ --code-block-cm-color: #09f;
250
+ --code-block-cp-color: #099;
251
+ --code-block-cpf-color: #555;
252
+ --code-block-cs-color: #999;
253
+ --code-block-dl-color: #555;
254
+ --code-block-err-color: #a00;
255
+ --code-block-err-background-color: #faa;
256
+ --code-block-gd-color: #555;
257
+ --code-block-gd-background-color: #fcc;
258
+ --code-block-gh-color: #030;
259
+ --code-block-gi-color: #555;
260
+ --code-block-gi-background-color: #cfc;
261
+ --code-block-gi-border-color: #0c0;
262
+ --code-block-go-color: #aaa;
263
+ --code-block-gp-color: #009;
264
+ --code-block-gr-color: #f00;
265
+ --code-block-gt-color: #9c6;
266
+ --code-block-gu-color: #030;
267
+ --code-block-il-color: #f60;
268
+ --code-block-k-color: #069;
269
+ --code-block-kc-color: #069;
270
+ --code-block-kd-color: #069;
271
+ --code-block-kn-color: #069;
272
+ --code-block-kp-color: #069;
273
+ --code-block-kr-color: #069;
274
+ --code-block-kt-color: #078;
275
+ --code-block-m-color: #f60;
276
+ --code-block-mb-color: #f60;
277
+ --code-block-mf-color: #f60;
278
+ --code-block-mh-color: #f60;
279
+ --code-block-mi-color: #f60;
280
+ --code-block-mo-color: #f60;
281
+ --code-block-mx-color: #f60;
282
+ --code-block-na-color: #4f9fcf;
283
+ --code-block-nb-color: #366;
284
+ --code-block-nc-color: #0a8;
285
+ --code-block-nd-color: #99f;
286
+ --code-block-ne-color: #c00;
287
+ --code-block-nf-color: #c0f;
288
+ --code-block-ni-color: #999;
289
+ --code-block-nl-color: #99f;
290
+ --code-block-nn-color: #0cf;
291
+ --code-block-no-color: #360;
292
+ --code-block-nt-color: #2f6f9f;
293
+ --code-block-nv-color: #033;
294
+ --code-block-o-color: #555;
295
+ --code-block-ow-color: #000;
296
+ --code-block-p-color: #555;
297
+ --code-block-pi-color: #555;
298
+ --code-block-s-color: #d44950;
299
+ --code-block-s1-color: #c30;
300
+ --code-block-s2-color: #c30;
301
+ --code-block-sa-color: #555;
302
+ --code-block-sb-color: #c30;
303
+ --code-block-sc-color: #c30;
304
+ --code-block-sd-color: #c30;
305
+ --code-block-se-color: #c30;
306
+ --code-block-sh-color: #c30;
307
+ --code-block-si-color: #a00;
308
+ --code-block-sr-color: #3aa;
309
+ --code-block-ss-color: #fc3;
310
+ --code-block-sx-color: #c30;
311
+ --code-block-vc-color: #033;
312
+ --code-block-vg-color: #033;
313
+ --code-block-vi-color: #033;
314
+ --code-block-w-color: #bbb;
315
+ }
316
+ }
317
+
318
+ .highlight {
319
+ color: var(--code-block-default-text-color);
320
+ }
321
+
322
+ .highlight .bp {
323
+ color: var(--code-block-bp-color);
324
+ }
325
+
326
+ .highlight .c {
327
+ color: var(--code-block-c-color);
328
+ }
329
+
330
+ .highlight .c1 {
331
+ color: var(--code-block-c1-color);
332
+ }
333
+
334
+ .highlight .cd {
335
+ color: var(--code-block-cd-color);
336
+ }
337
+
338
+ .highlight .ch {
339
+ color: var(--code-block-ch-color);
340
+ }
341
+
342
+ .highlight .cm {
343
+ color: var(--code-block-cm-color);
344
+ }
345
+
346
+ .highlight .cp {
347
+ color: var(--code-block-cp-color);
348
+ }
349
+
350
+ .highlight .cpf {
351
+ color: var(--code-block-cpf-color);
352
+ }
353
+
354
+ .highlight .cs {
355
+ color: var(--code-block-cs-color);
356
+ }
357
+
358
+ .highlight .dl {
359
+ color: var(--code-block-dl-color, --code-block-default-text-color);
360
+ }
361
+
362
+ .highlight .err {
363
+ color: var(--code-block-err-color);
364
+ background-color: var(--code-block-err-background-color);
365
+ }
366
+
367
+ .highlight .gd {
368
+ color: var(--code-block-gd-color);
369
+ background-color: var(--code-block-gd-background-color);
370
+ }
371
+
372
+ .highlight .ge {
373
+ font-style: italic;
374
+ }
375
+
376
+ .highlight .gh {
377
+ font-weight: var(--code-block-gh-font-weight, normal);
378
+ background-color: var(--code-block-gh-background-color, transparent);
379
+ color: var(--code-block-gh-color);
380
+ }
381
+
382
+ .highlight .gi {
383
+ color: var(--code-block-gi-color);
384
+ background-color: var(--code-block-gi-background-color);
385
+ border: 1px solid var(--code-block-gi-border-color);
386
+ }
387
+
388
+ .highlight .go {
389
+ color: var(--code-block-go-color);
390
+ }
391
+
392
+ .highlight .gp {
393
+ color: var(--code-block-gp-color);
394
+ }
395
+
396
+ .highlight .gr {
397
+ color: var(--code-block-gr-color);
398
+ }
399
+
400
+ .highlight .gs {}
401
+
402
+ .highlight .gt {
403
+ color: var(--code-block-gt-color);
404
+ }
405
+
406
+ .highlight .gu {
407
+ color: var(--code-block-gu-color);
408
+ }
409
+
410
+ .highlight .hll {
411
+ background-color: var(--code-block-background-color);
412
+ }
413
+
414
+ .highlight .il {
415
+ color: var(--code-block-il-color);
416
+ }
417
+
418
+ .highlight .k {
419
+ color: var(--code-block-k-color);
420
+ }
421
+
422
+ .highlight .kc {
423
+ color: var(--code-block-kc-color);
424
+ }
425
+
426
+ .highlight .kd {
427
+ color: var(--code-block-kd-color);
428
+ }
429
+
430
+ .highlight .kn {
431
+ color: var(--code-block-kn-color);
432
+ }
433
+
434
+ .highlight .kp {
435
+ color: var(--code-block-kp-color);
436
+ }
437
+
438
+ .highlight .kr {
439
+ color: var(--code-block-kr-color);
440
+ }
441
+
442
+ .highlight .kt {
443
+ color: var(--code-block-kt-color);
444
+ }
445
+
446
+ .highlight .kv {
447
+ color: var(--code-block-kv-color, --code-block-default-text-color);
448
+ }
449
+
450
+ .highlight .m {
451
+ color: var(--code-block-m-color);
452
+ }
453
+
454
+ .highlight .mb {
455
+ color: var(--code-block-mb-color);
456
+ }
457
+
458
+ .highlight .mf {
459
+ color: var(--code-block-mf-color);
460
+ }
461
+
462
+ .highlight .mh {
463
+ color: var(--code-block-mh-color);
464
+ }
465
+
466
+ .highlight .mi {
467
+ color: var(--code-block-mi-color);
468
+ }
469
+
470
+ .highlight .mo {
471
+ color: var(--code-block-mo-color);
472
+ }
473
+
474
+ .highlight .mx {
475
+ color: var(--code-block-mx-color);
476
+ }
477
+
478
+ .highlight .na {
479
+ color: var(--code-block-na-color);
480
+ }
481
+
482
+ .highlight .nb {
483
+ color: var(--code-block-nb-color);
484
+ }
485
+
486
+ .highlight .nc {
487
+ color: var(--code-block-nc-color);
488
+ }
489
+
490
+ .highlight .nd {
491
+ color: var(--code-block-nd-color);
492
+ }
493
+
494
+ .highlight .ne {
495
+ color: var(--code-block-ne-color);
496
+ }
497
+
498
+ .highlight .nf {
499
+ color: var(--code-block-nf-color);
500
+ }
501
+
502
+ .highlight .ni {
503
+ color: var(--code-block-ni-color);
504
+ }
505
+
506
+ .highlight .nl {
507
+ color: var(--code-block-nl-color);
508
+ }
509
+
510
+ .highlight .nn {
511
+ color: var(--code-block-nn-color);
512
+ }
513
+
514
+ .highlight .no {
515
+ color: var(--code-block-no-color);
516
+ }
517
+
518
+ .highlight .nt {
519
+ color: var(--code-block-nt-color);
520
+ }
521
+
522
+ .highlight .nv {
523
+ color: var(--code-block-nv-color);
524
+ }
525
+
526
+ .highlight .o {
527
+ color: var(--code-block-o-color);
528
+ }
529
+
530
+ .highlight .ow {
531
+ color: var(--code-block-ow-color);
532
+ }
533
+
534
+ .highlight .p {
535
+ color: var(--code-block-p-color);
536
+ }
537
+
538
+ .highlight .pi {
539
+ color: var(--code-block-pi-color);
540
+ }
541
+
542
+ .highlight .s {
543
+ color: var(--code-block-s-color);
544
+ }
545
+
546
+ .highlight .sa {
547
+ color: var(--code-block-sa-color, --code-block-default-text-color)
548
+ }
549
+
550
+ .highlight .s1 {
551
+ color: var(--code-block-s1-color);
552
+ }
553
+
554
+ .highlight .s2 {
555
+ color: var(--code-block-s2-color);
556
+ }
557
+
558
+ .highlight .sb {
559
+ color: var(--code-block-sb-color);
560
+ }
561
+
562
+ .highlight .sc {
563
+ color: var(--code-block-sc-color);
564
+ }
565
+
566
+ .highlight .sd {
567
+ color: var(--code-block-sd-color);
568
+ font-style: italic;
569
+ }
570
+
571
+ .highlight .se {
572
+ color: var(--code-block-se-color);
573
+ }
574
+
575
+ .highlight .sh {
576
+ color: var(--code-block-sh-color);
577
+ }
578
+
579
+ .highlight .si {
580
+ color: var(--code-block-si-color);
581
+ }
582
+
583
+ .highlight .sr {
584
+ color: var(--code-block-sr-color);
585
+ }
586
+
587
+ .highlight .ss {
588
+ color: var(--code-block-ss-color);
589
+ }
590
+
591
+ .highlight .sx {
592
+ color: var(--code-block-sx-color);
593
+ }
594
+
595
+ .highlight .vc {
596
+ color: var(--code-block-vc-color);
597
+ }
598
+
599
+ .highlight .vg {
600
+ color: var(--code-block-vg-color);
601
+ }
602
+
603
+ .highlight .vi {
604
+ color: var(--code-block-vi-color);
605
+ }
606
+
607
+ .highlight .w {
608
+ color: var(--code-block-w-color);
609
+ }
610
+
611
+ pre,
612
+ code {
613
+ font-family: Roboto Mono, monospace;
614
+ }
615
+
616
+ code {
617
+ background-color: #F9F9F9;
618
+ border-radius: 3px;
619
+ font-size: 85%;
620
+ padding: 0.25em 0.5em;
621
+ }
622
+
623
+ .highlight code {
624
+ background-color: var(--code-block-background-color);
625
+ padding: 0 0;
626
+ }
627
+
628
+ pre {
629
+ margin: 0 0 1rem;
630
+ }
631
+
632
+ pre code {
633
+ background-color: transparent;
634
+ color: inherit;
635
+ font-size: 90%;
636
+ padding: 0;
637
+ white-space: pre;
638
+ }
639
+
640
+ .highlight {
641
+ background-color: var(--code-block-background-color);
642
+ border-radius: 8px;
643
+ line-height: 1.4;
644
+ margin: 0 0 1rem;
645
+ padding: 1rem;
646
+ border: 1px solid #e8eaed;
647
+ }
648
+
649
+ .highlight pre {
650
+ margin-bottom: 0;
651
+ overflow-x: auto;
652
+ }
653
+
654
+ .highlight .lineno {
655
+ color: #aaa;
656
+ display: inline-block;
657
+ padding: 0 0.75rem 0 0.25rem;
658
+ -webkit-user-select: none;
659
+ -moz-user-select: none;
660
+ user-select: none;
661
+ }
662
+
663
+ .highlight .highlight {
664
+ border: none;
665
+ margin: 0;
666
+ }
667
+
668
+ .code-tab-container {
669
+ display: flex;
670
+ flex-wrap: wrap;
671
+ list-style: none;
672
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
673
+ font-size: 20px;
674
+ font-weight: 400;
675
+ -webkit-text-size-adjust: 100%;
676
+ background: #fff;
677
+ border-radius: 8px 8px 0px 0px;
678
+ border: 1px solid #e8eaed;
679
+ margin: 0;
680
+ padding: 0;
681
+ list-style-type: none;
682
+ }
683
+
684
+ .code-tab-container a:hover,
685
+ .code-tab-container a:visited,
686
+ .code-tab-container a:link,
687
+ .code-tab-container a:active {
688
+ text-decoration: none !important;
689
+ }
690
+
691
+ .code-tab-container a:hover {
692
+ color: #000;
693
+ border-color: #bcbcbc;
694
+ }
695
+
696
+ .code-tab-container>* {
697
+ flex: none;
698
+ padding-left: 20px;
699
+ position: relative;
700
+ }
701
+
702
+ .code-tab-container a {
703
+ display: flex;
704
+ align-items: center;
705
+ column-gap: 0.25em;
706
+ justify-content: center;
707
+ padding: 10px;
708
+ color: #5f6368;
709
+ border-radius: 3px 3px 0px 0px;
710
+ border-bottom: 3px solid transparent;
711
+ font-size: 14px;
712
+ transition: color 0.1s ease-in-out;
713
+ text-decoration: none;
714
+ cursor: pointer;
715
+ }
716
+
717
+ .code-tab-container .active-tab>a {
718
+ color: #1769e0;
719
+ border-color: #1769e0;
720
+ }
721
+
722
+ .code-tab-switcher {
723
+ margin: 0;
724
+ padding: 0;
725
+ list-style: none;
726
+ border-radius: 0px 0px 8px 8px;
727
+ }
728
+
729
+ .code-tab-switcher> :not(.active-tab) {
730
+ display: none;
731
+ }
732
+
733
+ .code-tab-switcher>*> :last-child {
734
+ margin-bottom: 0;
735
+ }
736
+
737
+ .code-tab-switcher .highlight {
738
+ border-radius: 0px 0px 8px 8px;
739
+ border-top: 0px solid;
740
+ }
741
+
742
+ .code_switcher_container_parent {
743
+ position: relative;
744
+ }
745
+
746
+ .code_switcher_code_action_container {
747
+ position: absolute;
748
+ right: 6px;
749
+ top: 6px;
750
+ z-index: 1;
751
+ }
752
+
753
+ .code_switcher_copy_button {
754
+ background-size: 18px 18px;
755
+ border: none;
756
+ font-size: 18px;
757
+ min-width: 18px;
758
+ min-height: 18px;
759
+ height: 18px;
760
+ width: 18px;
761
+ background-color: var(--code-block-action-button-color, #666666);;
762
+ -webkit-mask-image: url(icon_copy.svg);
763
+ mask-image: url(icon_copy.svg);
764
+ -webkit-mask-size: cover;
765
+ margin-right: 4px;
766
+ }
767
+
768
+ .code_switcher_theme_button {
769
+ background-size: 18px 18px;
770
+ border: none;
771
+ font-size: 18px;
772
+ min-width: 18px;
773
+ min-height: 18px;
774
+ height: 18px;
775
+ width: 18px;
776
+ background-color: var(--code-block-action-button-color, #666666);
777
+ -webkit-mask-image: url(icon_theme.svg);
778
+ mask-image: url(icon_theme.svg);
779
+ -webkit-mask-size: cover;
780
+ }
781
+
782
+ #code_copied_snackbar {
783
+ visibility: hidden;
784
+ min-width: 250px;
785
+ margin-left: -125px;
786
+ background-color: #333;
787
+ color: #fff;
788
+ text-align: center;
789
+ border-radius: 8px;
790
+ padding: 16px;
791
+ position: fixed;
792
+ z-index: 1;
793
+ left: 50%;
794
+ bottom: 30px;
795
+ font-family: Roboto Mono, monospace;
796
+ }
797
+
798
+ #code_copied_snackbar.show {
799
+ visibility: visible;
800
+ -webkit-animation: code_copied_snackbar_fade_in 0.5s, code_copied_snackbar_fade_out 0.5s 2.5s;
801
+ animation: code_copied_snackbar_fade_in 0.5s, code_copied_snackbar_fade_out 0.5s 2.5s;
802
+ }
803
+
804
+ /* Animations to fade the snackbar in and out */
805
+ @-webkit-keyframes code_copied_snackbar_fade_in {
806
+ from {bottom: 0; opacity: 0;}
807
+ to {bottom: 30px; opacity: 1;}
808
+ }
809
+
810
+ @keyframes code_copied_snackbar_fade_in {
811
+ from {bottom: 0; opacity: 0;}
812
+ to {bottom: 30px; opacity: 1;}
813
+ }
814
+
815
+ @-webkit-keyframes code_copied_snackbar_fade_out {
816
+ from {bottom: 30px; opacity: 1;}
817
+ to {bottom: 0; opacity: 0;}
818
+ }
819
+
820
+ @keyframes code_copied_snackbar_fade_out {
821
+ from {bottom: 30px; opacity: 1;}
822
+ to {bottom: 0; opacity: 0;}
823
+ }
@@ -0,0 +1,69 @@
1
+ function selectTab(codeLangClass, tabClass, tabIndex) {
2
+ var tabbedItemsWithMatchingLanguage = [...new Set(Array.prototype.slice.call(document.getElementsByClassName(codeLangClass))
3
+ .map(item => item.parentNode))];
4
+
5
+ tabbedItemsWithMatchingLanguage
6
+ .flatMap(item => Array.prototype.slice.call(item.children))
7
+ .forEach(item => item.classList.remove("active-tab"));
8
+
9
+
10
+ tabbedItemsWithMatchingLanguage.forEach((element) => {
11
+ Array.prototype.slice.call(element.children)
12
+ .filter( item => item.matches("." + codeLangClass))[0]
13
+ .classList.add("active-tab");
14
+ });
15
+
16
+ var tabsMatchingTabClass = [...new Set(Array.prototype.slice.call(document.getElementsByClassName(tabClass)))];
17
+
18
+ tabsMatchingTabClass
19
+ .flatMap(item => Array.prototype.slice.call(item.children))
20
+ .forEach(item => item.classList.remove("active-tab"));
21
+
22
+
23
+ tabsMatchingTabClass.forEach((tab) => {
24
+ Array.prototype.slice.call(tab.children)[tabIndex].classList.add("active-tab");
25
+ });
26
+ };
27
+
28
+ function copyText(codeBlockClass) {
29
+ var copiedText = document.getElementsByClassName(codeBlockClass)[0].innerText;
30
+ navigator.clipboard.writeText(copiedText);
31
+ var snackbar = document.getElementById("code_copied_snackbar");
32
+ snackbar.classList.add("show")
33
+ setTimeout(function() { snackbar.classList.remove("show"); }, 3000);
34
+ };
35
+
36
+ var darkModeMatcher = window.matchMedia("(prefers-color-scheme: dark)");
37
+
38
+ darkModeMatcher.addListener(matcher => {
39
+ localStorage.setItem("code-block-theme", "");
40
+ updateTheme(false);
41
+ });
42
+
43
+ function updateTheme(switchTheme) {
44
+ var theme = localStorage.getItem("code-block-theme");
45
+
46
+ var isCurrentThemeDark = false;
47
+ if (theme == "dark") {
48
+ isCurrentThemeDark = true;
49
+ } else if (theme == "light") {
50
+ isCurrentThemeDark = false;
51
+ } else if (darkModeMatcher.matches) {
52
+ isCurrentThemeDark = true;
53
+ } else {
54
+ isCurrentThemeDark = false;
55
+ }
56
+
57
+ var updatedTheme = "dark";
58
+ /* This is performing a logical XNOR */
59
+ if (isCurrentThemeDark == switchTheme) {
60
+ updatedTheme = "light";
61
+ }
62
+
63
+ document.documentElement.setAttribute("data-code-block-theme", updatedTheme);
64
+ localStorage.setItem("code-block-theme", updatedTheme);
65
+ };
66
+
67
+ updateTheme(false);
68
+
69
+ window.onload = function() { updateTheme(false); };
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#666666"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M20 8.69V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69zm-2 5.79V18h-3.52L12 20.48 9.52 18H6v-3.52L3.52 12 6 9.52V6h3.52L12 3.52 14.48 6H18v3.52L20.48 12 18 14.48zM12 6.5v11c3.03 0 5.5-2.47 5.5-5.5S15.03 6.5 12 6.5z"/></svg>
@@ -0,0 +1,163 @@
1
+ require "commonmarker"
2
+ require "jekyll-commonmark-ghpages"
3
+ require "jekyll"
4
+ require "securerandom"
5
+
6
+ class CodeTabsCustomerRenderer < JekyllCommonMarkCustomRenderer
7
+ @added_assets_links = false
8
+ @added_copy_snackbar = false
9
+
10
+ def render(node)
11
+ if node.type == :document
12
+ if (!@added_assets_links)
13
+ #Add references to the fonts, css, and js required
14
+ out("<link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css?family=Roboto+Mono\"/>")
15
+ out("<link rel=\"stylesheet\" href=\"assets/codeblock.css\"/>")
16
+ out("<script src=\"assets/codeblock.js\"></script>")
17
+ @added_assets_links = true
18
+ end
19
+ end
20
+ super(node)
21
+ end
22
+
23
+ def code_block(node)
24
+ #Determine what objects this code block is surrounded by.
25
+ previous_node_type = node&.previous&.type&.to_s
26
+ next_node_type = node&.next&.type&.to_s
27
+
28
+ #If this item has neighboring code blocks or a custom tab header, it should show tabs
29
+ using_custom_label = (split_lanugage_fence_info(node)&.size || 0) > 1
30
+ is_header_item = previous_node_type != "code_block" && (next_node_type == "code_block" || using_custom_label)
31
+ is_alone = previous_node_type != "code_block" && next_node_type != "code_block" && !using_custom_label
32
+
33
+ #Get a unique ID per code block in order to allow code copying
34
+ individual_code_block_id = SecureRandom.uuid
35
+
36
+ #Create a header if necessary and then creates the wrapper for each item
37
+ #This allows tabs to be selected individaully
38
+ if (is_header_item)
39
+ create_tabbed_code_header(node)
40
+ out("<li class=\"code_switcher_container_parent active-tab #{get_code_language_switcher_class(node)} #{individual_code_block_id}\">")
41
+ elsif (!is_alone)
42
+ out("<li class=\"code_switcher_container_parent #{get_code_language_switcher_class(node)} #{individual_code_block_id}\">")
43
+ else
44
+ out("<div class=\"code_switcher_container_parent #{individual_code_block_id}\">")
45
+ end
46
+
47
+ #Add the action buttons for this code block
48
+ #Changing theme button is added to all code blocks, but the copy button is configurable.
49
+ out("<div class=\"code_switcher_code_action_container\">")
50
+ if (is_copy_action_enabled(node))
51
+ if (!@added_copy_snackbar)
52
+ out("<div id=\"code_copied_snackbar\">Copied!</div>")
53
+ @added_copy_snackbar = true
54
+ end
55
+ out("<button class=\"code_switcher_copy_button\" title=\"Copy\" onclick=\"copyText(\'#{individual_code_block_id}\')\"></button>")
56
+ end
57
+ out("<button class=\"code_switcher_theme_button\" onclick=\"updateTheme(true)\"></button>")
58
+ out("</div>")
59
+
60
+ #Generate the actual code block from markdown using the super class
61
+ super(node)
62
+
63
+ #Close this code block's container
64
+ if (!is_alone)
65
+ out("</li>")
66
+ else
67
+ out("</div>")
68
+ end
69
+
70
+ #Closee the entire tab container if this is the last code block in a tabbed container
71
+ if (next_node_type != "code_block" && !is_alone)
72
+ out("</ul>")
73
+ end
74
+ end
75
+
76
+ #Splits the code fence into the language and extra info
77
+ #Removes the codeCopyEnabled item which is just a flag used to enable showing a copy action button
78
+ def split_lanugage_fence_info(node)
79
+ node&.fence_info&.sub(" codeCopyEnabled", "")&.split(/[\s,]/, 2)
80
+ end
81
+
82
+ #Gets the language used in the code fence (the part typically immediately after a triple backtick in markdown)
83
+ def get_code_language(node)
84
+ split_lanugage_fence_info(node)&.first || "unknown"
85
+ end
86
+
87
+ #Gets the label shown to the user. This is the rest of code fence after the first space
88
+ def get_code_language_label(node)
89
+ split_lanugage_fence_info(node)&.last || "Code"
90
+ end
91
+
92
+ #Gets language class name used for the code switcher. This allows selection of the same language across
93
+ #multiple code tab items.
94
+ def get_code_language_switcher_class(node)
95
+ lang = get_code_language(node)
96
+ lang == "unknown" ? "" : "code_switcher_#{lang&.downcase}"
97
+ end
98
+
99
+ #Determines whether the copy action should be shown for a given code block based on info in the code fence info
100
+ def is_copy_action_enabled(node)
101
+ node&.fence_info&.include?("codeCopyEnabled") || false
102
+ end
103
+
104
+ #Creates the tab header portion of the code switcher
105
+ def create_tabbed_code_header(node)
106
+ uuid = SecureRandom.uuid
107
+
108
+ out("<ul class=\"code-tab-container #{uuid}\">")
109
+
110
+ tab_number = 0
111
+ tab_node = node
112
+ while tab_node&.type&.to_s == 'code_block'
113
+ label = get_code_language_label(tab_node)
114
+
115
+ active_tab_class = (tab_number == 0) ? "active-tab" : ""
116
+ code_lang_class = get_code_language_switcher_class(tab_node)
117
+ out("<li class=\"#{active_tab_class} #{code_lang_class}\">")
118
+ out("<a onclick=\"selectTab('#{code_lang_class}', '#{uuid}', #{tab_number})\">#{label}</a>")
119
+ out("</li>")
120
+
121
+ tab_node = tab_node&.next
122
+ tab_number = tab_number + 1
123
+ end
124
+
125
+ out("</ul>")
126
+
127
+ out("<ul class=\"code-tab-switcher #{uuid}\">")
128
+ end
129
+ end
130
+
131
+ class Jekyll::Converters::Markdown
132
+ # A Markdown renderer which uses CodeTabsCustomerRenderer to output the
133
+ # final document. The CodeTabsCustomerRenderer renderer mainly uses the
134
+ # parent render but updates code blocks to allow for tabbing behavior
135
+ class JdvpCodeTabsCommonMark < CommonMarkGhPages
136
+ def convert(content)
137
+ doc = CommonMarker.render_doc(content, @parse_options, @extensions)
138
+ html = CodeTabsCustomerRenderer.new(
139
+ :options => @render_options,
140
+ :extensions => @extensions
141
+ ).render(doc)
142
+ html.gsub(/<br data-jekyll-commonmark-ghpages>/, "\n")
143
+ end
144
+ end
145
+ end
146
+
147
+ #After the site is written, the necessary files this plugin's generateed code needs are also written
148
+ Jekyll::Hooks.register :site, :post_write do |site|
149
+ #Copy CSS required for code tabs
150
+ css = File.expand_path("../../assets/codeblock.css", __FILE__)
151
+ FileUtils.mkdir_p("#{site.in_dest_dir("assets/")}")
152
+ FileUtils.cp(css, "#{site.in_dest_dir("assets/codeblock.css")}")
153
+
154
+ #Copy required javascript
155
+ js = File.expand_path("../../assets/codeblock.js", __FILE__)
156
+ FileUtils.cp(js, "#{site.in_dest_dir("assets/codeblock.js")}")
157
+
158
+ #Copy icons for copy and theme actions
159
+ copy_icon = File.expand_path("../../assets/icon_copy.svg", __FILE__)
160
+ FileUtils.cp(copy_icon, "#{site.in_dest_dir("assets/icon_copy.svg")}")
161
+ theme_icon = File.expand_path("../../assets/icon_theme.svg", __FILE__)
162
+ FileUtils.cp(theme_icon, "#{site.in_dest_dir("assets/icon_theme.svg")}")
163
+ end
metadata ADDED
@@ -0,0 +1,95 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jdvp-codetabs-commonmark
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - JD Porterfield
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-09-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: securerandom
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: jekyll-commonmark-ghpages
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.1'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.1'
41
+ - !ruby/object:Gem::Dependency
42
+ name: jekyll
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '3.7'
48
+ - - "<"
49
+ - !ruby/object:Gem::Version
50
+ version: '5.0'
51
+ type: :development
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: '3.7'
58
+ - - "<"
59
+ - !ruby/object:Gem::Version
60
+ version: '5.0'
61
+ description:
62
+ email: jd.porterfield@alumni.rice.edu
63
+ executables: []
64
+ extensions: []
65
+ extra_rdoc_files: []
66
+ files:
67
+ - assets/codeblock.css
68
+ - assets/codeblock.js
69
+ - assets/icon_copy.svg
70
+ - assets/icon_theme.svg
71
+ - lib/jdvp-codetabs-commonmark.rb
72
+ homepage: https://github.com/jdvp/jdvp-codetabs-commonmark
73
+ licenses:
74
+ - MIT
75
+ metadata: {}
76
+ post_install_message:
77
+ rdoc_options: []
78
+ require_paths:
79
+ - lib
80
+ required_ruby_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: 2.6.0
85
+ required_rubygems_version: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ requirements: []
91
+ rubygems_version: 3.0.3.1
92
+ signing_key:
93
+ specification_version: 4
94
+ summary: CommonMark generator for Jekyll that adds tabbed code functionality
95
+ test_files: []