Skip to content

Instantly share code, notes, and snippets.

@svaksha
Forked from kristopolous/hn_seach.js
Last active September 12, 2015 11:52
Show Gist options
  • Save svaksha/9a1614aea83f21c841c3 to your computer and use it in GitHub Desktop.
Save svaksha/9a1614aea83f21c841c3 to your computer and use it in GitHub Desktop.
hn job query search
function query() {
var
total = 0, shown = 0,
// HN is done with very unsemantic classes.
job_list = Array.prototype.slice.call(document.querySelectorAll('.c5a,.cae,.c00,.c9c,.cdd,.c73,.c88')),
query_list = Array.prototype.slice.call(arguments);
// This traverses up the dom stack trying to find a match of a specific class
function up_to(node, klass) {
if (node.className === klass) {
return node;
}
if(node === document.body) {
throw new Exception();
}
return up_to(node.parentNode, klass);
}
function display(node, what) {
up_to(node, 'athing').style.display = what;
}
// Turn them all off
job_list.forEach(function(node) {
display(node, 'none');
total ++;
});
query_list.forEach(function(query) {
if (query.forEach) {
var and_query_list = query.map(function(what) {
return new RegExp(what.toString(), 'i');
});
job_list.forEach(function(node) {
var
doesMatch = true,
toTest = node.innerHTML;
and_query_list.forEach(function(query) {
doesMatch &= (toTest.search(query) > -1);
})
if(doesMatch) {
display(node, 'block');
shown ++;
}
});
} else {
query = new RegExp(query.toString(), 'i');
job_list.forEach(function(node) {
if(node.innerHTML.search(query) !== -1) {
display(node, 'block');
shown ++;
}
});
}
});
return {shown: shown, total: total}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment