svgedit/editor/jgraduate/jquery.jgraduate.min.js

1 line
23 KiB
JavaScript

!function(){var ns={svg:"http://www.w3.org/2000/svg",xlink:"http://www.w3.org/1999/xlink"};window.console||(window.console=new function(){this.log=function(str){},this.dir=function(str){}}),$.jGraduate={Paint:function(opt){var options=opt||{};if(this.alpha=isNaN(options.alpha)?100:options.alpha,options.copy)switch(this.type=options.copy.type,this.alpha=options.copy.alpha,this.solidColor=null,this.linearGradient=null,this.radialGradient=null,this.type){case"none":break;case"solidColor":this.solidColor=options.copy.solidColor;break;case"linearGradient":this.linearGradient=options.copy.linearGradient.cloneNode(!0);break;case"radialGradient":this.radialGradient=options.copy.radialGradient.cloneNode(!0)}else options.linearGradient?(this.type="linearGradient",this.solidColor=null,this.radialGradient=null,this.linearGradient=options.linearGradient.cloneNode(!0)):options.radialGradient?(this.type="radialGradient",this.solidColor=null,this.linearGradient=null,this.radialGradient=options.radialGradient.cloneNode(!0)):options.solidColor?(this.type="solidColor",this.solidColor=options.solidColor):(this.type="none",this.solidColor=null,this.linearGradient=null,this.radialGradient=null)}},jQuery.fn.jGraduateDefaults={paint:new $.jGraduate.Paint,window:{pickerTitle:"Drag markers to pick a paint"},images:{clientPath:"images/"},newstop:"inverse"};var isGecko=navigator.userAgent.indexOf("Gecko/")>=0;function mkElem(name,attrs,newparent){var elem=document.createElementNS(ns.svg,name);return function(elem,attrs){if(isGecko)for(var aname in attrs)elem.setAttribute(aname,attrs[aname]);else for(var aname in attrs){var val=attrs[aname],prop=elem[aname];prop&&"SVGLength"===prop.constructor?prop.baseVal.value=val:elem.setAttribute(aname,val)}}(elem,attrs),newparent&&newparent.appendChild(elem),elem}jQuery.fn.jGraduate=function(options){var $arguments=arguments;return this.each(function(){var $this=$(this),$settings=$.extend(!0,{},jQuery.fn.jGraduateDefaults,options),id=$this.attr("id"),idref="#"+$this.attr("id")+" ";if(idref){var okClicked=function(){switch($this.paint.type){case"radialGradient":$this.paint.linearGradient=null;break;case"linearGradient":$this.paint.radialGradient=null;break;case"solidColor":$this.paint.radialGradient=$this.paint.linearGradient=null}$.isFunction($this.okCallback)&&$this.okCallback($this.paint),$this.hide()},cancelClicked=function(){$.isFunction($this.cancelCallback)&&$this.cancelCallback(),$this.hide()};$.extend(!0,$this,{paint:new $.jGraduate.Paint({copy:$settings.paint}),okCallback:$.isFunction($arguments[1])&&$arguments[1]||null,cancelCallback:$.isFunction($arguments[2])&&$arguments[2]||null});var color=null,$win=$(window);"none"===$this.paint.type&&($this.paint=$.jGraduate.Paint({solidColor:"ffffff"})),$this.addClass("jGraduate_Picker"),$this.html('<ul class="jGraduate_tabs"><li class="jGraduate_tab_color jGraduate_tab_current" data-type="col">Solid Color</li><li class="jGraduate_tab_lingrad" data-type="lg">Linear Gradient</li><li class="jGraduate_tab_radgrad" data-type="rg">Radial Gradient</li></ul><div class="jGraduate_colPick"></div><div class="jGraduate_gradPick"></div><div class="jGraduate_LightBox"></div><div id="'+id+'_jGraduate_stopPicker" class="jGraduate_stopPicker"></div>');var colPicker=$(idref+"> .jGraduate_colPick"),gradPicker=$(idref+"> .jGraduate_gradPick");gradPicker.html('<div id="'+id+'_jGraduate_Swatch" class="jGraduate_Swatch"><h2 class="jGraduate_Title">'+$settings.window.pickerTitle+'</h2><div id="'+id+'_jGraduate_GradContainer" class="jGraduate_GradContainer"></div><div id="'+id+'_jGraduate_StopSlider" class="jGraduate_StopSlider"></div></div><div class="jGraduate_Form jGraduate_Points jGraduate_lg_field"><div class="jGraduate_StopSection"><label class="jGraduate_Form_Heading">Begin Point</label><div class="jGraduate_Form_Section"><label>x:</label><input type="text" id="'+id+'_jGraduate_x1" size="3" title="Enter starting x value between 0.0 and 1.0"/><label>y:</label><input type="text" id="'+id+'_jGraduate_y1" size="3" title="Enter starting y value between 0.0 and 1.0"/></div></div><div class="jGraduate_StopSection"><label class="jGraduate_Form_Heading">End Point</label><div class="jGraduate_Form_Section"><label>x:</label><input type="text" id="'+id+'_jGraduate_x2" size="3" title="Enter ending x value between 0.0 and 1.0"/><label>y:</label><input type="text" id="'+id+'_jGraduate_y2" size="3" title="Enter ending y value between 0.0 and 1.0"/></div></div></div><div class="jGraduate_Form jGraduate_Points jGraduate_rg_field"><div class="jGraduate_StopSection"><label class="jGraduate_Form_Heading">Center Point</label><div class="jGraduate_Form_Section"><label>x:</label><input type="text" id="'+id+'_jGraduate_cx" size="3" title="Enter x value between 0.0 and 1.0"/><label>y:</label><input type="text" id="'+id+'_jGraduate_cy" size="3" title="Enter y value between 0.0 and 1.0"/></div></div><div class="jGraduate_StopSection"><label class="jGraduate_Form_Heading">Focal Point</label><div class="jGraduate_Form_Section"><label>Match center: <input type="checkbox" checked="checked" id="'+id+'_jGraduate_match_ctr"/></label><br/><label>x:</label><input type="text" id="'+id+'_jGraduate_fx" size="3" title="Enter x value between 0.0 and 1.0"/><label>y:</label><input type="text" id="'+id+'_jGraduate_fy" size="3" title="Enter y value between 0.0 and 1.0"/></div></div></div><div class="jGraduate_StopSection jGraduate_SpreadMethod"><label class="jGraduate_Form_Heading">Spread method</label><div class="jGraduate_Form_Section"><select class="jGraduate_spreadMethod"><option value=pad selected>Pad</option><option value=reflect>Reflect</option><option value=repeat>Repeat</option></select></div></div><div class="jGraduate_Form"><div class="jGraduate_Slider jGraduate_RadiusField jGraduate_rg_field"><label class="prelabel">Radius:</label><div id="'+id+'_jGraduate_Radius" class="jGraduate_SliderBar jGraduate_Radius" title="Click to set radius"><img id="'+id+'_jGraduate_RadiusArrows" class="jGraduate_RadiusArrows" src="'+$settings.images.clientPath+'rangearrows2.gif"></div><label><input type="text" id="'+id+'_jGraduate_RadiusInput" size="3" value="100"/>%</label></div><div class="jGraduate_Slider jGraduate_EllipField jGraduate_rg_field"><label class="prelabel">Ellip:</label><div id="'+id+'_jGraduate_Ellip" class="jGraduate_SliderBar jGraduate_Ellip" title="Click to set Ellip"><img id="'+id+'_jGraduate_EllipArrows" class="jGraduate_EllipArrows" src="'+$settings.images.clientPath+'rangearrows2.gif"></div><label><input type="text" id="'+id+'_jGraduate_EllipInput" size="3" value="0"/>%</label></div><div class="jGraduate_Slider jGraduate_AngleField jGraduate_rg_field"><label class="prelabel">Angle:</label><div id="'+id+'_jGraduate_Angle" class="jGraduate_SliderBar jGraduate_Angle" title="Click to set Angle"><img id="'+id+'_jGraduate_AngleArrows" class="jGraduate_AngleArrows" src="'+$settings.images.clientPath+'rangearrows2.gif"></div><label><input type="text" id="'+id+'_jGraduate_AngleInput" size="3" value="0"/>deg</label></div><div class="jGraduate_Slider jGraduate_OpacField"><label class="prelabel">Opac:</label><div id="'+id+'_jGraduate_Opac" class="jGraduate_SliderBar jGraduate_Opac" title="Click to set Opac"><img id="'+id+'_jGraduate_OpacArrows" class="jGraduate_OpacArrows" src="'+$settings.images.clientPath+'rangearrows2.gif"></div><label><input type="text" id="'+id+'_jGraduate_OpacInput" size="3" value="100"/>%</label></div></div><div class="jGraduate_OkCancel"><input type="button" id="'+id+'_jGraduate_Ok" class="jGraduate_Ok" value="OK"/><input type="button" id="'+id+'_jGraduate_Cancel" class="jGraduate_Cancel" value="Cancel"/></div>');var curType,curGradient,MAX=256,SIZEX=MAX-0,SIZEY=MAX-0,attrInput={};$(".jGraduate_SliderBar").width(145);var container=$("#"+id+"_jGraduate_GradContainer")[0],svg=mkElem("svg",{id:id+"_jgraduate_svg",width:MAX,height:MAX,xmlns:ns.svg},container);curType=curType||$this.paint.type;var grad=curGradient=$this.paint[curType],gradalpha=$this.paint.alpha,isSolid="solidColor"===curType;switch(curType){case"solidColor":case"linearGradient":if(isSolid||(curGradient.id=id+"_lg_jgraduate_grad",grad=curGradient=svg.appendChild(curGradient)),mkElem("radialGradient",{id:id+"_rg_jgraduate_grad"},svg),"linearGradient"===curType)break;case"radialGradient":isSolid||(curGradient.id=id+"_rg_jgraduate_grad",grad=curGradient=svg.appendChild(curGradient)),mkElem("linearGradient",{id:id+"_lg_jgraduate_grad"},svg)}if(isSolid){grad=curGradient=$("#"+id+"_lg_jgraduate_grad")[0],mkStop(0,"#"+(color=$this.paint[curType]),1);var type=typeof $settings.newstop;if("string"===type)switch($settings.newstop){case"same":mkStop(1,"#"+color,1);break;case"inverse":for(var inverted="",i=0;i<6;i+=2){var inv=(255-parseInt(color.substr(i,2),16)).toString(16);inv.length<2&&(inv=0+inv),inverted+=inv}mkStop(1,"#"+inverted,1);break;case"white":mkStop(1,"#ffffff",1);break;case"black":mkStop(1,"#000000",1)}else if("object"===type){var opac="opac"in $settings.newstop?$settings.newstop.opac:1;mkStop(1,$settings.newstop.color||"#"+color,opac)}}var x1=parseFloat(grad.getAttribute("x1")||0),y1=parseFloat(grad.getAttribute("y1")||0),x2=parseFloat(grad.getAttribute("x2")||1),y2=parseFloat(grad.getAttribute("y2")||0),cx=parseFloat(grad.getAttribute("cx")||.5),cy=parseFloat(grad.getAttribute("cy")||.5),fx=parseFloat(grad.getAttribute("fx")||cx),fy=parseFloat(grad.getAttribute("fy")||cy),previewRect=mkElem("rect",{id:id+"_jgraduate_rect",x:0,y:0,width:SIZEX,height:SIZEY,fill:"url(#"+id+"_jgraduate_grad)","fill-opacity":gradalpha/100},svg),beginCoord=$("<div/>").attr({class:"grad_coord jGraduate_lg_field",title:"Begin Stop"}).text(1).css({top:y1*MAX,left:x1*MAX}).data("coord","start").appendTo(container),endCoord=beginCoord.clone().text(2).css({top:y2*MAX,left:x2*MAX}).attr("title","End stop").data("coord","end").appendTo(container),centerCoord=$("<div/>").attr({class:"grad_coord jGraduate_rg_field",title:"Center stop"}).text("C").css({top:cy*MAX,left:cx*MAX}).data("coord","center").appendTo(container),focusCoord=centerCoord.clone().text("F").css({top:fy*MAX,left:fx*MAX,display:"none"}).attr("title","Focus point").data("coord","focus").appendTo(container);focusCoord[0].id=id+"_jGraduate_focusCoord",$.each(["x1","y1","x2","y2","cx","cy","fx","fy"],function(i,attr){var attrval=curGradient.getAttribute(attr),isRadial=isNaN(attr[1]);attrval||(attrval=isRadial?"0.5":"x2"===attr?"1.0":"0.0"),attrInput[attr]=$("#"+id+"_jGraduate_"+attr).val(attrval).change(function(){if(isNaN(parseFloat(this.value))||this.value<0?this.value=0:this.value>1&&(this.value=1),("f"!==attr[0]||showFocus)&&(isRadial&&"radialGradient"===curType||!isRadial&&"linearGradient"===curType)&&curGradient.setAttribute(attr,this.value),isRadial)var $elem="c"===attr[0]?centerCoord:focusCoord;else $elem="1"===attr[1]?beginCoord:endCoord;var cssName=attr.indexOf("x")>=0?"left":"top";$elem.css(cssName,this.value*MAX)}).change()});var curStop,stopGroup,stopMakerSVG,drag,stopOffset,stopMakerDiv=$("#"+id+"_jGraduate_StopSlider"),delStop=mkElem("path",{d:"m9.75,-6l-19.5,19.5m0,-19.5l19.5,19.5",fill:"none",stroke:"#D00","stroke-width":5,display:"none"},stopMakerSVG),scaleX=1,scaleY=1,angle=0,cX=cx,cY=cy,transImg=mkElem("image",{width:16,height:16},mkElem("pattern",{width:16,height:16,patternUnits:"userSpaceOnUse",id:"jGraduate_trans"},stopMakerSVG=mkElem("svg",{width:"100%",height:45},stopMakerDiv[0]))),bgImage=$settings.images.clientPath+"map-opacity.png";transImg.setAttributeNS(ns.xlink,"xlink:href",bgImage),$(stopMakerSVG).click(function(evt){if(stopOffset=stopMakerDiv.offset(),"path"!==evt.target.tagName){var x=evt.pageX-stopOffset.left-8;mkStop((x=x<10?10:x>MAX+10?MAX+10:x)/MAX,0,0,!0),evt.stopPropagation()}}),$(stopMakerSVG).mouseover(function(){stopMakerSVG.appendChild(delStop)}),stopGroup=mkElem("g",{},stopMakerSVG),mkElem("line",{x1:10,y1:15,x2:MAX+10,y2:15,"stroke-width":2,stroke:"#000"},stopMakerSVG);var offset,spreadMethodOpt=gradPicker.find(".jGraduate_spreadMethod").change(function(){curGradient.setAttribute("spreadMethod",$(this).val())}),draggingCoord=null,onCoordDrag=function(evt){var x=evt.pageX-offset.left,y=evt.pageY-offset.top;x=x<0?0:x>MAX?MAX:x,y=y<0?0:y>MAX?MAX:y,draggingCoord.css("left",x).css("top",y);var fracx=x/SIZEX,fracy=y/SIZEY,type=draggingCoord.data("coord"),grad=curGradient;switch(type){case"start":attrInput.x1.val(fracx),attrInput.y1.val(fracy),grad.setAttribute("x1",fracx),grad.setAttribute("y1",fracy);break;case"end":attrInput.x2.val(fracx),attrInput.y2.val(fracy),grad.setAttribute("x2",fracx),grad.setAttribute("y2",fracy);break;case"center":attrInput.cx.val(fracx),attrInput.cy.val(fracy),grad.setAttribute("cx",fracx),grad.setAttribute("cy",fracy),cX=fracx,cY=fracy,xform();break;case"focus":attrInput.fx.val(fracx),attrInput.fy.val(fracy),grad.setAttribute("fx",fracx),grad.setAttribute("fy",fracy),xform()}evt.preventDefault()},onCoordUp=function(){draggingCoord=null,$win.unbind("mousemove",onCoordDrag).unbind("mouseup",onCoordUp)};if((numstops=(stops=curGradient.getElementsByTagNameNS(ns.svg,"stop")).length)<2){for(;numstops<2;)curGradient.appendChild(document.createElementNS(ns.svg,"stop")),++numstops;stops=curGradient.getElementsByTagNameNS(ns.svg,"stop")}for(i=0;i<numstops;i++)mkStop(0,0,0,0,stops[i]);spreadMethodOpt.val(curGradient.getAttribute("spreadMethod")||"pad");var lastfx,lastfy,stops,numstops,slider,showFocus=!1;if(previewRect.setAttribute("fill-opacity",gradalpha/100),$("#"+id+" div.grad_coord").mousedown(function(evt){evt.preventDefault(),draggingCoord=$(this),offset=draggingCoord.parent().offset(),$win.mousemove(onCoordDrag).mouseup(onCoordUp)}),$("#"+id+"_jGraduate_Ok").bind("click",function(){$this.paint.type=curType,$this.paint[curType]=curGradient.cloneNode(!0),$this.paint.solidColor=null,okClicked()}),$("#"+id+"_jGraduate_Cancel").bind("click",function(paint){cancelClicked()}),"radialGradient"===curType&&(showFocus?focusCoord.show():(focusCoord.hide(),attrInput.fx.val(""),attrInput.fy.val(""))),$("#"+id+"_jGraduate_match_ctr")[0].checked=!showFocus,$("#"+id+"_jGraduate_match_ctr").change(function(){showFocus=!this.checked,focusCoord.toggle(showFocus),attrInput.fx.val(""),attrInput.fy.val("");var grad=curGradient;if(showFocus){var fx=lastfx||.5,fy=lastfy||.5;grad.setAttribute("fx",fx),grad.setAttribute("fy",fy),attrInput.fx.val(fx),attrInput.fy.val(fy)}else lastfx=grad.getAttribute("fx"),lastfy=grad.getAttribute("fy"),grad.removeAttribute("fx"),grad.removeAttribute("fy")}),(numstops=(stops=curGradient.getElementsByTagNameNS(ns.svg,"stop")).length)<2){for(;numstops<2;)curGradient.appendChild(document.createElementNS(ns.svg,"stop")),++numstops;stops=curGradient.getElementsByTagNameNS(ns.svg,"stop")}var ellipVal=0,angleVal=0;if("radialGradient"===curType){var tlist=curGradient.gradientTransform.baseVal;if(2===tlist.numberOfItems){var t=tlist.getItem(0),s=tlist.getItem(1);if(2===t.type&&3===s.type)1!==(m=s.matrix).a?ellipVal=Math.round(100*-(1-m.a)):1!==m.d&&(ellipVal=Math.round(100*(1-m.d)))}else if(3===tlist.numberOfItems){var m,r=tlist.getItem(0);t=tlist.getItem(1),s=tlist.getItem(2);if(4===r.type&&2===t.type&&3===s.type)angleVal=Math.round(r.angle),1!==(m=s.matrix).a?ellipVal=Math.round(100*-(1-m.a)):1!==m.d&&(ellipVal=Math.round(100*(1-m.d)))}}var sliders={radius:{handle:"#"+id+"_jGraduate_RadiusArrows",input:"#"+id+"_jGraduate_RadiusInput",val:100*(curGradient.getAttribute("r")||.5)},opacity:{handle:"#"+id+"_jGraduate_OpacArrows",input:"#"+id+"_jGraduate_OpacInput",val:$this.paint.alpha||100},ellip:{handle:"#"+id+"_jGraduate_EllipArrows",input:"#"+id+"_jGraduate_EllipInput",val:ellipVal},angle:{handle:"#"+id+"_jGraduate_AngleArrows",input:"#"+id+"_jGraduate_AngleInput",val:angleVal}};$.each(sliders,function(type,data){var handle=$(data.handle);handle.mousedown(function(evt){var parent=handle.parent();slider={type:type,elem:handle,input:$(data.input),parent:parent,offset:parent.offset()},$win.mousemove(dragSlider).mouseup(stopSlider),evt.preventDefault()}),$(data.input).val(data.val).change(function(){var val=+this.value,xpos=0,isRad="radialGradient"===curType;switch(type){case"radius":isRad&&curGradient.setAttribute("r",val/100),xpos=Math.pow(val/100,.4)/2*145;break;case"opacity":$this.paint.alpha=val,previewRect.setAttribute("fill-opacity",val/100),xpos=1.45*val;break;case"ellip":if(scaleX=scaleY=1,0===val){xpos=72.5;break}val>99.5&&(val=99.5),val>0?scaleY=1-val/100:scaleX=-val/100-1,xpos=(val+100)/2*145/100,isRad&&xform();break;case"angle":xpos=(angle=val)/180,xpos+=.5,xpos*=145,isRad&&xform()}xpos>145?xpos=145:xpos<0&&(xpos=0),handle.css({"margin-left":xpos-5})}).change()});for(var dragSlider=function(evt){!function(e){var offset=slider.offset,div=slider.parent,x=e.pageX-offset.left-parseInt(div.css("border-left-width"));x>145&&(x=145),x<=0&&(x=0);var posx=x-5;switch(x/=145,slider.type){case"radius":(x=Math.pow(2*x,2.5))>.98&&x<1.02&&(x=1),x<=.01&&(x=.01),curGradient.setAttribute("r",x);break;case"opacity":$this.paint.alpha=parseInt(100*x),previewRect.setAttribute("fill-opacity",x);break;case"ellip":scaleX=1,scaleY=1,x<.5?scaleX=(x/=.5)<=0?.01:x:x>.5&&(scaleY=(x=2-(x/=.5))<=0?.01:x),xform(),scaleY===1+(x-=1)&&(x=Math.abs(x));break;case"angle":x-=.5,angle=x*=180,xform(),x/=100}slider.elem.css({"margin-left":posx}),x=Math.round(100*x),slider.input.val(x)}(evt),evt.preventDefault()},stopSlider=function(evt){$win.unbind("mousemove",dragSlider).unbind("mouseup",stopSlider),slider=null},thisAlpha=(255*$this.paint.alpha/100).toString(16);thisAlpha.length<2;)thisAlpha="0"+thisAlpha;thisAlpha=thisAlpha.split(".")[0],color="none"===$this.paint.solidColor?"":$this.paint.solidColor+thisAlpha,isSolid||(color=stops[0].getAttribute("stop-color")),$.extend($.fn.jPicker.defaults.window,{alphaSupport:!0,effects:{type:"show",speed:0}}),colPicker.jPicker({window:{title:$settings.window.pickerTitle},images:{clientPath:$settings.images.clientPath},color:{active:color,alphaSupport:!0}},function(color){$this.paint.type="solidColor",$this.paint.alpha=color.val("ahex")?Math.round(color.val("a")/255*100):100,$this.paint.solidColor=color.val("hex")?color.val("hex"):"none",$this.paint.radialGradient=null,okClicked()},null,function(){cancelClicked()});var tab,tabs=$(idref+" .jGraduate_tabs li");switch(tabs.click(function(){tabs.removeClass("jGraduate_tab_current"),$(this).addClass("jGraduate_tab_current"),$(idref+" > div").hide();var type=$(this).attr("data-type");if($(idref+" .jGraduate_gradPick").show(),"rg"===type||"lg"===type){$(".jGraduate_"+type+"_field").show(),$(".jGraduate_"+("lg"===type?"rg":"lg")+"_field").hide(),$("#"+id+"_jgraduate_rect")[0].setAttribute("fill","url(#"+id+"_"+type+"_jgraduate_grad)"),curType="lg"===type?"linearGradient":"radialGradient",$("#"+id+"_jGraduate_OpacInput").val($this.paint.alpha).change();var newGrad=$("#"+id+"_"+type+"_jgraduate_grad")[0];if(curGradient!==newGrad){var curStops=$(curGradient).find("stop");$(newGrad).empty().append(curStops),curGradient=newGrad;var sm=spreadMethodOpt.val();curGradient.setAttribute("spreadMethod",sm)}showFocus="rg"===type&&null!=curGradient.getAttribute("fx")&&!(cx===fx&&cy===fy),$("#"+id+"_jGraduate_focusCoord").toggle(showFocus),showFocus&&($("#"+id+"_jGraduate_match_ctr")[0].checked=!1)}else $(idref+" .jGraduate_gradPick").hide(),$(idref+" .jGraduate_colPick").show()}),$(idref+" > div").hide(),tabs.removeClass("jGraduate_tab_current"),$this.paint.type){case"linearGradient":tab=$(idref+" .jGraduate_tab_lingrad");break;case"radialGradient":tab=$(idref+" .jGraduate_tab_radgrad");break;default:tab=$(idref+" .jGraduate_tab_color")}$this.show(),setTimeout(function(){tab.addClass("jGraduate_tab_current").click()},10)}else alert("Container element must have an id attribute to maintain unique id strings for sub-elements.");function mkStop(n,color,opac,sel,stopElem){var stop=stopElem||mkElem("stop",{"stop-color":color,"stop-opacity":opac,offset:n},curGradient);stopElem?(color=stopElem.getAttribute("stop-color"),opac=stopElem.getAttribute("stop-opacity"),n=stopElem.getAttribute("offset")):curGradient.appendChild(stop),null===opac&&(opac=1);var pickerD="M-6.2,0.9c3.6-4,6.7-4.3,6.7-12.4c-0.2,7.9,3.1,8.8,6.5,12.4c3.5,3.8,2.9,9.6,0,12.3c-3.1,2.8-10.4,2.7-13.2,0C-9.6,9.9-9.4,4.4-6.2,0.9z",pathbg=mkElem("path",{d:pickerD,fill:"url(#jGraduate_trans)",transform:"translate("+(10+n*MAX)+", 26)"},stopGroup),path=mkElem("path",{d:pickerD,fill:color,"fill-opacity":opac,transform:"translate("+(10+n*MAX)+", 26)",stroke:"#000","stroke-width":1.5},stopGroup);return $(path).mousedown(function(e){return selectStop(this),drag=curStop,$win.mousemove(dragColor).mouseup(remDrags),stopOffset=stopMakerDiv.offset(),e.preventDefault(),!1}).data("stop",stop).data("bg",pathbg).dblclick(function(){$("div.jGraduate_LightBox").show();for(var colorhandle=this,stopOpacity=+stop.getAttribute("stop-opacity")||1,stopColor=stop.getAttribute("stop-color")||1,thisAlpha=(255*parseFloat(stopOpacity)).toString(16);thisAlpha.length<2;)thisAlpha="0"+thisAlpha;color=stopColor.substr(1)+thisAlpha,$("#"+id+"_jGraduate_stopPicker").css({left:100,bottom:15}).jPicker({window:{title:"Pick the start color and opacity for the gradient"},images:{clientPath:$settings.images.clientPath},color:{active:color,alphaSupport:!0}},function(color,arg2){stopColor=color.val("hex")?"#"+color.val("hex"):"none",stopOpacity=null!==color.val("a")?color.val("a")/256:1,colorhandle.setAttribute("fill",stopColor),colorhandle.setAttribute("fill-opacity",stopOpacity),stop.setAttribute("stop-color",stopColor),stop.setAttribute("stop-opacity",stopOpacity),$("div.jGraduate_LightBox").hide(),$("#"+id+"_jGraduate_stopPicker").hide()},null,function(){$("div.jGraduate_LightBox").hide(),$("#"+id+"_jGraduate_stopPicker").hide()})}),$(curGradient).find("stop").each(function(){var curS=$(this);if(+this.getAttribute("offset")>n){if(!color){var newcolor=this.getAttribute("stop-color"),newopac=this.getAttribute("stop-opacity");stop.setAttribute("stop-color",newcolor),path.setAttribute("fill",newcolor),stop.setAttribute("stop-opacity",null===newopac?1:newopac),path.setAttribute("fill-opacity",null===newopac?1:newopac)}return curS.before(stop),!1}}),sel&&selectStop(path),stop}function selectStop(item){curStop&&curStop.setAttribute("stroke","#000"),item.setAttribute("stroke","blue"),(curStop=item).parentNode.appendChild(curStop)}function remDrags(){$win.unbind("mousemove",dragColor),"none"!==delStop.getAttribute("display")&&function(){delStop.setAttribute("display","none");var path=$(curStop),stop=path.data("stop"),bg=path.data("bg");$([curStop,stop,bg]).remove()}(),drag=null}function xform(){var rot=angle?"rotate("+angle+","+cX+","+cY+") ":"";if(1===scaleX&&1===scaleY)curGradient.removeAttribute("gradientTransform");else{var x=-cX*(scaleX-1),y=-cY*(scaleY-1);curGradient.setAttribute("gradientTransform",rot+"translate("+x+","+y+") scale("+scaleX+","+scaleY+")")}}function dragColor(evt){var x=evt.pageX-stopOffset.left,y=evt.pageY-stopOffset.top,xfStr="translate("+(x=x<10?10:x>MAX+10?MAX+10:x)+", 26)";y<-60||y>130?(delStop.setAttribute("display","block"),delStop.setAttribute("transform",xfStr)):delStop.setAttribute("display","none"),drag.setAttribute("transform",xfStr),$.data(drag,"bg").setAttribute("transform",xfStr);var stop=$.data(drag,"stop"),sX=(x-10)/MAX;stop.setAttribute("offset",sX);var last=0;$(curGradient).find("stop").each(function(i){var cur=this.getAttribute("offset"),t=$(this);cur<last&&(t.prev().before(t),stops=$(curGradient).find("stop")),last=cur})}})}}();