Skip to content

Instantly share code, notes, and snippets.

@alvinthai
Last active September 11, 2019 00:50
Show Gist options
  • Save alvinthai/4d02fbd5a346d92fbbeb74ff907969fd to your computer and use it in GitHub Desktop.
Save alvinthai/4d02fbd5a346d92fbbeb74ff907969fd to your computer and use it in GitHub Desktop.
var version="0.22",alamode={reportError:function(t){$("<h1 class='mode-error'>").text(t).prependTo(document.body)},getColumnsFromQuery:function(e){var t=datasets.filter(function(t){if(t)return t.queryName==e})[0];return t?t.columns:(alamode.reportError("No such query: '"+e+"'"),[])},getDataFromQuery:function(e){var t=datasets.filter(function(t){if(t)return t.queryName==e})[0];return t?t.content:(alamode.reportError("No such query: '"+e+"'"),[])},makeId:function(t){for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",a="",n=0;n<t;n++)a+=e.charAt(Math.floor(Math.random()*e.length));return a},addContainerElement:function(t,e){return e=e||!1,id=alamode.makeId(10),"body"==t?$("<div id='"+id+"'></div>").addClass(id).addClass("mode-graphic-container").appendTo(".mode-content"):0===$(t).length?alamode.reportError("No such element: '"+t+"'"):(e&&$(t).empty(),$(t).addClass("mode-graphic-container"),$(t).addClass(id)),"."+id},addLinksToTables:function(t){var i="#"+t.table_id,e=t.link_columns,a=t.link_urls,n=t.query_name,m=t.open_in_new_tab||!1,r=[],h={};e.forEach(function(t,e){r.push({column:t,link_string:a[e]})});var f=alamode.getDataFromQuery(n);alamode.getColumnsFromQuery(n);function o(e){var t=$(i+" table"),a=$(i+" .js-header-table"),n=a?$(i+" .js-col-header"):$(a).find("th"),r=t.find("tr"),o=0;n.each(function(){text=$(this).find(".axel-table-header-label").text(),o=$(this).attr("data-axel-column"),h[text]=o-1}),r.each(function(t){if(0<t&&t<=f.length){var c=$(this).find("td"),u=c.first().attr("data-axel-rowkey");e.forEach(function(t){var e=h[t.column],a=c.eq(e).text();for(url=t.link_string;-1!=url.indexOf("{{");){var n=url.length,r=url.indexOf("{{"),o=url.substring(r+2,n).indexOf("}}"),i=url.substring(r+2,r+o+2),l=url.substring(r,r+o+4),s=(h[i],f[u][i]);url=url.replace(l,s)}var d="<a target='"+(m?"_blank":"_top")+"' href='"+encodeURI(url)+"'>"+a+"</a>";c.eq(e).html(d)})}})}setTimeout(function(){o(r)},1e3),$(i).mousemove(function(){o(r)})},customChartColors:function(t){var e=t.charts,a=t.colors,l=t.opacity,s=t.line_dashes;function h(t,e){var a=$("#"+t),n=(0<a.find(".nv-bar").length?a.find(".nv-group"):0<a.find(".nv-line").length||0<a.find(".nv-areaWrap").length?a.find(".nv-noninteractive"):a.find(".nv-pie .nv-slice")).length,r=a.find(".nv-series .nv-legend-symbol"),o={},l={},s={},d=0;if(0==r.length&&n<=1)l[0]=d,o[s[d]=0]=e[0];else if(0==r.length&&1<n)for(i=0;i<n;i++)l[i]=i,o=e;else for(i=0;i<r.length;i++)o[i]=e[i%Object.keys(e).length];return r.each(function(t){1==$(this).css("fill-opacity")?(l[t]=d,s[d]=t,d+=1):l[t]=-1}),{chart:a,legend:r,colors:o,m:l,r:s,seriesCount:n}}"all"==e&&(e=[],$("mode-chart").each(function(){e.push(this.id)})),setInterval(function(){e.forEach(function(t){!function(t,e){var a=h(t,e),n=a.chart,r=a.colors,o=a.m;for(var i in r)n.find(".nv-linesWrap .nv-groups .nv-series-"+o[i]).css({fill:r[i],stroke:r[i]}),n.find(".nv-barsWrap .nv-groups .nv-series-"+o[i]+" rect").css({fill:r[i],stroke:r[i]}),n.find(".nv-linePlusBar .nv-barsWrap .nv-bars rect").each(function(t){$(this).css({fill:r[0],stroke:r[0]})}),n.find(".nv-linePlusBar .nv-linesWrap .nv-groups .nv-series-0").css({fill:r[1],stroke:r[1]}),n.find(".nv-scatterWrap .nv-groups .nv-series-"+o[i]).css({fill:r[i],stroke:r[i]}),n.find(".nv-areaWrap .nv-area-"+o[i]).css({fill:r[i],stroke:r[i]}),n.find(".nv-pie .nv-slice").each(function(t){$(this).css({fill:r[t],stroke:r[t]})});for(var i in l)n.find(".nv-linesWrap .nv-groups .nv-series-"+o[i]).css({opacity:l[i]}),n.find(".nv-barsWrap .nv-groups .nv-series-"+o[i]+" rect").css({opacity:l[i]}),0==i&&(n.find(".nv-linePlusBar .nv-barsWrap .nv-bars rect").each(function(t){$(this).css({opacity:l[i]})}),n.find(".nv-linePlusBar .nv-linesWrap .nv-groups .nv-series-0").css({opacity:l[1]})),n.find(".nv-scatterWrap .nv-groups .nv-series-"+o[i]).css({opacity:l[i]}),n.find(".nv-areaWrap .nv-area-"+o[i]).css({opacity:l[i]}),n.find(".nv-pie .nv-slice").each(function(t){$(this).css({opacity:l[t]})});for(var i in s)n.find(".nv-linesWrap .nv-groups .nv-series-"+o[i]).css({"stroke-dasharray":s[i]});n.find(".nv-legendWrap .nv-series .nv-legend-symbol").each(function(t){$(this).css({fill:r[t],stroke:r[t]})})}(t,a)})},500),e.forEach(function(t){!function(a,u){var m=$("#"+a);$(m).mousemove(function(){var t=h(a,u),n=t.legend,r=t.colors,o=t.r,i=t.m,l=t.seriesCount,s=isArea=m.find(".nv-area").length,d=m.find(".nv-bar").length,c=m.find(".nv-line").length;$("html").find(".nvtooltip table .legend-color-guide").each(function(t){if(0==n.length&&0==d)$(this).find("div").css({"background-color":r[i[t]]});else if(0<c&&0<d){var e=m.find(".nv-linePlusBar .nv-linesWrap .nv-groups .nv-series-0").css("fill"),a=m.find(".nv-linePlusBar .nv-barsWrap .nv-bars rect").css("fill");""==$(this).closest(".nvtooltip").find(".key")[0].innerText?$(this).find("div").css("background-color",a):$(this).find("div").css("background-color",e)}else 0<d?1==l&&$(this).find("div").css({"background-color":r[o[l-t-1]]}):0<s?$(this).find("div").css({"background-color":r[s-t-1]}):$(this).find("div").css({"background-color":r[t]})});var e=m.find(".nv-pie .nv-slice.hover").css("fill");$("html").find(".nvtooltip table .legend-color-guide div").css("background-color",e)}),$(m).mouseleave(function(){$("html").find(".nvtooltip table .legend-color-guide").remove()})}(t,a)})},addTotalsRow:function(t){var o,i,e,a=t.query_name,n="#"+(t.table_id||""),r=alamode.getColumnsFromQuery(a),l=alamode.getDataFromQuery(a),s=t.columns_with_totals,d=t.fmt||d3.format(","),c=(e=s,numberColumns=_.map(_.filter(r,function(t){return-1!=["number","integer","float"].indexOf(t.type)}),"name"),"all"==e?numberColumns:_.intersection(e,numberColumns)),u=(o=c,i=[],r.forEach(function(t,e){if(-1==o.indexOf(t.name))var a={idx:e,name:"",total:""};else{var n=_.map(l,t.name),r=d3.sum(n);a={idx:e,name:t.name,total:r}}i.push(a)}),i);setTimeout(function(){"#"==n?(table=$(".main-table"),container=$(".js-table-content-container")):(table=$(n+" .main-table"),container=$(n+" .js-table-content-container"));var t=table.find("tr:last"),e=function(t){var e="<tr><td>TTL</td>";return t.forEach(function(t){""!=t.total?e=e+"<td class='cell-type-number'>"+d(t.total)+"</td>":e+="<td></td>"}),e+"</tr>"}(u),a=+container.css("height").match(/\d+/)[0];t.after(e),container.css("height",26+a)},1e3)},addImagesToTables:function(t){var o="#"+t.table,i=t.column,l=t.image_height||100;function e(){var t=$(o+" table"),e=$(o+" .js-header-table"),a=e?$(o+" .js-col-header"):$(e).find("th"),n=t.find("tr"),r=0;a.each(function(){text=$(this).find(".axel-table-header-label").text(),text==i&&(r=+$(this).attr("data-axel-column"))}),n.each(function(){$(this).find("td").each(function(t){if(t==r-1){var e=$(this).text();0==$(this).find("img").length&&($(this).css("text-align","center"),$(this).html("<img style='height: "+l+"px;' src='"+e+"'>"))}})})}setTimeout(function(){e()},1e3),$(o).keyup(function(){setTimeout(function(){e()},500)}),$(o).mousemove(function(){e()})},resizeChartHeight:function(t){var e=t.chart,a=t.height;"python"==e.slice(0,6)?($("#"+e+" .mode-python").css("height",a),$("#"+e+" .mode-python").css("max-height",a),$("#"+e+" img").css("max-height",a)):($("#"+e+" .chart").css("height",a),$("#"+e+" .chart-svg").css("height",a)),window.dispatchEvent(new Event("resize"))},retentionHeatmap:function(t){var e=t.query_name,o=t.cohort_column,i=t.pivot_column,l=t.value_column,a=t.color_gradient||["#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850"],s=t.total_column,n=t.html_element||"body",r=t.title||e,d=t.pivot_label||"",c=t.value_is_percent,u=t.precision||0,m=alamode.getDataFromQuery(e),h=alamode.getColumnsFromQuery(e),f=_.uniq(_.map(m,o)),p=_.uniq(_.map(m,i)),g=alamode.addContainerElement(n),v=d3.scale.quantize().domain(d3.extent(m,function(t){return t[l]})).range(a);d3.select(g).append("div").attr("class","mode-graphic-title").text(r),d3.select(g).append("div").attr("class","mode-retention-heatmap-label").text(d),headers=s?[o,s].concat(p):[o].concat(p);var y=d3.select(g).append("table").attr("class","mode-retention-heatmap-table");function x(e){return h.filter(function(t){return t.name==e})[0].type}y.selectAll(".mode-retention-heatmap-table-header").data([0]).enter().append("tr").attr("class","mode-retention-heatmap-table-header").selectAll("mode-retention-heatmap-table-header-cell").data(headers).enter().append("td").attr("class",function(t){return isNaN(t)?"mode-retention-heatmap-table-header-cell heatmap-string":"mode-retention-heatmap-table-header-cell heatmap-number"}).text(function(t){return t}),y.selectAll(".mode-retention-heatmap-table-row").data(f).enter().append("tr").attr("class","mode-retention-heatmap-table-row").selectAll(".mode-retention-heatmap-table-cell").data(function(t){return function(a,n){var r=[{column:o,value:n}];if(s){var t=_.filter(a,function(t){return t[o]==n})[0],e={column:s,value:t[s]};r=r.concat(e)}return p.forEach(function(e){var t=_.filter(a,function(t){return t[o]==n&&t[i]==e});0<t.length?entry=d3.mean(_.map(t,l)):entry="",r=r.concat({column:l,value:entry})}),r}(m,t)}).enter().append("td").style("background",function(t){if(function(t){return""!=t.value&&(t.column!=i&&t.column!=s&&t.column==l)}(t))return v(t.value)}).attr("class",function(t){return function(t){var e=x(t.column);return"float"==e||"integer"==e||"number"==e?"heatmap-number":"heatmap-string"}(t)}).text(function(t){return function(t){var e=x(t.column),a=d3.format(","),n=d3.format("."+u+"%"),r=d3.time.format("%b %d, %Y");return""==t.value?t.value:"datetime"==e||"timestamp"==e||"date"==e?"function"==typeof moment?moment(t.value).utc().format("ll"):r(new Date(t.value)):t.column==s?a(t.value):t.column==l&&c?n(t.value):t.column==l?a(t.value):t.value}(t)})},googleMap:function(t){var e=alamode.makeId(10),i=t.lat_column,l=t.lng_column,a=t.query_name,n=t.google_maps_api_key,r=t.title||a,s=t.label_column,o=t.html_element||"body",d=t.center_lat||39.5,c=t.center_lng||-98.35,u=t.starting_zoom||4,m=t.map_type||"terrain",h=t.height||600,f=alamode.getDataFromQuery(a),p=alamode.addContainerElement(o);d3.select(p).append("div").attr("class","mode-graphic-title").text(r),d3.select(p).append("div").attr("class","mode-google-map").attr("id",e).style("height",h+"px"),jQuery.getScript("https://maps.googleapis.com/maps/api/js?key="+n,function(){var t,o;t={zoom:u,center:new google.maps.LatLng(d,c),mapTypeId:m},o=new google.maps.Map(document.getElementById(e),t),f.forEach(function(t){var e=t[i],a=t[l];label=s?t[s]:"";var n=new google.maps.Marker({position:{lat:e,lng:a},map:o,title:label}),r=new google.maps.InfoWindow({content:label});n.addListener("click",function(){r.open(o,n)})})})},leafletMap:function(t){var e=alamode.makeId(10),a=t.lat_column,n=t.lng_column,r=t.query_name,o=t.title||r,i=t.height||400,l=t.html_element||"body",s=t.center_lat||39.5,d=t.center_lng||-98.35,c=t.starting_zoom||4,u=t.dot_size||.4,m=t.dot_opacity||.8,h=t.apply_filter||!1,f=alamode.getDataFromQuery(r),p=[];f.forEach(function(t){"number"==typeof t[a]&&"number"==typeof t[n]&&p.push(t)});var g=alamode.addContainerElement(l,h);d3.select(g).style("height",i+"px").append("div").attr("class","mode-graphic-title").text(o);var v=i-$(g+".mode-graphic-title").height(),y=$(g).width();d3.select(g).append("div").attr("class","mode-leaflet-map").attr("id",e).style("height",v+"px").style("width",y+"px");var x=L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",{maxZoom:18}),_={max:8,data:p},b={lat:s,lng:d,zoom:c},w=new HeatmapOverlay({radius:u,maxOpacity:m,scaleRadius:!0,useLocalExtrema:!0,latField:a,lngField:n});new L.Map(e,{center:new L.LatLng(b.lat,b.lng),zoom:Math.floor(b.zoom),layers:[x,w]});w.setData(_)},wordCloud:function(t){var e=t.query_name,a=t.word_column,n=t.word_count_column,r=t.html_element||"body",o=t.title||e,i=t.height||"400",l=t.width||"800",s=t.colors||["black"],d=alamode.getDataFromQuery(e),c=alamode.addContainerElement(r);d3.select(c).append("div").attr("class","mode-graphic-title").text(o);var u=d3.scale.linear().domain(d3.extent(d,function(t){return t[n]})).range([12,60]),m=d3.layout.cloud().size([l,i]).words(d.map(function(t){return{text:t[a],size:u(t[n])}})).padding(2).rotate(function(){return 360*(~~(6*Math.random())-3)}).font("Impact").fontSize(function(t){return t.size}).on("end",function(t){d3.select(c).append("div").attr("class","mode-wordcloud").append("svg").attr("width",m.size()[0]).attr("height",m.size()[1]).append("g").attr("transform","translate("+m.size()[0]/2+","+m.size()[1]/2+")").selectAll("text").data(t).enter().append("text").style("font-size",function(t){return t.size+"px"}).style("font-family","Impact").style("fill",function(t,e){return s[e%s.length]}).attr("text-anchor","middle").attr("transform",function(t){return"translate("+[t.x,t.y]+")rotate("+t.rotate+")"}).text(function(t){return t.text})});m.start()},funnel:function(t){var e=alamode.makeId(10),a=t.query_name,n=t.stage_column,r=t.value_column,o=t.html_element||"body",i=t.title||a,l=t.height||"300",s=t.width||"500",d=alamode.getDataFromQuery(a),c=alamode.addContainerElement(o);d3.select(c).append("div").attr("class","mode-graphic-title").text(i),d3.select(c).append("div").attr("class","mode-funnel").attr("id",e).style("width",s+"px").style("height",l-20+"px");var u=[];d.forEach(function(t){u.push([t[n],t[r]])});new D3Funnel("#"+e).draw(u,{label:{format:"{l}: {f}"},block:{dynamicHeight:!0},chart:{bottomPinch:1},animation:100}),d3.select("#"+e).style("height",l+"px")},horizontalBarChart:function(r){var t=r.query_name,e=(r.bar_column,r.series_columns),o=r.colors||["#EE8D24","#43A5DA","#6AB328","#BB60F8","#E14459","#EAD022","#06D0AD","#DB38B7"];stacked=r.stacked||!1,leftpad=r.left_pad||175,htmlElement=r.html_element||"body",title=r.title||t,height=r.chart_height||395,width=r.width||"500";var i=alamode.getDataFromQuery(t),a=alamode.addContainerElement(htmlElement);d3.select(a).append("div").attr("class","mode-graphic-title").text(title),d3.select(a).append("div").attr("class","mode-horizontal-bar-chart").style("height",height-50+"px").append("svg");var l=[];e.forEach(function(e,t){var a={key:e,color:o[t%o.length]},n=[];i.forEach(function(t){n.push({label:t[r.bar_column],value:t[e]})}),a.values=n,l.push(a)}),nv.addGraph(function(){var t=nv.models.multiBarHorizontalChart().x(function(t){return t.label}).y(function(t){return t.value}).margin({top:30,right:20,bottom:50,left:leftpad}).showValues(!0).showControls(!1).stacked(stacked);return t.yAxis.tickFormat(d3.format(",.2f")),d3.select(a+" svg").datum(l).call(t),nv.utils.windowResize(t.update),t})},chartAnnotations:function(t){var w="#"+t.chart_id,n=t.x_axis_column,e=t.query_name,k=t.orientations,C=t.comment_values,r=t.group_by,a=t.comments,o=alamode.getDataFromQuery(e),E=[],i={};function l(){a.forEach(function(t,e){var a=E[e],n=k[e],r=C[e],o=d3.tip().attr("class","d3-tip").style("z-index",100).offset([-10,0]).html(function(t){return t}),i=$(w).find("g.nvd3.nv-wrap").attr("transform"),l=i.indexOf("("),s=i.indexOf(")"),d=i.indexOf(","),c=+i.slice(l+1,d),u=+i.slice(d+1,s);if(-1!=a&&"v"==n){var m=$(w).find(".nv-point.nv-point-"+a).attr("transform"),h=m.indexOf("("),f=m.indexOf(")"),p=m.indexOf(","),g=+m.slice(h+1,p),v=+m.slice(p+1,f);$(w).find("g.nvd3.nv-wrap").first().find("rect").first().attr("height"),$(w).find("g.nvd3.nv-wrap").first().find("rect").first().attr("width");(x=d3.select(w+" .nvd3svg")).call(o),x.append("rect").attr("x",g+c).attr("y",u-5).attr("width",1).attr("class","flag").attr("height",5+v).attr("fill","#ff8f53"),x.append("circle").data([t]).attr("cx",g+c).attr("cy",u-5).attr("class","flag").attr("r",5).attr("fill","#ff8f53").on("mouseover",o.show).on("mouseout",o.hide)}else if("h"==n||"h-left"==n||"h-right"==n){y="h"==n?"":"1",$(w).find("g.nv-y"+y+".nv-axis").find(".tick").each(function(t){lineLength="h-right"==n?+$(w).find("g.nv-y1.nv-axis").find(".tick").first().find("line").attr("x2"):+$(this).find("line").attr("x2"),tickTrans=$(this).attr("transform"),tickClosePos=tickTrans.indexOf(")"),tickCommaPos=tickTrans.indexOf(","),0==t?(yTrans1=+tickTrans.slice(tickCommaPos+1,tickClosePos),yVal1=+$(this).find("text").text().replace(",","")):1==t&&(yTrans2=+tickTrans.slice(tickCommaPos+1,tickClosePos),yVal2=+$(this).find("text").text().replace(",",""))});var x,_=(yTrans2-yTrans1)/(yVal2-yVal1),b=yTrans2-yVal2*_+r*_;(x=d3.select(w+" .nvd3svg")).call(o),x.append("rect").attr("x",c).attr("y",b+u).attr("width",lineLength+10).attr("height",1).attr("class","flag").attr("fill","#ff8f53"),x.append("circle").data([t]).attr("cx",lineLength+c+10).attr("cy",b+u).attr("class","flag").attr("r",5).attr("fill","#ff8f53").on("mouseover",o.show).on("mouseout",o.hide)}})}r&&(i=_.groupBy(o,function(t){return t[r]})),a.forEach(function(t,e){var a=_.filter(o,function(t){return t[n]==C[e]});0!=a.length?pointNumber=r?i[a[0][r]].indexOf(a[0]):o.indexOf(a[0]):pointNumber=-1,E.push(pointNumber)}),setTimeout(function(){d3.select(w).selectAll(".flag").remove(),l()},1e3),$(window).resize(function(){d3.select(w).selectAll(".flag").remove(),d(function(){l()},500,"")});var s,d=(s={},function(t,e,a){s[a=a||"Don't call this twice without a uniqueId"]&&clearTimeout(s[a]),s[a]=setTimeout(t,e)})},bulletChart:function(i){var l=alamode.makeId(10),t=i.query_name,e=i.html_element||"body",a=i.title||t,s=i.chart_width||"800",d=i.bar_column||"",c=i.marker_column||"",u=i.left_pad||150,m=i.color,n=alamode.getDataFromQuery(t),r=alamode.addContainerElement(e);d3.select(r).append("div").attr("class","mode-graphic-title").text(a),d3.select(r).append("div").attr("class","mode-bullet-chart").style("width",s).attr("id",l),n.forEach(function(t){var e=t[i.title_column]||"",a=t[i.subtitle_column]||"",n=t[i.marker_column]||"",r=t[i.bar_column]||"";i.scale_columns?scale=[t[i.scale_columns[0]],t[i.scale_columns[1]],t[i.scale_columns[2]]]:scale=i.scale_columns;var o={title:e,subtitle:a,ranges:scale,measures:[r],measureLabels:[d],markers:[n],markerLabels:[c],color:m};nv.addGraph(function(){var t=nv.models.bulletChart().height(50).width(s).margin({left:u,right:15,top:10,bottom:10});d3.select("#"+l).append("svg").style("width",s+"px").style("height","70px").style("display","inline").datum(o).transition().duration(500).call(t);return t})})},sunburstChart:function(t){var l=alamode.makeId(10),e=t.query_name,n=t.event_columns,r=t.event_counts,a=t.title||e,o=t.color_range||["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999999"],s=t.html_element||"body",d=alamode.getDataFromQuery(e),c=850,u=Math.min(c,600)/2,m={w:(c-30)/n.length,h:20,s:3,t:10},h=[];n.forEach(function(t){h=h.concat(_.uniq(_.map(d,t)))});var f=_.uniq(h),p={};f.forEach(function(t,e){null!=t&&(p[t]=o[e%o.length])}),p.end="#666";var g=0,v=alamode.addContainerElement(s);d3.select(v).append("div").attr("class","mode-graphic-title").text(a),d3.select(v).append("div").attr("class","mode-sunburst-sequence").attr("id","sequence-"+l),d3.select(v).append("div").attr("class","mode-sunburst").attr("id",l),d3.select(v).append("div").attr("class","mode-sunburst-legend-container").attr("id","legend-container-"+l),vis=d3.select("#"+l).append("svg:svg").attr("width",c).attr("height",600).append("svg:g").attr("transform","translate("+c/2+",300)"),vis.append("text").attr("x",0).attr("y",-30).attr("text-anchor","middle").attr("class","mode-sunburst-explanation mode-sunburst-percentage").attr("id","percentage-"+l).style("visibility","hidden").text(""),vis.append("text").attr("x",0).attr("y",-10).attr("text-anchor","middle").attr("class","mode-sunburst-explanation").style("visibility","hidden").text("of total sequences."),vis.append("text").attr("x",0).attr("y",20).attr("text-anchor","middle").attr("class","mode-sunburst-explanation mode-sunburst-cond-percentage").attr("id","cond-percentage-"+l).style("visibility","hidden").text(""),vis.append("text").attr("x",0).attr("y",40).attr("text-anchor","middle").attr("class","mode-sunburst-explanation").style("visibility","hidden").text("from previous location.");var y=d3.layout.partition().size([2*Math.PI,u*u]).value(function(t){return t.size}),x=d3.svg.arc().startAngle(function(t){return t.x}).endAngle(function(t){return t.x+t.dx}).innerRadius(function(t){return Math.sqrt(t.y)}).outerRadius(function(t){return Math.sqrt(t.y+t.dy)}),b=[];function w(t){var e=(100*t.value/g).toPrecision(3),a=e+"%";e<.1&&(a="< 0.1%");var n=$(t),r=t.parent.value,o=(100*t.value/r).toPrecision(3),i=o+"%";o<1&&(a="< 1%"),d3.select("#cond-percentage-"+l).text(i),d3.select("#percentage-"+l).text(a),d3.selectAll(".mode-sunburst-explanation").style("visibility",""),function(t){var e=d3.select("#trail-"+l).selectAll("g").data(t,function(t){return t.name+t.depth}),a=e.enter().append("svg:g");a.append("svg:polygon").attr("points",C).style("fill",function(t){return p[t.name]}),a.append("svg:text").attr("x",(m.w+m.t)/2).attr("y",m.h/2).attr("dy","0.35em").attr("text-anchor","middle").text(function(t){return t.name}),e.attr("transform",function(t,e){return 5<e&&e<10?"translate("+(e-=5)*(m.w+m.s)+", 20)":10<e?"translate("+(e-=11)*(m.w+m.s)+", 40)":"translate("+e*(m.w+m.s)+", 0)"}),e.exit().remove(),d3.select("#trail-"+l).style("visibility","")}(n=$(t)),d3.selectAll("path").style("opacity",.3),vis.selectAll("path").filter(function(t){return 0<=n.indexOf(t)}).style("opacity",1)}function k(t){d3.select("#trail-"+l).style("visibility","hidden"),d3.selectAll("path").on("mouseover",null),4==d3.version.split(".")[0]?d3.selectAll("path").transition().duration(300).style("opacity",1).on("end",function(){d3.select(this).on("mouseover",w)}):d3.selectAll("path").transition().duration(300).style("opacity",1).each("end",function(){d3.select(this).on("mouseover",w)}),d3.selectAll(".mode-sunburst-explanation").style("visibility","hidden")}function $(t){for(var e=[],a=t;a.parent;)e.unshift(a),a=a.parent;return e}function C(t,e){var a=[];return a.push("0,0"),a.push(m.w+",0"),a.push(m.w+m.t+","+m.h/2),a.push(m.w+","+m.h),a.push("0,"+m.h),0<e&&a.push(m.t+","+m.h/2),a.join(" ")}d.forEach(function(t){var e="";for(i=0;i<n.length;i++){if(0!=i?prefix="-~-":prefix="",null==t[n[i]]){e=e+prefix+"end";break}e=e+prefix+t[n[i]]}var a={0:e,1:t[r]};b.push(a)}),function(t){d3.select("#sequence-"+l).append("svg:svg").attr("width",c).attr("height",60).attr("id","trail-"+l).append("svg:text").attr("id","endlabel").style("fill","#000"),function(){var e={w:195,h:30,s:3,r:3};d3.entries(p).forEach(function(t){divContainer=d3.select("#legend-container-"+l).append("div").attr("class","mode-sunburst-legend").attr("id","legend-"+l),svg=divContainer.append("svg:svg").attr("width",e.w).attr("height",e.h),svg.append("svg:rect").attr("rx",e.r).attr("ry",e.r).attr("width",e.w).attr("height",e.h).style("fill",function(){return t.value}),svg.append("svg:text").attr("x",e.w/2).attr("y",e.h/2).attr("dy","0.35em").attr("text-anchor","middle").text(function(){return t.key})})}(),vis.append("svg:circle").attr("r",u).style("opacity",0);var e=y.nodes(t).filter(function(t){return.005<t.dx}),a=vis.data([t]).selectAll("path").data(e).enter().append("svg:path").attr("display",function(t){return t.depth?null:"none"}).attr("d",x).attr("fill-rule","evenodd").style("fill",function(t){return p[t.name]}).style("opacity",1).on("mouseover",w);vis.on("mouseleave",k),g=a.node().__data__.value}(function(t){for(var e={name:"root",children:[]},a=0;a<t.length;a++){var n=t[a][0],r=+t[a][1];if(!isNaN(r))for(var o=n.split("-~-"),i=e,l=0;l<o.length;l++){var s,d=i.children,c=o[l];if(l+1<o.length){for(var u=!1,m=0;m<d.length;m++)if(d[m].name==c){s=d[m],u=!0;break}u||(s={name:c,children:[]},d.push(s)),i=s}else s={name:c,size:r},d.push(s)}}return e}(b))},zipcodeChoropleth:function(t){var a=alamode.makeId(10),e=t.query_name,n=t.zipcode_column,r=t.value_column,o=t.width||950,i=t.height||o/1.9,l=t.title||e,s=t.color_range,d=t.color_gradient||["#FFF8CC","#FFF5B2","#FFF299","#E5D87F","#CCBF66","#B2A54C","#998C33","#7F7219","#665900"],c=t.html_element||"body",u=alamode.getDataFromQuery(e),m=d3.map(),h=d3.geoAlbersUsa().scale(o).translate([o/2,i/2]),f=d3.geoPath().projection(h),p=alamode.addContainerElement(c);d3.select(p).append("div").attr("class","mode-graphic-title").text(l),svg=d3.select(p).append("div").attr("class","mode-zipcode-chorolpleth").append("svg").attr("id","mode-zipcode-chorolpleth-"+a).attr("width",o).attr("height",i),u.forEach(function(t){m.set(t[n],+t[r])}),colorDomain=s||d3.extent(u,function(t){return t[r]});var g=d3.scale.quantize().domain(colorDomain).range(d);queue().defer(d3.json,"https://s3-us-west-2.amazonaws.com/mode-alamode/zips_us_topo.json").await(function(t,e){d3.select("#mode-zipcode-chorolpleth-"+a).append("g").attr("class","zipcodes").selectAll(".mode-zipcode-chorolpleth-zipcodes"+a).data(topojson.feature(e,e.objects.zip_codes_for_the_usa).features).enter().append("path").attr("class","mode-zipcode-chorolpleth-zipcodes-"+a).attr("fill",function(t){return g(m.get(t.properties.zip))}).attr("d",f)})},countyChoropleth:function(t){var a=alamode.makeId(10),e=t.query_name,n=t.county_id_column,r=t.value_column,o=t.width||950,i=t.height||o/1.9,l=t.title||e,s=t.color_range,d=t.color_gradient||["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6","#2171b5","#08519c","#08306b"],c=t.html_element||"body",u=alamode.getDataFromQuery(e),m=d3.map(),h=d3.geoAlbersUsa().scale(o).translate([o/2,i/2]),f=d3.geoPath().projection(h),p=alamode.addContainerElement(c);d3.select(p).append("div").attr("class","mode-graphic-title").text(l),svg=d3.select(p).append("div").attr("class","mode-county-chorolpleth").append("svg").attr("id","mode-county-chorolpleth-"+a).attr("width",o).attr("height",i),u.forEach(function(t){m.set(t[n],+t[r])}),colorDomain=s||d3.extent(u,function(t){return t[r]});var g=d3.scale.quantize().domain(colorDomain).range(d);queue().defer(d3.json,"https://s3-us-west-2.amazonaws.com/mode-alamode/counties.json").await(function(t,e){d3.select("#mode-county-chorolpleth-"+a).append("g").attr("class","mode-county-chorolpleth-counties").selectAll(".mode-county-chorolpleth-counties"+a).data(topojson.feature(e,e.objects.counties).features).enter().append("path").attr("class","mode-county-chorolpleth-counties-"+a).attr("fill",function(t){return g(m.get(t.id))}).attr("d",f),d3.select("#mode-county-chorolpleth-"+a).append("path").datum(topojson.mesh(e,e.objects.states,function(t,e){return t!==e})).attr("class","mode-county-chorolpleth-states").attr("d",f)})},stateChoropleth:function(t){var a=alamode.makeId(10),e=t.query_name,n=t.state_column,r=t.value_column,o=t.state_code_type,i=t.width||950,l=t.height||i/1.9,s=t.title||e,d=t.color_range,c=t.color_gradient||["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6","#2171b5","#08519c","#08306b"],u=t.html_element||"body",m=alamode.getDataFromQuery(e),h=d3.map(),f=d3.geoAlbersUsa().scale(i).translate([i/2,l/2]),p=d3.geoPath().projection(f),g=alamode.addContainerElement(u);d3.select(g).append("div").attr("class","mode-graphic-title").text(s),svg=d3.select(g).append("div").attr("class","mode-state-chorolpleth").append("svg").attr("id","mode-state-chorolpleth-"+a).attr("width",i).attr("height",l),m.forEach(function(t){h.set(t[n],+t[r])}),colorDomain=d||d3.extent(m,function(t){return t[r]});var v=d3.scale.quantize().domain(colorDomain).range(c);queue().defer(d3.json,"https://s3-us-west-2.amazonaws.com/mode-alamode/states.json").await(function(t,e){d3.select("#mode-state-chorolpleth-"+a).append("g").attr("class","mode-state-chorolpleth-states").selectAll(".mode-state-chorolpleth-states-"+a).data(e.features).enter().append("path").attr("class","mode-state-chorolpleth-states-"+a).attr("fill",function(t){return v(h.get(t.properties[o]))}).attr("d",p)})},worldChoropleth:function(t){var a=alamode.makeId(10),e=t.query_name,n=t.country_column,r=t.value_column,o=t.country_code_type,i=t.width||950,l=t.height||.8*i,s=t.title||e,d=t.color_range,c=t.color_gradient||["#9ecae1","#6baed6","#4292c6","#2171b5","#08519c","#08306b"],u=t.html_element||"body",m=alamode.getDataFromQuery(e),h=d3.map(),f=d3.geo.mercator().scale((i+1)/2/Math.PI).translate([i/2,l/2+.1*l]).precision(.1),p=d3.geoPath().projection(f),g=alamode.addContainerElement(u);d3.select(g).append("div").attr("class","mode-graphic-title").text(s),d3.select(g).append("div").attr("class","mode-world-chorolpleth-legend").attr("id","mode-world-chorolpleth-legend-"+a).text("Hover over a country to see details"),svg=d3.select(g).append("div").attr("class","mode-world-chorolpleth").append("svg").attr("id","mode-world-chorolpleth-"+a).attr("width",i).attr("height",l),m.forEach(function(t){h.set(t[n],+t[r])}),colorDomain=d||d3.extent(m,function(t){return t[r]});var v=d3.scale.quantize().domain(colorDomain).range(c);queue().defer(d3.json,"https://s3-us-west-2.amazonaws.com/mode-alamode/world.json").await(function(t,e){d3.select("#mode-world-chorolpleth-"+a).append("g").attr("class","mode-world-chorolpleth-countries-base").selectAll(".mode-world-chorolpleth-countries").data(topojson.feature(e,e.objects.countries).features).enter().append("path").attr("class","mode-world-chorolpleth-countries").attr("fill",function(t){return v(h.get(t.properties[o]))}).attr("d",p).on("mouseover",function(t){var e=t.properties.name;h.get(t.properties[o])?value=h.get(t.properties[o]):value="--",d3.select("#mode-world-chorolpleth-legend-"+a).text(e+": "+value)}).on("mouseout",function(t){d3.select("#mode-world-chorolpleth-legend-"+a).text("Hover over a country to see details")}),d3.select("#mode-world-chorolpleth-"+a).append("path").datum(topojson.mesh(e,e.objects.countries,function(t,e){return t!==e})).attr("class","mode-world-chorolpleth-boundaries").attr("d",p)})},pivotTable:function(t){var e=alamode.makeId(10),a=t.query_name,n=t.default_columns,r=t.default_rows,o=t.default_values,i=t.editable,l=t.aggregate_function||"Count",s=t.pivot_table_type||"Table",d=t.default_column_value||a,c=t.html_element||"body",u=t.default_exclusions||[],m=t.default_inclusions||[];Array.isArray(o)||(o=[o]);var h=alamode.getDataFromQuery(a),f=alamode.getColumnsFromQuery(a),p=_.map(f,"name"),g=alamode.addContainerElement(c);d3.select(g).append("div").attr("class","mode-graphic-title").text(d),d3.select(g).append("div").attr("class","mode-pivot-table").attr("id",e);var v=[];if(v.push(p),h.forEach(function(e){var a=[];p.forEach(function(t){a.push(e[t])}),v.push(a)}),i)$("#"+e).pivotUI(v,{cols:n,rows:r,aggregatorName:l,vals:o,rendererName:s,exclusions:u,inclusions:m});else{var y=$.pivotUtilities,x=y.renderers[s],b=y.aggregators[l];$("#"+e).pivot(v,{cols:n,rows:r,aggregator:b(o),renderer:x,exclusions:u,inclusions:m})}},pieChartLabels:function(t){var e=t.show_all_labels,a=t.chart_id,n=$("#"+a),o={};setInterval(function(){!function(t,r){t.find(".nv-legendWrap .nv-series text").each(function(a){var n=$(this).text();t.find(".nv-pieWrap .nv-pieLabels text").each(function(t){var e=a+"-"+t;text=$(this).text(),a==t&&""!=text&&text!=o[e]?text=n+" - "+text:a==t&&r&&text!=o[e]&&(text=n),o[e]=text,$(this).text(text)})})}(n,e)},300)},bigNumberSparkline:function(t){var e="#"+t.chart_id,a=t.x_axis_column,n=t.value_column,r=t.query_name,o=alamode.makeId(12),i=alamode.getDataFromQuery(r),l=alamode.getColumnsFromQuery(r);a?(xMatch=_.filter(l,{name:a}),xType=xMatch[0].type):xType="string";var s=[];i.forEach(function(t){"datetime"==xType||"timestamp"==xType||"date"==xType?formattedX=d3.time.format.utc("%Y-%m-%d")(new Date(Date.parse(t[a]))):formattedX=t[a];var e={x:formattedX,y:parseInt(t[n])};s.push(e)});var d=$(e+" .chart-wrapper"),c=$(e+" .chart-big-number"),u=d.height(),m=d.width(),h=c.height(),f=u-h-20;d3.select(e+" .chart-big-number").append("svg").attr("height",f).attr("width",m).attr("id",o).attr("style","overflow:visible!important;").append("g").attr("transform","translate(0,"+h+")"),nv.addGraph(function(){var t=nv.models.sparklinePlus().margin({left:15,right:15}).x(function(t,e){return e}).xTickFormat(function(t){return s[t].x}).showLastValue(!1);return d3.select("#"+o).datum(s).call(t),t}),setTimeout(function(){d3.selectAll(e+" path").style("stroke-width","2px").style("stroke-linejoin","round").style("stroke","#646C6C"),d3.selectAll(e+" .nv-minValue").style("fill","#EE7437").style("stroke","#EE7437").attr("r",3),d3.selectAll(e+" .nv-maxValue").style("fill","#37B067").style("stroke","#37B067").attr("r",3),d3.selectAll(e+" .nv-currentValue").style("fill","#22A3C0").style("stroke","#22A3C0").attr("r",3)},1e3)},addLinkToBigNumber:function(t){var e="#"+t.chart_id,a=t.url;$(e+" .chart-big-number .aggregate span").replaceWith(function(){var t=$.trim($(this).text());return"<a style='text-decoration: underline;' href='"+a+"' target='_blank'>"+t+"</a>"})},forceDirectedGraph:function(t){var e=alamode.makeId(10),a=t.node_query,n=t.edge_query,r=t.html_element||"body",o=t.title||queryName,i=t.chart_width||"800",l=t.chart_height||"800",s=t.group_colors||"",d=t.links_to_show||100,c=alamode.getDataFromQuery(a),u=alamode.getDataFromQuery(n),m=[];u.forEach(function(e){var t=m.filter(function(t){return t.target==e.source}).filter(function(t){return t.source==e.target});0!=t.length?t.edge_size+=e.edge_size:m.push(e)}),m=(m=m.sort(function(t,e){return e.edge_size-t.edge_size})).slice(0,d),nameMap={},c.forEach(function(t,e){t.id=e,nameMap[t.node]=e}),m.forEach(function(t){t.source_id=nameMap[t.source],t.target_id=nameMap[t.target]});var h=alamode.addContainerElement(r);d3.select(h).append("div").attr("class","mode-graphic-title").text(o),d3.select(h).append("div").attr("class","mode-force-directed-graph").style("width",i).attr("id",e);var f=d3.tip().attr("class","mode-force-directed-graph-tooltip").offset([-10,0]).html(function(t){return t.node}),p=d3.layout.force().linkDistance(40).linkStrength(1).size([i,l]),g=d3.select("#"+e).append("svg").attr("width",i).attr("height",l);g.call(f);var v={nodes:c,links:m},y=d3.scale.linear().domain(d3.extent(c,function(t){return t.node_size})).range([2,20]),x=d3.scale.linear().domain(d3.extent(m,function(t){return t.edge_size})).range([1,10]),_=d3.scale.linear().domain(d3.extent(m,function(t){return t.edge_size})).range([.1,.9]),b=(c=v.nodes.slice(),m=[],[]);v.links.forEach(function(t){var e=c[t.source_id],a=c[t.target_id],n={};n.connections=t.edge_size,c.push(n),m.push({source:e,target:n},{source:n,target:a}),b.push([e,n,a])}),p.nodes(c).links(m).start();var w=g.selectAll(".mode-force-directed-graph-link ").data(b).enter().append("path").attr("class","mode-force-directed-graph-link").style("stroke-width",function(t){return x(t[1].connections)}).style("opacity",function(t){return _(t[1].connections)}),k=g.selectAll(".mode-force-directed-graph-node").data(v.nodes).enter().append("g").attr("class","mode-force-directed-graph-node").call(p.drag);k.append("circle").attr("r",function(t){return y(t.node_size)}).style("fill",function(t){return s?s[t.node_group]:"#0E819A"}).on("mouseover",f.show).on("mouseout",f.hide),p.on("tick",function(){w.attr("d",function(t){return"M"+t[0].x+","+t[0].y+"S"+t[1].x+","+t[1].y+" "+t[2].x+","+t[2].y}),k.attr("transform",function(t){return"translate("+t.x+","+t.y+")"})})},networkMatrix:function(t){var e=alamode.makeId(10),a=t.node_query,n=t.edge_query,r=t.html_element||"body",o=t.title||queryName,i=t.padding_for_names||"200",l=t.chart_width||"800",s=t.chart_height||"800",d=t.group_colors||"",c=t.left_label||"",u=t.top_label||"",m=i,h=10,f=10,p=i,g=alamode.getDataFromQuery(a),v=alamode.getDataFromQuery(n);nameMap={},g.forEach(function(t,e){t.id=e,nameMap[t.node]=e}),v.forEach(function(t){t.source_id=nameMap[t.source],t.target_id=nameMap[t.target]});var y=d3.scale.ordinal().rangeBands([0,l]),x=d3.scale.linear().domain(d3.extent(v,function(t){return t.edge_size})).clamp(!0),_=alamode.addContainerElement(r);d3.select(_).append("div").attr("class","mode-graphic-title").text(o),d3.select(_).append("div").attr("class","mode-network-matrix-order-picker").html('<p>Order: <select id="mode-network-matrix-order-picker-'+e+'"><option value="name">Name</option><option value="count">Frequency</option><option value="group">Group</option></select>'),d3.select(_).append("div").attr("class","mode-network-matrix").style("width",l).attr("id",e);var b=d3.tip().attr("class","mode-network-matrix-tooltip").offset([-10,0]).html(function(t){return t.z}),w=d3.select("#"+e).append("svg").attr("width",l+p+h).attr("height",s+m+f);w.call(b);var k=w.append("g").attr("transform","translate("+p+","+m+")");graph={nodes:g,links:v};var $=[],C=(g=graph.nodes).length;g.forEach(function(t,e){t.index=e,t.count=0,$[e]=d3.range(C).map(function(t){return{x:t,y:e,z:0}})}),graph.links.forEach(function(t){void 0!==$[t.source_id][t.target_id]?($[t.source_id][t.target_id].z+=t.edge_size,g[t.source_id].count+=t.edge_size,g[t.target_id].count+=t.edge_size):($[t.source_id][t.target_id]={},$[t.source_id][t.target_id].z=0)});var E,z={name:d3.range(C).sort(function(t,e){return d3.ascending(g[t].node,g[e].node)}),count:d3.range(C).sort(function(t,e){return g[e].count-g[t].count}),group:d3.range(C).sort(function(t,e){return d3.ascending(g[t].node_group,g[e].node_group)})};y.domain(z.name),w.append("text").attr("class","mode-network-matrix-axis-label").attr("x",(l+p+h)/2).attr("y",25).attr("text-anchor","middle").text(u),w.append("text").attr("class","mode-network-matrix-axis-label").attr("x",(s+m+f)/-2).attr("y",25).attr("transform","rotate(-90)").attr("text-anchor","middle").text(c),k.append("rect").attr("class","mode-network-matrix-background").attr("width",l).attr("height",s),(E=k.selectAll(".mode-network-matrix-row").data($).enter().append("g").attr("class","mode-network-matrix-row").attr("transform",function(t,e){return"translate(0,"+y(e)+")"}).each(E)).append("line").attr("class","mode-network-matrix-line").attr("x2",l),E.append("text").attr("class","mode-network-matrix-row-text").attr("x",-6).attr("y",y.rangeBand()/2).attr("dy",".32em").attr("text-anchor","end").text(function(t,e){return g[e].node});var F=k.selectAll(".mode-network-matrix-column").data($).enter().append("g").attr("class","mode-network-matrix-column").attr("transform",function(t,e){return"translate("+y(e)+")rotate(-90)"});function E(t){d3.select(this).selectAll(".mode-network-matrix-cell").data(t.filter(function(t){return t.z})).enter().append("rect").attr("class","mode-network-matrix-cell").attr("x",function(t){return y(t.x)}).attr("width",y.rangeBand()).attr("height",y.rangeBand()).style("fill-opacity",function(t){return x(t.z)}).style("fill",function(t){return g[t.x].node_group==g[t.y].node_group?d[g[t.x].node_group]:"#2B2B2B"}).on("mouseover",function(t){!function(a){d3.selectAll(".mode-network-matrix-row-text").classed("active",function(t,e){return e==a.y}),d3.selectAll(".mode-network-matrix-column-text").classed("active",function(t,e){return e==a.x})}(t),b.show(t)}).on("mouseout",function(t){d3.selectAll("text").classed("active",!1),b.hide(t)})}F.append("line").attr("class","mode-network-matrix-line").attr("x1",-l),F.append("text").attr("class","mode-network-matrix-column-text").attr("x",6).attr("y",y.rangeBand()/2).attr("dy",".32em").attr("text-anchor","start").text(function(t,e){return g[e].node}),d3.select("#mode-network-matrix-order-picker-"+e).on("change",function(){!function(t){y.domain(z[t]);var e=k.transition().duration(1e3);e.selectAll(".mode-network-matrix-row").attr("transform",function(t,e){return"translate(0,"+y(e)+")"}).selectAll(".mode-network-matrix-cell").attr("x",function(t){return y(t.x)}),e.selectAll(".mode-network-matrix-column").attr("transform",function(t,e){return"translate("+y(e)+")rotate(-90)"})}(this.value)})},hive:function(t){d3.hive={},d3.hive.link=function(){function e(t,e){var a,n=l(s,this,t,e),r=l(d,this,t,e);n.a>r.a&&(a=r,r=n,n=a),r.a-n.a>Math.PI&&(n.a+=2*Math.PI);var o=n.a+(r.a-n.a)/3,i=r.a-(r.a-n.a)/3;return n.r0-n.r1||r.r0-r.r1?"M"+Math.cos(n.a)*n.r0+","+Math.sin(n.a)*n.r0+"L"+Math.cos(n.a)*n.r1+","+Math.sin(n.a)*n.r1+"C"+Math.cos(o)*n.r1+","+Math.sin(o)*n.r1+" "+Math.cos(i)*r.r1+","+Math.sin(i)*r.r1+" "+Math.cos(r.a)*r.r1+","+Math.sin(r.a)*r.r1+"L"+Math.cos(r.a)*r.r0+","+Math.sin(r.a)*r.r0+"C"+Math.cos(i)*r.r0+","+Math.sin(i)*r.r0+" "+Math.cos(o)*n.r0+","+Math.sin(o)*n.r0+" "+Math.cos(n.a)*n.r0+","+Math.sin(n.a)*n.r0:"M"+Math.cos(n.a)*n.r0+","+Math.sin(n.a)*n.r0+"C"+Math.cos(o)*n.r1+","+Math.sin(o)*n.r1+" "+Math.cos(i)*r.r1+","+Math.sin(i)*r.r1+" "+Math.cos(r.a)*r.r1+","+Math.sin(r.a)*r.r1}function l(t,e,a,n){var r=t.call(e,a,n),o=+("function"==typeof c?c.call(e,r,n):c)+h,i=+("function"==typeof u?u.call(e,r,n):u);return{r0:i,r1:u===m?i:+("function"==typeof m?m.call(e,r,n):m),a:o}}var s=function(t){return t.source},d=function(t){return t.target},c=function(t){return t.angle},u=function(t){return t.radius},m=u,h=-Math.PI/2;return e.source=function(t){return arguments.length?(s=t,e):s},e.target=function(t){return arguments.length?(d=t,e):d},e.angle=function(t){return arguments.length?(c=t,e):c},e.radius=function(t){return arguments.length?(u=m=t,e):u},e.startRadius=function(t){return arguments.length?(u=t,e):u},e.endRadius=function(t){return arguments.length?(m=t,e):m},e};var e=alamode.makeId(10),a=t.node_query,n=t.edge_query,r=t.groups_are_numeric,o=t.html_element||"body",i=t.title||queryName,l=t.chart_width||"800",s=t.chart_height||"800",d=t.group_colors||"",c=Math.min(l,s)/2-30,u=.2*c,m=alamode.getDataFromQuery(a),h=alamode.getDataFromQuery(n),f=_.uniq(_.map(m,"node_group")),p={};m.forEach(function(t){t.x=r?t.node_group:f.indexOf(t.node_group),t.y=t.node_size,p[t.node]=t}),h.forEach(function(t){t.source=p[t.source],t.target=p[t.target]});var g=alamode.addContainerElement(o);d3.select(g).append("div").attr("class","mode-graphic-title").text(i),d3.select(g).append("div").attr("class","mode-network-matrix").style("width",l).attr("id",e),angle=r?d3.scale.linear().domain(d3.extent(m,function(t){return t.node_group})).range([0,2*Math.PI]):d3.scale.ordinal().domain(d3.range(f.length+1)).rangePoints([0,2*Math.PI]);var v=d3.scale.linear().domain(d3.extent(m,function(t){return t.node_size})).range([u,c]),y=d3.tip().attr("class","mode-hive-tooltip").offset([-10,0]).html(function(t){return t.node}),x=d3.select("#"+e).append("svg").attr("width",l).attr("height",s).append("g").attr("transform","translate("+l/2+","+s/2+")");function b(t){return t/Math.PI*180-90}x.call(y),x.selectAll(".mode-hive-axis").data(d3.range(f.length)).enter().append("line").attr("class","mode-hive-axis").attr("transform",function(t){return"rotate("+b(angle(t))+")"}).attr("x1",v.range()[0]).attr("x2",v.range()[1]),x.selectAll(".mode-hive-link").data(h).enter().append("path").attr("class","mode-hive-link").attr("d",d3.hive.link().angle(function(t){return angle(t.x)}).radius(function(t){return v(t.y)})).style("stroke",function(t){return d[t.source.node_group]}),x.selectAll(".mode-hive-node").data(m).enter().append("circle").attr("class","mode-hive-node").attr("transform",function(t){return"rotate("+b(angle(t.x))+")"}).attr("cx",function(t){return v(t.y)}).attr("r",5).style("fill",function(t){return d[t.node_group]}).on("mouseover",function(e){y.show(e),d3.select(this).attr("class","mode-hive-node mode-hive-node-selected"),d3.selectAll(".mode-hive-link").data(h).attr("class",function(t){return t.source.node==e.node?"mode-hive-link-selected":t.target.node==e.node?"mode-hive-link-selected":"mode-hive-link"})}).on("mouseout",function(t){y.hide(t),d3.select(this).attr("class","mode-hive-node"),d3.selectAll(".mode-hive-link-selected").attr("class","mode-hive-link")})},conditionalFormattingByColumn:function(a){var c="#"+a.table_id,t=a.query_name,e=a.column_rules,u=alamode.getDataFromQuery(t),m=(alamode.getColumnsFromQuery(t),{});function n(t){var e=$(c+" table"),a=$(c+" .js-header-table"),n=a?$(c+" .js-col-header"):$(a).find("th"),r=(e.find("tr"),0);n.each(function(){text=$(this).find(".axel-table-header-label").text(),r=$(this).attr("data-axel-column"),m[text]=r}),t.forEach(function(a){a.rules.forEach(function(t){var e=t.shade_text||!1;"gradient"==t.type?function(i,t,l){var e=d3.extent(_.map(u,i)),s=d3.scale.linear().domain(e).interpolate(d3.interpolateHsl).range(t),d=m[i];u.forEach(function(t,e){var a=c+" table [data-axel-rowkey='"+e+"'][data-axel-column='"+d+"']",n=s(t[i]),r=h(n),o=$(a);l?o.css("color",n):o.css({background:n,color:r})})}(a.column,t.color,e):"above"!=t.type&&"below"!=t.type&&"equal"!=t.type||function(n,r,o,i,l){var s=m[n],d=h(i);u.forEach(function(t,e){var a=$(c+" table [data-axel-rowkey='"+e+"'][data-axel-column='"+s+"']");"above"==r&&t[n]>=o?l?a.css("color",i):a.css({background:i,color:d}):"below"==r&&t[n]<=o?l?a.css("color",i):a.css({background:i,color:d}):"equal"==r&&t[n]==o&&(l?a.css("color",i):a.css({background:i,color:d}))})}(a.column,t.type,t.value,t.color,e)})})}function h(t){var e=/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t);return 125<(a=e?(rgb=function(t){var e=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return e?{r:parseInt(e[1],16),g:parseInt(e[2],16),b:parseInt(e[3],16)}:null}(t),Math.round((299*parseInt(rgb.r)+587*parseInt(rgb.g)+114*parseInt(rgb.b))/1e3)):255)?"#2B2B2B":"#FCFCFC"}setTimeout(function(){n(e)},1e3),$(c).mousemove(function(){n(e)})},customizeTable:function(t){window.dispatchAction({type:"Embed.AlamodeCustomizeTable",payload:t})},conditionalFormattingByTable:function(a){var c="#"+a.table_id,t=a.query_name,u=a.columns;rules=a.rules;var m=alamode.getDataFromQuery(t),h=(alamode.getColumnsFromQuery(t),{}),n=[];u.forEach(function(t){var e=d3.extent(_.map(m,t));n=n.concat(e)});var o=d3.extent(n);function e(t){var e=$(c+" table"),a=$(c+" .js-header-table"),n=a?$(c+" .js-col-header"):$(a).find("th"),r=(e.find("tr"),0);n.each(function(){text=$(this).find(".axel-table-header-label").text(),r=$(this).attr("data-axel-column"),h[text]=r}),t.forEach(function(t){var e=t.shade_text||!1;"gradient"==t.type?function(t,s){var d=d3.scale.linear().domain(o).interpolate(d3.interpolateHsl).range(t);m.forEach(function(i,l){u.forEach(function(t){var e=h[t],a=c+" table [data-axel-rowkey='"+l+"'][data-axel-column='"+e+"']",n=d(i[t]),r=f(n),o=$(a);s?o.css("color",n):o.css({background:n,color:r})})})}(t.color,e):"above"!=t.type&&"below"!=t.type&&"equal"!=t.type||function(o,i,l,s){var d=f(l);m.forEach(function(n,r){u.forEach(function(t){var e=h[t],a=$(c+" table [data-axel-rowkey='"+r+"'][data-axel-column='"+e+"']");"above"==o&&n[t]>=i?s?a.css("color",l):a.css({background:l,color:d}):"below"==o&&n[t]<=i?s?a.css("color",l):a.css({background:l,color:d}):"equal"==o&&n[t]==i&&(s?a.css("color",l):a.css({background:l,color:d}))})})}(t.type,t.value,t.color,e)})}function f(t){var e=/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t);return 125<(a=e?(rgb=function(t){var e=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return e?{r:parseInt(e[1],16),g:parseInt(e[2],16),b:parseInt(e[3],16)}:null}(t),Math.round((299*parseInt(rgb.r)+587*parseInt(rgb.g)+114*parseInt(rgb.b))/1e3)):255)?"#2B2B2B":"#FCFCFC"}setTimeout(function(){e(rules)},1e3),$(c).mousemove(function(){e(rules)})},addTableOfContents:function(t){void 0===t&&(t="default");var e=t.text_color,a=t.background_color,n=t.hover_color;$(".mode-header").addClass("has-nav");var r=$("<nav class='fixed-nav-bar'></nav>");$(".row").each(function(){$(this).children().each(function(){var t,e=$(this).find("mode-chart").attr("id")||$(this).find("mode-table").attr("id")||$(this).find("mode-python").attr("id");if(!e)return!0;if(e.includes("chart")||e.includes("table")){var a=document.getElementById(e);t=0<$(a).find("mode-pivot-table").length?document.getElementById(e).getElementsByClassName("in-place-edit-text")[0].innerText:document.getElementById(e).getElementsByClassName("chart-title")[0].innerText}else e.includes("python")&&(t=document.getElementById(e).getElementsByClassName("in-place-edit-text")[0].innerText);var n=$("<a class='scroll-link' href=#"+e+">"+(t.includes("Click to add title")?"Untitled":t)+"</a>");r.append(n)})});var o=$("<div class='mode-grid container''></div>");$(".mode-content").prepend(o);var i=$("<div class='row'></div>");o.prepend(i);var l=$("<div class='col-md-12'></div>");i.prepend(l),l.prepend(r),e&&$(".fixed-nav-bar a").css("color",e),a&&$(".fixed-nav-bar").css("background-color",a),n&&$(".fixed-nav-bar a").hover(function(){$(this).css("color",n)},function(){e?$(this).css("color",e):$(this).css("color","")}),setTimeout(function(){$(".scroll-link").on("click",function(t){t.preventDefault(),function(t,e){var a=$(t).offset().top-50;$("html,body").animate({scrollTop:a},e)}($(this).attr("href"),750)})},100)},xAnnotations:function(t){var a=t.chart_id,r=t.comment_values,o=t.comments,l=t.color||[],s=t.is_date||!1;setTimeout(function(){var e=$("#"+a).find("div.highcharts-container")[0].id,t=Highcharts.charts;if(chart=t.filter(function(t){if(t)return t.container.id==e})[0],data=chart.series[0].data,s)for(i=0;i<r.length;i++)r[i]=new Date(r[i]).getTime();var n=data.filter(function(t){if(t)return 0<=r.indexOf(t.category)});chart.update({chart:{events:{load:function(t){for(i=0;i<n.length;i++){var e=n[i],a=l[i]||e.color||"#FCFCFC";t.renderer.label(o[i],e.plotX+t.plotLeft,10,"callout",e.plotX+t.plotLeft,e.plotY+t.plotTop).attr({fill:"#FCFCFC",stroke:a,"stroke-width":1,radius:10,zIndex:4}).add()}}(chart)}}})},250)}};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment