Created
December 8, 2011 13:41
-
-
Save spudtrooper/1447023 to your computer and use it in GitHub Desktop.
Bookmarklet to add colored histograms to polls on news.ycombinator.org
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<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> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* 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