From 21680fa0c24216b47e53f2b111b502fbb49fb3f7 Mon Sep 17 00:00:00 2001 From: Dmitry Baranovskiy Date: Mon, 23 Nov 2009 10:01:23 +1100 Subject: [PATCH] 1.2.2 IE performance increased twice (at least) Rotation bug fix Lots of bug fixes --- raphael-min.js | 4 +- raphael.js | 375 ++++++++++++++++++++++++++++++++----------------- 2 files changed, 246 insertions(+), 133 deletions(-) diff --git a/raphael-min.js b/raphael-min.js index b81c9f7..833a110 100644 --- a/raphael-min.js +++ b/raphael-min.js @@ -1,7 +1,7 @@ /* - * Raphael 1.2.1 - JavaScript Vector Library + * Raphael 1.2.2 - JavaScript Vector Library * * Copyright (c) 2008 - 2009 Dmitry Baranovskiy (http://raphaeljs.com) * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license. */ -window.Raphael=(function(){var a=/[, ]+/,z=document,ab=window,h={was:"Raphael" in ab,is:ab.Raphael},Y=function(){if(Y.is(arguments[0],"array")){var e=arguments[0],E=p[ax](Y,e.splice(0,3+Y.is(e[0],W))),aA=E.set();for(var S=0,aB=e[j];S");i.close();aA=i.body;}catch(aC){aA=createPopup().document.body;}var R=aA.createTextRange();aA.style.color=S;var aB=R.queryCommandValue("ForeColor");aB=((aB&255)<<16)|(aB&65280)|((aB&16711680)>>>16);return"#"+("000000"+aB[af](16)).slice(-6);});}else{var E=z.createElement("i");E.className="Rapha\u00ebl colour picker";E.style.cssText="display:none";z.body[ao](E);ah=V(function(i){E.style.color=i;return z.defaultView.getComputedStyle(E,aa).getPropertyValue("color");});}return ah(e);};Y.hsb2rgb=V(function(aE,aC,aI){if(Y.is(aE,"object")&&"h" in aE&&"s" in aE&&"b" in aE){aI=aE.b;aC=aE.s;aE=aE.h;}var S,aA,aJ;if(aI==0){return{r:0,g:0,b:0,hex:"#000"};}if(aE>1||aC>1||aI>1){aE/=255;aC/=255;aI/=255;}var aB=~~(aE*6),aF=(aE*6)-aB,R=aI*(1-aC),E=aI*(1-(aC*aF)),aK=aI*(1-(aC*(1-aF)));S=[aI,E,R,R,aK,aI,aI][aB];aA=[aK,aI,aI,E,R,R,aK][aB];aJ=[R,R,aK,aI,aI,E,R][aB];S*=255;aA*=255;aJ*=255;var aG={r:S,g:aA,b:aJ},e=(~~S)[af](16),aD=(~~aA)[af](16),aH=(~~aJ)[af](16);e=e[aq](av,"0");aD=aD[aq](av,"0");aH=aH[aq](av,"0");aG.hex="#"+e+aD+aH;return aG;},Y);Y.rgb2hsb=V(function(e,i,aC){if(Y.is(e,"object")&&"r" in e&&"g" in e&&"b" in e){aC=e.b;i=e.g;e=e.r;}if(Y.is(e,"string")){var aE=Y.getRGB(e);e=aE.r;i=aE.g;aC=aE.b;}if(e>1||i>1||aC>1){e/=255;i/=255;aC/=255;}var aB=d(e,i,aC),E=al(e,i,aC),S,R,aA=aB;if(E==aB){return{h:0,s:0,b:aB};}else{var aD=(aB-E);R=aD/aB;if(e==aB){S=(i-aC)/aD;}else{if(i==aB){S=2+((aC-e)/aD);}else{S=4+((e-i)/aD);}}S/=6;S<0&&S++;S>1&&S--;}return{h:S,s:R,b:aA};},Y);Y._path2string=function(){var R=aa,aB;for(var E=0,S=this[j];E=1000&&delete aA[aC.shift()];aC[c](aB);aA[aB]=R[ax](i,S);return e?e(aA[aB]):aA[aB];}return E;}Y.getRGB=V(function(e){if(!e||!!((e+aa).indexOf("-")+1)){return{r:-1,g:-1,b:-1,hex:"none",error:1};}e=e+aa;if(e=="none"){return{r:-1,g:-1,b:-1,hex:"none"};}!(({hs:1,rg:1}[F](e.substring(0,2))))&&(e=ah(e));var aA,E,R,aD,aB=e.match(/^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgb\(\s*([\d\.]+\s*,\s*[\d\.]+\s*,\s*[\d\.]+)\s*\)|rgb\(\s*([\d\.]+%\s*,\s*[\d\.]+%\s*,\s*[\d\.]+%)\s*\)|hs[bl]\(\s*([\d\.]+\s*,\s*[\d\.]+\s*,\s*[\d\.]+)\s*\)|hs[bl]\(\s*([\d\.]+%\s*,\s*[\d\.]+%\s*,\s*[\d\.]+%)\s*\))\s*$/i);if(aB){if(aB[2]){aD=v(aB[2].substring(5),16);R=v(aB[2].substring(3,5),16);E=v(aB[2].substring(1,3),16);}if(aB[3]){aD=v(aB[3].substring(3)+aB[3].substring(3),16);R=v(aB[3].substring(2,3)+aB[3].substring(2,3),16);E=v(aB[3].substring(1,2)+aB[3].substring(1,2),16);}if(aB[4]){aB=aB[4][r](/\s*,\s*/);E=J(aB[0]);R=J(aB[1]);aD=J(aB[2]);}if(aB[5]){aB=aB[5][r](/\s*,\s*/);E=J(aB[0])*2.55;R=J(aB[1])*2.55;aD=J(aB[2])*2.55;}if(aB[6]){aB=aB[6][r](/\s*,\s*/);E=J(aB[0]);R=J(aB[1]);aD=J(aB[2]);return Y.hsb2rgb(E,R,aD);}if(aB[7]){aB=aB[7][r](/\s*,\s*/);E=J(aB[0])*2.55;R=J(aB[1])*2.55;aD=J(aB[2])*2.55;return Y.hsb2rgb(E,R,aD);}aB={r:E,g:R,b:aD};var i=(~~E)[af](16),S=(~~R)[af](16),aC=(~~aD)[af](16);i=i[aq](av,"0");S=S[aq](av,"0");aC=aC[aq](av,"0");aB.hex="#"+i+S+aC;return aB;}return{r:-1,g:-1,b:-1,hex:"none",error:1};},Y);Y.getColor=function(i){var E=this.getColor.start=this.getColor.start||{h:0,s:1,b:i||0.75},e=this.hsb2rgb(E.h,E.s,E.b);E.h+=0.075;if(E.h>1){E.h=0;E.s-=0.2;E.s<=0&&(this.getColor.start={h:0,s:1,b:E.b});}return e.hex;};Y.getColor.reset=function(){delete this.start;};Y.parsePathString=V(function(e){if(!e){return null;}var E={a:7,c:6,h:1,l:2,m:2,q:4,s:4,t:2,v:1,z:0},i=[];if(Y.is(e,"array")&&Y.is(e[0],"array")){i=ac(e);}if(!i[j]){(e+aa)[aq](/([achlmqstvz])[\s,]*((-?\d*\.?\d*(?:e[-+]?\d+)?\s*,?\s*)+)/ig,function(S,R,aC){var aB=[],aA=R.toLowerCase();aC[aq](/(-?\d*\.?\d*(?:e[-+]?\d+)?)\s*,?\s*/ig,function(aE,aD){aD&&aB[c](+aD);});while(aB[j]>=E[aA]){i[c]([R][au](aB.splice(0,E[aA])));if(!E[aA]){break;}}});}i[af]=Y._path2string;return i;});var H=V(function(aF){if(!aF){return{x:0,y:0,width:0,height:0};}aF=w(aF);var aC=0,aB=0,R=[],E=[];for(var S=0,aE=aF[j];SaD){aE=aE-S*2;}if(!aA&&aD>aE){aD=aD-S*2;}}else{aE=aM[0];aD=aM[1];aO=aM[2];aN=aM[3];}var aI=aD-aE;if(Math.abs(aI)>aQ){var aP=aD,aS=aJ,aG=bd;aD=aE+aQ*(aA&&aD>aE?1:-1);aJ=aO+aT*Math.cos(aD);bd=aN+aR*Math.sin(aD);aX=y(aJ,bd,aT,aR,aL,0,aA,aS,aG,[aD,aP,aO,aN]);}aI=aD-aE;var aC=Math.cos(aE),bc=Math.sin(aE),aB=Math.cos(aD),bb=Math.sin(aD),a0=Math.tan(aI/4),a3=4/3*aT*a0,a1=4/3*aR*a0,a9=[aK,be],a8=[aK+a3*bc,be-a1*aC],a7=[aJ+a3*bb,bd-a1*aB],a5=[aJ,bd];a8[0]=2*a9[0]-a8[0];a8[1]=2*a9[1]-a8[1];if(aM){return[a8,a7,a5][au](aX);}else{aX=[a8,a7,a5][au](aX)[ae](",")[r](",");var aV=[];for(var a6=0,aW=aX[j];a60&&aB<1?aB:0),aA=A(i,e,R,E,aL,aK,aH,aE,S>0&&S<1?S:0);aI=aI[au](aC.x,aA.x);aF=aF[au](aC.y,aA.y);aJ=(aK-2*E+e)-(aE-2*aK+E);aG=2*(E-e)-2*(aK-E);aD=e-E;aB=(-aG+Math.sqrt(aG*aG-4*aJ*aD))/2/aJ;S=(-aG-Math.sqrt(aG*aG-4*aJ*aD))/2/aJ;aC=A(i,e,R,E,aL,aK,aH,aE,aB>0&&aB<1?aB:0);aA=A(i,e,R,E,aL,aK,aH,aE,S>0&&S<1?S:0);aI=aI[au](aC.x,aA.x);aF=aF[au](aC.y,aA.y);return{min:{x:al[ax](0,aI),y:al[ax](0,aF)},max:{x:d[ax](0,aI),y:d[ax](0,aF)}};}),w=V(function(aK,aF){var S=n(aK),aG=aF&&n(aF),aH={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},e={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},aB=function(aL,aM){var i,aN;if(!aL){return["C",aM.x,aM.y,aM.x,aM.y,aM.x,aM.y];}!(aL[0] in {T:1,Q:1})&&(aM.qx=aM.qy=null);switch(aL[0]){case"M":aM.X=aL[1];aM.Y=aL[2];break;case"A":aL=["C"][au](y[ax](0,[aM.x,aM.y][au](aL.slice(1))));break;case"S":i=aM.x+(aM.x-(aM.bx||aM.x));aN=aM.y+(aM.y-(aM.by||aM.y));aL=["C",i,aN][au](aL.slice(1));break;case"T":aM.qx=aM.x+(aM.x-(aM.qx||aM.x));aM.qy=aM.y+(aM.y-(aM.qy||aM.y));aL=["C"][au](an(aM.x,aM.y,aM.qx,aM.qy,aL[1],aL[2]));break;case"Q":aM.qx=aL[1];aM.qy=aL[2];aL=["C"][au](an(aM.x,aM.y,aL[1],aL[2],aL[3],aL[4]));break;case"L":aL=["C"][au](ay(aM.x,aM.y,aL[1],aL[2]));break;case"H":aL=["C"][au](ay(aM.x,aM.y,aL[1],aM.y));break;case"V":aL=["C"][au](ay(aM.x,aM.y,aM.x,aL[1]));break;case"Z":aL=["C"][au](ay(aM.x,aM.y,aM.X,aM.Y));break;}return aL;},E=function(aL,aM){if(aL[aM][j]>7){aL[aM].shift();var aN=aL[aM];while(aN[j]){aL.splice(aM++,0,["C"][au](aN.splice(0,6)));}aL.splice(aM,1);aI=d(S[j],aG&&aG[j]||0);}},R=function(aP,aO,aM,aL,aN){if(aP&&aO&&aP[aN][0]=="M"&&aO[aN][0]!="M"){aO.splice(aN,0,["M",aL.x,aL.y]);aM.bx=0;aM.by=0;aM.x=aP[aN][1];aM.y=aP[aN][2];aI=d(S[j],aG&&aG[j]||0);}};for(var aD=0,aI=d(S[j],aG&&aG[j]||0);aD3){return{container:1,x:arguments[0],y:arguments[1],width:arguments[2],height:arguments[3]};}}},aj=function(e,E){var i=this;for(var R in E){if(E[F](R)&&!(R in e)){switch(typeof E[R]){case"function":(function(S){e[R]=e===i?S:function(){return S[ax](i,arguments);};})(E[R]);break;case"object":e[R]=e[R]||{};aj.call(this,e[R],E[R]);break;default:e[R]=E[R];break;}}}};if(Y.svg){ar.svgns="http://www.w3.org/2000/svg";ar.xlink="http://www.w3.org/1999/xlink";var C=function(e){return +e+(~~e===e)*0.5;};var I=function(aA){for(var E=0,R=aA[j];E0.25){aA=Math.sqrt(0.25-ap(aC-0.5,2))+0.5;}}return aa;});aI=aI[r](/\s*\-\s*/);if(aF=="linear"){var aB=aI.shift();aB=-J(aB);if(isNaN(aB)){return null;}var S=[0,0,Math.cos(aB*Math.PI/180),Math.sin(aB*Math.PI/180)],aH=1/(d(Math.abs(S[2]),Math.abs(S[3]))||1);S[2]*=aH;S[3]*=aH;if(S[2]<0){S[0]=-S[2];S[2]=0;}if(S[3]<0){S[1]=-S[3];S[3]=0;}}var aE=l(aI);if(!aE){return null;}var E=am(aF+"Gradient");E.id="r"+(Y._id++)[af](36);aF=="radial"?am(E,{fx:aC,fy:aA}):am(E,{x1:S[0],y1:S[1],x2:S[2],y2:S[3]});e.defs[ao](E);for(var aD=0,aJ=aE[j];aDaC.height)&&(aC.height=aB.y+aB.height-aC.y);(aB.x+aB.width-aC.x>aC.width)&&(aC.width=aB.x+aB.width-aC.x);}}R&&this.hide();return aC;};ad[az].attr=function(){if(this.removed){return this;}if(arguments[j]==1&&Y.is(arguments[0],"string")){if(arguments[0]=="translation"){return this.translate();}if(arguments[0]=="rotation"){return this.rotate();}if(arguments[0]=="scale"){return this.scale();}return this.attrs[arguments[0]];}if(arguments[j]==1&&Y.is(arguments[0],"array")){var e={};for(var i in arguments[0]){if(arguments[0][F](i)){e[arguments[0][i]]=this.attrs[arguments[0][i]];}}return e;}if(arguments[j]==2){var E={};E[arguments[0]]=arguments[1];M(this,E);}else{if(arguments[j]==1&&Y.is(arguments[0],"object")){M(this,arguments[0]);}}return this;};ad[az].toFront=function(){!this.removed&&this.node.parentNode[ao](this.node);return this;};ad[az].toBack=function(){if(this.removed){return this;}if(this.node.parentNode.firstChild!=this.node){this.node.parentNode.insertBefore(this.node,this.node.parentNode.firstChild);}return this;};ad[az].insertAfter=function(e){if(this.removed){return this;}if(e.node.nextSibling){e.node.parentNode.insertBefore(this.node,e.node.nextSibling);}else{e.node.parentNode[ao](this.node);}return this;};ad[az].insertBefore=function(e){if(this.removed){return this;}var i=e.node;i.parentNode.insertBefore(this.node,i);return this;};var D=function(i,e,aA,S){e=C(e);aA=C(aA);var R=am("circle");i.canvas&&i.canvas[ao](R);var E=new ad(R,i);E.attrs={cx:e,cy:aA,r:S,fill:"none",stroke:"#000"};E.type="circle";am(R,E.attrs);return E;};var ai=function(E,e,aC,i,aA,aB){e=C(e);aC=C(aC);var S=am("rect");E.canvas&&E.canvas[ao](S);var R=new ad(S,E);R.attrs={x:e,y:aC,width:i,height:aA,r:aB||0,rx:aB||0,ry:aB||0,fill:"none",stroke:"#000"};R.type="rect";am(S,R.attrs);return R;};var U=function(i,e,aB,aA,S){e=C(e);aB=C(aB);var R=am("ellipse");i.canvas&&i.canvas[ao](R);var E=new ad(R,i);E.attrs={cx:e,cy:aB,rx:aA,ry:S,fill:"none",stroke:"#000"};E.type="ellipse";am(R,E.attrs);return E;};var k=function(E,aB,e,aC,i,aA){var S=am("image");am(S,{x:e,y:aC,width:i,height:aA,preserveAspectRatio:"none"});S.setAttributeNS(E.xlink,"href",aB);E.canvas&&E.canvas[ao](S);var R=new ad(S,E);R.attrs={x:e,y:aC,width:i,height:aA,src:aB};R.type="image";return R;};var K=function(i,e,aA,S){var R=am("text");am(R,{x:e,y:aA,"text-anchor":"middle"});i.canvas&&i.canvas[ao](R);var E=new ad(R,i);E.attrs={x:e,y:aA,"text-anchor":"middle",text:S,font:g.font,stroke:"none",fill:"#000"};E.type="text";M(E,E.attrs);return E;};var aw=function(i,e){this.width=i||this.width;this.height=e||this.height;this.canvas[o]("width",this.width);this.canvas[o]("height",this.height);return this;};var p=function(){var R=Z[ax](null,arguments),E=R&&R.container,i=R.x,aC=R.y,S=R.width,e=R.height;if(!E){throw new Error("SVG container not found.");}ar.canvas=am("svg");var aB=ar.canvas;ar.width=S||512;ar.height=e||342;aB[o]("width",ar.width);aB[o]("height",ar.height);if(E==1){aB.style.cssText="position:absolute;left:"+i+"px;top:"+aC+"px";z.body[ao](aB);}else{if(E.firstChild){E.insertBefore(aB,E.firstChild);}else{E[ao](aB);}}E={canvas:aB};for(var aA in ar){if(ar[F](aA)){E[aA]=ar[aA];}}aj.call(E,E,Y.fn);E.clear();E.raphael=Y;return E;};ar.clear=function(){var e=this.canvas;while(e.firstChild){e.removeChild(e.firstChild);}(this.desc=am("desc"))[ao](z.createTextNode("Created with Rapha\u00ebl"));e[ao](this.desc);e[ao](this.defs=am("defs"));};ar.remove=function(){this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas);for(var e in this){delete this[e];}};}if(Y.vml){var ak=function(aJ){var aG=/[ahqtv]/ig,aB=n;(aJ+aa).match(aG)&&(aB=w);aG=/[clmz]/g;if(aB==n&&!(aJ+aa).match(aG)){var E={M:"m",L:"l",C:"c",Z:"x",m:"t",l:"r",c:"v",z:"x"},S=/([clmz]),?([^clmz]*)/gi,aA=/-?[^,\s-]+/g;var aF=(aJ+aa)[aq](S,function(aK,aM,i){var aL=[];i[aq](aA,function(aN){aL[c](C(aN));});return E[aM]+aL;});return aF;}var aH=aB(aJ),R,aF=[],e;for(var aD=0,aI=aH[j];aD1&&(i=1);aH.opacity=i;}aI.fill&&(aH.on=true);if(aH.on==null||aI.fill=="none"){aH.on=false;}if(aH.on&&aI.fill){var E=aI.fill.match(/^url\(([^\)]+)\)$/i);if(E){aH.src=E[1];aH.type="tile";}else{aH.color=Y.getRGB(aI.fill).hex;aH.src=aa;aH.type="solid";if(Y.getRGB(aI.fill).error&&(aN.type in {circle:1,ellipse:1}||(aI.fill+aa).charAt(0)!="r")&&b(aN,aI.fill)){aJ.fill="none";aJ.gradient=aI.fill;}}}aK&&aG[ao](aH);var S=(aG.getElementsByTagName("stroke")&&aG.getElementsByTagName("stroke")[0]),aL=false;!S&&(aL=S=T("stroke"));if((aI.stroke&&aI.stroke!="none")||aI["stroke-width"]||aI["stroke-opacity"]!=null||aI["stroke-dasharray"]||aI["stroke-miterlimit"]||aI["stroke-linejoin"]||aI["stroke-linecap"]){S.on=true;}(aI.stroke=="none"||S.on==null||aI.stroke==0||aI["stroke-width"]==0)&&(S.on=false);S.on&&aI.stroke&&(S.color=Y.getRGB(aI.stroke).hex);var i=((+aJ["stroke-opacity"]+1||2)-1)*((+aJ.opacity+1||2)-1);i<0&&(i=0);i>1&&(i=1);S.opacity=i;aI["stroke-linejoin"]&&(S.joinstyle=aI["stroke-linejoin"]||"miter");S.miterlimit=aI["stroke-miterlimit"]||8;aI["stroke-linecap"]&&(S.endcap={butt:"flat",square:"square",round:"round"}[aI["stroke-linecap"]]||"miter");aI["stroke-width"]&&(S.weight=(J(aI["stroke-width"])||1)*12/16);if(aI["stroke-dasharray"]){var aF={"-":"shortdash",".":"shortdot","-.":"shortdashdot","-..":"shortdashdotdot",". ":"dot","- ":"dash","--":"longdash","- .":"dashdot","--.":"longdashdot","--..":"longdashdotdot"};S.dashstyle=aF[aI["stroke-dasharray"]]||aa;}aL&&aG[ao](S);}if(aN.type=="text"){var aB=aN.paper.span.style;aJ.font&&(aB.font=aJ.font);aJ["font-family"]&&(aB.fontFamily=aJ["font-family"]);aJ["font-size"]&&(aB.fontSize=aJ["font-size"]);aJ["font-weight"]&&(aB.fontWeight=aJ["font-weight"]);aJ["font-style"]&&(aB.fontStyle=aJ["font-style"]);aN.node.string&&(aN.paper.span.innerHTML=(aN.node.string+aa)[aq](/"));aN.W=aJ.w=aN.paper.span.offsetWidth;aN.H=aJ.h=aN.paper.span.offsetHeight;aN.X=aJ.x;aN.Y=aJ.y+C(aN.H/2);switch(aJ["text-anchor"]){case"start":aN.node.style["v-text-align"]="left";aN.bbx=C(aN.W/2);break;case"end":aN.node.style["v-text-align"]="right";aN.bbx=-C(aN.W/2);break;default:aN.node.style["v-text-align"]="center";break;}}};var b=function(e,aC){e.attrs=e.attrs||{};var aD=e.attrs,aF=e.node.getElementsByTagName("fill"),aA="linear",aB=".5 .5";e.attrs.gradient=aC;aC=(aC+aa)[aq](/^r(?:\(([^,]+?)\s*,\s*([^\)]+?)\))?/,function(aH,aI,i){aA="radial";if(aI&&i){aI=J(aI);i=J(i);if(ap(aI-0.5,2)+ap(i-0.5,2)>0.25){i=Math.sqrt(0.25-ap(aI-0.5,2))+0.5;}aB=aI+X+i;}return aa;});aC=aC[r](/\s*\-\s*/);if(aA=="linear"){var E=aC.shift();E=-J(E);if(isNaN(E)){return null;}}var S=l(aC);if(!S){return null;}e=e.shape||e.node;aF=aF[0]||T("fill");if(S[j]){aF.on=true;aF.method="none";aF.type=(aA=="radial")?"gradientradial":"gradient";aF.color=S[0].color;aF.color2=S[S[j]-1].color;var aG=[];for(var R=0,aE=S[j];R');};}catch(P){var T=function(e){return z.createElement("<"+e+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">');};}var p=function(){var R=Z[ax](null,arguments),i=R.container,aE=R.height,aF,E=R.width,aD=R.x,aC=R.y;if(!i){throw new Error("VML container not found.");}var aA={},aB=aA.canvas=z.createElement("div"),S=aB.style;E=J(E)||512;aE=J(aE)||342;aA.width=E;aA.height=aE;aA.coordsize=E+X+aE;aA.coordorigin="0 0";aA.span=z.createElement("span");aA.span.style.cssText="position:absolute;left:-9999px;top:-9999px;padding:0;margin:0;line-height:1;display:inline;";aB[ao](aA.span);S.cssText=Y.format("width:{0}px;height:{1}px;position:absolute;clip:rect(0 {0}px {1}px 0)",E,aE);if(i==1){z.body[ao](aB);S.left=aD+"px";S.top=aC+"px";i={style:{width:E,height:aE}};}else{i.style.width=E;i.style.height=aE;if(i.firstChild){i.insertBefore(aB,i.firstChild);}else{i[ao](aB);}}for(var e in ar){if(ar[F](e)){aA[e]=ar[e];}}aj.call(aA,aA,Y.fn);aA.clear=function(){aB.innerHTML=aa;};aA.raphael=Y;return aA;};ar.remove=function(){this.canvas.parentNode.removeChild(this.canvas);for(var e in this){delete this[e];}};}if({"Apple Computer, Inc.":1,"Google Inc.":1}[navigator.vendor]){ar.safari=function(){var e=this.rect(-99,-99,this.width+99,this.height+99);setTimeout(function(){e.remove();});};}else{ar.safari=function(){};}var Q=(function(){if(z.addEventListener){return function(S,E,i,e){var R=function(aA){return i.call(e,aA);};S.addEventListener(E,R,false);return function(){S.removeEventListener(E,R,false);return true;};};}else{if(z.attachEvent){return function(aA,R,E,i){var S=function(aB){return E.call(i,aB||ab.event);};aA.attachEvent("on"+R,S);var e=function(){aA.detachEvent("on"+R,S);return true;};if(R=="mouseover"){aA.attachEvent("onmouseenter",S);return function(){aA.detachEvent("onmouseenter",S);return e();};}else{if(R=="mouseout"){aA.attachEvent("onmouseleave",S);return function(){aA.detachEvent("onmouseleave",S);return e();};}}return e;};}}})();for(var N=u[j];N--;){(function(e){ad[az][e]=function(i){if(Y.is(i,"function")){this.events=this.events||{};this.events[e]=this.events[e]||{};this.events[e][i]=this.events[e][i]||[];this.events[e][i][c](Q(this.shape||this.node,e,i,this));}return this;};ad[az]["un"+e]=function(i){var E=this.events;E&&E[e]&&E[e][i]&&E[e][i][j]&&E[e][i].shift()()&&!E[e][i][j]&&delete E[e][i];return this;};})(u[N]);}ad[az].hover=function(i,e){return this.mouseover(i).mouseout(e);};ar.circle=function(e,E,i){return D(this,e||0,E||0,i||0);};ar.rect=function(e,S,i,E,R){return ai(this,e||0,S||0,i||0,E||0,R||0);};ar.ellipse=function(e,R,E,i){return U(this,e||0,R||0,E||0,i||0);};ar.path=function(e){e&&!Y.is(e,"string")&&!Y.is(e[0],"array")&&(e+=aa);return m(Y.format[ax](Y,arguments),this);};ar.image=function(R,e,S,i,E){return k(this,R||"about:blank",e||0,S||0,i||0,E||0);};ar.text=function(e,E,i){return K(this,e||0,E||0,i||aa);};ar.set=function(e){arguments[j]>1&&(e=Array[az].splice.call(arguments,0,arguments[j]));return new G(e);};ar.setSize=aw;ad[az].scale=function(aJ,aI,R,E){if(aJ==null&&aI==null){return{x:this._.sx,y:this._.sy,toString:function(){return this.x+X+this.y;}};}aI=aI||aJ;!+aI&&(aI=aJ);var aN,aL,aM,aK,aZ=this.attrs;if(aJ!=0){var aG=this.getBBox(),aD=aG.x+aG.width/2,aA=aG.y+aG.height/2,aY=aJ/this._.sx,aX=aI/this._.sy;R=(+R||R==0)?R:aD;E=(+E||E==0)?E:aA;var aF=~~(aJ/Math.abs(aJ)),aC=~~(aI/Math.abs(aI)),aQ=this.node.style,a1=R+(aD-R)*aF*aY,a0=E+(aA-E)*aC*aX;switch(this.type){case"rect":case"image":var aE=aZ.width*aF*aY,aP=aZ.height*aC*aX,aH=aZ.r*al(aY,aX),aB=a1-aE/2,S=a0-aP/2;this.attr({width:aE,height:aP,x:aB,y:S,r:aH});break;case"circle":case"ellipse":this.attr({rx:aZ.rx*aY,ry:aZ.ry*aX,r:aZ.r*al(aY,aX),cx:a1,cy:a0});break;case"path":var aS=O(aZ.path),aT=true;for(var aV=0,aO=aS[j];aV":function(e){return ap(e-1,3)+1;},"<>":function(e){e=e*2;if(e<1){return ap(e,3)/2;}e-=2;return(ap(e,3)+2)/2;},backIn:function(i){var e=1.70158;return i*i*((e+1)*i-e);},backOut:function(i){i=i-1;var e=1.70158;return i*i*((e+1)*i+e)+1;},elastic:function(E){if(E==0||E==1){return E;}var i=0.3,e=i/4;return ap(2,-10*E)*Math.sin((E-e)*(2*Math.PI)/i)+1;},bounce:function(R){var i=7.5625,E=2.75,e;if(R<(1/E)){e=i*R*R;}else{if(R<(2/E)){R-=(1.5/E);e=i*R*R+0.75;}else{if(R<(2.5/E)){R-=(2.25/E);e=i*R*R+0.9375;}else{R-=(2.625/E);e=i*R*R+0.984375;}}}return e;}};var x={length:0},at=function(){var aD=+new Date;for(var aO in x){if(aO!="length"&&x[F](aO)){var aT=x[aO];if(aT.stop){delete x[aO];x[j]--;continue;}var aB=aD-aT.start,aM=aT.ms,aL=aT.easing,aP=aT.from,aI=aT.diff,R=aT.to,aH=aT.t,aK=aT.prev||0,aC=aT.el,S=aT.callback,aJ={},E;if(aB255?255:(e<0?0:e);};ad[az].animateWith=function(i,E,e,S,R){x[i.id]&&(E.start=x[i.id].start);return this.animate(E,e,S,R);};ad[az].onAnimation=function(e){this._run=e||null;return this;};ad[az].animate=function(R,e,aF,aL){if(Y.is(aF,"function")||!aF){aL=aF||null;}var aG={},aH={},aI={};for(var aE in R){if(R[F](aE)){if(L[F](aE)){aG[aE]=this.attr(aE);(aG[aE]==null)&&(aG[aE]=g[aE]);aH[aE]=R[aE];switch(L[aE]){case"number":aI[aE]=(aH[aE]-aG[aE])/e;break;case"colour":aG[aE]=Y.getRGB(aG[aE]);var aC=Y.getRGB(aH[aE]);aI[aE]={r:(aC.r-aG[aE].r)/e,g:(aC.g-aG[aE].g)/e,b:(aC.b-aG[aE].b)/e};break;case"path":var E=w(aG[aE],aH[aE]);aG[aE]=E[0];aH[aE]=E[1];aI[aE]=[];for(var aB=0,aK=aG[aE][j];aB");i.close();aN=i.body;}catch(aP){aN=createPopup().document.body;}var S=aN.createTextRange();try{aN.style.color=aM;var aO=S.queryCommandValue("ForeColor");aO=((aO&255)<<16)|(aO&65280)|((aO&16711680)>>>16);return"#"+("000000"+aO[ao](16)).slice(-6);}catch(aP){return"none";}});}else{var R=D.createElement("i");R.className="Rapha\xebl Colour Picker";R.style.cssText="display:none";D.body[az](R);aq=aa(function(i){R.style.color=i;return D.defaultView.getComputedStyle(R,ai).getPropertyValue("color");});}return aq(E);};af.hsb2rgb=aa(function(aQ,aO,aU){if(af.is(aQ,"object")&&"h" in aQ&&"s" in aQ&&"b" in aQ){aU=aQ.b;aO=aQ.s;aQ=aQ.h;}var S,aM,aV;if(aU==0){return{r:0,g:0,b:0,hex:"#000"};}if(aQ>1||aO>1||aU>1){aQ/=255;aO/=255;aU/=255;}var aN=~~(aQ*6),aR=(aQ*6)-aN,R=aU*(1-aO),E=aU*(1-(aO*aR)),aW=aU*(1-(aO*(1-aR)));S=[aU,E,R,R,aW,aU,aU][aN];aM=[aW,aU,aU,E,R,R,aW][aN];aV=[R,R,aW,aU,aU,E,R][aN];S*=255;aM*=255;aV*=255;var aS={r:S,g:aM,b:aV},e=(~~S)[ao](16),aP=(~~aM)[ao](16),aT=(~~aV)[ao](16);e=e[aC](aG,"0");aP=aP[aC](aG,"0");aT=aT[aC](aG,"0");aS.hex="#"+e+aP+aT;return aS;},af);af.rgb2hsb=aa(function(e,i,aO){if(af.is(e,"object")&&"r" in e&&"g" in e&&"b" in e){aO=e.b;i=e.g;e=e.r;}if(af.is(e,"string")){var aQ=af.getRGB(e);e=aQ.r;i=aQ.g;aO=aQ.b;}if(e>1||i>1||aO>1){e/=255;i/=255;aO/=255;}var aN=f(e,i,aO),E=aw(e,i,aO),S,R,aM=aN;if(E==aN){return{h:0,s:0,b:aN};}else{var aP=(aN-E);R=aP/aN;if(e==aN){S=(i-aO)/aP;}else{if(i==aN){S=2+((aO-e)/aP);}else{S=4+((e-i)/aP);}}S/=6;S<0&&S++;S>1&&S--;}return{h:S,s:R,b:aM};},af);var ar=/,?([achlmqrstvxz]),?/gi;af._path2string=function(){return this.join(",")[aC](ar,"$1");};function aa(R,i,e){function E(){var S=Array[aK].slice.call(arguments,0),aN=S[an]("\u25ba"),aM=E.cache=E.cache||{},aO=E.count=E.count||[];if(aM[J](aN)){return e?e(aM[aN]):aM[aN];}aO[l]>=1000&&delete aM[aO.shift()];aO[d](aN);aM[aN]=R[aI](i,S);return e?e(aM[aN]):aM[aN];}return E;}af.getRGB=aa(function(e){if(!e||!!((e+ai).indexOf("-")+1)){return{r:-1,g:-1,b:-1,hex:"none",error:1};}e=e+ai;if(e=="none"){return{r:-1,g:-1,b:-1,hex:"none"};}!({hs:1,rg:1})[J](e.substring(0,2))&&(e=aq(e));var aM,E,R,aP,aN=e.match(/^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgb\(\s*([\d\.]+\s*,\s*[\d\.]+\s*,\s*[\d\.]+)\s*\)|rgb\(\s*([\d\.]+%\s*,\s*[\d\.]+%\s*,\s*[\d\.]+%)\s*\)|hs[bl]\(\s*([\d\.]+\s*,\s*[\d\.]+\s*,\s*[\d\.]+)\s*\)|hs[bl]\(\s*([\d\.]+%\s*,\s*[\d\.]+%\s*,\s*[\d\.]+%)\s*\))\s*$/i);if(aN){if(aN[2]){aP=z(aN[2].substring(5),16);R=z(aN[2].substring(3,5),16);E=z(aN[2].substring(1,3),16);}if(aN[3]){aP=z(aN[3].substring(3)+aN[3].substring(3),16);R=z(aN[3].substring(2,3)+aN[3].substring(2,3),16);E=z(aN[3].substring(1,2)+aN[3].substring(1,2),16);}if(aN[4]){aN=aN[4][u](/\s*,\s*/);E=N(aN[0]);R=N(aN[1]);aP=N(aN[2]);}if(aN[5]){aN=aN[5][u](/\s*,\s*/);E=N(aN[0])*2.55;R=N(aN[1])*2.55;aP=N(aN[2])*2.55;}if(aN[6]){aN=aN[6][u](/\s*,\s*/);E=N(aN[0]);R=N(aN[1]);aP=N(aN[2]);return af.hsb2rgb(E,R,aP);}if(aN[7]){aN=aN[7][u](/\s*,\s*/);E=N(aN[0])*2.55;R=N(aN[1])*2.55;aP=N(aN[2])*2.55;return af.hsb2rgb(E,R,aP);}aN={r:E,g:R,b:aP};var i=(~~E)[ao](16),S=(~~R)[ao](16),aO=(~~aP)[ao](16);i=i[aC](aG,"0");S=S[aC](aG,"0");aO=aO[aC](aG,"0");aN.hex="#"+i+S+aO;return aN;}return{r:-1,g:-1,b:-1,hex:"none",error:1};},af);af.getColor=function(i){var E=this.getColor.start=this.getColor.start||{h:0,s:1,b:i||0.75},e=this.hsb2rgb(E.h,E.s,E.b);E.h+=0.075;if(E.h>1){E.h=0;E.s-=0.2;E.s<=0&&(this.getColor.start={h:0,s:1,b:E.b});}return e.hex;};af.getColor.reset=function(){delete this.start;};af.parsePathString=aa(function(e){if(!e){return null;}var E={a:7,c:6,h:1,l:2,m:2,q:4,s:4,t:2,v:1,z:0},i=[];if(af.is(e,"array")&&af.is(e[0],"array")){i=ak(e);}if(!i[l]){(e+ai)[aC](/([achlmqstvz])[\s,]*((-?\d*\.?\d*(?:e[-+]?\d+)?\s*,?\s*)+)/ig,function(S,R,aO){var aN=[],aM=aL.call(R);aO[aC](/(-?\d*\.?\d*(?:e[-+]?\d+)?)\s*,?\s*/ig,function(aQ,aP){aP&&aN[d](+aP);});while(aN[l]>=E[aM]){i[d]([R][aF](aN.splice(0,E[aM])));if(!E[aM]){break;}}});}i[ao]=af._path2string;return i;});var L=aa(function(aR){if(!aR){return{x:0,y:0,width:0,height:0};}aR=A(aR);var aO=0,aN=0,R=[],E=[];for(var S=0,aQ=aR[l];SaP){aQ=aQ-S*2;}if(!aM&&aP>aQ){aP=aP-S*2;}}else{aQ=aY[0];aP=aY[1];a0=aY[2];aZ=aY[3];}var aU=aP-aQ;if(Math.abs(aU)>a2){var a1=aP,a4=aV,aS=bp;aP=aQ+a2*(aM&&aP>aQ?1:-1);aV=a0+a5*Math.cos(aP);bp=aZ+a3*Math.sin(aP);a9=C(aV,bp,a5,a3,aX,0,aM,a4,aS,[aP,a1,a0,aZ]);}aU=aP-aQ;var aO=Math.cos(aQ),bo=Math.sin(aQ),aN=Math.cos(aP),bn=Math.sin(aP),bc=Math.tan(aU/4),bf=4/3*a5*bc,bd=4/3*a3*bc,bl=[aW,bq],bk=[aW+bf*bo,bq-bd*aO],bj=[aV+bf*bn,bp-bd*aN],bh=[aV,bp];bk[0]=2*bl[0]-bk[0];bk[1]=2*bl[1]-bk[1];if(aY){return[bk,bj,bh][aF](a9);}else{a9=[bk,bj,bh][aF](a9)[an](",")[u](",");var a7=[];for(var bi=0,a8=a9[l];bi0&&aN<1?aN:0),aM=F(i,e,R,E,aX,aW,aT,aQ,S>0&&S<1?S:0);aU=aU[aF](aO.x,aM.x);aR=aR[aF](aO.y,aM.y);aV=(aW-2*E+e)-(aQ-2*aW+E);aS=2*(E-e)-2*(aW-E);aP=e-E;aN=(-aS+Math.sqrt(aS*aS-4*aV*aP))/2/aV;S=(-aS-Math.sqrt(aS*aS-4*aV*aP))/2/aV;aO=F(i,e,R,E,aX,aW,aT,aQ,aN>0&&aN<1?aN:0);aM=F(i,e,R,E,aX,aW,aT,aQ,S>0&&S<1?S:0);aU=aU[aF](aO.x,aM.x);aR=aR[aF](aO.y,aM.y);return{min:{x:aw[aI](0,aU),y:aw[aI](0,aR)},max:{x:f[aI](0,aU),y:f[aI](0,aR)}};}),A=aa(function(aW,aR){var S=p(aW),aS=aR&&p(aR),aT={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},e={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},aN=function(aX,aY){var i,aZ;if(!aX){return["C",aY.x,aY.y,aY.x,aY.y,aY.x,aY.y];}!(aX[0] in {T:1,Q:1})&&(aY.qx=aY.qy=null);switch(aX[0]){case"M":aY.X=aX[1];aY.Y=aX[2];break;case"A":aX=["C"][aF](C[aI](0,[aY.x,aY.y][aF](aX.slice(1))));break;case"S":i=aY.x+(aY.x-(aY.bx||aY.x));aZ=aY.y+(aY.y-(aY.by||aY.y));aX=["C",i,aZ][aF](aX.slice(1));break;case"T":aY.qx=aY.x+(aY.x-(aY.qx||aY.x));aY.qy=aY.y+(aY.y-(aY.qy||aY.y));aX=["C"][aF](ay(aY.x,aY.y,aY.qx,aY.qy,aX[1],aX[2]));break;case"Q":aY.qx=aX[1];aY.qy=aX[2];aX=["C"][aF](ay(aY.x,aY.y,aX[1],aX[2],aX[3],aX[4]));break;case"L":aX=["C"][aF](aJ(aY.x,aY.y,aX[1],aX[2]));break;case"H":aX=["C"][aF](aJ(aY.x,aY.y,aX[1],aY.y));break;case"V":aX=["C"][aF](aJ(aY.x,aY.y,aY.x,aX[1]));break;case"Z":aX=["C"][aF](aJ(aY.x,aY.y,aY.X,aY.Y));break;}return aX;},E=function(aX,aY){if(aX[aY][l]>7){aX[aY].shift();var aZ=aX[aY];while(aZ[l]){aX.splice(aY++,0,["C"][aF](aZ.splice(0,6)));}aX.splice(aY,1);aU=f(S[l],aS&&aS[l]||0);}},R=function(a3,a0,aY,aX,aZ){if(a3&&a0&&a3[aZ][0]=="M"&&a0[aZ][0]!="M"){a0.splice(aZ,0,["M",aX.x,aX.y]);aY.bx=0;aY.by=0;aY.x=a3[aZ][1];aY.y=a3[aZ][2];aU=f(S[l],aS&&aS[l]||0);}};for(var aP=0,aU=f(S[l],aS&&aS[l]||0);aP3){return{container:1,x:arguments[0],y:arguments[1],width:arguments[2],height:arguments[3]};}}},au=function(e,E){var i=this;for(var R in E){if(E[J](R)&&!(R in e)){switch(typeof E[R]){case"function":(function(S){e[R]=e===i?S:function(){return S[aI](i,arguments);};})(E[R]);break;case"object":e[R]=e[R]||{};au.call(this,e[R],E[R]);break;default:e[R]=E[R];break;}}}},ac=function(e,i){e==i.top&&(i.top=e.prev);e==i.bottom&&(i.bottom=e.next);e.next&&(e.next.prev=e.prev);e.prev&&(e.prev.next=e.next);},P=function(e,i){ac(e,i);e.next=null;e.prev=i.top;i.top.next=e;i.top=e;},j=function(e,i){ac(e,i);e.next=i.bottom;e.prev=null;i.bottom.prev=e;i.bottom=e;},v=function(i,e,E){ac(i,E);e==E.top&&(E.top=i);e.next&&(e.next.prev=i);i.next=e.next;i.prev=e;e.next=i;},ah=function(i,e,E){ac(i,E);e==E.bottom&&(E.bottom=i);e.prev&&(e.prev.next=i);i.prev=e.prev;e.prev=i;i.next=e;};if(af.svg){aD.svgns="http://www.w3.org/2000/svg";aD.xlink="http://www.w3.org/1999/xlink";var H=function(e){return +e+(~~e===e)*0.5;},M=function(aM){for(var E=0,R=aM[l];E0.25){aM=Math.sqrt(0.25-aA(aO-0.5,2))+0.5;}}return ai;});aU=aU[u](/\s*\-\s*/);if(aR=="linear"){var aN=aU.shift();aN=-N(aN);if(isNaN(aN)){return null;}var S=[0,0,Math.cos(aN*Math.PI/180),Math.sin(aN*Math.PI/180)],aT=1/(f(Math.abs(S[2]),Math.abs(S[3]))||1);S[2]*=aT;S[3]*=aT;if(S[2]<0){S[0]=-S[2];S[2]=0;}if(S[3]<0){S[1]=-S[3];S[3]=0;}}var aQ=n(aU);if(!aQ){return null;}var E=ax(aR+"Gradient");E.id="r"+(af._id++)[ao](36);aR=="radial"?ax(E,{fx:aO,fy:aM}):ax(E,{x1:S[0],y1:S[1],x2:S[2],y2:S[3]});e.defs[az](E);for(var aP=0,aV=aQ[l];aPaO.height)&&(aO.height=aN.y+aN.height-aO.y);(aN.x+aN.width-aO.x>aO.width)&&(aO.width=aN.x+aN.width-aO.x);}}R&&this.hide();return aO;};am[aK].attr=function(){if(this.removed){return this;}if(arguments[l]==1&&af.is(arguments[0],"string")){if(arguments[0]=="translation"){return q.call(this);}if(arguments[0]=="rotation"){return this.rotate();}if(arguments[0]=="scale"){return this.scale();}return this.attrs[arguments[0]];}if(arguments[l]==1&&af.is(arguments[0],"array")){var e={};for(var i in arguments[0]){if(arguments[0][J](i)){e[arguments[0][i]]=this.attrs[arguments[0][i]];}}return e;}if(arguments[l]==2){var E={};E[arguments[0]]=arguments[1];T(this,E);}else{if(arguments[l]==1&&af.is(arguments[0],"object")){T(this,arguments[0]);}}return this;};am[aK].toFront=function(){if(this.removed){return this;}this.node.parentNode[az](this.node);var e=this.paper;e.top!=this&&P(this,e);return this;};am[aK].toBack=function(){if(this.removed){return this;}if(this.node.parentNode.firstChild!=this.node){this.node.parentNode.insertBefore(this.node,this.node.parentNode.firstChild);j(this,this.paper);var e=this.paper;}return this;};am[aK].insertAfter=function(i){if(this.removed){return this;}var e=this.paper,E=i.node;if(E.nextSibling){E.parentNode.insertBefore(this.node,E.nextSibling);}else{E.parentNode[az](this.node);}v(this,i,this.paper);return this;};am[aK].insertBefore=function(e){if(this.removed){return this;}var i=e.node;i.parentNode.insertBefore(this.node,i);ah(this,e,this.paper);return this;};var I=function(i,e,aM,S){e=H(e);aM=H(aM);var R=ax("circle");i.canvas&&i.canvas[az](R);var E=new am(R,i);E.attrs={cx:e,cy:aM,r:S,fill:"none",stroke:"#000"};E.type="circle";ax(R,E.attrs);return E;};var at=function(E,e,aO,i,aM,aN){e=H(e);aO=H(aO);var S=ax("rect");E.canvas&&E.canvas[az](S);var R=new am(S,E);R.attrs={x:e,y:aO,width:i,height:aM,r:aN||0,rx:aN||0,ry:aN||0,fill:"none",stroke:"#000"};R.type="rect";ax(S,R.attrs);return R;};var Z=function(i,e,aN,aM,S){e=H(e);aN=H(aN);var R=ax("ellipse");i.canvas&&i.canvas[az](R);var E=new am(R,i);E.attrs={cx:e,cy:aN,rx:aM,ry:S,fill:"none",stroke:"#000"};E.type="ellipse";ax(R,E.attrs);return E;};var m=function(E,aN,e,aO,i,aM){var S=ax("image");ax(S,{x:e,y:aO,width:i,height:aM,preserveAspectRatio:"none"});S.setAttributeNS(E.xlink,"href",aN);E.canvas&&E.canvas[az](S);var R=new am(S,E);R.attrs={x:e,y:aO,width:i,height:aM,src:aN};R.type="image";return R;};var O=function(i,e,aM,S){var R=ax("text");ax(R,{x:e,y:aM,"text-anchor":"middle"});i.canvas&&i.canvas[az](R);var E=new am(R,i);E.attrs={x:e,y:aM,"text-anchor":"middle",text:S,font:h.font,stroke:"none",fill:"#000"};E.type="text";T(E,E.attrs);return E;};var aH=function(i,e){this.width=i||this.width;this.height=e||this.height;this.canvas[r]("width",this.width);this.canvas[r]("height",this.height);return this;};var s=function(){var R=ag[aI](null,arguments),E=R&&R.container,i=R.x,aO=R.y,S=R.width,e=R.height;if(!E){throw new Error("SVG container not found.");}aD.canvas=ax("svg");var aN=aD.canvas;aD.width=S||512;aD.height=e||342;aN[r]("width",aD.width);aN[r]("height",aD.height);if(E==1){aN.style.cssText="position:absolute;left:"+i+"px;top:"+aO+"px";D.body[az](aN);}else{if(E.firstChild){E.insertBefore(aN,E.firstChild);}else{E[az](aN);}}E={canvas:aN};for(var aM in aD){if(aD[J](aM)){E[aM]=aD[aM];}}E.bottom=E.top=null;au.call(E,E,af.fn);E.clear();E.raphael=af;return E;};aD.clear=function(){var e=this.canvas;while(e.firstChild){e.removeChild(e.firstChild);}this.bottom=this.top=null;(this.desc=ax("desc"))[az](D.createTextNode("Created with Rapha\xebl"));e[az](this.desc);e[az](this.defs=ax("defs"));};aD.remove=function(){this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas);for(var e in this){delete this[e];}};}if(af.vml){var av=function(aV){var aS=/[ahqtv]/ig,aN=p;(aV+ai).match(aS)&&(aN=A);aS=/[clmz]/g;if(aN==p&&!(aV+ai).match(aS)){var E={M:"m",L:"l",C:"c",Z:"x",m:"t",l:"r",c:"v",z:"x"},S=/([clmz]),?([^clmz]*)/gi,aM=/-?[^,\s-]+/g;var aR=(aV+ai)[aC](S,function(aW,aY,i){var aX=[];i[aC](aM,function(aZ){aX[d](H(aZ));});return E[aY]+aX;});return aR;}var aT=aN(aV),R,aR=[],e;for(var aP=0,aU=aT[l];aP1&&(i=1);aU.opacity=i;}aV.fill&&(aU.on=true);if(aU.on==null||aV.fill=="none"){aU.on=false;}if(aU.on&&aV.fill){var E=aV.fill.match(c);if(E){aU.src=E[1];aU.type="tile";}else{aU.color=af.getRGB(aV.fill).hex;aU.src=ai;aU.type="solid";if(af.getRGB(aV.fill).error&&(a0.type in {circle:1,ellipse:1}||(aV.fill+ai).charAt()!="r")&&b(a0,aV.fill)){aW.fill="none";aW.gradient=aV.fill;}}}aX&&aT[az](aU);var S=(aT.getElementsByTagName("stroke")&&aT.getElementsByTagName("stroke")[0]),aY=false;!S&&(aY=S=Y("stroke"));if((aV.stroke&&aV.stroke!="none")||aV["stroke-width"]||aV["stroke-opacity"]!=null||aV["stroke-dasharray"]||aV["stroke-miterlimit"]||aV["stroke-linejoin"]||aV["stroke-linecap"]){S.on=true;}(aV.stroke=="none"||S.on==null||aV.stroke==0||aV["stroke-width"]==0)&&(S.on=false);S.on&&aV.stroke&&(S.color=af.getRGB(aV.stroke).hex);var i=((+aW["stroke-opacity"]+1||2)-1)*((+aW.opacity+1||2)-1),aR=(N(aV["stroke-width"])||1)*0.75;i<0&&(i=0);i>1&&(i=1);aV["stroke-width"]==null&&(aR=aW["stroke-width"]);aV["stroke-width"]&&(S.weight=aR);aR&&aR<1&&(i*=aR)&&(S.weight=1);S.opacity=i;aV["stroke-linejoin"]&&(S.joinstyle=aV["stroke-linejoin"]||"miter");S.miterlimit=aV["stroke-miterlimit"]||8;aV["stroke-linecap"]&&(S.endcap=aV["stroke-linecap"]=="butt"?"flat":aV["stroke-linecap"]=="square"?"square":"round");if(aV["stroke-dasharray"]){var aS={"-":"shortdash",".":"shortdot","-.":"shortdashdot","-..":"shortdashdotdot",". ":"dot","- ":"dash","--":"longdash","- .":"dashdot","--.":"longdashdot","--..":"longdashdotdot"};S.dashstyle=aS[J](aV["stroke-dasharray"])?aS[aV["stroke-dasharray"]]:ai;}aY&&aT[az](S);}if(a0.type=="text"){var aN=a0.paper.span.style;aW.font&&(aN.font=aW.font);aW["font-family"]&&(aN.fontFamily=aW["font-family"]);aW["font-size"]&&(aN.fontSize=aW["font-size"]);aW["font-weight"]&&(aN.fontWeight=aW["font-weight"]);aW["font-style"]&&(aN.fontStyle=aW["font-style"]);a0.node.string&&(a0.paper.span.innerHTML=(a0.node.string+ai)[aC](/"));a0.W=aW.w=a0.paper.span.offsetWidth;a0.H=aW.h=a0.paper.span.offsetHeight;a0.X=aW.x;a0.Y=aW.y+H(a0.H/2);switch(aW["text-anchor"]){case"start":a0.node.style["v-text-align"]="left";a0.bbx=H(a0.W/2);break;case"end":a0.node.style["v-text-align"]="right";a0.bbx=-H(a0.W/2);break;default:a0.node.style["v-text-align"]="center";break;}}};var b=function(e,aO){e.attrs=e.attrs||{};var aP=e.attrs,aR=e.node.getElementsByTagName("fill"),aM="linear",aN=".5 .5";e.attrs.gradient=aO;aO=(aO+ai)[aC](/^r(?:\(([^,]+?)\s*,\s*([^\)]+?)\))?/,function(aT,aU,i){aM="radial";if(aU&&i){aU=N(aU);i=N(i);if(aA(aU-0.5,2)+aA(i-0.5,2)>0.25){i=Math.sqrt(0.25-aA(aU-0.5,2))+0.5;}aN=aU+ae+i;}return ai;});aO=aO[u](/\s*\-\s*/);if(aM=="linear"){var E=aO.shift();E=-N(E);if(isNaN(E)){return null;}}var S=n(aO);if(!S){return null;}e=e.shape||e.node;aR=aR[0]||Y("fill");if(S[l]){aR.on=true;aR.method="none";aR.type=(aM=="radial")?"gradientradial":"gradient";aR.color=S[0].color;aR.color2=S[S[l]-1].color;var aS=[];for(var R=0,aQ=S[l];R');};}catch(X){var Y=function(e){return D.createElement("<"+e+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">');};}var s=function(){var R=ag[aI](null,arguments),i=R.container,aQ=R.height,aR,E=R.width,aP=R.x,aO=R.y;if(!i){throw new Error("VML container not found.");}var aM={},aN=aM.canvas=D.createElement("div"),S=aN.style;E=N(E)||512;aQ=N(aQ)||342;aM.width=E;aM.height=aQ;aM.coordsize=E+ae+aQ;aM.coordorigin="0 0";aM.span=D.createElement("span");aM.span.style.cssText="position:absolute;left:-9999px;top:-9999px;padding:0;margin:0;line-height:1;display:inline;";aN[az](aM.span);S.cssText=af.format("width:{0}px;height:{1}px;position:absolute;clip:rect(0 {0}px {1}px 0)",E,aQ);if(i==1){D.body[az](aN);S.left=aP+"px";S.top=aO+"px";i={style:{width:E,height:aQ}};}else{i.style.width=E;i.style.height=aQ;if(i.firstChild){i.insertBefore(aN,i.firstChild);}else{i[az](aN);}}for(var e in aD){if(aD[J](e)){aM[e]=aD[e];}}au.call(aM,aM,af.fn);aM.top=aM.bottom=null;aM.raphael=af;return aM;};aD.clear=function(){this.canvas.innerHTML=ai;this.bottom=this.top=null;};aD.remove=function(){this.canvas.parentNode.removeChild(this.canvas);for(var e in this){delete this[e];}};}if({"Apple Computer, Inc.":1,"Google Inc.":1}[navigator.vendor]){aD.safari=function(){var e=this.rect(-99,-99,this.width+99,this.height+99);setTimeout(function(){e.remove();});};}else{aD.safari=function(){};}var W=(function(){if(D.addEventListener){return function(S,E,i,e){var R=function(aM){return i.call(e,aM);};S.addEventListener(E,R,false);return function(){S.removeEventListener(E,R,false);return true;};};}else{if(D.attachEvent){return function(aM,R,E,i){var S=function(aN){return E.call(i,aN||aj.event);};aM.attachEvent("on"+R,S);var e=function(){aM.detachEvent("on"+R,S);return true;};if(R=="mouseover"){aM.attachEvent("onmouseenter",S);return function(){aM.detachEvent("onmouseenter",S);return e();};}else{if(R=="mouseout"){aM.attachEvent("onmouseleave",S);return function(){aM.detachEvent("onmouseleave",S);return e();};}}return e;};}}})();for(var U=y[l];U--;){(function(e){am[aK][e]=function(i){if(af.is(i,"function")){this.events=this.events||{};this.events[e]=this.events[e]||{};this.events[e][i]=this.events[e][i]||[];this.events[e][i][d](W(this.shape||this.node,e,i,this));}return this;};am[aK]["un"+e]=function(i){var E=this.events;E&&E[e]&&E[e][i]&&E[e][i][l]&&E[e][i].shift()()&&!E[e][i][l]&&delete E[e][i];return this;};})(y[U]);}am[aK].hover=function(i,e){return this.mouseover(i).mouseout(e);};aD.circle=function(e,E,i){return I(this,e||0,E||0,i||0);};aD.rect=function(e,S,i,E,R){return at(this,e||0,S||0,i||0,E||0,R||0);};aD.ellipse=function(e,R,E,i){return Z(this,e||0,R||0,E||0,i||0);};aD.path=function(e){e&&!af.is(e,"string")&&!af.is(e[0],"array")&&(e+=ai);return o(af.format[aI](af,arguments),this);};aD.image=function(R,e,S,i,E){return m(this,R||"about:blank",e||0,S||0,i||0,E||0);};aD.text=function(e,E,i){return O(this,e||0,E||0,i||ai);};aD.set=function(e){arguments[l]>1&&(e=Array[aK].splice.call(arguments,0,arguments[l]));return new K(e);};aD.setSize=aH;am[aK].scale=function(aW,aV,R,E){if(aW==null&&aV==null){return{x:this._.sx,y:this._.sy,toString:function(){return this.x+ae+this.y;}};}aV=aV||aW;!+aV&&(aV=aW);var a0,aY,aZ,aX,bd=this.attrs;if(aW!=0){var aT=this.getBBox(),aQ=aT.x+aT.width/2,aM=aT.y+aT.height/2,bc=aW/this._.sx,ba=aV/this._.sy;R=(+R||R==0)?R:aQ;E=(+E||E==0)?E:aM;var aS=~~(aW/Math.abs(aW)),aP=~~(aV/Math.abs(aV)),a3=this.node.style,bf=R+(aQ-R)*aS*bc,be=E+(aM-E)*aP*ba;switch(this.type){case"rect":case"image":var aR=bd.width*aS*bc,a2=bd.height*aP*ba,aU=bd.r*aw(bc,ba),aO=bf-aR/2,S=be-a2/2;this.attr({width:aR,height:a2,x:aO,y:S,r:aU});break;case"circle":case"ellipse":this.attr({rx:bd.rx*bc,ry:bd.ry*ba,r:bd.r*aw(bc,ba),cx:bf,cy:be});break;case"path":var a5=V(bd.path),a6=true;for(var a8=0,a1=a5[l];a8":function(e){return aA(e-1,3)+1;},"<>":function(e){e=e*2;if(e<1){return aA(e,3)/2;}e-=2;return(aA(e,3)+2)/2;},backIn:function(i){var e=1.70158;return i*i*((e+1)*i-e);},backOut:function(i){i=i-1;var e=1.70158;return i*i*((e+1)*i+e)+1;},elastic:function(E){if(E==0||E==1){return E;}var i=0.3,e=i/4;return aA(2,-10*E)*Math.sin((E-e)*(2*Math.PI)/i)+1;},bounce:function(R){var i=7.5625,E=2.75,e;if(R<(1/E)){e=i*R*R;}else{if(R<(2/E)){R-=(1.5/E);e=i*R*R+0.75;}else{if(R<(2.5/E)){R-=(2.25/E);e=i*R*R+0.9375;}else{R-=(2.625/E);e=i*R*R+0.984375;}}}return e;}};var B={length:0},aE=function(){var aP=+new Date;for(var a0 in B){if(a0!="length"&&B[J](a0)){var a5=B[a0];if(a5.stop){delete B[a0];B[l]--;continue;}var aN=aP-a5.start,aY=a5.ms,aX=a5.easing,a1=a5.from,aU=a5.diff,R=a5.to,aT=a5.t,aW=a5.prev||0,aO=a5.el,S=a5.callback,aV={},E;if(aN255?255:(e<0?0:e);},q=function(e,E){if(e==null){return{x:this._.tx,y:this._.ty};}this._.tx+=+e;this._.ty+=+E;switch(this.type){case"circle":case"ellipse":this.attr({cx:+e+this.attrs.cx,cy:+E+this.attrs.cy});break;case"rect":case"image":case"text":this.attr({x:+e+this.attrs.x,y:+E+this.attrs.y});break;case"path":var i=V(this.attrs.path);i[0][1]+=+e;i[0][2]+=+E;this.attr({path:i});break;}return this;};am[aK].animateWith=function(i,E,e,S,R){B[i.id]&&(E.start=B[i.id].start);return this.animate(E,e,S,R);};am[aK].onAnimation=function(e){this._run=e||null;return this;};am[aK].animate=function(R,e,aR,aX){if(af.is(aR,"function")||!aR){aX=aR||null;}var aS={},aT={},aU={};for(var aQ in R){if(R[J](aQ)){if(Q[J](aQ)){aS[aQ]=this.attr(aQ);(aS[aQ]==null)&&(aS[aQ]=h[aQ]);aT[aQ]=R[aQ];switch(Q[aQ]){case"number":aU[aQ]=(aT[aQ]-aS[aQ])/e;break;case"colour":aS[aQ]=af.getRGB(aS[aQ]);var aO=af.getRGB(aT[aQ]);aU[aQ]={r:(aO.r-aS[aQ].r)/e,g:(aO.g-aS[aQ].g)/e,b:(aO.b-aS[aQ].b)/e};break;case"path":var E=A(aS[aQ],aT[aQ]);aS[aQ]=E[0];aT[aQ]=E[1];aU[aQ]=[];for(var aN=0,aW=aS[aQ][l];aN"); @@ -82,14 +89,18 @@ window.Raphael = (function () { bod = createPopup().document.body; } var range = bod.createTextRange(); - bod.style.color = color; - var value = range.queryCommandValue("ForeColor"); - value = ((value & 255) << 16) | (value & 65280) | ((value & 16711680) >>> 16); - return "#" + ("000000" + value[toString](16)).slice(-6); + try { + bod.style.color = color; + var value = range.queryCommandValue("ForeColor"); + value = ((value & 255) << 16) | (value & 65280) | ((value & 16711680) >>> 16); + return "#" + ("000000" + value[toString](16)).slice(-6); + } catch(e) { + return "none"; + } }); } else { var i = doc.createElement("i"); - i.className = "Rapha\u00ebl colour picker"; + i.className = "Rapha\xebl Colour Picker"; i.style.cssText = "display:none"; doc.body[appendChild](i); toHex = cacher(function (color) { @@ -177,21 +188,13 @@ window.Raphael = (function () { } return {h: hue, s: saturation, b: brightness}; }, R); + var p2s = /,?([achlmqrstvxz]),?/gi; R._path2string = function () { - var res = E, - item; - for (var i = 0, ii = this[length]; i < ii; i++) { - for (var j = 0, jj = this[i][length]; j < jj; j++) { - res += this[i][j]; - j && j != jj - 1 && (res += ","); - } - i != ii - 1 && (res += S); - } - return res[rp](/,(?=-)/g, E); + return this.join(",")[rp](p2s, "$1"); }; function cacher(f, scope, postprocessor) { function newf() { - var arg = Array[proto].splice.call(arguments, 0, arguments[length]), + var arg = Array[proto].slice.call(arguments, 0), args = arg[join]("\u25ba"), cache = newf.cache = newf.cache || {}, count = newf.count = newf.count || []; @@ -214,7 +217,7 @@ window.Raphael = (function () { if (colour == "none") { return {r: -1, g: -1, b: -1, hex: "none"}; } - !(({hs: 1, rg: 1}[has](colour.substring(0, 2)))) && (colour = toHex(colour)); + !({hs: 1, rg: 1})[has](colour.substring(0, 2)) && (colour = toHex(colour)); var res, red, green, @@ -296,7 +299,7 @@ window.Raphael = (function () { if (!data[length]) { (pathString + E)[rp](/([achlmqstvz])[\s,]*((-?\d*\.?\d*(?:e[-+]?\d+)?\s*,?\s*)+)/ig, function (a, b, c) { var params = [], - name = b.toLowerCase(); + name = lowerCase.call(b); c[rp](/(-?\d*\.?\d*(?:e[-+]?\d+)?)\s*,?\s*/ig, function (a, b) { b && params[push](+b); }); @@ -376,8 +379,8 @@ window.Raphael = (function () { for (var i = start, ii = pathArray[length]; i < ii; i++) { var r = res[i] = [], pa = pathArray[i]; - if (pa[0] != pa[0].toLowerCase()) { - r[0] = pa[0].toLowerCase(); + if (pa[0] != lowerCase.call(pa[0])) { + r[0] = lowerCase.call(pa[0]); switch (r[0]) { case "a": r[1] = pa[1]; @@ -450,8 +453,8 @@ window.Raphael = (function () { for (var i = start, ii = pathArray[length]; i < ii; i++) { var r = res[i] = [], pa = pathArray[i]; - if (pa[0] != (pa[0] + E).toUpperCase()) { - r[0] = (pa[0] + E).toUpperCase(); + if (pa[0] != upperCase.call(pa[0])) { + r[0] = upperCase.call(pa[0]); switch (r[0]) { case "A": r[1] = pa[1]; @@ -814,6 +817,42 @@ window.Raphael = (function () { break; } } + }, + tear = function (el, paper) { + el == paper.top && (paper.top = el.prev); + el == paper.bottom && (paper.bottom = el.next); + el.next && (el.next.prev = el.prev); + el.prev && (el.prev.next = el.next); + }, + tofront = function (el, paper) { + tear(el, paper); + el.next = null; + el.prev = paper.top; + paper.top.next = el; + paper.top = el; + }, + toback = function (el, paper) { + tear(el, paper); + el.next = paper.bottom; + el.prev = null; + paper.bottom.prev = el; + paper.bottom = el; + }, + insertafter = function (el, el2, paper) { + tear(el, paper); + el2 == paper.top && (paper.top = el); + el2.next && (el2.next.prev = el); + el.next = el2.next; + el.prev = el2; + el2.next = el; + }, + insertbefore = function (el, el2, paper) { + tear(el, paper); + el2 == paper.bottom && (paper.bottom = el); + el2.prev && (el2.prev.next = el); + el.prev = el2.prev; + el2.prev = el; + el.next = el2; }; // SVG @@ -822,10 +861,10 @@ window.Raphael = (function () { paper.xlink = "http://www.w3.org/1999/xlink"; var round = function (num) { return +num + (~~num === num) * .5; - }; - var roundPath = function (path) { + }, + roundPath = function (path) { for (var i = 0, ii = path[length]; i < ii; i++) { - if (path[i][0].toLowerCase() != "a") { + if (lowerCase.call(path[i][0]) != "a") { for (var j = 1, jj = path[i][length]; j < jj; j++) { path[i][j] = round(path[i][j]); } @@ -835,8 +874,8 @@ window.Raphael = (function () { } } return path; - }; - var $ = function (el, attr) { + }, + $ = function (el, attr) { if (attr) { for (var key in attr) if (attr[has](key)) { el[setAttribute](key, attr[key]); @@ -846,7 +885,7 @@ window.Raphael = (function () { } }; R[toString] = function () { - return "Your browser supports SVG.\nYou are running Rapha\u00ebl " + this.version; + return "Your browser supports SVG.\nYou are running Rapha\xebl " + this.version; }; var thePath = function (pathString, SVG) { var el = $("path"); @@ -940,7 +979,7 @@ window.Raphael = (function () { attrs = o.attrs, rot = o.rotate(), addDashes = function (o, value) { - value = dasharray[(value + E).toLowerCase()]; + value = dasharray[lowerCase.call(value)]; if (value) { var width = o.attrs["stroke-width"] || "1", butt = {round: width, square: width, butt: 0}[o.attrs["stroke-linecap"] || params["stroke-linecap"]] || 0, @@ -952,27 +991,41 @@ window.Raphael = (function () { $(node, {"stroke-dasharray": dashes[join](",")}); } }; + params[has]("rotation") && (rot = params.rotation); + var rotxy = (rot + E)[split](separator); + if (!(rotxy.length - 1)) { + rotxy = null; + } else { + rotxy[1] = +rotxy[1]; + rotxy[2] = +rotxy[2]; + } toFloat(rot) && o.rotate(0, true); for (var att in params) if (params[has](att)) { - if (!(att in availableAttrs)) { + if (!availableAttrs[has](att)) { continue; } var value = params[att]; attrs[att] = value; switch (att) { + case "rotation": + o.rotate(value, true); + break; // Hyperlink case "href": case "title": case "target": var pn = node.parentNode; - if (pn.tagName.toLowerCase() != "a") { + if (lowerCase.call(pn.tagName) != "a") { var hl = $("a"); pn.insertBefore(hl, node); hl[appendChild](node); pn = hl; } pn.setAttributeNS(o.paper.xlink, att, value); - break; + break; + case "cursor": + node.style.cursor = value; + break; case "clip-rect": var rect = (value + E)[split](separator); if (rect[length] == 4) { @@ -1021,6 +1074,7 @@ window.Raphael = (function () { break; } case "cx": + rotxy && (att == "x" || att == "cx") && (rotxy[1] += value - attrs[att]); node[setAttribute](att, round(value)); o.pattern && updatePosition(o); break; @@ -1041,6 +1095,7 @@ window.Raphael = (function () { break; } case "cy": + rotxy && (att == "y" || att == "cy") && (rotxy[2] += value - attrs[att]); node[setAttribute](att, round(value)); o.pattern && updatePosition(o); break; @@ -1067,26 +1122,26 @@ window.Raphael = (function () { case "stroke-dasharray": addDashes(o, value); break; - case "rotation": - rot = value; - o.rotate(value, true); - break; case "translation": var xy = (value + E)[split](separator); - o.translate((+xy[0] + 1 || 2) - 1, (+xy[1] + 1 || 2) - 1); + if (rotxy) { + rotxy[1] +=+ xy[0]; + rotxy[2] +=+ xy[1]; + } + translate.call(o, (+xy[0] + 1 || 2) - 1, (+xy[1] + 1 || 2) - 1); break; case "scale": var xy = (value + E)[split](separator); o.scale(+xy[0] || 1, +xy[1] || +xy[0] || 1, +xy[2] || null, +xy[3] || null); break; case "fill": - var isURL = (value + E).match(/^url\(['"]?([^\)]+)['"]?\)$/i); + var isURL = (value + E).match(ISURL); if (isURL) { var el = $("pattern"), ig = $("image"); el.id = "r" + (R._id++)[toString](36); $(el, {x: 0, y: 0, patternUnits: "userSpaceOnUse"}); - $(ig, {x: 0, y:0}); + $(ig, {x: 0, y: 0}); ig.setAttributeNS(o.paper.xlink, "href", isURL[1]); el[appendChild](ig); @@ -1110,28 +1165,22 @@ window.Raphael = (function () { if (!R.getRGB(value).error) { delete params.gradient; delete attrs.gradient; - if (!R.is(attrs.opacity, "undefined") && R.is(params.opacity, "undefined") ) { - node.style.opacity = attrs.opacity; - // Need following line for Firefox + !R.is(attrs.opacity, "undefined") && + R.is(params.opacity, "undefined") && $(node, {opacity: attrs.opacity}); - } - if (!R.is(attrs["fill-opacity"], "undefined") && R.is(params["fill-opacity"], "undefined") ) { - node.style.fillOpacity = attrs["fill-opacity"]; - // Need following line for Firefox + !R.is(attrs["fill-opacity"], "undefined") && + R.is(params["fill-opacity"], "undefined") && $(node, {"fill-opacity": attrs["fill-opacity"]}); - } - } else if ((o.type in {circle: 1, ellipse: 1} || (value + E).charAt(0) != "r") && addGradientFill(node, value, o.paper)) { + } else if ((({circle: 1, ellipse: 1})[has](o.type) || (value + E).charAt() != "r") && addGradientFill(node, value, o.paper)) { attrs.gradient = value; attrs.fill = "none"; break; } case "stroke": - node.style[att] = R.getRGB(value).hex; - // Need following line for Firefox node[setAttribute](att, R.getRGB(value).hex); break; case "gradient": - (o.type in {circle: 1, ellipse: 1} || (value + E).charAt(0) != "r") && addGradientFill(node, value, o.paper); + (({circle: 1, ellipse: 1})[has](o.type) || (value + E).charAt() != "r") && addGradientFill(node, value, o.paper); break; case "opacity": case "fill-opacity": @@ -1146,7 +1195,7 @@ window.Raphael = (function () { default: att == "font-size" && (value = toInt(value, 10) + "px"); var cssrule = att[rp](/(\-.)/g, function (w) { - return w.substring(1).toUpperCase(); + return upperCase.call(w.substring(1)); }); node.style[cssrule] = value; // Need following line for Firefox @@ -1156,23 +1205,28 @@ window.Raphael = (function () { } tuneText(o, params); - toFloat(rot) && o.rotate(rot, true); + if (rotxy) { + o.rotate(rotxy.join(S)); + } else { + toFloat(rot) && o.rotate(rot, true); + } }; var leading = 1.2; var tuneText = function (el, params) { - if (el.type != "text" || !("text" in params || "font" in params || "font-size" in params || "x" in params || "y" in params)) { + if (el.type != "text" || !(params[has]("text") || params[has]("font") || params[has]("font-size") || params[has]("x") || params[has]("y"))) { return; } var a = el.attrs, node = el.node, fontSize = node.firstChild ? toInt(doc.defaultView.getComputedStyle(node.firstChild, E).getPropertyValue("font-size"), 10) : 10; - if ("text" in params) { + if (params[has]("text")) { + a.text = params.text; while (node.firstChild) { node.removeChild(node.firstChild); } var texts = (params.text + E)[split]("\n"); - for (var i = 0, ii = texts[length]; i < ii; i++) { + for (var i = 0, ii = texts[length]; i < ii; i++) if (texts[i]) { var tspan = $("tspan"); i && $(tspan, {dy: fontSize * leading, x: a.x}); tspan[appendChild](doc.createTextNode(texts[i])); @@ -1206,6 +1260,11 @@ window.Raphael = (function () { sx: 1, sy: 1 }; + !svg.bottom && (svg.bottom = this); + this.prev = svg.top; + svg.top && (svg.top.next = this); + svg.top = this; + this.next = null; }; Element[proto].rotate = function (deg, cx, cy) { if (this.removed) { @@ -1253,6 +1312,10 @@ window.Raphael = (function () { return this; }; Element[proto].remove = function () { + if (this.removed) { + return; + } + tear(this, this.paper); this.node.parentNode.removeChild(this.node); for (var i in this) { delete this[i]; @@ -1296,7 +1359,7 @@ window.Raphael = (function () { } if (arguments[length] == 1 && R.is(arguments[0], "string")) { if (arguments[0] == "translation") { - return this.translate(); + return translate.call(this); } if (arguments[0] == "rotation") { return this.rotate(); @@ -1323,7 +1386,12 @@ window.Raphael = (function () { return this; }; Element[proto].toFront = function () { - !this.removed && this.node.parentNode[appendChild](this.node); + if (this.removed) { + return this; + } + this.node.parentNode[appendChild](this.node); + var svg = this.paper; + svg.top != this && tofront(this, svg); return this; }; Element[proto].toBack = function () { @@ -1332,6 +1400,8 @@ window.Raphael = (function () { } if (this.node.parentNode.firstChild != this.node) { this.node.parentNode.insertBefore(this.node, this.node.parentNode.firstChild); + toback(this, this.paper); + var svg = this.paper; } return this; }; @@ -1339,11 +1409,14 @@ window.Raphael = (function () { if (this.removed) { return this; } - if (element.node.nextSibling) { - element.node.parentNode.insertBefore(this.node, element.node.nextSibling); + var svg = this.paper, + node = element.node; + if (node.nextSibling) { + node.parentNode.insertBefore(this.node, node.nextSibling); } else { - element.node.parentNode[appendChild](this.node); + node.parentNode[appendChild](this.node); } + insertafter(this, element, this.paper); return this; }; Element[proto].insertBefore = function (element) { @@ -1352,6 +1425,7 @@ window.Raphael = (function () { } var node = element.node; node.parentNode.insertBefore(this.node, node); + insertbefore(this, element, this.paper); return this; }; @@ -1445,6 +1519,7 @@ window.Raphael = (function () { for (var prop in paper) if (paper[has](prop)) { container[prop] = paper[prop]; } + container.bottom = container.top = null; plugins.call(container, container, R.fn); container.clear(); container.raphael = R; @@ -1455,7 +1530,8 @@ window.Raphael = (function () { while (c.firstChild) { c.removeChild(c.firstChild); } - (this.desc = $("desc"))[appendChild](doc.createTextNode("Created with Rapha\u00ebl")); + this.bottom = this.top = null; + (this.desc = $("desc"))[appendChild](doc.createTextNode("Created with Rapha\xebl")); c[appendChild](this.desc); c[appendChild](this.defs = $("defs")); }; @@ -1490,7 +1566,7 @@ window.Raphael = (function () { var pa = command(path), p, res = [], r; for (var i = 0, ii = pa[length]; i < ii; i++) { p = pa[i]; - r = (pa[i][0] + E).toLowerCase(); + r = lowerCase.call(pa[i][0]); r == "z" && (r = "x"); for (var j = 1, jj = p[length]; j < jj; j++) { r += round(p[j]) + (j != jj - 1 ? "," : E); @@ -1501,7 +1577,7 @@ window.Raphael = (function () { }; R[toString] = function () { - return "Your browser doesn\u2019t support SVG. Falling down to VML.\nYou are running Rapha\u00ebl " + this.version; + return "Your browser doesn\u2019t support SVG. Falling down to VML.\nYou are running Rapha\xebl " + this.version; }; var thePath = function (pathString, VML) { var g = createNode("group"); @@ -1536,6 +1612,7 @@ window.Raphael = (function () { params.href && (node.href = params.href); params.title && (node.title = params.title); params.target && (node.target = params.target); + params.cursor && (s.cursor = params.cursor); if (params.path && o.type == "path") { a.path = params.path; node.path = path2vml(a.path); @@ -1545,7 +1622,12 @@ window.Raphael = (function () { } if (params.translation) { xy = (params.translation + E)[split](separator); - o.translate(xy[0], xy[1]); + translate.call(o, xy[0], xy[1]); + if (o._.rt.cx != null) { + o._.rt.cx +=+ xy[0]; + o._.rt.cy +=+ xy[1]; + o.setBox(o.attrs, xy[0], xy[1]); + } } if (params.scale) { xy = (params.scale + E)[split](separator); @@ -1613,7 +1695,7 @@ window.Raphael = (function () { fill.on = false; } if (fill.on && params.fill) { - var isURL = params.fill.match(/^url\(([^\)]+)\)$/i); + var isURL = params.fill.match(ISURL); if (isURL) { fill.src = isURL[1]; fill.type = "tile"; @@ -1621,7 +1703,7 @@ window.Raphael = (function () { fill.color = R.getRGB(params.fill).hex; fill.src = E; fill.type = "solid"; - if (R.getRGB(params.fill).error && (res.type in {circle: 1, ellipse: 1} || (params.fill + E).charAt(0) != "r") && addGradientFill(res, params.fill)) { + if (R.getRGB(params.fill).error && (res.type in {circle: 1, ellipse: 1} || (params.fill + E).charAt() != "r") && addGradientFill(res, params.fill)) { a.fill = "none"; a.gradient = params.fill; } @@ -1642,14 +1724,18 @@ window.Raphael = (function () { } (params.stroke == "none" || stroke.on == null || params.stroke == 0 || params["stroke-width"] == 0) && (stroke.on = false); stroke.on && params.stroke && (stroke.color = R.getRGB(params.stroke).hex); - var opacity = ((+a["stroke-opacity"] + 1 || 2) - 1) * ((+a.opacity + 1 || 2) - 1); + var opacity = ((+a["stroke-opacity"] + 1 || 2) - 1) * ((+a.opacity + 1 || 2) - 1), + width = (toFloat(params["stroke-width"]) || 1) * .75; opacity < 0 && (opacity = 0); opacity > 1 && (opacity = 1); + params["stroke-width"] == null && (width = a["stroke-width"]); + params["stroke-width"] && (stroke.weight = width); + width && width < 1 && (opacity *= width) && (stroke.weight = 1); stroke.opacity = opacity; + params["stroke-linejoin"] && (stroke.joinstyle = params["stroke-linejoin"] || "miter"); stroke.miterlimit = params["stroke-miterlimit"] || 8; - params["stroke-linecap"] && (stroke.endcap = {butt: "flat", square: "square", round: "round"}[params["stroke-linecap"]] || "miter"); - params["stroke-width"] && (stroke.weight = (toFloat(params["stroke-width"]) || 1) * 12 / 16); + params["stroke-linecap"] && (stroke.endcap = params["stroke-linecap"] == "butt" ? "flat" : params["stroke-linecap"] == "square" ? "square" : "round"); if (params["stroke-dasharray"]) { var dasharray = { "-": "shortdash", @@ -1663,7 +1749,7 @@ window.Raphael = (function () { "--.": "longdashdot", "--..": "longdashdotdot" }; - stroke.dashstyle = dasharray[params["stroke-dasharray"]] || E; + stroke.dashstyle = dasharray[has](params["stroke-dasharray"]) ? dasharray[params["stroke-dasharray"]] : E; } newstroke && node[appendChild](stroke); } @@ -1771,6 +1857,11 @@ window.Raphael = (function () { sx: 1, sy: 1 }; + !vml.bottom && (vml.bottom = this); + this.prev = vml.top; + vml.top && (vml.top.next = this); + vml.top = this; + this.next = null; }; Element[proto].rotate = function (deg, cx, cy) { if (this.removed) { @@ -1931,6 +2022,10 @@ window.Raphael = (function () { }; }; Element[proto].remove = function () { + if (this.removed) { + return; + } + tear(this, this.paper); this.node.parentNode.removeChild(this[0]); this.Group.parentNode.removeChild(this.Group); this.shape && this.shape.parentNode.removeChild(this.shape); @@ -1945,7 +2040,7 @@ window.Raphael = (function () { } if (arguments[length] == 1 && R.is(arguments[0], "string")) { if (arguments[0] == "translation") { - return this.translate(); + return translate.call(this); } if (arguments[0] == "rotation") { return this.rotate(); @@ -1973,15 +2068,16 @@ window.Raphael = (function () { this.node.string = params.text; } setFillAndStroke(this, params); - if (params.gradient && ({circle: 1, ellipse: 1}[has](this.type) || (params.gradient + E).charAt(0) != "r")) { + if (params.gradient && (({circle: 1, ellipse: 1})[has](this.type) || (params.gradient + E).charAt() != "r")) { addGradientFill(this, params.gradient); } - this.setBox(this.attrs); + (this.type != "path" || this._.rt.deg) && this.setBox(this.attrs); } return this; }; Element[proto].toFront = function () { !this.removed && this.Group.parentNode[appendChild](this.Group); + this.paper.top != this && tofront(this, this.paper); return this; }; Element[proto].toBack = function () { @@ -1990,6 +2086,7 @@ window.Raphael = (function () { } if (this.Group.parentNode.firstChild != this.Group) { this.Group.parentNode.insertBefore(this.Group, this.Group.parentNode.firstChild); + toback(this, this.paper); } return this; }; @@ -2002,10 +2099,15 @@ window.Raphael = (function () { } else { element.Group.parentNode[appendChild](this.Group); } + insertafter(this, element, this.paper); return this; }; Element[proto].insertBefore = function (element) { - !this.removed && element.Group.parentNode.insertBefore(this.Group, element.Group); + if (this.removed) { + return this; + } + element.Group.parentNode.insertBefore(this.Group, element.Group); + insertbefore(this, element, this.paper); return this; }; @@ -2124,6 +2226,12 @@ window.Raphael = (function () { cs.height = this.height + "px"; cs.clip = "rect(0 " + this.width + "px " + this.height + "px 0)"; this.coordsize = this.width + S + this.height; + var bot = this.bottom; + while (bot) { + bot.Group.coordsize = this.coordsize; + bot.attr(bot.attrs); + bot = bot.next; + } return this; }; doc.createStyleSheet().addRule(".rvml", "behavior:url(#default#VML)"); @@ -2184,12 +2292,14 @@ window.Raphael = (function () { res[prop] = paper[prop]; } plugins.call(res, res, R.fn); - res.clear = function () { - c.innerHTML = E; - }; + res.top = res.bottom = null; res.raphael = R; return res; }; + paper.clear = function () { + this.canvas.innerHTML = E; + this.bottom = this.top = null; + }; paper.remove = function () { this.canvas.parentNode.removeChild(this.canvas); for (var i in this) { @@ -2355,13 +2465,14 @@ window.Raphael = (function () { var path = pathToRelative(a.path), skip = true; for (var i = 0, ii = path[length]; i < ii; i++) { - var p = path[i]; - if (p[0].toUpperCase() == "M" && skip) { + var p = path[i], + P0 = upperCase.call(p[0]); + if (P0 == "M" && skip) { continue; } else { skip = false; } - if (R.svg && p[0].toUpperCase() == "A") { + if (R.svg && P0 == "A") { p[path[i][length] - 2] *= kx; p[path[i][length] - 1] *= ky; p[1] *= kx; @@ -2369,7 +2480,7 @@ window.Raphael = (function () { p[5] = +(dirx + diry ? !!+p[5] : !+p[5]); } else { for (var j = 1, jj = p[length]; j < jj; j++) { - p[j] *= (j % 2) ? kx : ky; + p[j] *= (j % 2 && P0 != "V") ? kx : ky; } } } @@ -2556,10 +2667,10 @@ window.Raphael = (function () { (t.x || t.y) && that.translate(-t.x, -t.y); to.scale && (to.scale = to.scale + E); that.attr(to); - R.is(callback, "function") && callback.call(that); delete animationElements[l]; animationElements[length]--; that.in_animation = null; + R.is(callback, "function") && callback.call(that); } e.prev = time; } @@ -2568,8 +2679,32 @@ window.Raphael = (function () { }, upto255 = function (color) { return color > 255 ? 255 : (color < 0 ? 0 : color); + }, + translate = function (x, y) { + if (x == null) { + return {x: this._.tx, y: this._.ty}; + } + this._.tx += +x; + this._.ty += +y; + switch (this.type) { + case "circle": + case "ellipse": + this.attr({cx: +x + this.attrs.cx, cy: +y + this.attrs.cy}); + break; + case "rect": + case "image": + case "text": + this.attr({x: +x + this.attrs.x, y: +y + this.attrs.y}); + break; + case "path": + var path = pathToRelative(this.attrs.path); + path[0][1] += +x; + path[0][2] += +y; + this.attr({path: path}); + break; + } + return this; }; - Element[proto].animateWith = function (element, params, ms, easing, callback) { animationElements[element.id] && (params.start = animationElements[element.id].start); return this.animate(params, ms, easing, callback); @@ -2662,37 +2797,15 @@ window.Raphael = (function () { return this; }; Element[proto].stop = function () { + animationElements[this.id] && animationElements[length]--; delete animationElements[this.id]; - delete this.in_animation; return this; }; Element[proto].translate = function (x, y) { - if (x == null) { - return {x: this._.tx, y: this._.ty}; - } - this._.tx += +x; - this._.ty += +y; - switch (this.type) { - case "circle": - case "ellipse": - this.attr({cx: +x + this.attrs.cx, cy: +y + this.attrs.cy}); - break; - case "rect": - case "image": - case "text": - this.attr({x: +x + this.attrs.x, y: +y + this.attrs.y}); - break; - case "path": - var path = pathToRelative(this.attrs.path); - path[0][1] += +x; - path[0][2] += +y; - this.attr({path: path}); - break; - } - return this; + return this.attr({translation: x + " " + y}); }; Element[proto][toString] = function () { - return "Rapha\u00ebl\u2019s object"; + return "Rapha\xebl\u2019s object"; }; R.ae = animationElements; -- 2.39.2