0
0
Fork 0
mirror of https://github.com/salesagility/SuiteCRM.git synced 2025-03-15 22:04:51 +00:00
salesagility_SuiteCRM/include/javascript/suitespots/suitespots.js

1783 lines
342 KiB
JavaScript
Raw Permalink Normal View History

!function(){function n(n){return n&&(n.ownerDocument||n.document||n).documentElement}function t(n){return n&&(n.ownerDocument&&n.ownerDocument.defaultView||n.document&&n||n.defaultView)}function e(n,t){return t>n?-1:n>t?1:n>=t?0:0/0}function r(n){return null===n?0/0:+n}function u(n){return!isNaN(n)}function i(n){return{left:function(t,e,r,u){for(arguments.length<3&&(r=0),arguments.length<4&&(u=t.length);u>r;){var i=r+u>>>1;n(t[i],e)<0?r=i+1:u=i}return r},right:function(t,e,r,u){for(arguments.length<3&&(r=0),arguments.length<4&&(u=t.length);u>r;){var i=r+u>>>1;n(t[i],e)>0?u=i:r=i+1}return r}}}function o(n){return n.length}function a(n){for(var t=1;n*t%1;)t*=10;return t}function c(n,t){for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}function l(){this._=Object.create(null)}function s(n){return(n+="")===pa||n[0]===va?va+n:n}function f(n){return(n+="")[0]===va?n.slice(1):n}function h(n){return s(n)in this._}function g(n){return(n=s(n))in this._&&delete this._[n]}function p(){var n=[];for(var t in this._)n.push(f(t));return n}function v(){var n=0;for(var t in this._)++n;return n}function d(){for(var n in this._)return!1;return!0}function m(){this._=Object.create(null)}function y(n){return n}function M(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function x(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=da.length;r>e;++e){var u=da[e]+t;if(u in n)return u}}function b(){}function _(){}function w(n){function t(){for(var t,r=e,u=-1,i=r.length;++u<i;)(t=r[u].on)&&t.apply(this,arguments);return n}var e=[],r=new l;return t.on=function(t,u){var i,o=r.get(t);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,i=e.indexOf(o)).concat(e.slice(i+1)),r.remove(t)),u&&e.push(r.set(t,{on:u})),n)},t}function S(){ta.event.preventDefault()}function k(){for(var n,t=ta.event;n=t.sourceEvent;)t=n;return t}function E(n){for(var t=new _,e=0,r=arguments.length;++e<r;)t[arguments[e]]=w(t);return t.of=function(e,r){return function(u){try{var i=u.sourceEvent=ta.event;u.target=n,ta.event=u,t[u.type].apply(e,r)}finally{ta.event=i}}},t}function A(n){return ya(n,_a),n}function N(n){return"function"==typeof n?n:function(){return Ma(n,this)}}function C(n){return"function"==typeof n?n:function(){return xa(n,this)}}function z(n,t){function e(){this.removeAttribute(n)}function r(){this.removeAttributeNS(n.space,n.local)}function u(){this.setAttribute(n,t)}function i(){this.setAttributeNS(n.space,n.local,t)}function o(){var e=t.apply(this,arguments);null==e?this.removeAttribute(n):this.setAttribute(n,e)}function a(){var e=t.apply(this,arguments);null==e?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}return n=ta.ns.qualify(n),null==t?n.local?r:e:"function"==typeof t?n.local?a:o:n.local?i:u}function q(n){return n.trim().replace(/\s+/g," ")}function L(n){return new RegExp("(?:^|\\s+)"+ta.requote(n)+"(?:\\s+|$)","g")}function T(n){return(n+"").trim().split(/^|\s+/)}function R(n,t){function e(){for(var e=-1;++e<u;)n[e](this,t)}function r(){for(var e=-1,r=t.apply(this,arguments);++e<u;)n[e](this,r)}n=T(n).map(D);var u=n.length;return"function"==typeof t?r:e}function D(n){var t=L(n);return function(e,r){if(u=e.classList)return r?u.add(n):u.remove(n);var u=e.getAttribute("class")||"";r?(t.lastIndex=0,t.test(u)||e.setAttribute("class",q(u+" "+n))):e.setAttribute("class",q(u.replace(t," ")))}}function P(n,t,e){function r(){this.style.removeProperty(n)}function u(){this.style.setProperty(n,t,e)}function i(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(n):this.style.setProperty(n,r,e)}return null==t?r:"function"==typeof t?i:u}function U(n,t){function e(){delete this[n]}function r(){this[n]=t}function u(){var e=t.apply(this,arguments);null==e?delete this[n]:this[n]=e}return null==t?e:"function"==typeof t?u:r}function j(n){function t(){var t=this.ownerDocument,e=this.namespaceURI;return e?t.createElementNS(e,n):t.createElement(n)}function e(){return this.ownerDocument.createElementNS(n.space,n.local)}return"function"==typeof n?n:(n=ta.
},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function u(t,e,r,a,c,l,s,f,h,g,p,v,d,m){var y=s-t,M=f-e,x=y*y+M*M;if(x>4*i&&d--){var b=a+g,_=c+p,w=l+v,S=Math.sqrt(b*b+_*_+w*w),k=Math.asin(w/=S),E=ga(ga(w)-1)<Ca||ga(r-h)<Ca?(r+h)/2:Math.atan2(_,b),A=n(E,k),N=A[0],C=A[1],z=N-t,q=C-e,L=M*z-y*q;(L*L/x>i||ga((y*z+M*q)/x-.5)>.3||o>a*g+c*p+l*v)&&(u(t,e,r,a,c,l,N,C,E,b/=S,_/=S,w,d,m),m.point(N,C),u(N,C,E,b,_,w,s,f,h,g,p,v,d,m))}}var i=.5,o=Math.cos(30*Da),a=16;return t.precision=function(n){return arguments.length?(a=(i=n*n)>0&&16,t):Math.sqrt(i)},t}function tr(n){var t=nr(function(t,e){return n([t*Pa,e*Pa])});return function(n){return or(t(n))}}function er(n){this.stream=n}function rr(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function ur(n){return ir(function(){return n})()}function ir(n){function t(n){return n=a(n[0]*Da,n[1]*Da),[n[0]*h+c,l-n[1]*h]}function e(n){return n=a.invert((n[0]-c)/h,(l-n[1])/h),n&&[n[0]*Pa,n[1]*Pa]}function r(){a=Ae(o=lr(m,M,x),i);var n=i(v,d);return c=g-n[0]*h,l=p+n[1]*h,u()}function u(){return s&&(s.valid=!1,s=null),t}var i,o,a,c,l,s,f=nr(function(n,t){return n=i(n,t),[n[0]*h+c,l-n[1]*h]}),h=150,g=480,p=250,v=0,d=0,m=0,M=0,x=0,b=Lc,_=y,w=null,S=null;return t.stream=function(n){return s&&(s.valid=!1),s=or(b(o,f(_(n)))),s.valid=!0,s},t.clipAngle=function(n){return arguments.length?(b=null==n?(w=n,Lc):He((w=+n)*Da),u()):w},t.clipExtent=function(n){return arguments.length?(S=n,_=n?Ie(n[0][0],n[0][1],n[1][0],n[1][1]):y,u()):S},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(g=+n[0],p=+n[1],r()):[g,p]},t.center=function(n){return arguments.length?(v=n[0]%360*Da,d=n[1]%360*Da,r()):[v*Pa,d*Pa]},t.rotate=function(n){return arguments.length?(m=n[0]%360*Da,M=n[1]%360*Da,x=n.length>2?n[2]%360*Da:0,r()):[m*Pa,M*Pa,x*Pa]},ta.rebind(t,f,"precision"),function(){return i=n.apply(this,arguments),t.invert=i.invert&&e,r()}}function or(n){return rr(n,function(t,e){n.point(t*Da,e*Da)})}function ar(n,t){return[n,t]}function cr(n,t){return[n>qa?n-La:-qa>n?n+La:n,t]}function lr(n,t,e){return n?t||e?Ae(fr(n),hr(t,e)):fr(n):t||e?hr(t,e):cr}function sr(n){return function(t,e){return t+=n,[t>qa?t-La:-qa>t?t+La:t,e]}}function fr(n){var t=sr(n);return t.invert=sr(-n),t}function hr(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,c=Math.sin(n)*e,l=Math.sin(t),s=l*r+a*u;return[Math.atan2(c*i-s*o,a*r-l*u),tt(s*i+c*o)]}var r=Math.cos(n),u=Math.sin(n),i=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,c=Math.sin(n)*e,l=Math.sin(t),s=l*i-c*o;return[Math.atan2(c*i+l*o,a*r+s*u),tt(s*r-a*u)]},e}function gr(n,t){var e=Math.cos(n),r=Math.sin(n);return function(u,i,o,a){var c=o*t;null!=u?(u=pr(e,u),i=pr(e,i),(o>0?i>u:u>i)&&(u+=o*La)):(u=n+o*La,i=n-.5*c);for(var l,s=u;o>0?s>i:i>s;s-=c)a.point((l=xe([e,-r*Math.cos(s),-r*Math.sin(s)]))[0],l[1])}}function pr(n,t){var e=pe(t);e[0]-=n,Me(e);var r=nt(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Ca)%(2*Math.PI)}function vr(n,t,e){var r=ta.range(n,t-Ca,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function dr(n,t,e){var r=ta.range(n,t-Ca,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function mr(n){return n.source}function yr(n){return n.target}function Mr(n,t,e,r){var u=Math.cos(t),i=Math.sin(t),o=Math.cos(r),a=Math.sin(r),c=u*Math.cos(n),l=u*Math.sin(n),s=o*Math.cos(e),f=o*Math.sin(e),h=2*Math.asin(Math.sqrt(it(r-t)+u*o*it(e-n))),g=1/Math.sin(h),p=h?function(n){var t=Math.sin(n*=h)*g,e=Math.sin(h-n)*g,r=e*c+t*s,u=e*l+t*f,o=e*i+t*a;return[Math.atan2(u,r)*Pa,Math.atan2(o,Math.sqrt(r*r+u*u))*Pa]}:function(){return[n*Pa,t*Pa]};return p.distance=h,p}function xr(){function n(n,u){var i=Math.sin(u*=Da),o=Math.cos(u),a=ga((n*=Da)-t),c=Math.cos(a);Yc+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*i-e*o*c)*a),e*i+r*o*c),t=n,e=i,r=o}var t,e,r;Zc.point=function(u,i){t=u*Da,e=Math.sin(i*=Da),r
},t.y=function(n){return arguments.length?(u=i=n,t):i},t.y0=function(n){return arguments.length?(u=n,t):u},t.y1=function(n){return arguments.length?(i=n,t):i},t.defined=function(n){return arguments.length?(o=n,t):o},t.interpolate=function(n){return arguments.length?(c="function"==typeof n?a=n:(a=El.get(n)||go).key,l=a.reverse||a,s=a.closed?"M":"L",t):c},t.tension=function(n){return arguments.length?(f=n,t):f},t}function Po(n){return n.radius}function Uo(n){return[n.x,n.y]}function jo(n){return function(){var t=n.apply(this,arguments),e=t[0],r=t[1]-Ra;return[e*Math.cos(r),e*Math.sin(r)]}}function Fo(){return 64}function Ho(){return"circle"}function Oo(n){var t=Math.sqrt(n/qa);return"M0,"+t+"A"+t+","+t+" 0 1,1 0,"+-t+"A"+t+","+t+" 0 1,1 0,"+t+"Z"}function Io(n){return function(){var t,e;(t=this[n])&&(e=t[t.active])&&(--t.count?delete t[t.active]:delete this[n],t.active+=.5,e.event&&e.event.interrupt.call(this,this.__data__,e.index))}}function Yo(n,t,e){return ya(n,Pl),n.namespace=t,n.id=e,n}function Zo(n,t,e,r){var u=n.id,i=n.namespace;return Y(n,"function"==typeof e?function(n,o,a){n[i][u].tween.set(t,r(e.call(n,n.__data__,o,a)))}:(e=r(e),function(n){n[i][u].tween.set(t,e)}))}function Vo(n){return null==n&&(n=""),function(){this.textContent=n}}function Xo(n){return null==n?"__transition__":"__transition_"+n+"__"}function $o(n,t,e,r,u){var i=n[e]||(n[e]={active:0,count:0}),o=i[r];if(!o){var a=u.time;o=i[r]={tween:new l,time:a,delay:u.delay,duration:u.duration,ease:u.ease,index:t},u=null,++i.count,ta.timer(function(u){function c(e){if(i.active>r)return s();var u=i[i.active];u&&(--i.count,delete i[i.active],u.event&&u.event.interrupt.call(n,n.__data__,u.index)),i.active=r,o.event&&o.event.start.call(n,n.__data__,t),o.tween.forEach(function(e,r){(r=r.call(n,n.__data__,t))&&v.push(r)}),h=o.ease,f=o.duration,ta.timer(function(){return p.c=l(e||1)?Ne:l,1},0,a)}function l(e){if(i.active!==r)return 1;for(var u=e/f,a=h(u),c=v.length;c>0;)v[--c].call(n,a);return u>=1?(o.event&&o.event.end.call(n,n.__data__,t),s()):void 0}function s(){return--i.count?delete i[r]:delete n[e],1}var f,h,g=o.delay,p=ec,v=[];return p.t=g+a,u>=g?c(u-g):void(p.c=c)},0,a)}}function Bo(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate("+(isFinite(r)?r:e(n))+",0)"})}function Wo(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate(0,"+(isFinite(r)?r:e(n))+")"})}function Jo(n){return n.toISOString()}function Go(n,t,e){function r(t){return n(t)}function u(n,e){var r=n[1]-n[0],u=r/e,i=ta.bisect(Vl,u);return i==Vl.length?[t.year,Vi(n.map(function(n){return n/31536e6}),e)[2]]:i?t[u/Vl[i-1]<Vl[i]/u?i-1:i]:[Bl,Vi(n,e)[2]]}return r.invert=function(t){return Ko(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain(t),r):n.domain().map(Ko)},r.nice=function(n,t){function e(e){return!isNaN(e)&&!n.range(e,Ko(+e+1),t).length}var i=r.domain(),o=Pi(i),a=null==n?u(o,10):"number"==typeof n&&u(o,n);return a&&(n=a[0],t=a[1]),r.domain(Fi(i,t>1?{floor:function(t){for(;e(t=n.floor(t));)t=Ko(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=Ko(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Pi(r.domain()),i=null==n?u(e,10):"number"==typeof n?u(e,n):!n.range&&[{range:n},t];return i&&(n=i[0],t=i[1]),n.range(e[0],Ko(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return Go(n.copy(),t,e)},Yi(r,n)}function Ko(n){return new Date(n)}function Qo(n){return JSON.parse(n.responseText)}function na(n){var t=ua.createRange();return t.selectNode(ua.body),t.createContextualFragment(n.responseText)}var ta={version:"3.5.5"},ea=[].slice,ra=function(n){return ea.call(n)},ua=this.document;if(ua)try{ra(ua.documentElement.childNodes)[0].nodeType}catch(ia){ra=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}if(Date.now||(Date.now=function(){return+new Date}),ua)try{ua.createElement("DIV").style.setProperty("opacity",0,"")}catch(oa){var aa=this.Element.prototype,ca=aa.setAttribute,la=aa.setAttributeNS,sa=this.CSSStyleDeclaration.prototype,fa=sa.setProperty;aa.setAttribute=function(n,t){ca.call(this,n,t+"")},aa.set
},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var pc=new ce;ta.geo.stream=function(n,t){n&&vc.hasOwnProperty(n.type)?vc[n.type](n,t):se(n,t)};var vc={Feature:function(n,t){se(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,u=e.length;++r<u;)se(e[r].geometry,t)}},dc={Sphere:function(n,t){t.sphere()},Point:function(n,t){n=n.coordinates,t.point(n[0],n[1],n[2])},MultiPoint:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r<u;)n=e[r],t.point(n[0],n[1],n[2])},LineString:function(n,t){fe(n.coordinates,t,0)},MultiLineString:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r<u;)fe(e[r],t,0)},Polygon:function(n,t){he(n.coordinates,t)},MultiPolygon:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r<u;)he(e[r],t)},GeometryCollection:function(n,t){for(var e=n.geometries,r=-1,u=e.length;++r<u;)se(e[r],t)}};ta.geo.area=function(n){return mc=0,ta.geo.stream(n,Mc),mc};var mc,yc=new ce,Mc={sphere:function(){mc+=4*qa},point:b,lineStart:b,lineEnd:b,polygonStart:function(){yc.reset(),Mc.lineStart=ge},polygonEnd:function(){var n=2*yc;mc+=0>n?4*qa+n:n,Mc.lineStart=Mc.lineEnd=Mc.point=b}};ta.geo.bounds=function(){function n(n,t){M.push(x=[s=n,h=n]),f>t&&(f=t),t>g&&(g=t)}function t(t,e){var r=pe([t*Da,e*Da]);if(m){var u=de(m,r),i=[u[1],-u[0],0],o=de(i,u);Me(o),o=xe(o);var c=t-p,l=c>0?1:-1,v=o[0]*Pa*l,d=ga(c)>180;if(d^(v>l*p&&l*t>v)){var y=o[1]*Pa;y>g&&(g=y)}else if(v=(v+360)%360-180,d^(v>l*p&&l*t>v)){var y=-o[1]*Pa;f>y&&(f=y)}else f>e&&(f=e),e>g&&(g=e);d?p>t?a(s,t)>a(s,h)&&(h=t):a(t,h)>a(s,h)&&(s=t):h>=s?(s>t&&(s=t),t>h&&(h=t)):t>p?a(s,t)>a(s,h)&&(h=t):a(t,h)>a(s,h)&&(s=t)}else n(t,e);m=r,p=t}function e(){b.point=t}function r(){x[0]=s,x[1]=h,b.point=n,m=null}function u(n,e){if(m){var r=n-p;y+=ga(r)>180?r+(r>0?360:-360):r}else v=n,d=e;Mc.point(n,e),t(n,e)}function i(){Mc.lineStart()}function o(){u(v,d),Mc.lineEnd(),ga(y)>Ca&&(s=-(h=180)),x[0]=s,x[1]=h,m=null}function a(n,t){return(t-=n)<0?t+360:t}function c(n,t){return n[0]-t[0]}function l(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n<t[0]||t[1]<n}var s,f,h,g,p,v,d,m,y,M,x,b={point:n,lineStart:e,lineEnd:r,polygonStart:function(){b.point=u,b.lineStart=i,b.lineEnd=o,y=0,Mc.polygonStart()},polygonEnd:function(){Mc.polygonEnd(),b.point=n,b.lineStart=e,b.lineEnd=r,0>yc?(s=-(h=180),f=-(g=90)):y>Ca?g=90:-Ca>y&&(f=-90),x[0]=s,x[1]=h}};return function(n){g=h=-(s=f=1/0),M=[],ta.geo.stream(n,b);var t=M.length;if(t){M.sort(c);for(var e,r=1,u=M[0],i=[u];t>r;++r)e=M[r],l(e[0],u)||l(e[1],u)?(a(u[0],e[1])>a(u[0],u[1])&&(u[1]=e[1]),a(e[0],u[1])>a(u[0],u[1])&&(u[0]=e[0])):i.push(u=e);for(var o,e,p=-1/0,t=i.length-1,r=0,u=i[t];t>=r;u=e,++r)e=i[r],(o=a(u[1],e[0]))>p&&(p=o,s=e[0],h=u[1])}return M=x=null,1/0===s||1/0===f?[[0/0,0/0],[0/0,0/0]]:[[s,f],[h,g]]}}(),ta.geo.centroid=function(n){xc=bc=_c=wc=Sc=kc=Ec=Ac=Nc=Cc=zc=0,ta.geo.stream(n,qc);var t=Nc,e=Cc,r=zc,u=t*t+e*e+r*r;return za>u&&(t=kc,e=Ec,r=Ac,Ca>bc&&(t=_c,e=wc,r=Sc),u=t*t+e*e+r*r,za>u)?[0/0,0/0]:[Math.atan2(e,t)*Pa,tt(r/Math.sqrt(u))*Pa]};var xc,bc,_c,wc,Sc,kc,Ec,Ac,Nc,Cc,zc,qc={sphere:b,point:_e,lineStart:Se,lineEnd:ke,polygonStart:function(){qc.lineStart=Ee},polygonEnd:function(){qc.lineStart=Se}},Lc=Le(Ne,Pe,je,[-qa,-qa/2]),Tc=1e9;ta.geo.clipExtent=function(){var n,t,e,r,u,i,o={stream:function(n){return u&&(u.valid=!1),u=i(n),u.valid=!0,u},extent:function(a){return arguments.length?(i=Ie(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),u&&(u.valid=!1,u=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(ta.geo.conicEqualArea=function(){return Ye(Ze)}).raw=Ze,ta.geo.albers=function(){return ta.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},ta.geo.albersUsa=function(){function n(n){var i=n[0],o=n[1];return t=null,e(i,o),t||(r(i,o),t)||u(i,o),t}var t,e,r,u,i=ta.geo.albers(),o=ta.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=ta.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),c={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=i.scale(),e=i.translate(),r=(n[0]-e[0])/t,u=(n[1]
return i.size=function(n){return arguments.length?(l=n,i):l},i.padding=function(n){function t(t){var e=n.call(i,t,t.depth);return null==e?Ri(t):Di(t,"number"==typeof e?[e,e,e,e]:e)}function e(t){return Di(t,n)}if(!arguments.length)return s;var r;return f=null==(s=n)?Ri:"function"==(r=typeof n)?t:"number"===r?(n=[n,n,n,n],e):e,i},i.round=function(n){return arguments.length?(c=n?Math.round:Number,i):c!=Number},i.sticky=function(n){return arguments.length?(h=n,o=null,i):h},i.ratio=function(n){return arguments.length?(p=n,i):p},i.mode=function(n){return arguments.length?(g=n+"",i):g},Gu(i,a)},ta.random={normal:function(n,t){var e=arguments.length;return 2>e&&(t=1),1>e&&(n=0),function(){var e,r,u;do e=2*Math.random()-1,r=2*Math.random()-1,u=e*e+r*r;while(!u||u>1);return n+t*e*Math.sqrt(-2*Math.log(u)/u)}},logNormal:function(){var n=ta.random.normal.apply(ta,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=ta.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},ta.scale={};var ml={floor:y,ceil:y};ta.scale.linear=function(){return Ii([0,1],[0,1],mu,!1)};var yl={s:1,g:1,p:1,r:1,e:1};ta.scale.log=function(){return Ji(ta.scale.linear().domain([0,1]),10,!0,[1,10])};var Ml=ta.format(".0e"),xl={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};ta.scale.pow=function(){return Gi(ta.scale.linear(),1,[0,1])},ta.scale.sqrt=function(){return ta.scale.pow().exponent(.5)},ta.scale.ordinal=function(){return Qi([],{t:"range",a:[[]]})},ta.scale.category10=function(){return ta.scale.ordinal().range(bl)},ta.scale.category20=function(){return ta.scale.ordinal().range(_l)},ta.scale.category20b=function(){return ta.scale.ordinal().range(wl)},ta.scale.category20c=function(){return ta.scale.ordinal().range(Sl)};var bl=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(Mt),_l=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(Mt),wl=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(Mt),Sl=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(Mt);ta.scale.quantile=function(){return no([],[])},ta.scale.quantize=function(){return to(0,1,[0,1])},ta.scale.threshold=function(){return eo([.5],[0,1])},ta.scale.identity=function(){return ro([0,1])},ta.svg={},ta.svg.arc=function(){function n(){var n=Math.max(0,+e.apply(this,arguments)),l=Math.max(0,+r.apply(this,arguments)),s=o.apply(this,arguments)-Ra,f=a.apply(this,arguments)-Ra,h=Math.abs(f-s),g=s>f?0:1;if(n>l&&(p=l,l=n,n=p),h>=Ta)return t(l,g)+(n?t(n,1-g):"")+"Z";var p,v,d,m,y,M,x,b,_,w,S,k,E=0,A=0,N=[];if((m=(+c.apply(this,arguments)||0)/2)&&(d=i===kl?Math.sqrt(n*n+l*l):+i.apply(this,arguments),g||(A*=-1),l&&(A=tt(d/l*Math.sin(m))),n&&(E=tt(d/n*Math.sin(m)))),l){y=l*Math.cos(s+A),M=l*Math.sin(s+A),x=l*Math.cos(f-A),b=l*Math.sin(f-A);var C=Math.abs(f-s-2*A)<=qa?0:1;if(A&&so(y,M,x,b)===g^C){var z=(s+f)/2;y=l*Math.cos(z),M=l*Math.sin(z),x=b=null}}else y=M=0;if(n){_=n*Math.cos(f-E),w=n*Math.sin(f-E),S=n*Math.cos(s+E),k=n*Math.sin(s+E);var q=Math.abs(s-f+2*E)<=qa?0:1;if(E&&so(_,w,S,k)===1-g^q){var L=(s+f)/2;_=n*Math.cos(L),w=n*Math.sin(L),S=k=null}}else _=w=0;if((p=Math.min(Math.abs(l-n)/2,+u.apply(this,arguments)))>.001){v=l>n^g?0:1;var T=null==S?[_,w]:null==x?[y,M]:Lr([y,M],[S,k],[x,b],[_,w]),R=y-T[0],D=M-T[1],P=x-T[0],U=b-T[1],j=1/Math.sin(Math.acos((R*P+D*U)/(Math.sqrt(R*R+D*D)*Math.sqrt(P*P+U*U)))/2),F=Math.sqrt(T[0]*T[0]+T[1]*T[1]);if(null!=x){var H=Math.min(p,(l-F)/(j+1)),O=fo(null==S?[_,w]:[S,k],[y,M],l,H,g),I=fo([x,b],[_,w],l,H,g);p===H?N.push("M",O[0],"A",H,",",H," 0 0,",v," ",O[1],"A",l,",",l," 0 ",1-g^so(O[1][0],O[1][1],I[1][0],I[1][1
!function(a){"use strict";function b(a){this.owner=a}function c(a,b){if(Object.create)b.prototype=Object.create(a.prototype);else{var c=function(){};c.prototype=a.prototype,b.prototype=new c}return b.prototype.constructor=b,b}function d(a){var b=this.internal=new e(this);b.loadConfig(a),b.init(),function c(a,b,d){Object.keys(a).forEach(function(e){b[e]=a[e].bind(d),Object.keys(a[e]).length>0&&c(a[e],b[e],d)})}(h,this,this)}function e(b){var c=this;c.d3=a.d3?a.d3:"undefined"!=typeof require?require("d3"):void 0,c.api=b,c.config=c.getDefaultConfig(),c.data={},c.cache={},c.axes={}}function f(a){b.call(this,a)}function g(a,b){function c(a,b){a.attr("transform",function(a){return"translate("+Math.ceil(b(a)+u)+", 0)"})}function d(a,b){a.attr("transform",function(a){return"translate(0,"+Math.ceil(b(a))+")"})}function e(a){var b=a[0],c=a[a.length-1];return c>b?[b,c]:[c,b]}function f(a){var b,c,d=[];if(a.ticks)return a.ticks.apply(a,n);for(c=a.domain(),b=Math.ceil(c[0]);b<c[1];b++)d.push(b);return d.length>0&&d[0]>0&&d.unshift(d[0]-(d[1]-d[0])),d}function g(){var a,c=p.copy();return b.isCategory&&(a=p.domain(),c.domain([a[0],a[1]-1])),c}function h(a){var b=m?m(a):a;return"undefined"!=typeof b?b:""}function i(a){if(z)return z;var b={h:11.5,w:5.5};return a.select("text").text(h).each(function(a){var c=this.getBoundingClientRect(),d=h(a),e=c.height,f=d?c.width/d.length:void 0;e&&f&&(b.h=e,b.w=f)}).text(""),z=b,b}function j(c){return b.withoutTransition?c:a.transition(c)}function k(m){m.each(function(){function m(a,c){function d(a,b){f=void 0;for(var h=1;h<b.length;h++)if(" "===b.charAt(h)&&(f=h),e=b.substr(0,h+1),g=U.w*e.length,g>c)return d(a.concat(b.substr(0,f?f:h)),b.slice(f?f+1:h));return a.concat(b)}var e,f,g,i=h(a),j=[];return"[object Array]"===Object.prototype.toString.call(i)?i:((!c||0>=c)&&(c=X?95:b.isCategory?Math.ceil(F(G[1])-F(G[0]))-12:110),d(j,i+""))}function n(a,b){var c=U.h;return 0===b&&(c="left"===q||"right"===q?-((V[a.index]-1)*(U.h/2)-3):".71em"),c}function v(a){var b=p(a)+(o?0:u);return L[0]<b&&b<L[1]?r:0}function w(a){return a?a>0?"start":"end":"middle"}function x(a){return a?"rotate("+a+")":""}function y(a){return a?8*Math.sin(Math.PI*(a/180)):0}function z(a){return a?11.5-2.5*(a/15)*(a>0?1:-1):W}var A,B,C,D=k.g=a.select(this),E=this.__chart__||p,F=this.__chart__=g(),G=t?t:f(F),H=D.selectAll(".tick").data(G,F),I=H.enter().insert("g",".domain").attr("class","tick").style("opacity",1e-6),J=H.exit().remove(),K=j(H).style("opacity",1),L=p.rangeExtent?p.rangeExtent():e(p.range()),M=D.selectAll(".domain").data([0]),N=(M.enter().append("path").attr("class","domain"),j(M));I.append("line"),I.append("text");var O=I.select("line"),P=K.select("line"),Q=I.select("text"),R=K.select("text");b.isCategory?(u=Math.ceil((F(1)-F(0))/2),B=o?0:u,C=o?u:0):u=B=0;var S,T,U=i(D.select(".tick")),V=[],W=Math.max(r,0)+s,X="left"===q||"right"===q;S=H.select("text"),T=S.selectAll("tspan").data(function(a,c){var d=b.tickMultiline?m(a,b.tickWidth):[].concat(h(a));return V[c]=d.length,d.map(function(a){return{index:c,splitted:a}})}),T.enter().append("tspan"),T.exit().remove(),T.text(function(a){return a.splitted});var Y=b.tickTextRotate;switch(q){case"bottom":A=c,O.attr("y2",r),Q.attr("y",W),P.attr("x1",B).attr("x2",B).attr("y2",v),R.attr("x",0).attr("y",z(Y)).style("text-anchor",w(Y)).attr("transform",x(Y)),T.attr("x",0).attr("dy",n).attr("dx",y(Y)),N.attr("d","M"+L[0]+","+l+"V0H"+L[1]+"V"+l);break;case"top":A=c,O.attr("y2",-r),Q.attr("y",-W),P.attr("x2",0).attr("y2",-r),R.attr("x",0).attr("y",-W),S.style("text-anchor","middle"),T.attr("x",0).attr("dy","0em"),N.attr("d","M"+L[0]+","+-l+"V0H"+L[1]+"V"+-l);break;case"left":A=d,O.attr("x2",-r),Q.attr("x",-W),P.attr("x2",-r).attr("y1",C).attr("y2",C),R.attr("x",-W).attr("y",u),S.style("text-anchor","end"),T.attr("x",-W).attr("dy",n),N.attr("d","M"+-l+","+L[0]+"H0V"+L[1]+"H"+-l);break;case"right":A=d,O.attr("x2",r),Q.attr("x",W),P.attr("x2",r).attr("y2",0),R.attr("x",W).attr("y",0),S.style("text-anchor","start"),T.attr("x",W).attr("dy",n),N.attr("d","M"+l+","+L[0]+"H0V"+L[1]+"H"+l)}if(F.rangeBan
return d-e!==0||b.isCategorized()||(b.isTimeSeries()?(d=new Date(.5*d.getTime()),e=new Date(1.5*e.getTime())):(d=0===d?1:.5*d,e=0===e?-1:1.5*e)),(d||0===d)&&(g=b.isTimeSeries()?new Date(d.getTime()-f.left):d-f.left),(e||0===e)&&(h=b.isTimeSeries()?new Date(e.getTime()+f.right):e+f.right),[g,h]},i.updateXDomain=function(a,b,c,d,e){var f=this,g=f.config;return c&&(f.x.domain(e?e:f.d3.extent(f.getXDomain(a))),f.orgXDomain=f.x.domain(),g.zoom_enabled&&f.zoom.scale(f.x).updateScaleExtent(),f.subX.domain(f.x.domain()),f.brush&&f.brush.scale(f.subX)),b&&(f.x.domain(e?e:!f.brush||f.brush.empty()?f.orgXDomain:f.brush.extent()),g.zoom_enabled&&f.zoom.scale(f.x).updateScaleExtent()),d&&f.x.domain(f.trimXDomain(f.x.orgDomain())),f.x.domain()},i.trimXDomain=function(a){var b=this;return a[0]<=b.orgXDomain[0]&&(a[1]=+a[1]+(b.orgXDomain[0]-a[0]),a[0]=b.orgXDomain[0]),b.orgXDomain[1]<=a[1]&&(a[0]=+a[0]-(a[1]-b.orgXDomain[1]),a[1]=b.orgXDomain[1]),a},i.isX=function(a){var b=this,c=b.config;return c.data_x&&a===c.data_x||v(c.data_xs)&&x(c.data_xs,a)},i.isNotX=function(a){return!this.isX(a)},i.getXKey=function(a){var b=this,c=b.config;return c.data_x?c.data_x:v(c.data_xs)?c.data_xs[a]:null},i.getXValuesOfXKey=function(a,b){var c,d=this,e=b&&v(b)?d.mapToIds(b):[];return e.forEach(function(b){d.getXKey(b)===a&&(c=d.data.xs[b])}),c},i.getIndexByX=function(a){var b=this,c=b.filterByX(b.data.targets,a);return c.length?c[0].index:null},i.getXValue=function(a,b){var c=this;return a in c.data.xs&&c.data.xs[a]&&m(c.data.xs[a][b])?c.data.xs[a][b]:b},i.getOtherTargetXs=function(){var a=this,b=Object.keys(a.data.xs);return b.length?a.data.xs[b[0]]:null},i.getOtherTargetX=function(a){var b=this.getOtherTargetXs();return b&&a<b.length?b[a]:null},i.addXs=function(a){var b=this;Object.keys(a).forEach(function(c){b.config.data_xs[c]=a[c]})},i.hasMultipleX=function(a){return this.d3.set(Object.keys(a).map(function(b){return a[b]})).size()>1},i.isMultipleX=function(){return v(this.config.data_xs)||!this.config.data_xSort||this.hasType("scatter")},i.addName=function(a){var b,c=this;return a&&(b=c.config.data_names[a.id],a.name=b?b:a.id),a},i.getValueOnIndex=function(a,b){var c=a.filter(function(a){return a.index===b});return c.length?c[0]:null},i.updateTargetX=function(a,b){var c=this;a.forEach(function(a){a.values.forEach(function(d,e){d.x=c.generateTargetX(b[e],a.id,e)}),c.data.xs[a.id]=b})},i.updateTargetXs=function(a,b){var c=this;a.forEach(function(a){b[a.id]&&c.updateTargetX([a],b[a.id])})},i.generateTargetX=function(a,b,c){var d,e=this;return d=e.isTimeSeries()?e.parseDate(a?a:e.getXValue(b,c)):e.isCustomX()&&!e.isCategorized()?m(a)?+a:e.getXValue(b,c):c},i.cloneTarget=function(a){return{id:a.id,id_org:a.id_org,values:a.values.map(function(a){return{x:a.x,value:a.value,id:a.id}})}},i.updateXs=function(){var a=this;a.data.targets.length&&(a.xs=[],a.data.targets[0].values.forEach(function(b){a.xs[b.index]=b.x}))},i.getPrevX=function(a){var b=this.xs[a-1];return"undefined"!=typeof b?b:null},i.getNextX=function(a){var b=this.xs[a+1];return"undefined"!=typeof b?b:null},i.getMaxDataCount=function(){var a=this;return a.d3.max(a.data.targets,function(a){return a.values.length})},i.getMaxDataCountTarget=function(a){var b,c=a.length,d=0;return c>1?a.forEach(function(a){a.values.length>d&&(b=a,d=a.values.length)}):b=c?a[0]:null,b},i.getEdgeX=function(a){var b=this;return a.length?[b.d3.min(a,function(a){return a.values[0].x}),b.d3.max(a,function(a){return a.values[a.values.length-1].x})]:[0,0]},i.mapToIds=function(a){return a.map(function(a){return a.id})},i.mapToTargetIds=function(a){var b=this;return a?o(a)?[a]:a:b.mapToIds(b.data.targets)},i.hasTarget=function(a,b){var c,d=this.mapToIds(a);for(c=0;c<d.length;c++)if(d[c]===b)return!0;return!1},i.isTargetToShow=function(a){return this.hiddenTargetIds.indexOf(a)<0},i.isLegendToShow=function(a){return this.hiddenLegendIds.indexOf(a)<0},i.filterTargetsToShow=function(a){var b=this;return a.filter(function(a){return b.isTargetToShow(a.id)})},i.mapTargetsToUniqueXs=function(a){var b=this,c=b.d3.set(b.d3.merge(a.
return function(a,b){var d=j.call(c,a.id)(0),e=i(a,b)||d,k=g(a),l=h(a);return c.config.axis_rotated&&(0<a.value&&d>l||a.value<0&&l>d)&&(l=d),[[k,e],[k,l-(d-e)],[k+f,l-(d-e)],[k+f,e]]}},i.isWithinBar=function(a){var b=this.d3.mouse(a),c=a.getBoundingClientRect(),d=a.pathSegList.getItem(0),e=a.pathSegList.getItem(1),f=Math.min(d.x,e.x),g=Math.min(d.y,e.y),h=c.width,i=c.height,j=2,k=f-j,l=f+h+j,m=g+i+j,n=g-j;return k<b[0]&&b[0]<l&&n<b[1]&&b[1]<m},i.initText=function(){var a=this;a.main.select("."+l.chart).append("g").attr("class",l.chartTexts),a.mainText=a.d3.selectAll([])},i.updateTargetsForText=function(a){var b,c,d=this,e=d.classChartText.bind(d),f=d.classTexts.bind(d),g=d.classFocus.bind(d);b=d.main.select("."+l.chartTexts).selectAll("."+l.chartText).data(a).attr("class",function(a){return e(a)+g(a)}),c=b.enter().append("g").attr("class",e).style("opacity",0).style("pointer-events","none"),c.append("g").attr("class",f)},i.updateText=function(a){var b=this,c=b.config,d=b.barOrLineData.bind(b),e=b.classText.bind(b);b.mainText=b.main.selectAll("."+l.texts).selectAll("."+l.text).data(d),b.mainText.enter().append("text").attr("class",e).attr("text-anchor",function(a){return c.axis_rotated?a.value<0?"end":"start":"middle"}).style("stroke","none").style("fill",function(a){return b.color(a)}).style("fill-opacity",0),b.mainText.text(function(a,c,d){return b.dataLabelFormat(a.id)(a.value,a.id,c,d)}),b.mainText.exit().transition().duration(a).style("fill-opacity",0).remove()},i.redrawText=function(a,b,c,d){return[(d?this.mainText.transition():this.mainText).attr("x",a).attr("y",b).style("fill",this.color).style("fill-opacity",c?0:this.opacityForText.bind(this))]},i.getTextRect=function(a,b){var c,d=this.d3.select("body").append("div").classed("c3",!0),e=d.append("svg").style("visibility","hidden").style("position","fixed").style("top",0).style("left",0);return e.selectAll(".dummy").data([a]).enter().append("text").classed(b?b:"",!0).text(a).each(function(){c=this.getBoundingClientRect()}),d.remove(),c},i.generateXYForText=function(a,b,c,d){var e=this,f=e.generateGetAreaPoints(a,!1),g=e.generateGetBarPoints(b,!1),h=e.generateGetLinePoints(c,!1),i=d?e.getXForText:e.getYForText;return function(a,b){var c=e.isAreaType(a)?f:e.isBarType(a)?g:h;return i.call(e,c(a,b),a,this)}},i.getXForText=function(a,b,c){var d,e,f=this,g=c.getBoundingClientRect();return f.config.axis_rotated?(e=f.isBarType(b)?4:6,d=a[2][1]+e*(b.value<0?-1:1)):d=f.hasType("bar")?(a[2][0]+a[0][0])/2:a[0][0],null===b.value&&(d>f.width?d=f.width-g.width:0>d&&(d=4)),d},i.getYForText=function(a,b,c){var d,e=this,f=c.getBoundingClientRect();return e.config.axis_rotated?d=(a[0][0]+a[2][0]+.6*f.height)/2:(d=a[2][1],b.value<0?(d+=f.height,e.isBarType(b)&&e.isSafari()?d-=3:!e.isBarType(b)&&e.isChrome()&&(d+=3)):d+=e.isBarType(b)?-3:-6),null!==b.value||e.config.axis_rotated||(d<f.height?d=f.height:d>this.height&&(d=this.height-4)),d},i.setTargetType=function(a,b){var c=this,d=c.config;c.mapToTargetIds(a).forEach(function(a){c.withoutFadeIn[a]=b===d.data_types[a],d.data_types[a]=b}),a||(d.data_type=b)},i.hasType=function(a,b){var c=this,d=c.config.data_types,e=!1;return b=b||c.data.targets,b&&b.length?b.forEach(function(b){var c=d[b.id];(c&&c.indexOf(a)>=0||!c&&"line"===a)&&(e=!0)}):Object.keys(d).length?Object.keys(d).forEach(function(b){d[b]===a&&(e=!0)}):e=c.config.data_type===a,e},i.hasArcType=function(a){return this.hasType("pie",a)||this.hasType("donut",a)||this.hasType("gauge",a)},i.isLineType=function(a){var b=this.config,c=o(a)?a:a.id;return!b.data_types[c]||["line","spline","area","area-spline","step","area-step"].indexOf(b.data_types[c])>=0},i.isStepType=function(a){var b=o(a)?a:a.id;return["step","area-step"].indexOf(this.config.data_types[b])>=0},i.isSplineType=function(a){var b=o(a)?a:a.id;return["spline","area-spline"].indexOf(this.config.data_types[b])>=0},i.isAreaType=function(a){var b=o(a)?a:a.id;return["area","area-spline","area-step"].indexOf(this.config.data_types[b])>=0},i.isBarType=function(a){var b=o(a)?a:a.id;return"bar"===this.config.data_types[b]},i.
return d.pie(d.filterTargetsToShow(d.data.targets)).forEach(function(b){f||b.data.id!==a.data.id||(f=!0,a=b,a.index=g),g++}),isNaN(a.startAngle)&&(a.startAngle=0),isNaN(a.endAngle)&&(a.endAngle=a.startAngle),d.isGaugeType(a.data)&&(b=Math.PI/(i-h),c=a.value<h?0:a.value<i?a.value-h:i-h,a.startAngle=-1*(Math.PI/2),a.endAngle=a.startAngle+b*c),f?a:null},i.getSvgArc=function(){var a=this,b=a.d3.svg.arc().outerRadius(a.radius).innerRadius(a.innerRadius),c=function(c,d){var e;return d?b(c):(e=a.updateAngle(c),e?b(e):"M 0 0")};return c.centroid=b.centroid,c},i.getSvgArcExpanded=function(a){var b=this,c=b.d3.svg.arc().outerRadius(b.radiusExpanded*(a?a:1)).innerRadius(b.innerRadius);return function(a){var d=b.updateAngle(a);return d?c(d):"M 0 0"}},i.getArc=function(a,b,c){return c||this.isArcType(a.data)?this.svgArc(a,b):"M 0 0"},i.transformForArcLabel=function(a){var b,c,d,e,f,g=this,h=g.updateAngle(a),i="";return h&&!g.hasType("gauge")&&(b=this.svgArc.centroid(h),c=isNaN(b[0])?0:b[0],d=isNaN(b[1])?0:b[1],e=Math.sqrt(c*c+d*d),f=g.radius&&e?(36/g.radius>.375?1.175-36/g.radius:.8)*g.radius/e:0,i="translate("+c*f+","+d*f+")"),i},i.getArcRatio=function(a){var b=this,c=b.hasType("gauge")?Math.PI:2*Math.PI;return a?(a.endAngle-a.startAngle)/c:null},i.convertToArcData=function(a){return this.addName({id:a.data.id,value:a.value,ratio:this.getArcRatio(a),index:a.index})},i.textForArcLabel=function(a){var b,c,d,e,f,g=this;return g.shouldShowArcLabel()?(b=g.updateAngle(a),c=b?b.value:null,d=g.getArcRatio(b),e=a.data.id,g.hasType("gauge")||g.meetsArcLabelThreshold(d)?(f=g.getArcLabelFormat(),f?f(c,d,e):g.defaultArcValueFormat(c,d)):""):""},i.expandArc=function(b){var c,d=this;return d.transiting?void(c=a.setInterval(function(){d.transiting||(a.clearInterval(c),d.legend.selectAll(".c3-legend-item-focused").size()>0&&d.expandArc(b))},10)):(b=d.mapToTargetIds(b),void d.svg.selectAll(d.selectorTargets(b,"."+l.chartArc)).each(function(a){d.shouldExpand(a.data.id)&&d.d3.select(this).selectAll("path").transition().duration(50).attr("d",d.svgArcExpanded).transition().duration(100).attr("d",d.svgArcExpandedSub).each(function(a){d.isDonutType(a.data)})}))},i.unexpandArc=function(a){var b=this;b.transiting||(a=b.mapToTargetIds(a),b.svg.selectAll(b.selectorTargets(a,"."+l.chartArc)).selectAll("path").transition().duration(50).attr("d",b.svgArc),b.svg.selectAll("."+l.arc).style("opacity",1))},i.shouldExpand=function(a){var b=this,c=b.config;return b.isDonutType(a)&&c.donut_expand||b.isGaugeType(a)&&c.gauge_expand||b.isPieType(a)&&c.pie_expand},i.shouldShowArcLabel=function(){var a=this,b=a.config,c=!0;return a.hasType("donut")?c=b.donut_label_show:a.hasType("pie")&&(c=b.pie_label_show),c},i.meetsArcLabelThreshold=function(a){var b=this,c=b.config,d=b.hasType("donut")?c.donut_label_threshold:c.pie_label_threshold;return a>=d},i.getArcLabelFormat=function(){var a=this,b=a.config,c=b.pie_label_format;return a.hasType("gauge")?c=b.gauge_label_format:a.hasType("donut")&&(c=b.donut_label_format),c},i.getArcTitle=function(){var a=this;return a.hasType("donut")?a.config.donut_title:""},i.updateTargetsForArc=function(a){var b,c,d=this,e=d.main,f=d.classChartArc.bind(d),g=d.classArcs.bind(d),h=d.classFocus.bind(d);b=e.select("."+l.chartArcs).selectAll("."+l.chartArc).data(d.pie(a)).attr("class",function(a){return f(a)+h(a.data)}),c=b.enter().append("g").attr("class",f),c.append("g").attr("class",g),c.append("text").attr("dy",d.hasType("gauge")?"-.1em":".35em").style("opacity",0).style("text-anchor","middle").style("pointer-events","none")},i.initArc=function(){var a=this;a.arcs=a.main.select("."+l.chart).append("g").attr("class",l.chartArcs).attr("transform",a.getTranslate("arc")),a.arcs.append("text").attr("class",l.chartArcsTitle).style("text-anchor","middle").text(a.getArcTitle())},i.redrawArc=function(a,b,c){var d,e=this,f=e.d3,g=e.config,h=e.main;d=h.selectAll("."+l.arcs).selectAll("."+l.arc).data(e.arcData.bind(e)),d.enter().append("path").attr("class",e.classArc.bind(e)).style("fill",function(a){return e.color(a.data)}).style("cursor",function(a){retu
}).call(C,function(){var a,d=[],e=[],f=[];if(w){for(a=0;w>a;a++)d.push("."+l.shape+"-"+(v+a)),e.push("."+l.text+"-"+(v+a)),f.push("."+l.eventRect+"-"+(v+a));b.svg.selectAll("."+l.shapes).selectAll(d).remove(),b.svg.selectAll("."+l.texts).selectAll(e).remove(),b.svg.selectAll("."+l.eventRects).selectAll(f).remove(),b.svg.select("."+l.xgrid).remove()}D.attr("transform",null).attr(b.xgridAttr),E.attr("transform",null),E.select("line").attr("x1",c.axis_rotated?0:p).attr("x2",c.axis_rotated?b.width:p),E.select("text").attr("x",c.axis_rotated?b.width:0).attr("y",p),H.attr("transform",null).attr("d",j),I.attr("transform",null).attr("d",k),J.attr("transform",null).attr("d",m),K.attr("transform",null).attr("cx",n).attr("cy",o),G.attr("transform",null).attr("x",q).attr("y",r).style("fill-opacity",b.opacityForText.bind(b)),F.attr("transform",null),F.select("rect").filter(b.isRegionOnX).attr("x",b.regionX.bind(b)).attr("width",b.regionWidth.bind(b)),c.interaction_enabled&&b.redrawEventRect(),B(),b.flowing=!1})}},h.selected=function(a){var b=this.internal,c=b.d3;return c.merge(b.main.selectAll("."+l.shapes+b.getTargetSelectorSuffix(a)).selectAll("."+l.shape).filter(function(){return c.select(this).classed(l.SELECTED)}).map(function(a){return a.map(function(a){var b=a.__data__;return b.data?b.data:b})}))},h.select=function(a,b,c){var d=this.internal,e=d.d3,f=d.config;f.data_selection_enabled&&d.main.selectAll("."+l.shapes).selectAll("."+l.shape).each(function(g,h){var i=e.select(this),j=g.data?g.data.id:g.id,k=d.getToggle(this,g).bind(d),m=f.data_selection_grouped||!a||a.indexOf(j)>=0,n=!b||b.indexOf(h)>=0,o=i.classed(l.SELECTED);i.classed(l.line)||i.classed(l.area)||(m&&n?f.data_selection_isselectable(g)&&!o&&k(!0,i.classed(l.SELECTED,!0),g,h):q(c)&&c&&o&&k(!1,i.classed(l.SELECTED,!1),g,h))})},h.unselect=function(a,b){var c=this.internal,d=c.d3,e=c.config;e.data_selection_enabled&&c.main.selectAll("."+l.shapes).selectAll("."+l.shape).each(function(f,g){var h=d.select(this),i=f.data?f.data.id:f.id,j=c.getToggle(this,f).bind(c),k=e.data_selection_grouped||!a||a.indexOf(i)>=0,m=!b||b.indexOf(g)>=0,n=h.classed(l.SELECTED);h.classed(l.line)||h.classed(l.area)||k&&m&&e.data_selection_isselectable(f)&&n&&j(!1,h.classed(l.SELECTED,!1),f,g)})},h.transform=function(a,b){var c=this.internal,d=["pie","donut"].indexOf(a)>=0?{withTransform:!0}:null;c.transformTo(b,a,d)},i.transformTo=function(a,b,c){var d=this,e=!d.hasArcType(),f=c||{withTransitionForAxis:e};f.withTransitionForTransform=!1,d.transiting=!1,d.setTargetType(a,b),d.updateTargets(d.data.targets),d.updateAndRedraw(f)},h.groups=function(a){var b=this.internal,c=b.config;return p(a)?c.data_groups:(c.data_groups=a,b.redraw(),c.data_groups)},h.xgrids=function(a){var b=this.internal,c=b.config;return a?(c.grid_x_lines=a,b.redrawWithoutRescale(),c.grid_x_lines):c.grid_x_lines},h.xgrids.add=function(a){var b=this.internal;return this.xgrids(b.config.grid_x_lines.concat(a?a:[]))},h.xgrids.remove=function(a){var b=this.internal;b.removeGridLines(a,!0)},h.ygrids=function(a){var b=this.internal,c=b.config;return a?(c.grid_y_lines=a,b.redrawWithoutRescale(),c.grid_y_lines):c.grid_y_lines},h.ygrids.add=function(a){var b=this.internal;return this.ygrids(b.config.grid_y_lines.concat(a?a:[]))},h.ygrids.remove=function(a){var b=this.internal;b.removeGridLines(a,!1)},h.regions=function(a){var b=this.internal,c=b.config;return a?(c.regions=a,b.redrawWithoutRescale(),c.regions):c.regions},h.regions.add=function(a){var b=this.internal,c=b.config;return a?(c.regions=c.regions.concat(a),b.redrawWithoutRescale(),c.regions):c.regions},h.regions.remove=function(a){var b,c,d,e=this.internal,f=e.config;return a=a||{},b=e.getOption(a,"duration",f.transition_duration),c=e.getOption(a,"classes",[l.region]),d=e.main.select("."+l.regions).selectAll(c.map(function(a){return"."+a})),(b?d.transition().duration(b):d).style("opacity",0).remove(),f.regions=f.regions.filter(function(a){var b=!1;return a["class"]?(a["class"].split(" ").forEach(function(a){c.indexOf(a)>=0&&(b=!0)}),!b):!0}),f.regions},h.data=function(a){var b=
(function() {
var callWithJQuery,
indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },
slice = [].slice,
bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
hasProp = {}.hasOwnProperty;
callWithJQuery = function(pivotModule) {
if (typeof exports === "object" && typeof module === "object") {
return pivotModule(require("jquery"));
} else if (typeof define === "function" && define.amd) {
return define(["jquery"], pivotModule);
} else {
return pivotModule(jQuery);
}
};
callWithJQuery(function($) {
/*
Utilities
*/
var PivotData, addSeparators, aggregatorTemplates, aggregators, dayNamesEn, derivers, getSort, locales, mthNamesEn, naturalSort, numberFormat, pivotTableRenderer, renderers, sortAs, usFmt, usFmtInt, usFmtPct, zeroPad;
addSeparators = function(nStr, thousandsSep, decimalSep) {
var rgx, x, x1, x2;
nStr += '';
x = nStr.split('.');
x1 = x[0];
x2 = x.length > 1 ? decimalSep + x[1] : '';
rgx = /(\d+)(\d{3})/;
while (rgx.test(x1)) {
x1 = x1.replace(rgx, '$1' + thousandsSep + '$2');
}
return x1 + x2;
};
numberFormat = function(opts) {
var defaults;
defaults = {
digitsAfterDecimal: 2,
scaler: 1,
thousandsSep: ",",
decimalSep: ".",
prefix: "",
suffix: "",
showZero: false
};
opts = $.extend(defaults, opts);
return function(x) {
var result;
if (isNaN(x) || !isFinite(x)) {
return "";
}
if (x === 0 && !opts.showZero) {
return "";
}
result = addSeparators((opts.scaler * x).toFixed(opts.digitsAfterDecimal), opts.thousandsSep, opts.decimalSep);
return "" + opts.prefix + result + opts.suffix;
};
};
usFmt = numberFormat();
usFmtInt = numberFormat({
digitsAfterDecimal: 0
});
usFmtPct = numberFormat({
digitsAfterDecimal: 1,
scaler: 100,
suffix: "%"
});
aggregatorTemplates = {
count: function(formatter) {
if (formatter == null) {
formatter = usFmtInt;
}
return function() {
return function(data, rowKey, colKey) {
return {
count: 0,
push: function() {
return this.count++;
},
value: function() {
return this.count;
},
format: formatter
};
};
};
},
countUnique: function(formatter) {
if (formatter == null) {
formatter = usFmtInt;
}
return function(arg) {
var attr;
attr = arg[0];
return function(data, rowKey, colKey) {
return {
uniq: [],
push: function(record) {
var ref;
if (ref = record[attr], indexOf.call(this.uniq, ref) < 0) {
return this.uniq.push(record[attr]);
}
},
value: function() {
return this.uniq.length;
},
format: formatter,
numInputs: attr != null ? 0 : 1
};
};
};
},
listUnique: function(sep) {
return function(arg) {
var attr;
attr = arg[0];
return function(data, rowKey, colKey) {
return {
uniq: [],
push: function(record) {
var ref;
if (ref = record[attr], indexOf.call(this.uniq, ref) < 0) {
return this.uniq.push(record[attr]);
}
},
value: function() {
return this.uniq.join(sep);
},
format: function(x) {
return x;
},
numInputs: attr != null ? 0 : 1
};
};
};
},
sum: function(formatter) {
if (formatter == null) {
formatter = usFmt;
}
return function(arg) {
var attr;
attr = arg[0];
return function(data, rowKey, colKey) {
return {
sum: 0,
push: function(record) {
if (!isNaN(parseFloat(record[attr]))) {
return this.sum += parseFloat(record[attr]);
}
},
value: function() {
return this.sum;
},
format: formatter,
numInputs: attr != null ? 0 : 1
};
};
};
},
min: function(formatter) {
if (formatter == null) {
formatter = usFmt;
}
return function(arg) {
var attr;
attr = arg[0];
return function(data, rowKey, colKey) {
return {
val: null,
push: function(record) {
var ref, x;
x = parseFloat(record[attr]);
if (!isNaN(x)) {
return this.val = Math.min(x, (ref = this.val) != null ? ref : x);
}
},
value: function() {
return this.val;
},
format: formatter,
numInputs: attr != null ? 0 : 1
};
};
};
},
max: function(formatter) {
if (formatter == null) {
formatter = usFmt;
}
return function(arg) {
var attr;
attr = arg[0];
return function(data, rowKey, colKey) {
return {
val: null,
push: function(record) {
var ref, x;
x = parseFloat(record[attr]);
if (!isNaN(x)) {
return this.val = Math.max(x, (ref = this.val) != null ? ref : x);
}
},
value: function() {
return this.val;
},
format: formatter,
numInputs: attr != null ? 0 : 1
};
};
};
},
average: function(formatter) {
if (formatter == null) {
formatter = usFmt;
}
return function(arg) {
var attr;
attr = arg[0];
return function(data, rowKey, colKey) {
return {
sum: 0,
len: 0,
push: function(record) {
if (!isNaN(parseFloat(record[attr]))) {
this.sum += parseFloat(record[attr]);
return this.len++;
}
},
value: function() {
return this.sum / this.len;
},
format: formatter,
numInputs: attr != null ? 0 : 1
};
};
};
},
sumOverSum: function(formatter) {
if (formatter == null) {
formatter = usFmt;
}
return function(arg) {
var denom, num;
num = arg[0], denom = arg[1];
return function(data, rowKey, colKey) {
return {
sumNum: 0,
sumDenom: 0,
push: function(record) {
if (!isNaN(parseFloat(record[num]))) {
this.sumNum += parseFloat(record[num]);
}
if (!isNaN(parseFloat(record[denom]))) {
return this.sumDenom += parseFloat(record[denom]);
}
},
value: function() {
return this.sumNum / this.sumDenom;
},
format: formatter,
numInputs: (num != null) && (denom != null) ? 0 : 2
};
};
};
},
sumOverSumBound80: function(upper, formatter) {
if (upper == null) {
upper = true;
}
if (formatter == null) {
formatter = usFmt;
}
return function(arg) {
var denom, num;
num = arg[0], denom = arg[1];
return function(data, rowKey, colKey) {
return {
sumNum: 0,
sumDenom: 0,
push: function(record) {
if (!isNaN(parseFloat(record[num]))) {
this.sumNum += parseFloat(record[num]);
}
if (!isNaN(parseFloat(record[denom]))) {
return this.sumDenom += parseFloat(record[denom]);
}
},
value: function() {
var sign;
sign = upper ? 1 : -1;
return (0.821187207574908 / this.sumDenom + this.sumNum / this.sumDenom + 1.2815515655446004 * sign * Math.sqrt(0.410593603787454 / (this.sumDenom * this.sumDenom) + (this.sumNum * (1 - this.sumNum / this.sumDenom)) / (this.sumDenom * this.sumDenom))) / (1 + 1.642374415149816 / this.sumDenom);
},
format: formatter,
numInputs: (num != null) && (denom != null) ? 0 : 2
};
};
};
},
fractionOf: function(wrapped, type, formatter) {
if (type == null) {
type = "total";
}
if (formatter == null) {
formatter = usFmtPct;
}
return function() {
var x;
x = 1 <= arguments.length ? slice.call(arguments, 0) : [];
return function(data, rowKey, colKey) {
return {
selector: {
total: [[], []],
row: [rowKey, []],
col: [[], colKey]
}[type],
inner: wrapped.apply(null, x)(data, rowKey, colKey),
push: function(record) {
return this.inner.push(record);
},
format: formatter,
value: function() {
return this.inner.value() / data.getAggregator.apply(data, this.selector).inner.value();
},
numInputs: wrapped.apply(null, x)().numInputs
};
};
};
}
};
aggregators = (function(tpl) {
return {
"Count": tpl.count(usFmtInt),
"Count Unique Values": tpl.countUnique(usFmtInt),
"List Unique Values": tpl.listUnique(", "),
"Sum": tpl.sum(usFmt),
"Integer Sum": tpl.sum(usFmtInt),
"Average": tpl.average(usFmt),
"Minimum": tpl.min(usFmt),
"Maximum": tpl.max(usFmt),
"Sum over Sum": tpl.sumOverSum(usFmt),
"80% Upper Bound": tpl.sumOverSumBound80(true, usFmt),
"80% Lower Bound": tpl.sumOverSumBound80(false, usFmt),
"Sum as Fraction of Total": tpl.fractionOf(tpl.sum(), "total", usFmtPct),
"Sum as Fraction of Rows": tpl.fractionOf(tpl.sum(), "row", usFmtPct),
"Sum as Fraction of Columns": tpl.fractionOf(tpl.sum(), "col", usFmtPct),
"Count as Fraction of Total": tpl.fractionOf(tpl.count(), "total", usFmtPct),
"Count as Fraction of Rows": tpl.fractionOf(tpl.count(), "row", usFmtPct),
"Count as Fraction of Columns": tpl.fractionOf(tpl.count(), "col", usFmtPct)
};
})(aggregatorTemplates);
renderers = {
"Table": function(pvtData, opts) {
return pivotTableRenderer(pvtData, opts);
},
"Table Barchart": function(pvtData, opts) {
return $(pivotTableRenderer(pvtData, opts)).barchart();
},
"Heatmap": function(pvtData, opts) {
return $(pivotTableRenderer(pvtData, opts)).heatmap();
},
"Row Heatmap": function(pvtData, opts) {
return $(pivotTableRenderer(pvtData, opts)).heatmap("rowheatmap");
},
"Col Heatmap": function(pvtData, opts) {
return $(pivotTableRenderer(pvtData, opts)).heatmap("colheatmap");
}
};
locales = {
en: {
aggregators: aggregators,
renderers: renderers,
localeStrings: {
renderError: "An error occurred rendering the PivotTable results.",
computeError: "An error occurred computing the PivotTable results.",
uiRenderError: "An error occurred rendering the PivotTable UI.",
selectAll: "Select All",
selectNone: "Select None",
tooMany: "(too many to list)",
filterResults: "Filter results",
totals: "Totals",
vs: "vs",
by: "by"
}
}
};
mthNamesEn = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
dayNamesEn = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
zeroPad = function(number) {
return ("0" + number).substr(-2, 2);
};
derivers = {
bin: function(col, binWidth) {
return function(record) {
return record[col] - record[col] % binWidth;
};
},
dateFormat: function(col, formatString, utcOutput, mthNames, dayNames) {
var utc;
if (utcOutput == null) {
utcOutput = false;
}
if (mthNames == null) {
mthNames = mthNamesEn;
}
if (dayNames == null) {
dayNames = dayNamesEn;
}
utc = utcOutput ? "UTC" : "";
return function(record) {
var date;
date = new Date(Date.parse(record[col]));
if (isNaN(date)) {
return "";
}
return formatString.replace(/%(.)/g, function(m, p) {
switch (p) {
case "y":
return date["get" + utc + "FullYear"]();
case "m":
return zeroPad(date["get" + utc + "Month"]() + 1);
case "n":
return mthNames[date["get" + utc + "Month"]()];
case "d":
return zeroPad(date["get" + utc + "Date"]());
case "w":
return dayNames[date["get" + utc + "Day"]()];
case "x":
return date["get" + utc + "Day"]();
case "H":
return zeroPad(date["get" + utc + "Hours"]());
case "M":
return zeroPad(date["get" + utc + "Minutes"]());
case "S":
return zeroPad(date["get" + utc + "Seconds"]());
default:
return "%" + p;
}
});
};
}
};
naturalSort = (function(_this) {
return function(as, bs) {
var a, a1, b, b1, rd, rx, rz;
rx = /(\d+)|(\D+)/g;
rd = /\d/;
rz = /^0/;
if (typeof as === "number" || typeof bs === "number") {
if (isNaN(as)) {
return 1;
}
if (isNaN(bs)) {
return -1;
}
return as - bs;
}
a = String(as).toLowerCase();
b = String(bs).toLowerCase();
if (a === b) {
return 0;
}
if (!(rd.test(a) && rd.test(b))) {
return (a > b ? 1 : -1);
}
a = a.match(rx);
b = b.match(rx);
while (a.length && b.length) {
a1 = a.shift();
b1 = b.shift();
if (a1 !== b1) {
if (rd.test(a1) && rd.test(b1)) {
return a1.replace(rz, ".0") - b1.replace(rz, ".0");
} else {
return (a1 > b1 ? 1 : -1);
}
}
}
return a.length - b.length;
};
})(this);
sortAs = function(order) {
var i, mapping, x;
mapping = {};
for (i in order) {
x = order[i];
mapping[x] = i;
}
return function(a, b) {
if ((mapping[a] != null) && (mapping[b] != null)) {
return mapping[a] - mapping[b];
} else if (mapping[a] != null) {
return -1;
} else if (mapping[b] != null) {
return 1;
} else {
return naturalSort(a, b);
}
};
};
getSort = function(sorters, attr) {
var sort;
sort = sorters(attr);
if ($.isFunction(sort)) {
return sort;
} else {
return naturalSort;
}
};
/*
Data Model class
*/
PivotData = (function() {
function PivotData(input, opts) {
this.getAggregator = bind(this.getAggregator, this);
this.getRowKeys = bind(this.getRowKeys, this);
this.getColKeys = bind(this.getColKeys, this);
this.sortKeys = bind(this.sortKeys, this);
this.arrSort = bind(this.arrSort, this);
this.aggregator = opts.aggregator;
this.aggregatorName = opts.aggregatorName;
this.colAttrs = opts.cols;
this.rowAttrs = opts.rows;
this.valAttrs = opts.vals;
this.sorters = opts.sorters;
this.tree = {};
this.rowKeys = [];
this.colKeys = [];
this.rowTotals = {};
this.colTotals = {};
this.allTotal = this.aggregator(this, [], []);
this.sorted = false;
PivotData.forEachRecord(input, opts.derivedAttributes, (function(_this) {
return function(record) {
if (opts.filter(record)) {
return _this.processRecord(record);
}
};
})(this));
}
PivotData.forEachRecord = function(input, derivedAttributes, f) {
var addRecord, compactRecord, i, j, k, l, len1, record, ref, results, results1, tblCols;
if ($.isEmptyObject(derivedAttributes)) {
addRecord = f;
} else {
addRecord = function(record) {
var k, ref, v;
for (k in derivedAttributes) {
v = derivedAttributes[k];
record[k] = (ref = v(record)) != null ? ref : record[k];
}
return f(record);
};
}
if ($.isFunction(input)) {
return input(addRecord);
} else if ($.isArray(input)) {
if ($.isArray(input[0])) {
results = [];
for (i in input) {
if (!hasProp.call(input, i)) continue;
compactRecord = input[i];
if (!(i > 0)) {
continue;
}
record = {};
ref = input[0];
for (j in ref) {
if (!hasProp.call(ref, j)) continue;
k = ref[j];
record[k] = compactRecord[j];
}
results.push(addRecord(record));
}
return results;
} else {
results1 = [];
for (l = 0, len1 = input.length; l < len1; l++) {
record = input[l];
results1.push(addRecord(record));
}
return results1;
}
} else if (input instanceof jQuery) {
tblCols = [];
$("thead > tr > th", input).each(function(i) {
return tblCols.push($(this).text());
});
return $("tbody > tr", input).each(function(i) {
record = {};
$("td", this).each(function(j) {
return record[tblCols[j]] = $(this).text();
});
return addRecord(record);
});
} else {
throw new Error("unknown input format");
}
};
PivotData.convertToArray = function(input) {
var result;
result = [];
PivotData.forEachRecord(input, {}, function(record) {
return result.push(record);
});
return result;
};
PivotData.prototype.arrSort = function(attrs) {
var a, sortersArr;
sortersArr = (function() {
var l, len1, results;
results = [];
for (l = 0, len1 = attrs.length; l < len1; l++) {
a = attrs[l];
results.push(getSort(this.sorters, a));
}
return results;
}).call(this);
return function(a, b) {
var comparison, i, sorter;
for (i in sortersArr) {
if (!hasProp.call(sortersArr, i)) continue;
sorter = sortersArr[i];
comparison = sorter(a[i], b[i]);
if (comparison !== 0) {
return comparison;
}
}
return 0;
};
};
PivotData.prototype.sortKeys = function() {
if (!this.sorted) {
this.sorted = true;
this.rowKeys.sort(this.arrSort(this.rowAttrs));
return this.colKeys.sort(this.arrSort(this.colAttrs));
}
};
PivotData.prototype.getColKeys = function() {
this.sortKeys();
return this.colKeys;
};
PivotData.prototype.getRowKeys = function() {
this.sortKeys();
return this.rowKeys;
};
PivotData.prototype.processRecord = function(record) {
var colKey, flatColKey, flatRowKey, l, len1, len2, n, ref, ref1, ref2, ref3, rowKey, x;
colKey = [];
rowKey = [];
ref = this.colAttrs;
for (l = 0, len1 = ref.length; l < len1; l++) {
x = ref[l];
colKey.push((ref1 = record[x]) != null ? ref1 : "null");
}
ref2 = this.rowAttrs;
for (n = 0, len2 = ref2.length; n < len2; n++) {
x = ref2[n];
rowKey.push((ref3 = record[x]) != null ? ref3 : "null");
}
flatRowKey = rowKey.join(String.fromCharCode(0));
flatColKey = colKey.join(String.fromCharCode(0));
this.allTotal.push(record);
if (rowKey.length !== 0) {
if (!this.rowTotals[flatRowKey]) {
this.rowKeys.push(rowKey);
this.rowTotals[flatRowKey] = this.aggregator(this, rowKey, []);
}
this.rowTotals[flatRowKey].push(record);
}
if (colKey.length !== 0) {
if (!this.colTotals[flatColKey]) {
this.colKeys.push(colKey);
this.colTotals[flatColKey] = this.aggregator(this, [], colKey);
}
this.colTotals[flatColKey].push(record);
}
if (colKey.length !== 0 && rowKey.length !== 0) {
if (!this.tree[flatRowKey]) {
this.tree[flatRowKey] = {};
}
if (!this.tree[flatRowKey][flatColKey]) {
this.tree[flatRowKey][flatColKey] = this.aggregator(this, rowKey, colKey);
}
return this.tree[flatRowKey][flatColKey].push(record);
}
};
PivotData.prototype.getAggregator = function(rowKey, colKey) {
var agg, flatColKey, flatRowKey;
flatRowKey = rowKey.join(String.fromCharCode(0));
flatColKey = colKey.join(String.fromCharCode(0));
if (rowKey.length === 0 && colKey.length === 0) {
agg = this.allTotal;
} else if (rowKey.length === 0) {
agg = this.colTotals[flatColKey];
} else if (colKey.length === 0) {
agg = this.rowTotals[flatRowKey];
} else {
agg = this.tree[flatRowKey][flatColKey];
}
return agg != null ? agg : {
value: (function() {
return null;
}),
format: function() {
return "";
}
};
};
return PivotData;
})();
$.pivotUtilities = {
aggregatorTemplates: aggregatorTemplates,
aggregators: aggregators,
renderers: renderers,
derivers: derivers,
locales: locales,
naturalSort: naturalSort,
numberFormat: numberFormat,
sortAs: sortAs,
PivotData: PivotData
};
/*
Default Renderer for hierarchical table layout
*/
pivotTableRenderer = function(pivotData, opts) {
var aggregator, c, colAttrs, colKey, colKeys, defaults, i, j, r, result, rowAttrs, rowKey, rowKeys, spanSize, td, th, totalAggregator, tr, txt, val, x;
defaults = {
localeStrings: {
totals: "Totals"
}
};
opts = $.extend(defaults, opts);
colAttrs = pivotData.colAttrs;
rowAttrs = pivotData.rowAttrs;
rowKeys = pivotData.getRowKeys();
colKeys = pivotData.getColKeys();
result = document.createElement("table");
result.className = "pvtTable";
spanSize = function(arr, i, j) {
var l, len, n, noDraw, ref, ref1, stop, x;
if (i !== 0) {
noDraw = true;
for (x = l = 0, ref = j; 0 <= ref ? l <= ref : l >= ref; x = 0 <= ref ? ++l : --l) {
if (arr[i - 1][x] !== arr[i][x]) {
noDraw = false;
}
}
if (noDraw) {
return -1;
}
}
len = 0;
while (i + len < arr.length) {
stop = false;
for (x = n = 0, ref1 = j; 0 <= ref1 ? n <= ref1 : n >= ref1; x = 0 <= ref1 ? ++n : --n) {
if (arr[i][x] !== arr[i + len][x]) {
stop = true;
}
}
if (stop) {
break;
}
len++;
}
return len;
};
for (j in colAttrs) {
if (!hasProp.call(colAttrs, j)) continue;
c = colAttrs[j];
tr = document.createElement("tr");
if (parseInt(j) === 0 && rowAttrs.length !== 0) {
th = document.createElement("th");
th.setAttribute("colspan", rowAttrs.length);
th.setAttribute("rowspan", colAttrs.length);
tr.appendChild(th);
}
th = document.createElement("th");
th.className = "pvtAxisLabel";
th.textContent = c;
tr.appendChild(th);
for (i in colKeys) {
if (!hasProp.call(colKeys, i)) continue;
colKey = colKeys[i];
x = spanSize(colKeys, parseInt(i), parseInt(j));
if (x !== -1) {
th = document.createElement("th");
th.className = "pvtColLabel";
th.textContent = colKey[j];
th.setAttribute("colspan", x);
if (parseInt(j) === colAttrs.length - 1 && rowAttrs.length !== 0) {
th.setAttribute("rowspan", 2);
}
tr.appendChild(th);
}
}
if (parseInt(j) === 0) {
th = document.createElement("th");
th.className = "pvtTotalLabel";
th.innerHTML = opts.localeStrings.totals;
th.setAttribute("rowspan", colAttrs.length + (rowAttrs.length === 0 ? 0 : 1));
tr.appendChild(th);
}
result.appendChild(tr);
}
if (rowAttrs.length !== 0) {
tr = document.createElement("tr");
for (i in rowAttrs) {
if (!hasProp.call(rowAttrs, i)) continue;
r = rowAttrs[i];
th = document.createElement("th");
th.className = "pvtAxisLabel";
th.textContent = r;
tr.appendChild(th);
}
th = document.createElement("th");
if (colAttrs.length === 0) {
th.className = "pvtTotalLabel";
th.innerHTML = opts.localeStrings.totals;
}
tr.appendChild(th);
result.appendChild(tr);
}
for (i in rowKeys) {
if (!hasProp.call(rowKeys, i)) continue;
rowKey = rowKeys[i];
tr = document.createElement("tr");
for (j in rowKey) {
if (!hasProp.call(rowKey, j)) continue;
txt = rowKey[j];
x = spanSize(rowKeys, parseInt(i), parseInt(j));
if (x !== -1) {
th = document.createElement("th");
th.className = "pvtRowLabel";
th.textContent = txt;
th.setAttribute("rowspan", x);
if (parseInt(j) === rowAttrs.length - 1 && colAttrs.length !== 0) {
th.setAttribute("colspan", 2);
}
tr.appendChild(th);
}
}
for (j in colKeys) {
if (!hasProp.call(colKeys, j)) continue;
colKey = colKeys[j];
aggregator = pivotData.getAggregator(rowKey, colKey);
val = aggregator.value();
td = document.createElement("td");
td.className = "pvtVal row" + i + " col" + j;
td.textContent = aggregator.format(val);
td.setAttribute("data-value", val);
tr.appendChild(td);
}
totalAggregator = pivotData.getAggregator(rowKey, []);
val = totalAggregator.value();
td = document.createElement("td");
td.className = "pvtTotal rowTotal";
td.textContent = totalAggregator.format(val);
td.setAttribute("data-value", val);
td.setAttribute("data-for", "row" + i);
tr.appendChild(td);
result.appendChild(tr);
}
tr = document.createElement("tr");
th = document.createElement("th");
th.className = "pvtTotalLabel";
th.innerHTML = opts.localeStrings.totals;
th.setAttribute("colspan", rowAttrs.length + (colAttrs.length === 0 ? 0 : 1));
tr.appendChild(th);
for (j in colKeys) {
if (!hasProp.call(colKeys, j)) continue;
colKey = colKeys[j];
totalAggregator = pivotData.getAggregator([], colKey);
val = totalAggregator.value();
td = document.createElement("td");
td.className = "pvtTotal colTotal";
td.textContent = totalAggregator.format(val);
td.setAttribute("data-value", val);
td.setAttribute("data-for", "col" + j);
tr.appendChild(td);
}
totalAggregator = pivotData.getAggregator([], []);
val = totalAggregator.value();
td = document.createElement("td");
td.className = "pvtGrandTotal";
td.textContent = totalAggregator.format(val);
td.setAttribute("data-value", val);
tr.appendChild(td);
result.appendChild(tr);
result.setAttribute("data-numrows", rowKeys.length);
result.setAttribute("data-numcols", colKeys.length);
return result;
};
/*
Pivot Table core: create PivotData object and call Renderer on it
*/
$.fn.pivot = function(input, opts) {
var defaults, e, error, error1, pivotData, result, x;
defaults = {
cols: [],
rows: [],
vals: [],
filter: function() {
return true;
},
aggregator: aggregatorTemplates.count()(),
aggregatorName: "Count",
sorters: function() {},
derivedAttributes: {},
renderer: pivotTableRenderer,
rendererOptions: null,
localeStrings: locales.en.localeStrings
};
opts = $.extend(defaults, opts);
result = null;
try {
pivotData = new PivotData(input, opts);
try {
result = opts.renderer(pivotData, opts.rendererOptions);
} catch (error) {
e = error;
if (typeof console !== "undefined" && console !== null) {
console.error(e.stack);
}
result = $("<span>").html(opts.localeStrings.renderError);
}
} catch (error1) {
e = error1;
if (typeof console !== "undefined" && console !== null) {
console.error(e.stack);
}
result = $("<span>").html(opts.localeStrings.computeError);
}
x = this[0];
while (x.hasChildNodes()) {
x.removeChild(x.lastChild);
}
return this.append(result);
};
/*
Pivot Table UI: calls Pivot Table core above with options set by user
*/
$.fn.pivotUI = function(input, inputOpts, overwrite, locale) {
var a, aggregator, attrLength, axisValues, c, colList, defaults, e, error, existingOpts, fn, i, initialRender, k, l, len1, len2, len3, len4, n, o, opts, pivotTable, q, ref, ref1, ref2, ref3, ref4, refresh, refreshDelayed, renderer, rendererControl, shownAttributes, tblCols, tr1, tr2, uiTable, unusedAttrsVerticalAutoCutoff, unusedAttrsVerticalAutoOverride, x;
if (overwrite == null) {
overwrite = false;
}
if (locale == null) {
locale = "en";
}
if (locales[locale] == null) {
locale = "en";
}
defaults = {
derivedAttributes: {},
aggregators: locales[locale].aggregators,
renderers: locales[locale].renderers,
hiddenAttributes: [],
menuLimit: 200,
cols: [],
rows: [],
vals: [],
exclusions: {},
inclusions: {},
unusedAttrsVertical: 85,
autoSortUnusedAttrs: false,
rendererOptions: {
localeStrings: locales[locale].localeStrings
},
onRefresh: null,
filter: function() {
return true;
},
sorters: function() {},
localeStrings: locales[locale].localeStrings
};
existingOpts = this.data("pivotUIOptions");
if ((existingOpts == null) || overwrite) {
opts = $.extend(defaults, inputOpts);
} else {
opts = existingOpts;
}
try {
input = PivotData.convertToArray(input);
tblCols = (function() {
var ref, results;
ref = input[0];
results = [];
for (k in ref) {
if (!hasProp.call(ref, k)) continue;
results.push(k);
}
return results;
})();
ref = opts.derivedAttributes;
for (c in ref) {
if (!hasProp.call(ref, c)) continue;
if ((indexOf.call(tblCols, c) < 0)) {
tblCols.push(c);
}
}
axisValues = {};
for (l = 0, len1 = tblCols.length; l < len1; l++) {
x = tblCols[l];
axisValues[x] = {};
}
PivotData.forEachRecord(input, opts.derivedAttributes, function(record) {
var base, results, v;
results = [];
for (k in record) {
if (!hasProp.call(record, k)) continue;
v = record[k];
if (!(opts.filter(record))) {
continue;
}
if (v == null) {
v = "null";
}
if ((base = axisValues[k])[v] == null) {
base[v] = 0;
}
results.push(axisValues[k][v]++);
}
return results;
});
uiTable = $("<table>", {
"class": "pvtUi"
}).attr("cellpadding", 5);
rendererControl = $("<td>");
renderer = $("<select>").addClass('pvtRenderer').appendTo(rendererControl).bind("change", function() {
return refresh();
});
ref1 = opts.renderers;
for (x in ref1) {
if (!hasProp.call(ref1, x)) continue;
$("<option>").val(x).html(x).appendTo(renderer);
}
colList = $("<td>").addClass('pvtAxisContainer pvtUnused');
shownAttributes = (function() {
var len2, n, results;
results = [];
for (n = 0, len2 = tblCols.length; n < len2; n++) {
c = tblCols[n];
if (indexOf.call(opts.hiddenAttributes, c) < 0) {
results.push(c);
}
}
return results;
})();
unusedAttrsVerticalAutoOverride = false;
if (opts.unusedAttrsVertical === "auto") {
unusedAttrsVerticalAutoCutoff = 120;
} else {
unusedAttrsVerticalAutoCutoff = parseInt(opts.unusedAttrsVertical);
}
if (!isNaN(unusedAttrsVerticalAutoCutoff)) {
attrLength = 0;
for (n = 0, len2 = shownAttributes.length; n < len2; n++) {
a = shownAttributes[n];
attrLength += a.length;
}
unusedAttrsVerticalAutoOverride = attrLength > unusedAttrsVerticalAutoCutoff;
}
if (opts.unusedAttrsVertical === true || unusedAttrsVerticalAutoOverride) {
colList.addClass('pvtVertList');
} else {
colList.addClass('pvtHorizList');
}
fn = function(c) {
var attrElem, btns, checkContainer, filterItem, filterItemExcluded, hasExcludedItem, keys, len3, o, ref2, showFilterList, triangleLink, updateFilter, v, valueList;
keys = (function() {
var results;
results = [];
for (k in axisValues[c]) {
results.push(k);
}
return results;
})();
hasExcludedItem = false;
valueList = $("<div>").addClass('pvtFilterBox').hide();
valueList.append($("<h4>").text(c + " (" + keys.length + ")"));
if (keys.length > opts.menuLimit) {
valueList.append($("<p>").html(opts.localeStrings.tooMany));
} else {
btns = $("<p>").appendTo(valueList);
btns.append($("<button>", {
type: "button"
}).html(opts.localeStrings.selectAll).bind("click", function() {
return valueList.find("input:visible").prop("checked", true);
}));
btns.append($("<button>", {
type: "button"
}).html(opts.localeStrings.selectNone).bind("click", function() {
return valueList.find("input:visible").prop("checked", false);
}));
btns.append($("<br>"));
btns.append($("<input>", {
type: "text",
placeholder: opts.localeStrings.filterResults,
"class": "pvtSearch"
}).bind("keyup", function() {
var filter;
filter = $(this).val().toLowerCase();
return valueList.find('.pvtCheckContainer p').each(function() {
var testString;
testString = $(this).text().toLowerCase().indexOf(filter);
if (testString !== -1) {
return $(this).show();
} else {
return $(this).hide();
}
});
}));
checkContainer = $("<div>").addClass("pvtCheckContainer").appendTo(valueList);
ref2 = keys.sort(getSort(opts.sorters, c));
for (o = 0, len3 = ref2.length; o < len3; o++) {
k = ref2[o];
v = axisValues[c][k];
filterItem = $("<label>");
filterItemExcluded = false;
if (opts.inclusions[c]) {
filterItemExcluded = (indexOf.call(opts.inclusions[c], k) < 0);
} else if (opts.exclusions[c]) {
filterItemExcluded = (indexOf.call(opts.exclusions[c], k) >= 0);
}
hasExcludedItem || (hasExcludedItem = filterItemExcluded);
$("<input>").attr("type", "checkbox").addClass('pvtFilter').attr("checked", !filterItemExcluded).data("filter", [c, k]).appendTo(filterItem);
filterItem.append($("<span>").text(k));
filterItem.append($("<span>").text(" (" + v + ")"));
checkContainer.append($("<p>").append(filterItem));
}
}
updateFilter = function() {
var unselectedCount;
unselectedCount = valueList.find("[type='checkbox']").length - valueList.find("[type='checkbox']:checked").length;
if (unselectedCount > 0) {
attrElem.addClass("pvtFilteredAttribute");
} else {
attrElem.removeClass("pvtFilteredAttribute");
}
if (keys.length > opts.menuLimit) {
return valueList.toggle();
} else {
return valueList.toggle(0, refresh);
}
};
$("<p>").appendTo(valueList).append($("<button>", {
type: "button"
}).text("OK").bind("click", updateFilter));
showFilterList = function(e) {
var clickLeft, clickTop, ref3;
ref3 = $(e.currentTarget).position(), clickLeft = ref3.left, clickTop = ref3.top;
valueList.css({
left: clickLeft + 10,
top: clickTop + 10
}).toggle();
valueList.find('.pvtSearch').val('');
return valueList.find('.pvtCheckContainer p').show();
};
triangleLink = $("<span>").addClass('pvtTriangle').html(" &#x25BE;").bind("click", showFilterList);
attrElem = $("<li>").addClass("axis_" + i).append($("<span>").addClass('pvtAttr').text(c).data("attrName", c).append(triangleLink));
if (hasExcludedItem) {
attrElem.addClass('pvtFilteredAttribute');
}
colList.append(attrElem).append(valueList);
return attrElem.bind("dblclick", showFilterList);
};
for (i in shownAttributes) {
if (!hasProp.call(shownAttributes, i)) continue;
c = shownAttributes[i];
fn(c);
}
tr1 = $("<tr>").appendTo(uiTable);
aggregator = $("<select>").addClass('pvtAggregator').bind("change", function() {
return refresh();
});
ref2 = opts.aggregators;
for (x in ref2) {
if (!hasProp.call(ref2, x)) continue;
aggregator.append($("<option>").val(x).html(x));
}
$("<td>").addClass('pvtVals').appendTo(tr1).append(aggregator).append($("<br>"));
$("<td>").addClass('pvtAxisContainer pvtHorizList pvtCols').appendTo(tr1);
tr2 = $("<tr>").appendTo(uiTable);
tr2.append($("<td>").addClass('pvtAxisContainer pvtRows').attr("valign", "top"));
pivotTable = $("<td>").attr("valign", "top").addClass('pvtRendererArea').appendTo(tr2);
if (opts.unusedAttrsVertical === true || unusedAttrsVerticalAutoOverride) {
uiTable.find('tr:nth-child(1)').prepend(rendererControl);
uiTable.find('tr:nth-child(2)').prepend(colList);
} else {
uiTable.prepend($("<tr>").append(rendererControl).append(colList));
}
this.html(uiTable);
ref3 = opts.cols;
for (o = 0, len3 = ref3.length; o < len3; o++) {
x = ref3[o];
this.find(".pvtCols").append(this.find(".axis_" + ($.inArray(x, shownAttributes))));
}
ref4 = opts.rows;
for (q = 0, len4 = ref4.length; q < len4; q++) {
x = ref4[q];
this.find(".pvtRows").append(this.find(".axis_" + ($.inArray(x, shownAttributes))));
}
if (opts.aggregatorName != null) {
this.find(".pvtAggregator").val(opts.aggregatorName);
}
if (opts.rendererName != null) {
this.find(".pvtRenderer").val(opts.rendererName);
}
initialRender = true;
refreshDelayed = (function(_this) {
return function() {
var attr, exclusions, inclusions, len5, newDropdown, numInputsToProcess, pivotUIOptions, pvtVals, ref5, ref6, s, subopts, t, unusedAttrsContainer, vals;
subopts = {
derivedAttributes: opts.derivedAttributes,
localeStrings: opts.localeStrings,
rendererOptions: opts.rendererOptions,
sorters: opts.sorters,
cols: [],
rows: []
};
numInputsToProcess = (ref5 = opts.aggregators[aggregator.val()]([])().numInputs) != null ? ref5 : 0;
vals = [];
_this.find(".pvtRows li span.pvtAttr").each(function() {
return subopts.rows.push($(this).data("attrName"));
});
_this.find(".pvtCols li span.pvtAttr").each(function() {
return subopts.cols.push($(this).data("attrName"));
});
_this.find(".pvtVals select.pvtAttrDropdown").each(function() {
if (numInputsToProcess === 0) {
return $(this).remove();
} else {
numInputsToProcess--;
if ($(this).val() !== "") {
return vals.push($(this).val());
}
}
});
if (numInputsToProcess !== 0) {
pvtVals = _this.find(".pvtVals");
for (x = s = 0, ref6 = numInputsToProcess; 0 <= ref6 ? s < ref6 : s > ref6; x = 0 <= ref6 ? ++s : --s) {
newDropdown = $("<select>").addClass('pvtAttrDropdown').append($("<option>")).bind("change", function() {
return refresh();
});
for (t = 0, len5 = shownAttributes.length; t < len5; t++) {
attr = shownAttributes[t];
newDropdown.append($("<option>").val(attr).text(attr));
}
pvtVals.append(newDropdown);
}
}
if (initialRender) {
vals = opts.vals;
i = 0;
_this.find(".pvtVals select.pvtAttrDropdown").each(function() {
$(this).val(vals[i]);
return i++;
});
initialRender = false;
}
subopts.aggregatorName = aggregator.val();
subopts.vals = vals;
subopts.aggregator = opts.aggregators[aggregator.val()](vals);
subopts.renderer = opts.renderers[renderer.val()];
exclusions = {};
_this.find('input.pvtFilter').not(':checked').each(function() {
var filter;
filter = $(this).data("filter");
if (exclusions[filter[0]] != null) {
return exclusions[filter[0]].push(filter[1]);
} else {
return exclusions[filter[0]] = [filter[1]];
}
});
inclusions = {};
_this.find('input.pvtFilter:checked').each(function() {
var filter;
filter = $(this).data("filter");
if (exclusions[filter[0]] != null) {
if (inclusions[filter[0]] != null) {
return inclusions[filter[0]].push(filter[1]);
} else {
return inclusions[filter[0]] = [filter[1]];
}
}
});
subopts.filter = function(record) {
var excludedItems, ref7;
if (!opts.filter(record)) {
return false;
}
for (k in exclusions) {
excludedItems = exclusions[k];
if (ref7 = "" + record[k], indexOf.call(excludedItems, ref7) >= 0) {
return false;
}
}
return true;
};
pivotTable.pivot(input, subopts);
pivotUIOptions = $.extend(opts, {
cols: subopts.cols,
rows: subopts.rows,
vals: vals,
exclusions: exclusions,
inclusions: inclusions,
inclusionsInfo: inclusions,
aggregatorName: aggregator.val(),
rendererName: renderer.val()
});
_this.data("pivotUIOptions", pivotUIOptions);
if (opts.autoSortUnusedAttrs) {
unusedAttrsContainer = _this.find("td.pvtUnused.pvtAxisContainer");
$(unusedAttrsContainer).children("li").sort(function(a, b) {
return naturalSort($(a).text(), $(b).text());
}).appendTo(unusedAttrsContainer);
}
pivotTable.css("opacity", 1);
if (opts.onRefresh != null) {
return opts.onRefresh(pivotUIOptions);
}
};
})(this);
refresh = (function(_this) {
return function() {
pivotTable.css("opacity", 0.5);
return setTimeout(refreshDelayed, 10);
};
})(this);
refresh();
this.find(".pvtAxisContainer").sortable({
update: function(e, ui) {
if (ui.sender == null) {
return refresh();
}
},
connectWith: this.find(".pvtAxisContainer"),
items: 'li',
placeholder: 'pvtPlaceholder'
});
} catch (error) {
e = error;
if (typeof console !== "undefined" && console !== null) {
console.error(e.stack);
}
this.html(opts.localeStrings.uiRenderError);
}
return this;
};
/*
Heatmap post-processing
*/
$.fn.heatmap = function(scope) {
var colorGen, heatmapper, i, j, l, n, numCols, numRows, ref, ref1;
if (scope == null) {
scope = "heatmap";
}
numRows = this.data("numrows");
numCols = this.data("numcols");
colorGen = function(color, min, max) {
var hexGen;
hexGen = (function() {
switch (color) {
case "red":
return function(hex) {
return "ff" + hex + hex;
};
case "green":
return function(hex) {
return hex + "ff" + hex;
};
case "blue":
return function(hex) {
return "" + hex + hex + "ff";
};
}
})();
return function(x) {
var hex, intensity;
intensity = 255 - Math.round(255 * (x - min) / (max - min));
hex = intensity.toString(16).split(".")[0];
if (hex.length === 1) {
hex = 0 + hex;
}
return hexGen(hex);
};
};
heatmapper = (function(_this) {
return function(scope, color) {
var colorFor, forEachCell, values;
forEachCell = function(f) {
return _this.find(scope).each(function() {
var x;
x = $(this).data("value");
if ((x != null) && isFinite(x)) {
return f(x, $(this));
}
});
};
values = [];
forEachCell(function(x) {
return values.push(x);
});
colorFor = colorGen(color, Math.min.apply(Math, values), Math.max.apply(Math, values));
return forEachCell(function(x, elem) {
return elem.css("background-color", "#" + colorFor(x));
});
};
})(this);
switch (scope) {
case "heatmap":
heatmapper(".pvtVal", "red");
break;
case "rowheatmap":
for (i = l = 0, ref = numRows; 0 <= ref ? l < ref : l > ref; i = 0 <= ref ? ++l : --l) {
heatmapper(".pvtVal.row" + i, "red");
}
break;
case "colheatmap":
for (j = n = 0, ref1 = numCols; 0 <= ref1 ? n < ref1 : n > ref1; j = 0 <= ref1 ? ++n : --n) {
heatmapper(".pvtVal.col" + j, "red");
}
}
heatmapper(".pvtTotal.rowTotal", "red");
heatmapper(".pvtTotal.colTotal", "red");
return this;
};
/*
Barchart post-processing
*/
return $.fn.barchart = function() {
var barcharter, i, l, numCols, numRows, ref;
numRows = this.data("numrows");
numCols = this.data("numcols");
barcharter = (function(_this) {
return function(scope) {
var forEachCell, max, scaler, values;
forEachCell = function(f) {
return _this.find(scope).each(function() {
var x;
x = $(this).data("value");
if ((x != null) && isFinite(x)) {
return f(x, $(this));
}
});
};
values = [];
forEachCell(function(x) {
return values.push(x);
});
max = Math.max.apply(Math, values);
scaler = function(x) {
return 100 * x / (1.4 * max);
};
return forEachCell(function(x, elem) {
var text, wrapper;
text = elem.text();
wrapper = $("<div>").css({
"position": "relative",
"height": "55px"
});
wrapper.append($("<div>").css({
"position": "absolute",
"bottom": 0,
"left": 0,
"right": 0,
"height": scaler(x) + "%",
"background-color": "gray"
}));
wrapper.append($("<div>").text(text).css({
"position": "relative",
"padding-left": "5px",
"padding-right": "5px"
}));
return elem.css({
"padding": 0,
"padding-top": "5px",
"text-align": "center"
}).html(wrapper);
});
};
})(this);
for (i = l = 0, ref = numRows; 0 <= ref ? l < ref : l > ref; i = 0 <= ref ? ++l : --l) {
barcharter(".pvtVal.row" + i);
}
barcharter(".pvtTotal.colTotal");
return this;
};
});
}).call(this);
//# sourceMappingURL=pivot.js.map
(function() {
var callWithJQuery;
callWithJQuery = function(pivotModule) {
if (typeof exports === "object" && typeof module === "object") {
return pivotModule(require("jquery"), require("c3"));
} else if (typeof define === "function" && define.amd) {
return define(["jquery", "c3"], pivotModule);
} else {
return pivotModule(jQuery, c3);
}
};
callWithJQuery(function($, c3) {
var makeC3Chart;
makeC3Chart = function(chartOpts) {
if (chartOpts == null) {
chartOpts = {};
}
return function(pivotData, opts) {
var agg, attrs, base, base1, base2, base3, base4, base5, colKey, colKeys, columns, dataColumns, defaults, fullAggName, groupByTitle, h, hAxisTitle, headers, i, j, k, l, len, len1, len2, len3, len4, m, numCharsInHAxis, numSeries, params, ref, ref1, ref2, ref3, renderArea, result, rotationAngle, row, rowHeader, rowKey, rowKeys, s, scatterData, series, title, titleText, vAxisTitle, val, vals, x, xs;
defaults = {
localeStrings: {
vs: "vs",
by: "by"
},
c3: {}
};
opts = $.extend(true, defaults, opts);
if ((base = opts.c3).size == null) {
base.size = {};
}
if ((base1 = opts.c3.size).width == null) {
base1.width = window.innerWidth / 1.4;
}
if ((base2 = opts.c3.size).height == null) {
base2.height = window.innerHeight / 1.4 - 50;
}
if (chartOpts.type == null) {
chartOpts.type = "line";
}
rowKeys = pivotData.getRowKeys();
if (rowKeys.length === 0) {
rowKeys.push([]);
}
colKeys = pivotData.getColKeys();
if (colKeys.length === 0) {
colKeys.push([]);
}
headers = (function() {
var i, len, results;
results = [];
for (i = 0, len = colKeys.length; i < len; i++) {
h = colKeys[i];
results.push(h.join("-"));
}
return results;
})();
rotationAngle = 0;
fullAggName = pivotData.aggregatorName;
if (pivotData.valAttrs.length) {
fullAggName += "(" + (pivotData.valAttrs.join(", ")) + ")";
}
if (chartOpts.type === "scatter") {
scatterData = {
x: {},
y: {},
t: {}
};
attrs = pivotData.rowAttrs.concat(pivotData.colAttrs);
vAxisTitle = (ref = attrs[0]) != null ? ref : "";
hAxisTitle = (ref1 = attrs[1]) != null ? ref1 : "";
groupByTitle = attrs.slice(2).join("-");
titleText = vAxisTitle;
if (hAxisTitle !== "") {
titleText += " " + opts.localeStrings.vs + " " + hAxisTitle;
}
if (groupByTitle !== "") {
titleText += " " + opts.localeStrings.by + " " + groupByTitle;
}
for (i = 0, len = rowKeys.length; i < len; i++) {
rowKey = rowKeys[i];
for (j = 0, len1 = colKeys.length; j < len1; j++) {
colKey = colKeys[j];
agg = pivotData.getAggregator(rowKey, colKey);
if (agg.value() != null) {
vals = rowKey.concat(colKey);
series = vals.slice(2).join("-");
if (series === "") {
series = "series";
}
if ((base3 = scatterData.x)[series] == null) {
base3[series] = [];
}
if ((base4 = scatterData.y)[series] == null) {
base4[series] = [];
}
if ((base5 = scatterData.t)[series] == null) {
base5[series] = [];
}
scatterData.y[series].push((ref2 = vals[0]) != null ? ref2 : 0);
scatterData.x[series].push((ref3 = vals[1]) != null ? ref3 : 0);
scatterData.t[series].push(agg.format(agg.value()));
}
}
}
} else {
numCharsInHAxis = 0;
for (k = 0, len2 = headers.length; k < len2; k++) {
x = headers[k];
numCharsInHAxis += x.length;
}
if (numCharsInHAxis > 50) {
rotationAngle = 45;
}
columns = [];
for (l = 0, len3 = rowKeys.length; l < len3; l++) {
rowKey = rowKeys[l];
rowHeader = rowKey.join("-");
row = [rowHeader === "" ? pivotData.aggregatorName : rowHeader];
for (m = 0, len4 = colKeys.length; m < len4; m++) {
colKey = colKeys[m];
val = parseFloat(pivotData.getAggregator(rowKey, colKey).value());
if (isFinite(val)) {
if (val < 1) {
row.push(val.toPrecision(3));
} else {
row.push(val.toFixed(3));
}
} else {
row.push(null);
}
}
columns.push(row);
}
vAxisTitle = pivotData.aggregatorName + (pivotData.valAttrs.length ? "(" + (pivotData.valAttrs.join(", ")) + ")" : "");
hAxisTitle = pivotData.colAttrs.join("-");
titleText = fullAggName;
if (hAxisTitle !== "") {
titleText += " " + opts.localeStrings.vs + " " + hAxisTitle;
}
groupByTitle = pivotData.rowAttrs.join("-");
if (groupByTitle !== "") {
titleText += " " + opts.localeStrings.by + " " + groupByTitle;
}
}
title = $("<p>", {
style: "text-align: center; font-weight: bold"
});
title.text(titleText);
params = {
axis: {
y: {
label: vAxisTitle
},
x: {
label: hAxisTitle,
tick: {
rotate: rotationAngle,
multiline: false
}
}
},
data: {
type: chartOpts.type
},
tooltip: {
grouped: false
},
color: {
pattern: ["#3366cc", "#dc3912", "#ff9900", "#109618", "#990099", "#0099c6", "#dd4477", "#66aa00", "#b82e2e", "#316395", "#994499", "#22aa99", "#aaaa11", "#6633cc", "#e67300", "#8b0707", "#651067", "#329262", "#5574a6", "#3b3eac"]
}
};
$.extend(params, opts.c3);
if (chartOpts.type === "scatter") {
xs = {};
numSeries = 0;
dataColumns = [];
for (s in scatterData.x) {
numSeries += 1;
xs[s] = s + "_x";
dataColumns.push([s + "_x"].concat(scatterData.x[s]));
dataColumns.push([s].concat(scatterData.y[s]));
}
params.data.xs = xs;
params.data.columns = dataColumns;
params.axis.x.tick = {
fit: false
};
if (numSeries === 1) {
params.legend = {
show: false
};
}
params.tooltip.format = {
title: function() {
return fullAggName;
},
name: function() {
return "";
},
value: function(a, b, c, d) {
return scatterData.t[c][d];
}
};
} else {
params.axis.x.type = 'category';
params.axis.x.categories = headers;
params.data.columns = columns;
}
if (chartOpts.stacked != null) {
params.data.groups = [
(function() {
var len5, n, results;
results = [];
for (n = 0, len5 = rowKeys.length; n < len5; n++) {
x = rowKeys[n];
results.push(x.join("-"));
}
return results;
})()
];
}
renderArea = $("<div>", {
style: "display:none;"
}).appendTo($("body"));
result = $("<div>").appendTo(renderArea);
params.bindto = result[0];
c3.generate(params);
result.detach();
renderArea.remove();
return $("<div>").append(title, result);
};
};
return $.pivotUtilities.c3_renderers = {
"Line Chart": makeC3Chart(),
"Bar Chart": makeC3Chart({
type: "bar"
}),
"Stacked Bar Chart": makeC3Chart({
type: "bar",
stacked: true
}),
"Area Chart": makeC3Chart({
type: "area",
stacked: true
}),
"Scatter Chart": makeC3Chart({
type: "scatter"
})
};
});
}).call(this);
//# sourceMappingURL=c3_renderers.js.map
$(function(){function e(){var e=$("#type").val();void 0!==e&&$.getJSON("index.php",{module:"Spots",action:e,to_pdf:1},function(e){var t=JSON.parse($('input[name="config"]').val());$("#output").pivotUI(e,$.extend(t,n),!0)})}$("#bootstrap-container").removeClass("col-sm-9 col-sm-offset-3 col-md-10");var t=$.extend($.pivotUtilities.renderers,$.pivotUtilities.c3_renderers),n={renderers:t,onRefresh:function(e){var t=JSON.parse(JSON.stringify(e));delete t.aggregators,delete t.renderers,delete t.rendererOptions,delete t.localeStrings,$('input[name="config"]').val(JSON.stringify(t,void 0,2))}};$("#type").change(function(){e()}),e()});