Hacker Fresh

Highlights fresh comments on HN.

スクリプトをインストールするには、Tampermonkey, GreasemonkeyViolentmonkey のような拡張機能のインストールが必要です。

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

スクリプトをインストールするには、TampermonkeyViolentmonkey のような拡張機能のインストールが必要です。

スクリプトをインストールするには、TampermonkeyUserscripts のような拡張機能のインストールが必要です。

このスクリプトをインストールするには、Tampermonkeyなどの拡張機能をインストールする必要があります。

このスクリプトをインストールするには、ユーザースクリプト管理ツールの拡張機能をインストールする必要があります。

(ユーザースクリプト管理ツールは設定済みなのでインストール!)

このスタイルをインストールするには、Stylusなどの拡張機能をインストールする必要があります。

このスタイルをインストールするには、Stylus などの拡張機能をインストールする必要があります。

このスタイルをインストールするには、Stylus tなどの拡張機能をインストールする必要があります。

このスタイルをインストールするには、ユーザースタイル管理用の拡張機能をインストールする必要があります。

このスタイルをインストールするには、ユーザースタイル管理用の拡張機能をインストールする必要があります。

このスタイルをインストールするには、ユーザースタイル管理用の拡張機能をインストールする必要があります。

(ユーザースタイル管理ツールは設定済みなのでインストール!)

このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください
// ==UserScript==
// @name          Hacker Fresh
// @version       0.0.4
// @namespace     http://userscripts.psbarrett.com
// @description	  Highlights fresh comments on HN.
// @include       https://news.ycombinator.com/item*
// @grant         GM_addStyle
// ==/UserScript==
'use strict'

// Workaround Backwards Incompatible Change
if (typeof GM_addStyle == 'undefined') {
  var GM_addStyle = (aCss) => {
    'use strict';
    let head = document.getElementsByTagName('head')[0];
    if (head) {
      let style = document.createElement('style');
      style.setAttribute('type', 'text/css');
      style.textContent = aCss;
      head.appendChild(style);
      return style;
    }
    return null;
  };
}

GM_addStyle(
`td.vote-box {
  border-radius: 5px 0px 0px 5px;
}
.fresh-item {
  background-color: #FF944D;
}`);

function get_comment_id(vote_box) {
  var item_link_ele = vote_box.parentElement.querySelector('.comhead > .age > a');
  
  // Check for Deleted Comment
  if (item_link_ele === null) {
    return null;
  }
  
  var link = new URL(item_link_ele.href);
  return link.searchParams.get('id');
  
}

var all_vote_box = document.querySelectorAll('tbody > tr > td[valign=top]');

for (var e of all_vote_box) {
  e.classList.add("vote-box");
  
  var item_id = get_comment_id(e);
  if (item_id !== null) {
    var status = localStorage.getItem(item_id)

    if (status === null) {
      e.classList.add("fresh-item");
      localStorage.setItem(item_id, "seen")
    }
  }
}