tangled
alpha
login
or
join now
oppi.li
/
plonkli
21
fork
atom
atproto pastebin service: https://plonk.li
21
fork
atom
overview
issues
pulls
pipelines
add copy button
authored by
nekomimi.pet
and committed by
Tangled
9 months ago
a00a2f7f
5bb9d4dc
+57
-11
2 changed files
expand all
collapse all
unified
split
src
public
styles.css
views
paste.pug
+28
-9
src/public/styles.css
···
5
5
font-style: monospace;
6
6
}
7
7
8
8
+
@media (prefers-color-scheme: dark) {
9
9
+
.shiki,
10
10
+
.shiki span {
11
11
+
color: var(--shiki-dark) !important;
12
12
+
background-color: var(--shiki-dark-bg) !important;
13
13
+
font-style: var(--shiki-dark-font-style) !important;
14
14
+
font-weight: var(--shiki-dark-font-weight) !important;
15
15
+
text-decoration: var(--shiki-dark-text-decoration) !important;
16
16
+
}
17
17
+
}
18
18
+
8
19
:root {
9
20
/* Light mode colors */
10
21
--bg-color: white;
···
254
265
color: rgba(115,138,148,.4)
255
266
}
256
267
257
257
-
@media (prefers-color-scheme: dark) {
258
258
-
.shiki,
259
259
-
.shiki span {
260
260
-
color: var(--shiki-dark) !important;
261
261
-
background-color: var(--shiki-dark-bg) !important;
262
262
-
font-style: var(--shiki-dark-font-style) !important;
263
263
-
font-weight: var(--shiki-dark-font-weight) !important;
264
264
-
text-decoration: var(--shiki-dark-text-decoration) !important;
265
265
-
}
268
268
+
#copy-btn {
269
269
+
background: none;
270
270
+
border: none;
271
271
+
padding: 0;
272
272
+
color: var(--text-color-muted);
273
273
+
cursor: pointer;
274
274
+
text-decoration: none;
275
275
+
font-family: inherit;
276
276
+
font-size: inherit;
277
277
+
}
278
278
+
279
279
+
#copy-btn:hover {
280
280
+
text-decoration: underline;
281
281
+
}
282
282
+
283
283
+
#copy-btn:focus {
284
284
+
outline: 1px solid var(--accent);
266
285
}
+29
-2
src/views/paste.pug
···
15
15
| #{timeDifference(now, Date.parse(paste.createdAt))} ago ·
16
16
| #{paste.lang} ·
17
17
| #{paste.code.split('\n').length} loc ·
18
18
-
a(href=`/r/${paste.shortUrl}`) raw
18
18
+
a(href=`/r/${paste.shortUrl}`) raw
19
19
+
| ·
20
20
+
button#copy-btn(type="button" onclick="copyToClipboard()" data-code=paste.code) copy
21
21
+
| ·
22
22
+
| #{comments.length} #{pluralize(comments.length, 'comment')}
19
23
div.highlighted-code !{paste.highlightedCode}
20
24
hr
21
25
···
43
47
a(href="/login") login
44
48
| to post a comment
45
49
46
46
-
+footer()
50
50
+
+footer()
51
51
+
script.
52
52
+
async function copyToClipboard() {
53
53
+
const copyBtn = document.getElementById('copy-btn');
54
54
+
const originalText = copyBtn.textContent;
55
55
+
56
56
+
try {
57
57
+
const code = copyBtn.dataset.code;
58
58
+
await navigator.clipboard.writeText(code);
59
59
+
copyBtn.textContent = 'copied!';
60
60
+
copyBtn.style.color = 'var(--accent)';
61
61
+
62
62
+
setTimeout(() => {
63
63
+
copyBtn.textContent = originalText;
64
64
+
copyBtn.style.color = '';
65
65
+
}, 1500);
66
66
+
} catch (err) {
67
67
+
console.error('Failed to copy: ', err);
68
68
+
copyBtn.textContent = 'copy failed';
69
69
+
setTimeout(() => {
70
70
+
copyBtn.textContent = originalText;
71
71
+
}, 1500);
72
72
+
}
73
73
+
}