-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhacker-news-quote-styling.user.js
55 lines (50 loc) · 1.51 KB
/
hacker-news-quote-styling.user.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
// ==UserScript==
// @name Hacker News blockquote styling
// @version 1.2
// @description Adds styling to blockquotes in Hacker News comments
// @author Ryan Buening
// @license MIT
// @namespace https://github.com/ryanbuening/userscripts
// @match https://news.ycombinator.com/*
// @run-at document-end
// ==/UserScript==
const [head] = document.getElementsByTagName('head');
const style = document.createElement('style');
style.type = 'text/css';
style.innerHTML = `
.comment-quote {
background: #46464620;
font-style: italic;
color: #464646;
border-left-width: 3px;
border-left-color: #46464650;
border-left-style: solid;
padding: 2px;
padding-left: 5px;
}`;
head.appendChild(style);
document.querySelectorAll('.commtext').forEach(comment => {
let quoteDiv = null;
comment.childNodes.forEach(node => {
const commentLine = node.textContent || node.innerText;
if (quoteDiv || commentLine.match(/^>/)) {
if (commentLine.startsWith('>')) {
const quoteText = commentLine.substring(commentLine.indexOf('>') + 1);
if (node.textContent) {
node.textContent = quoteText;
} else {
node.innerText = quoteText;
}
}
if (!quoteDiv) {
quoteDiv = document.createElement('div');
quoteDiv.classList.add('comment-quote');
node.parentNode.insertBefore(quoteDiv, node);
}
quoteDiv.appendChild(node);
if (!commentLine.match(/^>+\s*$/)) {
quoteDiv = null;
}
}
});
});