Skip to content

Instantly share code, notes, and snippets.

@jpwhitaker
Created August 1, 2016 21:48
Show Gist options
  • Save jpwhitaker/8079a10c02eb7a9d017a2a216bf3c5df to your computer and use it in GitHub Desktop.
Save jpwhitaker/8079a10c02eb7a9d017a2a216bf3c5df to your computer and use it in GitHub Desktop.
function hn_filter(/* terms1, terms2, ..., termsN, removeMisses */) {
var termSets = Array.prototype.slice.call(arguments),
removeMisses = typeof(termSets[termSets.length - 1]) === 'boolean' ? termSets.pop() : false,
haystack = document.querySelectorAll('span.comment');
return Array.prototype.slice.call(haystack).filter(function(post) {
var hit = termSets.reduce(function(result, terms) {
return terms.reduce(function(result, term) {
var index = post.innerHTML.search(new RegExp(term, 'i'));
if (index === -1) return result;
post.innerHTML = [
post.innerHTML.substring(0, index),
'<span style="background-color:#03ffe8;">' + term + '</span>',
post.innerHTML.substring(index + term.length)
].join('');
return true;
}, false) && result;
}, true);
if (!hit && removeMisses) _remove(post);
return hit;
}).length;
function _remove(element) {
var holder = element;
while (holder.parentElement && !holder.id) holder = holder.parentElement;
holder.parentElement.removeChild(holder);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment