(function(exports){var dnaism=exports.dnaism={version:"0.1.0"};var dnaism_id=0;function dnaism_identity(d){return d}dnaism.context=function(){var context=new dnaism_context,step=1e4,size=1440,chrm,start,stop,event=d3.dispatch("focus","change","prepare","beforechange"),scale=context.scale=d3.scale.linear().range([0,size]),focus;function update(){scale.domain([start,stop]);return context}context.chrm=function(_){if(!arguments.length)return chrm;chrm=_;return update()};context.start=function(_){if(!arguments.length)return start;start=+_;return update()};context.stop=function(_){if(!arguments.length)return stop;stop=+_;return update()};context.step=function(_){if(!arguments.length)return step;step=+_;return update()};context.size=function(_){if(!arguments.length)return size;scale.range([0,size=+_]);return update()};context.focus=function(i){event.focus.call(context,focus=i);return context};context.on=function(type,listener){if(arguments.length<2)return event.on(type);event.on(type,listener);if(listener!==null){if(/^focus(\.|$)/.test(type))listener.call(context,focus);if(/^change(\.|$)/.test(type))listener.call(context,start,stop);if(/^prepare(\.|$)/.test(type))listener.call(context,start,stop);if(/^beforechange(\.|$)/.test(type))listener.call(context,start,stop)}return context};return update()};function dnaism_context(){}var dnaism_contextPrototype=dnaism.context.prototype=dnaism_context.prototype;function dnaism_metric(context){if(!(context instanceof dnaism_context))throw new Error("invalid context");this.context=context}var dnaism_metricPrototype=dnaism_metric.prototype;dnaism.metric=dnaism_metric;dnaism_metricPrototype.valueAt=function(){return NaN};dnaism_metricPrototype.alias=function(name){this.toString=function(){return name};return this};dnaism_metricPrototype.extent=function(){var i=0,n=this.context.size(),value,min=Infinity,max=-Infinity;while(++imax)max=value}return[min,max]};dnaism_metricPrototype.on=function(type,listener){return arguments.length<2?null:this};dnaism_metricPrototype.shift=function(){return this};dnaism_metricPrototype.on=function(){return arguments.length<2?null:this};dnaism_contextPrototype.metric=function(request,name){var context=this,metric=new dnaism_metric(context),id=".metric-"+ ++dnaism_id,start=-Infinity,stop,step=context.step(),size=context.size(),chrm=context.chrm(),values=[],event=d3.dispatch("change"),listening=0,fetching;function prepare(start1,stop){var steps=Math.min(size,Math.round((start1-start)/step));if(!steps||fetching)return;fetching=true;console.log("Requesting ..."+chrm+":"+start1+","+stop);request(start1,stop,chrm,step,function(error,data){fetching=false;if(error)return console.warn(error);var i=isFinite(start)?Math.round((start1-start)/step):0;for(var j=0,m=data.length;j1)metric.toString=function(){return name};return metric};var dnaism_metricOverlap=6;function dnaism_metricShift(request,offset){return function(start,stop,step,callback){request(+start+offset,+stop+offset,chrm,step,callback)}}dnaism_contextPrototype.horizon=function(){var context=this,mode="offset",buffer=document.createElement("canvas"),width=buffer.width=context.size(),height=buffer.height=30,scale=d3.scale.linear().interpolate(d3.interpolateRound),metric=dnaism_identity,extent=null,title=dnaism_identity,format=d3.format(".2s"),colors=["#08519c","#3182bd","#6baed6","#bdd7e7","#bae4b3","#74c476","#31a354","#006d2c"];function horizon(selection){selection.on("mousemove.horizon",function(){context.focus(Math.round(d3.mouse(this)[0]))}).on("mouseout.horizon",function(){context.focus(null)});selection.append("canvas").attr("width",width).attr("height",height);selection.append("span").attr("class","title").text(title);selection.append("span").attr("class","value");selection.each(function(d,i){var that=this,id=++dnaism_id,metric_=typeof metric==="function"?metric.call(that,d,i):metric,colors_=typeof colors==="function"?colors.call(that,d,i):colors,extent_=typeof extent==="function"?extent.call(that,d,i):extent,start=-Infinity,step=context.step(),canvas=d3.select(that).select("canvas"),span=d3.select(that).select(".value"),max_,m=colors_.length>>1,ready;canvas.datum({id:id,metric:metric_});canvas=canvas.node().getContext("2d");function change(start1,stop){canvas.save();var extent=metric_.extent();ready=extent.every(isFinite);if(extent_!=null)extent=extent_;var i0=0,max=Math.max(-extent[0],extent[1]);if(this===context){if(max==max_){i0=width-dnaism_metricOverlap;var dx=(start1-start)/step;if(dx=0)continue;canvas.fillRect(i,scale(-y1),1,y0-scale(-y1))}}}canvas.restore()}function focus(i){if(i==null)i=width-1;var value=metric_.valueAt(i);span.datum(value).text(isNaN(value)?null:format);if(i===width-1)span.datum(value).text(null)}context.on("change.horizon-"+id,change);context.on("focus.horizon-"+id,focus);metric_.on("change.horizon-"+id,function(start,stop){change(start,stop),focus();if(ready)metric_.on("change.horizon-"+id,dnaism_identity)})})}horizon.remove=function(selection){selection.on("mousemove.horizon",null).on("mouseout.horizon",null);selection.selectAll("canvas").each(remove).remove();selection.selectAll(".title,.value").remove();function remove(d){d.metric.on("change.horizon-"+d.id,null);context.on("change.horizon-"+d.id,null);context.on("focus.horizon-"+d.id,null)}};horizon.mode=function(_){if(!arguments.length)return mode;mode=_+"";return horizon};horizon.height=function(_){if(!arguments.length)return height;buffer.height=height=+_;return horizon};horizon.metric=function(_){if(!arguments.length)return metric;metric=_;return horizon};horizon.scale=function(_){if(!arguments.length)return scale;scale=_;return horizon};horizon.extent=function(_){if(!arguments.length)return extent;extent=_;return horizon};horizon.title=function(_){if(!arguments.length)return title;title=_;return horizon};horizon.format=function(_){if(!arguments.length)return format;format=_;return horizon};horizon.colors=function(_){if(!arguments.length)return colors;colors=_;return horizon};return horizon};dnaism_contextPrototype.axis=function(){var context=this,scale=context.scale,axis_=d3.svg.axis().scale(scale);var format=function(d){return context.chrm()+":"+d3.format("s")(d)};var format_log=function(d){return context.chrm()+":"+Math.round(d)};function axis(selection){var id=++dnaism_id,tick;var g=selection.append("svg").datum({id:id}).attr("width",context.size()).attr("height",Math.max(28,-axis.tickSize())).append("g").attr("transform","translate(0,"+(axis_.orient()==="top"?27:4)+")").call(axis_);context.on("change.axis-"+id,function(){g.call(axis_);if(!tick)tick=d3.select(g.node().appendChild(g.selectAll("text").node().cloneNode(true))).style("display","none").text(null)});context.on("focus.axis-"+id,function(i){if(tick){if(i==null){tick.style("display","none");g.selectAll("text").style("fill-opacity",null)}else{tick.style("display",null).attr("x",i).text(format(scale.invert(i)));var dx=tick.node().getComputedTextLength()+6;g.selectAll("text").style("fill-opacity",function(d){return Math.abs(scale(d)-i)