UNPKG

biojs-vis-inchlib

Version:
2 lines 100 kB
!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;"undefined"!=typeof window?e=window:"undefined"!=typeof global?e=global:"undefined"!=typeof self&&(e=self),e.biojsVisInchlib=t()}}(function(){var t;return function e(t,n,r){function o(a,s){if(!n[a]){if(!t[a]){var l="function"==typeof require&&require;if(!s&&l)return l(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var _=n[a]={exports:{}};t[a][0].call(_.exports,function(e){var n=t[a][1][e];return o(n?n:e)},_,_.exports,e,t,n,r)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;a<r.length;a++)o(r[a]);return o}({1:[function(t,e){{var n,r;t("backbone"),new Date}e.exports=n=function(t){r=this,r.user_settings=t,r.target_element=$("#"+t.target);var e=r.target_element.width();r.target_element.css({position:"relative"}),r.settings={target:"YourOwnDivId",heatmap:!0,heatmap_header:!0,dendrogram:!0,metadata:!1,column_metadata:!1,column_metadata_row_height:8,column_metadata_colors:"RdLrBu",max_height:800,width:e,heatmap_colors:"Greens",heatmap_font_color:"black",heatmap_part_width:.7,column_dendrogram:!1,independent_columns:!0,metadata_colors:"Reds",highlight_colors:"Oranges",highlighted_rows:[],label_color:"#9E9E9E",count_column:!1,count_column_colors:"Reds",min_row_height:!1,max_row_height:25,max_column_width:150,font:"Helvetica",draw_row_ids:!1,show_export_button:!0,max_percentile:100,min_percentile:0,middle_percentile:50},$.extend(r.settings,t),r.settings.width=t.max_width&&t.max_width<e?t.max_width:r.settings.width,r.settings.heatmap_part_width=r.settings.heatmap_part_width>.9?.9:r.settings.heatmap_part_width,r.header_height=150,r.footer_height=70,r.dendrogram_heatmap_distance=5,r.colors={YlGn:{start:{r:255,g:255,b:204},end:{r:35,g:132,b:67}},GnBu:{start:{r:240,g:249,b:232},end:{r:43,g:140,b:190}},BuGn:{start:{r:237,g:248,b:251},end:{r:35,g:139,b:69}},PuBu:{start:{r:241,g:238,b:246},end:{r:5,g:112,b:176}},BuPu:{start:{r:237,g:248,b:251},end:{r:136,g:65,b:157}},RdPu:{start:{r:254,g:235,b:226},end:{r:174,g:1,b:126}},PuRd:{start:{r:241,g:238,b:246},end:{r:206,g:18,b:86}},OrRd:{start:{r:254,g:240,b:217},end:{r:215,g:48,b:31}},Purples2:{start:{r:242,g:240,b:247},end:{r:106,g:81,b:163}},Blues:{start:{r:239,g:243,b:255},end:{r:33,g:113,b:181}},Greens:{start:{r:237,g:248,b:233},end:{r:35,g:139,b:69}},Oranges:{start:{r:254,g:237,b:222},end:{r:217,g:71,b:1}},Reds:{start:{r:254,g:229,b:217},end:{r:203,g:24,b:29}},Greys:{start:{r:247,g:247,b:247},end:{r:82,g:82,b:82}},PuOr:{start:{r:230,g:97,b:1},end:{r:94,g:60,b:153}},BrBG:{start:{r:166,g:97,b:26},end:{r:1,g:133,b:113}},RdBu:{start:{r:202,g:0,b:32},end:{r:5,g:113,b:176}},RdGy:{start:{r:202,g:0,b:32},end:{r:64,g:64,b:64}},BuYl:{start:{r:5,g:113,b:176},end:{r:250,g:233,b:42}},YlOrR:{start:{r:255,g:255,b:178},end:{r:227,g:26,b:28},middle:{r:204,g:76,b:2}},YlOrB:{start:{r:255,g:255,b:212},end:{r:5,g:112,b:176},middle:{r:204,g:76,b:2}},PRGn2:{start:{r:123,g:50,b:148},end:{r:0,g:136,b:55},middle:{r:202,g:0,b:32}},PiYG2:{start:{r:208,g:28,b:139},end:{r:77,g:172,b:38},middle:{r:255,g:255,b:178}},YlGnBu:{start:{r:255,g:255,b:204},end:{r:34,g:94,b:168},middle:{r:35,g:132,b:67}},RdYlBu:{start:{r:215,g:25,b:28},end:{r:44,g:123,b:182},middle:{r:255,g:255,b:178}},RdYlGn:{start:{r:215,g:25,b:28},end:{r:26,g:150,b:65},middle:{r:255,g:255,b:178}},BuWhRd:{start:{r:33,g:113,b:181},middle:{r:255,g:255,b:255},end:{r:215,g:25,b:28}},RdLrBu:{start:{r:215,g:25,b:28},middle:{r:254,g:229,b:217},end:{r:44,g:123,b:182}},RdBkGr:{start:{r:215,g:25,b:28},middle:{r:0,g:0,b:0},end:{r:35,g:139,b:69}},RdLrGr:{start:{r:215,g:25,b:28},middle:{r:254,g:229,b:217},end:{r:35,g:139,b:69}}},r.objects_ref={tooltip_label:new Kinetic.Label({opacity:1,listening:!1}),tooltip_tag:new Kinetic.Tag({fill:r.settings.label_color,pointerWidth:10,pointerHeight:10,lineJoin:"round",listening:!1}),tooltip_text:new Kinetic.Text({fontFamily:r.settings.font,fontSize:12,padding:8,fill:"white",fontStyle:"bold",listening:!1,align:"center",lineHeight:1.2}),node:new Kinetic.Line({stroke:"grey",strokeWidth:2,lineCap:"sqare",lineJoin:"round",listening:!1}),node_rect:new Kinetic.Rect({fill:"white",opacity:0}),icon_overlay:new Kinetic.Rect({width:32,height:32,opacity:0}),heatmap_value:new Kinetic.Text({fontFamily:r.settings.font,fill:r.settings.heatmap_font_color,fontStyle:"bold",listening:!1}),heatmap_line:new Kinetic.Line({lineCap:"butt",value:!1}),column_header:new Kinetic.Text({fontFamily:r.settings.font,fontStyle:"bold",fill:"black"}),count:new Kinetic.Text({fontSize:10,fill:"#6d6b6a",fontFamily:r.settings.font,fontStyle:"bold",listening:!1}),cluster_overlay:new Kinetic.Rect({fill:"white",opacity:.5}),cluster_border:new Kinetic.Line({stroke:"black",strokeWidth:1,dash:[6,2]}),icon:new Kinetic.Path({fill:"grey"}),rect_gradient:new Kinetic.Rect({x:0,y:80,width:100,height:20,fillLinearGradientStartPoint:{x:0,y:80},fillLinearGradientEndPoint:{x:100,y:80},stroke:"#D2D2D2",strokeWidth:"1px"})},r.paths_ref={zoom_icon:"M22.646,19.307c0.96-1.583,1.523-3.435,1.524-5.421C24.169,8.093,19.478,3.401,13.688,3.399C7.897,3.401,3.204,8.093,3.204,13.885c0,5.789,4.693,10.481,10.484,10.481c1.987,0,3.839-0.563,5.422-1.523l7.128,7.127l3.535-3.537L22.646,19.307zM13.688,20.369c-3.582-0.008-6.478-2.904-6.484-6.484c0.006-3.582,2.903-6.478,6.484-6.486c3.579,0.008,6.478,2.904,6.484,6.486C20.165,17.465,17.267,20.361,13.688,20.369zM15.687,9.051h-4v2.833H8.854v4.001h2.833v2.833h4v-2.834h2.832v-3.999h-2.833V9.051z",unzoom_icon:"M22.646,19.307c0.96-1.583,1.523-3.435,1.524-5.421C24.169,8.093,19.478,3.401,13.688,3.399C7.897,3.401,3.204,8.093,3.204,13.885c0,5.789,4.693,10.481,10.484,10.481c1.987,0,3.839-0.563,5.422-1.523l7.128,7.127l3.535-3.537L22.646,19.307zM13.688,20.369c-3.582-0.008-6.478-2.904-6.484-6.484c0.006-3.582,2.903-6.478,6.484-6.486c3.579,0.008,6.478,2.904,6.484,6.486C20.165,17.465,17.267,20.361,13.688,20.369zM8.854,11.884v4.001l9.665-0.001v-3.999L8.854,11.884z",lightbulb:"M15.5,2.833c-3.866,0-7,3.134-7,7c0,3.859,3.945,4.937,4.223,9.499h5.553c0.278-4.562,4.224-5.639,4.224-9.499C22.5,5.968,19.366,2.833,15.5,2.833zM15.5,28.166c1.894,0,2.483-1.027,2.667-1.666h-5.334C13.017,27.139,13.606,28.166,15.5,28.166zM12.75,25.498h5.5v-5.164h-5.5V25.498z"}},n.prototype._update_user_settings=function(t){for(var e,n={},o=0,i=Object.keys(t),a=i.length;a>o;o++)e=i[o],void 0!==r.user_settings[e]&&r.user_settings[e]!==t[e]&&r.user_settings[e]===!0?n[e]=!1:void 0===r.user_settings[e]&&(n[e]=t[e]);$.extend(r.settings,n)},n.prototype.read_data=function(t){r.json=t,r.data=r.json.data;var e={};void 0!==r.json.metadata?(r.metadata=r.json.metadata,e.metadata=!0):e.metadata=!1,void 0!==r.json.column_dendrogram?(r.column_dendrogram=r.json.column_dendrogram,e.column_dendrogram=!0):e.column_dendrogram=!1,void 0!==r.json.column_metadata?(r.column_metadata=r.json.column_metadata,e.column_metadata=!0):e.column_metadata=!1,r._update_user_settings(e),r._add_prefix()},n.prototype.read_data_from_file=function(t){$.ajax({type:"GET",url:t,dataType:"json",success:function(t){r.read_data(t)},async:!1})},n.prototype._add_prefix=function(){if(r.data.nodes=r._add_prefix_to_data(r.data.nodes),r.settings.metadata){for(var t={},e=0,n=Object.keys(r.metadata.nodes),o=n.length;o>e;e++)id=[r.settings.target,n[e]].join("#"),t[id]=r.metadata.nodes[n[e]];r.metadata.nodes=t}r.column_dendrogram&&(r.column_dendrogram.nodes=r._add_prefix_to_data(r.column_dendrogram.nodes))},n.prototype._add_prefix_to_data=function(t){for(var e,n={},o=0,i=Object.keys(t),a=i.length;a>o;o++)e=[r.settings.target,i[o]].join("#"),n[e]=t[i[o]],void 0!==n[e].parent&&(n[e].parent=[r.settings.target,n[e].parent].join("#")),1!=n[e].count&&(n[e].left_child=[r.settings.target,n[e].left_child].join("#"),n[e].right_child=[r.settings.target,n[e].right_child].join("#"));return n},n.prototype._get_root_id=function(t){for(var e,n=0,r=Object.keys(t),o=r.length;o>n;n++)if(void 0===t[r[n]].parent){e=r[n];break}return e},n.prototype._get_dimensions=function(){var t,e,n,o={data:0,metadata:0,overall:0};for(n=0,e=Object.keys(r.data.nodes),len=e.length;len>n;n++)if(t=e[n],1==r.data.nodes[t].count){o.data=r.data.nodes[t].features.length;break}return r.settings.metadata&&(t=Object.keys(r.metadata.nodes)[0],o.metadata=r.metadata.nodes[t].length),o.overall=o.data+o.metadata,o},n.prototype._get_min_max_middle=function(t){var e,n,o=[],i=[];for(e=0,n=t.length;n>e;e++)i=i.concat(t[e].filter(function(t){return null!==t}));var n=i.length;return i.sort(function(t,e){return t-e}),o.push(r.settings.min_percentile>0?i[r._hack_round(n*r.settings.min_percentile/100)]:Math.min.apply(null,i)),o.push(r.settings.max_percentile<100?i[r._hack_round(n*r.settings.max_percentile/100)]:Math.max.apply(null,i)),o.push(50!=r.settings.middle_percentile?i[r._hack_round(n*r.settings.middle_percentile/100)]:i[r._hack_round((n-1)/2)]),o},n.prototype._get_data_min_max_middle=function(t,e){void 0===e&&(e="column");var n,o,i,a,s,l=t[0].length;if("column"==e){for(s=[],n=0;l>n;n++)s.push([]);for(n=0;n<t.length;n++)for(o=0;l>o;o++)i=t[n][o],null!==i&&void 0!==i&&s[o].push(i)}else s=t.slice(0);var c,_,u,d={};for(n=0;n<s.length;n++)if(r._is_number(s[n][0]))s[n]=s[n].map(parseFloat),s[n].sort(function(t,e){return t-e}),a=s[n].length,_=r.settings.max_percentile<100?s[n][r._hack_round(a*r.settings.max_percentile/100)]:Math.max.apply(null,s[n]),c=r.settings.min_percentile>0?s[n][r._hack_round(a*r.settings.min_percentile/100)]:Math.min.apply(null,s[n]),u=50!=r.settings.middle_percentile?s[n][r._hack_round(a*r.settings.middle_percentile/100)]:s[n][r._hack_round((a-1)/2)],d[n]={min:c,max:_,middle:u};else{var h=r._get_hash_object(s[n]);c=0,_=r._hack_size(h)-1,u=_/2,d[n]={min:c,max:_,middle:u,str2num:h}}return d},n.prototype._get_hash_object=function(t){var e,n=0,r={};for(e=0;e<t.length;e++)void 0===r[t[e]]&&(r[t[e]]=n,n++);return r},n.prototype._get_max_length=function(t){var e=t.map(function(t){return(""+t).length}),n=Math.max.apply(Math,e);return n},n.prototype._get_max_value_length=function(){for(var t,e,n=r.data.nodes,o=0,i=0,a=Object.keys(n),s=a.length;s>i;i++)if(e=a[i],1==n[e].count){t=n[e].features;for(var l=0,c=t.length;c>l;l++)(""+t[l]).length>o&&(o=(""+t[l]).length)}if(r.settings.metadata){n=r.metadata.nodes;for(var i=0,a=Object.keys(n),s=a.length;s>i;i++){e=a[i],t=n[e];for(var l=0,c=t.length;c>l;l++)(""+t[l]).length>o&&(o=(""+t[l]).length)}}return o},n.prototype._preprocess_heatmap_data=function(){var t,e,n,o,i,a,s=[],l=0;for(t=0,e=Object.keys(r.data.nodes),o=e.length;o>t;t++)n=e[t],a=r.data.nodes[n],1==a.count&&(i=a.features,s.push([n]),s[l].push.apply(s[l],i),r.settings.metadata&&s[l].push.apply(s[l],r.metadata.nodes[n]),l++);return s},n.prototype._reorder_heatmap=function(t){r.leaves_y_coordinates={},t++,r.ordered_by_index==t?r.heatmap_array.reverse():r.heatmap_array.sort(r._is_number(r.heatmap_array[0][t])?function(e,n){return null==e[t]?-1:null==n[t]?1:e[t]-n[t]}:function(e,n){return null==e[t]?-1:null==n[t]?1:e[t]>n[t]?1:e[t]<n[t]?-1:0});for(var e=r.pixels_for_leaf/2+r.header_height,n=0,o=r.heatmap_array.length;o>n;n++)r.leaves_y_coordinates[r.heatmap_array[n][0]]=e,e+=r.pixels_for_leaf;r.ordered_by_index=t},n.prototype.draw=function(){r.zoomed_clusters={row:[],column:[]},r.last_highlighted_cluster=null,r.current_object_ids=[],r.current_column_ids=[],r.heatmap_array=r._preprocess_heatmap_data(),r.settings.heatmap?(r.last_column=null,r.on_features={data:[],metadata:[]},r.dimensions=r._get_dimensions(),r.column_metadata_rows=r.settings.column_metadata?r.column_metadata.features.length:0,r.column_metadata_height=r.column_metadata_rows*r.settings.column_metadata_row_height,r._set_heatmap_settings(),r._adjust_leaf_size(r.heatmap_array.length)):(r._adjust_horizontal_sizes(),r.dimensions={data:0,metadata:0,overall:0}),r.settings.column_dendrogram&&r.heatmap_header&&(r.footer_height=150),r.stage=new Kinetic.Stage({container:r.settings.target}),r.settings.height=r.heatmap_array.length*r.pixels_for_leaf+r.header_height+r.footer_height,r.stage.setWidth(r.settings.width),r.stage.setHeight(r.settings.height),r._draw_stage_layer(),r.settings.dendrogram?(r.timer=0,r._draw_dendrogram_layers(),r.root_id=r._get_root_id(r.data.nodes),r._draw_row_dendrogram(r.root_id),r.settings.column_dendrogram&&r.settings.dendrogram&&(r.column_root_id=r._get_root_id(r.column_dendrogram.nodes),r.nodes2columns=!1,r.columns_start_index=0,r._draw_column_dendrogram(r.column_root_id))):(r.settings.column_dendrogram=!1,r._reorder_heatmap(0),r.ordered_by_index=0),r._draw_heatmap(),r._draw_heatmap_header(),r._draw_navigation(),r.highlight_rows(r.settings.highlighted_rows)},n.prototype._draw_dendrogram_layers=function(){r.cluster_layer=new Kinetic.Layer,r.dendrogram_hover_layer=new Kinetic.Layer,r.stage.add(r.cluster_layer,r.dendrogram_hover_layer),r.cluster_layer.on("click",function(t){r.unhighlight_cluster(),r.unhighlight_column_cluster(),r.trigger("empty_space_onclick",t)})},n.prototype._draw_row_dendrogram=function(t){r.dendrogram_layer=new Kinetic.Layer;var e=r.data.nodes[t],n=e.count;r.distance_step=r.distance/e.distance,r.leaves_y_coordinates={},r.objects2leaves={},r._adjust_leaf_size(n),r.settings.height=n*r.pixels_for_leaf+r.header_height+r.footer_height+r.column_metadata_height,r.stage.setWidth(r.settings.width),r.stage.setHeight(r.settings.height);var o=0,i=0,a=r.header_height+r.column_metadata_height+r.pixels_for_leaf/2;e.count>1&&(o=r.data.nodes[e.left_child].count,i=r.data.nodes[e.right_child].count),r._draw_row_dendrogram_node(t,e,o,i,0,a),r.middle_item_count=(r.min_item_count+r.max_item_count)/2,r._draw_distance_scale(e.distance),r.stage.add(r.dendrogram_layer),r._bind_dendrogram_hover_events(r.dendrogram_layer),r.dendrogram_layer.on("click",function(t){r._dendrogram_layers_click(this,t)}),r.dendrogram_layer.on("mousedown",function(t){r._dendrogram_layers_mousedown(this,t)}),r.dendrogram_layer.on("mouseup",function(t){r._dendrogram_layers_mouseup(this,t)})},n.prototype._draw_row_dendrogram_node=function(t,e,n,o,i,a){if(1!=e.count){var s=r._get_node_neighbourhood(e,r.data.nodes),l=r.data.nodes[e.right_child],c=r.data.nodes[e.left_child],_=r._get_y1(s,n,o),u=r._get_y2(s,n,o),d=r._hack_round(r.distance-r.distance_step*e.distance);d=0==d?2:d;var h=d,g=r.distance-r.distance_step*r.data.nodes[e.left_child].distance,f=r.distance-r.distance_step*r.data.nodes[e.right_child].distance;1==l.count&&(u+=r.pixels_for_leaf/2),r.dendrogram_layer.add(r._draw_horizontal_path(t,d,_,h,u,g,f)),r._draw_row_dendrogram_node(e.left_child,c,n-s.left_node.right_count,o+s.left_node.right_count,g,_),r._draw_row_dendrogram_node(e.right_child,l,n+s.right_node.left_count,o-s.right_node.left_count,f,u)}else{var p=e.objects;r.leaves_y_coordinates[t]=a;for(var m=0,v=p.length;v>m;m++)r.objects2leaves[p[m]]=t;var y=e.objects.length;y<r.min_item_count&&(r.min_item_count=y),y>r.max_item_count&&(r.max_item_count=y)}},n.prototype._draw_stage_layer=function(){r.stage_layer=new Kinetic.Layer;var t=new Kinetic.Rect({x:0,y:0,width:r.settings.width,height:r.settings.height,opacity:0});r.stage_layer.add(t),t.moveToBottom(),r.stage.add(r.stage_layer),r.stage_layer.on("click",function(t){r.unhighlight_cluster(),r.unhighlight_column_cluster(),r.trigger("empty_space_onclick",t)})},n.prototype._draw_column_dendrogram=function(t){r.column_dendrogram_layer=new Kinetic.Layer,r.column_x_coordinates={};var e=r.column_dendrogram.nodes[t];r.current_column_count=e.count,r.vertical_distance=r.header_height,r.vertical_distance_step=r.vertical_distance/e.distance,r.last_highlighted_column_cluster=null;var n=r.column_dendrogram.nodes[e.left_child].count,o=r.column_dendrogram.nodes[e.right_child].count;r._draw_column_dendrogram_node(t,e,n,o,0,0),r.stage.add(r.column_dendrogram_layer),r.nodes2columns||(r.nodes2columns=r._get_nodes2columns()),r._bind_dendrogram_hover_events(r.column_dendrogram_layer),r.column_dendrogram_layer.on("click",function(t){r._column_dendrogram_layers_click(this,t)}),r.column_dendrogram_layer.on("mousedown",function(t){r._column_dendrogram_layers_mousedown(this,t)}),r.column_dendrogram_layer.on("mouseup",function(t){r._dendrogram_layers_mouseup(this,t)})},n.prototype._get_nodes2columns=function(){var t,e,n,o=[],i={},a={};for(n=0,keys=Object.keys(r.column_x_coordinates),len=keys.length;len>n;n++)t=keys[n],e=r.column_x_coordinates[t],i[e]=t,o.push(e);for(o.sort(function(t,e){return t-e}),n=0,len=o.length;len>n;n++)a[i[o[n]]]=n;return a},n.prototype._bind_dendrogram_hover_events=function(t){t.on("mouseover",function(t){r._dendrogram_layers_mouseover(this,t)}),t.on("mouseout",function(t){r._dendrogram_layers_mouseout(this,t)})},n.prototype._delete_layers=function(t,e){for(var n=0,r=t.length;r>n;n++)void 0!==t[n]&&t[n].destroy();if(void 0!==e)for(var n=0,r=e.length;r>n;n++)e[n].removeChildren(),e[n].draw()},n.prototype._delete_all_layers=function(){r.stage.destroyChildren()},n.prototype._adjust_leaf_size=function(t){r.pixels_for_leaf=(r.settings.max_height-r.header_height-r.footer_height-r.column_metadata_height-5)/t,r.pixels_for_leaf>2*r.pixels_for_dimension&&(r.pixels_for_leaf=2*r.pixels_for_dimension),r.pixels_for_leaf>r.settings.max_row_height&&(r.pixels_for_leaf=r.settings.max_row_height),r.settings.min_row_height>r.pixels_for_leaf&&(r.pixels_for_leaf=r.settings.min_row_height)},n.prototype._adjust_horizontal_sizes=function(t){void 0===t&&(t=r._get_visible_count()),r.right_margin=100,r.settings.dendrogram?(r.heatmap_width=(r.settings.width-r.right_margin-r.dendrogram_heatmap_distance)*r.settings.heatmap_part_width,r.distance=r.settings.width-r.heatmap_width-r.right_margin,r.heatmap_distance=r.distance+r.dendrogram_heatmap_distance):(r.heatmap_width=r.settings.width-r.right_margin,r.distance=r.right_margin/2,r.heatmap_distance=r.distance),r.pixels_for_dimension=t?r.heatmap_width/t:0,r.settings.max_column_width&&r.settings.max_column_width<r.pixels_for_dimension&&(r.pixels_for_dimension=r.settings.max_column_width,r.heatmap_width=t*r.pixels_for_dimension,r.settings.dendrogram?(r.distance=r.settings.width-r.heatmap_width-r.right_margin-r.dendrogram_heatmap_distance,r.heatmap_distance=r.distance+r.dendrogram_heatmap_distance):(r.distance=r._hack_round((r.settings.width-r.heatmap_width)/2),r.right_margin=r.distance,r.heatmap_distance=r.distance))},n.prototype._set_color_settings=function(){var t=[];for(i=0,keys=Object.keys(r.data.nodes),len=keys.length;len>i;i++)node=r.data.nodes[keys[i]],1==node.count&&t.push(node.features);if(r.data_descs={},r.settings.independent_columns)r.data_descs=r._get_data_min_max_middle(t);else{var e=r._get_min_max_middle(t);for(i=0;i<r.dimensions.data;i++)r.data_descs[i]={min:e[0],max:e[1],middle:e[2]}}if(r.settings.metadata){var n=[];for(i=0,keys=Object.keys(r.metadata.nodes),len=keys.length;len>i;i++)n.push(r.metadata.nodes[keys[i]]);r.metadata_descs=r._get_data_min_max_middle(n)}},n.prototype._set_heatmap_settings=function(){var t;for(r.header=[],t=0;t<r.dimensions.overall;t++)r.header.push("");if(r.heatmap_header=!1,r.metadata_header=!1,r.current_label=null,r._set_color_settings(),void 0!==r.data.feature_names)for(r.heatmap_header=r.data.feature_names,t=0;t<r.dimensions.data;t++)r.header[t]=r.heatmap_header[t];if(r.settings.metadata&&r.metadata.feature_names)for(r.metadata_header=r.metadata.feature_names,t=0;t<r.dimensions.metadata;t++)r.header[r.dimensions.data+t]=r.metadata_header[t];for(r.settings.column_metadata&&void 0!==r.column_metadata.feature_names&&(r.column_metadata_header=r.column_metadata.feature_names),r.settings.count_column&&(r.max_item_count=1,r.min_item_count=1,r.dimensions.overall++,r.header.push("Count")),r.features={},t=0;t<r.dimensions.overall;t++)r.features[t]=!0;r._set_on_features(),r._adjust_horizontal_sizes(),r.top_heatmap_distance=r.header_height+r.column_metadata_height+r.settings.column_metadata_row_height/2},n.prototype._set_on_features=function(t){var e;if(void 0===t)for(var t=[],n=0,o=Object.keys(r.features),i=o.length;i>n;n++)e=o[n],r.features[e]&&t.push(e);r.on_features={data:[],metadata:[],count_column:[]};for(var n=0,i=t.length;i>n;n++)e=t[n],e<r.dimensions.data?r.on_features.data.push(e):e<=r.dimensions.data+r.dimensions.metadata-1?r.on_features.metadata.push(e-r.dimensions.data):r.on_features.count_column.push(0)},n.prototype._draw_heatmap=function(){if(r.settings.heatmap&&0!=r.dimensions.overall){var t,e;r.heatmap_layer=new Kinetic.Layer,r.heatmap_overlay=new Kinetic.Layer,r.highlighted_rows_y=[],r.current_draw_values=!0,r.max_value_length=r._get_max_value_length(),r.value_font_size=r._get_font_size(r.max_value_length,r.pixels_for_dimension,r.pixels_for_leaf,12),r.value_font_size<4&&(r.current_draw_values=!1);for(var n=r.heatmap_distance,o=[],i=0,a=Object.keys(r.leaves_y_coordinates),s=a.length;s>i;i++)key=a[i],e=r.leaves_y_coordinates[key],t=r._draw_heatmap_row(key,n,e),r.heatmap_layer.add(t),o.push([key,e]),r._bind_row_events(t);if(r.settings.column_metadata){r.column_metadata_descs=r._get_data_min_max_middle(r.column_metadata.features,"row"),y1=r.header_height+.5*r.settings.column_metadata_row_height;for(var i=0,s=r.column_metadata.features.length;s>i;i++)t=r._draw_column_metadata_row(r.column_metadata.features[i],i,n,y1),r.heatmap_layer.add(t),r._bind_row_events(t),y1+=r.settings.column_metadata_row_height}r.settings.draw_row_ids&&r._draw_row_ids(o),r.highlighted_rows_layer=new Kinetic.Layer,r.stage.add(r.heatmap_layer,r.heatmap_overlay,r.highlighted_rows_layer),r.highlighted_rows_layer.moveToTop(),r.row_overlay=r.objects_ref.heatmap_line.clone(),r.column_overlay=r.objects_ref.heatmap_line.clone(),r.heatmap_layer.on("mouseleave",function(t){r.last_header=null,r.heatmap_overlay.destroyChildren(),r.heatmap_overlay.draw(),r.trigger("heatmap_onmouseout",t)})}},n.prototype._draw_heatmap_row=function(t,e,n){for(var o,i,a,s,l,c,_,u,d=r.data.nodes[t],h=new Kinetic.Group({id:t}),g=0,f=r.on_features.data.length;f>g;g++)u=r.on_features.data[g],o=e+r.pixels_for_dimension,i=n,l=d.features[u],null!==l&&(a=r._get_color_for_value(l,r.data_descs[u].min,r.data_descs[u].max,r.data_descs[u].middle,r.settings.heatmap_colors),s=r.objects_ref.heatmap_line.clone({stroke:a,points:[e,n,o,i],value:l,column:["d",u].join("_"),strokeWidth:r.pixels_for_leaf}),h.add(s),r.current_draw_values&&(c=r.objects_ref.heatmap_value.clone({x:r._hack_round((e+o)/2-(""+l).length*(r.value_font_size/4)),y:r._hack_round(n-r.value_font_size/2),fontSize:r.value_font_size,text:l}),h.add(c))),e=o;if(r.settings.metadata){var p=r.metadata.nodes[t];if(void 0!==p)for(var g=0,f=r.on_features.metadata.length;f>g;g++)u=r.on_features.metadata[g],l=p[u],o=e+r.pixels_for_dimension,i=n,null!==l&&void 0!==l&&(_=l,void 0!==r.metadata_descs[u].str2num&&(l=r.metadata_descs[u].str2num[l]),a=r._get_color_for_value(l,r.metadata_descs[u].min,r.metadata_descs[u].max,r.metadata_descs[u].middle,r.settings.metadata_colors),s=r.objects_ref.heatmap_line.clone({stroke:a,points:[e,n,o,i],value:_,column:["m",u].join("_"),strokeWidth:r.pixels_for_leaf}),h.add(s),r.current_draw_values&&(c=r.objects_ref.heatmap_value.clone({text:_,fontSize:r.value_font_size}),width=c.getWidth(),x=r._hack_round((e+o)/2-width/2),y=r._hack_round(n-r.value_font_size/2),c.position({x:x,y:y}),h.add(c))),e=o}if(r.settings.count_column&&r.features[r.dimensions.overall-1]){o=e+r.pixels_for_dimension;var m=d.objects.length;a=r._get_color_for_value(m,r.min_item_count,r.max_item_count,r.middle_item_count,r.settings.count_column_colors),s=r.objects_ref.heatmap_line.clone({stroke:a,points:[e,n,o,i],value:m,column:"Count",strokeWidth:r.pixels_for_leaf}),h.add(s),r.current_draw_values&&(c=r.objects_ref.heatmap_value.clone({text:m}),width=c.getWidth(),x=r._hack_round((e+o)/2-width/2),y=r._hack_round(n-r.value_font_size/2),c.position({x:x,y:y}),h.add(c))}return h},n.prototype._draw_column_metadata_row=function(t,e,n,o){for(var i,a,s,l,c,_,u,d=new Kinetic.Group({"class":"column_metadata"}),h=void 0===r.column_metadata_descs[e].str2num?!1:!0,g=0,f=r.on_features.data.length;f>g;g++)u=r.on_features.data[g],c=t[u],_=c,h&&(c=r.column_metadata_descs[e].str2num[c]),s=r._get_color_for_value(c,r.column_metadata_descs[e].min,r.column_metadata_descs[e].max,r.column_metadata_descs[e].middle,r.settings.column_metadata_colors),i=n+r.pixels_for_dimension,a=o,l=r.objects_ref.heatmap_line.clone({strokeWidth:r.settings.column_metadata_row_height,stroke:s,value:_,points:[n,o,i,a],column:["cm",e].join("_")}),d.add(l),n=i;return d},n.prototype._bind_row_events=function(t){t.on("mouseenter",function(t){r._row_mouseenter(t)}),t.on("mouseleave",function(t){r._row_mouseleave(t)}),t.on("mouseover",function(t){r._draw_col_label(t)}),t.on("mouseout",function(){r.heatmap_overlay.find("#col_label")[0].destroy()}),t.on("click",function(t){var e=t.target.parent.attrs.id;if("column_metadata"!==t.target.parent.attrs.class){var n=r.data.nodes[e].objects,o=[];for(i=0;i<n.length;i++)o.push(n[i]);r.trigger("row_onclick",o,t)}})},n.prototype._draw_row_ids=function(t){if(!(r.pixels_for_leaf<6)){var e,n,o,i,a=[],s=[];for(e=0;e<t.length;e++){if(o=t[e],n=r.data.nodes[o[0]].objects,n.length>1)return;s.push(n[0]),a.push([n[0],o[1]])}var l=r._get_max_length(s),c=r._get_font_size(l,85,r.pixels_for_leaf,10),_=r.distance+r._get_visible_count()*r.pixels_for_dimension+15;if(c>4)for(e=0;e<a.length;e++)i=r.objects_ref.heatmap_value.clone({x:_,y:r._hack_round(a[e][1]-c/2),fontSize:c,text:a[e][0],fontStyle:"italic",fill:"gray"}),r.heatmap_layer.add(i)}},n.prototype._draw_heatmap_header=function(){if(r.settings.heatmap_header&&r.header.length>0){r.header_layer=new Kinetic.Layer;var t,e,n,o=r._hack_size(r.leaves_y_coordinates),i=r.settings.column_dendrogram&&r.heatmap_header?r.header_height+r.pixels_for_leaf*o+10+r.column_metadata_height:r.header_height-20,a=r.settings.column_dendrogram&&r.heatmap_header?45:-45,s=0,l=[];for(e=0,len=r.on_features.data.length;len>e;e++)l.push(r.header[r.on_features.data[e]]);for(e=0,len=r.on_features.metadata.length;len>e;e++)l.push(r.header[r.on_features.metadata[e]+r.dimensions.data]);r.settings.count_column&&r.features[r.dimensions.overall-1]&&l.push(r.header[r.dimensions.overall-1]);var c=r._get_max_length(l),_=r._get_font_size(c,r.header_height,r.pixels_for_dimension,16);if(8>_)return;for(e=0,len=l.length;len>e;e++)t=r.heatmap_distance+s*r.pixels_for_dimension+r.pixels_for_dimension/2,n=r.objects_ref.column_header.clone({x:t,y:i,text:l[e],position_index:e,fontSize:_,rotationDeg:a}),r.header_layer.add(n),s++;r.stage.add(r.header_layer),r.settings.dendrogram||(r.header_layer.on("click",function(t){var n=t.target,o=n.attrs.position_index;for(e=0;e<r.header_layer.getChildren().length;e++)r.header_layer.getChildren()[e].setFill("black");t.target.setAttrs({fill:"red"}),r._delete_layers([r.heatmap_layer,r.heatmap_overlay,r.highlighted_rows_layer]),r._reorder_heatmap(r._translate_column_to_feature_index(o)),r._draw_heatmap(),r.header_layer.draw()}),r.header_layer.on("mouseover",function(t){var e=t.target;e.setOpacity(.7),this.draw()}),r.header_layer.on("mouseout",function(t){var e=t.target;e.setOpacity(1),this.draw()}))}},n.prototype._translate_column_to_feature_index=function(t){for(var e,n=-1,o=0,i=Object.keys(r.features),a=i.length;a>o;o++)if(e=i[o],r.features[e]&&(n++,t===n))return e},n.prototype._draw_distance_scale=function(t){var e=r.header_height+r.column_metadata_height+r.settings.column_metadata_row_height/2-10,n=e,o=0,i=r.distance,a=new Kinetic.Line({points:[o,e,i,n],stroke:"black",listening:!1}),s=new Kinetic.Circle({x:i,y:n,radius:3,fill:"black",listening:!1}),l=0,c=3,_=i,u=r._hack_round(30/r.distance_step*10)/10,t=Math.round(100*r.distance/r.distance_step)/100,d=r._hack_round(r.distance_step*u),h=0,g=new Kinetic.Text({x:0,y:e-20,text:t,fontSize:12,fontFamily:r.settings.font,fontStyle:"bold",fill:"black",align:"right",listening:!1});r.dendrogram_layer.add(a,s,g),0==d&&(d=.5);var a;if(u>.1)for(;_>0;)a=new Kinetic.Line({points:[_,e-c,_,n+c],stroke:"black",listening:!1}),r.dendrogram_layer.add(a),l=r._hack_round(10*(l+u))/10,l>10&&(l=r._hack_round(l)),_-=d,h++},n.prototype._draw_navigation=function(){r.navigation_layer=new Kinetic.Layer;var t=0,e=10;if(r._draw_color_scale(),r._draw_help(),!r.settings.column_dendrogram){var n=r.objects_ref.icon.clone({data:"M26.834,6.958c0-2.094-4.852-3.791-10.834-3.791c-5.983,0-10.833,1.697-10.833,3.791c0,0.429,0.213,0.84,0.588,1.224l8.662,15.002v4.899c0,0.414,0.709,0.75,1.583,0.75c0.875,0,1.584-0.336,1.584-0.75v-4.816l8.715-15.093h-0.045C26.625,7.792,26.834,7.384,26.834,6.958zM16,9.75c-6.363,0-9.833-1.845-9.833-2.792S9.637,4.167,16,4.167c6.363,0,9.834,1.844,9.834,2.791S22.363,9.75,16,9.75z",x:t,y:e,label:"Filter\ncolumns"}),o=r._draw_icon_overlay(t,e);r.navigation_layer.add(n,o),t+=40,o.on("click",function(){r._filter_icon_click(this)}),o.on("mouseover",function(){r._icon_mouseover(n,o,r.navigation_layer)}),o.on("mouseout",function(){r._icon_mouseout(n,o,r.navigation_layer)})}if(r.zoomed_clusters.row.length>0||r.zoomed_clusters.column.length>0){var i=r.objects_ref.icon.clone({data:"M24.083,15.5c-0.009,4.739-3.844,8.574-8.583,8.583c-4.741-0.009-8.577-3.844-8.585-8.583c0.008-4.741,3.844-8.577,8.585-8.585c1.913,0,3.665,0.629,5.09,1.686l-1.782,1.783l8.429,2.256l-2.26-8.427l-1.89,1.89c-2.072-1.677-4.717-2.688-7.587-2.688C8.826,3.418,3.418,8.826,3.416,15.5C3.418,22.175,8.826,27.583,15.5,27.583S27.583,22.175,27.583,15.5H24.083z",x:t,y:e,id:"refresh_icon",label:"Refresh"}),a=r._draw_icon_overlay(t,e);r.navigation_layer.add(i,a),a.on("click",function(){r._refresh_icon_click(),r.trigger("on_refresh")}),a.on("mouseover",function(){r._icon_mouseover(i,a,r.navigation_layer)}),a.on("mouseout",function(){r._icon_mouseout(i,a,r.navigation_layer)})}if(r.zoomed_clusters.row.length>0){t=r.distance-55,e=r.header_height+r.column_metadata_height-40;var s=r.objects_ref.icon.clone({data:r.paths_ref.unzoom_icon,x:t,y:e,scale:{x:.7,y:.7},label:"Unzoom\nrows"}),l=r._draw_icon_overlay(t,e);r.navigation_layer.add(s,l),l.on("click",function(){r._unzoom_icon_click()}),l.on("mouseover",function(){r._icon_mouseover(s,l,r.navigation_layer)}),l.on("mouseout",function(){r._icon_mouseout(s,l,r.navigation_layer)})}if(r.zoomed_clusters.column.length>0){t=r.settings.width-85,e=r.header_height-50;var c=r.objects_ref.icon.clone({data:r.paths_ref.unzoom_icon,x:t,y:e-5,scale:{x:.7,y:.7},label:"Unzoom\ncolumns"}),_=r._draw_icon_overlay(t,e);r.navigation_layer.add(c,_),_.on("click",function(){r._column_unzoom_icon_click(this)}),_.on("mouseover",function(){r._icon_mouseover(c,_,r.navigation_layer)}),_.on("mouseout",function(){r._icon_mouseout(c,_,r.navigation_layer)})}if(r.settings.show_export_button){var u=r.objects_ref.icon.clone({data:"M24.25,10.25H20.5v-1.5h-9.375v1.5h-3.75c-1.104,0-2,0.896-2,2v10.375c0,1.104,0.896,2,2,2H24.25c1.104,0,2-0.896,2-2V12.25C26.25,11.146,25.354,10.25,24.25,10.25zM15.812,23.499c-3.342,0-6.06-2.719-6.06-6.061c0-3.342,2.718-6.062,6.06-6.062s6.062,2.72,6.062,6.062C21.874,20.78,19.153,23.499,15.812,23.499zM15.812,13.375c-2.244,0-4.062,1.819-4.062,4.062c0,2.244,1.819,4.062,4.062,4.062c2.244,0,4.062-1.818,4.062-4.062C19.875,15.194,18.057,13.375,15.812,13.375z",x:r.settings.width-62,y:10,scale:{x:.7,y:.7},id:"export_icon",label:"Export\nin png format"}),d=r._draw_icon_overlay(r.settings.width-62,10);r.navigation_layer.add(u,d),d.on("click",function(){r._export_icon_click(this)}),d.on("mouseover",function(){r._icon_mouseover(u,d,r.navigation_layer)}),d.on("mouseout",function(){r._icon_mouseout(u,d,r.navigation_layer)})}r.stage.add(r.navigation_layer)},n.prototype._draw_help=function(){var t=r.objects_ref.icon.clone({data:r.paths_ref.lightbulb,x:r.settings.width-63,y:40,scale:{x:.8,y:.8},id:"help_icon",label:"Tip"}),e=r._draw_icon_overlay(r.settings.width-63,40);r.navigation_layer.add(t,e),e.on("mouseover",function(){r._icon_mouseover(t,e,r.navigation_layer),r._help_mouseover()}),e.on("mouseout",function(){r._help_mouseout(),r._icon_mouseout(t,e,r.navigation_layer)}) },n.prototype._draw_color_scale=function(){var t=[r.settings.min_percentile/100,r._get_color_for_value(0,0,1,.5,r.settings.heatmap_colors),r.settings.middle_percentile/100,r._get_color_for_value(.5,0,1,.5,r.settings.heatmap_colors),r.settings.max_percentile/100,r._get_color_for_value(1,0,1,.5,r.settings.heatmap_colors)],e=r.objects_ref.rect_gradient.clone({label:"Color settings",fillLinearGradientColorStops:t,id:"color_scale"});e.on("mouseover",function(){r._color_scale_mouseover(e,r.navigation_layer)}),e.on("mouseout",function(){r._color_scale_mouseout(e,r.navigation_layer)}),e.on("click",function(){r._color_scale_click(e,r.navigation_layer)}),r.navigation_layer.add(e)},n.prototype._update_color_scale=function(){var t=r.navigation_layer.find("#color_scale");t.fillLinearGradientColorStops([r.settings.min_percentile/100,r._get_color_for_value(0,0,1,.5,r.settings.heatmap_colors),r.settings.middle_percentile/100,r._get_color_for_value(.5,0,1,.5,r.settings.heatmap_colors),r.settings.max_percentile/100,r._get_color_for_value(1,0,1,.5,r.settings.heatmap_colors)]),r.navigation_layer.draw()},n.prototype._draw_icon_overlay=function(t,e){return r.objects_ref.icon_overlay.clone({x:t,y:e})},n.prototype._highlight_path=function(t,e){var n=r.data.nodes[t];1!=n.count?(r.dendrogram_layer.get("#"+t)[0].stroke(e),r._highlight_path(n.left_child,e),r._highlight_path(n.right_child,e)):(r.highlighted_rows_y.push(r.leaves_y_coordinates[t]),r.current_object_ids.push.apply(r.current_object_ids,n.objects))},n.prototype._highlight_column_path=function(t,e){var n=r.column_dendrogram.nodes[t];1!=n.count?(r.column_dendrogram_layer.get("#col"+t)[0].stroke(e),r._highlight_column_path(n.left_child,e),r._highlight_column_path(n.right_child,e)):r.current_column_ids.push(r.nodes2columns[t])},n.prototype.unhighlight_rows=function(){r.highlight_rows([])},n.prototype.highlight_rows=function(t){var e,n,o;if(r.settings.heatmap){r.settings.highlighted_rows=t,r.highlighted_rows_layer.destroyChildren();var i=r.settings.heatmap_colors,a=r.settings.metadata_colors;r.settings.heatmap_colors=r.settings.highlight_colors,r.settings.metadata_colors=r.settings.highlight_colors;var s={},l=[];for(e=0;e<t.length;e++)void 0!==r.objects2leaves[t[e]]&&(o=r.objects2leaves[t[e]],void 0===s[o]&&(l.push(o),s[o]=null));for(e=0;e<l.length;e++)n=r._draw_heatmap_row(l[e],r.heatmap_distance,r.leaves_y_coordinates[l[e]]),r.highlighted_rows_layer.add(n),n.setAttr("listening",!1);r.highlighted_rows_layer.draw(),r.heatmap_overlay.moveToTop(),r.settings.heatmap_colors=i,r.settings.metadata_colors=a,r.highlighted_rows_layer.on("click",function(){r.heatmap_layer.fire("click")})}},n.prototype._highlight_cluster=function(t){var e=r.last_highlighted_cluster;e&&r.unhighlight_cluster(),e!==t&&(r.last_highlighted_cluster=t,r._highlight_path(t,"#F5273C"),r._draw_cluster_layer(t),r.trigger("dendrogram_node_highlight",r.current_object_ids,r._unprefix(t))),r.dendrogram_layer.draw()},n.prototype._highlight_column_cluster=function(t){var e=r.last_highlighted_column_cluster;e&&r.unhighlight_column_cluster(),e!==t&&(r.last_highlighted_column_cluster=t,r._highlight_column_path(t,"#F5273C"),r.current_column_ids.sort(function(t,e){return t-e}),r._draw_column_cluster_layer(t),r.trigger("column_dendrogram_node_highlight",r.current_column_ids,r._unprefix(t))),r.column_dendrogram_layer.draw()},n.prototype.unhighlight_column_cluster=function(){r.last_highlighted_column_cluster&&(r._highlight_column_path(r.last_highlighted_column_cluster,"grey"),r.column_dendrogram_layer.draw(),r.column_cluster_group.destroy(),r.cluster_layer.draw(),r.current_column_ids=[],r.trigger("column_dendrogram_node_unhighlight",r._unprefix(r.last_highlighted_column_cluster)),r.last_highlighted_column_cluster=null)},n.prototype.highlight_cluster=function(t){return r._highlight_cluster(r._prefix(t))},n.prototype.highlight_column_cluster=function(t){return r._highlight_column_cluster(r._prefix(t))},n.prototype.unhighlight_cluster=function(){r.last_highlighted_cluster&&(r._highlight_path(r.last_highlighted_cluster,"grey"),r.dendrogram_layer.draw(),r.row_cluster_group.destroy(),r.cluster_layer.draw(),r.trigger("dendrogram_node_unhighlight",r._unprefix(r.last_highlighted_cluster)),r.highlighted_rows_y=[],r.current_object_ids=[],r.last_highlighted_cluster=null)},n.prototype._neutralize_path=function(t){var e=r.data.nodes[t];if(1!=e.count){var n=r.dendrogram_layer.get("#"+t)[0];n&&(n.setStroke("grey"),r._neutralize_path(e.right_child),r._neutralize_path(e.left_child))}},n.prototype._draw_cluster_layer=function(t){r.row_cluster_group=new Kinetic.Group;var e=r._get_visible_count(),n=r.data.nodes[t].count,o=r.distance-30,i=r.header_height+r.column_metadata_height-40,a=r.objects_ref.count.clone({x:o+10,y:i-10,text:n}),s=r.objects_ref.icon.clone({data:r.paths_ref.zoom_icon,x:o,y:i,scale:{x:.7,y:.7},label:"Zoom\nrows"}),l=r._draw_icon_overlay(o,i);o=r.distance+r.dendrogram_heatmap_distance;var c=e*r.pixels_for_dimension+r.heatmap_distance,_=r.highlighted_rows_y[0]-r.pixels_for_leaf/2,u=r.highlighted_rows_y[r.highlighted_rows_y.length-1]+r.pixels_for_leaf/2,d=r.objects_ref.cluster_overlay.clone({x:o,y:r.header_height+r.column_metadata_height+5,width:c,height:r._hack_round(_-r.header_height-r.column_metadata_height-5)}),h=r.objects_ref.cluster_border.clone({points:[0,_,c,_]}),g=r.objects_ref.cluster_overlay.clone({x:o,y:u,width:c,height:r.settings.height-u-r.footer_height+5}),f=r.objects_ref.cluster_border.clone({points:[0,u,c,u]});r.row_cluster_group.add(a,d,g,s,l,h,f),r.cluster_layer.add(r.row_cluster_group),r.stage.add(r.cluster_layer),a.moveToTop(),r.cluster_layer.draw(),r.navigation_layer.moveToTop(),l.on("mouseover",function(){r._icon_mouseover(s,l,r.cluster_layer)}),l.on("mouseout",function(){r._icon_mouseout(s,l,r.cluster_layer)}),l.on("click",function(){r._zoom_cluster(r.last_highlighted_cluster)})},n.prototype._draw_column_cluster_layer=function(t){r.column_cluster_group=new Kinetic.Group;var e=r.column_dendrogram.nodes[t].count,n=r.settings.width-85,o=r.header_height-25,i=r.objects_ref.count.clone({x:n+15,y:o-5,text:e}),a=r.objects_ref.icon.clone({data:r.paths_ref.zoom_icon,x:n,y:o,scale:{x:.7,y:.7},label:"Zoom\ncolumns"}),s=r._draw_icon_overlay(n,o),l=r._hack_round((r.current_column_ids[0]-r.columns_start_index)*r.pixels_for_dimension),c=r._hack_round((r.current_column_ids[0]+r.current_column_ids.length-r.columns_start_index)*r.pixels_for_dimension),_=0,u=r.settings.height-r.footer_height+5,d=r.settings.height-r.footer_height-r.header_height+r.settings.column_metadata_row_height,h=r.objects_ref.cluster_border.clone({points:[r.heatmap_distance+l,_,r.heatmap_distance+l,u]}),g=r.objects_ref.cluster_overlay.clone({x:r.heatmap_distance,y:r.header_height,width:l,height:d}),f=r.objects_ref.cluster_border.clone({points:[r.heatmap_distance+c,_,r.heatmap_distance+c,u]}),p=r.objects_ref.cluster_overlay.clone({x:c+r.heatmap_distance,y:r.header_height,width:r.heatmap_width-c-(r.on_features.metadata.length+r.on_features.count_column.length)*r.pixels_for_dimension,height:d});r.column_cluster_group.add(g,p,a,s,i,h,f),r.cluster_layer.add(r.column_cluster_group),r.stage.add(r.cluster_layer),r.cluster_layer.draw(),r.navigation_layer.moveToTop(),s.on("mouseover",function(){r._icon_mouseover(a,s,r.cluster_layer)}),s.on("mouseout",function(){r._icon_mouseout(a,s,r.cluster_layer)}),s.on("click",function(){r._zoom_column_cluster(r.last_highlighted_column_cluster)})},n.prototype._draw_column_cluster=function(t){r.columns_start_index=r.current_column_ids[0],r.on_features.data=r.current_column_ids;var e=r.distance;if(r._adjust_horizontal_sizes(),r._delete_layers([r.column_dendrogram_layer,r.heatmap_layer,r.heatmap_overlay,r.column_cluster_group,r.navigation_layer,r.highlighted_rows_layer],[r.dendrogram_hover_layer]),r.settings.heatmap_header&&r._delete_layers([r.header_layer]),r._draw_column_dendrogram(t),r._draw_heatmap(),r._draw_heatmap_header(),r._draw_navigation(),e!==r.distance){r._delete_layers([r.dendrogram_layer,r.cluster_layer]);var n=r.zoomed_clusters.row.length>0?r.zoomed_clusters.row[r.zoomed_clusters.row.length-1]:r.root_id;r._draw_row_dendrogram(n),null!==r.last_highlighted_cluster&&(r._highlight_path(r.last_highlighted_cluster,"#F5273C"),r.dendrogram_layer.draw(),r._draw_cluster_layer(r.last_highlighted_cluster))}else r.cluster_layer.moveToTop(),r.cluster_layer.draw()},n.prototype._zoom_column_cluster=function(t){t!=r.column_root_id&&(r.zoomed_clusters.column.push(t),r._draw_column_cluster(t),r.highlight_rows(r.settings.highlighted_rows),r.trigger("on_columns_zoom",r.current_column_ids,r._unprefix(t)),r.current_column_ids=[],r.last_highlighted_column_cluster=null)},n.prototype._unzoom_column_cluster=function(){var t=r.zoomed_clusters.column.pop(),e=r.zoomed_clusters.column.length,n=e>0?r.zoomed_clusters.column[e-1]:r.column_root_id;r._get_column_ids(n),r._draw_column_cluster(n),r.trigger("on_columns_unzoom",r._unprefix(t)),r.current_column_ids=[],r._highlight_column_cluster(t)},n.prototype._draw_cluster=function(t){r._delete_layers([r.dendrogram_layer,r.heatmap_layer,r.heatmap_overlay,r.cluster_layer,r.navigation_layer,r.header_layer,r.highlighted_rows_layer],[r.dendrogram_hover_layer]),r._draw_row_dendrogram(t),r._draw_heatmap(),r._draw_heatmap_header(),r._draw_navigation(),r.settings.column_dendrogram&&null!==r.last_highlighted_column_cluster&&r._draw_column_cluster_layer(r.last_highlighted_column_cluster)},n.prototype._zoom_cluster=function(t){t!==r.root_id&&(r.zoomed_clusters.row.push(t),r._draw_cluster(t),r.highlight_rows(r.settings.highlighted_rows),r.trigger("on_zoom",r.current_object_ids,r._unprefix(t)),r.current_object_ids=[],r.last_highlighted_cluster=null)},n.prototype._unzoom_cluster=function(){var t=r.zoomed_clusters.row.pop(),e=r.zoomed_clusters.row.length,n=e>0?r.zoomed_clusters.row[e-1]:r.root_id;r._draw_cluster(n),r.trigger("on_unzoom",r._unprefix(t)),r._highlight_cluster(t)},n.prototype._get_node_neighbourhood=function(t,e){var n={left_node:{left_node:{left_count:0,right_count:0},right_node:{left_count:0,right_count:0},left_count:.5,right_count:.5},right_node:{left_node:{left_count:0,right_count:0},right_node:{left_count:0,right_count:0},left_count:.5,right_count:.5},left_count:e[t.left_child].count,right_count:e[t.right_child].count},r=e[t.left_child],o=e[t.right_child],i=e[r.left_child],a=e[r.right_child],s=e[o.left_child],l=e[o.right_child];return 1!=r.count&&(n.left_node.left_count=e[r.left_child].count,n.left_node.right_count=e[r.right_child].count,1!=i.count?(n.left_node.left_node.left_count=e[i.left_child].count,n.left_node.left_node.right_count=e[i.right_child].count):(n.left_node.left_node.left_count=.5,n.left_node.left_node.right_count=.5),1!=a.count?(n.left_node.right_node.left_count=e[a.left_child].count,n.left_node.right_node.right_count=e[a.right_child].count):(n.left_node.right_node.left_count=.5,n.left_node.right_node.right_count=.5)),1!=o.count&&(n.right_node.left_count=e[o.left_child].count,n.right_node.right_count=e[o.right_child].count,1!=s.count?(n.right_node.left_node.left_count=e[s.left_child].count,n.right_node.left_node.right_count=e[s.right_child].count):(n.right_node.left_node.left_count=.5,n.right_node.left_node.right_count=.5),1!=l.count?(n.right_node.right_node.left_count=e[l.left_child].count,n.right_node.right_node.right_count=e[l.right_child].count):(n.right_node.right_node.left_count=.5,n.right_node.right_node.right_count=.5)),n},n.prototype._draw_column_dendrogram_node=function(t,e,n,o){if(e.count>1){var i=r._get_node_neighbourhood(e,r.column_dendrogram.nodes),a=r.column_dendrogram.nodes[e.right_child],s=r.column_dendrogram.nodes[e.left_child],l=r._get_x1(i,n,o),c=r._get_x2(i,n,o),_=r._hack_round(r.vertical_distance-r.vertical_distance_step*e.distance);_=0==_?2:_;var u=_;1==a.count&&(c-=r.pixels_for_dimension/2);var d=r.vertical_distance-r.vertical_distance_step*r.column_dendrogram.nodes[e.left_child].distance,h=r.vertical_distance-r.vertical_distance_step*r.column_dendrogram.nodes[e.right_child].distance;r.column_dendrogram_layer.add(r._draw_vertical_path(t,l,_,c,u,d,h)),r._draw_column_dendrogram_node(e.left_child,s,n-i.left_node.right_count,o+i.left_node.right_count,d,_),r._draw_column_dendrogram_node(e.right_child,a,n+i.right_node.left_count,o-i.right_node.left_count,h,u)}else r.column_x_coordinates[t]=o*r.pixels_for_dimension},n.prototype._get_y1=function(t,e){e=e-t.left_node.right_count-t.left_node.left_node.right_count;var n=(e+(t.left_node.left_node.right_count+t.left_node.right_node.left_count)/2)*r.pixels_for_leaf;return n+r.top_heatmap_distance},n.prototype._get_y2=function(t,e){e+=t.right_node.left_node.left_count;var n=(e+(t.right_node.left_node.right_count+t.right_node.right_node.left_count)/2)*r.pixels_for_leaf;return n+r.top_heatmap_distance},n.prototype._get_x1=function(t,e){e=e-t.left_node.right_count-t.left_node.left_node.right_count;var n=(e+(t.left_node.left_node.right_count+t.left_node.right_node.left_count)/2)*r.pixels_for_dimension;return r.heatmap_distance+r.on_features.data.length*r.pixels_for_dimension-n},n.prototype._get_x2=function(t,e){e+=t.right_node.left_node.left_count;var n=(e+(t.right_node.left_node.right_count+t.right_node.right_node.left_count)/2)*r.pixels_for_dimension;return r.heatmap_distance+r.on_features.data.length*r.pixels_for_dimension-n},n.prototype._draw_vertical_path=function(t,e,n,o,i,a,s){var l=new Kinetic.Group({}),c=r.objects_ref.node.clone({points:[e,a,e,n,o,i,o,s],id:"col"+t}),_=r.objects_ref.node_rect.clone({x:o-1,y:n-1,width:e-o+2,height:r.header_height-n,id:"col_rect"+t,path:c,path_id:t});return l.add(c,_),l},n.prototype._draw_horizontal_path=function(t,e,n,o,i,a,s){var l=new Kinetic.Group({}),c=r.objects_ref.node.clone({points:[a,n,e,n,o,i,s,i],id:t}),_=r.objects_ref.node_rect.clone({x:e-1,y:n-1,width:r.distance-e,height:i-n,id:[t,"rect"].join("_"),path:c,path_id:t});return l.add(c,_),l},n.prototype._filter_icon_click=function(){var t=r.target_element.find(".filter_features"),e="✖";if(t.length){t.fadeIn("fast");var n=r._draw_target_overlay()}else{filter_list="";for(var o in r.header)if(r.features[o]&&(e="✔"),o<r.dimensions){var i=r.header[o];""==i&&(i=parseInt(o)+1+". column"),filter_list=filter_list+"<li class='feature_switch' data-num='"+o+"'><span class='symbol'>"+e+"</span> "+i+"</li>"}r.target_element.append("<div class='filter_features'><ul>"+filter_list+"</ul><hr /><div><span class='cancel_filter_list'>Cancel</span>&nbsp;&nbsp;&nbsp;<span class='update_filter_list'>Update</span></div></div>"),t=r.target_element.find(".filter_features"),t.css({display:"none",top:45,left:0,"border-radius":"5px","text-align":"center",position:"absolute","background-color":"#ffffff",border:"solid 2px #DEDEDE","padding-top":"5px","padding-left":"15px","padding-bottom":"10px","padding-right":"15px","font-weight":"bold","font-size":"14px","z-index":1e3,"font-family":r.settings.font}),t.find("ul").css({"list-style-type":"none","margin-left":"0","padding-left":"0","text-align":"left"}),t.find("li").css({color:"green","margin-top":"5px"}),t.find("div").css({cursor:"pointer",opacity:"0.7"});var n=r._draw_target_overlay();t.fadeIn("fast"),r.target_element.find(".feature_switch").click(function(){var t=parseInt($(this).attr("data-num")),e=$(this).find("span");r.features[t]=!r.features[t],r.features[t]?(e.text("✔"),$(this).css("color","green")):(e.text("✖"),$(this).css("color","red")),r._set_on_features()}),$(function(){t.click(function(){return!1}),t.mousedown(function(){return!1}),$("#"+r.settings.target+" .filter_features ul li,#"+r.settings.target+" .filter_features div span").hover(function(){$(this).css({cursor:"pointer",opacity:"0.7"})},function(){$(this).css({cursor:"default",opacity:"1"})})}),r.target_element.find(".cancel_filter_list").click(function(){t.fadeOut("fast"),n.fadeOut("fast")}),n.click(function(){t.fadeOut("fast"),n.fadeOut("fast")}),r.target_element.find(".update_filter_list").click(function(){t.fadeOut("slow"),n.fadeOut("slow");var e=r.zoomed_clusters.row.length>0?r.zoomed_clusters.row[r.zoomed_clusters.row.length-1]:r.root_id,o=r.last_highlighted_cluster;r.last_highlighted_cluster=null,r._adjust_horizontal_sizes(),r._delete_all_layers(),r._draw_stage_layer(),r.settings.dendrogram&&(r._draw_dendrogram_layers(),r._draw_row_dendrogram(e),r.settings.column_dendrogram&&r._visible_features_equal_column_dendrogram_count()&&r._draw_column_dendrogram(r.column_root_id)),r._draw_navigation(),r._draw_heatmap(),r._draw_heatmap_header(),null!=o&&r._highlight_cluster(o)})}},n.prototype._draw_target_overlay=function(){var t=r.target_element.find(".target_overlay");return t.length?t.fadeIn("fast"):(t=$("<div class='target_overlay'></div>"),t.css({"background-color":"white",position:"absolute",top:0,left:0,right:0,bottom:0,opacity:.5}),r.target_element.append(t)),t},n.prototype._refresh_icon_click=function(){r.redraw()},n.prototype._export_icon_click=function(){function t(t){$('<a download="inchlib" href="'+t+'"></a>')[0].click()}function e(t){window.open(t,"_blank")}var n=r.target_element.find(".export_menu"),o=r._draw_target_overlay();if(n.length)n.fadeIn("fast");else{n=$("<div class='export_menu'><div><button type='submit' data-action='open'>Show image</button></div><div><button type='submit' data-action='save'>Save image</button></div></div>"),r.target_element.append(n),n.css({position:"absolute",top:45,left:r.settings.width-125,"font-size":"12px",border:"solid #D2D2D2 1px","border-radius":"5px",padding:"2px","background-color":"white"});var i=n.find("button");i.css({"padding-top":"7px","padding-bottom":"5px","padding-right":"8px","padding-left":"8px",color:"white",border:"solid #D2D2D2 1px",width:"100%","background-color":"#2171b5","font-weight":"bold"}),i.hover(function(){$(this).css({cursor:"pointer",opacity:.7})},function(){$(this).css({opacity:1})}),o.click(function(){n.fadeOut("fast"),o.fadeOut("fast")}),i.click(function(){var n=$(this).attr("data-action"),i=3,a=r.stage.width(),s=r.s