Skip to content

Instantly share code, notes, and snippets.

@spudtrooper
Created December 8, 2011 13:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save spudtrooper/1447023 to your computer and use it in GitHub Desktop.
Save spudtrooper/1447023 to your computer and use it in GitHub Desktop.
Bookmarklet to add colored histograms to polls on news.ycombinator.org
<a href='javascript:(function(){const d=75;function c(h,g){for(var f in g){h.style[f]=g[f]}}function b(j,g,h,f,i){i=i||j/2;return Math.floor(j-i*(f-g)/(f-h))}function e(q,g,l,p){var o=b(d,g,l,p);var k=b(255,g,l,p,238);var j="#"+k.toString(16)+"0000";var h=q.parentNode;h.appendChild(document.createTextNode(" "));var f=document.createElement("span");h.appendChild(f);var r={height:"100%","background-color":j,color:j};var n="";for(var m=0;m<o;m++){n+="|"}f.innerHTML=n;c(f,r);console.log(f)}function a(){var l=document.getElementsByTagName("span");var g=[];function q(i,p){return{span:i,score:p}}var j;var n;for(var k in l){var o=l[k];if(!o.id||!o.id.match(/score_/)){continue}var h=parseInt(o.innerHTML.match(/(\d+) /)[0]);if(!j||h<j){j=h}if(!n||h>n){n=h}g.push(q(o,h))}var m="";for(var k in g){if(k==0){continue}var f=g[k];e(f.span,f.score,j,n)}}a()})();'>ycombinator polls</a>
/*
* Bookmarklet to add colored histograms to polls on news.ycombinator.org
*
* e.g. http://imgur.com/8iPak
*/
(function() {
const MAX_CHARS = 75;
function setStyle(el,style) {
for (var i in style) {
el.style[i] = style[i];
}
}
function normalize(n,v,min,max,d) {
d = d || n/2;
return Math.floor(n - d*(max-v)/(max-min));
}
function createScoreDiv(span,score,min,max) {
var chars = normalize(MAX_CHARS,score,min,max);
var cval = normalize(0xff,score,min,max,0xee);
var color = "#" + cval.toString(16) + "0000";
var td = span.parentNode;
td.appendChild(document.createTextNode(" "));
var el = document.createElement("span");
td.appendChild(el);
var elStyle = {
"height": "100%",
"background-color": color,
"color": color
};
var str = "";
for (var i=0; i<chars; i++) str += "|";
el.innerHTML = str;
setStyle(el,elStyle);
console.log(el);
}
function main() {
var spans = document.getElementsByTagName("span");
var pairs = [];
function makePair(span,score) {
return {span:span, score:score};
}
var min;
var max;
for (var i in spans) {
var span = spans[i];
if (!span.id || !span.id.match(/score_/)) continue;
var score = parseInt(span.innerHTML.match(/(\d+) /)[0]);
if (!min || score<min) min = score;
if (!max || score>max) max = score;
pairs.push(makePair(span,score));
}
for (var i in pairs) {
// Skip the first one
if (i==0) continue;
var p = pairs[i];
createScoreDiv(p.span,p.score,min,max)
}
}
main();
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment