- // ==UserScript==
- // @name Legible Hacker News
- // @namespace http://tampermonkey.net/
- // @version 1
- // @description Hacker News Legible Like Newspaper
- // @author CK Keller (fork)
- // @author Martin Gladdish (original)
- // @match https://news.ycombinator.com/*
- // @icon https://www.google.com/s2/favicons?sz=64&domain=ycombinator.com
- // @license MIT
- // ==/UserScript==
-
- const tampermonkeyScript = function() {
- 'use strict';
-
- document.head.insertAdjacentHTML("beforeend", `<style>
- :root {
- --colour-hn-orange: #ff6600;
- --colour-hn-orange-pale: rgba(255, 102, 0, 0.05);
- --gutter: 0.5rem;
- --border-radius: 3px;
- }
-
- /* Reset font everywhere */
- html, body, td, .title, .comment, .default {
- font-family: 'Verdana', 'Arial', sans-serif;
- font-size: 1.2rem;
- }
-
- html, body {
- margin-top: 0;
- margin-left: 0;
- }
-
- body {
- padding: 5;
- margin: 5;
- }
-
- body, td, .title, .pagetop, .comment {
- font-size: 1.0rem;
- }
-
- .votelinks, html[op='news'] .title {
- vertical-align: inherit;
- }
-
- .comment-tree .votelinks,
- html[op='threads'] .votelinks,
- html[op='newcomments'] .votelinks{
- vertical-align: top;
- font-size: 0.7rem;
- }
-
- span.titleline {
- font-size: 1.1rem;
- margin-top: var(--gutter);
- margin-bottom: var(--gutter);
- display: block;
- }
- title.titleline {
- font-size: 1.3rem;
-
- }
-
- html[op='item'] span.titleline {
- font-size: 1.0rem;
- padding: 5;
- }
-
- .rank {
- display: none
- margin-left: 100px;
- font-size: 1.1rem;
-
- }
-
-
- html[op='news'] #hnmain > tbody:nth-child(1) > tr:nth-child(3) > td:nth-child(1) > table:nth-child(1),
- html[op='newest'] #hnmain > tbody:nth-child(1) > tr:nth-child(3) > td:nth-child(1) > table:nth-child(1),
- html[op='ask'] #hnmain > tbody:nth-child(1) > tr:nth-child(3) > td:nth-child(1) > table:nth-child(1),
- html[op='newcomments'] #hnmain > tbody:nth-child(1) > tr:nth-child(3) > td:nth-child(1) > table:nth-child(1),
- html[op='shownew'] #hnmain > tbody:nth-child(1) > tr:nth-child(3) > td:nth-child(1) > table:nth-child(1),
- html[op='submitted'] #hnmain > tbody:nth-child(1) > tr:nth-child(3) > td:nth-child(1) > table:nth-child(1),
- html[op='favorites'] #hnmain > tbody:nth-child(1) > tr:nth-child(3) > td:nth-child(1) > table:nth-child(2),
- html[op='front'] #hnmain > tbody:nth-child(1) > tr:nth-child(3) > td:nth-child(1) > table:nth-child(2),
- html[op='show'] #hnmain > tbody:nth-child(1) > tr:nth-child(3) > td:nth-child(1) > table:nth-child(2) {
- margin-left: 150px;
- }
-
-
- .sitebit.comhead {
- margin-left: 8;
- font-size: 0.8rem;
-
- }
-
- .subtext, .subline {
- font-size: 0.9rem;
-
- }
-
- #hnmain {
- width: 100%;
- background-color: white;
- }
-
- /* Menu bar */
-
- #hnmain > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(1) {
- padding: 50;
- }
- #hnmain > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(1) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(1) {
- padding-right: var(--gutter) !important;
- }
-
-
- .comment, .toptext {
- max-width: 40em;
- font-size: .9rem;
- }
- .comment {
- padding-left: 50;
- }
-
- .toptext, a, a:visited {
- color: black;
- }
- a:hover {
- text-decoration: underline;
- }
-
-
- input {
- padding: var(--gutter);
- }
- input, textarea {
- background-color: white;
- border: 2px solid var(--colour-hn-orange);
- border-radius: var(--border-radius);
-
- }
- input[type='button'] {
- cursor: pointer;
- }
-
-
- /* Custom styles added via javascript */
-
- .downvoted {
- background-color: rgb(245, 245, 245);
- border-radius: var(--border-radius);
- padding: 6px;
- }
- .downvoted .commtext {
- color: black;
- font-size: smaller;
- }
-
- .quote {
- border-left: 3px solid var(--colour-hn-orange);
- padding: 6px 6px 6px 9px;
- font-style: italic;
- background-color: var(--colour-hn-orange-pale);
- border-radius: var(--border-radius);
- }
-
- .hidden {
- display: none;
- }
-
- .showComment a, .hideComment, .hideComment:link, .hideComment:visited {
- color: var(--colour-hn-orange);
- text-decoration: underline;
- }
- .hideComment {
- margin-left: var(--gutter);
- }
-
- </style>`);
-
- const comments = document.querySelectorAll('.commtext');
- comments.forEach(e => {
- if (!e.classList.contains('c00')) {
- e.parentElement.classList.add('downvoted');
- }
- });
-
- let node = null;
- let nodes = [];
- const ps = document.evaluate("//p[starts-with(., '>')]", document.body)
- while (node = ps.iterateNext()) {
- nodes.push(node);
- }
- const spans = document.evaluate("//span[starts-with(., '>')]", document.body)
- while (node = spans.iterateNext()) {
- nodes.push(node);
- }
- nodes.forEach((n) => {
- const textNode = Array.from(n.childNodes).find((n) => n.nodeType === Node.TEXT_NODE);
- if (textNode) {
- const p = document.createElement('p');
- p.classList.add('quote');
- p.innerText = textNode.data.replace(">", "");
- n.firstChild.replaceWith(p);
- } else {
- n.classList.add('quote');
- n.innerText = n.innerText.replace(">", "");
- }
- });
-
- const addComment = document.querySelector("html[op='item'] .fatitem tr:last-of-type");
- if (addComment) {
- addComment.classList.add('hidden');
- const showComment = document.createElement('tr');
- showComment.innerHTML = `
- <td colspan='2'></td>
- <td>
- <a href='#'>show comment box</a>
- </td>
- `;
- showComment.classList.add('showComment');
- showComment.querySelector('a').addEventListener('click', (e) => {
- showComment.classList.toggle('hidden');
- addComment.classList.toggle('hidden');
- });
- addComment.parentNode.insertBefore(showComment, addComment);
-
- const hideComment = document.createElement('a');
- hideComment.setAttribute('href', '#');
- hideComment.innerText = 'hide comment box';
- hideComment.classList.add('hideComment');
- hideComment.addEventListener('click', (e) => {
- showComment.classList.toggle('hidden');
- addComment.classList.toggle('hidden');
- });
-
- const commentForm = document.querySelector("form[action='comment']");
- commentForm.append(hideComment);
- }
- }
-
- tampermonkeyScript();