Skip to content

Commit 15ef97d

Browse files
committed
Add syntax highlighting token colors and code block wrap toggle
1 parent b068980 commit 15ef97d

File tree

2 files changed

+50
-33
lines changed

2 files changed

+50
-33
lines changed

src/css/components/code.css

Lines changed: 38 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,17 @@ pre code {
3535
padding: 0;
3636
}
3737

38-
/* Language label — Ghost adds data-language on the <pre> element */
39-
pre[data-language]::before {
38+
pre.wrap {
39+
white-space: pre-wrap;
40+
overflow-x: visible;
41+
}
42+
43+
/* Language label — Prism adds language-* class to <pre> */
44+
pre[class*="language-"]::before {
4045
background-color: var(--color-yellow);
4146
border-radius: 0 0 4px 4px;
4247
color: var(--color-navy);
43-
content: attr(data-language);
48+
content: attr(class);
4449
font-family: 'Inter', sans-serif;
4550
font-size: 0.7rem;
4651
font-weight: 600;
@@ -53,62 +58,62 @@ pre[data-language]::before {
5358
}
5459

5560
/* Syntax token colors — tuned for the navy background */
56-
.kg-code-card .token.comment,
57-
.kg-code-card .token.prolog,
58-
.kg-code-card .token.doctype,
59-
.kg-code-card .token.cdata {
61+
.token.comment,
62+
.token.prolog,
63+
.token.doctype,
64+
.token.cdata {
6065
color: #768390;
6166
font-style: italic;
6267
}
6368

64-
.kg-code-card .token.punctuation {
69+
.token.punctuation {
6570
color: #8dbbe8;
6671
}
6772

68-
.kg-code-card .token.namespace {
73+
.token.namespace {
6974
opacity: 0.7;
7075
}
7176

72-
.kg-code-card .token.property,
73-
.kg-code-card .token.tag,
74-
.kg-code-card .token.boolean,
75-
.kg-code-card .token.number,
76-
.kg-code-card .token.constant,
77-
.kg-code-card .token.symbol,
78-
.kg-code-card .token.deleted {
77+
.token.property,
78+
.token.tag,
79+
.token.boolean,
80+
.token.number,
81+
.token.constant,
82+
.token.symbol,
83+
.token.deleted {
7984
color: var(--color-red);
8085
}
8186

82-
.kg-code-card .token.selector,
83-
.kg-code-card .token.attr-name,
84-
.kg-code-card .token.string,
85-
.kg-code-card .token.char,
86-
.kg-code-card .token.builtin,
87-
.kg-code-card .token.inserted {
87+
.token.selector,
88+
.token.attr-name,
89+
.token.string,
90+
.token.char,
91+
.token.builtin,
92+
.token.inserted {
8893
color: var(--color-green);
8994
}
9095

91-
.kg-code-card .token.operator,
92-
.kg-code-card .token.entity,
93-
.kg-code-card .token.url,
96+
.token.operator,
97+
.token.entity,
98+
.token.url,
9499
.language-css .token.string,
95100
.style .token.string {
96101
color: #8dbbe8;
97102
}
98103

99-
.kg-code-card .token.atrule,
100-
.kg-code-card .token.attr-value,
101-
.kg-code-card .token.keyword {
104+
.token.atrule,
105+
.token.attr-value,
106+
.token.keyword {
102107
color: var(--color-blue);
103108
}
104109

105-
.kg-code-card .token.function,
106-
.kg-code-card .token.class-name {
110+
.token.function,
111+
.token.class-name {
107112
color: var(--color-yellow);
108113
}
109114

110-
.kg-code-card .token.regex,
111-
.kg-code-card .token.important,
112-
.kg-code-card .token.variable {
115+
.token.regex,
116+
.token.important,
117+
.token.variable {
113118
color: #f69d50;
114119
}

src/js/post/index.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,18 @@
11
// Ship JS only active on post pages for better performance
22
import tocbot from 'tocbot';
33

4+
// Apply .wrap class to any <pre> immediately following a <!--wrap--> HTML card
5+
document.querySelectorAll('pre').forEach((pre) => {
6+
let node = pre.closest('.kg-code-card') ?? pre;
7+
let prev = node.previousSibling;
8+
while (prev && prev.nodeType === Node.TEXT_NODE) {
9+
prev = prev.previousSibling;
10+
}
11+
if (prev && prev.nodeType === Node.COMMENT_NODE && prev.nodeValue.trim() === 'wrap') {
12+
pre.classList.add('wrap');
13+
}
14+
});
15+
416
tocbot.init({
517
// Where to render the table of contents.
618
tocSelector: '.gh-toc',

0 commit comments

Comments
 (0)