rename base into web part1
bzr revid: al@openerp.com-20110905110309-egx167t1ni1fzho1
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
/*
|
||||
Copyright DHTMLX LTD. http://www.dhtmlx.com
|
||||
You allowed to use this component or parts of it under GPL terms
|
||||
To use it on other terms or get Professional edition of the component please contact us at sales@dhtmlx.com
|
||||
*/
|
||||
.dhx_tooltip{display:none;position:absolute;font-family:Tahoma;font-size:8pt;z-index:10000;background-color:white;padding:2px 2px 2px 2px;border:1px solid #A4BED4;}
|
||||
.dhx_chart{position:relative;font-family:Verdana;font-size:13px;color:#000;overflow:hidden;}
|
||||
.dhx_canvas_text{position:absolute;text-align:center;}
|
||||
.dhx_map_img{width:100%;height:100%;position:absolute;top:0;left:0;border:0;filter:alpha(opacity=0);}
|
||||
.dhx_axis_item_y{position:absolute;height:10px;line-height:10px;text-align:right;}
|
||||
.dhx_axis_title_y{text-align:center;font-family:Verdana;-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-o-transform:rotate(-90deg);padding-left:3px;}
|
||||
.dhx_axis_item_x{text-align:right;margin-top:30px;margin-left:-14px;font-size:8pt;-webkit-transform:rotate(-60deg);-moz-transform:rotate(-60deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-o-transform:rotate(-60deg);padding-left:3px;}
|
||||
.dhx_axis_title_x{text-align:center;margin-top:50px;}
|
||||
.dhx_chart_legend{position:absolute;}
|
||||
.dhx_chart_legend_item{height:18px;line-height:18px;padding:2px;}
|
||||
@@ -0,0 +1,131 @@
|
||||
/*
|
||||
Copyright DHTMLX LTD. http://www.dhtmlx.com
|
||||
You allowed to use this component or parts of it under GPL terms
|
||||
To use it on other terms or get Professional edition of the component please contact us at sales@dhtmlx.com
|
||||
*/
|
||||
window.dhtmlx||(dhtmlx={});dhtmlx.version="3.0";dhtmlx.codebase="./";dhtmlx.extend=function(a,b){for(var c in b)a[c]=b[c];b.k&&a.k();return a};
|
||||
dhtmlx.proto_extend=function(){for(var a=arguments,b=a[0],c=[],d=a.length-1;d>0;d--){if(typeof a[d]=="function")a[d]=a[d].prototype;for(var e in a[d])if(e=="_init")c.push(a[d][e]);else b[e]||(b[e]=a[d][e])}a[0].k&&c.push(a[0].k);b.k=function(){for(var g=0;g<c.length;g++)c[g].apply(this,arguments)};b.base=a[1];var f=function(g){this.k(g);this.B&&this.B(g,this.defaults)};f.prototype=b;b=a=null;return f};dhtmlx.bind=function(a,b){return function(){return a.apply(b,arguments)}};
|
||||
dhtmlx.require=function(a){if(!dhtmlx.ha[a]){dhtmlx.exec(dhtmlx.ajax().sync().get(dhtmlx.codebase+a).responseText);dhtmlx.ha[a]=true}};dhtmlx.ha={};dhtmlx.exec=function(a){window.execScript?window.execScript(a):window.eval(a)};dhtmlx.methodPush=function(a,b){return function(){var c=false;return c=a[b].apply(a,arguments)}};dhtmlx.isNotDefined=function(a){return typeof a=="undefined"};dhtmlx.delay=function(a,b,c,d){setTimeout(function(){var e=a.apply(b,c);a=b=c=null;return e},d||1)};
|
||||
dhtmlx.uid=function(){if(!this.S)this.S=(new Date).valueOf();this.S++;return this.S};dhtmlx.toNode=function(a){if(typeof a=="string")return document.getElementById(a);return a};dhtmlx.toArray=function(a){return dhtmlx.extend(a||[],dhtmlx.PowerArray)};dhtmlx.toFunctor=function(a){return typeof a=="string"?eval(a):a};dhtmlx.j={};
|
||||
dhtmlx.event=function(a,b,c,d){a=dhtmlx.toNode(a);var e=dhtmlx.uid();dhtmlx.j[e]=[a,b,c];if(d)c=dhtmlx.bind(c,d);if(a.addEventListener)a.addEventListener(b,c,false);else a.attachEvent&&a.attachEvent("on"+b,c);return e};dhtmlx.eventRemove=function(a){if(a){var b=dhtmlx.j[a];if(b[0].removeEventListener)b[0].removeEventListener(b[1],b[2],false);else b[0].detachEvent&&b[0].detachEvent("on"+b[1],b[2]);delete this.j[a]}};
|
||||
dhtmlx.EventSystem={k:function(){this.j={};this.A={};this.s={}},block:function(){this.j.U=true},unblock:function(){this.j.U=false},mapEvent:function(a){dhtmlx.extend(this.s,a)},callEvent:function(a,b){if(this.j.U)return true;a=a.toLowerCase();var c=this.j[a.toLowerCase()],d=true;if(c)for(var e=0;e<c.length;e++)if(c[e].apply(this,b||[])===false)d=false;if(this.s[a]&&!this.s[a].callEvent(a,b))d=false;return d},attachEvent:function(a,b,c){a=a.toLowerCase();c=c||dhtmlx.uid();b=dhtmlx.toFunctor(b);var d=
|
||||
this.j[a]||dhtmlx.toArray();d.push(b);this.j[a]=d;this.A[c]={f:b,t:a};return c},detachEvent:function(a){var b=this.A[a].t,c=this.A[a].f;b=this.j[b];b.remove(c);delete this.A[a]}};
|
||||
dhtmlx.PowerArray={removeAt:function(a,b){if(a>=0)this.splice(a,b||1)},remove:function(a){this.removeAt(this.find(a))},insertAt:function(a,b){if(!b&&b!==0)this.push(a);else{var c=this.splice(b,this.length-b);this[b]=a;this.push.apply(this,c)}},find:function(a){for(i=0;i<this.length;i++)if(a==this[i])return i;return-1},each:function(a,b){for(var c=0;c<this.length;c++)a.call(b||this,this[c])},map:function(a,b){for(var c=0;c<this.length;c++)this[c]=a.call(b||this,this[c]);return this}};dhtmlx.env={};
|
||||
if(navigator.userAgent.indexOf("Opera")!=-1)dhtmlx.La=true;else{dhtmlx.r=!!document.all;dhtmlx.Ka=!document.all;dhtmlx.Ma=navigator.userAgent.indexOf("KHTML")!=-1;if(navigator.appVersion.indexOf("MSIE 8.0")!=-1&&document.compatMode!="BackCompat")dhtmlx.r=8}dhtmlx.env={};
|
||||
(function(){dhtmlx.env.transform=false;dhtmlx.env.transition=false;var a={};a.names=["transform","transition"];a.transform=["transform","WebkitTransform","MozTransform","oTransform"];a.transition=["transition","WebkitTransition","MozTransition","oTransition"];for(var b=document.createElement("DIV"),c=0;c<a.names.length;c++)for(;p=a[a.names[c]].pop();)if(typeof b.style[p]!="undefined")dhtmlx.env[a.names[c]]=true})();
|
||||
dhtmlx.env.transform_prefix=function(){var a;if(dhtmlx.La)a="-o-";else{a="";if(dhtmlx.Ka)a="-moz-";if(dhtmlx.Ma)a="-webkit-"}return a}();dhtmlx.env.svg=function(){return document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")}();dhtmlx.zIndex={drag:1E4};
|
||||
dhtmlx.html={create:function(a,b,c){b=b||{};var d=document.createElement(a);for(var e in b)d.setAttribute(e,b[e]);if(b.style)d.style.cssText=b.style;if(b["class"])d.className=b["class"];if(c)d.innerHTML=c;return d},getValue:function(a){a=dhtmlx.toNode(a);if(!a)return"";return dhtmlx.isNotDefined(a.value)?a.innerHTML:a.value},remove:function(a){if(a instanceof Array)for(var b=0;b<a.length;b++)this.remove(a[b]);else a&&a.parentNode&&a.parentNode.removeChild(a)},insertBefore:function(a,b,c){if(a)b?b.parentNode.insertBefore(a,
|
||||
b):c.appendChild(a)},locate:function(a,b){a=a||event;for(var c=a.target||a.srcElement;c;){if(c.getAttribute){var d=c.getAttribute(b);if(d)return d}c=c.parentNode}return null},offset:function(a){if(a.getBoundingClientRect){var b=a.getBoundingClientRect(),c=document.body,d=document.documentElement,e=window.pageYOffset||d.scrollTop||c.scrollTop,f=window.pageXOffset||d.scrollLeft||c.scrollLeft,g=d.clientTop||c.clientTop||0,i=d.clientLeft||c.clientLeft||0,j=b.top+e-g,k=b.left+f-i;return{y:Math.round(j),
|
||||
x:Math.round(k)}}else{for(k=j=0;a;){j+=parseInt(a.offsetTop,10);k+=parseInt(a.offsetLeft,10);a=a.offsetParent}return{y:j,x:k}}},pos:function(a){a=a||event;if(a.pageX||a.pageY)return{x:a.pageX,y:a.pageY};var b=dhtmlx.r&&document.compatMode!="BackCompat"?document.documentElement:document.body;return{x:a.clientX+b.scrollLeft-b.clientLeft,y:a.clientY+b.scrollTop-b.clientTop}},preventEvent:function(a){a&&a.preventDefault&&a.preventDefault();dhtmlx.html.stopEvent(a)},stopEvent:function(a){(a||event).cancelBubble=
|
||||
true;return false},addCss:function(a,b){a.className+=" "+b},removeCss:function(a,b){a.className=a.className.replace(RegExp(b,"g"),"")}};(function(){var a=document.getElementsByTagName("SCRIPT");if(a.length){a=(a[a.length-1].getAttribute("src")||"").split("/");a.splice(a.length-1,1);dhtmlx.codebase=a.slice(0,a.length).join("/")+"/"}})();dhtmlx.ui={};
|
||||
dhtmlx.Destruction={k:function(){dhtmlx.destructors.push(this)},destructor:function(){this.destructor=function(){};this.ib=this.v=null;this.fa&&document.body.appendChild(this.fa);this.fa=null;if(this.g){this.g.innerHTML="";this.g.v=null}this.data=this.g=this.L=null;this.j=this.A={}}};dhtmlx.destructors=[];
|
||||
dhtmlx.event(window,"unload",function(){for(var a=0;a<dhtmlx.destructors.length;a++)dhtmlx.destructors[a].destructor();dhtmlx.destructors=[];for(var b in dhtmlx.j){a=dhtmlx.j[b];if(a[0].removeEventListener)a[0].removeEventListener(a[1],a[2],false);else a[0].detachEvent&&a[0].detachEvent("on"+a[1],a[2]);delete dhtmlx.j[b]}});dhtmlx.math={};dhtmlx.math.fb=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"];
|
||||
dhtmlx.math.toHex=function(a,b){a=parseInt(a,10);for(str="";a>0;){str=this.fb[a%16]+str;a=Math.floor(a/16)}for(;str.length<b;)str="0"+str;return str};dhtmlx.ui.Map=function(a){this.name="Map";this.q="map_"+dhtmlx.uid();this.Pa=a;this.s=[]};
|
||||
dhtmlx.ui.Map.prototype={addRect:function(a,b,c){this.X(a,"RECT",b,c)},addPoly:function(a,b){this.X(a,"POLY",b)},X:function(a,b,c,d){var e="";if(arguments.length==4)e="userdata='"+d+"'";this.s.push("<area "+this.Pa+"='"+a+"' shape='"+b+"' coords='"+c.join()+"' "+e+"></area>")},addSector:function(a,b,c,d,e,f,g){var i=[];i.push(d);i.push(Math.floor(e*g));for(var j=b;j<c;j+=Math.PI/18){i.push(Math.floor(d+f*Math.cos(j)));i.push(Math.floor((e+f*Math.sin(j))*g))}i.push(Math.floor(d+f*Math.cos(c)));i.push(Math.floor((e+
|
||||
f*Math.sin(c))*g));i.push(d);i.push(Math.floor(e*g));return this.addPoly(a,i)},render:function(a){var b=dhtmlx.html.create("DIV");b.style.cssText="position:absolute; width:100%; height:100%; top:0px; left:0px;";a.appendChild(b);var c=dhtmlx.r?"":"src='data:image/gif;base64,R0lGODlhEgASAIAAAP///////yH5BAUUAAEALAAAAAASABIAAAIPjI+py+0Po5y02ouz3pwXADs='";b.innerHTML="<map id='"+this.q+"' name='"+this.q+"'>"+this.s.join("\n")+"</map><img "+c+" class='dhx_map_img' usemap='#"+this.q+"'>";a.v=b;this.s=[]}};
|
||||
dhtmlx.chart={};
|
||||
dhtmlx.chart.area={pvt_render_area:function(a,b,c,d,e,f){var g=this.C(a,b,c,d,e),i=Math.floor(g.cellWidth/2);if(b.length){a.globalAlpha=this.e.alpha.call(this,b[0]);a.fillStyle=this.e.color.call(this,b[0]);var j=this.p(b[0],c,d,g),k=this.e.offset?c.x+g.cellWidth*0.5:c.x;a.beginPath();a.moveTo(k,d.y);a.lineTo(k,j);f.addRect(b[0].id,[k-i,j-i,k+i,j+i]);this.e.yAxis||this.renderTextAt(false,!this.e.offset?false:true,k,j-this.e.labelOffset,this.e.label(b[0]));for(var h=1;h<b.length;h++){var m=k+Math.floor(g.cellWidth*
|
||||
h)-0.5,l=this.p(b[h],c,d,g);a.lineTo(m,l);f.addRect(b[h].id,[m-i,l-i,m+i,l+i]);this.e.yAxis||this.renderTextAt(false,!this.e.offset&&h==b.length-1?"left":"center",m,l-this.e.labelOffset,this.e.label(b[h]))}a.lineTo(k+Math.floor(g.cellWidth*[b.length-1]),d.y);a.lineTo(k,d.y);a.fill()}}};
|
||||
dhtmlx.chart.stackedArea={pvt_render_stackedArea:function(a,b,c,d,e,f){var g=this.C(a,b,c,d,e),i=Math.floor(g.cellWidth/2),j=[];if(b.length){a.globalAlpha=this.e.alpha.call(this,b[0]);a.fillStyle=this.e.color.call(this,b[0]);var k=e?b[0].$startY:d.y,h=this.e.offset?c.x+g.cellWidth*0.5:c.x,m=this.p(b[0],c,d,g)-(e?d.y-k:0);j[0]=m;a.beginPath();a.moveTo(h,k);a.lineTo(h,m);f.addRect(b[0].id,[h-i,m-i,h+i,m+i]);this.e.yAxis||this.renderTextAt(false,true,h,m-this.e.labelOffset,this.e.label(b[0]));for(var l=
|
||||
1;l<b.length;l++){var n=h+Math.floor(g.cellWidth*l)-0.5,o=this.p(b[l],c,d,g)-(e?d.y-b[l].$startY:0);j[l]=o;a.lineTo(n,o);f.addRect(b[l].id,[n-i,o-i,n+i,o+i]);this.e.yAxis||this.renderTextAt(false,true,n,o-this.e.labelOffset,this.e.label(b[l]))}a.lineTo(h+Math.floor(g.cellWidth*[b.length-1]),k);if(e)for(l=b.length-1;l>=0;l--){n=h+Math.floor(g.cellWidth*l)-0.5;var s=b[l].$startY;a.lineTo(n,s)}else a.lineTo(h+Math.floor(g.cellWidth*(length-1))-0.5,k);a.lineTo(h,k);a.fill();for(l=0;l<b.length;l++)b[l].$startY=
|
||||
j[l]}}};
|
||||
dhtmlx.chart.spline={pvt_render_spline:function(a,b,c,d,e){var f=this.C(a,b,c,d,e);Math.floor(f.cellWidth/2);var g=[];if(b.length){var i=this.e.offset?c.x+f.cellWidth*0.5:c.x;for(e=0;e<b.length;e++){var j=!e?i:Math.floor(f.cellWidth*e)-0.5+i,k=this.p(b[e],c,d,f);g.push({x:j,y:k})}var h=this.Ha(g);for(e=0;e<g.length-1;e++){var m=g[e].x;c=g[e].y;for(var l=g[e+1].x,n=g[e+1].y,o=m;o<l;o++)this.i(a,o,this.P(o,m,e,h.a,h.b,h.c,h.d),o+1,this.P(o+1,m,e,h.a,h.b,h.c,h.d),this.e.line.color(b[e]),this.e.line.width);this.i(a,
|
||||
l-1,this.P(o,m,e,h.a,h.b,h.c,h.d),l,n,this.e.line.color(b[e]),this.e.line.width);this.M(a,m,c,b[e],this.e.label(b[e]))}this.M(a,l,n,b[e],this.e.label(b[e]))}},Ha:function(a){var b,c,d,e,f,g,i,j,k;b=[];m=[];k=a.length;for(var h=0;h<k-1;h++){b[h]=a[h+1].x-a[h].x;m[h]=(a[h+1].y-a[h].y)/b[h]}c=[];d=[];c[0]=0;c[1]=2*(b[0]+b[1]);d[0]=0;d[1]=6*(m[1]-m[0]);for(h=2;h<k-1;h++){c[h]=2*(b[h-1]+b[h])-b[h-1]*b[h-1]/c[h-1];d[h]=6*(m[h]-m[h-1])-b[h-1]*d[h-1]/c[h-1]}e=[];e[k-1]=e[0]=0;for(h=k-2;h>=1;h--)e[h]=(d[h]-
|
||||
b[h]*e[h+1])/c[h];f=[];g=[];i=[];j=[];for(h=0;h<k-1;h++){f[h]=a[h].y;g[h]=-b[h]*e[h+1]/6-b[h]*e[h]/3+(a[h+1].y-a[h].y)/b[h];i[h]=e[h]/2;j[h]=(e[h+1]-e[h])/(6*b[h])}return{a:f,b:g,c:i,d:j}},P:function(a,b,c,d,e,f,g){return d[c]+(a-b)*(e[c]+(a-b)*(f[c]+(a-b)*g[c]))}};
|
||||
dhtmlx.chart.barH={pvt_render_barH:function(a,b,c,d,e,f){var g,i,j,k,h=d.x-c.x,m=!!this.e.yAxis,l=this.O("h");g=l.max;i=l.min;var n=Math.floor((d.y-c.y)/b.length);e||this.$(a,b,c,d,i,g,n);if(m){g=parseFloat(this.e.xAxis.end);i=parseFloat(this.e.xAxis.start)}var o=this.z(i,g);k=o[0];j=o[1];var s=k?h/k:10;if(!m){var t=10;s=k?(h-t)/k:10}var q=parseInt(this.e.width,10);if(q*this.h.length+4>n)q=n/this.h.length-4;var v=Math.floor((n-q*this.h.length)/2),p=typeof this.e.radius!="undefined"?parseInt(this.e.radius,
|
||||
10):Math.round(q/5),u=false,r=this.e.gradient;if(r&&typeof r!="function"){u=r;r=false}else if(r){r=a.createLinearGradient(c.x,c.y,d.x,c.y);this.e.gradient(r)}m||this.i(a,c.x-0.5,c.y,c.x-0.5,d.y,"#000000",1);for(d=0;d<b.length;d++){var w=parseFloat(this.e.value(b[d]));if(w>g)w=g;w-=i;w*=j;var x=c.x,y=c.y+v+d*n+(q+1)*e;if(w<0||this.e.yAxis&&w===0)this.renderTextAt("middle",true,x+10,y+q/2+v,this.e.label(b[d]));else{m||(w+=t/s);var B=r||this.e.color.call(this,b[d]);if(this.e.border){a.beginPath();a.fillStyle=
|
||||
B;this.o(a,x,y,q,p,s,w,0);a.lineTo(x,0);a.fill();a.fillStyle="#000000";a.globalAlpha=0.37;a.beginPath();this.o(a,x,y,q,p,s,w,0);a.fill()}a.globalAlpha=this.e.alpha.call(this,b[d]);a.fillStyle=r||this.e.color.call(this,b[d]);a.beginPath();var z=this.o(a,x,y,q,p,s,w,this.e.border?1:0);if(r&&!u)a.lineTo(c.x+h,y+(this.e.border?1:0));a.fill();a.globalAlpha=1;if(u!=false){var A=this.G(a,c.x,y+q,c.x+s*w+2,y,u,B,"x");a.fillStyle=A.gradient;a.beginPath();z=this.o(a,x,y+A.offset,q-A.offset*2,p,s,w,A.offset);
|
||||
a.fill();a.globalAlpha=1}this.renderTextAt("middle",false,z[0]+3,parseInt(y+(z[1]-y)/2,10),this.e.label(b[d]));f.addRect(b[d].id,[x,y,z[0],z[1]],e)}}},o:function(a,b,c,d,e,f,g,i){var j=0;if(e>f*g){var k=(e-f*g)/e;j=-Math.asin(k)+Math.PI/2}a.moveTo(b,c+i);var h=b+f*g-e-(e?0:i);e<f*g&&a.lineTo(h,c+i);f=c+e;e&&a.arc(h,f,e-i,-Math.PI/2+j,0,false);var m=c+d-e-(e?0:i),l=h+e-(e?i:0);a.lineTo(l,m);var n=h;e&&a.arc(n,m,e-i,0,Math.PI/2-j,false);var o=c+d-i;a.lineTo(b,o);a.lineTo(b,c+i);return[l,o]},$:function(a,
|
||||
b,c,d,e,f,g){this.xa(a,b,c,d,e,f);this.ya(a,b,c,d,g)},ya:function(a,b,c,d,e){if(this.e.yAxis){var f=c.x-0.5,g=d.y+0.5,i=c.y;this.i(a,f,g,f,i,this.e.yAxis.color,1);for(a=0;a<b.length;a++)this.renderTextAt("middle",0,0,i+e/2+a*e,this.e.yAxis.template(b[a]),"dhx_axis_item_y",c.x-5);this.oa(c,d)}},xa:function(a,b,c,d,e,f){var g,i={},j=this.e.xAxis;if(j){b=d.y+0.5;var k=c.x-0.5,h=d.x-0.5;this.i(a,k,b,h,b,j.color,1);if(j.step)g=parseFloat(j.step);if(typeof j.step=="undefined"||typeof j.start=="undefined"||
|
||||
typeof j.end=="undefined"){i=this.V(e,f);e=i.start;f=i.end;g=i.step;this.e.xAxis.end=f;this.e.xAxis.start=e;this.e.xAxis.step=g}if(g!==0){for(var m=(h-k)*g/(f-e),l=0,n=e;n<=f;n+=g){if(i.fixNum)n=parseFloat((new Number(n)).toFixed(i.fixNum));var o=Math.floor(k+l*m)+0.5;n!=e&&j.lines&&this.i(a,o,b,o,c.y,this.e.xAxis.color,0.2);this.renderTextAt(false,true,o,b+2,j.template(n.toString()),"dhx_axis_item_x");l++}this.renderTextAt(true,false,k,d.y+this.e.padding.bottom-3,this.e.xAxis.title,"dhx_axis_title_x",
|
||||
d.x-c.x);j.lines&&this.i(a,k,c.y-0.5,h,c.y-0.5,this.e.xAxis.color,0.2)}}}};
|
||||
dhtmlx.chart.stackedBarH={pvt_render_stackedBarH:function(a,b,c,d,e,f){var g,i,j,k,h=d.x-c.x,m=!!this.e.yAxis;i=this.Q(b);g=i.max;i=i.min;var l=Math.floor((d.y-c.y)/b.length);e||this.$(a,b,c,d,i,g,l);if(m){g=parseFloat(this.e.xAxis.end);i=parseFloat(this.e.xAxis.start)}j=this.z(i,g);k=j[0];j=j[1];var n=k?h/k:10;if(!m){var o=10;n=k?(h-o)/k:10}k=parseInt(this.e.width,10);if(k+4>l)k=l-4;var s=Math.floor((l-k)/2),t=0,q=false,v=this.e.gradient;q=false;if(v=this.e.gradient)q=true;m||this.i(a,c.x-0.5,c.y,
|
||||
c.x-0.5,d.y,"#000000",1);for(d=0;d<b.length;d++){if(!e)b[d].$startX=c.x;var p=parseFloat(this.e.value(b[d]));if(p>g)p=g;p-=i;p*=j;var u=c.x,r=c.y+s+d*l;if(e)u=b[d].$startX||u;if(p<0||this.e.yAxis&&p===0)this.renderTextAt("middle",true,u+10,r+k/2,this.e.label(b[d]));else{m||(p+=o/n);var w=this.e.color.call(this,b[d]);if(this.e.border){a.beginPath();a.fillStyle=w;this.o(a,u,r,k,t,n,p,0);a.lineTo(u,0);a.fill();a.fillStyle="#000000";a.globalAlpha=0.37;a.beginPath();this.o(a,u,r,k,t,n,p,0);a.fill()}a.globalAlpha=
|
||||
1;a.globalAlpha=this.e.alpha.call(this,b[d]);a.fillStyle=this.e.color.call(this,b[d]);a.beginPath();var x=this.o(a,u,r,k,t,n,p,this.e.border?1:0);if(v&&!q)a.lineTo(c.x+h,r+(this.e.border?1:0));a.fill();if(q!=false){w=this.G(a,u,r+k,u,r,q,w,"x");a.fillStyle=w.gradient;a.beginPath();x=this.o(a,u,r,k,t,n,p,0);a.fill();a.globalAlpha=1}this.renderTextAt("middle",true,b[d].$startX+(x[0]-b[d].$startX)/2-1,r+(x[1]-r)/2,this.e.label(b[d]));f.addRect(b[d].id,[b[d].$startX,r,x[0],x[1]],e);b[d].$startX=x[0]}}}};
|
||||
dhtmlx.chart.stackedBar={pvt_render_stackedBar:function(a,b,c,d,e,f){var g,i,j,k=d.y-c.y;j=!!this.e.yAxis;var h=!!this.e.xAxis;i=this.Q(b);g=i.max;i=i.min;var m=Math.floor((d.x-c.x)/b.length);e||this.N(a,b,c,d,i,g,m);if(j){g=parseFloat(this.e.yAxis.end);i=parseFloat(this.e.yAxis.start)}g=this.z(i,g);j=g[0];g=g[1];j=j?k/j:10;var l=parseInt(this.e.width,10);if(l+4>m)l=m-4;var n=Math.floor((m-l)/2),o=this.e.gradient?this.e.gradient:false;h||this.i(a,c.x,d.y+0.5,d.x,d.y+0.5,"#000000",1);for(h=0;h<b.length;h++){var s=
|
||||
parseFloat(this.e.value(b[h]));if(s){e||(s-=i);s*=g;var t=c.x+n+h*m,q=d.y;if(e)q=b[h].$startY||q;if(!(q<c.y+1))if(s<0||this.e.yAxis&&s===0)this.renderTextAt(true,true,t+Math.floor(l/2),q,this.e.label(b[h]));else{var v=this.e.color.call(this,b[h]);if(this.e.border){a.beginPath();a.fillStyle=v;this.I(a,t-1,q,l+2,j,s,0,c.y);a.lineTo(t,q);a.fill();a.fillStyle="#000000";a.globalAlpha=0.37;a.beginPath();this.I(a,t-1,q,l+2,j,s,0,c.y);a.fill()}a.globalAlpha=this.e.alpha.call(this,b[h]);a.fillStyle=this.e.color.call(this,
|
||||
b[h]);a.beginPath();var p=this.I(a,t,q,l,j,s,this.e.border?1:0,c.y);a.fill();a.globalAlpha=1;if(o){v=this.G(a,t,q,t+l,p[1],o,v,"y");a.fillStyle=v.gradient;a.beginPath();p=this.I(a,t+v.offset,q,l-v.offset*2,j,s,this.e.border?1:0,c.y);a.fill();a.globalAlpha=1}this.renderTextAt(false,true,t+Math.floor(l/2),p[1]+(q-p[1])/2-7,this.e.label(b[h]));f.addRect(b[h].id,[t,p[1],p[0],b[h].$startY||q],e);b[h].$startY=this.e.border?p[1]+1:p[1]}}}},I:function(a,b,c,d,e,f,g,i){a.moveTo(b,c);f=c-e*f+g;if(f<i)f=i;a.lineTo(b,
|
||||
f);e=b+d;f=f;a.lineTo(e,f);var j=b+d;a.lineTo(j,c);a.lineTo(b,c);return[j,f-2*g]}};
|
||||
dhtmlx.chart.line={pvt_render_line:function(a,b,c,d,e,f){e=this.C(a,b,c,d,e);var g=Math.floor(e.cellWidth/2);if(b.length)for(var i=this.p(b[0],c,d,e),j=this.e.offset?c.x+e.cellWidth*0.5:c.x,k=j,h=1;h<=b.length;h++){var m=Math.floor(e.cellWidth*h)-0.5+k;if(b.length!=h){var l=this.p(b[h],c,d,e);this.i(a,j,i,m,l,this.e.line.color(b[h-1]),this.e.line.width)}this.M(a,j,i,b[h-1],!!this.e.offset);f.addRect(b[h-1].id,[j-g,i-g,j+g,i+g]);i=l;j=m}},M:function(a,b,c,d,e){var f=parseInt(this.e.item.radius,10);
|
||||
a.lineWidth=parseInt(this.e.item.borderWidth,10);a.fillStyle=this.e.item.color(d);a.strokeStyle=this.e.item.borderColor(d);a.beginPath();a.arc(b,c,f,0,Math.PI*2,true);a.fill();a.stroke();e&&this.renderTextAt(false,true,b,c-f-this.e.labelOffset,this.e.label(d))},p:function(a,b,c,d){var e=d.minValue,f=d.maxValue,g=d.unit,i=d.valueFactor;a=this.e.value(a);i=(parseFloat(a)-e)*i;this.e.yAxis||(i+=d.startValue/g);d=c.y-Math.floor(g*i);if(i<0)d=c.y;if(a>f)d=b.y;if(a<e)d=c.y;return d},C:function(a,b,c,d,
|
||||
e){var f={};f.totalHeight=d.y-c.y;f.cellWidth=Math.round((d.x-c.x)/(!this.e.offset?b.length-1:b.length));var g=!!this.e.yAxis,i=this.e.view.indexOf("stacked")!=-1?this.Q(b):this.O();f.maxValue=i.max;f.minValue=i.min;e||this.N(a,b,c,d,f.minValue,f.maxValue,f.cellWidth);if(g){f.maxValue=parseFloat(this.e.yAxis.end);f.minValue=parseFloat(this.e.yAxis.start)}b=this.z(f.minValue,f.maxValue);a=b[0];f.valueFactor=b[1];f.unit=a?f.totalHeight/a:10;f.startValue=0;if(!g){f.startValue=f.unit>10?f.unit:10;f.unit=
|
||||
a?(f.totalHeight-f.startValue)/a:10}return f}};
|
||||
dhtmlx.chart.bar={pvt_render_bar:function(a,b,c,d,e,f){var g,i,j,k,h=d.y-c.y,m=!!this.e.yAxis,l=!!this.e.xAxis;i=this.O();g=i.max;i=i.min;var n=Math.floor((d.x-c.x)/b.length);!e&&!(this.e.origin!="auto"&&!m)&&this.N(a,b,c,d,i,g,n);if(m){g=parseFloat(this.e.yAxis.end);i=parseFloat(this.e.yAxis.start)}j=this.z(i,g);k=j[0];j=j[1];var o=k?h/k:k;if(!m&&!(this.e.origin!="auto"&&l)){var s=10;o=k?(h-s)/k:s}!e&&this.e.origin!="auto"&&!m&&this.e.origin>i&&this.da(a,b,c,d,n,d.y-o*(this.e.origin-i));h=parseInt(this.e.width,
|
||||
10);if(this.h&&h*this.h.length+4>n)h=n/this.h.length-4;k=Math.floor((n-h*this.h.length)/2);var t=typeof this.e.radius!="undefined"?parseInt(this.e.radius,10):Math.round(h/5),q=false,v=this.e.gradient;if(v&&typeof v!="function"){q=v;v=false}else if(v){v=a.createLinearGradient(0,d.y,0,c.y);this.e.gradient(v)}l||this.i(a,c.x,d.y+0.5,d.x,d.y+0.5,"#000000",1);for(var p=0;p<b.length;p++){var u=parseFloat(this.e.value(b[p]));if(u>g)u=g;u-=i;u*=j;var r=c.x+k+p*n+(h+1)*e,w=d.y;if(u<0||this.e.yAxis&&u===0&&
|
||||
!(this.e.origin!="auto"&&this.e.origin>i))this.renderTextAt(true,true,r+Math.floor(h/2),w,this.e.label(b[p]));else{if(!m&&!(this.e.origin!="auto"&&l))u+=s/o;var x=v||this.e.color.call(this,b[p]);this.e.border&&this.va(a,r,w,h,i,t,o,u,x);a.globalAlpha=this.e.alpha.call(this,b[p]);var y=this.ua(a,c,r,w,h,i,t,o,u,x,v,q);a.globalAlpha=1;q&&this.wa(a,r,w,h,i,t,o,u,x,q);y[0]!=r?this.renderTextAt(false,true,r+Math.floor(h/2),y[1],this.e.label(b[p])):this.renderTextAt(true,true,r+Math.floor(h/2),y[3],this.e.label(b[p]));
|
||||
f.addRect(b[p].id,[r,y[3],y[2],y[1]],e)}}},K:function(a,b,c,d,e,f,g){var i=this.e.xAxis,j=c;if(i&&this.e.origin!="auto"&&this.e.origin>g){c-=(this.e.origin-g)*e;j=c;d-=this.e.origin-g;if(d<0){d*=-1;a.translate(b+f,c);a.rotate(Math.PI);c=b=0}c-=0.5}return{value:d,x0:b,y0:c,start:j}},ua:function(a,b,c,d,e,f,g,i,j,k,h,m){a.save();a.fillStyle=k;var l=this.K(a,c,d,j,i,e,f);e=this.H(a,l.x0,l.y0,e,g,i,l.value,this.e.border?1:0);if(h&&!m)a.lineTo(l.x0+(this.e.border?1:0),b.y);a.fill();a.restore();a=l.x0;
|
||||
b=l.x0!=c?c+e[0]:e[0];d=l.x0!=c?l.start-e[1]:d;c=l.x0!=c?l.start:e[1];return[a,d,b,c]},va:function(a,b,c,d,e,f,g,i,j){a.save();b=this.K(a,b,c,i,g,d,e);a.fillStyle=j;this.H(a,b.x0,b.y0,d,f,g,b.value,0);a.lineTo(b.x0,0);a.fill();a.fillStyle="#000000";a.globalAlpha=0.37;this.H(a,b.x0,b.y0,d,f,g,b.value,0);a.fill();a.restore()},wa:function(a,b,c,d,e,f,g,i,j,k){a.save();b=this.K(a,b,c,i,g,d,e);j=this.G(a,b.x0,b.y0,b.x0+d,b.y0-g*b.value+2,k,j,"y");a.fillStyle=j.gradient;this.H(a,b.x0+j.offset,b.y0,d-j.offset*
|
||||
2,f,g,b.value,j.offset);a.fill();a.restore()},H:function(a,b,c,d,e,f,g,i){a.beginPath();var j=0;if(e>f*g){var k=(e-f*g)/e;j=-Math.acos(k)+Math.PI/2}a.moveTo(b+i,c);var h=c-Math.floor(f*g)+e+(e?0:i);e<f*g&&a.lineTo(b+i,h);f=b+e;e&&a.arc(f,h,e-i,-Math.PI+j,-Math.PI/2,false);g=b+d-e-(e?0:i);f=h-e+(e?i:0);a.lineTo(g,f);h=h;e&&a.arc(g,h,e-i,-Math.PI/2,0-j,false);d=b+d-i;a.lineTo(d,c);a.lineTo(b+i,c);return[d,f]}};
|
||||
dhtmlx.chart.pie={pvt_render_pie:function(a,b,c,d,e,f){this.na(a,b,c,d,1,f)},na:function(a,b,c,d,e,f){var g=0,i=this.Ga(c,d);c=this.e.radius?this.e.radius:i.radius;this.max(this.e.value);for(var j=[],k=[],h=0,m=0;m<b.length;m++)g+=parseFloat(this.e.value(b[m]));for(m=0;m<b.length;m++){k[m]=parseFloat(this.e.value(b[m]));j[m]=Math.PI*2*(g?(k[m]+h)/g:1/b.length);h+=k[m]}d=this.e.x?this.e.x:i.x;var l=this.e.y?this.e.y:i.y;e==1&&this.e.shadow&&this.sa(a,d,l,c);l/=e;var n=-Math.PI/2;a.scale(1,e);for(m=
|
||||
0;m<b.length;m++)if(k[m]){a.lineWidth=2;a.beginPath();a.moveTo(d,l);alpha1=-Math.PI/2+j[m]-1.0E-4;a.arc(d,l,c,n,alpha1,false);a.lineTo(d,l);var o=this.e.color.call(this,b[m]);a.fillStyle=o;a.strokeStyle=this.e.lineColor(b[m]);a.stroke();a.fill();this.e.pieInnerText&&this.ba(d,l,5*c/6,n,alpha1,e,this.e.pieInnerText(b[m],g),true);this.e.label&&this.ba(d,l,c+this.e.labelOffset,n,alpha1,e,this.e.label(b[m]));if(e!=1){this.W(a,d,l,n,alpha1,c,true);a.fillStyle="#000000";a.globalAlpha=0.2;this.W(a,d,l,n,
|
||||
alpha1,c,false);a.globalAlpha=1;a.fillStyle=o}f.addSector(b[m].id,n,alpha1,d,l,c,e);n=alpha1}if(this.e.gradient){b=e!=1?d+c/3:d;f=e!=1?l+c/3:l;this.bb(a,d,l,c,b,f)}a.scale(1,1/e)},Ga:function(a,b){var c=b.x-a.x,d=b.y-a.y;b=a.x+c/2;a=a.y+d/2;var e=Math.min(c/2,d/2);return{x:b,y:a,radius:e}},W:function(a,b,c,d,e,f,g){a.lineWidth=1;if(d<=0&&e>=0||d>=0&&e<=Math.PI||d<=Math.PI&&e>=Math.PI){if(d<=0&&e>=0){d=0;g=false;this.ca(a,b,c,f,d,e)}if(d<=Math.PI&&e>=Math.PI){e=Math.PI;g=false;this.ca(a,b,c,f,d,e)}var i=
|
||||
(this.e.height||Math.floor(f/4))/this.e.cant;a.beginPath();a.arc(b,c,f,d,e,false);a.lineTo(b+f*Math.cos(e),c+f*Math.sin(e)+i);a.arc(b,c+i,f,e,d,true);a.lineTo(b+f*Math.cos(d),c+f*Math.sin(d));a.fill();g&&a.stroke()}},ca:function(a,b,c,d,e,f){a.beginPath();a.arc(b,c,d,e,f,false);a.stroke()},sa:function(a,b,c,d){for(var e=["#676767","#7b7b7b","#a0a0a0","#bcbcbc","#d1d1d1","#d6d6d6"],f=e.length-1;f>-1;f--){a.beginPath();a.fillStyle=e[f];a.arc(b+2,c+2,d+f,0,Math.PI*2,true);a.fill()}},Fa:function(a){a.addColorStop(0,
|
||||
"#ffffff");a.addColorStop(0.7,"#7a7a7a");a.addColorStop(1,"#000000");return a},bb:function(a,b,c,d,e,f){a.globalAlpha=0.3;a.beginPath();var g;if(typeof this.e.gradient!="function"){g=a.createRadialGradient(e,f,d/4,b,c,d);g=this.Fa(g)}else g=this.e.gradient(g);a.fillStyle=g;a.arc(b,c,d,0,Math.PI*2,true);a.fill();a.globalAlpha=1},ba:function(a,b,c,d,e,f,g,i){var j=this.renderText(0,0,g,0,1);if(j){var k=j.scrollWidth;j.style.width=k+"px";if(k>a)k=a;var h=8;if(i)h=k/1.8;var m=d+(e-d)/2;c-=(h-8)/2;var l=
|
||||
-h,n=-8,o="left";if(m>=Math.PI/2&&m<Math.PI){l=-k-l+1;o="right"}if(m<=3*Math.PI/2&&m>=Math.PI){l=-k-l+1;o="right"}d=(b+Math.floor(c*Math.sin(m)))*f+n;h=a+Math.floor((c+h/2)*Math.cos(m))+l;var s=e<Math.PI/2+0.01,t=m<Math.PI/2;if(t&&s)h=Math.max(h,a+3);else if(!t&&!s)h=Math.min(h,a-k);if(!i&&f<1&&d>b*f)d+=this.e.height||Math.floor(c/4);j.style.top=d+"px";j.style.left=h+"px";j.style.width=k+"px";j.style.textAlign=o;j.style.whiteSpace="nowrap"}}};
|
||||
dhtmlx.chart.pie3D={pvt_render_pie3D:function(a,b,c,d,e,f){this.na(a,b,c,d,this.e.cant,f)}};
|
||||
dhtmlx.Template={J:{},empty:function(){return""},setter:function(a,b){return dhtmlx.Template.fromHTML(b)},obj_setter:function(a,b){var c=dhtmlx.Template.setter(a,b),d=this;return function(){return c.apply(d,arguments)}},fromHTML:function(a){if(typeof a=="function")return a;if(this.J[a])return this.J[a];a=(a||"").toString();a=a.replace(/[\r\n]+/g,"\\n");a=a.replace(/\{obj\.([^}?]+)\?([^:]*):([^}]*)\}/g,'"+(obj.$1?"$2":"$3")+"');a=a.replace(/\{common\.([^}\(]*)\}/g,'"+common.$1+"');a=a.replace(/\{common\.([^\}\(]*)\(\)\}/g,
|
||||
'"+(common.$1?common.$1(obj):"")+"');a=a.replace(/\{obj\.([^}]*)\}/g,'"+obj.$1+"');a=a.replace(/#([a-z0-9_]+)#/gi,'"+obj.$1+"');a=a.replace(/\{obj\}/g,'"+obj+"');a=a.replace(/\{-obj/g,"{obj");a=a.replace(/\{-common/g,"{common");a='return "'+a+'";';return this.J[a]=Function("obj","common",a)}};
|
||||
dhtmlx.Type={add:function(a,b){if(!a.types&&a.prototype.types)a=a.prototype;var c=b.name||"default";this.T(b);this.T(b,"edit");this.T(b,"loading");a.types[c]=dhtmlx.extend(dhtmlx.extend({},a.types[c]||this.ta),b);return c},ta:{css:"default",template:function(){return""},template_edit:function(){return""},template_loading:function(){return"..."},width:150,height:80,margin:5,padding:0},T:function(a,b){b="template"+(b?"_"+b:"");var c=a[b];if(c&&typeof c=="string"){if(c.indexOf("->")!=-1){c=c.split("->");
|
||||
switch(c[0]){case "html":c=dhtmlx.html.getValue(c[1]).replace(/\"/g,'\\"');break;case "http":c=(new dhtmlx.ajax).sync().get(c[1],{uid:(new Date).valueOf()}).responseText;break;default:break}}a[b]=dhtmlx.Template.fromHTML(c)}}};
|
||||
dhtmlx.SingleRender={k:function(){},eb:function(a){return this.type.Oa(a,this.type)+this.type.template(a,this.type)+this.type.Na},render:function(){if(!this.callEvent||this.callEvent("onBeforeRender",[this.data])){if(this.data)this.L.innerHTML=this.eb(this.data);this.callEvent&&this.callEvent("onAfterRender",[])}}};
|
||||
dhtmlx.ui.Tooltip=function(a){this.name="Tooltip";this.version="3.0";if(typeof a=="string")a={template:a};dhtmlx.extend(this,dhtmlx.Settings);dhtmlx.extend(this,dhtmlx.SingleRender);this.B(a,{type:"default",dy:0,dx:20});this.L=this.g=document.createElement("DIV");this.g.className="dhx_tooltip";dhtmlx.html.insertBefore(this.g,document.body.firstChild)};
|
||||
dhtmlx.ui.Tooltip.prototype={show:function(a,b){if(!this.Z){if(this.data!=a){this.data=a;this.render(a)}this.g.style.top=b.y+this.e.dy+"px";this.g.style.left=b.x+this.e.dx+"px";this.g.style.display="block"}},hide:function(){this.data=null;this.g.style.display="none"},disable:function(){this.Z=true},enable:function(){this.Z=false},types:{"default":dhtmlx.Template.fromHTML("{obj.id}")},template_item_start:dhtmlx.Template.empty,template_item_end:dhtmlx.Template.empty};
|
||||
dhtmlx.AutoTooltip={tooltip_setter:function(a,b){var c=new dhtmlx.ui.Tooltip(b);this.attachEvent("onMouseMove",function(d,e){c.show(this.get(d),dhtmlx.html.pos(e))});this.attachEvent("onMouseOut",function(){c.hide()});this.attachEvent("onMouseMoving",function(){c.hide()});return c}};dhtmlx.DataStore=function(){this.name="DataStore";dhtmlx.extend(this,dhtmlx.EventSystem);this.setDriver("xml");this.pull={};this.order=dhtmlx.toArray();this.gb=false};
|
||||
dhtmlx.DataStore.prototype={setDriver:function(a){this.driver=dhtmlx.DataDriver[a]},qa:function(a){if(a.item){if(!(a.item instanceof Array))a.item=[a.item];for(var b=0;b<a.item.length;b++){var c=a.item[b],d=this.id(c);a.item[b]=d;this.pull[d]=c;c.parent=a.id;c.level=a.level+1;this.qa(c)}}},Wa:function(a){for(var b=this.driver.getInfo(a),c=this.driver.getRecords(a),d=(b.u||0)*1,e=0,f=0;f<c.length;f++){var g=this.driver.getDetails(c[f]),i=this.id(g);if(!this.pull[i]){this.order[e+d]=i;e++}this.pull[i]=
|
||||
g;if(this.gb){g.level=1;this.qa(g)}}for(f=0;f<b.w;f++)if(!this.order[f]){i=dhtmlx.uid();g={id:i,$template:"loading"};this.pull[i]=g;this.order[f]=i}this.callEvent("onStoreLoad",[this.driver,a]);this.refresh()},id:function(a){return a.id||(a.id=dhtmlx.uid())},get:function(a){return this.pull[a]},set:function(a,b){this.pull[a]=b;this.refresh()},refresh:function(a){a?this.callEvent("onStoreUpdated",[a,this.pull[a],"update"]):this.callEvent("onStoreUpdated",[null,null,null])},getRange:function(a,b){if(arguments.length){a=
|
||||
this.indexById(a);b=this.indexById(b);if(a>b){var c=b;b=a;a=c}}else{a=this.min||0;b=Math.min(this.max||Infinity,this.dataCount()-1)}return this.getIndexRange(a,b)},getIndexRange:function(a,b){b=Math.min(b,this.dataCount()-1);var c=dhtmlx.toArray();for(a=a;a<=b;a++)c.push(this.get(this.order[a]));return c},dataCount:function(){return this.order.length},exists:function(a){return!!this.pull[a]},move:function(a,b){if(!(a<0||b<0)){var c=this.idByIndex(a),d=this.get(c);this.order.removeAt(a);this.order.insertAt(c,
|
||||
Math.min(this.order.length,b));this.callEvent("onStoreUpdated",[c,d,"move"])}},add:function(a,b){var c=this.id(a),d=this.dataCount();if(dhtmlx.isNotDefined(b)||b<0)b=d;if(b>d)b=Math.min(this.order.length,b);if(this.callEvent("onbeforeAdd",[c,b])){if(this.exists(c))return null;this.pull[c]=a;this.order.insertAt(c,b);if(this.m){var e=this.m.length;if(!b&&this.order.length)e=0;this.m.insertAt(c,e)}this.callEvent("onafterAdd",[c,b]);this.callEvent("onStoreUpdated",[c,a,"add"]);return c}},remove:function(a){if(a instanceof
|
||||
Array)for(var b=0;b<a.length;b++)this.remove(a[b]);else if(this.callEvent("onbeforedelete",[a])){if(!this.exists(a))return null;b=this.get(a);this.order.remove(a);this.m&&this.m.remove(a);delete this.pull[a];this.callEvent("onafterdelete",[a]);this.callEvent("onStoreUpdated",[a,b,"delete"])}},clearAll:function(){this.pull={};this.order=dhtmlx.toArray();this.m=null;this.callEvent("onClearAll",[]);this.refresh()},idByIndex:function(a){return this.order[a]},indexById:function(a){return a=this.order.find(a)},
|
||||
next:function(a,b){return this.order[this.indexById(a)+(b||1)]},first:function(){return this.order[0]},last:function(){return this.order[this.order.length-1]},previous:function(a,b){return this.order[this.indexById(a)-(b||1)]},sort:function(a,b,c){var d=a;if(typeof a=="function")d={as:a,dir:b};else if(typeof a=="string")d={by:a,dir:b,as:c};var e=[d.by,d.dir,d.as];if(this.callEvent("onbeforesort",e)){if(this.order.length){var f=dhtmlx.sort.create(d),g=this.getRange(this.first(),this.last());g.sort(f);
|
||||
this.order=g.map(function(i){return this.id(i)},this)}this.refresh();this.callEvent("onaftersort",e)}},filter:function(a,b){if(this.m){this.order=this.m;delete this.m}if(a){var c=a;if(typeof a=="string"){a=dhtmlx.Template.setter(0,a);c=function(e,f){return a(e).toLowerCase().indexOf(f)!=-1}}b=(b||"").toString().toLowerCase();var d=dhtmlx.toArray();this.order.each(function(e){c(this.get(e),b)&&d.push(e)},this);this.m=this.order;this.order=d}this.refresh()},each:function(a,b){for(var c=0;c<this.order.length;c++)a.call(b||
|
||||
this,this.get(this.order[c]))},provideApi:function(a,b){b&&this.mapEvent({onbeforesort:a,onaftersort:a,onbeforeadd:a,onafteradd:a,onbeforedelete:a,onafterdelete:a});for(var c=["sort","add","remove","exists","idByIndex","indexById","get","set","refresh","dataCount","filter","next","previous","clearAll","first","last"],d=0;d<c.length;d++)a[c[d]]=dhtmlx.methodPush(this,c[d])}};
|
||||
dhtmlx.sort={create:function(a){return dhtmlx.sort.dir(a.dir,dhtmlx.sort.by(a.by,a.as))},as:{"int":function(a,b){a*=1;b*=1;return a>b?1:a<b?-1:0},string_strict:function(a,b){a=a.toString();b=b.toString();return a>b?1:a<b?-1:0},string:function(a,b){a=a.toString().toLowerCase();b=b.toString().toLowerCase();return a>b?1:a<b?-1:0}},by:function(a,b){if(typeof b!="function")b=dhtmlx.sort.as[b||"string"];a=dhtmlx.Template.setter(0,a);return function(c,d){return b(a(c),a(d))}},dir:function(a,b){if(a=="asc")return b;
|
||||
return function(c,d){return b(c,d)*-1}}};
|
||||
dhtmlx.Group={k:function(){this.data.attachEvent("onStoreLoad",dhtmlx.bind(function(){this.e.group&&this.group(this.e.group,false)},this));this.attachEvent("onBeforeRender",dhtmlx.bind(function(a){if(this.e.sort){a.block();a.sort(this.e.sort);a.unblock()}},this));this.attachEvent("onBeforeSort",dhtmlx.bind(function(){this.e.sort=null},this))},Ja:function(a,b){a.attachEvent("onClearAll",dhtmlx.bind(function(){this.ungroup(false)},b))},sum:function(a,b){a=dhtmlx.Template.setter(0,a);b=b||this.data;
|
||||
var c=0;b.each(function(d){c+=a(d)*1});return c},min:function(a,b){a=dhtmlx.Template.setter(0,a);b=b||this.data;var c=Infinity;b.each(function(d){if(a(d)*1<c)c=a(d)*1});return c*1},max:function(a,b){a=dhtmlx.Template.setter(0,a);b=b||this.data;var c=-Infinity;b.each(function(d){if(a(d)*1>c)c=a(d)*1});return c},cb:function(a){var b=function(j,k){j=dhtmlx.Template.setter(0,j);return j(k[0])},c=dhtmlx.Template.setter(0,a.by);a.map[c]||(a.map[c]=[c,b]);var d={},e=[];this.data.each(function(j){var k=c(j);
|
||||
if(!d[k]){e.push({id:k});d[k]=dhtmlx.toArray()}d[k].push(j)});for(var f in a.map){var g=a.map[f][1]||b;if(typeof g!="function")g=this[g];for(var i=0;i<e.length;i++)e[i][f]=g.call(this,a.map[f][0],d[e[i].id])}this.ja=this.data;this.data=new dhtmlx.DataStore;this.data.provideApi(this,true);this.Ja(this.data,this);this.parse(e,"json")},group:function(a,b){this.ungroup(false);this.cb(a);b!==false&&this.render()},ungroup:function(a){if(this.ja){this.data=this.ja;this.data.provideApi(this,true)}a!==false&&
|
||||
this.render()},group_setter:function(a,b){return b},sort_setter:function(a,b){if(typeof b!="object")b={by:b};this.n(b,{as:"string",dir:"asc"});return b}};dhtmlx.KeyEvents={k:function(){dhtmlx.event(this.g,"keypress",this.Ta,this)},Ta:function(a){a=a||event;var b=a.which||a.keyCode;this.callEvent(this.hb?"onEditKeyPress":"onKeyPress",[b,a.ctrlKey,a.shiftKey,a])}};
|
||||
dhtmlx.MouseEvents={k:function(){if(this.on_click){dhtmlx.event(this.g,"click",this.Qa,this);dhtmlx.event(this.g,"contextmenu",this.Ra,this)}this.on_dblclick&&dhtmlx.event(this.g,"dblclick",this.Sa,this);if(this.on_mouse_move){dhtmlx.event(this.g,"mousemove",this.la,this);dhtmlx.event(this.g,dhtmlx.r?"mouseleave":"mouseout",this.la,this)}},Qa:function(a){return this.R(a,this.on_click,"ItemClick")},Sa:function(a){return this.R(a,this.on_dblclick,"ItemDblClick")},Ra:function(a){var b=dhtmlx.html.locate(a,
|
||||
this.q);if(b&&!this.callEvent("onBeforeContextMenu",[b,a]))return dhtmlx.html.preventEvent(a)},la:function(a){if(dhtmlx.r)a=document.createEventObject(event);this.ia&&window.clearTimeout(this.ia);this.callEvent("onMouseMoving",[a]);this.ia=window.setTimeout(dhtmlx.bind(function(){a.type=="mousemove"?this.Ua(a):this.Va(a)},this),500)},Ua:function(a){this.R(a,this.on_mouse_move,"MouseMove")||this.callEvent("onMouseOut",[a||event])},Va:function(a){this.callEvent("onMouseOut",[a||event])},R:function(a,
|
||||
b,c){a=a||event;for(var d=a.target||a.srcElement,e="",f=null,g=false;d&&d.parentNode;){if(!g&&d.getAttribute)if(f=d.getAttribute(this.q)){d.getAttribute("userdata")&&this.callEvent("onLocateData",[f,d]);if(!this.callEvent("on"+c,[f,a,d]))return;g=true}if(e=d.className){e=e.split(" ");e=e[0]||e[1];if(b[e])return b[e].call(this,a,f,d)}d=d.parentNode}return g}};
|
||||
dhtmlx.Settings={k:function(){this.e=this.config={}},define:function(a,b){if(typeof a=="object")return this.ma(a);return this.Y(a,b)},Y:function(a,b){var c=this[a+"_setter"];return this.e[a]=c?c.call(this,a,b):b},ma:function(a){if(a)for(var b in a)this.Y(b,a[b])},B:function(a,b){var c=dhtmlx.extend({},b);typeof a=="object"&&!a.tagName&&dhtmlx.extend(c,a);this.ma(c)},n:function(a,b){for(var c in b)switch(typeof a[c]){case "object":a[c]=this.n(a[c]||{},b[c]);break;case "undefined":a[c]=b[c];break;default:break}return a},
|
||||
Xa:function(a,b,c){if(typeof a=="object"&&!a.tagName)a=a.container;this.g=dhtmlx.toNode(a);if(!this.g&&c)this.g=c(a);this.g.className+=" "+b;this.g.onselectstart=function(){return false};this.L=this.g},ab:function(a){if(typeof a=="object")return this.type_setter("type",a);this.type=dhtmlx.extend({},this.types[a]);this.customize()},customize:function(a){a&&dhtmlx.extend(this.type,a);this.type.Oa=dhtmlx.Template.fromHTML(this.template_item_start(this.type));this.type.Na=this.template_item_end(this.type);
|
||||
this.render()},type_setter:function(a,b){this.ab(typeof b=="object"?dhtmlx.Type.add(this,b):b);return b},template_setter:function(a,b){return this.type_setter("type",{template:b})},css_setter:function(a,b){this.g.className+=" "+b;return b}};dhtmlx.compat=function(a,b){dhtmlx.compat[a]&&dhtmlx.compat[a](b)};
|
||||
(function(){if(!window.dhtmlxError){var a=function(){};window.dhtmlxError={catchError:a,throwError:a};window.convertStringToBoolean=function(c){return!!c};window.dhtmlxEventable=function(c){dhtmlx.extend(c,dhtmlx.EventSystem)};var b={getXMLTopNode:function(){},doXPath:function(c){return dhtmlx.DataDriver.xml.xpath(this.xml,c)},xmlDoc:{responseXML:true}};dhtmlx.compat.dataProcessor=function(c){var d="_sendData",e="_in_progress",f="_tMode",g="_waitMode";c[d]=function(i,j){if(i){if(j)this[e][j]=(new Date).valueOf();
|
||||
if(!this.callEvent("onBeforeDataSending",j?[j,this.getState(j)]:[]))return false;var k=this,h=this.serverProcessor;this[f]!="POST"?dhtmlx.ajax().get(h+(h.indexOf("?")!=-1?"&":"?")+this.serialize(i,j),"",function(m,l){b.xml=dhtmlx.DataDriver.xml.checkResponse(m,l);k.afterUpdate(k,null,null,null,b)}):dhtmlx.ajax().post(h,this.serialize(i,j),function(m,l){b.xml=dhtmlx.DataDriver.xml.checkResponse(m,l);k.afterUpdate(k,null,null,null,b)});this[g]++}}}}})();if(!dhtmlx.attaches)dhtmlx.attaches={};
|
||||
dhtmlx.attaches.attachAbstract=function(a,b){var c=document.createElement("DIV");c.id="CustomObject_"+dhtmlx.uid();c.style.width="100%";c.style.height="100%";c.cmp="grid";document.body.appendChild(c);this.attachObject(c.id);b.container=c.id;var d=this.vs[this.av];d.grid=new window[a](b);d.gridId=c.id;d.gridObj=c;d.grid.setSizes=function(){this.resize?this.resize():this.render()};var e="_viewRestore";return this.vs[this[e]()].grid};
|
||||
dhtmlx.attaches.attachDataView=function(a){return this.attachAbstract("dhtmlXDataView",a)};dhtmlx.attaches.attachChart=function(a){return this.attachAbstract("dhtmlXChart",a)};dhtmlx.compat.layout=function(){};dhtmlx.ajax=function(a,b,c){if(arguments.length!==0){var d=new dhtmlx.ajax;if(c)d.master=c;d.get(a,null,b)}if(!this.getXHR)return new dhtmlx.ajax;return this};
|
||||
dhtmlx.ajax.prototype={getXHR:function(){return dhtmlx.r?new ActiveXObject("Microsoft.xmlHTTP"):new XMLHttpRequest},send:function(a,b,c){var d=this.getXHR();if(typeof c=="function")c=[c];if(typeof b=="object"){var e=[];for(var f in b)e.push(f+"="+encodeURIComponent(b[f]));b=e.join("&")}if(b&&!this.post){a=a+(a.indexOf("?")!=-1?"&":"?")+b;b=null}d.open(this.post?"POST":"GET",a,!this.pa);this.post&&d.setRequestHeader("Content-type","application/x-www-form-urlencoded");if(!this.pa){var g=this;d.onreadystatechange=
|
||||
function(){if(!d.readyState||d.readyState==4){if(c&&g)for(var i=0;i<c.length;i++)if(c[i])c[i].call(g.master||g,d.responseText,d.responseXML,d);c=d=g=g.master=null}}}d.send(b||null);return d},get:function(a,b,c){this.post=false;return this.send(a,b,c)},post:function(a,b,c){this.post=true;return this.send(a,b,c)},sync:function(){this.pa=true;return this}};
|
||||
dhtmlx.DataLoader={k:function(){this.data=new dhtmlx.DataStore},load:function(a,b,c){this.callEvent("onXLS",[]);if(typeof b=="string"){this.data.setDriver(b);b=c}if(!this.data.feed)this.data.feed=function(d,e){if(this.F)return this.F=[d,e];else this.F=true;this.load(a+(a.indexOf("?")==-1?"?":"&")+"posStart="+d+"&count="+e,function(){var f=this.F;this.F=false;typeof f=="object"&&this.data.feed.apply(this,f)})};dhtmlx.ajax(a,[this.ka,b],this)},parse:function(a,b){this.callEvent("onXLS",[]);b&&this.data.setDriver(b);
|
||||
this.ka(a,null)},ka:function(a,b){this.data.Wa(this.data.driver.toObject(a,b));this.callEvent("onXLE",[])}};dhtmlx.DataDriver={};dhtmlx.DataDriver.json={toObject:function(a){if(typeof a=="string"){eval("dhtmlx.temp="+a);return dhtmlx.temp}return a},getRecords:function(a){if(a&&!(a instanceof Array))return[a];return a},getDetails:function(a){return a},getInfo:function(a){return{w:a.total_count||0,u:a.pos||0}}};
|
||||
dhtmlx.DataDriver.html={toObject:function(a){if(typeof a=="string"){var b=null;if(a.indexOf("<")==-1)b=dhtmlx.toNode(a);if(!b){b=document.createElement("DIV");b.innerHTML=a}return b.getElementsByTagName(this.tag)}return a},getRecords:function(a){if(a.tagName)return a.childNodes;return a},getDetails:function(a){return dhtmlx.DataDriver.xml.tagToObject(a)},getInfo:function(){return{w:0,u:0}},tag:"LI"};
|
||||
dhtmlx.DataDriver.jsarray={toObject:function(a){if(typeof a=="string"){eval("dhtmlx.temp="+a);return dhtmlx.temp}return a},getRecords:function(a){return a},getDetails:function(a){for(var b={},c=0;c<a.length;c++)b["data"+c]=a[c];return b},getInfo:function(){return{w:0,u:0}}};
|
||||
dhtmlx.DataDriver.csv={toObject:function(a){return a},getRecords:function(a){return a.split(this.row)},getDetails:function(a){a=this.stringToArray(a);for(var b={},c=0;c<a.length;c++)b["data"+c]=a[c];return b},getInfo:function(){return{w:0,u:0}},stringToArray:function(a){a=a.split(this.cell);for(var b=0;b<a.length;b++)a[b]=a[b].replace(/^[ \t\n\r]*(\"|)/g,"").replace(/(\"|)[ \t\n\r]*$/g,"");return a},row:"\n",cell:","};
|
||||
dhtmlx.DataDriver.xml={toObject:function(a,b){if(b&&(b=this.checkResponse(a,b)))return b;if(typeof a=="string")return this.fromString(a);return a},getRecords:function(a){return this.xpath(a,this.records)},records:"/*/item",userdata:"/*/userdata",getDetails:function(a){return this.tagToObject(a,{})},getUserData:function(a,b){b=b||{};var c=this.xpath(a,this.userdata);for(a=0;a<c.length;a++){var d=this.tagToObject(c[a]);b[d.name]=d.value}return b},getInfo:function(a){return{w:a.documentElement.getAttribute("total_count")||
|
||||
0,u:a.documentElement.getAttribute("pos")||0}},xpath:function(a,b){if(window.XPathResult){var c=a;if(a.nodeName.indexOf("document")==-1)a=a.ownerDocument;var d=[];a=a.evaluate(b,c,null,XPathResult.ANY_TYPE,null);for(b=a.iterateNext();b;){d.push(b);b=a.iterateNext()}return d}return a.selectNodes(b)},tagToObject:function(a,b){b=b||{};for(var c=a.attributes,d=0;d<c.length;d++)b[c[d].name]=c[d].value;var e=false,f=a.childNodes;for(d=0;d<f.length;d++)if(f[d].nodeType==1){var g=f[d].tagName;if(typeof b[g]!=
|
||||
"undefined"){b[g]instanceof Array||(b[g]=[b[g]]);b[g].push(this.tagToObject(f[d],{}))}else b[f[d].tagName]=this.tagToObject(f[d],{});e=true}if(!c.length&&!e)return this.nodeValue(a);b.value=this.nodeValue(a);return b},nodeValue:function(a){if(a.firstChild)return a.firstChild.data;return""},fromString:function(a){if(window.DOMParser)return(new DOMParser).parseFromString(a,"text/xml");if(window.ActiveXObject){temp=new ActiveXObject("Microsoft.xmlDOM");temp.loadXML(a);return temp}},checkResponse:function(a,
|
||||
b){if(b&&b.firstChild&&b.firstChild.tagName!="parsererror")return b;if(a=this.from_string(a.responseText.replace(/^[\s]+/,"")))return a}};dhtmlx.DataDriver.dhtmlxgrid={Ia:"_get_cell_value",toObject:function(a){return this.ea=a},getRecords:function(a){return a.rowsBuffer},getDetails:function(a){for(var b={},c=0;c<this.ea.getColumnsNum();c++)b["data"+c]=this.ea[this.Ia](a,c);return b},getInfo:function(){return{w:0,u:0}}};
|
||||
dhtmlx.Canvas={k:function(){this.D=[]},Ya:function(a){this.l=dhtmlx.html.create("canvas",{width:a.offsetWidth,height:a.offsetHeight});a.appendChild(this.l);if(!this.l.getContext)if(dhtmlx.r){dhtmlx.require("thirdparty/excanvas/excanvas.js");G_vmlCanvasManager.init_(document);G_vmlCanvasManager.initElement(this.l)}return this.l},getCanvas:function(a){return(this.l||this.Ya(this.g)).getContext(a||"2d")},$a:function(){if(this.l){this.l.setAttribute("width",this.l.parentNode.offsetWidth);this.l.setAttribute("height",
|
||||
this.l.parentNode.offsetHeight)}},renderText:function(a,b,c,d,e){if(c){a=dhtmlx.html.create("DIV",{"class":"dhx_canvas_text"+(d?" "+d:""),style:"left:"+a+"px; top:"+b+"px;"},c);this.g.appendChild(a);this.D.push(a);if(e)a.style.width=e+"px";return a}},renderTextAt:function(a,b,c,d,e,f,g){if(e=this.renderText.call(this,c,d,e,f,g)){if(a)e.style.top=a=="middle"?parseInt(d-e.offsetHeight/2,10)+"px":d-e.offsetHeight+"px";if(b)e.style.left=b=="left"?c-e.offsetWidth+"px":parseInt(c-e.offsetWidth/2,10)+"px"}return e},
|
||||
clearCanvas:function(){for(var a=0;a<this.D.length;a++)this.g.removeChild(this.D[a]);this.D=[];if(this.g.v){this.g.v.parentNode.removeChild(this.g.v);this.g.v=null}this.getCanvas().clearRect(0,0,this.l.offsetWidth,this.l.offsetHeight)}};
|
||||
dhtmlXChart=function(a){this.name="Chart";this.version="3.0";dhtmlx.extend(this,dhtmlx.Settings);this.Xa(a,"dhx_chart");dhtmlx.extend(this,dhtmlx.DataLoader);this.data.provideApi(this,true);dhtmlx.extend(this,dhtmlx.EventSystem);dhtmlx.extend(this,dhtmlx.MouseEvents);dhtmlx.extend(this,dhtmlx.Destruction);dhtmlx.extend(this,dhtmlx.Canvas);dhtmlx.extend(this,dhtmlx.Group);dhtmlx.extend(this,dhtmlx.AutoTooltip);for(var b in dhtmlx.chart)dhtmlx.extend(this,dhtmlx.chart[b]);this.B(a,{color:"RAINBOW",
|
||||
alpha:"1",label:false,value:"{obj.value}",padding:{},view:"pie",lineColor:"#ffffff",cant:0.5,width:15,labelWidth:100,line:{},item:{},shadow:true,gradient:false,border:true,labelOffset:20,origin:"auto"});this.h=[this.e];this.data.attachEvent("onStoreUpdated",dhtmlx.bind(function(){this.render()},this));this.attachEvent("onLocateData",this.db)};
|
||||
dhtmlXChart.prototype={q:"dhx_area_id",on_click:{},on_dblclick:{},on_mouse_move:{},resize:function(){this.$a();this.render()},view_setter:function(a,b){if(typeof this.e.offset=="undefined")this.e.offset=b=="area"||b=="stackedArea"?false:true;return b},render:function(){if(this.callEvent("onBeforeRender",[this.data])){this.clearCanvas();this.e.legend&&this.za(this.getCanvas(),this.data.getRange(),this.g.offsetWidth,this.g.offsetHeight);for(var a=this.Ea(this.g.offsetWidth,this.g.offsetHeight),b=new dhtmlx.ui.Map(this.q),
|
||||
c=this.e,d=0;d<this.h.length;d++){this.e=this.h[d];this["pvt_render_"+this.e.view](this.getCanvas(),this.data.getRange(),a.start,a.end,d,b)}b.render(this.g);this.e=c}},value_setter:dhtmlx.Template.obj_setter,alpha_setter:dhtmlx.Template.obj_setter,label_setter:dhtmlx.Template.obj_setter,lineColor_setter:dhtmlx.Template.obj_setter,pieInnerText_setter:dhtmlx.Template.obj_setter,gradient_setter:function(a,b){if(typeof b!="function"&&b&&(b===true||b!="3d"))b="light";return b},colormap:{RAINBOW:function(a){a=
|
||||
Math.floor(this.indexById(a.id)/this.dataCount()*1536);if(a==1536)a-=1;return this.Za[Math.floor(a/256)](a%256)}},color_setter:function(a,b){return this.colormap[b]||dhtmlx.Template.obj_setter(a,b)},legend_setter:function(a,b){if(typeof b!="object")b={template:b};this.n(b,{width:150,height:18,layout:"y",align:"left",valign:"bottom",template:"",marker:{type:"square",width:25,height:15}});b.template=dhtmlx.Template.setter(0,b.template);return b},item_setter:function(a,b){if(typeof b!="object")b={color:b,
|
||||
borderColor:b};this.n(b,{radius:4,color:"#000000",borderColor:"#000000",borderWidth:2});b.color=dhtmlx.Template.setter(0,b.color);b.borderColor=dhtmlx.Template.setter(0,b.borderColor);return b},line_setter:function(a,b){if(typeof b!="object")b={color:b};this.n(b,{width:3,color:"#d4d4d4"});b.color=dhtmlx.Template.setter(0,b.color);return b},padding_setter:function(a,b){if(typeof b!="object")b={left:b,right:b,top:b,bottom:b};this.n(b,{left:50,right:20,top:35,bottom:40});return b},xAxis_setter:function(a,
|
||||
b){if(!b)return false;if(typeof b!="object")b={template:b};this.n(b,{title:"",color:"#000000",template:"{obj}",lines:false});if(b.template)b.template=dhtmlx.Template.setter(0,b.template);return b},yAxis_setter:function(a,b){this.n(b,{title:"",color:"#000000",template:"{obj}",lines:true});if(b.template)b.template=dhtmlx.Template.setter(0,b.template);return b},N:function(a,b,c,d,e,f,g){e=this.Da(a,b,c,d,e,f);this.da(a,b,c,d,g,e);return e},da:function(a,b,c,d,e,f){if(this.e.xAxis){var g=c.x-0.5;f=parseInt(f?
|
||||
f:d.y,10)+0.5;var i=d.x,j,k=true;this.i(a,g,f,i,f,this.e.xAxis.color,1);for(var h=0;h<b.length;h++){if(this.e.offset===true)j=g+e/2+h*e;else{j=g+h*e;k=!!h}var m=this.e.origin!="auto"&&this.e.view=="bar"&&parseFloat(this.e.value(b[h]))<this.e.origin;this.Ba(j,f,b[h],k,m);this.e.view_setter!="bar"&&this.Ca(a,j,d.y,c.y)}this.renderTextAt(true,false,g,d.y+this.e.padding.bottom-3,this.e.xAxis.title,"dhx_axis_title_x",d.x-c.x);this.e.xAxis.lines&&this.e.offset&&this.i(a,i+0.5,d.y,i+0.5,c.y+0.5,this.e.xAxis.color,
|
||||
0.2)}},Da:function(a,b,c,d,e,f){var g;b={};if(this.e.yAxis){var i=c.x-0.5,j=d.y,k=c.y,h=d.y;this.i(a,i,j,i,k,this.e.yAxis.color,1);if(this.e.yAxis.step)g=parseFloat(this.e.yAxis.step);if(typeof this.e.yAxis.step=="undefined"||typeof this.e.yAxis.start=="undefined"||typeof this.e.yAxis.end=="undefined"){b=this.V(e,f);e=b.start;f=b.end;g=b.step;this.e.yAxis.end=f;this.e.yAxis.start=e}if(g!==0){k=(j-k)*g/(f-e);for(var m=0,l=e;l<=f;l+=g){if(b.fixNum)l=parseFloat((new Number(l)).toFixed(b.fixNum));var n=
|
||||
Math.floor(j-m*k)+0.5;!(l==e&&this.e.origin=="auto")&&this.e.yAxis.lines&&this.i(a,i,n,d.x,n,this.e.yAxis.color,0.2);if(l==this.e.origin)h=n;this.renderText(0,n-5,this.e.yAxis.template(l.toString()),"dhx_axis_item_y",c.x-5);m++}this.oa(c,d);return h}}},oa:function(a,b){if(a=this.renderTextAt("middle",false,0,parseInt((b.y-a.y)/2+a.y,10),this.e.yAxis.title,"dhx_axis_title_y"))a.style.left=(dhtmlx.env.transform?(a.offsetHeight-a.offsetWidth)/2:0)+"px"},V:function(a,b){if(this.e.origin!="auto"&&this.e.origin<
|
||||
a)a=this.e.origin;var c,d,e;c=(b-a)/8||1;var f=Math.floor(this.ga(c)),g=Math.pow(10,f),i=c/g;i=i>5?10:5;c=parseInt(i,10)*g;if(c>Math.abs(a))d=a<0?-c:0;else{var j=Math.abs(a),k=Math.floor(this.ga(j)),h=j/Math.pow(10,k);d=Math.ceil(h*10)/10*Math.pow(10,k)-c;if(a<0)d=-d-2*c}for(e=d;e<b;){e+=c;e=parseFloat((new Number(e)).toFixed(Math.abs(f)))}return{start:d,end:e,step:c,fixNum:Math.abs(f)}},O:function(a){var b,c;if((c=arguments.length&&a=="h"?this.e.xAxis:this.e.yAxis)&&typeof c.end!="undefied"&&typeof c.start!=
|
||||
"undefied"&&c.step){b=parseFloat(c.end);c=parseFloat(c.start)}else{b=this.max(this.h[0].value);c=this.min(this.h[0].value);if(this.h.length>1)for(var d=1;d<this.h.length;d++){var e=this.max(this.h[d].value),f=this.min(this.h[d].value);if(e>b)b=e;if(f<c)c=f}}return{max:b,min:c}},ga:function(a){var b="log";return Math.floor(Math[b](a)/Math.LN10)},Ba:function(a,b,c,d,e){this.e.xAxis&&this.renderTextAt(e,d,a,b,this.e.xAxis.template(c), "dhx_axis_item_x")},Ca:function(a,b,c,d){this.e.xAxis&&this.e.xAxis.lines&&this.i(a,
|
||||
b,c,b,d,this.e.xAxis.color,0.2)},i:function(a,b,c,d,e,f,g){a.strokeStyle=f;a.lineWidth=g;a.beginPath();a.moveTo(b,c);a.lineTo(d,e);a.stroke()},z:function(a,b){var c=1;if(b!=a){a=b-a;if(Math.abs(a)<1)for(;Math.abs(a)<1;){c*=10;a*=c}}else a=a;return[a,c]},Za:[function(a){return"#FF"+dhtmlx.math.toHex(a/2,2)+"00"},function(a){return"#FF"+dhtmlx.math.toHex(a/2+128,2)+"00"},function(a){return"#"+dhtmlx.math.toHex(255-a,2)+"FF00"},function(a){return"#00FF"+dhtmlx.math.toHex(a,2)},function(a){return"#00"+
|
||||
dhtmlx.math.toHex(255-a,2)+"FF"},function(a){return"#"+dhtmlx.math.toHex(a,2)+"00FF"}],addSeries:function(a){var b=this.e;this.e=dhtmlx.extend({},b);this.B(a,{});this.h.push(this.e);this.e=b},db:function(a,b){this.ra=b.getAttribute("userdata");for(a=0;a<this.h.length;a++){var c=this.h[a].tooltip;c&&c.disable()}(c=this.h[this.ra].tooltip)&&c.enable()},za:function(a,b){var c=0,d=0,e=this.e.legend,f,g,i=this.e.legend.layout!="x"?"width:"+e.width+"px":"",j=dhtmlx.html.create("DIV",{"class":"dhx_chart_legend",
|
||||
style:"left:"+c+"px; top:"+d+"px;"+i},"");this.g.appendChild(j);var k=[];if(e.values)for(h=0;h<e.values.length;h++)k.push(this.aa(j,e.values[h].text));else for(var h=0;h<b.length;h++)k.push(this.aa(j,e.template(b[h])));g=j.offsetWidth;f=j.offsetHeight;this.e.legend.width=g;this.e.legend.height=f;if(g<this.g.offsetWidth){if(e.layout=="x"&&e.align=="center")c=(this.g.offsetWidth-g)/2;if(e.align=="right")c=this.g.offsetWidth-g}if(f<this.g.offsetHeight)if(e.valign=="middle"&&e.align!="center"&&e.layout!=
|
||||
"x")d=(this.g.offsetHeight-f)/2;else if(e.valign=="bottom")d=this.g.offsetHeight-f;j.style.left=c+"px";j.style.top=d+"px";for(h=0;h<k.length;h++){var m=k[h],l=e.values?e.values[h].color:this.e.color.call(this,b[h]);this.Aa(a,m.offsetLeft+c,m.offsetTop+d,l)}k=null},aa:function(a,b){var c="";if(this.e.legend.layout=="x")c="float:left;";b=dhtmlx.html.create("DIV",{style:c+"padding-left:"+(10+this.e.legend.marker.width)+"px","class":"dhx_chart_legend_item"},b);a.appendChild(b);return b},Aa:function(a,
|
||||
b,c,d){var e=this.e.legend;a.strokeStyle=a.fillStyle=d;a.lineWidth=e.marker.height;a.lineCap=e.marker.type;a.beginPath();b+=a.lineWidth/2+5;c+=a.lineWidth/2+3;a.moveTo(b,c);b=b+e.marker.width-e.marker.height+1;a.lineTo(b,c);a.stroke()},Ea:function(a,b){var c,d,e,f;c=this.e.padding.left;d=this.e.padding.top;e=a-this.e.padding.right;f=b-this.e.padding.bottom;if(this.e.legend){a=this.e.legend;b=this.e.legend.width;var g=this.e.legend.height;if(a.layout=="x")if(a.valign=="center")if(a.align=="right")e-=
|
||||
b;else{if(a.align=="left")c+=b}else if(a.valign=="bottom")f-=g;else d+=g;else if(a.align=="right")e-=b;else if(a.align=="left")c+=b}return{start:{x:c,y:d},end:{x:e,y:f}}},Q:function(a){var b,c;if(this.e.yAxis&&typeof this.e.yAxis.end!="undefied"&&typeof this.e.yAxis.start!="undefied"&&this.e.yAxis.step){b=parseFloat(this.e.yAxis.end);c=parseFloat(this.e.yAxis.start)}else{for(var d=0;d<a.length;d++){a[d].$sum=0;a[d].$min=Infinity;for(b=0;b<this.h.length;b++){c=parseFloat(this.h[b].value(a[d]));if(!isNaN(c)){a[d].$sum+=
|
||||
c;if(c<a[d].$min)a[d].$min=c}}}b=-Infinity;c=Infinity;for(d=0;d<a.length;d++){if(a[d].$sum>b)b=a[d].$sum;if(a[d].$min<c)c=a[d].$min}if(c>0)c=0}return{max:b,min:c}},G:function(a,b,c,d,e,f,g,i){if(f=="light"){a=i=="x"?a.createLinearGradient(b,c,d,c):a.createLinearGradient(b,c,b,e);a.addColorStop(0,"#FFFFFF");a.addColorStop(0.9,g);a.addColorStop(1,g);g=2}else{a.globalAlpha=0.37;g=0;a=i=="x"?a.createLinearGradient(b,e,b,c):a.createLinearGradient(b,c,d,c);a.addColorStop(0,"#000000");a.addColorStop(0.5,
|
||||
"#FFFFFF");a.addColorStop(0.6,"#FFFFFF");a.addColorStop(1,"#000000")}return{gradient:a,offset:g}}};dhtmlx.compat("layout");
|
||||
@@ -0,0 +1,6 @@
|
||||
/*
|
||||
Copyright DHTMLX LTD. http://www.dhtmlx.com
|
||||
You allowed to use this component or parts of it under GPL terms
|
||||
To use it on other terms or get Professional edition of the component please contact us at sales@dhtmlx.com
|
||||
*/
|
||||
/*pure colors*/␍␍␍␍␍␍␍␍/*fonts*/␍␍␍␍␍/*2010 September 28*//* DHX DEPEND FROM FILE 'tooltip.css'*//*style used by tooltip's container*/␍.dhx_tooltip{␍ display:none;␍ position:absolute;␍ font-family:Tahoma;␍ font-size:8pt;␍ z-index:10000;␍ background-color:white;␍ padding:2px 2px 2px 2px;␍ border:1px solid #A4BED4;␍}/* DHX DEPEND FROM FILE 'chart.css'*//*chart container*/␍.dhx_chart{␍ position:relative;␍ font-family:Verdana;␍ font-size:13px;␍ color:#000000;␍ overflow:hidden;␍}␍/*labels*/␍.dhx_canvas_text{␍ position:absolute;␍ text-align:center;␍ overflow:hidden; ␍ white-space:nowrap;␍}␍/*map*/␍.dhx_map_img{␍ width : 100%;␍ height : 100%;␍ position : absolute;␍ top : 0px;␍ left : 0px;␍ border:0px;␍ filter:alpha(opacity=0);␍}␍/*scales*/␍.dhx_axis_item_y{␍ position:absolute;␍ height:10px;␍ line-height:10px;␍ text-align:right;␍}␍.dhx_axis_title_x{␍ text-align:center;␍ ␍}␍.dhx_axis_title_y{␍ text-align:center;␍ font-family:Verdana;␍ /*safari*/␍ -webkit-transform: rotate(-90deg);␍ /*firefox*/␍ -moz-transform: rotate(-90deg);␍ /*IE*/␍ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);␍ /*opera*/␍ -o-transform:rotate(-90deg);␍ padding-left:3px;␍}␍/*legend block*/␍.dhx_chart_legend{␍ position:absolute;␍}␍.dhx_chart_legend_item{␍ height:18px;␍ line-height:18px;␍ padding: 2px;␍ ␍}␍␍
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,10 @@
|
||||
ExplorerCanvas
|
||||
|
||||
Google Open Source:
|
||||
<http://code.google.com>
|
||||
<opensource@google.com>
|
||||
|
||||
Developers:
|
||||
Emil A Eklund <emil@eae.net>
|
||||
Erik Arvidsson <erik@eae.net>
|
||||
Glen Murphy <glen@glenmurphy.com>
|
||||
+202
@@ -0,0 +1,202 @@
|
||||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
@@ -0,0 +1,22 @@
|
||||
ExplorerCanvas
|
||||
Copyright 2006 Google Inc.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
DESCRIPTION
|
||||
|
||||
Firefox, Safari and Opera 9 support the canvas tag to allow 2D command-based
|
||||
drawing operations. ExplorerCanvas brings the same functionality to Internet
|
||||
Explorer; web developers only need to include a single script tag in their
|
||||
existing canvas webpages to enable this support.
|
||||
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
INSTALLATION
|
||||
|
||||
Include the ExplorerCanvas tag in the same directory as your HTML files, and
|
||||
add the following code to your page, preferably in the <head> tag.
|
||||
|
||||
<!--[if IE]><script type="text/javascript" src="excanvas.js"></script><![endif]-->
|
||||
|
||||
If you run into trouble, please look at the included example code to see how
|
||||
to best implement this
|
||||
+927
@@ -0,0 +1,927 @@
|
||||
// Copyright 2006 Google Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
|
||||
// Known Issues:
|
||||
//
|
||||
// * Patterns are not implemented.
|
||||
// * Radial gradient are not implemented. The VML version of these look very
|
||||
// different from the canvas one.
|
||||
// * Clipping paths are not implemented.
|
||||
// * Coordsize. The width and height attribute have higher priority than the
|
||||
// width and height style values which isn't correct.
|
||||
// * Painting mode isn't implemented.
|
||||
// * Canvas width/height should is using content-box by default. IE in
|
||||
// Quirks mode will draw the canvas using border-box. Either change your
|
||||
// doctype to HTML5
|
||||
// (http://www.whatwg.org/specs/web-apps/current-work/#the-doctype)
|
||||
// or use Box Sizing Behavior from WebFX
|
||||
// (http://webfx.eae.net/dhtml/boxsizing/boxsizing.html)
|
||||
// * Non uniform scaling does not correctly scale strokes.
|
||||
// * Optimize. There is always room for speed improvements.
|
||||
|
||||
// Only add this code if we do not already have a canvas implementation
|
||||
if (!document.createElement('canvas').getContext) {
|
||||
|
||||
(function() {
|
||||
|
||||
// alias some functions to make (compiled) code shorter
|
||||
var m = Math;
|
||||
var mr = m.round;
|
||||
var ms = m.sin;
|
||||
var mc = m.cos;
|
||||
var abs = m.abs;
|
||||
var sqrt = m.sqrt;
|
||||
|
||||
// this is used for sub pixel precision
|
||||
var Z = 10;
|
||||
var Z2 = Z / 2;
|
||||
|
||||
/**
|
||||
* This funtion is assigned to the <canvas> elements as element.getContext().
|
||||
* @this {HTMLElement}
|
||||
* @return {CanvasRenderingContext2D_}
|
||||
*/
|
||||
function getContext() {
|
||||
return this.context_ ||
|
||||
(this.context_ = new CanvasRenderingContext2D_(this));
|
||||
}
|
||||
|
||||
var slice = Array.prototype.slice;
|
||||
|
||||
/**
|
||||
* Binds a function to an object. The returned function will always use the
|
||||
* passed in {@code obj} as {@code this}.
|
||||
*
|
||||
* Example:
|
||||
*
|
||||
* g = bind(f, obj, a, b)
|
||||
* g(c, d) // will do f.call(obj, a, b, c, d)
|
||||
*
|
||||
* @param {Function} f The function to bind the object to
|
||||
* @param {Object} obj The object that should act as this when the function
|
||||
* is called
|
||||
* @param {*} var_args Rest arguments that will be used as the initial
|
||||
* arguments when the function is called
|
||||
* @return {Function} A new function that has bound this
|
||||
*/
|
||||
function bind(f, obj, var_args) {
|
||||
var a = slice.call(arguments, 2);
|
||||
return function() {
|
||||
return f.apply(obj, a.concat(slice.call(arguments)));
|
||||
};
|
||||
}
|
||||
|
||||
var G_vmlCanvasManager_ = {
|
||||
init: function(opt_doc) {
|
||||
if (/MSIE/.test(navigator.userAgent) && !window.opera) {
|
||||
var doc = opt_doc || document;
|
||||
// Create a dummy element so that IE will allow canvas elements to be
|
||||
// recognized.
|
||||
doc.createElement('canvas');
|
||||
doc.attachEvent('onreadystatechange', bind(this.init_, this, doc));
|
||||
}
|
||||
},
|
||||
|
||||
init_: function(doc) {
|
||||
// create xmlns
|
||||
if (!doc.namespaces['g_vml_']) {
|
||||
doc.namespaces.add('g_vml_', 'urn:schemas-microsoft-com:vml',
|
||||
'#default#VML');
|
||||
|
||||
}
|
||||
if (!doc.namespaces['g_o_']) {
|
||||
doc.namespaces.add('g_o_', 'urn:schemas-microsoft-com:office:office',
|
||||
'#default#VML');
|
||||
}
|
||||
|
||||
// Setup default CSS. Only add one style sheet per document
|
||||
if (!doc.styleSheets['ex_canvas_']) {
|
||||
var ss = doc.createStyleSheet();
|
||||
ss.owningElement.id = 'ex_canvas_';
|
||||
ss.cssText = 'canvas{display:inline-block;overflow:hidden;' +
|
||||
// default size is 300x150 in Gecko and Opera
|
||||
'text-align:left;width:300px;height:150px}' +
|
||||
'g_vml_\\:*{behavior:url(#default#VML)}' +
|
||||
'g_o_\\:*{behavior:url(#default#VML)}';
|
||||
|
||||
}
|
||||
|
||||
// find all canvas elements
|
||||
var els = doc.getElementsByTagName('canvas');
|
||||
for (var i = 0; i < els.length; i++) {
|
||||
this.initElement(els[i]);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Public initializes a canvas element so that it can be used as canvas
|
||||
* element from now on. This is called automatically before the page is
|
||||
* loaded but if you are creating elements using createElement you need to
|
||||
* make sure this is called on the element.
|
||||
* @param {HTMLElement} el The canvas element to initialize.
|
||||
* @return {HTMLElement} the element that was created.
|
||||
*/
|
||||
initElement: function(el) {
|
||||
if (!el.getContext) {
|
||||
|
||||
el.getContext = getContext;
|
||||
|
||||
// Remove fallback content. There is no way to hide text nodes so we
|
||||
// just remove all childNodes. We could hide all elements and remove
|
||||
// text nodes but who really cares about the fallback content.
|
||||
el.innerHTML = '';
|
||||
|
||||
// do not use inline function because that will leak memory
|
||||
el.attachEvent('onpropertychange', onPropertyChange);
|
||||
el.attachEvent('onresize', onResize);
|
||||
|
||||
var attrs = el.attributes;
|
||||
if (attrs.width && attrs.width.specified) {
|
||||
// TODO: use runtimeStyle and coordsize
|
||||
// el.getContext().setWidth_(attrs.width.nodeValue);
|
||||
el.style.width = attrs.width.nodeValue + 'px';
|
||||
} else {
|
||||
el.width = el.clientWidth;
|
||||
}
|
||||
if (attrs.height && attrs.height.specified) {
|
||||
// TODO: use runtimeStyle and coordsize
|
||||
// el.getContext().setHeight_(attrs.height.nodeValue);
|
||||
el.style.height = attrs.height.nodeValue + 'px';
|
||||
} else {
|
||||
el.height = el.clientHeight;
|
||||
}
|
||||
//el.getContext().setCoordsize_()
|
||||
}
|
||||
return el;
|
||||
}
|
||||
};
|
||||
|
||||
function onPropertyChange(e) {
|
||||
var el = e.srcElement;
|
||||
|
||||
switch (e.propertyName) {
|
||||
case 'width':
|
||||
el.style.width = el.attributes.width.nodeValue + 'px';
|
||||
el.getContext().clearRect();
|
||||
break;
|
||||
case 'height':
|
||||
el.style.height = el.attributes.height.nodeValue + 'px';
|
||||
el.getContext().clearRect();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
function onResize(e) {
|
||||
var el = e.srcElement;
|
||||
if (el.firstChild) {
|
||||
el.firstChild.style.width = el.clientWidth + 'px';
|
||||
el.firstChild.style.height = el.clientHeight + 'px';
|
||||
}
|
||||
}
|
||||
|
||||
G_vmlCanvasManager_.init();
|
||||
|
||||
// precompute "00" to "FF"
|
||||
var dec2hex = [];
|
||||
for (var i = 0; i < 16; i++) {
|
||||
for (var j = 0; j < 16; j++) {
|
||||
dec2hex[i * 16 + j] = i.toString(16) + j.toString(16);
|
||||
}
|
||||
}
|
||||
|
||||
function createMatrixIdentity() {
|
||||
return [
|
||||
[1, 0, 0],
|
||||
[0, 1, 0],
|
||||
[0, 0, 1]
|
||||
];
|
||||
}
|
||||
|
||||
function matrixMultiply(m1, m2) {
|
||||
var result = createMatrixIdentity();
|
||||
|
||||
for (var x = 0; x < 3; x++) {
|
||||
for (var y = 0; y < 3; y++) {
|
||||
var sum = 0;
|
||||
|
||||
for (var z = 0; z < 3; z++) {
|
||||
sum += m1[x][z] * m2[z][y];
|
||||
}
|
||||
|
||||
result[x][y] = sum;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function copyState(o1, o2) {
|
||||
o2.fillStyle = o1.fillStyle;
|
||||
o2.lineCap = o1.lineCap;
|
||||
o2.lineJoin = o1.lineJoin;
|
||||
o2.lineWidth = o1.lineWidth;
|
||||
o2.miterLimit = o1.miterLimit;
|
||||
o2.shadowBlur = o1.shadowBlur;
|
||||
o2.shadowColor = o1.shadowColor;
|
||||
o2.shadowOffsetX = o1.shadowOffsetX;
|
||||
o2.shadowOffsetY = o1.shadowOffsetY;
|
||||
o2.strokeStyle = o1.strokeStyle;
|
||||
o2.globalAlpha = o1.globalAlpha;
|
||||
o2.arcScaleX_ = o1.arcScaleX_;
|
||||
o2.arcScaleY_ = o1.arcScaleY_;
|
||||
o2.lineScale_ = o1.lineScale_;
|
||||
}
|
||||
|
||||
function processStyle(styleString) {
|
||||
var str, alpha = 1;
|
||||
|
||||
styleString = String(styleString);
|
||||
if (styleString.substring(0, 3) == 'rgb') {
|
||||
var start = styleString.indexOf('(', 3);
|
||||
var end = styleString.indexOf(')', start + 1);
|
||||
var guts = styleString.substring(start + 1, end).split(',');
|
||||
|
||||
str = '#';
|
||||
for (var i = 0; i < 3; i++) {
|
||||
str += dec2hex[Number(guts[i])];
|
||||
}
|
||||
|
||||
if (guts.length == 4 && styleString.substr(3, 1) == 'a') {
|
||||
alpha = guts[3];
|
||||
}
|
||||
} else {
|
||||
str = styleString;
|
||||
}
|
||||
|
||||
return {color: str, alpha: alpha};
|
||||
}
|
||||
|
||||
function processLineCap(lineCap) {
|
||||
switch (lineCap) {
|
||||
case 'butt':
|
||||
return 'flat';
|
||||
case 'round':
|
||||
return 'round';
|
||||
case 'square':
|
||||
default:
|
||||
return 'square';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This class implements CanvasRenderingContext2D interface as described by
|
||||
* the WHATWG.
|
||||
* @param {HTMLElement} surfaceElement The element that the 2D context should
|
||||
* be associated with
|
||||
*/
|
||||
function CanvasRenderingContext2D_(surfaceElement) {
|
||||
this.m_ = createMatrixIdentity();
|
||||
|
||||
this.mStack_ = [];
|
||||
this.aStack_ = [];
|
||||
this.currentPath_ = [];
|
||||
|
||||
// Canvas context properties
|
||||
this.strokeStyle = '#000';
|
||||
this.fillStyle = '#000';
|
||||
|
||||
this.lineWidth = 1;
|
||||
this.lineJoin = 'miter';
|
||||
this.lineCap = 'butt';
|
||||
this.miterLimit = Z * 1;
|
||||
this.globalAlpha = 1;
|
||||
this.canvas = surfaceElement;
|
||||
|
||||
var el = surfaceElement.ownerDocument.createElement('div');
|
||||
el.style.width = surfaceElement.clientWidth + 'px';
|
||||
el.style.height = surfaceElement.clientHeight + 'px';
|
||||
el.style.overflow = 'hidden';
|
||||
el.style.position = 'absolute';
|
||||
surfaceElement.appendChild(el);
|
||||
|
||||
this.element_ = el;
|
||||
this.arcScaleX_ = 1;
|
||||
this.arcScaleY_ = 1;
|
||||
this.lineScale_ = 1;
|
||||
}
|
||||
|
||||
var contextPrototype = CanvasRenderingContext2D_.prototype;
|
||||
contextPrototype.clearRect = function() {
|
||||
this.element_.innerHTML = '';
|
||||
};
|
||||
|
||||
contextPrototype.beginPath = function() {
|
||||
// TODO: Branch current matrix so that save/restore has no effect
|
||||
// as per safari docs.
|
||||
this.currentPath_ = [];
|
||||
};
|
||||
|
||||
contextPrototype.moveTo = function(aX, aY) {
|
||||
var p = this.getCoords_(aX, aY);
|
||||
this.currentPath_.push({type: 'moveTo', x: p.x, y: p.y});
|
||||
this.currentX_ = p.x;
|
||||
this.currentY_ = p.y;
|
||||
};
|
||||
|
||||
contextPrototype.lineTo = function(aX, aY) {
|
||||
var p = this.getCoords_(aX, aY);
|
||||
this.currentPath_.push({type: 'lineTo', x: p.x, y: p.y});
|
||||
|
||||
this.currentX_ = p.x;
|
||||
this.currentY_ = p.y;
|
||||
};
|
||||
|
||||
contextPrototype.bezierCurveTo = function(aCP1x, aCP1y,
|
||||
aCP2x, aCP2y,
|
||||
aX, aY) {
|
||||
var p = this.getCoords_(aX, aY);
|
||||
var cp1 = this.getCoords_(aCP1x, aCP1y);
|
||||
var cp2 = this.getCoords_(aCP2x, aCP2y);
|
||||
bezierCurveTo(this, cp1, cp2, p);
|
||||
};
|
||||
|
||||
// Helper function that takes the already fixed cordinates.
|
||||
function bezierCurveTo(self, cp1, cp2, p) {
|
||||
self.currentPath_.push({
|
||||
type: 'bezierCurveTo',
|
||||
cp1x: cp1.x,
|
||||
cp1y: cp1.y,
|
||||
cp2x: cp2.x,
|
||||
cp2y: cp2.y,
|
||||
x: p.x,
|
||||
y: p.y
|
||||
});
|
||||
self.currentX_ = p.x;
|
||||
self.currentY_ = p.y;
|
||||
}
|
||||
|
||||
contextPrototype.quadraticCurveTo = function(aCPx, aCPy, aX, aY) {
|
||||
// the following is lifted almost directly from
|
||||
// http://developer.mozilla.org/en/docs/Canvas_tutorial:Drawing_shapes
|
||||
|
||||
var cp = this.getCoords_(aCPx, aCPy);
|
||||
var p = this.getCoords_(aX, aY);
|
||||
|
||||
var cp1 = {
|
||||
x: this.currentX_ + 2.0 / 3.0 * (cp.x - this.currentX_),
|
||||
y: this.currentY_ + 2.0 / 3.0 * (cp.y - this.currentY_)
|
||||
};
|
||||
var cp2 = {
|
||||
x: cp1.x + (p.x - this.currentX_) / 3.0,
|
||||
y: cp1.y + (p.y - this.currentY_) / 3.0
|
||||
};
|
||||
|
||||
bezierCurveTo(this, cp1, cp2, p);
|
||||
};
|
||||
|
||||
contextPrototype.arc = function(aX, aY, aRadius,
|
||||
aStartAngle, aEndAngle, aClockwise) {
|
||||
aRadius *= Z;
|
||||
var arcType = aClockwise ? 'at' : 'wa';
|
||||
|
||||
var xStart = aX + mc(aStartAngle) * aRadius - Z2;
|
||||
var yStart = aY + ms(aStartAngle) * aRadius - Z2;
|
||||
|
||||
var xEnd = aX + mc(aEndAngle) * aRadius - Z2;
|
||||
var yEnd = aY + ms(aEndAngle) * aRadius - Z2;
|
||||
|
||||
// IE won't render arches drawn counter clockwise if xStart == xEnd.
|
||||
if (xStart == xEnd && !aClockwise) {
|
||||
xStart += 0.125; // Offset xStart by 1/80 of a pixel. Use something
|
||||
// that can be represented in binary
|
||||
}
|
||||
|
||||
var p = this.getCoords_(aX, aY);
|
||||
var pStart = this.getCoords_(xStart, yStart);
|
||||
var pEnd = this.getCoords_(xEnd, yEnd);
|
||||
|
||||
this.currentPath_.push({type: arcType,
|
||||
x: p.x,
|
||||
y: p.y,
|
||||
radius: aRadius,
|
||||
xStart: pStart.x,
|
||||
yStart: pStart.y,
|
||||
xEnd: pEnd.x,
|
||||
yEnd: pEnd.y});
|
||||
|
||||
};
|
||||
|
||||
contextPrototype.rect = function(aX, aY, aWidth, aHeight) {
|
||||
this.moveTo(aX, aY);
|
||||
this.lineTo(aX + aWidth, aY);
|
||||
this.lineTo(aX + aWidth, aY + aHeight);
|
||||
this.lineTo(aX, aY + aHeight);
|
||||
this.closePath();
|
||||
};
|
||||
|
||||
contextPrototype.strokeRect = function(aX, aY, aWidth, aHeight) {
|
||||
var oldPath = this.currentPath_;
|
||||
this.beginPath();
|
||||
|
||||
this.moveTo(aX, aY);
|
||||
this.lineTo(aX + aWidth, aY);
|
||||
this.lineTo(aX + aWidth, aY + aHeight);
|
||||
this.lineTo(aX, aY + aHeight);
|
||||
this.closePath();
|
||||
this.stroke();
|
||||
|
||||
this.currentPath_ = oldPath;
|
||||
};
|
||||
|
||||
contextPrototype.fillRect = function(aX, aY, aWidth, aHeight) {
|
||||
var oldPath = this.currentPath_;
|
||||
this.beginPath();
|
||||
|
||||
this.moveTo(aX, aY);
|
||||
this.lineTo(aX + aWidth, aY);
|
||||
this.lineTo(aX + aWidth, aY + aHeight);
|
||||
this.lineTo(aX, aY + aHeight);
|
||||
this.closePath();
|
||||
this.fill();
|
||||
|
||||
this.currentPath_ = oldPath;
|
||||
};
|
||||
|
||||
contextPrototype.createLinearGradient = function(aX0, aY0, aX1, aY1) {
|
||||
var gradient = new CanvasGradient_('gradient');
|
||||
gradient.x0_ = aX0;
|
||||
gradient.y0_ = aY0;
|
||||
gradient.x1_ = aX1;
|
||||
gradient.y1_ = aY1;
|
||||
return gradient;
|
||||
};
|
||||
|
||||
contextPrototype.createRadialGradient = function(aX0, aY0, aR0,
|
||||
aX1, aY1, aR1) {
|
||||
var gradient = new CanvasGradient_('gradientradial');
|
||||
gradient.x0_ = aX0;
|
||||
gradient.y0_ = aY0;
|
||||
gradient.r0_ = aR0;
|
||||
gradient.x1_ = aX1;
|
||||
gradient.y1_ = aY1;
|
||||
gradient.r1_ = aR1;
|
||||
return gradient;
|
||||
};
|
||||
|
||||
contextPrototype.drawImage = function(image, var_args) {
|
||||
var dx, dy, dw, dh, sx, sy, sw, sh;
|
||||
|
||||
// to find the original width we overide the width and height
|
||||
var oldRuntimeWidth = image.runtimeStyle.width;
|
||||
var oldRuntimeHeight = image.runtimeStyle.height;
|
||||
image.runtimeStyle.width = 'auto';
|
||||
image.runtimeStyle.height = 'auto';
|
||||
|
||||
// get the original size
|
||||
var w = image.width;
|
||||
var h = image.height;
|
||||
|
||||
// and remove overides
|
||||
image.runtimeStyle.width = oldRuntimeWidth;
|
||||
image.runtimeStyle.height = oldRuntimeHeight;
|
||||
|
||||
if (arguments.length == 3) {
|
||||
dx = arguments[1];
|
||||
dy = arguments[2];
|
||||
sx = sy = 0;
|
||||
sw = dw = w;
|
||||
sh = dh = h;
|
||||
} else if (arguments.length == 5) {
|
||||
dx = arguments[1];
|
||||
dy = arguments[2];
|
||||
dw = arguments[3];
|
||||
dh = arguments[4];
|
||||
sx = sy = 0;
|
||||
sw = w;
|
||||
sh = h;
|
||||
} else if (arguments.length == 9) {
|
||||
sx = arguments[1];
|
||||
sy = arguments[2];
|
||||
sw = arguments[3];
|
||||
sh = arguments[4];
|
||||
dx = arguments[5];
|
||||
dy = arguments[6];
|
||||
dw = arguments[7];
|
||||
dh = arguments[8];
|
||||
} else {
|
||||
throw Error('Invalid number of arguments');
|
||||
}
|
||||
|
||||
var d = this.getCoords_(dx, dy);
|
||||
|
||||
var w2 = sw / 2;
|
||||
var h2 = sh / 2;
|
||||
|
||||
var vmlStr = [];
|
||||
|
||||
var W = 10;
|
||||
var H = 10;
|
||||
|
||||
// For some reason that I've now forgotten, using divs didn't work
|
||||
vmlStr.push(' <g_vml_:group',
|
||||
' coordsize="', Z * W, ',', Z * H, '"',
|
||||
' coordorigin="0,0"' ,
|
||||
' style="width:', W, 'px;height:', H, 'px;position:absolute;');
|
||||
|
||||
// If filters are necessary (rotation exists), create them
|
||||
// filters are bog-slow, so only create them if abbsolutely necessary
|
||||
// The following check doesn't account for skews (which don't exist
|
||||
// in the canvas spec (yet) anyway.
|
||||
|
||||
if (this.m_[0][0] != 1 || this.m_[0][1]) {
|
||||
var filter = [];
|
||||
|
||||
// Note the 12/21 reversal
|
||||
filter.push('M11=', this.m_[0][0], ',',
|
||||
'M12=', this.m_[1][0], ',',
|
||||
'M21=', this.m_[0][1], ',',
|
||||
'M22=', this.m_[1][1], ',',
|
||||
'Dx=', mr(d.x / Z), ',',
|
||||
'Dy=', mr(d.y / Z), '');
|
||||
|
||||
// Bounding box calculation (need to minimize displayed area so that
|
||||
// filters don't waste time on unused pixels.
|
||||
var max = d;
|
||||
var c2 = this.getCoords_(dx + dw, dy);
|
||||
var c3 = this.getCoords_(dx, dy + dh);
|
||||
var c4 = this.getCoords_(dx + dw, dy + dh);
|
||||
|
||||
max.x = m.max(max.x, c2.x, c3.x, c4.x);
|
||||
max.y = m.max(max.y, c2.y, c3.y, c4.y);
|
||||
|
||||
vmlStr.push('padding:0 ', mr(max.x / Z), 'px ', mr(max.y / Z),
|
||||
'px 0;filter:progid:DXImageTransform.Microsoft.Matrix(',
|
||||
filter.join(''), ", sizingmethod='clip');")
|
||||
} else {
|
||||
vmlStr.push('top:', mr(d.y / Z), 'px;left:', mr(d.x / Z), 'px;');
|
||||
}
|
||||
|
||||
vmlStr.push(' ">' ,
|
||||
'<g_vml_:image src="', image.src, '"',
|
||||
' style="width:', Z * dw, 'px;',
|
||||
' height:', Z * dh, 'px;"',
|
||||
' cropleft="', sx / w, '"',
|
||||
' croptop="', sy / h, '"',
|
||||
' cropright="', (w - sx - sw) / w, '"',
|
||||
' cropbottom="', (h - sy - sh) / h, '"',
|
||||
' />',
|
||||
'</g_vml_:group>');
|
||||
|
||||
this.element_.insertAdjacentHTML('BeforeEnd',
|
||||
vmlStr.join(''));
|
||||
};
|
||||
|
||||
contextPrototype.stroke = function(aFill) {
|
||||
var lineStr = [];
|
||||
var lineOpen = false;
|
||||
var a = processStyle(aFill ? this.fillStyle : this.strokeStyle);
|
||||
var color = a.color;
|
||||
var opacity = a.alpha * this.globalAlpha;
|
||||
|
||||
var W = 10;
|
||||
var H = 10;
|
||||
|
||||
lineStr.push('<g_vml_:shape',
|
||||
' filled="', !!aFill, '"',
|
||||
' style="position:absolute;width:', W, 'px;height:', H, 'px;"',
|
||||
' coordorigin="0 0" coordsize="', Z * W, ' ', Z * H, '"',
|
||||
' stroked="', !aFill, '"',
|
||||
' path="');
|
||||
|
||||
var newSeq = false;
|
||||
var min = {x: null, y: null};
|
||||
var max = {x: null, y: null};
|
||||
|
||||
for (var i = 0; i < this.currentPath_.length; i++) {
|
||||
var p = this.currentPath_[i];
|
||||
var c;
|
||||
|
||||
switch (p.type) {
|
||||
case 'moveTo':
|
||||
c = p;
|
||||
lineStr.push(' m ', mr(p.x), ',', mr(p.y));
|
||||
break;
|
||||
case 'lineTo':
|
||||
lineStr.push(' l ', mr(p.x), ',', mr(p.y));
|
||||
break;
|
||||
case 'close':
|
||||
lineStr.push(' x ');
|
||||
p = null;
|
||||
break;
|
||||
case 'bezierCurveTo':
|
||||
lineStr.push(' c ',
|
||||
mr(p.cp1x), ',', mr(p.cp1y), ',',
|
||||
mr(p.cp2x), ',', mr(p.cp2y), ',',
|
||||
mr(p.x), ',', mr(p.y));
|
||||
break;
|
||||
case 'at':
|
||||
case 'wa':
|
||||
lineStr.push(' ', p.type, ' ',
|
||||
mr(p.x - this.arcScaleX_ * p.radius), ',',
|
||||
mr(p.y - this.arcScaleY_ * p.radius), ' ',
|
||||
mr(p.x + this.arcScaleX_ * p.radius), ',',
|
||||
mr(p.y + this.arcScaleY_ * p.radius), ' ',
|
||||
mr(p.xStart), ',', mr(p.yStart), ' ',
|
||||
mr(p.xEnd), ',', mr(p.yEnd));
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
// TODO: Following is broken for curves due to
|
||||
// move to proper paths.
|
||||
|
||||
// Figure out dimensions so we can do gradient fills
|
||||
// properly
|
||||
if (p) {
|
||||
if (min.x == null || p.x < min.x) {
|
||||
min.x = p.x;
|
||||
}
|
||||
if (max.x == null || p.x > max.x) {
|
||||
max.x = p.x;
|
||||
}
|
||||
if (min.y == null || p.y < min.y) {
|
||||
min.y = p.y;
|
||||
}
|
||||
if (max.y == null || p.y > max.y) {
|
||||
max.y = p.y;
|
||||
}
|
||||
}
|
||||
}
|
||||
lineStr.push(' ">');
|
||||
|
||||
if (!aFill) {
|
||||
var lineWidth = this.lineScale_ * this.lineWidth;
|
||||
|
||||
// VML cannot correctly render a line if the width is less than 1px.
|
||||
// In that case, we dilute the color to make the line look thinner.
|
||||
if (lineWidth < 1) {
|
||||
opacity *= lineWidth;
|
||||
}
|
||||
|
||||
lineStr.push(
|
||||
'<g_vml_:stroke',
|
||||
' opacity="', opacity, '"',
|
||||
' joinstyle="', this.lineJoin, '"',
|
||||
' miterlimit="', this.miterLimit, '"',
|
||||
' endcap="', processLineCap(this.lineCap), '"',
|
||||
' weight="', lineWidth, 'px"',
|
||||
' color="', color, '" />'
|
||||
);
|
||||
} else if (typeof this.fillStyle == 'object') {
|
||||
var fillStyle = this.fillStyle;
|
||||
var angle = 0;
|
||||
var focus = {x: 0, y: 0};
|
||||
|
||||
// additional offset
|
||||
var shift = 0;
|
||||
// scale factor for offset
|
||||
var expansion = 1;
|
||||
|
||||
if (fillStyle.type_ == 'gradient') {
|
||||
var x0 = fillStyle.x0_ / this.arcScaleX_;
|
||||
var y0 = fillStyle.y0_ / this.arcScaleY_;
|
||||
var x1 = fillStyle.x1_ / this.arcScaleX_;
|
||||
var y1 = fillStyle.y1_ / this.arcScaleY_;
|
||||
var p0 = this.getCoords_(x0, y0);
|
||||
var p1 = this.getCoords_(x1, y1);
|
||||
var dx = p1.x - p0.x;
|
||||
var dy = p1.y - p0.y;
|
||||
angle = Math.atan2(dx, dy) * 180 / Math.PI;
|
||||
|
||||
// The angle should be a non-negative number.
|
||||
if (angle < 0) {
|
||||
angle += 360;
|
||||
}
|
||||
|
||||
// Very small angles produce an unexpected result because they are
|
||||
// converted to a scientific notation string.
|
||||
if (angle < 1e-6) {
|
||||
angle = 0;
|
||||
}
|
||||
} else {
|
||||
var p0 = this.getCoords_(fillStyle.x0_, fillStyle.y0_);
|
||||
var width = max.x - min.x;
|
||||
var height = max.y - min.y;
|
||||
focus = {
|
||||
x: (p0.x - min.x) / width,
|
||||
y: (p0.y - min.y) / height
|
||||
};
|
||||
|
||||
width /= this.arcScaleX_ * Z;
|
||||
height /= this.arcScaleY_ * Z;
|
||||
var dimension = m.max(width, height);
|
||||
shift = 2 * fillStyle.r0_ / dimension;
|
||||
expansion = 2 * fillStyle.r1_ / dimension - shift;
|
||||
}
|
||||
|
||||
// We need to sort the color stops in ascending order by offset,
|
||||
// otherwise IE won't interpret it correctly.
|
||||
var stops = fillStyle.colors_;
|
||||
stops.sort(function(cs1, cs2) {
|
||||
return cs1.offset - cs2.offset;
|
||||
});
|
||||
|
||||
var length = stops.length;
|
||||
var color1 = stops[0].color;
|
||||
var color2 = stops[length - 1].color;
|
||||
var opacity1 = stops[0].alpha * this.globalAlpha;
|
||||
var opacity2 = stops[length - 1].alpha * this.globalAlpha;
|
||||
|
||||
var colors = [];
|
||||
for (var i = 0; i < length; i++) {
|
||||
var stop = stops[i];
|
||||
colors.push(stop.offset * expansion + shift + ' ' + stop.color);
|
||||
}
|
||||
|
||||
// When colors attribute is used, the meanings of opacity and o:opacity2
|
||||
// are reversed.
|
||||
lineStr.push('<g_vml_:fill type="', fillStyle.type_, '"',
|
||||
' method="none" focus="100%"',
|
||||
' color="', color1, '"',
|
||||
' color2="', color2, '"',
|
||||
' colors="', colors.join(','), '"',
|
||||
' opacity="', opacity2, '"',
|
||||
' g_o_:opacity2="', opacity1, '"',
|
||||
' angle="', angle, '"',
|
||||
' focusposition="', focus.x, ',', focus.y, '" />');
|
||||
} else {
|
||||
lineStr.push('<g_vml_:fill color="', color, '" opacity="', opacity,
|
||||
'" />');
|
||||
}
|
||||
|
||||
lineStr.push('</g_vml_:shape>');
|
||||
|
||||
this.element_.insertAdjacentHTML('beforeEnd', lineStr.join(''));
|
||||
};
|
||||
|
||||
contextPrototype.fill = function() {
|
||||
this.stroke(true);
|
||||
}
|
||||
|
||||
contextPrototype.closePath = function() {
|
||||
this.currentPath_.push({type: 'close'});
|
||||
};
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
contextPrototype.getCoords_ = function(aX, aY) {
|
||||
var m = this.m_;
|
||||
return {
|
||||
x: Z * (aX * m[0][0] + aY * m[1][0] + m[2][0]) - Z2,
|
||||
y: Z * (aX * m[0][1] + aY * m[1][1] + m[2][1]) - Z2
|
||||
}
|
||||
};
|
||||
|
||||
contextPrototype.save = function() {
|
||||
var o = {};
|
||||
copyState(this, o);
|
||||
this.aStack_.push(o);
|
||||
this.mStack_.push(this.m_);
|
||||
this.m_ = matrixMultiply(createMatrixIdentity(), this.m_);
|
||||
};
|
||||
|
||||
contextPrototype.restore = function() {
|
||||
copyState(this.aStack_.pop(), this);
|
||||
this.m_ = this.mStack_.pop();
|
||||
};
|
||||
|
||||
function matrixIsFinite(m) {
|
||||
for (var j = 0; j < 3; j++) {
|
||||
for (var k = 0; k < 2; k++) {
|
||||
if (!isFinite(m[j][k]) || isNaN(m[j][k])) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function setM(ctx, m, updateLineScale) {
|
||||
if (!matrixIsFinite(m)) {
|
||||
return;
|
||||
}
|
||||
ctx.m_ = m;
|
||||
|
||||
if (updateLineScale) {
|
||||
// Get the line scale.
|
||||
// Determinant of this.m_ means how much the area is enlarged by the
|
||||
// transformation. So its square root can be used as a scale factor
|
||||
// for width.
|
||||
var det = m[0][0] * m[1][1] - m[0][1] * m[1][0];
|
||||
ctx.lineScale_ = sqrt(abs(det));
|
||||
}
|
||||
}
|
||||
|
||||
contextPrototype.translate = function(aX, aY) {
|
||||
var m1 = [
|
||||
[1, 0, 0],
|
||||
[0, 1, 0],
|
||||
[aX, aY, 1]
|
||||
];
|
||||
|
||||
setM(this, matrixMultiply(m1, this.m_), false);
|
||||
};
|
||||
|
||||
contextPrototype.rotate = function(aRot) {
|
||||
var c = mc(aRot);
|
||||
var s = ms(aRot);
|
||||
|
||||
var m1 = [
|
||||
[c, s, 0],
|
||||
[-s, c, 0],
|
||||
[0, 0, 1]
|
||||
];
|
||||
|
||||
setM(this, matrixMultiply(m1, this.m_), false);
|
||||
};
|
||||
|
||||
contextPrototype.scale = function(aX, aY) {
|
||||
this.arcScaleX_ *= aX;
|
||||
this.arcScaleY_ *= aY;
|
||||
var m1 = [
|
||||
[aX, 0, 0],
|
||||
[0, aY, 0],
|
||||
[0, 0, 1]
|
||||
];
|
||||
|
||||
setM(this, matrixMultiply(m1, this.m_), true);
|
||||
};
|
||||
|
||||
contextPrototype.transform = function(m11, m12, m21, m22, dx, dy) {
|
||||
var m1 = [
|
||||
[m11, m12, 0],
|
||||
[m21, m22, 0],
|
||||
[dx, dy, 1]
|
||||
];
|
||||
|
||||
setM(this, matrixMultiply(m1, this.m_), true);
|
||||
};
|
||||
|
||||
contextPrototype.setTransform = function(m11, m12, m21, m22, dx, dy) {
|
||||
var m = [
|
||||
[m11, m12, 0],
|
||||
[m21, m22, 0],
|
||||
[dx, dy, 1]
|
||||
];
|
||||
|
||||
setM(this, m, true);
|
||||
};
|
||||
|
||||
/******** STUBS ********/
|
||||
contextPrototype.clip = function() {
|
||||
// TODO: Implement
|
||||
};
|
||||
|
||||
contextPrototype.arcTo = function() {
|
||||
// TODO: Implement
|
||||
};
|
||||
|
||||
contextPrototype.createPattern = function() {
|
||||
return new CanvasPattern_;
|
||||
};
|
||||
|
||||
// Gradient / Pattern Stubs
|
||||
function CanvasGradient_(aType) {
|
||||
this.type_ = aType;
|
||||
this.x0_ = 0;
|
||||
this.y0_ = 0;
|
||||
this.r0_ = 0;
|
||||
this.x1_ = 0;
|
||||
this.y1_ = 0;
|
||||
this.r1_ = 0;
|
||||
this.colors_ = [];
|
||||
}
|
||||
|
||||
CanvasGradient_.prototype.addColorStop = function(aOffset, aColor) {
|
||||
aColor = processStyle(aColor);
|
||||
this.colors_.push({offset: aOffset,
|
||||
color: aColor.color,
|
||||
alpha: aColor.alpha});
|
||||
};
|
||||
|
||||
function CanvasPattern_() {}
|
||||
|
||||
// set up externs
|
||||
G_vmlCanvasManager = G_vmlCanvasManager_;
|
||||
CanvasRenderingContext2D = CanvasRenderingContext2D_;
|
||||
CanvasGradient = CanvasGradient_;
|
||||
CanvasPattern = CanvasPattern_;
|
||||
|
||||
})();
|
||||
|
||||
} // if
|
||||
|
||||
if (dhtmlx && dhtmlx._modules)
|
||||
dhtmlx._modules["thirdparty/excanvas/excanvas.js"] = true;
|
||||
Reference in New Issue
Block a user