jdvp-codetabs-commonmark 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: []