var viz=viz||{};viz.Frame=function(a,t,i,e){this._dataset=e||a._ds,this._properties=a,this._width=raceme.dV(t,1280),this._height=raceme.dV(i,800),this._title="",this._legend_width=0,this._bar_width=.5,this.zoomable=!1,this.zoom_auto_focus=!1,this.gr=new Grape,this._frame_type="0x0",this.axis_x=null,this.axis_x2=null,this.axis_y=null,this.axis_y2=null,this._geo_variable=null,this._title_size=22,this._title_color="black",this._background_image="",this._chart_vertical_align="center",this._padding=0,this._framespace={x:0,y:0,width:this._width,height:this._height},this._dataspace={x:0,y:0,width:this._width,height:this._height},this._categorical_matrix={},this._map=null,this._map_shadow=!1,this._map_projection="mercator",this._default_map_color="rgb(200,200,200)",this._default_map_border=1,this._default_map_border_color="white",this._floating_legend=!1,this._legend_position="right",this._allow_label_overlapping=!1,this._label_placement="in"},viz.Frame.fn=viz.Frame.prototype,viz.Frame.fn.init=function(){var a=this,t=this._properties;this._padding>0&&(this._framespace.height-=2*this._padding,this._framespace.width-=2*this._padding,this._framespace.x+=this._padding,this._framespace.y+=this._padding);var i=(new Grape).enableEvents(!1);if(""!=this._background_image&&i.addTo(this.gr),""!=this._title){var e=raceme.label(this._title,this._framespace.x,this._framespace.y,this._title_color,this._title_size,"left","bottom").enableEvents(!1),s=e.getBBox();s.width>this._framespace.width&&(e=raceme.label(this._title,this._framespace.x,this._framespace.y,this._title_color,viz.Utils.map(this._title_size,0,s.width,0,this._framespace.width),"left","bottom").enableEvents(!1),s=e.getBBox()),e.enableEvents(!1),this.gr.addChild(e),this._framespace.height-=s.height+this._title_size/2,this._framespace.y+=s.height+this._title_size/2}if(1==t.countVariables(viz.ANIMATION)&&1==t.countVariables(viz.UNIT)){var _=this._dataset.getTicks(t.firstVariable(viz.ANIMATION)),r=t.getSettings(t.firstVariable(viz.ANIMATION),viz.ANIMATION,"transition_duration");"number"!=typeof r&&(r=null),this._player=new viz.Player(_,this._framespace.width-20,this._dataset.columnType(t.firstVariable(viz.ANIMATION))).time_transition(r),this.gr.addChild(this._player.getGrape().y(this._framespace.y+this._framespace.height-40).x(this._framespace.x+10)),this._framespace.height-=40}var h,l,d,o,n,p,g,c,x=t.countVariables(viz.POS_X),f=t.countVariables(viz.POS_Y);x>0&&(h=t.firstVariable(viz.POS_X),n=t.getSettings(h,viz.POS_X),x>1&&(l=t.secondVariable(viz.POS_X),p=t.getSettings(l,viz.POS_X))),f>0&&(d=t.firstVariable(viz.POS_Y),g=t.getSettings(d,viz.POS_Y),f>1&&(o=t.secondVariable(viz.POS_Y),c=t.getSettings(o,viz.POS_Y)));var m=!1;if(1==t.countVariables(viz.CONNECTION)){var v=t.getSettings(t.firstVariable(viz.CONNECTION),viz.CONNECTION);("area"==v.connection_type||"both"==v.connection_type)&&(m=!0)}if(t.legends_to_include.length>0){this.legends_grape=new Grape;for(var y=0,b=0;bthis._framespace.height){var S=this._height-this._framespace.height;this._framespace.height=P,this._height=this._framespace.height+S}}if(t.default_form==viz.BAR||m){for(var G,C=new Array,T=t.allVariables(viz.POS_X),k=t.allVariables(viz.POS_Y),B=0;B0&&0==t.countVariables(viz.SHAPE)&&t.default_form==viz.GEO_SHAPE&&(O=!0),this._map=new viz.Geo.Map(this._dataspace,this._map_projection,O),this._map._shadow=this._map_shadow,this._map._default_color=this._default_map_color,this._map._default_border=this._default_map_border,this._map._default_border_color=this._default_map_border_color,this._map.init(function(){if(a.labelsgr._force_redraw){for(var t=0;tthis._framespace.width/2?this.axis_x=new viz.Axis(t,h).length(this._framespace.width).orientation("horizontal"):this.axis_x=new viz.Axis(t,h).length(this._framespace.width-M-X).orientation("horizontal"),this.axis_x.applySettings(n),this._dataset.isCategorical(h)&&this.axis_x.ticks_format("outer"),this.axis_x.init();var I=this._framespace.x,N=this._framespace.y;1==this.axis_x._orientation_reversed&&(N+=V),0==this.axis_y._orientation_reversed&&(I+=M+X),M+X>this._framespace.width/2?(this._dataspace.x=I-X-M,this._dataspace.width=this._framespace.width):(this._dataspace.x=I,this._dataspace.width=this._framespace.width-M-X),this._dataspace.y=N,this._dataspace.height=this._framespace.height-V,1==this.axis_x._orientation_reversed?this.axis_x.getGrape().x(this._dataspace.x).y(N).addTo(this.gr):this.axis_x.getGrape().x(this._dataspace.x).y(N+this._dataspace.height).addTo(this.gr),1==this.axis_y._orientation_reversed?this.axis_y.getGrape().x(I+this._dataspace.width).y(N).addTo(this.gr):this.axis_y.getGrape().x(this._framespace.x+M).y(N).addTo(this.gr);for(var Y=this.axis_y2.getGrape(),E=0;Ethis._framespace.height/2?(this._dataspace.y=N-q-V,this._dataspace.height=this._framespace.height):(this._dataspace.y=N,this._dataspace.height=this._framespace.height-V-q),this._dataspace.x=I,this._dataspace.width=this._framespace.width-M,1==this.axis_x._orientation_reversed?this.axis_x.getGrape().x(this._dataspace.x).y(N).addTo(this.gr):this.axis_x.getGrape().x(this._dataspace.x).y(N+this._dataspace.height+q).addTo(this.gr),1==this.axis_y._orientation_reversed?this.axis_y.getGrape().x(I+this._dataspace.width).y(N).addTo(this.gr):this.axis_y.getGrape().x(this._framespace.x+M).y(N).addTo(this.gr);for(var R=this.axis_x2.getGrape(),E=0;Er.width&&(this._categorical_matrix.latest_x=0,this._categorical_matrix.latest_y+=h)}else if("1x0"==this._frame_type)t.x=r.x+i.getPoint(a[i._variable]),t.y=r.y+r.height/2;else if("1Cx1C"==this._frame_type)if(1==this._categorical_matrix.max_per_cell)t.x=r.x+i.getPoint(a[i._variable]),t.y=r.y+e.getPoint(a[e._variable]);else{var l=this._categorical_matrix.data[a[i._variable]][a[e._variable]],h=this._categorical_matrix._cell_width,d=this._categorical_matrix._x_cell_width;t.x=r.x+l.origin_x+l.latest_x+h/2,t.y=r.y+l.origin_y+l.latest_y+h/2,l.latest_x+=h,l.latest_x+h-1>d&&(l.latest_x=0,l.latest_y+=h)}else if("map"==this._frame_type){var o=a[this._properties.firstVariable(viz.POS_Y)],n=a[this._properties.firstVariable(viz.POS_X)];t=this._map.getPositionXY(o,n),t.x+=r.x,t.y+=r.y}else if("1x1"==this._frame_type){if("undefined"!=typeof this._bar_area_variable&&"undefined"!=typeof this._categorical_bar_area&&i._variable==this._bar_area_variable){this._tmp_categorical_bars_areas=this._tmp_categorical_bars_areas||{},"undefined"==typeof this._tmp_categorical_bars_areas[a[this._categorical_bar_area]]&&(this._tmp_categorical_bars_areas[a[this._categorical_bar_area]]=0);var p=this._tmp_categorical_bars_areas[a[this._categorical_bar_area]],g=p+a[i._variable];return t.x=[r.x+i.getPoint(p),r.x+i.getPoint(g)],this._tmp_categorical_bars_areas[a[this._categorical_bar_area]]=g,t.width=e.getSpacePoint(),t}if(t.x=r.x+i.getPoint(a[i._variable]),"undefined"!=typeof this._bar_area_variable&&"undefined"!=typeof this._categorical_bar_area&&e._variable==this._bar_area_variable){this._tmp_categorical_bars_areas=this._tmp_categorical_bars_areas||{},"undefined"==typeof this._tmp_categorical_bars_areas[a[this._categorical_bar_area]]&&(this._tmp_categorical_bars_areas[a[this._categorical_bar_area]]=0);var p=this._tmp_categorical_bars_areas[a[this._categorical_bar_area]],g=p+a[e._variable];return t.y=[r.y+e.getPoint(p),r.y+e.getPoint(g)],this._tmp_categorical_bars_areas[a[this._categorical_bar_area]]=g,t.width=i.getSpacePoint(),t}t.y=r.y+e.getPoint(a[e._variable])}else if("1x2"==this._frame_type){if(t.x=r.x+i.getPoint(a[i._variable]),"undefined"!=typeof this._bar_area_variable&&"undefined"!=typeof this._categorical_bar_area&&s._variable==this._bar_area_variable){this._tmp_categorical_bars_areas=this._tmp_categorical_bars_areas||{},"undefined"==typeof this._tmp_categorical_bars_areas[a[e._variable]]&&(this._tmp_categorical_bars_areas[a[e._variable]]={}),"undefined"==typeof this._tmp_categorical_bars_areas[a[e._variable]][a[this._categorical_bar_area]]&&(this._tmp_categorical_bars_areas[a[e._variable]][a[this._categorical_bar_area]]=0);var p=this._tmp_categorical_bars_areas[a[e._variable]][a[this._categorical_bar_area]],g=p+a[s._variable];return t.y=[r.y+s.getPoint(p),r.y+s.getPoint(g)],t.y[0]+=e.getPoint(a[e._variable])-e.getSpacePoint()/2,t.y[1]+=e.getPoint(a[e._variable])-e.getSpacePoint()/2,this._tmp_categorical_bars_areas[a[e._variable]][a[this._categorical_bar_area]]=g,t.width=i.getSpacePoint(),t}t.y=r.y+e.getPoint(a[e._variable])-e.getSpacePoint()/2+s.getPoint(a[s._variable])}else"2x1"==this._frame_type&&(t.y=r.y+e.getPoint(a[e._variable]),t.x=r.x+i.getPoint(a[i._variable])-i.getSpacePoint()/2+_.getPoint(a[_._variable]));return i?t.width=i.getSpacePoint():t.width=r.width,e?t.height=e.getSpacePoint():t.height=r.height,t},viz.Frame.fn.getCategoricalMatrix=function(a,t){var i=this._categorical_matrix;if(i.data={},"undefined"!=typeof a&&"undefined"!=typeof t){i.max_per_cell=0;for(var e=this._dataset.split(a),s=0;s3&&(i._cell_width=parseInt(i._cell_width)),i._cell_width>1?this._properties.default_area=(i._cell_width-1)*(i._cell_width-1):this._properties.default_area=i._cell_width*i._cell_width}else i.max_per_cell=this._dataset.length,i.latest_x=0,i.latest_y=0,i._cell_width=viz.Utils.squareWidthIntoRectangle(this._dataspace.width,this._dataspace.height,i.max_per_cell),i._cell_width=Math.min(i._cell_width,Math.sqrt(this._properties.default_area)),i._cell_width>3&&(i._cell_width=parseInt(i._cell_width)),i._cell_width>1?this._properties.default_area=(i._cell_width-1)*(i._cell_width-1):this._properties.default_area=i._cell_width*i._cell_width},viz.Frame.fn.addToGraphHandler=function(a,t){if(this._dataset.edges&&"graph"==this._frame_type){this.graph_handler=this.graph_handler||{};var i=t[this._dataset.edges.graph_index_var]+"";this.graph_handler[i]=this.graph_handler[i]||{},this.graph_handler[i].elm=a,this.graph_handler[i].row=t,this.makedraggable(a)}},viz.Frame.fn.makedraggable=function(a){var t=this,i={x:0,y:0};a.drag(function(t){return t.stopPropagation(),i=a.point(t.clientX,t.clientY),!1},function(e){var s=a.point(e.clientX,e.clientY),_=i.x-s.x,r=i.y-s.y,h=a.scale(),l=a.x()-_*h,d=a.y()-r*h;if(l=Math.min(Math.max(t._dataspace.x,l),t._dataspace.x+t._dataspace.width),d=Math.min(Math.max(t._dataspace.y,d),t._dataspace.y+t._dataspace.height),a.x(l),a.y(d),i=a.point(e.clientX,e.clientY),t.tlp&&(t.tlp.tooltip.stop(),t.tlp.tooltip.hide(),t.tlp.tooltip.opacity(0)),a._labelsgroup._automatic_placement(),a._labelsgroup._check_overlapping(),a._edgesinout)for(var o=0;o=d?((e.nodes.length<150||0==n)&&p(),o=1,d*=1.05):o++,n++,n>40&&l.stop()}),l.on("end",function(){p()});var p=function(){for(var s=0;s