Created: 2024-10-25 | Last Updated: 2024-12-26
// ==UserScript== // @name Midnight Hacker News // @namespace Violentmonkey Scripts // @match https://news.ycombinator.com/* // @grant GM_addStyle // @run-at document-start // @version 1.2 // @author Local Primate // @description Created: 2024-10-25 | Last Updated: 2024-12-26 // @license CC0 1.0 Universal // ==/UserScript== // Main styles GM_addStyle(` :root { --purple: #707299; --blue: #3e3f66; --dark-blue: #33353D; --gray-100: #D3D1DE; --gray-200: #8c8b94; --gray-300: #ffffff66; --gray-400: #ffffff44; --gray-500: #202326; --gray-600: #1c1e21; --black: #0f1014; } body { background: var(--gray-600); color: white; } /* Logo */ #hnmain > tbody:nth-child(1) > tr > td > table > tbody > tr > td > a > img { filter: hue-rotate(220deg); opacity: 0.6; width: 1.25rem; height: 1.25rem; margin-left: 0.05rem; margin-right: 0.15rem; } a:link { color: var(--purple) !important; } textarea { background: var(--gray-500); border: 1px solid var(--gray-400); color: white; } textarea:focus { border: 1px solid var(--gray-300); outline: none; } #hnmain { background: var(--black); } /* Comment metadata */ td.default div span.comhead a { font-weight: bold; font-size: 0.75rem; } .fatitem > tbody:nth-child(1) > tr:nth-child(4) > td:nth-child(2) > form:nth-child(1) > input:nth-child(7) { background: var(--dark-blue); border: 0; padding: 0.25rem 0.5rem; border-radius: 0.2rem; color: var(--gray-100); opacity: 0.6; text-transform: capitalize; } td.default { background: var(--gray-500); padding: 0.5rem; border-top-right-radius: 0.25rem; border-bottom-right-radius: 0.25rem; } table.comment-tree td.votelinks { background: var(--gray-500); border-top-left-radius: 0.25rem; border-bottom-left-radius: 0.25rem; } tr.athing.comtr td table { border-radius: 0.25rem; } table.comment-tree { border-spacing: collapse; border: 0; } .c00 { color: var(--gray-200) !important; } /* Website heading bar */ #hnmain > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(1) { background: var(--blue); height: 1.75rem; } #hnmain > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(1) a:link { color: black !important; font-size: 0.9rem; } .athing.comtr td table { border-collapse: collapse; } .athing.comtr td.votelinks center { padding-left: 0.25rem; padding-top: 0.35rem; } td.votelinks[valign="top"] { padding-right: 0.2rem; } td.votelinks.nosee { display: none; } .subline { font-size: 0.7rem; color: var(--gray-200) !important; } table.fatitem tbody tr.athing td.title { font-weight: bold; font-size: 0.8rem; } .fatitem > tbody:nth-child(1) > tr:nth-child(3) { display: block; margin-bottom: 1rem; } div.reply a { background: var(--dark-blue); display: inline-block; padding: 0.2rem 0.3rem; margin: 0.3rem 0; border-radius: 0.25rem; text-decoration: none !important; color: var(--gray-100) !important; text-transform: capitalize; opacity: 0.6; } /* Front page */ .spacer { height: 1rem !important; } tr.athing td.title[align="right"] span.rank { padding-left: 1rem; padding-right: 0.3rem; } tr.athing td.title[align="right"] span.rank:empty { padding-left: 0; } .titleline a { font-weight: bold; } /* Bottom styled bar */ #hnmain > tbody:nth-child(1) > tr:nth-child(4) > td:nth-child(1) > table:nth-child(2) > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(1) { background: var(--blue); } /* Search bar */ #hnmain > tbody:nth-child(1) > tr:nth-child(4) > td:nth-child(1) > center:nth-child(4) > form:nth-child(4) > input:nth-child(1) { background: var(--gray-500); border: 1px solid var(--gray-400); color: white; } #hnmain > tbody:nth-child(1) > tr:nth-child(4) > td:nth-child(1) > center:nth-child(4) > form:nth-child(4) { color: var(--gray-200); } `); // Adds a stylistic border to comment blocks to indicate indentation. // Functionally, a right-border is added to an "indent" element that Hacker News duplicates // to form the comment indentation (specifically the nearest one to the comment block) // Visually, this will appear on the left side of comment blocks. window.addEventListener('load', function() { const gray = "#ffffff44"; const green = "#00838acc"; const blue = "#00328acc"; const purple = "#4c008acc"; const pink = "#8a0040cc"; const red = "#8a000ecc"; const colors = [green, blue, purple, pink, red]; const targetClass = "ind"; const targetAttr = "indent"; const indentedElements = document.getElementsByClassName(targetClass); for (let i = 0; i < indentedElements.length; i++) { const indentCount = indentedElements[i].getAttribute(targetAttr); const index = (indentCount - 1) % colors.length; const chosenColor = indentCount >= 1 ? colors[index] : gray; indentedElements[i].style.borderRight = "2px solid " + chosenColor; } }, false);