-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathactivitymap.min.js
More file actions
1 lines (1 loc) · 4.9 KB
/
activitymap.min.js
File metadata and controls
1 lines (1 loc) · 4.9 KB
1
(function(){ActivityMap=function(b,a){this.data=b;this.id="example-activity-map";this.parent="body";this.hue=85;this.title="Activity map: ";this.timeColumn="t";this.valueColumn="v";this.fit=false;this.compact=true;if(a){if(a.id!==undefined){this.id=a.id}if(a.parent!==undefined){this.parent=a.parent}if(a.colours!==undefined){this.colours=a.colours}if(a.title!==undefined){this.title=a.title}if(a.timeColumn!==undefined){this.timeColumn=a.timeColumn}if(a.valueColumn!==undefined){this.valueColumn=a.valueColumn}if(a.fit!==undefined){this.fit=a.fit}if(a.compact!==undefined){this.compact=a.compact}if(a.hue!==undefined){if(isNaN(a.hue)){throw"Invalid Hue specification: should be an integer"}else{if(a.hue<0||a.hue>360){throw"Invalid Hue specification: should be >= 0 and <= 360"}else{this.hue=a.hue}}}}this.luminosityScale=d3.scale.linear();this.init()};ActivityMap.prototype={init:function(){var b=this,a;b.process();if(typeof b.parent==="string"){a=d3.select(b.parent)}b.node=a.append("div").attr("id",b.id).attr("class","activity-map");b.parent=a;b.months={"0":{n:31,l:"January"},"1":{n:28,l:"February"},"2":{n:31,l:"March"},"3":{n:30,l:"April"},"4":{n:31,l:"May"},"5":{n:30,l:"June"},"6":{n:31,l:"July"},"7":{n:31,l:"August"},"8":{n:30,l:"September"},"9":{n:31,l:"October"},"10":{n:30,l:"November"},"11":{n:31,l:"December"}};b.weeks="SMTWTFS"},reorderColours:function(){var e=this,f=e.colours,d,b=0,a=f.length-1;while(b<a){d=f[b];f[b++]=f[a];f[a--]=d}},process:function(){var z=this,A=z.data,b,e={},g,k,r,o,u,j,h,l=[],q={},s=Number.MAX_VALUE,p=0,x=Number.MAX_VALUE,w=0,f=z.timeColumn,a=z.valueColumn;for(o=0,u=A.length;o<u;++o){b=A[o];if(b){j=b[f];if(!(j instanceof Date)){j=new Date(parseInt(j))}g=j.getFullYear();k=j.getMonth();r=j.getDate()-1;h=parseFloat(b[a]);if(e[g]===undefined){e[g]={}}if(e[g][k]===undefined){e[g][k]={}}if(e[g][k][r]===undefined){e[g][k][r]=h}if(s>g){s=g}if(p<g){p=g}if(x>h){x=h}if(w<h){w=h}if(q[g]===undefined){q[g]=g;l.push(g)}}}z.luminosityScale.domain([0,w]);z.luminosityScale.range([100,0]);z.processed={m:s,M:p,v:x,V:w,y:l,l:e}},fillWeekDayInitials:function(b){var c=this,a;for(a=0;a<7;++a){b.append("div").attr("class","amap-week-name").text(c.weeks[a])}},addWeekDayContainer:function(a){return a.append("div").attr("class","amap-week-days")},renderMonth:function(c,r,f,p){var q=this,h,g,s,t,o=q.months[f],a=q.processed.l,b=q.colours,l;if(q.compact){c.classed("amap-compact",true);n=c.append("div").attr("class","amap-month-days");n.append("div").attr("class","amap-month-name").text(o.l.substring(0,3));if(q.cellCount===0){week=q.addWeekDayContainer(n);q.fillWeekDayInitials(week);week=q.addWeekDayContainer(n);for(h=0;h<p;++h,++q.cellCount){week.append("div").attr("class","amap-empty-day")}}}else{n=c.append("div").attr("class","amap-month");n.append("div").attr("class","amap-month-name").text(o.l);n=n.append("div").attr("class","amap-month-days");week=q.addWeekDayContainer(n);q.fillWeekDayInitials(week);week=q.addWeekDayContainer(n);for(h=0;h<p;++h){week.append("div").attr("class","amap-empty-day").attr("title",(g+1)+" "+o.l+" "+r)}}for(g=0,p=o.n;g<p;++h,++g){if(q.cellCount%7===0){week=n.append("div").attr("class","amap-week-days")}try{t=a[r][f][g]}catch(k){}s=week.append("div").attr("class","amap-week-day").attr("title",(g+1)+" "+o.l+" "+r+(t?(" : "+t):""));q.cellCount++;if(h%7===0){s.classed("amap-week-start",true)}if(t){l=q.luminosityScale(t)+"%";s.classed("has-value",true).style("background-color",d3.hsl("hsl("+q.hue+","+100+"%,"+l+")"))}}p=h%7;if(!q.compact){while(h++%7){week.append("div").attr("class","amap-empty-day").attr("title",(g+1)+" "+o.l+" "+r)}}return p},renderYear:function(g){var c=this,e,b,a,f;c.months[1].n=g%4?28:29;f=c.blocks.append("div").attr("class","amap-year-block").attr("year",g);f.append("div").attr("class","amap-year-name").text(g);a=f.append("div").attr("class","amap-month-names");f=f.append("div").attr("class","amap-months");e=new Date(g,0,1);e=e.getDay();for(b=0;b<12;++b){e=c.renderMonth(f,g,b,e)}if(c.compact){f=f.append("div").attr("class","amap-month-days");f.append("div").attr("class","amap-month-name-filler");week=c.addWeekDayContainer(f);c.fillWeekDayInitials(week)}},isVisible:function(d,b){var a=d.getBoundingClientRect(),c=b.getBoundingClientRect();return !(a.top>c.bottom||a.bottom<c.top)},onScroll:function(c){var d=Number.MAX_VALUE,a=0,b;c.blocks.selectAll(".amap-year-block").each(function(){if(c.isVisible(this,c.blocks.node())){b=parseInt(d3.select(this).attr("year"));if(d>b){d=b}if(a<b){a=b}}});if(d===a){c.year.text(c.title+a)}else{c.year.text(c.title+d+"-"+a)}},render:function(){var d=this,b,e,a=d.processed.y;d.year=d.node.append("div").attr("class","amap-title");d.blocks=d.node.append("div").attr("class","amap-year-blocks");d.blocks.on("scroll",function(){d.onScroll(d)});for(b=0,e=a.length;b<e;++b){d.cellCount=0;d.renderYear(a[b])}d.onScroll(d);d.refit()},refit:function(){var a=this;if(!a.fit){a.blocks.style("height",(parseInt(a.node.style("height"))-parseInt(a.year.style("height")))+"px")}}}})();