forked from HumbleSoftware/envisionjs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
envision.min.js
2 lines (1 loc) · 12.7 KB
/
envision.min.js
1
2
humblevis={},function(){function d(a){this.options=a||{},this.children=[],this.node=null,this.rendered=!1}var a="humble-vis-first",b="humble-vis-last",c='<div class="humble-vis-visualization"></div>';T_CHILD_CONTAINER='<div class="humble-vis-child-container"></div>',d.prototype={render:function(a){var b=this.options;a=a||b.element;if(!a)throw"No element to render within.";return this.node=bonzo.create(c)[0],this.container=a,bonzo(a).append(this.node),_.each(this.children,function(a){this._renderChild(a)},this),this._updateClasses(),this.rendered=!0,this},add:function(a){return this.children.push(a),this.rendered&&(this._renderChild(a),this._updateClasses()),this},remove:function(a){var b=this.children,c=this.indexOf(a);return c!==-1&&(b.splice(c,1),bonzo(a.container).remove(),this._updateClasses()),this},setPosition:function(a,b){var c=this.children;return b>=0&&b<c.length&&this.remove(a)&&(this.rendered&&(b===c.length?this.node.appendChild(a.container):this.node.insertBefore(a.container,c[b].container)),c.splice(b,0,a),this._updateClasses()),this},indexOf:function(a){return _.indexOf(this.children,a)},getChild:function(a){var b=this.children;if(a<b.length)return b[a]},isFirst:function(a){return this.indexOf(a)===0?!0:!1},isLast:function(a){return this.indexOf(a)===this.children.length-1?!0:!1},_renderChild:function(a){var b=bonzo.create(T_CHILD_CONTAINER)[0];bonzo(this.node).append(b),a.render(b)},_updateClasses:function(){var c=this.children,d=0,e=c.length-1,f;_.each(c,function(c,g){f=bonzo(c.container),g===d?f.addClass(a):f.removeClass(a),g===e?f.addClass(b):f.removeClass(b)})}},humblevis.Visualization=d}(),function(){function d(b){b=b||{};var d=bonzo.create(c)[0];bonzo(d).addClass(b.name||""),this.options=b,this.node=d,b.flotr?this.api=new a.flotr.Child(b):b.drawing&&(this.api=b.drawing)}var a=humblevis,b="humble-vis-child",c='<div class="'+b+'"></div>';d.prototype={render:function(a){var b=this.node,c=this.options;a=a||c.element;if(!a)throw"No element to render within.";bonzo(a).addClass(c.name||"").append(this.node),this._setDimension("width"),this._setDimension("height"),this.container=a,this.draw(c.data,c.flotr)},draw:function(a,b){this.api&&this.api.draw(a,b,this.node)},getData:function(){return this.data},trigger:function(){this.api.trigger.apply(this.api,arguments)},attach:function(){this.api.attach.apply(this.api,arguments)},detach:function(){this.api.detach.apply(this.api,arguments)},_setDimension:function(a){var b=this.node,c=this.options;c[a]?bonzo(b).css(a,c[a]):c[a]=parseInt(bonzo(b).css(a),10),this[a]=c[a]}},a.Child=d}(),function(){function b(a){this.options=a=a||{},this.actions=[],this.actionOptions=[],this.followers=[],this.leaders=[],this.prevent={},a.leader&&this.leader(a.leader)}var a=humblevis;b.prototype={getLeaders:function(){return this.leaders},getFollowers:function(){return this.followers},getActions:function(){return this.actions},leader:function(a){return this.leaders.push(a),_.each(this.actions,function(b,c){this._bindLeader(a,b,this.actionOptions[c])},this),this},follower:function(a){return this.followers.push(a),this},group:function(a){return _.isArray(a)||(a=[a]),_.each(a,function(a){this.leader(a),this.follower(a)},this),this},add:function(a,b){return this.actions.push(a),this.actionOptions.push(b),_.each(this.leaders,function(c){this._bindLeader(c,a,b)},this),this},_bindLeader:function(a,b,c){_.each(b.events,function(b){var d=b.handler||b,e=b.consumer||b;a.attach(a,d,_.bind(function(a,b){if(this.prevent[name])return;c&&c.callback&&c.callback.call(this,b),this.prevent[name]=!0;try{_.each(this.followers,function(c){if(a===c)return;c.trigger(c,e,b)},this)}catch(d){throw this.prevent[name]=!1,d}this.prevent[name]=!1},this))},this)}},a.Interaction=b}(),function(){var a={events:[{handler:"select",consumer:"zoom"},"click"]};humblevis.action=humblevis.action||{},humblevis.action.selection=a}(),function(){var a={events:["hit","mouseout"]};humblevis.action=humblevis.action||{},humblevis.action.hit=a}(),function(){function a(a){a=a||{};var b;this.getData=function(){return this.bounded&&d(this),b},this.setData=function(a){var c,d;if(!_.isArray(a))throw new Error("Array expected.");if(a.length<2)throw new Error("Data must contain at least two dimensions.");d=a[0].length;for(c=a.length;c--;){if(!_.isArray(a[c]))throw new Error("Data dimensions must be arrays.");if(a[c].length!==d)throw new Error("Data dimensions must contain the same number of points.")}return b=a,this},a.data&&this.setData(a.data)}function b(a,b){var c=a.length,d;for(d=0;d<c;d++)if(a[d]>=b)break;return a[d]>b&&d>0&&d--,d}function c(a,b){var c;for(c=a.length;c--;)if(a[c]<=b)break;return a[c]<b&&c>0&&c++,c}function d(a){delete a.bounded;var d=a.getData(),e=a.length(),f=d[0],g=d[1],h=a.min||0,i=a.max||a.length(),j=b(f,h),k=c(f,i);a.setData([f.slice(j,k+1),g.slice(j,k+1)])}a.prototype={length:function(){return this.getData()[0].length},bound:function(a,b){return!_.isNumber(a)||!_.isNumber(b)?this:(this.min=a,this.max=b,this.bounded=!0,this)},subsampleMinMax:function(a){var d=this.bounded;delete this.bounded;var e=this.getData(),f=this.length(),g=e[0],h=e[1],i=d?b(g,this.min):0,j=d?c(g,this.max):f-1,k=(a-2)/2,l=[],m=[],n=Number.MAX_VALUE,o=-Number.MAX_VALUE,p=1,q=1,r=(j-i)/k,s,n,o,t,u,v;if(j-i+1>a){l.push(g[i]),m.push(h[i]),s=i+r;for(u=i;u<j;u++)u===Math.round(s)?(s+=r,v=Math.min(q,p),l.push(g[v]),m.push(h[v]),v=Math.max(q,p),l.push(g[v]),m.push(h[v]),p=u,n=h[p],q=u,o=h[q]):(h[u]>o&&(o=h[u],q=u),h[u]<n&&(n=h[u],p=u));u<s&&(l.push(g[p]),m.push(n),l.push(g[q]),m.push(o)),l.push(g[j]),m.push(h[j]),this.setData([l,m])}else this.bounded=!0;return this},subsample:function(a){var d=this.bounded;delete this.bounded;var e=this.getData(),f=this.length(),g=e[0],h=e[1],i=d?b(g,this.min):0,j=d?c(g,this.max):f-1,k=(j-i+1)/a,l=[],m=[],n,o;if(f>a){l.push(g[i]),m.push(h[i]);for(n=1;n<a;n++){if(n*k>=j-k)break;o=Math.round(n*k)+i,l.push(g[o]),m.push(h[o])}l.push(g[j]),m.push(h[j]),this.setData([l,m])}return this}},humblevis.Preprocessor=a}(),function(){var a={height:null,width:null,rendered:!1,render:function(a){var b=document.createElement("canvas"),c=bonzo(a).offset();this.height=c.height,this.width=c.width,bonzo(b).attr("height",c.height).attr("width",c.width).css({position:"absolute",top:"0px",left:"0px"}),a.appendChild(b),bonzo(a).css({position:"relative"}),typeof FlashCanvas!="undefined"&&FlashCanvas.initElement(b),this.context=b.getContext("2d"),this.rendered=!0},draw:function(a,b,c){this.rendered||this.render(c);var d=this.context,e=this.height,f=this.width,g=Math.round(e/2)-.5,h,i;b=b||{min:f/2,max:f/2},h=b.min+.5,i=b.max+.5,d.clearRect(0,0,f,e);if(h||i)d.save(),d.strokeStyle="#B6D9FF",d.fillOpacity=.5,d.fillStyle="rgba(182, 217, 255, .4)",d.beginPath(),h<=1?(d.moveTo(0,e),d.lineTo(0,-0.5)):(d.moveTo(h,e),d.quadraticCurveTo(h,g,Math.max(h-g,h/2),g),d.lineTo(Math.min(g,h/2),g),d.quadraticCurveTo(0,g,0,-0.5)),d.lineTo(f,-0.5),i>=f-1?d.lineTo(i,e):(d.quadraticCurveTo(f,g,Math.max(f-g,f-(f-i)/2),g),d.lineTo(Math.min(i+g,f-(f-i)/2),g),d.quadraticCurveTo(i,g,i,e)),d.stroke(),d.closePath(),d.fill(),d.restore()},trigger:function(a,b,c){b==="zoom"?this.zoom(a,c):b==="click"&&this.click(a)},zoom:function(a,b){var c=b.x||{},d=c.min,e=c.max,f=a.api;a.draw(null,{min:d,max:e})},click:function(a){a.draw(null,{min:a.width/2,max:a.width/2})}};humblevis.QuadraticDrawing=a}(),humblevis.templates=humblevis.templates||{},function(){function c(){return{name:"zoom",flotr:{}}}function d(){return{name:"summary",flotr:{handles:{show:!0},selection:{mode:"x"}}}}function e(a,b){var c=_.defaults(a,b);return c.flotr=_.defaults(c.flotr,b.flotr),c}var a=humblevis,b;b=function(b){var f=new a.Visualization,g=new a.Child(e(b.zoom||{},c())),h=new a.Child(e(b.summary||{},d())),i=new a.Interaction({leader:h});f.add(g).add(h),i.add(a.action.selection),i.follower(g),this.vis=f,this.interaction=i,b.container&&this.render(b.container)},b.prototype={render:function(a){this.vis.render(a)}},a.templates.Zoom=b}(),humblevis.flotr={},humblevis.flotr.defaultOptions={grid:{outlineWidth:0,labelMargin:0,horizontalLines:!1,verticalLines:!1},bars:{show:!1,barWidth:.5,fill:!0,lineWidth:1,fillOpacity:1},lines:{lineWidth:1},xaxis:{margin:!1,tickDecimals:0,showLabels:!1},yaxis:{margin:!1,showLabels:!1},shadowSize:!1},function(){function d(a){this.options=a||{},this.flotr=null,this._flotrDefaultOptions()}var a=humblevis,b=Flotr.EventAdapter,c=a.flotr.defaultOptions;d.prototype={draw:function(a,b,c){var d=this.options,e=[];a=a||d.data,b&&(b=Flotr.clone(b),_.extend(d.flotr,b),this._flotrDefaultOptions(b)),b=d.flotr,d.data=a,min=b.xaxis.min,max=b.xaxis.max,a=this._getDataArray(a);if(d.skipPreprocess)f=a;else{_.each(a,function(a,b){e[b]=this._processData(a)},this),e=e[0];var f=[],g=e[0],h=e[1],i;for(i=0;i<g.length;i++)f.push([g[i],h[i]]);f=[f]}if(!b)throw"No graph submitted.";this.flotr=Flotr.draw(c,f,b)},_processData:function(b){var c=this.options,d=c.processData,e=c.width,f=c.flotr.xaxis,g=f.min,h=f.max,i;return _.isFunction(b)?b(g,h,e):(d?(i=new a.Preprocessor({data:b}),d.apply(this,[{preprocessor:i,min:g,max:h,resolution:e}])):i=(new a.Preprocessor({data:b})).bound(g,h).subsampleMinMax(e),i.getData())},_getDataArray:function(a){return a[0]&&(!_.isArray(a[0])||a[0][0]&&_.isArray(a[0][0]))?a:[a]},_flotrDefaultOptions:function(a){var b=a||this.options.flotr,d;for(d in c)c.hasOwnProperty(d)&&(_.isUndefined(b[d])?b[d]=c[d]:_.defaults(b[d],c[d]))},attach:function(a,c,d){var e=this.events[c]||{},c=e.name||!1,f=e.handler||!1;return f?b.observe(a.node,c,function(){var b=[a].concat(Array.prototype.slice.call(arguments)),c=f.apply(this,b);return d.apply(null,[a,c])}):!1},detach:function(a,c,d){return b.stopObserve(a.node,c,handler)},trigger:function(a,b,c){var d=this.events[b],e=d.consumer||!1;return e?e.apply(this,[a,c]):!1},events:{hit:{name:"flotr:hit",handler:function(a,b){var c=b.x,d=b.y,e=a.api.flotr,f;return f={data:{index:b.index,x:c,y:d},x:e.axes.x.d2p(c),y:e.axes.y.d2p(d)},f},consumer:function(a,b){var c=a.api.flotr,d;d={x:b.data.x,y:b.data.y||1,relX:b.x,relY:b.y||1},c.hit.hit(d)}},select:{name:"flotr:selecting",handler:function(a,b){var c=a.options.flotr.selection.mode,d=a.api.flotr.axes,e,f,g,h,i;return c.indexOf("x")!==-1&&(e={},e.min=b.x1,e.max=b.x2,g={},g.min=d.x.d2p(b.x1),g.max=d.x.d2p(b.x2)),c.indexOf("y")!==-1&&(f={},f.min=b.y1,f.max=b.y2,h={},h.min=d.y.d2p(b.y1),h.max=d.y.d2p(b.y2)),i={data:{x:e,y:f},x:g,y:h},i},consumer:function(a,b){var c=a.api.flotr,d=c.axes,e=b.data||{},f={},g=b.x,h=b.y;!g&&e.x?(g=e.x,f.x1=d.x.d2p(g.min),f.x2=d.x.d2p(g.max)):g&&(f.x1=g.min,f.x2=g.max),!h&&e.y?(h=e.y,f.y1=d.y.d2p(h.min),f.y2=d.y.d2p(h.max)):h&&(f.y1=h.min,f.y2=h.max),c.selection.setSelection(f)}},zoom:{consumer:function(a,b){var c=b.data.x,d=b.data.y,e={};c&&(e.xaxis={min:c.min,max:c.max}),d&&(e.yaxis={min:d.min,max:d.max}),a.draw(null,e)}},mouseout:{name:"flotr:mouseout",handler:function(a){},consumer:function(a){a.api.flotr.hit.clearHit()}},click:{name:"flotr:click",handler:function(a){var b=a.api.flotr.axes.x.min,c=a.api.flotr.axes.x.max;return{data:{x:{min:b,max:c}},x:{min:a.api.flotr.axes.x.d2p(b),max:a.api.flotr.axes.x.d2p(c)}}},consumer:function(a,b){var c=b.data.x,d=b.data.y,e={};c&&(e.xaxis={min:c.min,max:c.max}),d&&(e.yaxis={min:d.min,max:d.max}),a.draw(null,e)}}}},a.flotr.Child=d}(),Flotr.addType("lite-lines",{options:{show:!1,lineWidth:2,fill:!1,fillBorder:!1,fillColor:null,fillOpacity:.4},draw:function(a){var b=a.context,c=a.lineWidth,d=a.shadowSize,e;b.save(),b.lineCap="butt",b.lineWidth=c,b.strokeStyle=a.color,this.plot(a),b.restore()},plot:function(a){var b=a.context,c=a.xScale,d=a.yScale,e=a.data,f=e.length-1,g=c(e[0][0]),h=d(e[0][1]),j=d(0);if(f<1)return;b.beginPath(),b.moveTo(g,h);for(i=0;i<f;++i)b.lineTo(c(e[i+1][0]),d(e[i+1][1]));(!a.fill||a.fill&&!a.fillBorder)&&b.stroke(),a.fill&&(g=c(e[0][0]),b.fillStyle=a.fillStyle,b.lineTo(c(e[f][0]),j),b.lineTo(g,j),b.lineTo(g,d(e[0][1])),b.fill(),a.fillBorder&&b.stroke())}}),Flotr.addType("whiskers",{options:{show:!1,lineWidth:2,barWidth:1,fill:!0,fillColor:null,fillOpacity:.4,horizontal:!1,stacked:!1,centered:!0},stack:{positive:[],negative:[],_positive:[],_negative:[]},draw:function(a){var b=a.context;b.save(),b.lineJoin="miter",b.lineCap="butt",b.lineWidth=a.lineWidth,b.strokeStyle=a.color,a.fill&&(b.fillStyle=a.fillStyle),this.plot(a),b.restore()},plot:function(a){var b=a.data,c=a.context,d=a.shadowSize,e=a.xScale,f=a.yScale,g=f(0),h,i;if(b.length<1)return;c.translate(-a.lineWidth,0),c.beginPath();for(h=0;h<b.length;h++)i=e(b[h][0]),c.moveTo(i,g),c.lineTo(i,f(b[h][1]));c.closePath(),c.stroke()},drawHit:function(a){var b=a.args,c=a.context,d=a.shadowSize,e=a.xScale,f=a.yScale,g=f(0),h=e(b.x),i=f(b.y);c.save(),c.translate(-a.lineWidth,0),c.beginPath(),c.moveTo(h,g),c.lineTo(h,i),c.closePath(),c.stroke(),c.restore()},clearHit:function(a){var b=a.args,c=a.context,d=a.shadowSize,e=a.xScale,f=a.yScale,g=a.lineWidth,h=f(0),i=e(b.x),j=f(b.y);c.save(),c.clearRect(i-2*g,j-g,4*g,h-j+g),c.restore()}})