Greasy Fork 支持简体中文。

Hacker News Enhanced

Hacker News Enhanced adds a [l+c] link that opens the link and comments page in new tabs for you in one click.

// ==UserScript==
// @name         Hacker News Enhanced
// @namespace    https://github.com/schalkburger/website-enhancements
// @include      https://news.ycombinator.com/*
// @match        https://news.ycombinator.com/*
// @version      1.0.1
// @author       Schalk Burger <[email protected]>
// @description  Hacker News Enhanced adds a [l+c] link that opens the link and comments page in new tabs for you in one click.
// @license MIT
// ==/UserScript==

(function () {
  "use strict";
  // Init script
  let version = GM_info.script.version;
  console.log(`Hacker News Readable Dark ${version}`);
  // titleLinks
  const aThings = document.querySelectorAll(".athing");
  for (let i = 0; i < aThings.length; i++) {
    const aThing = aThings[i];
    aThing.classList.add("news-link");
    // Open new link and add class
    const titleLineLinks = document.querySelectorAll(".titleline > a");
    for (let i = 0; i < titleLineLinks.length; i++) {
      const titleLineLink = titleLineLinks[i];
      titleLineLink.setAttribute("target", "_blank");
    }
    const subLineLinks = document.querySelectorAll(".subtext a");
    for (let i = 0; i < subLineLinks.length; i++) {
      const subLineLink = subLineLinks[i];
      subLineLink.setAttribute("target", "_blank");
    }
    // Get link
    // Get comments ID
    const aThingID = aThing.id;
    const linkCommentSpan = document.createElement("td");
    linkCommentSpan.setAttribute("id", aThingID);
    linkCommentSpan.className = "link-comment-td";
    linkCommentSpan.innerHTML = `<a href="${aThingID}" comments-id="${aThingID}" target="_blank" title="Open link + comments" class="link-comment">[l+c]</a>`;
    aThing.append(linkCommentSpan);
    // linkCommentSpanAnchors
    const linkCommentSpanAnchors = document.querySelectorAll(".link-comment");
    for (let i = 0; i < linkCommentSpanAnchors.length; i++) {
      const linkCommentSpanAnchor = linkCommentSpanAnchors[i];
      linkCommentSpanAnchor.setAttribute("style", "padding: 10px;");
    }
  }
  // Get story link
  const titleLineHrefs = document.querySelectorAll(".titleline > a");
  var hrefsArray = []; // create an Array to save hrefs
  var j = 0;
  for (; j < titleLineHrefs.length; j++) {
    hrefsArray.push(titleLineHrefs[j].href); // push hrefs in array
  }
  const newsLinks = document.querySelectorAll(".link-comment-td a");
  for (let i = 0; i < newsLinks.length; i++) {
    const newsLink = newsLinks[i];
    newsLink.setAttribute("href", hrefsArray[i]);
  }
  // Open comments + link
  const singleClickLinks = document.querySelectorAll(".link-comment-td a");
  for (let i = 0; i < singleClickLinks.length; i++) {
    const singleClickLink = singleClickLinks[i];
    const singleClickLinkCommentsID = singleClickLink.getAttribute("comments-id");
    const singleClickLinkCommentsIDLink = `https://news.ycombinator.com/item?id=${singleClickLinkCommentsID}`;
    const singleClickLinkNewsLink = singleClickLink.getAttribute("href");
    singleClickLink.addEventListener("click", function (e) {
      e.preventDefault();
      window.open(singleClickLinkCommentsIDLink);
      window.open(singleClickLinkNewsLink);
    });
  }
  // Remove [l+c] links from comments page
  // comment-tree
  const commentTreeLinks = document.querySelectorAll(".comment-tree .link-comment, .fatitem .link-comment");
  for (let i = 0; i < commentTreeLinks.length; i++) {
    const commentTreeLink = commentTreeLinks[i];
    commentTreeLink.remove();
  }
})();