|
| 1 | +//var chart; |
| 2 | +var charts=[]; |
| 3 | + |
| 4 | +var _period; |
| 5 | +var _aggregate; |
| 6 | +var _dateField;//="openedAt"; |
| 7 | + |
| 8 | +function _getYear(period){ |
| 9 | + //console.log("**** getYear() called: period: "+period); |
| 10 | + var _split = period.split("-"); |
| 11 | + var _year; |
| 12 | + if (_split.length==2){ |
| 13 | + _year = parseInt(_split[1]); |
| 14 | + } |
| 15 | + else if (_split.length==1){ |
| 16 | + _year = parseInt(_split[0]); |
| 17 | + } |
| 18 | + if (_year>=2014 && _year <=moment().year()) return _year; |
| 19 | +} |
| 20 | + |
| 21 | +function _alterPeriodByYear(period,yearDelta){ |
| 22 | + var _year = _getYear(period)+yearDelta; |
| 23 | + var _split = period.split("-"); |
| 24 | + if (_split.length==1){ |
| 25 | + return _year.toString(); |
| 26 | + } |
| 27 | + else if (_split.length==2){ |
| 28 | + return _split[0]+"-"+_year; |
| 29 | + } |
| 30 | + return false; |
| 31 | +} |
| 32 | + |
| 33 | + |
| 34 | + |
| 35 | +function init(prio,dateField,chartId){ |
| 36 | + _dateField = dateField; |
| 37 | + nv.addGraph(function() { |
| 38 | + var incidents; |
| 39 | + var chart; |
| 40 | + var _chartId = chartId;//"chartP1"; |
| 41 | + var _prio = prio;//chartId.split("chart")[1]; |
| 42 | + _period =getUrlVars().period; |
| 43 | + if (!_period) _period=moment().year().toString(); |
| 44 | + _aggregate =getUrlVars().aggregate; |
| 45 | + if (_aggregate){ |
| 46 | + _url+="?aggregate="+_aggregate; |
| 47 | + } |
| 48 | + if (!_aggregate) _aggregate="monthly"; |
| 49 | + var _colors={}; |
| 50 | + // #ED1C24 #EF333A #F14A50 #F36166 #F5787C #F78F92 #F9A6A8 #FBBDBE #FDD4D4 #FFEBEA #FFFFFF |
| 51 | + _colors["P01"]=["#ED1C24","#FDD4D4"]; |
| 52 | + // #F7931D #F89E34 #F9A94B #FAB462 #FBBF79 #FCCA90 #FDD5A7 #FEE0BE #FFEBD5 #FFF6EC #FFFFFF |
| 53 | + _colors["P08"]=["#F7931D","#FFEBD5"]; |
| 54 | + // #38A4DC #4CADE0 #60B6E4 #74BFE8 #88C8EC #9CD1F0 #B0DAF4 #C4E3F8 #D8ECFC #ECF5FF #FFFFFF |
| 55 | + _colors["P16"]=["#38A4DC","#D8ECFC"]; |
| 56 | + _colors["P120"]=["#aaaaaa","#efefef"]; |
| 57 | + console.log("prio: "+_prio+" colors: "+_colors[_prio]); |
| 58 | + console.log("period: "+_period); |
| 59 | + chart = nv.models.cumulativeLineChart() |
| 60 | + .useInteractiveGuideline(true) |
| 61 | + .x(function(d) { return d.date }) |
| 62 | + .y(function(d) { return d.y }) |
| 63 | + .color(d3.scale.category10().range()) |
| 64 | + //.average(function(d) { return d.mean/100; }) |
| 65 | + .tooltips(true) |
| 66 | + .showLegend(true) |
| 67 | + .color(_colors[_prio]) |
| 68 | + |
| 69 | + |
| 70 | + .showControls(false) |
| 71 | + ; |
| 72 | + if (_period=="") _period ="All"; |
| 73 | + $("#period_"+_chartId).text(_period); |
| 74 | + $("#aggregate_"+_chartId).text(_aggregate); |
| 75 | + var _reduceXTicks = false; |
| 76 | + //if (_aggregate=="daily" || _aggregate=="weekly") _reduceXTicks = true; |
| 77 | + chart.yAxis |
| 78 | + .tickFormat(d3.format(',d')); |
| 79 | + redraw(_chartId,_period,_aggregate,_prio,dateField); |
| 80 | + |
| 81 | + //function pointer |
| 82 | + charts[chartId]=chart; |
| 83 | + return chart; |
| 84 | + }); |
| 85 | + |
| 86 | + |
| 87 | + |
| 88 | + // clickhandler for |
| 89 | + $('a.dropdown.incidentstrend').click( function(event) { |
| 90 | + |
| 91 | + var _prio =event.target.id.split("_")[0].split("chart")[1].split("-")[0]; |
| 92 | + |
| 93 | + |
| 94 | + var _chart=event.target.id.split("_")[0]; |
| 95 | + var _dateField = _chart.split("-")[1]; |
| 96 | + |
| 97 | + if (_.startsWith(event.target.id.split("_")[1],"aggregate")){ |
| 98 | + _aggregate =event.target.id.split("_")[1].split("-")[1]; |
| 99 | + } |
| 100 | + else |
| 101 | + { |
| 102 | + _period = event.target.id.split("_")[1]; |
| 103 | + } |
| 104 | + console.log("######################### ____id: "+event.target.id); |
| 105 | + console.log("######################### chart: "+_chart); |
| 106 | + console.log("######################### _dateField: "+_dateField); |
| 107 | + |
| 108 | + $("#period_"+_chart).text(_period); |
| 109 | + $("#aggregate_"+_chart).text(_aggregate); |
| 110 | + redraw(_chart,_period,_aggregate,_prio,_dateField); |
| 111 | + }); |
| 112 | + |
| 113 | + |
| 114 | +} |
| 115 | + |
| 116 | +/** |
| 117 | +* prepares data to be consumable by NVd3 |
| 118 | +*/ |
| 119 | +function _prepareData(incidents,incidentsPrev,prio,period,dateField){ |
| 120 | + /* |
| 121 | + console.log("----------------- _prepareData: prio= "+prio); |
| 122 | + console.log("----------------- _prepareData: period= "+period); |
| 123 | + console.log("----------------- _prepareData: dateField= "+dateField); |
| 124 | + console.log("----------------- _prepareData: incidents[0]="+JSON.stringify(incidents[0])); |
| 125 | +*/ |
| 126 | + var _P=[]; |
| 127 | + var _PBase=[]; |
| 128 | + var _PSum=0; |
| 129 | + var _PBaseSum=0; |
| 130 | + |
| 131 | + var _PPrev=[]; |
| 132 | + var _PBasePrev=[]; |
| 133 | + var _PSumPrev=0; |
| 134 | + var _PBaseSumPrev=0; |
| 135 | + |
| 136 | + var _year = _getYear(period); |
| 137 | + var _yearPrev = _getYear(_alterPeriodByYear(period,-1)); |
| 138 | + |
| 139 | + for (var day in incidents){ |
| 140 | + /* |
| 141 | + console.log(JSON.stringify(incidents[day])); |
| 142 | + console.log("++ dateField: "+dateField); |
| 143 | + console.log("++ prio: "+prio); |
| 144 | + console.log("date: "+incidents[day].date+" "+prio+": "+incidents[day][dateField][prio].total); |
| 145 | + */ |
| 146 | + _P.push({"date":incidents[day].date,"y":parseInt(incidents[day][dateField][prio].total)}); |
| 147 | + _PSum+=parseInt(incidents[day][dateField][prio].total); |
| 148 | + } |
| 149 | + //console.log(prio+"Sum = "+_PSum+" "+prio+"BaseSum = "+_PBaseSum); |
| 150 | + |
| 151 | + for (var day in incidentsPrev){ |
| 152 | + //console.log("date: "+incidentsPrev[day].date+" "+prio+": "+incidentsPrev[day][dateField][prio].total); |
| 153 | + //date of previous year must be "normalized" to this year .... |
| 154 | + _PPrev.push({"date":_alterPeriodByYear(incidentsPrev[day].date,1),"y":parseInt(incidentsPrev[day][dateField][prio].total)}); |
| 155 | + _PSumPrev+=parseInt(incidentsPrev[day][dateField][prio]); |
| 156 | + |
| 157 | + } |
| 158 | + //console.log(prio+"Sum = "+_PSumPrev+" "+prio+"BaseSum = "+_PBaseSumPrev); |
| 159 | + |
| 160 | + var incData = [{key:_year,values:_P},{key:_yearPrev,values:_PPrev}] |
| 161 | + |
| 162 | + return incData |
| 163 | +} |
| 164 | + |
| 165 | +function redraw(chartId,period,aggregate,prio,dateField) { |
| 166 | + var _url = "/api/space/rest/incidenttracker/"+period; |
| 167 | + var _urlPrev = "/api/space/rest/incidenttracker/"+_alterPeriodByYear(period,-1); |
| 168 | + |
| 169 | + |
| 170 | + if (aggregate){ |
| 171 | + _url+="?aggregate="+aggregate; |
| 172 | + _urlPrev+="?aggregate="+aggregate; |
| 173 | + } |
| 174 | + console.log("_url: "+_url); |
| 175 | + |
| 176 | + |
| 177 | + d3.json(_url, function(data) { |
| 178 | + d3.json(_urlPrev, function(dataPrev) { |
| 179 | + d3.select('#'+chartId+' svg') |
| 180 | + .datum(_prepareData(data.tracker,dataPrev.tracker,prio,period,dateField)) |
| 181 | + .transition().duration(500) |
| 182 | + .call(charts[chartId]); |
| 183 | + |
| 184 | + |
| 185 | + $("#"+chartId+"_sum").text(data.statistics.sum[prio][dateField]); |
| 186 | + $("#"+chartId+"_sumPrev").text(dataPrev.statistics.sum[prio][dateField]); |
| 187 | + |
| 188 | + |
| 189 | + nv.utils.windowResize(charts[chartId].update); |
| 190 | + }); |
| 191 | + }); |
| 192 | +} |
0 commit comments