Move userscripts into scripts/ subfolder
This commit is contained in:
@@ -0,0 +1,139 @@
|
||||
// ==UserScript==
|
||||
// @name Hacker News Tweaks
|
||||
// @version 0.0.4
|
||||
// @downloadURL https://gist.githubusercontent.com/evanreichard/96d89512cbfe23e5d7a81479c482e6da/raw/hn-tweaks.user.js
|
||||
// @match *://news.ycombinator.com/*
|
||||
// @grant GM.addStyle
|
||||
// @grant GM.registerMenuCommand
|
||||
// @grant GM.unregisterMenuCommand
|
||||
// @grant GM_getValue
|
||||
// @grant GM.setValue
|
||||
// @noframes
|
||||
// @run-at document-idle
|
||||
// ==/UserScript==
|
||||
|
||||
/**
|
||||
* This is a hacked together UserScript to add comment collapsing like old reddit.
|
||||
* It also adds the following CSS tweak: https://news.ycombinator.com/item?id=29494475
|
||||
**/
|
||||
|
||||
let activeStyleElement;
|
||||
|
||||
async function toggleStyle() {
|
||||
let isEnabled = GM_getValue("enabled", true);
|
||||
if (isEnabled === true) {
|
||||
GM.unregisterMenuCommand("Disable Style");
|
||||
GM.registerMenuCommand("Enable Style", toggleStyle);
|
||||
activeStyleElement?.remove();
|
||||
} else {
|
||||
GM.unregisterMenuCommand("Enable Style");
|
||||
GM.registerMenuCommand("Disable Style", toggleStyle);
|
||||
applyStyle();
|
||||
}
|
||||
await GM.setValue("enabled", !isEnabled);
|
||||
}
|
||||
|
||||
function applyStyle() {
|
||||
activeStyleElement = GM.addStyle(`.comhead {
|
||||
font-size: 12pt;
|
||||
line-height: 20pt;
|
||||
}
|
||||
@media (prefers-color-scheme: dark) { body { background-color: #1F2430; }
|
||||
#hnmain { background-color: #232834; }
|
||||
|
||||
a:link.storylink,
|
||||
#hnmain > tbody > tr:first-child > td a,
|
||||
.commtext, .commtext a:link,
|
||||
td {
|
||||
color: #fafafa;
|
||||
}
|
||||
|
||||
#hnmain > tbody > tr:first-child > td { background-color: #333a4a; }
|
||||
|
||||
a:link,
|
||||
.sitebit, .subtext, .sitestr, .subtext a:link,
|
||||
.rank, a.morelink,
|
||||
.pagetop, .yclinks a,
|
||||
.comhead a:link, .comhead,
|
||||
.hnmore a:link, .reply a:link {
|
||||
color: #8c96ac;
|
||||
}
|
||||
|
||||
a:visited {
|
||||
color: #979cf4;
|
||||
}
|
||||
|
||||
.votearrow {
|
||||
overflow: visible;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.votearrow::before {
|
||||
content: "";
|
||||
width: 0;
|
||||
height: 0;
|
||||
left: 1px;
|
||||
top: 3px;
|
||||
display: block;
|
||||
position: absolute;
|
||||
border-left: 4px solid transparent;
|
||||
border-right: 4px solid transparent;
|
||||
border-bottom: 7px solid #bebfd1;
|
||||
}
|
||||
|
||||
input[type=text],
|
||||
textarea {
|
||||
background-color: #333a4a;
|
||||
color: #fafafa;
|
||||
border: 1px solid #1F2430;
|
||||
}
|
||||
}`);
|
||||
}
|
||||
|
||||
function findParent(el, index) {
|
||||
let previousSibling = el.previousElementSibling;
|
||||
let foundElem = previousSibling.querySelector(`[indent="${index}"]`);
|
||||
return foundElem
|
||||
? foundElem.closest(".athing")
|
||||
: findParent(previousSibling, index);
|
||||
}
|
||||
|
||||
let isEnabled = GM_getValue("enabled", true);
|
||||
if (isEnabled === true) {
|
||||
GM.registerMenuCommand("Disable Style", toggleStyle);
|
||||
applyStyle();
|
||||
} else {
|
||||
GM.registerMenuCommand("Enable Style", toggleStyle);
|
||||
}
|
||||
|
||||
Array.from(document.querySelectorAll(".ind")).forEach((indent) => {
|
||||
let imgEl = indent.querySelector("img");
|
||||
if (!imgEl) return;
|
||||
let colWidth = imgEl.offsetWidth;
|
||||
|
||||
indent.style.position = "relative";
|
||||
let indCount = parseInt(indent.getAttribute("indent"));
|
||||
|
||||
let voteOffset =
|
||||
indent.nextElementSibling.querySelector("center").offsetHeight;
|
||||
|
||||
for (let i = 0; i <= indCount; i += 1) {
|
||||
let marginLeft = i === 0 ? "10px" : (colWidth / indCount) * i + 10 + "px";
|
||||
let topOffset = i === indCount ? voteOffset + 15 : -10;
|
||||
let newElem = document.createElement("div");
|
||||
newElem.setAttribute(
|
||||
"style",
|
||||
`cursor: pointer; height: calc(100% - ${topOffset + 2}px); width: 0px; position: absolute; margin-left: ${marginLeft}; top: ${topOffset}px; border-left: 2px solid green; padding: 0px min(${colWidth / 2}px, 5px);`,
|
||||
);
|
||||
newElem.onclick = () => {
|
||||
let commentBlock = newElem.closest(".athing");
|
||||
if (i === indCount) {
|
||||
commentBlock.querySelector(".togg.clicky").click();
|
||||
} else {
|
||||
let parentComment = findParent(commentBlock, i);
|
||||
parentComment.querySelector(".togg.clicky").click();
|
||||
}
|
||||
};
|
||||
indent.appendChild(newElem);
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user