OXIESEC PANEL
- Current Dir:
/
/
home
/
cubot
/
docroot
/
showcase
/
js
/
D3
/
plugins
Server IP: 139.59.38.164
Upload:
Create Dir:
Name
Size
Modified
Perms
📁
..
-
08/14/2022 11:05:22 AM
rwxr-xr-x
📄
Radar.js
8.86 KB
08/14/2022 11:05:21 AM
rw-r--r--
📄
bar.js
17.59 KB
08/14/2022 11:05:19 AM
rw-r--r--
📄
bullet.css
422 bytes
08/14/2022 11:05:19 AM
rw-r--r--
📄
bullet.js
10.65 KB
08/14/2022 11:05:20 AM
rw-r--r--
📄
calendar.js
16.63 KB
08/14/2022 11:05:19 AM
rw-r--r--
📄
calender.css
541 bytes
08/14/2022 11:05:20 AM
rw-r--r--
📄
combo.js
16.74 KB
08/14/2022 11:05:20 AM
rw-r--r--
📄
combo_2.js
17.91 KB
08/14/2022 11:05:19 AM
rw-r--r--
📄
combo_wip.js
16.61 KB
08/14/2022 11:05:18 AM
rw-r--r--
📄
commonFunc.js
25.28 KB
08/14/2022 11:05:20 AM
rw-r--r--
📄
customChart.js
577 bytes
08/14/2022 11:05:20 AM
rw-r--r--
📄
d3Charts.css
2.88 KB
08/14/2022 11:05:19 AM
rw-r--r--
📄
donut.js
5.67 KB
08/14/2022 11:05:19 AM
rw-r--r--
📄
filledAreaPercent.js
17.95 KB
08/14/2022 11:05:19 AM
rw-r--r--
📄
funnel.js
6.03 KB
08/14/2022 11:05:20 AM
rw-r--r--
📄
funnel.js_previous_o4aug17
5.86 KB
08/14/2022 11:05:20 AM
rw-r--r--
📄
gauged.js
15.3 KB
08/14/2022 11:05:20 AM
rw-r--r--
📄
groupbar.js
13.18 KB
08/14/2022 11:05:19 AM
rw-r--r--
📄
groupbar_23Aug2019.js
10.85 KB
08/14/2022 11:05:18 AM
rw-r--r--
📄
heatmap.js
9.77 KB
08/14/2022 11:05:20 AM
rw-r--r--
📄
html2canvas.min.js
161.47 KB
08/14/2022 11:05:19 AM
rw-r--r--
📄
makeJson.js
1.64 KB
08/14/2022 11:05:19 AM
rw-r--r--
📄
makeJsonmulti.js
3.75 KB
08/14/2022 11:05:18 AM
rw-r--r--
📄
multiLine.js
17.24 KB
08/14/2022 11:05:20 AM
rw-r--r--
📄
multipleDonut.js
5.29 KB
08/14/2022 11:05:19 AM
rw-r--r--
📄
pie.js
4.52 KB
08/14/2022 11:05:20 AM
rw-r--r--
📄
radar.js
6.49 KB
08/14/2022 11:05:19 AM
rw-r--r--
📄
saveSvgAsPng.js
14.62 KB
08/14/2022 11:05:21 AM
rw-r--r--
📄
stackedAreaDate.js
17.56 KB
08/14/2022 11:05:20 AM
rw-r--r--
📄
stackedAreaDate_bkup23Nov2020.js
17.56 KB
08/14/2022 11:05:20 AM
rw-r--r--
📄
stackedbar.js
10.72 KB
08/14/2022 11:05:20 AM
rw-r--r--
📄
stackedbar_bkup21Apr2020.js
10.72 KB
08/14/2022 11:05:20 AM
rw-r--r--
📄
stock.js
13.6 KB
08/14/2022 11:05:19 AM
rw-r--r--
📄
sun.js
7.59 KB
08/14/2022 11:05:20 AM
rw-r--r--
📄
sunburst.js
7.13 KB
08/14/2022 11:05:19 AM
rw-r--r--
📄
tableChart.js
11.54 KB
08/14/2022 11:05:21 AM
rw-r--r--
📄
tableChart_07Jan2020.js
6.7 KB
08/14/2022 11:05:19 AM
rw-r--r--
📄
tree.js
7.34 KB
08/14/2022 11:05:19 AM
rw-r--r--
📄
waterfall.js
9.17 KB
08/14/2022 11:05:21 AM
rw-r--r--
📄
zoomTree.js
7.59 KB
08/14/2022 11:05:19 AM
rw-r--r--
Editing: filledAreaPercent.js
Close
function drawFilledAreaPercent(Data, divId, Title, Width, Height, Ndim, Nmeas, MeasFormats,dispObj,toolTip){ var measNum = 1; var margin = {top: 20, right: 40, bottom: Height/4, left: 65}, width = Width - margin.left - margin.right, height = Height - margin.top - margin.bottom-25; var json=makeJsonFromArrayNew(Data, Ndim, Nmeas, MeasFormats, dispObj); makeParentsJson1(json,Nmeas); resolveComputeMeasure(json, dispObj.RD.General.Measures); applyShowHideMeasure(json, dispObj); Nmeas=json.measName.length; var k = new Array(Nmeas);//to track path number var i=0; for(i=0;i<Nmeas;i++){ k[i]=1; } d3.select("#"+divId).html('<div class="myChart"><div class="svgLegend"></div><div class="tipsy"><div class="tipsy-arrow"></div><div class="tipsy-inner"></div></div></div>'); d3.selectAll(".tipsy").style("display", "none"); var svg = findSvgArea(Nmeas,dispObj,json, Width, Height,divId); svg[0].attr("transform", "translate(" + margin.left + "," + margin.top + ")"); height = svg[2] - margin.top-50; width = dispObj.getMultiAxes() ? svg[3]- margin.left - margin.right : svg[3] - margin.left - 30; //var m = 1; //var f; var ele; curNode=json; plotFilledAreaPercent(divId, svg, Data, json,width,height,json,measNum,k, dispObj, MeasFormats); if(dispObj.getShowLegend()) makeLegend(svg,Nmeas,measNum,0,clickRectSA,json,k,1, dispObj); function clickRectSA(ele,k,svg,n){ k[+ele.id]=!k[+ele.id]; svg[0].selectAll("path").remove(); svg[0].selectAll("g").remove(); svg[0].selectAll("circle").remove(); svg[0].selectAll("text").remove(); svg[0].selectAll("rect").remove(); plotFilledAreaPercent(divId, svg, Data, curNode, width,height,json,measNum,k, dispObj, MeasFormats) } } function plotFilledAreaPercent(divId, svg, Data, curNode, width,height,json,measNum,k, dispObj, MeasFormats){ var n = curNode.measName.length, cnc=curNode.children, i=0, area = new Array(n), path = new Array(n), r = new Array(n), f; var total var parseDate = calcParseDate(cnc,parseDate); h=height; var xtickspace; if(dispObj.getShowTicks()&&dispObj.getShowTickLabels()){ // xtickspace = findxtickspace(cnc,dispObj); var name; var max = cnc[0].name.length for(i=0;i<cnc.length;i++){ if(cnc[i].name.length > max){ max = cnc[i].name.length; name = cnc[i].name } } xtickspace = max/2 * 4 }else xtickspace = 0; var nTicks=getNticks(height, xtickspace); cnc.forEach(function(d) { d.xcontent = parseDate(d.name); d.date = d.xcontent; }); if(!cnc[0].date){ var x = d3.scale.ordinal() .domain(cnc.map(function(d) { d.xcontent = d.name; return d.xcontent; })) .rangePoints([0,width]); } else{ cnc = cnc.sort(function (a, b) { return a.date - b.date; } ); var x = d3.time.scale() .range([0, width]) .domain(d3.extent(cnc, function(d) { return d.xcontent; })); } var x1 = d3.scale.ordinal() .rangeRoundBands([0, width]) .domain(cnc.map(function(d) { return d.name; })); var miny=0; var maxy=100; /*var maxy=d3.max(cnc, function(d) { var s=0; for(i=0;i<n;i++) if(k[i]) s+= Math.max(d.size[i]); return s; }); */ var y1 = d3.scale.linear() .rangeRound([height-xtickspace, 0]) .domain(getNewMinMax(miny, maxy, nTicks)); var minMax=getNewMinMax(miny, maxy, nTicks); tv=getTickValues(miny, maxy, nTicks); var xscale = cnc[0].date ? x : x1; svg[0].append("g") .attr("class", "xaxis") .attr("transform", "translate(0" + "," + y1(0) + ")" ) .call(d3.svg.axis().scale(xscale).orient("bottom")) .selectAll("text") .attr("dx", ".1em") .attr("dy", ".50em") .style("text-anchor", function() { return dispObj.getxPos()=="A" ? "end" : "middle";}) .attr("transform", function() { return dispObj.getxPos()=="A" ? "rotate("+(-65)+")" : "rotate(0)"; }) .text(function(d){ var str=""; if(!(cnc[0].date)){ str=d; } else{ str=this.textContent; } d=str.replace("'","'"); if(dispObj.getxFrom() == "all") return d; else if(dispObj.getxFrom() == "first") return d.substr(0,dispObj.getxLength()); else return d.substr(d.length - dispObj.getxLength(),d.length); }) .on("click", function(d,i){ for(i=0;i<cnc.length;i++) if(d==cnc[i].xcontent.toString()) { d=cnc[i]; break; } clickFilledAreaPercent(divId, d,i, svg, Data,0,width,height,json,measNum,k,0, dispObj, MeasFormats)}); if(!dispObj.getMark()) svg[0].selectAll(".xaxis").selectAll(".tick").selectAll("line").remove(); /*svg[0].select(".xaxis").selectAll(".tick").append("title") .text(function (d){ return d; if(!(cnc[0].date)){ return d; } else{ return this.textContent; } });*/ if (x.rangeBand()/(n+1.5) < 40){ svg[0].select(".xaxis").selectAll(".tick text").call(wrap,x.rangeBand()/(n+1)).append("title") .text(function (d){ return d; if(!(cnc[0].date)){ return d; } else{ return this.textContent; } }); }else svg[0].select(".xaxis").selectAll(".tick text").call(wrap, x.rangeBand()/(n+10)).append("title") .text(function (d){ return d; if(!(cnc[0].date)){ return d; } else{ return this.textContent; } }); if(dispObj.getShowLabel()) svg[0].append("text").attr("class","label") .text(cnc[0].dimName) .attr("transform","translate("+width/2+","+(height+lblPad)+")") .style("text-anchor", "middle"); //svg[0].select(".xaxis").append("text").text(cnc[0].dimName).attr("transform","translate("+width/2+","+(40)+")").style("text-anchor", "middle"); var yaxis = svg[0].append("g") .attr("class", "yaxis") .call(d3.svg.axis().scale(y1).orient("left") .tickSize(-(width),0,0) .tickFormat( function(d) { return formatSmallScale(d, MeasFormats[0])+'%'}) .tickValues(tv) ); if(!(dispObj.getShowGridLines() && dispObj.getShowTicks())) svg[0].select(".yaxis").selectAll("line").style("visibility","hidden"); if(dispObj.getShowLabel()) ytext = svg[0].selectAll(".yaxis").append("g") .append("text") .attr("class","label") .attr("transform", "translate(" + -54 + "," + (height-xtickspace)/2 + ")rotate(-90)") .style("text-anchor", "middle") .text("Measure"); if(!dispObj.getShowTicks()) svg[0].selectAll(".tick").remove(); if(!dispObj.getShowTickLabels()){ svg[0].selectAll(".xaxis").selectAll(".tick").selectAll("text").remove(); svg[0].selectAll(".yaxis").selectAll(".tick").selectAll("text").remove(); } svg[0].selectAll(".tick").selectAll("line").attr("class","ygridline"); var t = new Array(); var h = new Array(); var p = new Array(); var c = new Array(); for(i=0;i<cnc.length;i++){ t[i]=0; h[i]=0; p[i]=0; /*c[i]=new Array(n); for( var j=0;j<n;j++) c[i][j]=0; */ } for(i=0;i<cnc.length;i++){ var total = 0; for(var j=0;j<cnc[i].size.length;j++){ total+=cnc[i].size[j]; } var percent=[]; for(var j=0;j<cnc[i].size.length;j++){ percent.push(cnc[i].size[j]*100/total); } cnc[i]['cummulativePercent'] = percent; } for(i=0;i<n;i++){ if(k[i]){ if(cnc.length!=1){ //Plot area only if more than 1 element exists var e = 0; var a = 0; var b = -1; area[i] = d3.svg.area() //.x(function(d) { return Data[0][m].toLowerCase().indexOf("date",0)>=0 ? x(d.xcontent) : x1(e++); }) .x(function(d) { return x(d.xcontent);}) .y1(function(d) { //y coordinate var c = y1(d.cummulativePercent[i])-t[a]; t[a] = t[a]+height -xtickspace - y1(d.cummulativePercent[i]); h[a] = c; a++; return c; }) .y0(function(d) { //height of area if( i==0) return height-xtickspace; else { for(var j=i;j>=0;j--) if(area[j-1]) return h[a]; return height-xtickspace; } }); path[i] = svg[0].append("path") .attr("class", "class"+i) .attr("stroke","none") .attr("fill","none") .attr("pointer-events","all") .on("click", function(){ hideToolTip(divId, f, i); //if(Data[0][m].toLowerCase().indexOf("date",0)>=0){ if(cnc[0].date){ var x0 = x.invert(d3.mouse(this)[0]), i = bisectDate(cnc, x0, 1), d0 = cnc[i - 1], d1 = cnc[i]; f = x0 - d0.xcontent > d1.xcontent - x0 ? d1 : d0; } else { var xPos = d3.mouse(this)[0]; var leftEdges = x1.range(); var widthofband = x1.rangeBand(); var posNo; for(posNo=0; xPos > (leftEdges[posNo] + widthofband); posNo++) {} //do nothing, just increment posNo until case fails f=cnc[posNo]; } ele = this; //clickFilledAreaPercent(divId, f, Data, svg,n,width,height,json,k) clickFilledAreaPercent(divId, f,i, svg, Data,0,width,height,json,measNum,k,0, dispObj, MeasFormats) }) .on("mousemove", function(){ //focus.style("display", null); mousemove(this); }) .on("mouseout", function(d,i){ //focus.style("display", "none"); hideToolTipsa(divId, d, i, this, width/500); }) .transition().delay(function (d){ return i * 300;}) .duration(10) .attr("d", area[i](cnc)) .attr("stroke",dispObj.colorArr[i%20]) .attr("fill",dispObj.colorArr[i%20]); //.attr("transform","translate("+width/(cnc.length*2) + ",0)"); }} } var r = svg[0].append("g").selectAll("rect") //Draw rectangle when only 1 element exists .data(cnc); for(i=0;i<n;i++){ if(k[i]){ if(cnc.length == 1){ var a=0; r.enter().append("rect") .attr("class","class"+i) .attr("y", function(d) { var c = y1(d.cummulativePercent[i])-t[a]; a++; return c; }) .attr("x", function(d){a=0; //reset inner counter before height recalculation return x1(d.xcontent);}) .attr("height",0) .attr("width",0) //initial width and height before transition begins .style("visibility","visible") .attr("fill", dispObj.colorArr[i]) .on("click", function(d,i){ //focus.style("display", "none"); hideToolTip(divId, f, i); //if(Data[0][m].toLowerCase().indexOf("date",0)>=0){ if(cnc[0].date){ var x0 = x.invert(d3.mouse(this)[0]), i = bisectDate(cnc, x0, 1), d0 = cnc[i - 1], d1 = cnc[i]; f = x0 - d0.xcontent > d1.xcontent - x0 ? d1 : d0; } else { var xPos = d3.mouse(this)[0]; var leftEdges = x1.range(); var widthofband = x1.rangeBand(); var posNo; for(posNo=0; xPos > (leftEdges[posNo] + widthofband); posNo++) {} //do nothing, just increment posNo until case fails f=cnc[posNo]; } ele = this; //clickFilledAreaPercent(divId, f, Data, svg,n,width,height,json,k) clickFilledAreaPercent(divId,f,i, svg, Data,0,width,height,json,measNum,k,0, dispObj, MeasFormats) }) .on("mousemove", function(){ //focus.style("display", null); mousemove(this); }) .on("mouseout", function(d,i){ //focus.style("display", "none"); hideToolTipsa(divId, d, i, this, width/500); }) .transition().delay(function (d,i){ return i * 300;}) .duration(600) .attr("height", function(d) { t[a] = t[a]+ height -xtickspace- y1(d.cummulativePercent[i]); //add previous height a++; return height -xtickspace - y1(d.cummulativePercent[i]); }) .attr("width", width); }} } var bisectDate = d3.bisector(function(d) { return d.date; }).left; var focus = svg[0].append("g") .attr("class", "focus") .style("display", "none"); function mousemove(ele){ //if(Data[0][m].toLowerCase().indexOf("date",0)>=0){ if(cnc[0].date){ var x0 = x.invert(d3.mouse(ele)[0]), i = bisectDate(cnc, x0, 1), y0 = y1.invert(d3.mouse(ele)[1]), d0 = cnc[i - 1], d1 = cnc[i], f = x0 - d0.xcontent > d1.xcontent - x0 ? d1 : d0; } else{ var xPos = d3.mouse(ele)[0]; var leftEdges = x1.range(); var widthOfBand = x1.rangeBand(); var posNo; for(posNo=0; xPos > (leftEdges[posNo] + widthOfBand); posNo++) {} //do nothing, just increment j until case fails f = cnc[posNo]; } /* focus.attr("transform", function(){return "translate(" + d3.mouse(ele)[0] + "," + d3.mouse(ele)[1] + ")"});//xalt(f.xcontent)c[k][j] for(var j=0;j<n;j++) //To find measure number if(d3.select(ele).attr("fill")==dispObj.colorArr[j]) break; focus.select("text").attr("class","tipsy-inner").text(f.name + " " + f.measName[j] + "(" + f.size[j] + ")" + " (" + f.percent[j] + ")"); */ showToolTipl(divId, f, n, ele,MeasFormats,dispObj,"FA"); /*var p = d3.select("#"+divId).select(".myChart").select(".tipsy"); p.html("<div class=\"tipsy-inner\">"+dispIfParent(f)+"</div>"); function disp(d){ var info = f.dimName + " : " + f.name; for(i=0;i<n;i++) if(d3.select(ele).attr("fill")==dispObj.colorArr[i]){ info+= "<br>" + f.measName[i] + " : " + f.size[i] + " ( "+ f.percent[i] + " ) "; break; } return info + "<br>"; } function dispIfParent (f){ return f.depth===0 ? " " : f.parent ? dispIfParent(f.parent)+disp(f) : " "; } p.style("display", "block").style("visibility", "visible").style("left", d3.event.pageX+"px").style("top", d3.event.pageY+"px");*/ } //Legend //var svgL=svg[1].append("g").attr("class","leg").attr("transform","translate("+0+","+(height+20)+")"); var spcValues = dispObj.getThreshold() if(spcValues.spcLines=="true" && !dispObj.getMultiAxes()){ var upper_limit_value = getResolvedThresholdValue(spcValues.upperValue); var lower_limit_value = getResolvedThresholdValue(spcValues.lowerValue); var upper_stroke_value = (spcValues.upperLine != "dash") ? "0,0" : "3,3"; var lower_stroke_value = (spcValues.lowerLine != "dash") ? "0,0" : "3,3"; var upperColor = (spcValues.upperColor == "#") ? "black" : spcValues.upperColor; var lowerColor = (spcValues.lowerColor == "#") ? "black" : spcValues.lowerColor; svg[0].append("line").attr("class", "limit-line").style("stroke-dasharray",upper_stroke_value).style("stroke", upperColor).attr({ x1: 0, y1: y1(upper_limit_value), x2: width, y2: y1(upper_limit_value) }) svg[0].append("text").attr("class","limit-line").attr({ x: width - (spcValues.upperLabel.length*5), y: y1(upper_limit_value) - 10}).text(spcValues.upperLabel); svg[0].append("line").attr("class", "limit-line").style("stroke-dasharray",lower_stroke_value).style("stroke",lowerColor).attr({ x1: 0, y1: y1(lower_limit_value), x2: width, y2: y1(lower_limit_value) }) svg[0].append("text").attr("class","limit-line").attr({ x: width - (spcValues.lowerLabel.length*5), y: y1(lower_limit_value) - 10}).text(spcValues.lowerLabel); } updateLegendll(divId, svg, curNode, Data,0,width,height,json,measNum,k,clickFilledAreaPercent, dispObj, MeasFormats); } function clickRect(ele,k,svg,n){ for(i=0;i<n;i++){ if(d3.select(ele).attr("fill")==dispObj.colorArr[i]){ k[i]=!k[i]; svg.selectAll(".class"+i).style("visibility",function(){return k[i] ? "visible" : "hidden"}); break; } } } function clickRectText(id,k,svg,n){ k[id]=!k[id]; svg.selectAll(".class"+id).style("visibility",function(){return k[id] ? "visible" : "hidden"}); } var curLogic="next"; function clickFilledAreaPercent(divId, d,i, svg, Data,y,width,height,json,measNum,k,c, dispObj, MeasFormats){ if((c==0 && d.children)||(c==1 && d.children[0].children)){ //var curNode; svg[0].selectAll("path").remove(); svg[0].selectAll("g").remove(); svg[0].selectAll("circle").remove(); svg[0].selectAll("text").remove(); svg[0].selectAll("rect").remove(); svg[0].selectAll(".limit-line").remove(); if( (c==1 || (curLogic=="next")) && d.children){ //m++; curLogic="next"; curNode=d; } else curNode=d.parent; /* else { //m--; curLogic="previous"; curNode=d.parent.parent; if(typeof curNode == "undefined"){ curLogic="next"; curNode=json; //m++; } }*/ //m = curNode.depth; plotFilledAreaPercent(divId, svg, Data, curNode, width,height,json,measNum,k, dispObj, MeasFormats); } } function hideToolTipsa(divId, d,i, ele, w){ d3.select(ele).attr("r",w); hideToolTip(divId, d, i) } function makeParentsJson1(json,n){ var hierarchy = d3.layout.hierarchy() .value(function(d) { return +d.size[n-1]; }) .sort(null); hierarchy(json); } function updateLegendsa(divId, d, n, ele){ var p = d3.select("#"+divId).select(".myChart").select(".svgLegend"); p.html(dispIfParent(d)); function dispLegend(d){ var info = d.name; for(i=0;i<n;i++) if(d3.select(ele).attr("fill")==dispObj.colorArr[i]) info+=" ( "+ d.percent[i] + " ) "; return info; } function dispIfParent (d){ return d.depth!==0 ? d.parent ? dispIfParent(d.parent)+(d.depth != 1 ?">":"")+dispLegend(d) :" ": " "; } } //}