You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							1589 lines
						
					
					
						
							113 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							1589 lines
						
					
					
						
							113 KiB
						
					
					
				| /* Chartist.js 0.11.4 | |
|  * Copyright © 2019 Gion Kunz | |
|  * Free to use under either the WTFPL license or the MIT license. | |
|  * https://raw.githubusercontent.com/gionkunz/chartist-js/master/LICENSE-WTFPL | |
|  * https://raw.githubusercontent.com/gionkunz/chartist-js/master/LICENSE-MIT | |
|  */ | |
| 
 | |
| !function(a,b){"function"==typeof define&&define.amd?define("Chartist",[],function(){return a.Chartist=b()}):"object"==typeof module&&module.exports?module.exports=b():a.Chartist=b()}(this,function(){var a={version:"0.11.4"};return function(a,b){"use strict";var c=a.window,d=a.document;b.namespaces={svg:"http://www.w3.org/2000/svg",xmlns:"http://www.w3.org/2000/xmlns/",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",ct:"http://gionkunz.github.com/chartist-js/ct"},b.noop=function(a){return a},b.alphaNumerate=function(a){return String.fromCharCode(97+a%26)},b.extend=function(a){var c,d,e;for(a=a||{},c=1;c<arguments.length;c++){d=arguments[c];for(var f in d)e=d[f],"object"!=typeof e||null===e||e instanceof Array?a[f]=e:a[f]=b.extend(a[f],e)}return a},b.replaceAll=function(a,b,c){return a.replace(new RegExp(b,"g"),c)},b.ensureUnit=function(a,b){return"number"==typeof a&&(a+=b),a},b.quantity=function(a){if("string"==typeof a){var b=/^(\d+)\s*(.*)$/g.exec(a);return{value:+b[1],unit:b[2]||void 0}}return{value:a}},b.querySelector=function(a){return a instanceof Node?a:d.querySelector(a)},b.times=function(a){return Array.apply(null,new Array(a))},b.sum=function(a,b){return a+(b?b:0)},b.mapMultiply=function(a){return function(b){return b*a}},b.mapAdd=function(a){return function(b){return b+a}},b.serialMap=function(a,c){var d=[],e=Math.max.apply(null,a.map(function(a){return a.length}));return b.times(e).forEach(function(b,e){var f=a.map(function(a){return a[e]});d[e]=c.apply(null,f)}),d},b.roundWithPrecision=function(a,c){var d=Math.pow(10,c||b.precision);return Math.round(a*d)/d},b.precision=8,b.escapingMap={"&":"&","<":"<",">":">",'"':""","'":"'"},b.serialize=function(a){return null===a||void 0===a?a:("number"==typeof a?a=""+a:"object"==typeof a&&(a=JSON.stringify({data:a})),Object.keys(b.escapingMap).reduce(function(a,c){return b.replaceAll(a,c,b.escapingMap[c])},a))},b.deserialize=function(a){if("string"!=typeof a)return a;a=Object.keys(b.escapingMap).reduce(function(a,c){return b.replaceAll(a,b.escapingMap[c],c)},a);try{a=JSON.parse(a),a=void 0!==a.data?a.data:a}catch(c){}return a},b.createSvg=function(a,c,d,e){var f;return c=c||"100%",d=d||"100%",Array.prototype.slice.call(a.querySelectorAll("svg")).filter(function(a){return a.getAttributeNS(b.namespaces.xmlns,"ct")}).forEach(function(b){a.removeChild(b)}),f=new b.Svg("svg").attr({width:c,height:d}).addClass(e),f._node.style.width=c,f._node.style.height=d,a.appendChild(f._node),f},b.normalizeData=function(a,c,d){var e,f={raw:a,normalized:{}};return f.normalized.series=b.getDataArray({series:a.series||[]},c,d),e=f.normalized.series.every(function(a){return a instanceof Array})?Math.max.apply(null,f.normalized.series.map(function(a){return a.length})):f.normalized.series.length,f.normalized.labels=(a.labels||[]).slice(),Array.prototype.push.apply(f.normalized.labels,b.times(Math.max(0,e-f.normalized.labels.length)).map(function(){return""})),c&&b.reverseData(f.normalized),f},b.safeHasProperty=function(a,b){return null!==a&&"object"==typeof a&&a.hasOwnProperty(b)},b.isDataHoleValue=function(a){return null===a||void 0===a||"number"==typeof a&&isNaN(a)},b.reverseData=function(a){a.labels.reverse(),a.series.reverse();for(var b=0;b<a.series.length;b++)"object"==typeof a.series[b]&&void 0!==a.series[b].data?a.series[b].data.reverse():a.series[b]instanceof Array&&a.series[b].reverse()},b.getDataArray=function(a,c,d){function e(a){if(b.safeHasProperty(a,"value"))return e(a.value);if(b.safeHasProperty(a,"data"))return e(a.data);if(a instanceof Array)return a.map(e);if(!b.isDataHoleValue(a)){if(d){var c={};return"string"==typeof d?c[d]=b.getNumberOrUndefined(a):c.y=b.getNumberOrUndefined(a),c.x=a.hasOwnProperty("x")?b.getNumberOrUndefined(a.x):c.x,c.y=a.hasOwnProperty("y")?b.getNumberOrUndefined(a.y):c.y,c}return b.getNumberOrUndefined(a)}}return a.series.map(e)},b.normalizePadding=function(a,b){return b=b||0,"number"==typeof a?{top:a,right:a,bottom:a,left:a}:{top:"number"==typeof a.top?a.top:b,right:"number"==typeof a.right?a.right:b,bottom:"number"==typeof a.bottom?a.bottom:b,left:"number"==typeof a.left?a.left:b}},b.getMetaData=function(a,b){var c=a.data?a.data[b]:a[b];return c?c.meta:void 0},b.orderOfMagnitude=function(a){return Math.floor(Math.log(Math.abs(a))/Math.LN10)},b.projectLength=function(a,b,c){return b/c.range*a},b.getAvailableHeight=function(a,c){return Math.max((b.quantity(c.height).value||a.height())-(c.chartPadding.top+c.chartPadding.bottom)-c.axisX.offset,0)},b.getHighLow=function(a,c,d){function e(a){if(void 0!==a)if(a instanceof Array)for(var b=0;b<a.length;b++)e(a[b]);else{var c=d?+a[d]:+a;g&&c>f.high&&(f.high=c),h&&c<f.low&&(f.low=c)}}c=b.extend({},c,d?c["axis"+d.toUpperCase()]:{});var f={high:void 0===c.high?-Number.MAX_VALUE:+c.high,low:void 0===c.low?Number.MAX_VALUE:+c.low},g=void 0===c.high,h=void 0===c.low;return(g||h)&&e(a),(c.referenceValue||0===c.referenceValue)&&(f.high=Math.max(c.referenceValue,f.high),f.low=Math.min(c.referenceValue,f.low)),f.high<=f.low&&(0===f.low?f.high=1:f.low<0?f.high=0:f.high>0?f.low=0:(f.high=1,f.low=0)),f},b.isNumeric=function(a){return null!==a&&isFinite(a)},b.isFalseyButZero=function(a){return!a&&0!==a},b.getNumberOrUndefined=function(a){return b.isNumeric(a)?+a:void 0},b.isMultiValue=function(a){return"object"==typeof a&&("x"in a||"y"in a)},b.getMultiValue=function(a,c){return b.isMultiValue(a)?b.getNumberOrUndefined(a[c||"y"]):b.getNumberOrUndefined(a)},b.rho=function(a){function b(a,c){return a%c===0?c:b(c,a%c)}function c(a){return a*a+1}if(1===a)return a;var d,e=2,f=2;if(a%2===0)return 2;do e=c(e)%a,f=c(c(f))%a,d=b(Math.abs(e-f),a);while(1===d);return d},b.getBounds=function(a,c,d,e){function f(a,b){return a===(a+=b)&&(a*=1+(b>0?o:-o)),a}var g,h,i,j=0,k={high:c.high,low:c.low};k.valueRange=k.high-k.low,k.oom=b.orderOfMagnitude(k.valueRange),k.step=Math.pow(10,k.oom),k.min=Math.floor(k.low/k.step)*k.step,k.max=Math.ceil(k.high/k.step)*k.step,k.range=k.max-k.min,k.numberOfSteps=Math.round(k.range/k.step);var l=b.projectLength(a,k.step,k),m=l<d,n=e?b.rho(k.range):0;if(e&&b.projectLength(a,1,k)>=d)k.step=1;else if(e&&n<k.step&&b.projectLength(a,n,k)>=d)k.step=n;else for(;;){if(m&&b.projectLength(a,k.step,k)<=d)k.step*=2;else{if(m||!(b.projectLength(a,k.step/2,k)>=d))break;if(k.step/=2,e&&k.step%1!==0){k.step*=2;break}}if(j++>1e3)throw new Error("Exceeded maximum number of iterations while optimizing scale step!")}var o=2.221e-16;for(k.step=Math.max(k.step,o),h=k.min,i=k.max;h+k.step<=k.low;)h=f(h,k.step);for(;i-k.step>=k.high;)i=f(i,-k.step);k.min=h,k.max=i,k.range=k.max-k.min;var p=[];for(g=k.min;g<=k.max;g=f(g,k.step)){var q=b.roundWithPrecision(g);q!==p[p.length-1]&&p.push(q)}return k.values=p,k},b.polarToCartesian=function(a,b,c,d){var e=(d-90)*Math.PI/180;return{x:a+c*Math.cos(e),y:b+c*Math.sin(e)}},b.createChartRect=function(a,c,d){var e=!(!c.axisX&&!c.axisY),f=e?c.axisY.offset:0,g=e?c.axisX.offset:0,h=a.width()||b.quantity(c.width).value||0,i=a.height()||b.quantity(c.height).value||0,j=b.normalizePadding(c.chartPadding,d);h=Math.max(h,f+j.left+j.right),i=Math.max(i,g+j.top+j.bottom);var k={padding:j,width:function(){return this.x2-this.x1},height:function(){return this.y1-this.y2}};return e?("start"===c.axisX.position?(k.y2=j.top+g,k.y1=Math.max(i-j.bottom,k.y2+1)):(k.y2=j.top,k.y1=Math.max(i-j.bottom-g,k.y2+1)),"start"===c.axisY.position?(k.x1=j.left+f,k.x2=Math.max(h-j.right,k.x1+1)):(k.x1=j.left,k.x2=Math.max(h-j.right-f,k.x1+1))):(k.x1=j.left,k.x2=Math.max(h-j.right,k.x1+1),k.y2=j.top,k.y1=Math.max(i-j.bottom,k.y2+1)),k},b.createGrid=function(a,c,d,e,f,g,h,i){var j={};j[d.units.pos+"1"]=a,j[d.units.pos+"2"]=a,j[d.counterUnits.pos+"1"]=e,j[d.counterUnits.pos+"2"]=e+f;var k=g.elem("line",j,h.join(" "));i.emit("draw",b.extend({type:"grid",axis:d,index:c,group:g,element:k},j))},b.createGridBackground=function(a,b,c,d){var e=a.elem("rect",{x:b.x1,y:b.y2,width:b.width(),height:b.height()},c,!0);d.emit("draw",{type:"gridBackground",group:a,element:e})},b.createLabel=function(a,c,e,f,g,h,i,j,k,l,m){var n,o={};if(o[g.units.pos]=a+i[g.units.pos],o[g.counterUnits.pos]=i[g.counterUnits.pos],o[g.units.len]=c,o[g.counterUnits.len]=Math.max(0,h-10),l){var p=d.createElement("span");p.className=k.join(" "),p.setAttribute("xmlns",b.namespaces.xhtml),p.innerText=f[e],p.style[g.units.len]=Math.round(o[g.units.len])+"px",p.style[g.counterUnits.len]=Math.round(o[g.counterUnits.len])+"px",n=j.foreignObject(p,b.extend({style:"overflow: visible;"},o))}else n=j.elem("text",o,k.join(" ")).text(f[e]);m.emit("draw",b.extend({type:"label",axis:g,index:e,group:j,element:n,text:f[e]},o))},b.getSeriesOption=function(a,b,c){if(a.name&&b.series&&b.series[a.name]){var d=b.series[a.name];return d.hasOwnProperty(c)?d[c]:b[c]}return b[c]},b.optionsProvider=function(a,d,e){function f(a){var f=h;if(h=b.extend({},j),d)for(i=0;i<d.length;i++){var g=c.matchMedia(d[i][0]);g.matches&&(h=b.extend(h,d[i][1]))}e&&a&&e.emit("optionsChanged",{previousOptions:f,currentOptions:h})}function g(){k.forEach(function(a){a.removeListener(f)})}var h,i,j=b.extend({},a),k=[];if(!c.matchMedia)throw"window.matchMedia not found! Make sure you're using a polyfill.";if(d)for(i=0;i<d.length;i++){var l=c.matchMedia(d[i][0]);l.addListener(f),k.push(l)}return f(),{removeMediaQueryListeners:g,getCurrentOptions:function(){return b.extend({},h)}}},b.splitIntoSegments=function(a,c,d){var e={increasingX:!1,fillHoles:!1};d=b.extend({},e,d);for(var f=[],g=!0,h=0;h<a.length;h+=2)void 0===b.getMultiValue(c[h/2].value)?d.fillHoles||(g=!0):(d.increasingX&&h>=2&&a[h]<=a[h-2]&&(g=!0),g&&(f.push({pathCoordinates:[],valueData:[]}),g=!1),f[f.length-1].pathCoordinates.push(a[h],a[h+1]),f[f.length-1].valueData.push(c[h/2]));return f}}(this||global,a),function(a,b){"use strict";b.Interpolation={},b.Interpolation.none=function(a){var c={fillHoles:!1};return a=b.extend({},c,a),function(c,d){for(var e=new b.Svg.Path,f=!0,g=0;g<c.length;g+=2){var h=c[g],i=c[g+1],j=d[g/2];void 0!==b.getMultiValue(j.value)?(f?e.move(h,i,!1,j):e.line(h,i,!1,j),f=!1):a.fillHoles||(f=!0)}return e}},b.Interpolation.simple=function(a){var c={divisor:2,fillHoles:!1};a=b.extend({},c,a);var d=1/Math.max(1,a.divisor);return function(c,e){for(var f,g,h,i=new b.Svg.Path,j=0;j<c.length;j+=2){var k=c[j],l=c[j+1],m=(k-f)*d,n=e[j/2];void 0!==n.value?(void 0===h?i.move(k,l,!1,n):i.curve(f+m,g,k-m,l,k,l,!1,n),f=k,g=l,h=n):a.fillHoles||(f=k=h=void 0)}return i}},b.Interpolation.cardinal=function(a){var c={tension:1,fillHoles:!1};a=b.extend({},c,a);var d=Math.min(1,Math.max(0,a.tension)),e=1-d;return function f(c,g){var h=b.splitIntoSegments(c,g,{fillHoles:a.fillHoles});if(h.length){if(h.length>1){var i=[];return h.forEach(function(a){i.push(f(a.pathCoordinates,a.valueData))}),b.Svg.Path.join(i)}if(c=h[0].pathCoordinates,g=h[0].valueData,c.length<=4)return b.Interpolation.none()(c,g);for(var j,k=(new b.Svg.Path).move(c[0],c[1],!1,g[0]),l=0,m=c.length;m-2*!j>l;l+=2){var n=[{x:+c[l-2],y:+c[l-1]},{x:+c[l],y:+c[l+1]},{x:+c[l+2],y:+c[l+3]},{x:+c[l+4],y:+c[l+5]}];j?l?m-4===l?n[3]={x:+c[0],y:+c[1]}:m-2===l&&(n[2]={x:+c[0],y:+c[1]},n[3]={x:+c[2],y:+c[3]}):n[0]={x:+c[m-2],y:+c[m-1]}:m-4===l?n[3]=n[2]:l||(n[0]={x:+c[l],y:+c[l+1]}),k.curve(d*(-n[0].x+6*n[1].x+n[2].x)/6+e*n[2].x,d*(-n[0].y+6*n[1].y+n[2].y)/6+e*n[2].y,d*(n[1].x+6*n[2].x-n[3].x)/6+e*n[2].x,d*(n[1].y+6*n[2].y-n[3].y)/6+e*n[2].y,n[2].x,n[2].y,!1,g[(l+2)/2])}return k}return b.Interpolation.none()([])}},b.Interpolation.monotoneCubic=function(a){var c={fillHoles:!1};return a=b.extend({},c,a),function d(c,e){var f=b.splitIntoSegments(c,e,{fillHoles:a.fillHoles,increasingX:!0});if(f.length){if(f.length>1){var g=[];return f.forEach(function(a){g.push(d(a.pathCoordinates,a.valueData))}),b.Svg.Path.join(g)}if(c=f[0].pathCoordinates,e=f[0].valueData,c.length<=4)return b.Interpolation.none()(c,e);var h,i,j=[],k=[],l=c.length/2,m=[],n=[],o=[],p=[];for(h=0;h<l;h++)j[h]=c[2*h],k[h]=c[2*h+1];for(h=0;h<l-1;h++)o[h]=k[h+1]-k[h],p[h]=j[h+1]-j[h],n[h]=o[h]/p[h];for(m[0]=n[0],m[l-1]=n[l-2],h=1;h<l-1;h++)0===n[h]||0===n[h-1]||n[h-1]>0!=n[h]>0?m[h]=0:(m[h]=3*(p[h-1]+p[h])/((2*p[h]+p[h-1])/n[h-1]+(p[h]+2*p[h-1])/n[h]),isFinite(m[h])||(m[h]=0));for(i=(new b.Svg.Path).move(j[0],k[0],!1,e[0]),h=0;h<l-1;h++)i.curve(j[h]+p[h]/3,k[h]+m[h]*p[h]/3,j[h+1]-p[h]/3,k[h+1]-m[h+1]*p[h]/3,j[h+1],k[h+1],!1,e[h+1]);return i}return b.Interpolation.none()([])}},b.Interpolation.step=function(a){var c={postpone:!0,fillHoles:!1};return a=b.extend({},c,a),function(c,d){for(var e,f,g,h=new b.Svg.Path,i=0;i<c.length;i+=2){var j=c[i],k=c[i+1],l=d[i/2];void 0!==l.value?(void 0===g?h.move(j,k,!1,l):(a.postpone?h.line(j,f,!1,g):h.line(e,k,!1,l),h.line(j,k,!1,l)),e=j,f=k,g=l):a.fillHoles||(e=f=g=void 0)}return h}}}(this||global,a),function(a,b){"use strict";b.EventEmitter=function(){function a(a,b){d[a]=d[a]||[],d[a].push(b)}function b(a,b){d[a]&&(b?(d[a].splice(d[a].indexOf(b),1),0===d[a].length&&delete d[a]):delete d[a])}function c(a,b){d[a]&&d[a].forEach(function(a){a(b)}),d["*"]&&d["*"].forEach(function(c){c(a,b)})}var d=[];return{addEventHandler:a,removeEventHandler:b,emit:c}}}(this||global,a),function(a,b){"use strict";function c(a){var b=[];if(a.length)for(var c=0;c<a.length;c++)b.push(a[c]);return b}function d(a,c){var d=c||this.prototype||b.Class,e=Object.create(d);b.Class.cloneDefinitions(e,a);var f=function(){var a,c=e.constructor||function(){};return a=this===b?Object.create(e):this,c.apply(a,Array.prototype.slice.call(arguments,0)),a};return f.prototype=e,f["super"]=d,f.extend=this.extend,f}function e(){var a=c(arguments),b=a[0];return a.splice(1,a.length-1).forEach(function(a){Object.getOwnPropertyNames(a).forEach(function(c){delete b[c],Object.defineProperty(b,c,Object.getOwnPropertyDescriptor(a,c))})}),b}b.Class={extend:d,cloneDefinitions:e}}(this||global,a),function(a,b){"use strict";function c(a,c,d){return a&&(this.data=a||{},this.data.labels=this.data.labels||[],this.data.series=this.data.series||[],this.eventEmitter.emit("data",{type:"update",data:this.data})),c&&(this.options=b.extend({},d?this.options:this.defaultOptions,c),this.initializeTimeoutId||(this.optionsProvider.removeMediaQueryListeners(),this.optionsProvider=b.optionsProvider(this.options,this.responsiveOptions,this.eventEmitter))),this.initializeTimeoutId||this.createChart(this.optionsProvider.getCurrentOptions()),this}function d(){return this.initializeTimeoutId?i.clearTimeout(this.initializeTimeoutId):(i.removeEventListener("resize",this.resizeListener),this.optionsProvider.removeMediaQueryListeners()),this}function e(a,b){return this.eventEmitter.addEventHandler(a,b),this}function f(a,b){return this.eventEmitter.removeEventHandler(a,b),this}function g(){i.addEventListener("resize",this.resizeListener),this.optionsProvider=b.optionsProvider(this.options,this.responsiveOptions,this.eventEmitter),this.eventEmitter.addEventHandler("optionsChanged",function(){this.update()}.bind(this)),this.options.plugins&&this.options.plugins.forEach(function(a){a instanceof Array?a[0](this,a[1]):a(this)}.bind(this)),this.eventEmitter.emit("data",{type:"initial",data:this.data}),this.createChart(this.optionsProvider.getCurrentOptions()),this.initializeTimeoutId=void 0}function h(a,c,d,e,f){this.container=b.querySelector(a),this.data=c||{},this.data.labels=this.data.labels||[],this.data.series=this.data.series||[],this.defaultOptions=d,this.options=e,this.responsiveOptions=f,this.eventEmitter=b.EventEmitter(),this.supportsForeignObject=b.Svg.isSupported("Extensibility"),this.supportsAnimations=b.Svg.isSupported("AnimationEventsAttribute"),this.resizeListener=function(){this.update()}.bind(this),this.container&&(this.container.__chartist__&&this.container.__chartist__.detach(),this.container.__chartist__=this),this.initializeTimeoutId=setTimeout(g.bind(this),0)}var i=a.window;b.Base=b.Class.extend({constructor:h,optionsProvider:void 0,container:void 0,svg:void 0,eventEmitter:void 0,createChart:function(){throw new Error("Base chart type can't be instantiated!")},update:c,detach:d,on:e,off:f,version:b.version,supportsForeignObject:!1})}(this||global,a),function(a,b){"use strict";function c(a,c,d,e,f){a instanceof Element?this._node=a:(this._node=y.createElementNS(b.namespaces.svg,a),"svg"===a&&this.attr({"xmlns:ct":b.namespaces.ct})),c&&this.attr(c),d&&this.addClass(d),e&&(f&&e._node.firstChild?e._node.insertBefore(this._node,e._node.firstChild):e._node.appendChild(this._node))}function d(a,c){return"string"==typeof a?c?this._node.getAttributeNS(c,a):this._node.getAttribute(a):(Object.keys(a).forEach(function(c){if(void 0!==a[c])if(c.indexOf(":")!==-1){var d=c.split(":");this._node.setAttributeNS(b.namespaces[d[0]],c,a[c])}else this._node.setAttribute(c,a[c])}.bind(this)),this)}function e(a,c,d,e){return new b.Svg(a,c,d,this,e)}function f(){return this._node.parentNode instanceof SVGElement?new b.Svg(this._node.parentNode):null}function g(){for(var a=this._node;"svg"!==a.nodeName;)a=a.parentNode;return new b.Svg(a)}function h(a){var c=this._node.querySelector(a);return c?new b.Svg(c):null}function i(a){var c=this._node.querySelectorAll(a);return c.length?new b.Svg.List(c):null}function j(){return this._node}function k(a,c,d,e){if("string"==typeof a){var f=y.createElement("div");f.innerHTML=a,a=f.firstChild}a.setAttribute("xmlns",b.namespaces.xmlns);var g=this.elem("foreignObject",c,d,e);return g._node.appendChild(a),g}function l(a){return this._node.appendChild(y.createTextNode(a)),this}function m(){for(;this._node.firstChild;)this._node.removeChild(this._node.firstChild);return this}function n(){return this._node.parentNode.removeChild(this._node),this.parent()}function o(a){return this._node.parentNode.replaceChild(a._node,this._node),a}function p(a,b){return b&&this._node.firstChild?this._node.insertBefore(a._node,this._node.firstChild):this._node.appendChild(a._node),this}function q(){return this._node.getAttribute("class")?this._node.getAttribute("class").trim().split(/\s+/):[]}function r(a){return this._node.setAttribute("class",this.classes(this._node).concat(a.trim().split(/\s+/)).filter(function(a,b,c){return c.indexOf(a)===b}).join(" ")),this}function s(a){var b=a.trim().split(/\s+/);return this._node.setAttribute("class",this.classes(this._node).filter(function(a){return b.indexOf(a)===-1}).join(" ")),this}function t(){return this._node.setAttribute("class",""),this}function u(){return this._node.getBoundingClientRect().height}function v(){return this._node.getBoundingClientRect().width}function w(a,c,d){return void 0===c&&(c=!0),Object.keys(a).forEach(function(e){function f(a,c){var f,g,h,i={};a.easing&&(h=a.easing instanceof Array?a.easing:b.Svg.Easing[a.easing],delete a.easing),a.begin=b.ensureUnit(a.begin,"ms"),a.dur=b.ensureUnit(a.dur,"ms"),h&&(a.calcMode="spline",a.keySplines=h.join(" "),a.keyTimes="0;1"),c&&(a.fill="freeze",i[e]=a.from,this.attr(i),g=b.quantity(a.begin||0).value,a.begin="indefinite"),f=this.elem("animate",b.extend({attributeName:e},a)),c&&setTimeout(function(){try{f._node.beginElement()}catch(b){i[e]=a.to,this.attr(i),f.remove()}}.bind(this),g),d&&f._node.addEventListener("beginEvent",function(){d.emit("animationBegin",{element:this,animate:f._node,params:a})}.bind(this)),f._node.addEventListener("endEvent",function(){d&&d.emit("animationEnd",{element:this,animate:f._node,params:a}),c&&(i[e]=a.to,this.attr(i),f.remove())}.bind(this))}a[e]instanceof Array?a[e].forEach(function(a){f.bind(this)(a,!1)}.bind(this)):f.bind(this)(a[e],c)}.bind(this)),this}function x(a){var c=this;this.svgElements=[];for(var d=0;d<a.length;d++)this.svgElements.push(new b.Svg(a[d]));Object.keys(b.Svg.prototype).filter(function(a){return["constructor","parent","querySelector","querySelectorAll","replace","append","classes","height","width"].indexOf(a)===-1}).forEach(function(a){c[a]=function(){var d=Array.prototype.slice.call(arguments,0);return c.svgElements.forEach(function(c){b.Svg.prototype[a].apply(c,d)}),c}})}var y=a.document;b.Svg=b.Class.extend({constructor:c,attr:d,elem:e,parent:f,root:g,querySelector:h,querySelectorAll:i,getNode:j,foreignObject:k,text:l,empty:m,remove:n,replace:o,append:p,classes:q,addClass:r,removeClass:s,removeAllClasses:t,height:u,width:v,animate:w}),b.Svg.isSupported=function(a){return y.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#"+a,"1.1")};var z={easeInSine:[.47,0,.745,.715],easeOutSine:[.39,.575,.565,1],easeInOutSine:[.445,.05,.55,.95],easeInQuad:[.55,.085,.68,.53],easeOutQuad:[.25,.46,.45,.94],easeInOutQuad:[.455,.03,.515,.955],easeInCubic:[.55,.055,.675,.19],easeOutCubic:[.215,.61,.355,1],easeInOutCubic:[.645,.045,.355,1],easeInQuart:[.895,.03,.685,.22],easeOutQuart:[.165,.84,.44,1],easeInOutQuart:[.77,0,.175,1],easeInQuint:[.755,.05,.855,.06],easeOutQuint:[.23,1,.32,1],easeInOutQuint:[.86,0,.07,1],easeInExpo:[.95,.05,.795,.035],easeOutExpo:[.19,1,.22,1],easeInOutExpo:[1,0,0,1],easeInCirc:[.6,.04,.98,.335],easeOutCirc:[.075,.82,.165,1],easeInOutCirc:[.785,.135,.15,.86],easeInBack:[.6,-.28,.735,.045],easeOutBack:[.175,.885,.32,1.275],easeInOutBack:[.68,-.55,.265,1.55]};b.Svg.Easing=z,b.Svg.List=b.Class.extend({constructor:x})}(this||global,a),function(a,b){"use strict";function c(a,c,d,e,f,g){var h=b.extend({command:f?a.toLowerCase():a.toUpperCase()},c,g?{data:g}:{});d.splice(e,0,h)}function d(a,b){a.forEach(function(c,d){t[c.command.toLowerCase()].forEach(function(e,f){b(c,e,d,f,a)})})}function e(a,c){this.pathElements=[],this.pos=0,this.close=a,this.options=b.extend({},u,c)}function f(a){return void 0!==a?(this.pos=Math.max(0,Math.min(this.pathElements.length,a)),this):this.pos}function g(a){return this.pathElements.splice(this.pos,a),this}function h(a,b,d,e){return c("M",{x:+a,y:+b},this.pathElements,this.pos++,d,e),this}function i(a,b,d,e){return c("L",{x:+a,y:+b},this.pathElements,this.pos++,d,e),this}function j(a,b,d,e,f,g,h,i){return c("C",{x1:+a,y1:+b,x2:+d,y2:+e,x:+f,y:+g},this.pathElements,this.pos++,h,i),this}function k(a,b,d,e,f,g,h,i,j){return c("A",{rx:+a,ry:+b,xAr:+d,lAf:+e,sf:+f,x:+g,y:+h},this.pathElements,this.pos++,i,j),this}function l(a){var c=a.replace(/([A-Za-z])([0-9])/g,"$1 $2").replace(/([0-9])([A-Za-z])/g,"$1 $2").split(/[\s,]+/).reduce(function(a,b){return b.match(/[A-Za-z]/)&&a.push([]),a[a.length-1].push(b),a},[]);"Z"===c[c.length-1][0].toUpperCase()&&c.pop();var d=c.map(function(a){var c=a.shift(),d=t[c.toLowerCase()];return b.extend({command:c},d.reduce(function(b,c,d){return b[c]=+a[d],b},{}))}),e=[this.pos,0];return Array.prototype.push.apply(e,d),Array.prototype.splice.apply(this.pathElements,e),this.pos+=d.length,this}function m(){var a=Math.pow(10,this.options.accuracy);return this.pathElements.reduce(function(b,c){var d=t[c.command.toLowerCase()].map(function(b){return this.options.accuracy?Math.round(c[b]*a)/a:c[b]}.bind(this));return b+c.command+d.join(",")}.bind(this),"")+(this.close?"Z":"")}function n(a,b){return d(this.pathElements,function(c,d){c[d]*="x"===d[0]?a:b}),this}function o(a,b){return d(this.pathElements,function(c,d){c[d]+="x"===d[0]?a:b}),this}function p(a){return d(this.pathElements,function(b,c,d,e,f){var g=a(b,c,d,e,f);(g||0===g)&&(b[c]=g)}),this}function q(a){var c=new b.Svg.Path(a||this.close);return c.pos=this.pos,c.pathElements=this.pathElements.slice().map(function(a){return b.extend({},a)}),c.options=b.extend({},this.options),c}function r(a){var c=[new b.Svg.Path];return this.pathElements.forEach(function(d){d.command===a.toUpperCase()&&0!==c[c.length-1].pathElements.length&&c.push(new b.Svg.Path),c[c.length-1].pathElements.push(d)}),c}function s(a,c,d){for(var e=new b.Svg.Path(c,d),f=0;f<a.length;f++)for(var g=a[f],h=0;h<g.pathElements.length;h++)e.pathElements.push(g.pathElements[h]);return e}var t={m:["x","y"],l:["x","y"],c:["x1","y1","x2","y2","x","y"],a:["rx","ry","xAr","lAf","sf","x","y"]},u={accuracy:3};b.Svg.Path=b.Class.extend({constructor:e,position:f,remove:g,move:h,line:i,curve:j,arc:k,scale:n,translate:o,transform:p,parse:l,stringify:m,clone:q,splitByCommand:r}),b.Svg.Path.elementDescriptions=t,b.Svg.Path.join=s}(this||global,a),function(a,b){"use strict";function c(a,b,c,d){this.units=a,this.counterUnits=a===e.x?e.y:e.x,this.chartRect=b,this.axisLength=b[a.rectEnd]-b[a.rectStart],this.gridOffset=b[a.rectOffset],this.ticks=c,this.options=d}function d(a,c,d,e,f){var g=e["axis"+this.units.pos.toUpperCase()],h=this.ticks.map(this.projectValue.bind(this)),i=this.ticks.map(g.labelInterpolationFnc);h.forEach(function(j,k){var l,m={x:0,y:0};l=h[k+1]?h[k+1]-j:Math.max(this.axisLength-j,30),b.isFalseyButZero(i[k])&&""!==i[k]||("x"===this.units.pos?(j=this.chartRect.x1+j,m.x=e.axisX.labelOffset.x,"start"===e.axisX.position?m.y=this.chartRect.padding.top+e.axisX.labelOffset.y+(d?5:20):m.y=this.chartRect.y1+e.axisX.labelOffset.y+(d?5:20)):(j=this.chartRect.y1-j,m.y=e.axisY.labelOffset.y-(d?l:0),"start"===e.axisY.position?m.x=d?this.chartRect.padding.left+e.axisY.labelOffset.x:this.chartRect.x1-10:m.x=this.chartRect.x2+e.axisY.labelOffset.x+10),g.showGrid&&b.createGrid(j,k,this,this.gridOffset,this.chartRect[this.counterUnits.len](),a,[e.classNames.grid,e.classNames[this.units.dir]],f),g.showLabel&&b.createLabel(j,l,k,i,this,g.offset,m,c,[e.classNames.label,e.classNames[this.units.dir],"start"===g.position?e.classNames[g.position]:e.classNames.end],d,f))}.bind(this))}var e=(a.window,a.document,{x:{pos:"x",len:"width",dir:"horizontal",rectStart:"x1",rectEnd:"x2",rectOffset:"y2"},y:{pos:"y",len:"height",dir:"vertical",rectStart:"y2",rectEnd:"y1",rectOffset:"x1"}});b.Axis=b.Class.extend({constructor:c,createGridAndLabels:d,projectValue:function(a,b,c){throw new Error("Base axis can't be instantiated!")}}),b.Axis.units=e}(this||global,a),function(a,b){"use strict";function c(a,c,d,e){var f=e.highLow||b.getHighLow(c,e,a.pos);this.bounds=b.getBounds(d[a.rectEnd]-d[a.rectStart],f,e.scaleMinSpace||20,e.onlyInteger),this.range={min:this.bounds.min,max:this.bounds.max},b.AutoScaleAxis["super"].constructor.call(this,a,d,this.bounds.values,e)}function d(a){return this.axisLength*(+b.getMultiValue(a,this.units.pos)-this.bounds.min)/this.bounds.range}a.window,a.document;b.AutoScaleAxis=b.Axis.extend({constructor:c,projectValue:d})}(this||global,a),function(a,b){"use strict";function c(a,c,d,e){var f=e.highLow||b.getHighLow(c,e,a.pos);this.divisor=e.divisor||1,this.ticks=e.ticks||b.times(this.divisor).map(function(a,b){return f.low+(f.high-f.low)/this.divisor*b}.bind(this)),this.ticks.sort(function(a,b){return a-b}),this.range={min:f.low,max:f.high},b.FixedScaleAxis["super"].constructor.call(this,a,d,this.ticks,e),this.stepLength=this.axisLength/this.divisor}function d(a){return this.axisLength*(+b.getMultiValue(a,this.units.pos)-this.range.min)/(this.range.max-this.range.min)}a.window,a.document;b.FixedScaleAxis=b.Axis.extend({constructor:c,projectValue:d})}(this||global,a),function(a,b){"use strict";function c(a,c,d,e){b.StepAxis["super"].constructor.call(this,a,d,e.ticks,e);var f=Math.max(1,e.ticks.length-(e.stretch?1:0));this.stepLength=this.axisLength/f}function d(a,b){return this.stepLength*b}a.window,a.document;b.StepAxis=b.Axis.extend({constructor:c,projectValue:d})}(this||global,a),function(a,b){"use strict";function c(a){var c=b.normalizeData(this.data,a.reverseData,!0);this.svg=b.createSvg(this.container,a.width,a.height,a.classNames.chart);var d,f,g=this.svg.elem("g").addClass(a.classNames.gridGroup),h=this.svg.elem("g"),i=this.svg.elem("g").addClass(a.classNames.labelGroup),j=b.createChartRect(this.svg,a,e.padding);d=void 0===a.axisX.type?new b.StepAxis(b.Axis.units.x,c.normalized.series,j,b.extend({},a.axisX,{ticks:c.normalized.labels,stretch:a.fullWidth})):a.axisX.type.call(b,b.Axis.units.x,c.normalized.series,j,a.axisX),f=void 0===a.axisY.type?new b.AutoScaleAxis(b.Axis.units.y,c.normalized.series,j,b.extend({},a.axisY,{high:b.isNumeric(a.high)?a.high:a.axisY.high,low:b.isNumeric(a.low)?a.low:a.axisY.low})):a.axisY.type.call(b,b.Axis.units.y,c.normalized.series,j,a.axisY),d.createGridAndLabels(g,i,this.supportsForeignObject,a,this.eventEmitter),f.createGridAndLabels(g,i,this.supportsForeignObject,a,this.eventEmitter),a.showGridBackground&&b.createGridBackground(g,j,a.classNames.gridBackground,this.eventEmitter),c.raw.series.forEach(function(e,g){var i=h.elem("g");i.attr({"ct:series-name":e.name,"ct:meta":b.serialize(e.meta)}),i.addClass([a.classNames.series,e.className||a.classNames.series+"-"+b.alphaNumerate(g)].join(" "));var k=[],l=[];c.normalized.series[g].forEach(function(a,h){var i={x:j.x1+d.projectValue(a,h,c.normalized.series[g]),y:j.y1-f.projectValue(a,h,c.normalized.series[g])};k.push(i.x,i.y),l.push({value:a,valueIndex:h,meta:b.getMetaData(e,h)})}.bind(this));var m={lineSmooth:b.getSeriesOption(e,a,"lineSmooth"),showPoint:b.getSeriesOption(e,a,"showPoint"),showLine:b.getSeriesOption(e,a,"showLine"),showArea:b.getSeriesOption(e,a,"showArea"),areaBase:b.getSeriesOption(e,a,"areaBase")},n="function"==typeof m.lineSmooth?m.lineSmooth:m.lineSmooth?b.Interpolation.monotoneCubic():b.Interpolation.none(),o=n(k,l);if(m.showPoint&&o.pathElements.forEach(function(c){var h=i.elem("line",{x1:c.x,y1:c.y,x2:c.x+.01,y2:c.y},a.classNames.point).attr({"ct:value":[c.data.value.x,c.data.value.y].filter(b.isNumeric).join(","),"ct:meta":b.serialize(c.data.meta)});this.eventEmitter.emit("draw",{type:"point",value:c.data.value,index:c.data.valueIndex,meta:c.data.meta,series:e,seriesIndex:g,axisX:d,axisY:f,group:i,element:h,x:c.x,y:c.y})}.bind(this)),m.showLine){var p=i.elem("path",{d:o.stringify()},a.classNames.line,!0);this.eventEmitter.emit("draw",{type:"line",values:c.normalized.series[g],path:o.clone(),chartRect:j,index:g,series:e,seriesIndex:g,seriesMeta:e.meta,axisX:d,axisY:f,group:i,element:p})}if(m.showArea&&f.range){var q=Math.max(Math.min(m.areaBase,f.range.max),f.range.min),r=j.y1-f.projectValue(q);o.splitByCommand("M").filter(function(a){return a.pathElements.length>1}).map(function(a){var b=a.pathElements[0],c=a.pathElements[a.pathElements.length-1];return a.clone(!0).position(0).remove(1).move(b.x,r).line(b.x,b.y).position(a.pathElements.length+1).line(c.x,r)}).forEach(function(b){var h=i.elem("path",{d:b.stringify()},a.classNames.area,!0);this.eventEmitter.emit("draw",{type:"area",values:c.normalized.series[g],path:b.clone(),series:e,seriesIndex:g,axisX:d,axisY:f,chartRect:j,index:g,group:i,element:h})}.bind(this))}}.bind(this)),this.eventEmitter.emit("created",{bounds:f.bounds,chartRect:j,axisX:d,axisY:f,svg:this.svg,options:a})}function d(a,c,d,f){b.Line["super"].constructor.call(this,a,c,e,b.extend({},e,d),f)}var e=(a.window,a.document,{axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:b.noop,type:void 0},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:b.noop,type:void 0,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,showLine:!0,showPoint:!0,showArea:!1,areaBase:0,lineSmooth:!0,showGridBackground:!1,low:void 0,high:void 0,chartPadding:{top:15,right:15,bottom:5,left:10},fullWidth:!1,reverseData:!1,classNames:{chart:"ct-chart-line",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",line:"ct-line",point:"ct-point",area:"ct-area",grid:"ct-grid",gridGroup:"ct-grids",gridBackground:"ct-grid-background",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}});b.Line=b.Base.extend({constructor:d,createChart:c})}(this||global,a),function(a,b){"use strict";function c(a){var c,d;a.distributeSeries?(c=b.normalizeData(this.data,a.reverseData,a.horizontalBars?"x":"y"),c.normalized.series=c.normalized.series.map(function(a){return[a]})):c=b.normalizeData(this.data,a.reverseData,a.horizontalBars?"x":"y"),this.svg=b.createSvg(this.container,a.width,a.height,a.classNames.chart+(a.horizontalBars?" "+a.classNames.horizontalBars:""));var f=this.svg.elem("g").addClass(a.classNames.gridGroup),g=this.svg.elem("g"),h=this.svg.elem("g").addClass(a.classNames.labelGroup); | |
| if(a.stackBars&&0!==c.normalized.series.length){var i=b.serialMap(c.normalized.series,function(){return Array.prototype.slice.call(arguments).map(function(a){return a}).reduce(function(a,b){return{x:a.x+(b&&b.x)||0,y:a.y+(b&&b.y)||0}},{x:0,y:0})});d=b.getHighLow([i],a,a.horizontalBars?"x":"y")}else d=b.getHighLow(c.normalized.series,a,a.horizontalBars?"x":"y");d.high=+a.high||(0===a.high?0:d.high),d.low=+a.low||(0===a.low?0:d.low);var j,k,l,m,n,o=b.createChartRect(this.svg,a,e.padding);k=a.distributeSeries&&a.stackBars?c.normalized.labels.slice(0,1):c.normalized.labels,a.horizontalBars?(j=m=void 0===a.axisX.type?new b.AutoScaleAxis(b.Axis.units.x,c.normalized.series,o,b.extend({},a.axisX,{highLow:d,referenceValue:0})):a.axisX.type.call(b,b.Axis.units.x,c.normalized.series,o,b.extend({},a.axisX,{highLow:d,referenceValue:0})),l=n=void 0===a.axisY.type?new b.StepAxis(b.Axis.units.y,c.normalized.series,o,{ticks:k}):a.axisY.type.call(b,b.Axis.units.y,c.normalized.series,o,a.axisY)):(l=m=void 0===a.axisX.type?new b.StepAxis(b.Axis.units.x,c.normalized.series,o,{ticks:k}):a.axisX.type.call(b,b.Axis.units.x,c.normalized.series,o,a.axisX),j=n=void 0===a.axisY.type?new b.AutoScaleAxis(b.Axis.units.y,c.normalized.series,o,b.extend({},a.axisY,{highLow:d,referenceValue:0})):a.axisY.type.call(b,b.Axis.units.y,c.normalized.series,o,b.extend({},a.axisY,{highLow:d,referenceValue:0})));var p=a.horizontalBars?o.x1+j.projectValue(0):o.y1-j.projectValue(0),q=[];l.createGridAndLabels(f,h,this.supportsForeignObject,a,this.eventEmitter),j.createGridAndLabels(f,h,this.supportsForeignObject,a,this.eventEmitter),a.showGridBackground&&b.createGridBackground(f,o,a.classNames.gridBackground,this.eventEmitter),c.raw.series.forEach(function(d,e){var f,h,i=e-(c.raw.series.length-1)/2;f=a.distributeSeries&&!a.stackBars?l.axisLength/c.normalized.series.length/2:a.distributeSeries&&a.stackBars?l.axisLength/2:l.axisLength/c.normalized.series[e].length/2,h=g.elem("g"),h.attr({"ct:series-name":d.name,"ct:meta":b.serialize(d.meta)}),h.addClass([a.classNames.series,d.className||a.classNames.series+"-"+b.alphaNumerate(e)].join(" ")),c.normalized.series[e].forEach(function(g,k){var r,s,t,u;if(u=a.distributeSeries&&!a.stackBars?e:a.distributeSeries&&a.stackBars?0:k,r=a.horizontalBars?{x:o.x1+j.projectValue(g&&g.x?g.x:0,k,c.normalized.series[e]),y:o.y1-l.projectValue(g&&g.y?g.y:0,u,c.normalized.series[e])}:{x:o.x1+l.projectValue(g&&g.x?g.x:0,u,c.normalized.series[e]),y:o.y1-j.projectValue(g&&g.y?g.y:0,k,c.normalized.series[e])},l instanceof b.StepAxis&&(l.options.stretch||(r[l.units.pos]+=f*(a.horizontalBars?-1:1)),r[l.units.pos]+=a.stackBars||a.distributeSeries?0:i*a.seriesBarDistance*(a.horizontalBars?-1:1)),t=q[k]||p,q[k]=t-(p-r[l.counterUnits.pos]),void 0!==g){var v={};v[l.units.pos+"1"]=r[l.units.pos],v[l.units.pos+"2"]=r[l.units.pos],!a.stackBars||"accumulate"!==a.stackMode&&a.stackMode?(v[l.counterUnits.pos+"1"]=p,v[l.counterUnits.pos+"2"]=r[l.counterUnits.pos]):(v[l.counterUnits.pos+"1"]=t,v[l.counterUnits.pos+"2"]=q[k]),v.x1=Math.min(Math.max(v.x1,o.x1),o.x2),v.x2=Math.min(Math.max(v.x2,o.x1),o.x2),v.y1=Math.min(Math.max(v.y1,o.y2),o.y1),v.y2=Math.min(Math.max(v.y2,o.y2),o.y1);var w=b.getMetaData(d,k);s=h.elem("line",v,a.classNames.bar).attr({"ct:value":[g.x,g.y].filter(b.isNumeric).join(","),"ct:meta":b.serialize(w)}),this.eventEmitter.emit("draw",b.extend({type:"bar",value:g,index:k,meta:w,series:d,seriesIndex:e,axisX:m,axisY:n,chartRect:o,group:h,element:s},v))}}.bind(this))}.bind(this)),this.eventEmitter.emit("created",{bounds:j.bounds,chartRect:o,axisX:m,axisY:n,svg:this.svg,options:a})}function d(a,c,d,f){b.Bar["super"].constructor.call(this,a,c,e,b.extend({},e,d),f)}var e=(a.window,a.document,{axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:b.noop,scaleMinSpace:30,onlyInteger:!1},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:b.noop,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,high:void 0,low:void 0,referenceValue:0,chartPadding:{top:15,right:15,bottom:5,left:10},seriesBarDistance:15,stackBars:!1,stackMode:"accumulate",horizontalBars:!1,distributeSeries:!1,reverseData:!1,showGridBackground:!1,classNames:{chart:"ct-chart-bar",horizontalBars:"ct-horizontal-bars",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",bar:"ct-bar",grid:"ct-grid",gridGroup:"ct-grids",gridBackground:"ct-grid-background",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}});b.Bar=b.Base.extend({constructor:d,createChart:c})}(this||global,a),function(a,b){"use strict";function c(a,b,c){var d=b.x>a.x;return d&&"explode"===c||!d&&"implode"===c?"start":d&&"implode"===c||!d&&"explode"===c?"end":"middle"}function d(a){var d,e,g,h,i,j=b.normalizeData(this.data),k=[],l=a.startAngle;this.svg=b.createSvg(this.container,a.width,a.height,a.donut?a.classNames.chartDonut:a.classNames.chartPie),e=b.createChartRect(this.svg,a,f.padding),g=Math.min(e.width()/2,e.height()/2),i=a.total||j.normalized.series.reduce(function(a,b){return a+b},0);var m=b.quantity(a.donutWidth);"%"===m.unit&&(m.value*=g/100),g-=a.donut&&!a.donutSolid?m.value/2:0,h="outside"===a.labelPosition||a.donut&&!a.donutSolid?g:"center"===a.labelPosition?0:a.donutSolid?g-m.value/2:g/2,h+=a.labelOffset;var n={x:e.x1+e.width()/2,y:e.y2+e.height()/2},o=1===j.raw.series.filter(function(a){return a.hasOwnProperty("value")?0!==a.value:0!==a}).length;j.raw.series.forEach(function(a,b){k[b]=this.svg.elem("g",null,null)}.bind(this)),a.showLabel&&(d=this.svg.elem("g",null,null)),j.raw.series.forEach(function(e,f){if(0!==j.normalized.series[f]||!a.ignoreEmptyValues){k[f].attr({"ct:series-name":e.name}),k[f].addClass([a.classNames.series,e.className||a.classNames.series+"-"+b.alphaNumerate(f)].join(" "));var p=i>0?l+j.normalized.series[f]/i*360:0,q=Math.max(0,l-(0===f||o?0:.2));p-q>=359.99&&(p=q+359.99);var r,s,t,u=b.polarToCartesian(n.x,n.y,g,q),v=b.polarToCartesian(n.x,n.y,g,p),w=new b.Svg.Path(!a.donut||a.donutSolid).move(v.x,v.y).arc(g,g,0,p-l>180,0,u.x,u.y);a.donut?a.donutSolid&&(t=g-m.value,r=b.polarToCartesian(n.x,n.y,t,l-(0===f||o?0:.2)),s=b.polarToCartesian(n.x,n.y,t,p),w.line(r.x,r.y),w.arc(t,t,0,p-l>180,1,s.x,s.y)):w.line(n.x,n.y);var x=a.classNames.slicePie;a.donut&&(x=a.classNames.sliceDonut,a.donutSolid&&(x=a.classNames.sliceDonutSolid));var y=k[f].elem("path",{d:w.stringify()},x);if(y.attr({"ct:value":j.normalized.series[f],"ct:meta":b.serialize(e.meta)}),a.donut&&!a.donutSolid&&(y._node.style.strokeWidth=m.value+"px"),this.eventEmitter.emit("draw",{type:"slice",value:j.normalized.series[f],totalDataSum:i,index:f,meta:e.meta,series:e,group:k[f],element:y,path:w.clone(),center:n,radius:g,startAngle:l,endAngle:p}),a.showLabel){var z;z=1===j.raw.series.length?{x:n.x,y:n.y}:b.polarToCartesian(n.x,n.y,h,l+(p-l)/2);var A;A=j.normalized.labels&&!b.isFalseyButZero(j.normalized.labels[f])?j.normalized.labels[f]:j.normalized.series[f];var B=a.labelInterpolationFnc(A,f);if(B||0===B){var C=d.elem("text",{dx:z.x,dy:z.y,"text-anchor":c(n,z,a.labelDirection)},a.classNames.label).text(""+B);this.eventEmitter.emit("draw",{type:"label",index:f,group:d,element:C,text:""+B,x:z.x,y:z.y})}}l=p}}.bind(this)),this.eventEmitter.emit("created",{chartRect:e,svg:this.svg,options:a})}function e(a,c,d,e){b.Pie["super"].constructor.call(this,a,c,f,b.extend({},f,d),e)}var f=(a.window,a.document,{width:void 0,height:void 0,chartPadding:5,classNames:{chartPie:"ct-chart-pie",chartDonut:"ct-chart-donut",series:"ct-series",slicePie:"ct-slice-pie",sliceDonut:"ct-slice-donut",sliceDonutSolid:"ct-slice-donut-solid",label:"ct-label"},startAngle:0,total:void 0,donut:!1,donutSolid:!1,donutWidth:60,showLabel:!0,labelOffset:0,labelPosition:"inside",labelInterpolationFnc:b.noop,labelDirection:"neutral",reverseData:!1,ignoreEmptyValues:!1});b.Pie=b.Base.extend({constructor:e,createChart:d,determineAnchorPosition:c})}(this||global,a),a}); | |
| //# sourceMappingURL=chartist.min.js.map | |
|  | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| ! function(a, b) { | |
|     "function" == typeof define && define.amd ? define("Chartist", [], function() { | |
|         return a.Chartist = b() | |
|     }) : "object" == typeof module && module.exports ? module.exports = b() : a.Chartist = b() | |
| }(this, function() { | |
|     var a = { | |
|         version: "0.11.4" | |
|     }; | |
|     return function(a, b) { | |
|             "use strict"; | |
|             var c = a.window, | |
|                 d = a.document; | |
|             b.namespaces = { | |
|                 svg: "http://www.w3.org/2000/svg", | |
|                 xmlns: "http://www.w3.org/2000/xmlns/", | |
|                 xhtml: "http://www.w3.org/1999/xhtml", | |
|                 xlink: "http://www.w3.org/1999/xlink", | |
|                 ct: "http://gionkunz.github.com/chartist-js/ct" | |
|             }, b.noop = function(a) { | |
|                 return a | |
|             }, b.alphaNumerate = function(a) { | |
|                 return String.fromCharCode(97 + a % 26) | |
|             }, b.extend = function(a) { | |
|                 var c, d, e; | |
|                 for (a = a || {}, c = 1; c < arguments.length; c++) { | |
|                     d = arguments[c]; | |
|                     for (var f in d) e = d[f], "object" != typeof e || null === e || e instanceof Array ? a[f] = e : a[f] = b.extend(a[f], e) | |
|                 } | |
|                 return a | |
|             }, b.replaceAll = function(a, b, c) { | |
|                 return a.replace(new RegExp(b, "g"), c) | |
|             }, b.ensureUnit = function(a, b) { | |
|                 return "number" == typeof a && (a += b), a | |
|             }, b.quantity = function(a) { | |
|                 if ("string" == typeof a) { | |
|                     var b = /^(\d+)\s*(.*)$/g.exec(a); | |
|                     return { | |
|                         value: +b[1], | |
|                         unit: b[2] || void 0 | |
|                     } | |
|                 } | |
|                 return { | |
|                     value: a | |
|                 } | |
|             }, b.querySelector = function(a) { | |
|                 return a instanceof Node ? a : d.querySelector(a) | |
|             }, b.times = function(a) { | |
|                 return Array.apply(null, new Array(a)) | |
|             }, b.sum = function(a, b) { | |
|                 return a + (b ? b : 0) | |
|             }, b.mapMultiply = function(a) { | |
|                 return function(b) { | |
|                     return b * a | |
|                 } | |
|             }, b.mapAdd = function(a) { | |
|                 return function(b) { | |
|                     return b + a | |
|                 } | |
|             }, b.serialMap = function(a, c) { | |
|                 var d = [], | |
|                     e = Math.max.apply(null, a.map(function(a) { | |
|                         return a.length | |
|                     })); | |
|                 return b.times(e).forEach(function(b, e) { | |
|                     var f = a.map(function(a) { | |
|                         return a[e] | |
|                     }); | |
|                     d[e] = c.apply(null, f) | |
|                 }), d | |
|             }, b.roundWithPrecision = function(a, c) { | |
|                 var d = Math.pow(10, c || b.precision); | |
|                 return Math.round(a * d) / d | |
|             }, b.precision = 8, b.escapingMap = { | |
|                 "&": "&", | |
|                 "<": "<", | |
|                 ">": ">", | |
|                 '"': """, | |
|                 "'": "'" | |
|             }, b.serialize = function(a) { | |
|                 return null === a || void 0 === a ? a : ("number" == typeof a ? a = "" + a : "object" == typeof a && (a = JSON.stringify({ | |
|                     data: a | |
|                 })), Object.keys(b.escapingMap).reduce(function(a, c) { | |
|                     return b.replaceAll(a, c, b.escapingMap[c]) | |
|                 }, a)) | |
|             }, b.deserialize = function(a) { | |
|                 if ("string" != typeof a) return a; | |
|                 a = Object.keys(b.escapingMap).reduce(function(a, c) { | |
|                     return b.replaceAll(a, b.escapingMap[c], c) | |
|                 }, a); | |
|                 try { | |
|                     a = JSON.parse(a), a = void 0 !== a.data ? a.data : a | |
|                 } catch (c) {} | |
|                 return a | |
|             }, b.createSvg = function(a, c, d, e) { | |
|                 var f; | |
|                 return c = c || "100%", d = d || "100%", Array.prototype.slice.call(a.querySelectorAll("svg")).filter(function(a) { | |
|                     return a.getAttributeNS(b.namespaces.xmlns, "ct") | |
|                 }).forEach(function(b) { | |
|                     a.removeChild(b) | |
|                 }), f = new b.Svg("svg").attr({ | |
|                     width: c, | |
|                     height: d | |
|                 }).addClass(e), f._node.style.width = c, f._node.style.height = d, a.appendChild(f._node), f | |
|             }, b.normalizeData = function(a, c, d) { | |
|                 var e, f = { | |
|                     raw: a, | |
|                     normalized: {} | |
|                 }; | |
|                 return f.normalized.series = b.getDataArray({ | |
|                     series: a.series || [] | |
|                 }, c, d), e = f.normalized.series.every(function(a) { | |
|                     return a instanceof Array | |
|                 }) ? Math.max.apply(null, f.normalized.series.map(function(a) { | |
|                     return a.length | |
|                 })) : f.normalized.series.length, f.normalized.labels = (a.labels || []).slice(), Array.prototype.push.apply(f.normalized.labels, b.times(Math.max(0, e - f.normalized.labels.length)).map(function() { | |
|                     return "" | |
|                 })), c && b.reverseData(f.normalized), f | |
|             }, b.safeHasProperty = function(a, b) { | |
|                 return null !== a && "object" == typeof a && a.hasOwnProperty(b) | |
|             }, b.isDataHoleValue = function(a) { | |
|                 return null === a || void 0 === a || "number" == typeof a && isNaN(a) | |
|             }, b.reverseData = function(a) { | |
|                 a.labels.reverse(), a.series.reverse(); | |
|                 for (var b = 0; b < a.series.length; b++) "object" == typeof a.series[b] && void 0 !== a.series[b].data ? a.series[b].data.reverse() : a.series[b] instanceof Array && a.series[b].reverse() | |
|             }, b.getDataArray = function(a, c, d) { | |
|                 function e(a) { | |
|                     if (b.safeHasProperty(a, "value")) return e(a.value); | |
|                     if (b.safeHasProperty(a, "data")) return e(a.data); | |
|                     if (a instanceof Array) return a.map(e); | |
|                     if (!b.isDataHoleValue(a)) { | |
|                         if (d) { | |
|                             var c = {}; | |
|                             return "string" == typeof d ? c[d] = b.getNumberOrUndefined(a) : c.y = b.getNumberOrUndefined(a), c.x = a.hasOwnProperty("x") ? b.getNumberOrUndefined(a.x) : c.x, c.y = a.hasOwnProperty("y") ? b.getNumberOrUndefined(a.y) : c.y, c | |
|                         } | |
|                         return b.getNumberOrUndefined(a) | |
|                     } | |
|                 } | |
|                 return a.series.map(e) | |
|             }, b.normalizePadding = function(a, b) { | |
|                 return b = b || 0, "number" == typeof a ? { | |
|                     top: a, | |
|                     right: a, | |
|                     bottom: a, | |
|                     left: a | |
|                 } : { | |
|                     top: "number" == typeof a.top ? a.top : b, | |
|                     right: "number" == typeof a.right ? a.right : b, | |
|                     bottom: "number" == typeof a.bottom ? a.bottom : b, | |
|                     left: "number" == typeof a.left ? a.left : b | |
|                 } | |
|             }, b.getMetaData = function(a, b) { | |
|                 var c = a.data ? a.data[b] : a[b]; | |
|                 return c ? c.meta : void 0 | |
|             }, b.orderOfMagnitude = function(a) { | |
|                 return Math.floor(Math.log(Math.abs(a)) / Math.LN10) | |
|             }, b.projectLength = function(a, b, c) { | |
|                 return b / c.range * a | |
|             }, b.getAvailableHeight = function(a, c) { | |
|                 return Math.max((b.quantity(c.height).value || a.height()) - (c.chartPadding.top + c.chartPadding.bottom) - c.axisX.offset, 0) | |
|             }, b.getHighLow = function(a, c, d) { | |
|                 function e(a) { | |
|                     if (void 0 !== a) | |
|                         if (a instanceof Array) | |
|                             for (var b = 0; b < a.length; b++) e(a[b]); | |
|                         else { | |
|                             var c = d ? +a[d] : +a; | |
|                             g && c > f.high && (f.high = c), h && c < f.low && (f.low = c) | |
|                         } | |
|                 } | |
|                 c = b.extend({}, c, d ? c["axis" + d.toUpperCase()] : {}); | |
|                 var f = { | |
|                         high: void 0 === c.high ? -Number.MAX_VALUE : +c.high, | |
|                         low: void 0 === c.low ? Number.MAX_VALUE : +c.low | |
|                     }, | |
|                     g = void 0 === c.high, | |
|                     h = void 0 === c.low; | |
|                 return (g || h) && e(a), (c.referenceValue || 0 === c.referenceValue) && (f.high = Math.max(c.referenceValue, f.high), f.low = Math.min(c.referenceValue, f.low)), f.high <= f.low && (0 === f.low ? f.high = 1 : f.low < 0 ? f.high = 0 : f.high > 0 ? f.low = 0 : (f.high = 1, f.low = 0)), f | |
|             }, b.isNumeric = function(a) { | |
|                 return null !== a && isFinite(a) | |
|             }, b.isFalseyButZero = function(a) { | |
|                 return !a && 0 !== a | |
|             }, b.getNumberOrUndefined = function(a) { | |
|                 return b.isNumeric(a) ? +a : void 0 | |
|             }, b.isMultiValue = function(a) { | |
|                 return "object" == typeof a && ("x" in a || "y" in a) | |
|             }, b.getMultiValue = function(a, c) { | |
|                 return b.isMultiValue(a) ? b.getNumberOrUndefined(a[c || "y"]) : b.getNumberOrUndefined(a) | |
|             }, b.rho = function(a) { | |
|                 function b(a, c) { | |
|                     return a % c === 0 ? c : b(c, a % c) | |
|                 } | |
| 
 | |
|                 function c(a) { | |
|                     return a * a + 1 | |
|                 } | |
|                 if (1 === a) return a; | |
|                 var d, e = 2, | |
|                     f = 2; | |
|                 if (a % 2 === 0) return 2; | |
|                 do e = c(e) % a, f = c(c(f)) % a, d = b(Math.abs(e - f), a); while (1 === d); | |
|                 return d | |
|             }, b.getBounds = function(a, c, d, e) { | |
|                 function f(a, b) { | |
|                     return a === (a += b) && (a *= 1 + (b > 0 ? o : -o)), a | |
|                 } | |
|                 var g, h, i, j = 0, | |
|                     k = { | |
|                         high: c.high, | |
|                         low: c.low | |
|                     }; | |
|                 k.valueRange = k.high - k.low, k.oom = b.orderOfMagnitude(k.valueRange), k.step = Math.pow(10, k.oom), k.min = Math.floor(k.low / k.step) * k.step, k.max = Math.ceil(k.high / k.step) * k.step, k.range = k.max - k.min, k.numberOfSteps = Math.round(k.range / k.step); | |
|                 var l = b.projectLength(a, k.step, k), | |
|                     m = l < d, | |
|                     n = e ? b.rho(k.range) : 0; | |
|                 if (e && b.projectLength(a, 1, k) >= d) k.step = 1; | |
|                 else if (e && n < k.step && b.projectLength(a, n, k) >= d) k.step = n; | |
|                 else | |
|                     for (;;) { | |
|                         if (m && b.projectLength(a, k.step, k) <= d) k.step *= 2; | |
|                         else { | |
|                             if (m || !(b.projectLength(a, k.step / 2, k) >= d)) break; | |
|                             if (k.step /= 2, e && k.step % 1 !== 0) { | |
|                                 k.step *= 2; | |
|                                 break | |
|                             } | |
|                         } | |
|                         if (j++ > 1e3) throw new Error("Exceeded maximum number of iterations while optimizing scale step!") | |
|                     } | |
|                 var o = 2.221e-16; | |
|                 for (k.step = Math.max(k.step, o), h = k.min, i = k.max; h + k.step <= k.low;) h = f(h, k.step); | |
|                 for (; i - k.step >= k.high;) i = f(i, -k.step); | |
|                 k.min = h, k.max = i, k.range = k.max - k.min; | |
|                 var p = []; | |
|                 for (g = k.min; g <= k.max; g = f(g, k.step)) { | |
|                     var q = b.roundWithPrecision(g); | |
|                     q !== p[p.length - 1] && p.push(q) | |
|                 } | |
|                 return k.values = p, k | |
|             }, b.polarToCartesian = function(a, b, c, d) { | |
|                 var e = (d - 90) * Math.PI / 180; | |
|                 return { | |
|                     x: a + c * Math.cos(e), | |
|                     y: b + c * Math.sin(e) | |
|                 } | |
|             }, b.createChartRect = function(a, c, d) { | |
|                 var e = !(!c.axisX && !c.axisY), | |
|                     f = e ? c.axisY.offset : 0, | |
|                     g = e ? c.axisX.offset : 0, | |
|                     h = a.width() || b.quantity(c.width).value || 0, | |
|                     i = a.height() || b.quantity(c.height).value || 0, | |
|                     j = b.normalizePadding(c.chartPadding, d); | |
|                 h = Math.max(h, f + j.left + j.right), i = Math.max(i, g + j.top + j.bottom); | |
|                 var k = { | |
|                     padding: j, | |
|                     width: function() { | |
|                         return this.x2 - this.x1 | |
|                     }, | |
|                     height: function() { | |
|                         return this.y1 - this.y2 | |
|                     } | |
|                 }; | |
|                 return e ? ("start" === c.axisX.position ? (k.y2 = j.top + g, k.y1 = Math.max(i - j.bottom, k.y2 + 1)) : (k.y2 = j.top, k.y1 = Math.max(i - j.bottom - g, k.y2 + 1)), "start" === c.axisY.position ? (k.x1 = j.left + f, k.x2 = Math.max(h - j.right, k.x1 + 1)) : (k.x1 = j.left, k.x2 = Math.max(h - j.right - f, k.x1 + 1))) : (k.x1 = j.left, k.x2 = Math.max(h - j.right, k.x1 + 1), k.y2 = j.top, k.y1 = Math.max(i - j.bottom, k.y2 + 1)), k | |
|             }, b.createGrid = function(a, c, d, e, f, g, h, i) { | |
|                 var j = {}; | |
|                 j[d.units.pos + "1"] = a, j[d.units.pos + "2"] = a, j[d.counterUnits.pos + "1"] = e, j[d.counterUnits.pos + "2"] = e + f; | |
|                 var k = g.elem("line", j, h.join(" ")); | |
|                 i.emit("draw", b.extend({ | |
|                     type: "grid", | |
|                     axis: d, | |
|                     index: c, | |
|                     group: g, | |
|                     element: k | |
|                 }, j)) | |
|             }, b.createGridBackground = function(a, b, c, d) { | |
|                 var e = a.elem("rect", { | |
|                     x: b.x1, | |
|                     y: b.y2, | |
|                     width: b.width(), | |
|                     height: b.height() | |
|                 }, c, !0); | |
|                 d.emit("draw", { | |
|                     type: "gridBackground", | |
|                     group: a, | |
|                     element: e | |
|                 }) | |
|             }, b.createLabel = function(a, c, e, f, g, h, i, j, k, l, m) { | |
|                 var n, o = {}; | |
|                 if (o[g.units.pos] = a + i[g.units.pos], o[g.counterUnits.pos] = i[g.counterUnits.pos], o[g.units.len] = c, o[g.counterUnits.len] = Math.max(0, h - 10), l) { | |
|                     var p = d.createElement("span"); | |
|                     p.className = k.join(" "), p.setAttribute("xmlns", b.namespaces.xhtml), p.innerText = f[e], p.style[g.units.len] = Math.round(o[g.units.len]) + "px", p.style[g.counterUnits.len] = Math.round(o[g.counterUnits.len]) + "px", n = j.foreignObject(p, b.extend({ | |
|                         style: "overflow: visible;" | |
|                     }, o)) | |
|                 } else n = j.elem("text", o, k.join(" ")).text(f[e]); | |
|                 m.emit("draw", b.extend({ | |
|                     type: "label", | |
|                     axis: g, | |
|                     index: e, | |
|                     group: j, | |
|                     element: n, | |
|                     text: f[e] | |
|                 }, o)) | |
|             }, b.getSeriesOption = function(a, b, c) { | |
|                 if (a.name && b.series && b.series[a.name]) { | |
|                     var d = b.series[a.name]; | |
|                     return d.hasOwnProperty(c) ? d[c] : b[c] | |
|                 } | |
|                 return b[c] | |
|             }, b.optionsProvider = function(a, d, e) { | |
|                 function f(a) { | |
|                     var f = h; | |
|                     if (h = b.extend({}, j), d) | |
|                         for (i = 0; i < d.length; i++) { | |
|                             var g = c.matchMedia(d[i][0]); | |
|                             g.matches && (h = b.extend(h, d[i][1])) | |
|                         } | |
|                     e && a && e.emit("optionsChanged", { | |
|                         previousOptions: f, | |
|                         currentOptions: h | |
|                     }) | |
|                 } | |
| 
 | |
|                 function g() { | |
|                     k.forEach(function(a) { | |
|                         a.removeListener(f) | |
|                     }) | |
|                 } | |
|                 var h, i, j = b.extend({}, a), | |
|                     k = []; | |
|                 if (!c.matchMedia) throw "window.matchMedia not found! Make sure you're using a polyfill."; | |
|                 if (d) | |
|                     for (i = 0; i < d.length; i++) { | |
|                         var l = c.matchMedia(d[i][0]); | |
|                         l.addListener(f), k.push(l) | |
|                     } | |
|                 return f(), { | |
|                     removeMediaQueryListeners: g, | |
|                     getCurrentOptions: function() { | |
|                         return b.extend({}, h) | |
|                     } | |
|                 } | |
|             }, b.splitIntoSegments = function(a, c, d) { | |
|                 var e = { | |
|                     increasingX: !1, | |
|                     fillHoles: !1 | |
|                 }; | |
|                 d = b.extend({}, e, d); | |
|                 for (var f = [], g = !0, h = 0; h < a.length; h += 2) void 0 === b.getMultiValue(c[h / 2].value) ? d.fillHoles || (g = !0) : (d.increasingX && h >= 2 && a[h] <= a[h - 2] && (g = !0), g && (f.push({ | |
|                     pathCoordinates: [], | |
|                     valueData: [] | |
|                 }), g = !1), f[f.length - 1].pathCoordinates.push(a[h], a[h + 1]), f[f.length - 1].valueData.push(c[h / 2])); | |
|                 return f | |
|             } | |
|         }(this || global, a), | |
|         function(a, b) { | |
|             "use strict"; | |
|             b.Interpolation = {}, b.Interpolation.none = function(a) { | |
|                 var c = { | |
|                     fillHoles: !1 | |
|                 }; | |
|                 return a = b.extend({}, c, a), | |
|                     function(c, d) { | |
|                         for (var e = new b.Svg.Path, f = !0, g = 0; g < c.length; g += 2) { | |
|                             var h = c[g], | |
|                                 i = c[g + 1], | |
|                                 j = d[g / 2]; | |
|                             void 0 !== b.getMultiValue(j.value) ? (f ? e.move(h, i, !1, j) : e.line(h, i, !1, j), f = !1) : a.fillHoles || (f = !0) | |
|                         } | |
|                         return e | |
|                     } | |
|             }, b.Interpolation.simple = function(a) { | |
|                 var c = { | |
|                     divisor: 2, | |
|                     fillHoles: !1 | |
|                 }; | |
|                 a = b.extend({}, c, a); | |
|                 var d = 1 / Math.max(1, a.divisor); | |
|                 return function(c, e) { | |
|                     for (var f, g, h, i = new b.Svg.Path, j = 0; j < c.length; j += 2) { | |
|                         var k = c[j], | |
|                             l = c[j + 1], | |
|                             m = (k - f) * d, | |
|                             n = e[j / 2]; | |
|                         void 0 !== n.value ? (void 0 === h ? i.move(k, l, !1, n) : i.curve(f + m, g, k - m, l, k, l, !1, n), f = k, g = l, h = n) : a.fillHoles || (f = k = h = void 0) | |
|                     } | |
|                     return i | |
|                 } | |
|             }, b.Interpolation.cardinal = function(a) { | |
|                 var c = { | |
|                     tension: 1, | |
|                     fillHoles: !1 | |
|                 }; | |
|                 a = b.extend({}, c, a); | |
|                 var d = Math.min(1, Math.max(0, a.tension)), | |
|                     e = 1 - d; | |
|                 return function f(c, g) { | |
|                     var h = b.splitIntoSegments(c, g, { | |
|                         fillHoles: a.fillHoles | |
|                     }); | |
|                     if (h.length) { | |
|                         if (h.length > 1) { | |
|                             var i = []; | |
|                             return h.forEach(function(a) { | |
|                                 i.push(f(a.pathCoordinates, a.valueData)) | |
|                             }), b.Svg.Path.join(i) | |
|                         } | |
|                         if (c = h[0].pathCoordinates, g = h[0].valueData, c.length <= 4) return b.Interpolation.none()(c, g); | |
|                         for (var j, k = (new b.Svg.Path).move(c[0], c[1], !1, g[0]), l = 0, m = c.length; m - 2 * !j > l; l += 2) { | |
|                             var n = [{ | |
|                                 x: +c[l - 2], | |
|                                 y: +c[l - 1] | |
|                             }, { | |
|                                 x: +c[l], | |
|                                 y: +c[l + 1] | |
|                             }, { | |
|                                 x: +c[l + 2], | |
|                                 y: +c[l + 3] | |
|                             }, { | |
|                                 x: +c[l + 4], | |
|                                 y: +c[l + 5] | |
|                             }]; | |
|                             j ? l ? m - 4 === l ? n[3] = { | |
|                                 x: +c[0], | |
|                                 y: +c[1] | |
|                             } : m - 2 === l && (n[2] = { | |
|                                 x: +c[0], | |
|                                 y: +c[1] | |
|                             }, n[3] = { | |
|                                 x: +c[2], | |
|                                 y: +c[3] | |
|                             }) : n[0] = { | |
|                                 x: +c[m - 2], | |
|                                 y: +c[m - 1] | |
|                             } : m - 4 === l ? n[3] = n[2] : l || (n[0] = { | |
|                                 x: +c[l], | |
|                                 y: +c[l + 1] | |
|                             }), k.curve(d * (-n[0].x + 6 * n[1].x + n[2].x) / 6 + e * n[2].x, d * (-n[0].y + 6 * n[1].y + n[2].y) / 6 + e * n[2].y, d * (n[1].x + 6 * n[2].x - n[3].x) / 6 + e * n[2].x, d * (n[1].y + 6 * n[2].y - n[3].y) / 6 + e * n[2].y, n[2].x, n[2].y, !1, g[(l + 2) / 2]) | |
|                         } | |
|                         return k | |
|                     } | |
|                     return b.Interpolation.none()([]) | |
|                 } | |
|             }, b.Interpolation.monotoneCubic = function(a) { | |
|                 var c = { | |
|                     fillHoles: !1 | |
|                 }; | |
|                 return a = b.extend({}, c, a), | |
|                     function d(c, e) { | |
|                         var f = b.splitIntoSegments(c, e, { | |
|                             fillHoles: a.fillHoles, | |
|                             increasingX: !0 | |
|                         }); | |
|                         if (f.length) { | |
|                             if (f.length > 1) { | |
|                                 var g = []; | |
|                                 return f.forEach(function(a) { | |
|                                     g.push(d(a.pathCoordinates, a.valueData)) | |
|                                 }), b.Svg.Path.join(g) | |
|                             } | |
|                             if (c = f[0].pathCoordinates, e = f[0].valueData, c.length <= 4) return b.Interpolation.none()(c, e); | |
|                             var h, i, j = [], | |
|                                 k = [], | |
|                                 l = c.length / 2, | |
|                                 m = [], | |
|                                 n = [], | |
|                                 o = [], | |
|                                 p = []; | |
|                             for (h = 0; h < l; h++) j[h] = c[2 * h], k[h] = c[2 * h + 1]; | |
|                             for (h = 0; h < l - 1; h++) o[h] = k[h + 1] - k[h], p[h] = j[h + 1] - j[h], n[h] = o[h] / p[h]; | |
|                             for (m[0] = n[0], m[l - 1] = n[l - 2], h = 1; h < l - 1; h++) 0 === n[h] || 0 === n[h - 1] || n[h - 1] > 0 != n[h] > 0 ? m[h] = 0 : (m[h] = 3 * (p[h - 1] + p[h]) / ((2 * p[h] + p[h - 1]) / n[h - 1] + (p[h] + 2 * p[h - 1]) / n[h]), isFinite(m[h]) || (m[h] = 0)); | |
|                             for (i = (new b.Svg.Path).move(j[0], k[0], !1, e[0]), h = 0; h < l - 1; h++) i.curve(j[h] + p[h] / 3, k[h] + m[h] * p[h] / 3, j[h + 1] - p[h] / 3, k[h + 1] - m[h + 1] * p[h] / 3, j[h + 1], k[h + 1], !1, e[h + 1]); | |
|                             return i | |
|                         } | |
|                         return b.Interpolation.none()([]) | |
|                     } | |
|             }, b.Interpolation.step = function(a) { | |
|                 var c = { | |
|                     postpone: !0, | |
|                     fillHoles: !1 | |
|                 }; | |
|                 return a = b.extend({}, c, a), | |
|                     function(c, d) { | |
|                         for (var e, f, g, h = new b.Svg.Path, i = 0; i < c.length; i += 2) { | |
|                             var j = c[i], | |
|                                 k = c[i + 1], | |
|                                 l = d[i / 2]; | |
|                             void 0 !== l.value ? (void 0 === g ? h.move(j, k, !1, l) : (a.postpone ? h.line(j, f, !1, g) : h.line(e, k, !1, l), h.line(j, k, !1, l)), e = j, f = k, g = l) : a.fillHoles || (e = f = g = void 0) | |
|                         } | |
|                         return h | |
|                     } | |
|             } | |
|         }(this || global, a), | |
|         function(a, b) { | |
|             "use strict"; | |
|             b.EventEmitter = function() { | |
|                 function a(a, b) { | |
|                     d[a] = d[a] || [], d[a].push(b) | |
|                 } | |
| 
 | |
|                 function b(a, b) { | |
|                     d[a] && (b ? (d[a].splice(d[a].indexOf(b), 1), 0 === d[a].length && delete d[a]) : delete d[a]) | |
|                 } | |
| 
 | |
|                 function c(a, b) { | |
|                     d[a] && d[a].forEach(function(a) { | |
|                         a(b) | |
|                     }), d["*"] && d["*"].forEach(function(c) { | |
|                         c(a, b) | |
|                     }) | |
|                 } | |
|                 var d = []; | |
|                 return { | |
|                     addEventHandler: a, | |
|                     removeEventHandler: b, | |
|                     emit: c | |
|                 } | |
|             } | |
|         }(this || global, a), | |
|         function(a, b) { | |
|             "use strict"; | |
| 
 | |
|             function c(a) { | |
|                 var b = []; | |
|                 if (a.length) | |
|                     for (var c = 0; c < a.length; c++) b.push(a[c]); | |
|                 return b | |
|             } | |
| 
 | |
|             function d(a, c) { | |
|                 var d = c || this.prototype || b.Class, | |
|                     e = Object.create(d); | |
|                 b.Class.cloneDefinitions(e, a); | |
|                 var f = function() { | |
|                     var a, c = e.constructor || function() {}; | |
|                     return a = this === b ? Object.create(e) : this, c.apply(a, Array.prototype.slice.call(arguments, 0)), a | |
|                 }; | |
|                 return f.prototype = e, f["super"] = d, f.extend = this.extend, f | |
|             } | |
| 
 | |
|             function e() { | |
|                 var a = c(arguments), | |
|                     b = a[0]; | |
|                 return a.splice(1, a.length - 1).forEach(function(a) { | |
|                     Object.getOwnPropertyNames(a).forEach(function(c) { | |
|                         delete b[c], Object.defineProperty(b, c, Object.getOwnPropertyDescriptor(a, c)) | |
|                     }) | |
|                 }), b | |
|             } | |
|             b.Class = { | |
|                 extend: d, | |
|                 cloneDefinitions: e | |
|             } | |
|         }(this || global, a), | |
|         function(a, b) { | |
|             "use strict"; | |
| 
 | |
|             function c(a, c, d) { | |
|                 return a && (this.data = a || {}, this.data.labels = this.data.labels || [], this.data.series = this.data.series || [], this.eventEmitter.emit("data", { | |
|                     type: "update", | |
|                     data: this.data | |
|                 })), c && (this.options = b.extend({}, d ? this.options : this.defaultOptions, c), this.initializeTimeoutId || (this.optionsProvider.removeMediaQueryListeners(), this.optionsProvider = b.optionsProvider(this.options, this.responsiveOptions, this.eventEmitter))), this.initializeTimeoutId || this.createChart(this.optionsProvider.getCurrentOptions()), this | |
|             } | |
| 
 | |
|             function d() { | |
|                 return this.initializeTimeoutId ? i.clearTimeout(this.initializeTimeoutId) : (i.removeEventListener("resize", this.resizeListener), this.optionsProvider.removeMediaQueryListeners()), this | |
|             } | |
| 
 | |
|             function e(a, b) { | |
|                 return this.eventEmitter.addEventHandler(a, b), this | |
|             } | |
| 
 | |
|             function f(a, b) { | |
|                 return this.eventEmitter.removeEventHandler(a, b), this | |
|             } | |
| 
 | |
|             function g() { | |
|                 i.addEventListener("resize", this.resizeListener), this.optionsProvider = b.optionsProvider(this.options, this.responsiveOptions, this.eventEmitter), this.eventEmitter.addEventHandler("optionsChanged", function() { | |
|                     this.update() | |
|                 }.bind(this)), this.options.plugins && this.options.plugins.forEach(function(a) { | |
|                     a instanceof Array ? a[0](this, a[1]) : a(this) | |
|                 }.bind(this)), this.eventEmitter.emit("data", { | |
|                     type: "initial", | |
|                     data: this.data | |
|                 }), this.createChart(this.optionsProvider.getCurrentOptions()), this.initializeTimeoutId = void 0 | |
|             } | |
| 
 | |
|             function h(a, c, d, e, f) { | |
|                 this.container = b.querySelector(a), this.data = c || {}, this.data.labels = this.data.labels || [], this.data.series = this.data.series || [], this.defaultOptions = d, this.options = e, this.responsiveOptions = f, this.eventEmitter = b.EventEmitter(), this.supportsForeignObject = b.Svg.isSupported("Extensibility"), this.supportsAnimations = b.Svg.isSupported("AnimationEventsAttribute"), this.resizeListener = function() { | |
|                     this.update() | |
|                 }.bind(this), this.container && (this.container.__chartist__ && this.container.__chartist__.detach(), this.container.__chartist__ = this), this.initializeTimeoutId = setTimeout(g.bind(this), 0) | |
|             } | |
|             var i = a.window; | |
|             b.Base = b.Class.extend({ | |
|                 constructor: h, | |
|                 optionsProvider: void 0, | |
|                 container: void 0, | |
|                 svg: void 0, | |
|                 eventEmitter: void 0, | |
|                 createChart: function() { | |
|                     throw new Error("Base chart type can't be instantiated!") | |
|                 }, | |
|                 update: c, | |
|                 detach: d, | |
|                 on: e, | |
|                 off: f, | |
|                 version: b.version, | |
|                 supportsForeignObject: !1 | |
|             }) | |
|         }(this || global, a), | |
|         function(a, b) { | |
|             "use strict"; | |
| 
 | |
|             function c(a, c, d, e, f) { | |
|                 a instanceof Element ? this._node = a : (this._node = y.createElementNS(b.namespaces.svg, a), "svg" === a && this.attr({ | |
|                     "xmlns:ct": b.namespaces.ct | |
|                 })), c && this.attr(c), d && this.addClass(d), e && (f && e._node.firstChild ? e._node.insertBefore(this._node, e._node.firstChild) : e._node.appendChild(this._node)) | |
|             } | |
| 
 | |
|             function d(a, c) { | |
|                 return "string" == typeof a ? c ? this._node.getAttributeNS(c, a) : this._node.getAttribute(a) : (Object.keys(a).forEach(function(c) { | |
|                     if (void 0 !== a[c]) | |
|                         if (c.indexOf(":") !== -1) { | |
|                             var d = c.split(":"); | |
|                             this._node.setAttributeNS(b.namespaces[d[0]], c, a[c]) | |
|                         } else this._node.setAttribute(c, a[c]) | |
|                 }.bind(this)), this) | |
|             } | |
| 
 | |
|             function e(a, c, d, e) { | |
|                 return new b.Svg(a, c, d, this, e) | |
|             } | |
| 
 | |
|             function f() { | |
|                 return this._node.parentNode instanceof SVGElement ? new b.Svg(this._node.parentNode) : null | |
|             } | |
| 
 | |
|             function g() { | |
|                 for (var a = this._node; | |
|                     "svg" !== a.nodeName;) a = a.parentNode; | |
|                 return new b.Svg(a) | |
|             } | |
| 
 | |
|             function h(a) { | |
|                 var c = this._node.querySelector(a); | |
|                 return c ? new b.Svg(c) : null | |
|             } | |
| 
 | |
|             function i(a) { | |
|                 var c = this._node.querySelectorAll(a); | |
|                 return c.length ? new b.Svg.List(c) : null | |
|             } | |
| 
 | |
|             function j() { | |
|                 return this._node | |
|             } | |
| 
 | |
|             function k(a, c, d, e) { | |
|                 if ("string" == typeof a) { | |
|                     var f = y.createElement("div"); | |
|                     f.innerHTML = a, a = f.firstChild | |
|                 } | |
|                 a.setAttribute("xmlns", b.namespaces.xmlns); | |
|                 var g = this.elem("foreignObject", c, d, e); | |
|                 return g._node.appendChild(a), g | |
|             } | |
| 
 | |
|             function l(a) { | |
|                 return this._node.appendChild(y.createTextNode(a)), this | |
|             } | |
| 
 | |
|             function m() { | |
|                 for (; this._node.firstChild;) this._node.removeChild(this._node.firstChild); | |
|                 return this | |
|             } | |
| 
 | |
|             function n() { | |
|                 return this._node.parentNode.removeChild(this._node), this.parent() | |
|             } | |
| 
 | |
|             function o(a) { | |
|                 return this._node.parentNode.replaceChild(a._node, this._node), a | |
|             } | |
| 
 | |
|             function p(a, b) { | |
|                 return b && this._node.firstChild ? this._node.insertBefore(a._node, this._node.firstChild) : this._node.appendChild(a._node), this | |
|             } | |
| 
 | |
|             function q() { | |
|                 return this._node.getAttribute("class") ? this._node.getAttribute("class").trim().split(/\s+/) : [] | |
|             } | |
| 
 | |
|             function r(a) { | |
|                 return this._node.setAttribute("class", this.classes(this._node).concat(a.trim().split(/\s+/)).filter(function(a, b, c) { | |
|                     return c.indexOf(a) === b | |
|                 }).join(" ")), this | |
|             } | |
| 
 | |
|             function s(a) { | |
|                 var b = a.trim().split(/\s+/); | |
|                 return this._node.setAttribute("class", this.classes(this._node).filter(function(a) { | |
|                     return b.indexOf(a) === -1 | |
|                 }).join(" ")), this | |
|             } | |
| 
 | |
|             function t() { | |
|                 return this._node.setAttribute("class", ""), this | |
|             } | |
| 
 | |
|             function u() { | |
|                 return this._node.getBoundingClientRect().height | |
|             } | |
| 
 | |
|             function v() { | |
|                 return this._node.getBoundingClientRect().width | |
|             } | |
| 
 | |
|             function w(a, c, d) { | |
|                 return void 0 === c && (c = !0), Object.keys(a).forEach(function(e) { | |
|                     function f(a, c) { | |
|                         var f, g, h, i = {}; | |
|                         a.easing && (h = a.easing instanceof Array ? a.easing : b.Svg.Easing[a.easing], delete a.easing), a.begin = b.ensureUnit(a.begin, "ms"), a.dur = b.ensureUnit(a.dur, "ms"), h && (a.calcMode = "spline", a.keySplines = h.join(" "), a.keyTimes = "0;1"), c && (a.fill = "freeze", i[e] = a.from, this.attr(i), g = b.quantity(a.begin || 0).value, a.begin = "indefinite"), f = this.elem("animate", b.extend({ | |
|                             attributeName: e | |
|                         }, a)), c && setTimeout(function() { | |
|                             try { | |
|                                 f._node.beginElement() | |
|                             } catch (b) { | |
|                                 i[e] = a.to, this.attr(i), f.remove() | |
|                             } | |
|                         }.bind(this), g), d && f._node.addEventListener("beginEvent", function() { | |
|                             d.emit("animationBegin", { | |
|                                 element: this, | |
|                                 animate: f._node, | |
|                                 params: a | |
|                             }) | |
|                         }.bind(this)), f._node.addEventListener("endEvent", function() { | |
|                             d && d.emit("animationEnd", { | |
|                                 element: this, | |
|                                 animate: f._node, | |
|                                 params: a | |
|                             }), c && (i[e] = a.to, this.attr(i), f.remove()) | |
|                         }.bind(this)) | |
|                     } | |
|                     a[e] instanceof Array ? a[e].forEach(function(a) { | |
|                         f.bind(this)(a, !1) | |
|                     }.bind(this)) : f.bind(this)(a[e], c) | |
|                 }.bind(this)), this | |
|             } | |
| 
 | |
|             function x(a) { | |
|                 var c = this; | |
|                 this.svgElements = []; | |
|                 for (var d = 0; d < a.length; d++) this.svgElements.push(new b.Svg(a[d])); | |
|                 Object.keys(b.Svg.prototype).filter(function(a) { | |
|                     return ["constructor", "parent", "querySelector", "querySelectorAll", "replace", "append", "classes", "height", "width"].indexOf(a) === -1 | |
|                 }).forEach(function(a) { | |
|                     c[a] = function() { | |
|                         var d = Array.prototype.slice.call(arguments, 0); | |
|                         return c.svgElements.forEach(function(c) { | |
|                             b.Svg.prototype[a].apply(c, d) | |
|                         }), c | |
|                     } | |
|                 }) | |
|             } | |
|             var y = a.document; | |
|             b.Svg = b.Class.extend({ | |
|                 constructor: c, | |
|                 attr: d, | |
|                 elem: e, | |
|                 parent: f, | |
|                 root: g, | |
|                 querySelector: h, | |
|                 querySelectorAll: i, | |
|                 getNode: j, | |
|                 foreignObject: k, | |
|                 text: l, | |
|                 empty: m, | |
|                 remove: n, | |
|                 replace: o, | |
|                 append: p, | |
|                 classes: q, | |
|                 addClass: r, | |
|                 removeClass: s, | |
|                 removeAllClasses: t, | |
|                 height: u, | |
|                 width: v, | |
|                 animate: w | |
|             }), b.Svg.isSupported = function(a) { | |
|                 return y.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#" + a, "1.1") | |
|             }; | |
|             var z = { | |
|                 easeInSine: [.47, 0, .745, .715], | |
|                 easeOutSine: [.39, .575, .565, 1], | |
|                 easeInOutSine: [.445, .05, .55, .95], | |
|                 easeInQuad: [.55, .085, .68, .53], | |
|                 easeOutQuad: [.25, .46, .45, .94], | |
|                 easeInOutQuad: [.455, .03, .515, .955], | |
|                 easeInCubic: [.55, .055, .675, .19], | |
|                 easeOutCubic: [.215, .61, .355, 1], | |
|                 easeInOutCubic: [.645, .045, .355, 1], | |
|                 easeInQuart: [.895, .03, .685, .22], | |
|                 easeOutQuart: [.165, .84, .44, 1], | |
|                 easeInOutQuart: [.77, 0, .175, 1], | |
|                 easeInQuint: [.755, .05, .855, .06], | |
|                 easeOutQuint: [.23, 1, .32, 1], | |
|                 easeInOutQuint: [.86, 0, .07, 1], | |
|                 easeInExpo: [.95, .05, .795, .035], | |
|                 easeOutExpo: [.19, 1, .22, 1], | |
|                 easeInOutExpo: [1, 0, 0, 1], | |
|                 easeInCirc: [.6, .04, .98, .335], | |
|                 easeOutCirc: [.075, .82, .165, 1], | |
|                 easeInOutCirc: [.785, .135, .15, .86], | |
|                 easeInBack: [.6, -.28, .735, .045], | |
|                 easeOutBack: [.175, .885, .32, 1.275], | |
|                 easeInOutBack: [.68, -.55, .265, 1.55] | |
|             }; | |
|             b.Svg.Easing = z, b.Svg.List = b.Class.extend({ | |
|                 constructor: x | |
|             }) | |
|         }(this || global, a), | |
|         function(a, b) { | |
|             "use strict"; | |
| 
 | |
|             function c(a, c, d, e, f, g) { | |
|                 var h = b.extend({ | |
|                     command: f ? a.toLowerCase() : a.toUpperCase() | |
|                 }, c, g ? { | |
|                     data: g | |
|                 } : {}); | |
|                 d.splice(e, 0, h) | |
|             } | |
| 
 | |
|             function d(a, b) { | |
|                 a.forEach(function(c, d) { | |
|                     t[c.command.toLowerCase()].forEach(function(e, f) { | |
|                         b(c, e, d, f, a) | |
|                     }) | |
|                 }) | |
|             } | |
| 
 | |
|             function e(a, c) { | |
|                 this.pathElements = [], this.pos = 0, this.close = a, this.options = b.extend({}, u, c) | |
|             } | |
| 
 | |
|             function f(a) { | |
|                 return void 0 !== a ? (this.pos = Math.max(0, Math.min(this.pathElements.length, a)), this) : this.pos | |
|             } | |
| 
 | |
|             function g(a) { | |
|                 return this.pathElements.splice(this.pos, a), this | |
|             } | |
| 
 | |
|             function h(a, b, d, e) { | |
|                 return c("M", { | |
|                     x: +a, | |
|                     y: +b | |
|                 }, this.pathElements, this.pos++, d, e), this | |
|             } | |
| 
 | |
|             function i(a, b, d, e) { | |
|                 return c("L", { | |
|                     x: +a, | |
|                     y: +b | |
|                 }, this.pathElements, this.pos++, d, e), this | |
|             } | |
| 
 | |
|             function j(a, b, d, e, f, g, h, i) { | |
|                 return c("C", { | |
|                     x1: +a, | |
|                     y1: +b, | |
|                     x2: +d, | |
|                     y2: +e, | |
|                     x: +f, | |
|                     y: +g | |
|                 }, this.pathElements, this.pos++, h, i), this | |
|             } | |
| 
 | |
|             function k(a, b, d, e, f, g, h, i, j) { | |
|                 return c("A", { | |
|                     rx: +a, | |
|                     ry: +b, | |
|                     xAr: +d, | |
|                     lAf: +e, | |
|                     sf: +f, | |
|                     x: +g, | |
|                     y: +h | |
|                 }, this.pathElements, this.pos++, i, j), this | |
|             } | |
| 
 | |
|             function l(a) { | |
|                 var c = a.replace(/([A-Za-z])([0-9])/g, "$1 $2").replace(/([0-9])([A-Za-z])/g, "$1 $2").split(/[\s,]+/).reduce(function(a, b) { | |
|                     return b.match(/[A-Za-z]/) && a.push([]), a[a.length - 1].push(b), a | |
|                 }, []); | |
|                 "Z" === c[c.length - 1][0].toUpperCase() && c.pop(); | |
|                 var d = c.map(function(a) { | |
|                         var c = a.shift(), | |
|                             d = t[c.toLowerCase()]; | |
|                         return b.extend({ | |
|                             command: c | |
|                         }, d.reduce(function(b, c, d) { | |
|                             return b[c] = +a[d], b | |
|                         }, {})) | |
|                     }), | |
|                     e = [this.pos, 0]; | |
|                 return Array.prototype.push.apply(e, d), Array.prototype.splice.apply(this.pathElements, e), this.pos += d.length, this | |
|             } | |
| 
 | |
|             function m() { | |
|                 var a = Math.pow(10, this.options.accuracy); | |
|                 return this.pathElements.reduce(function(b, c) { | |
|                     var d = t[c.command.toLowerCase()].map(function(b) { | |
|                         return this.options.accuracy ? Math.round(c[b] * a) / a : c[b] | |
|                     }.bind(this)); | |
|                     return b + c.command + d.join(",") | |
|                 }.bind(this), "") + (this.close ? "Z" : "") | |
|             } | |
| 
 | |
|             function n(a, b) { | |
|                 return d(this.pathElements, function(c, d) { | |
|                     c[d] *= "x" === d[0] ? a : b | |
|                 }), this | |
|             } | |
| 
 | |
|             function o(a, b) { | |
|                 return d(this.pathElements, function(c, d) { | |
|                     c[d] += "x" === d[0] ? a : b | |
|                 }), this | |
|             } | |
| 
 | |
|             function p(a) { | |
|                 return d(this.pathElements, function(b, c, d, e, f) { | |
|                     var g = a(b, c, d, e, f); | |
|                     (g || 0 === g) && (b[c] = g) | |
|                 }), this | |
|             } | |
| 
 | |
|             function q(a) { | |
|                 var c = new b.Svg.Path(a || this.close); | |
|                 return c.pos = this.pos, c.pathElements = this.pathElements.slice().map(function(a) { | |
|                     return b.extend({}, a) | |
|                 }), c.options = b.extend({}, this.options), c | |
|             } | |
| 
 | |
|             function r(a) { | |
|                 var c = [new b.Svg.Path]; | |
|                 return this.pathElements.forEach(function(d) { | |
|                     d.command === a.toUpperCase() && 0 !== c[c.length - 1].pathElements.length && c.push(new b.Svg.Path), c[c.length - 1].pathElements.push(d) | |
|                 }), c | |
|             } | |
| 
 | |
|             function s(a, c, d) { | |
|                 for (var e = new b.Svg.Path(c, d), f = 0; f < a.length; f++) | |
|                     for (var g = a[f], h = 0; h < g.pathElements.length; h++) e.pathElements.push(g.pathElements[h]); | |
|                 return e | |
|             } | |
|             var t = { | |
|                     m: ["x", "y"], | |
|                     l: ["x", "y"], | |
|                     c: ["x1", "y1", "x2", "y2", "x", "y"], | |
|                     a: ["rx", "ry", "xAr", "lAf", "sf", "x", "y"] | |
|                 }, | |
|                 u = { | |
|                     accuracy: 3 | |
|                 }; | |
|             b.Svg.Path = b.Class.extend({ | |
|                 constructor: e, | |
|                 position: f, | |
|                 remove: g, | |
|                 move: h, | |
|                 line: i, | |
|                 curve: j, | |
|                 arc: k, | |
|                 scale: n, | |
|                 translate: o, | |
|                 transform: p, | |
|                 parse: l, | |
|                 stringify: m, | |
|                 clone: q, | |
|                 splitByCommand: r | |
|             }), b.Svg.Path.elementDescriptions = t, b.Svg.Path.join = s | |
|         }(this || global, a), | |
|         function(a, b) { | |
|             "use strict"; | |
| 
 | |
|             function c(a, b, c, d) { | |
|                 this.units = a, this.counterUnits = a === e.x ? e.y : e.x, this.chartRect = b, this.axisLength = b[a.rectEnd] - b[a.rectStart], this.gridOffset = b[a.rectOffset], this.ticks = c, this.options = d | |
|             } | |
| 
 | |
|             function d(a, c, d, e, f) { | |
|                 var g = e["axis" + this.units.pos.toUpperCase()], | |
|                     h = this.ticks.map(this.projectValue.bind(this)), | |
|                     i = this.ticks.map(g.labelInterpolationFnc); | |
|                 h.forEach(function(j, k) { | |
|                     var l, m = { | |
|                         x: 0, | |
|                         y: 0 | |
|                     }; | |
|                     l = h[k + 1] ? h[k + 1] - j : Math.max(this.axisLength - j, 30), b.isFalseyButZero(i[k]) && "" !== i[k] || ("x" === this.units.pos ? (j = this.chartRect.x1 + j, m.x = e.axisX.labelOffset.x, "start" === e.axisX.position ? m.y = this.chartRect.padding.top + e.axisX.labelOffset.y + (d ? 5 : 20) : m.y = this.chartRect.y1 + e.axisX.labelOffset.y + (d ? 5 : 20)) : (j = this.chartRect.y1 - j, m.y = e.axisY.labelOffset.y - (d ? l : 0), "start" === e.axisY.position ? m.x = d ? this.chartRect.padding.left + e.axisY.labelOffset.x : this.chartRect.x1 - 10 : m.x = this.chartRect.x2 + e.axisY.labelOffset.x + 10), g.showGrid && b.createGrid(j, k, this, this.gridOffset, this.chartRect[this.counterUnits.len](), a, [e.classNames.grid, e.classNames[this.units.dir]], f), g.showLabel && b.createLabel(j, l, k, i, this, g.offset, m, c, [e.classNames.label, e.classNames[this.units.dir], "start" === g.position ? e.classNames[g.position] : e.classNames.end], d, f)) | |
|                 }.bind(this)) | |
|             } | |
|             var e = (a.window, a.document, { | |
|                 x: { | |
|                     pos: "x", | |
|                     len: "width", | |
|                     dir: "horizontal", | |
|                     rectStart: "x1", | |
|                     rectEnd: "x2", | |
|                     rectOffset: "y2" | |
|                 }, | |
|                 y: { | |
|                     pos: "y", | |
|                     len: "height", | |
|                     dir: "vertical", | |
|                     rectStart: "y2", | |
|                     rectEnd: "y1", | |
|                     rectOffset: "x1" | |
|                 } | |
|             }); | |
|             b.Axis = b.Class.extend({ | |
|                 constructor: c, | |
|                 createGridAndLabels: d, | |
|                 projectValue: function(a, b, c) { | |
|                     throw new Error("Base axis can't be instantiated!") | |
|                 } | |
|             }), b.Axis.units = e | |
|         }(this || global, a), | |
|         function(a, b) { | |
|             "use strict"; | |
| 
 | |
|             function c(a, c, d, e) { | |
|                 var f = e.highLow || b.getHighLow(c, e, a.pos); | |
|                 this.bounds = b.getBounds(d[a.rectEnd] - d[a.rectStart], f, e.scaleMinSpace || 20, e.onlyInteger), this.range = { | |
|                     min: this.bounds.min, | |
|                     max: this.bounds.max | |
|                 }, b.AutoScaleAxis["super"].constructor.call(this, a, d, this.bounds.values, e) | |
|             } | |
| 
 | |
|             function d(a) { | |
|                 return this.axisLength * (+b.getMultiValue(a, this.units.pos) - this.bounds.min) / this.bounds.range | |
|             } | |
|             a.window, a.document; | |
|             b.AutoScaleAxis = b.Axis.extend({ | |
|                 constructor: c, | |
|                 projectValue: d | |
|             }) | |
|         }(this || global, a), | |
|         function(a, b) { | |
|             "use strict"; | |
| 
 | |
|             function c(a, c, d, e) { | |
|                 var f = e.highLow || b.getHighLow(c, e, a.pos); | |
|                 this.divisor = e.divisor || 1, this.ticks = e.ticks || b.times(this.divisor).map(function(a, b) { | |
|                     return f.low + (f.high - f.low) / this.divisor * b | |
|                 }.bind(this)), this.ticks.sort(function(a, b) { | |
|                     return a - b | |
|                 }), this.range = { | |
|                     min: f.low, | |
|                     max: f.high | |
|                 }, b.FixedScaleAxis["super"].constructor.call(this, a, d, this.ticks, e), this.stepLength = this.axisLength / this.divisor | |
|             } | |
| 
 | |
|             function d(a) { | |
|                 return this.axisLength * (+b.getMultiValue(a, this.units.pos) - this.range.min) / (this.range.max - this.range.min) | |
|             } | |
|             a.window, a.document; | |
|             b.FixedScaleAxis = b.Axis.extend({ | |
|                 constructor: c, | |
|                 projectValue: d | |
|             }) | |
|         }(this || global, a), | |
|         function(a, b) { | |
|             "use strict"; | |
| 
 | |
|             function c(a, c, d, e) { | |
|                 b.StepAxis["super"].constructor.call(this, a, d, e.ticks, e); | |
|                 var f = Math.max(1, e.ticks.length - (e.stretch ? 1 : 0)); | |
|                 this.stepLength = this.axisLength / f | |
|             } | |
| 
 | |
|             function d(a, b) { | |
|                 return this.stepLength * b | |
|             } | |
|             a.window, a.document; | |
|             b.StepAxis = b.Axis.extend({ | |
|                 constructor: c, | |
|                 projectValue: d | |
|             }) | |
|         }(this || global, a), | |
|         function(a, b) { | |
|             "use strict"; | |
| 
 | |
|             function c(a) { | |
|                 var c = b.normalizeData(this.data, a.reverseData, !0); | |
|                 this.svg = b.createSvg(this.container, a.width, a.height, a.classNames.chart); | |
|                 var d, f, g = this.svg.elem("g").addClass(a.classNames.gridGroup), | |
|                     h = this.svg.elem("g"), | |
|                     i = this.svg.elem("g").addClass(a.classNames.labelGroup), | |
|                     j = b.createChartRect(this.svg, a, e.padding); | |
|                 d = void 0 === a.axisX.type ? new b.StepAxis(b.Axis.units.x, c.normalized.series, j, b.extend({}, a.axisX, { | |
|                     ticks: c.normalized.labels, | |
|                     stretch: a.fullWidth | |
|                 })) : a.axisX.type.call(b, b.Axis.units.x, c.normalized.series, j, a.axisX), f = void 0 === a.axisY.type ? new b.AutoScaleAxis(b.Axis.units.y, c.normalized.series, j, b.extend({}, a.axisY, { | |
|                     high: b.isNumeric(a.high) ? a.high : a.axisY.high, | |
|                     low: b.isNumeric(a.low) ? a.low : a.axisY.low | |
|                 })) : a.axisY.type.call(b, b.Axis.units.y, c.normalized.series, j, a.axisY), d.createGridAndLabels(g, i, this.supportsForeignObject, a, this.eventEmitter), f.createGridAndLabels(g, i, this.supportsForeignObject, a, this.eventEmitter), a.showGridBackground && b.createGridBackground(g, j, a.classNames.gridBackground, this.eventEmitter), c.raw.series.forEach(function(e, g) { | |
|                     var i = h.elem("g"); | |
|                     i.attr({ | |
|                         "ct:series-name": e.name, | |
|                         "ct:meta": b.serialize(e.meta) | |
|                     }), i.addClass([a.classNames.series, e.className || a.classNames.series + "-" + b.alphaNumerate(g)].join(" ")); | |
|                     var k = [], | |
|                         l = []; | |
|                     c.normalized.series[g].forEach(function(a, h) { | |
|                         var i = { | |
|                             x: j.x1 + d.projectValue(a, h, c.normalized.series[g]), | |
|                             y: j.y1 - f.projectValue(a, h, c.normalized.series[g]) | |
|                         }; | |
|                         k.push(i.x, i.y), l.push({ | |
|                             value: a, | |
|                             valueIndex: h, | |
|                             meta: b.getMetaData(e, h) | |
|                         }) | |
|                     }.bind(this)); | |
|                     var m = { | |
|                             lineSmooth: b.getSeriesOption(e, a, "lineSmooth"), | |
|                             showPoint: b.getSeriesOption(e, a, "showPoint"), | |
|                             showLine: b.getSeriesOption(e, a, "showLine"), | |
|                             showArea: b.getSeriesOption(e, a, "showArea"), | |
|                             areaBase: b.getSeriesOption(e, a, "areaBase") | |
|                         }, | |
|                         n = "function" == typeof m.lineSmooth ? m.lineSmooth : m.lineSmooth ? b.Interpolation.monotoneCubic() : b.Interpolation.none(), | |
|                         o = n(k, l); | |
|                     if (m.showPoint && o.pathElements.forEach(function(c) { | |
|                             var h = i.elem("line", { | |
|                                 x1: c.x, | |
|                                 y1: c.y, | |
|                                 x2: c.x + .01, | |
|                                 y2: c.y | |
|                             }, a.classNames.point).attr({ | |
|                                 "ct:value": [c.data.value.x, c.data.value.y].filter(b.isNumeric).join(","), | |
|                                 "ct:meta": b.serialize(c.data.meta) | |
|                             }); | |
|                             this.eventEmitter.emit("draw", { | |
|                                 type: "point", | |
|                                 value: c.data.value, | |
|                                 index: c.data.valueIndex, | |
|                                 meta: c.data.meta, | |
|                                 series: e, | |
|                                 seriesIndex: g, | |
|                                 axisX: d, | |
|                                 axisY: f, | |
|                                 group: i, | |
|                                 element: h, | |
|                                 x: c.x, | |
|                                 y: c.y | |
|                             }) | |
|                         }.bind(this)), m.showLine) { | |
|                         var p = i.elem("path", { | |
|                             d: o.stringify() | |
|                         }, a.classNames.line, !0); | |
|                         this.eventEmitter.emit("draw", { | |
|                             type: "line", | |
|                             values: c.normalized.series[g], | |
|                             path: o.clone(), | |
|                             chartRect: j, | |
|                             index: g, | |
|                             series: e, | |
|                             seriesIndex: g, | |
|                             seriesMeta: e.meta, | |
|                             axisX: d, | |
|                             axisY: f, | |
|                             group: i, | |
|                             element: p | |
|                         }) | |
|                     } | |
|                     if (m.showArea && f.range) { | |
|                         var q = Math.max(Math.min(m.areaBase, f.range.max), f.range.min), | |
|                             r = j.y1 - f.projectValue(q); | |
|                         o.splitByCommand("M").filter(function(a) { | |
|                             return a.pathElements.length > 1 | |
|                         }).map(function(a) { | |
|                             var b = a.pathElements[0], | |
|                                 c = a.pathElements[a.pathElements.length - 1]; | |
|                             return a.clone(!0).position(0).remove(1).move(b.x, r).line(b.x, b.y).position(a.pathElements.length + 1).line(c.x, r) | |
|                         }).forEach(function(b) { | |
|                             var h = i.elem("path", { | |
|                                 d: b.stringify() | |
|                             }, a.classNames.area, !0); | |
|                             this.eventEmitter.emit("draw", { | |
|                                 type: "area", | |
|                                 values: c.normalized.series[g], | |
|                                 path: b.clone(), | |
|                                 series: e, | |
|                                 seriesIndex: g, | |
|                                 axisX: d, | |
|                                 axisY: f, | |
|                                 chartRect: j, | |
|                                 index: g, | |
|                                 group: i, | |
|                                 element: h | |
|                             }) | |
|                         }.bind(this)) | |
|                     } | |
|                 }.bind(this)), this.eventEmitter.emit("created", { | |
|                     bounds: f.bounds, | |
|                     chartRect: j, | |
|                     axisX: d, | |
|                     axisY: f, | |
|                     svg: this.svg, | |
|                     options: a | |
|                 }) | |
|             } | |
| 
 | |
|             function d(a, c, d, f) { | |
|                 b.Line["super"].constructor.call(this, a, c, e, b.extend({}, e, d), f) | |
|             } | |
|             var e = (a.window, a.document, { | |
|                 axisX: { | |
|                     offset: 30, | |
|                     position: "end", | |
|                     labelOffset: { | |
|                         x: 0, | |
|                         y: 0 | |
|                     }, | |
|                     showLabel: !0, | |
|                     showGrid: !0, | |
|                     labelInterpolationFnc: b.noop, | |
|                     type: void 0 | |
|                 }, | |
|                 axisY: { | |
|                     offset: 40, | |
|                     position: "start", | |
|                     labelOffset: { | |
|                         x: 0, | |
|                         y: 0 | |
|                     }, | |
|                     showLabel: !0, | |
|                     showGrid: !0, | |
|                     labelInterpolationFnc: b.noop, | |
|                     type: void 0, | |
|                     scaleMinSpace: 20, | |
|                     onlyInteger: !1 | |
|                 }, | |
|                 width: void 0, | |
|                 height: void 0, | |
|                 showLine: !0, | |
|                 showPoint: !0, | |
|                 showArea: !1, | |
|                 areaBase: 0, | |
|                 lineSmooth: !0, | |
|                 showGridBackground: !1, | |
|                 low: void 0, | |
|                 high: void 0, | |
|                 chartPadding: { | |
|                     top: 15, | |
|                     right: 15, | |
|                     bottom: 5, | |
|                     left: 10 | |
|                 }, | |
|                 fullWidth: !1, | |
|                 reverseData: !1, | |
|                 classNames: { | |
|                     chart: "ct-chart-line", | |
|                     label: "ct-label", | |
|                     labelGroup: "ct-labels", | |
|                     series: "ct-series", | |
|                     line: "ct-line", | |
|                     point: "ct-point", | |
|                     area: "ct-area", | |
|                     grid: "ct-grid", | |
|                     gridGroup: "ct-grids", | |
|                     gridBackground: "ct-grid-background", | |
|                     vertical: "ct-vertical", | |
|                     horizontal: "ct-horizontal", | |
|                     start: "ct-start", | |
|                     end: "ct-end" | |
|                 } | |
|             }); | |
|             b.Line = b.Base.extend({ | |
|                 constructor: d, | |
|                 createChart: c | |
|             }) | |
|         }(this || global, a), | |
|         function(a, b) { | |
|             "use strict"; | |
| 
 | |
|             function c(a) { | |
|                 var c, d; | |
|                 a.distributeSeries ? (c = b.normalizeData(this.data, a.reverseData, a.horizontalBars ? "x" : "y"), c.normalized.series = c.normalized.series.map(function(a) { | |
|                     return [a] | |
|                 })) : c = b.normalizeData(this.data, a.reverseData, a.horizontalBars ? "x" : "y"), this.svg = b.createSvg(this.container, a.width, a.height, a.classNames.chart + (a.horizontalBars ? " " + a.classNames.horizontalBars : "")); | |
|                 var f = this.svg.elem("g").addClass(a.classNames.gridGroup), | |
|                     g = this.svg.elem("g"), | |
|                     h = this.svg.elem("g").addClass(a.classNames.labelGroup); | |
|                 if (a.stackBars && 0 !== c.normalized.series.length) { | |
|                     var i = b.serialMap(c.normalized.series, function() { | |
|                         return Array.prototype.slice.call(arguments).map(function(a) { | |
|                             return a | |
|                         }).reduce(function(a, b) { | |
|                             return { | |
|                                 x: a.x + (b && b.x) || 0, | |
|                                 y: a.y + (b && b.y) || 0 | |
|                             } | |
|                         }, { | |
|                             x: 0, | |
|                             y: 0 | |
|                         }) | |
|                     }); | |
|                     d = b.getHighLow([i], a, a.horizontalBars ? "x" : "y") | |
|                 } else d = b.getHighLow(c.normalized.series, a, a.horizontalBars ? "x" : "y"); | |
|                 d.high = +a.high || (0 === a.high ? 0 : d.high), d.low = +a.low || (0 === a.low ? 0 : d.low); | |
|                 var j, k, l, m, n, o = b.createChartRect(this.svg, a, e.padding); | |
|                 k = a.distributeSeries && a.stackBars ? c.normalized.labels.slice(0, 1) : c.normalized.labels, a.horizontalBars ? (j = m = void 0 === a.axisX.type ? new b.AutoScaleAxis(b.Axis.units.x, c.normalized.series, o, b.extend({}, a.axisX, { | |
|                     highLow: d, | |
|                     referenceValue: 0 | |
|                 })) : a.axisX.type.call(b, b.Axis.units.x, c.normalized.series, o, b.extend({}, a.axisX, { | |
|                     highLow: d, | |
|                     referenceValue: 0 | |
|                 })), l = n = void 0 === a.axisY.type ? new b.StepAxis(b.Axis.units.y, c.normalized.series, o, { | |
|                     ticks: k | |
|                 }) : a.axisY.type.call(b, b.Axis.units.y, c.normalized.series, o, a.axisY)) : (l = m = void 0 === a.axisX.type ? new b.StepAxis(b.Axis.units.x, c.normalized.series, o, { | |
|                     ticks: k | |
|                 }) : a.axisX.type.call(b, b.Axis.units.x, c.normalized.series, o, a.axisX), j = n = void 0 === a.axisY.type ? new b.AutoScaleAxis(b.Axis.units.y, c.normalized.series, o, b.extend({}, a.axisY, { | |
|                     highLow: d, | |
|                     referenceValue: 0 | |
|                 })) : a.axisY.type.call(b, b.Axis.units.y, c.normalized.series, o, b.extend({}, a.axisY, { | |
|                     highLow: d, | |
|                     referenceValue: 0 | |
|                 }))); | |
|                 var p = a.horizontalBars ? o.x1 + j.projectValue(0) : o.y1 - j.projectValue(0), | |
|                     q = []; | |
|                 l.createGridAndLabels(f, h, this.supportsForeignObject, a, this.eventEmitter), j.createGridAndLabels(f, h, this.supportsForeignObject, a, this.eventEmitter), a.showGridBackground && b.createGridBackground(f, o, a.classNames.gridBackground, this.eventEmitter), c.raw.series.forEach(function(d, e) { | |
|                     var f, h, i = e - (c.raw.series.length - 1) / 2; | |
|                     f = a.distributeSeries && !a.stackBars ? l.axisLength / c.normalized.series.length / 2 : a.distributeSeries && a.stackBars ? l.axisLength / 2 : l.axisLength / c.normalized.series[e].length / 2, h = g.elem("g"), h.attr({ | |
|                         "ct:series-name": d.name, | |
|                         "ct:meta": b.serialize(d.meta) | |
|                     }), h.addClass([a.classNames.series, d.className || a.classNames.series + "-" + b.alphaNumerate(e)].join(" ")), c.normalized.series[e].forEach(function(g, k) { | |
|                         var r, s, t, u; | |
|                         if (u = a.distributeSeries && !a.stackBars ? e : a.distributeSeries && a.stackBars ? 0 : k, r = a.horizontalBars ? { | |
|                                 x: o.x1 + j.projectValue(g && g.x ? g.x : 0, k, c.normalized.series[e]), | |
|                                 y: o.y1 - l.projectValue(g && g.y ? g.y : 0, u, c.normalized.series[e]) | |
|                             } : { | |
|                                 x: o.x1 + l.projectValue(g && g.x ? g.x : 0, u, c.normalized.series[e]), | |
|                                 y: o.y1 - j.projectValue(g && g.y ? g.y : 0, k, c.normalized.series[e]) | |
|                             }, l instanceof b.StepAxis && (l.options.stretch || (r[l.units.pos] += f * (a.horizontalBars ? -1 : 1)), r[l.units.pos] += a.stackBars || a.distributeSeries ? 0 : i * a.seriesBarDistance * (a.horizontalBars ? -1 : 1)), t = q[k] || p, q[k] = t - (p - r[l.counterUnits.pos]), void 0 !== g) { | |
|                             var v = {}; | |
|                             v[l.units.pos + "1"] = r[l.units.pos], v[l.units.pos + "2"] = r[l.units.pos], !a.stackBars || "accumulate" !== a.stackMode && a.stackMode ? (v[l.counterUnits.pos + "1"] = p, v[l.counterUnits.pos + "2"] = r[l.counterUnits.pos]) : (v[l.counterUnits.pos + "1"] = t, v[l.counterUnits.pos + "2"] = q[k]), v.x1 = Math.min(Math.max(v.x1, o.x1), o.x2), v.x2 = Math.min(Math.max(v.x2, o.x1), o.x2), v.y1 = Math.min(Math.max(v.y1, o.y2), o.y1), v.y2 = Math.min(Math.max(v.y2, o.y2), o.y1); | |
|                             var w = b.getMetaData(d, k); | |
|                             s = h.elem("line", v, a.classNames.bar).attr({ | |
|                                 "ct:value": [g.x, g.y].filter(b.isNumeric).join(","), | |
|                                 "ct:meta": b.serialize(w) | |
|                             }), this.eventEmitter.emit("draw", b.extend({ | |
|                                 type: "bar", | |
|                                 value: g, | |
|                                 index: k, | |
|                                 meta: w, | |
|                                 series: d, | |
|                                 seriesIndex: e, | |
|                                 axisX: m, | |
|                                 axisY: n, | |
|                                 chartRect: o, | |
|                                 group: h, | |
|                                 element: s | |
|                             }, v)) | |
|                         } | |
|                     }.bind(this)) | |
|                 }.bind(this)), this.eventEmitter.emit("created", { | |
|                     bounds: j.bounds, | |
|                     chartRect: o, | |
|                     axisX: m, | |
|                     axisY: n, | |
|                     svg: this.svg, | |
|                     options: a | |
|                 }) | |
|             } | |
| 
 | |
|             function d(a, c, d, f) { | |
|                 b.Bar["super"].constructor.call(this, a, c, e, b.extend({}, e, d), f) | |
|             } | |
|             var e = (a.window, a.document, { | |
|                 axisX: { | |
|                     offset: 30, | |
|                     position: "end", | |
|                     labelOffset: { | |
|                         x: 0, | |
|                         y: 0 | |
|                     }, | |
|                     showLabel: !0, | |
|                     showGrid: !0, | |
|                     labelInterpolationFnc: b.noop, | |
|                     scaleMinSpace: 30, | |
|                     onlyInteger: !1 | |
|                 }, | |
|                 axisY: { | |
|                     offset: 40, | |
|                     position: "start", | |
|                     labelOffset: { | |
|                         x: 0, | |
|                         y: 0 | |
|                     }, | |
|                     showLabel: !0, | |
|                     showGrid: !0, | |
|                     labelInterpolationFnc: b.noop, | |
|                     scaleMinSpace: 20, | |
|                     onlyInteger: !1 | |
|                 }, | |
|                 width: void 0, | |
|                 height: void 0, | |
|                 high: void 0, | |
|                 low: void 0, | |
|                 referenceValue: 0, | |
|                 chartPadding: { | |
|                     top: 15, | |
|                     right: 15, | |
|                     bottom: 5, | |
|                     left: 10 | |
|                 }, | |
|                 seriesBarDistance: 15, | |
|                 stackBars: !1, | |
|                 stackMode: "accumulate", | |
|                 horizontalBars: !1, | |
|                 distributeSeries: !1, | |
|                 reverseData: !1, | |
|                 showGridBackground: !1, | |
|                 classNames: { | |
|                     chart: "ct-chart-bar", | |
|                     horizontalBars: "ct-horizontal-bars", | |
|                     label: "ct-label", | |
|                     labelGroup: "ct-labels", | |
|                     series: "ct-series", | |
|                     bar: "ct-bar", | |
|                     grid: "ct-grid", | |
|                     gridGroup: "ct-grids", | |
|                     gridBackground: "ct-grid-background", | |
|                     vertical: "ct-vertical", | |
|                     horizontal: "ct-horizontal", | |
|                     start: "ct-start", | |
|                     end: "ct-end" | |
|                 } | |
|             }); | |
|             b.Bar = b.Base.extend({ | |
|                 constructor: d, | |
|                 createChart: c | |
|             }) | |
|         }(this || global, a), | |
|         function(a, b) { | |
|             "use strict"; | |
| 
 | |
|             function c(a, b, c) { | |
|                 var d = b.x > a.x; | |
|                 return d && "explode" === c || !d && "implode" === c ? "start" : d && "implode" === c || !d && "explode" === c ? "end" : "middle" | |
|             } | |
| 
 | |
|             function d(a) { | |
|                 var d, e, g, h, i, j = b.normalizeData(this.data), | |
|                     k = [], | |
|                     l = a.startAngle; | |
|                 this.svg = b.createSvg(this.container, a.width, a.height, a.donut ? a.classNames.chartDonut : a.classNames.chartPie), e = b.createChartRect(this.svg, a, f.padding), g = Math.min(e.width() / 2, e.height() / 2), i = a.total || j.normalized.series.reduce(function(a, b) { | |
|                     return a + b | |
|                 }, 0); | |
|                 var m = b.quantity(a.donutWidth); | |
|                 "%" === m.unit && (m.value *= g / 100), g -= a.donut && !a.donutSolid ? m.value / 2 : 0, h = "outside" === a.labelPosition || a.donut && !a.donutSolid ? g : "center" === a.labelPosition ? 0 : a.donutSolid ? g - m.value / 2 : g / 2, h += a.labelOffset; | |
|                 var n = { | |
|                         x: e.x1 + e.width() / 2, | |
|                         y: e.y2 + e.height() / 2 | |
|                     }, | |
|                     o = 1 === j.raw.series.filter(function(a) { | |
|                         return a.hasOwnProperty("value") ? 0 !== a.value : 0 !== a | |
|                     }).length; | |
|                 j.raw.series.forEach(function(a, b) { | |
|                     k[b] = this.svg.elem("g", null, null) | |
|                 }.bind(this)), a.showLabel && (d = this.svg.elem("g", null, null)), j.raw.series.forEach(function(e, f) { | |
|                     if (0 !== j.normalized.series[f] || !a.ignoreEmptyValues) { | |
|                         k[f].attr({ | |
|                             "ct:series-name": e.name | |
|                         }), k[f].addClass([a.classNames.series, e.className || a.classNames.series + "-" + b.alphaNumerate(f)].join(" ")); | |
|                         var p = i > 0 ? l + j.normalized.series[f] / i * 360 : 0, | |
|                             q = Math.max(0, l - (0 === f || o ? 0 : .2)); | |
|                         p - q >= 359.99 && (p = q + 359.99); | |
|                         var r, s, t, u = b.polarToCartesian(n.x, n.y, g, q), | |
|                             v = b.polarToCartesian(n.x, n.y, g, p), | |
|                             w = new b.Svg.Path(!a.donut || a.donutSolid).move(v.x, v.y).arc(g, g, 0, p - l > 180, 0, u.x, u.y); | |
|                         a.donut ? a.donutSolid && (t = g - m.value, r = b.polarToCartesian(n.x, n.y, t, l - (0 === f || o ? 0 : .2)), s = b.polarToCartesian(n.x, n.y, t, p), w.line(r.x, r.y), w.arc(t, t, 0, p - l > 180, 1, s.x, s.y)) : w.line(n.x, n.y); | |
|                         var x = a.classNames.slicePie; | |
|                         a.donut && (x = a.classNames.sliceDonut, a.donutSolid && (x = a.classNames.sliceDonutSolid)); | |
|                         var y = k[f].elem("path", { | |
|                             d: w.stringify() | |
|                         }, x); | |
|                         if (y.attr({ | |
|                                 "ct:value": j.normalized.series[f], | |
|                                 "ct:meta": b.serialize(e.meta) | |
|                             }), a.donut && !a.donutSolid && (y._node.style.strokeWidth = m.value + "px"), this.eventEmitter.emit("draw", { | |
|                                 type: "slice", | |
|                                 value: j.normalized.series[f], | |
|                                 totalDataSum: i, | |
|                                 index: f, | |
|                                 meta: e.meta, | |
|                                 series: e, | |
|                                 group: k[f], | |
|                                 element: y, | |
|                                 path: w.clone(), | |
|                                 center: n, | |
|                                 radius: g, | |
|                                 startAngle: l, | |
|                                 endAngle: p | |
|                             }), a.showLabel) { | |
|                             var z; | |
|                             z = 1 === j.raw.series.length ? { | |
|                                 x: n.x, | |
|                                 y: n.y | |
|                             } : b.polarToCartesian(n.x, n.y, h, l + (p - l) / 2); | |
|                             var A; | |
|                             A = j.normalized.labels && !b.isFalseyButZero(j.normalized.labels[f]) ? j.normalized.labels[f] : j.normalized.series[f]; | |
|                             var B = a.labelInterpolationFnc(A, f); | |
|                             if (B || 0 === B) { | |
|                                 var C = d.elem("text", { | |
|                                     dx: z.x, | |
|                                     dy: z.y, | |
|                                     "text-anchor": c(n, z, a.labelDirection) | |
|                                 }, a.classNames.label).text("" + B); | |
|                                 this.eventEmitter.emit("draw", { | |
|                                     type: "label", | |
|                                     index: f, | |
|                                     group: d, | |
|                                     element: C, | |
|                                     text: "" + B, | |
|                                     x: z.x, | |
|                                     y: z.y | |
|                                 }) | |
|                             } | |
|                         } | |
|                         l = p | |
|                     } | |
|                 }.bind(this)), this.eventEmitter.emit("created", { | |
|                     chartRect: e, | |
|                     svg: this.svg, | |
|                     options: a | |
|                 }) | |
|             } | |
| 
 | |
|             function e(a, c, d, e) { | |
|                 b.Pie["super"].constructor.call(this, a, c, f, b.extend({}, f, d), e) | |
|             } | |
|             var f = (a.window, a.document, { | |
|                 width: void 0, | |
|                 height: void 0, | |
|                 chartPadding: 5, | |
|                 classNames: { | |
|                     chartPie: "ct-chart-pie", | |
|                     chartDonut: "ct-chart-donut", | |
|                     series: "ct-series", | |
|                     slicePie: "ct-slice-pie", | |
|                     sliceDonut: "ct-slice-donut", | |
|                     sliceDonutSolid: "ct-slice-donut-solid", | |
|                     label: "ct-label" | |
|                 }, | |
|                 startAngle: 0, | |
|                 total: void 0, | |
|                 donut: !1, | |
|                 donutSolid: !1, | |
|                 donutWidth: 60, | |
|                 showLabel: !0, | |
|                 labelOffset: 0, | |
|                 labelPosition: "inside", | |
|                 labelInterpolationFnc: b.noop, | |
|                 labelDirection: "neutral", | |
|                 reverseData: !1, | |
|                 ignoreEmptyValues: !1 | |
|             }); | |
|             b.Pie = b.Base.extend({ | |
|                 constructor: e, | |
|                 createChart: d, | |
|                 determineAnchorPosition: c | |
|             }) | |
|         }(this || global, a), a | |
| }); |