Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Betteridge's Law for Hacker News
// ==UserScript==
// @name BetteridgeLinks
// @description Lowlight headlines on Hacker News that conform to Betteridge's Law
// @version 0.3
// @match http://news.ycombinator.com/*
// @author noibl <pjpee6w5pc@snkmail.com>
// ==/UserScript==
var questions = ['Is', 'Are', 'Does', 'Do', 'Has', 'Have', 'Did', 'Will', 'Can', 'Could', 'Should'];
var selector = '.title a';
var label = 'Probably not';
var className = 'hn-betteridge';
var cssRules = 'a.hn-betteridge:link { color: #828282; } '
+ 'a.hn-betteridge:after {'
+ 'color: #600; font-size: 50%; '
+ 'text-transform: uppercase; '
+ 'letter-spacing: 1px; '
+ 'background-color: #fff; '
+ 'content: " ' + label + '" '
+ '}';
var pages = [
'^/$',
'^/news$',
'^/newest$',
'^/x$'
];
init();
function init() {
var re;
for (var i = 0; i < pages.length; i++) {
re = new RegExp(pages[i]);
if (re.test(window.location.pathname)) {
run();
break;
}
}
}
function run() {
var head = document.getElementsByTagName('head')[0],
style = document.createElement('style'),
rules = document.createTextNode(cssRules);
style.type = 'text/css';
if (style.styleSheet) { style.styleSheet.cssText = rules.nodeValue; }
else { style.appendChild(rules); }
head.appendChild(style);
testLinks();
}
function testLinks() {
var links = document.querySelectorAll(selector);
for (var i = 0; i < links.length; i++) {
if (isBetteridge(links[i].innerHTML)) {
links[i].className += ' ' + className;
}
}
}
function isBetteridge(text) {
var re = new RegExp('^(' + questions.join('|') + ').*\\?$');
return re.test(text);
}
@iangreenleaf

This comment has been minimized.

Copy link

@iangreenleaf iangreenleaf commented Jun 17, 2012

I really ❤️ this idea. I'm seriously considering forking this and trying to get it to apply to all news sites.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment