-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSvgFactoryJS.min.js
1 lines (1 loc) · 7.25 KB
/
SvgFactoryJS.min.js
1
function SvgFactory(a){this.err="SvgFactoryJS.js";this.unitTypesArray=["","","%","em","ex","px","cm","mm","in","pt","pc"];this.loadedSvgs=[];this.loadersLoading=[];if(a!=null){this.setUnitType(a)}else{this.unitType="px"}}function SvgFactoryImage(d,g,b,e,f,a,c){this.element=d;this.fills=g;this.strokes=b;this.url=e;this.id=d.id;this.width=f;this.height=a;this.factory=c;c.loadedSvgs.push(this)}SvgFactory.prototype.load=function(i,b,d,a,g,e,c,j,h,f){if(window.XMLHttpRequest){if(i==null){var k=["Destination is null.",[this.err]];throw new Error([k]);return}else{if((b==null)||(b=="")){var k=["URL is null or empty.",[this.err]];throw new Error([k]);return}else{if(!this.checkIfSvg(b)){var k=["URL does not point to an SVG file.",[this.err]];throw new Error([k]);return}}}this.loadXHR(i,b,d,a,g,e,c,j,h,f)}else{var k=["Browser does not support SvgFactoryJS.",[this.err]];throw new Error([k]);return}};SvgFactory.prototype.loadXHR=function(j,b,d,a,g,e,c,k,i,f){if((g!=null)&&(g)){j.style.visibility="hidden"}var h=new XMLHttpRequest();var l=this;h.onreadystatechange=function(){if(this.readyState==4&&this.status==200){if(j==null){return}j.innerHTML+=h.responseText;var p=j.getElementsByTagName("svg");var m=p[p.length-1];var n=l.loadRef(m);n.setFills(i);n.setStrokes(f);n.setSize(c,k);n.setId(e);n.url=b;if((g!=null)&&(g)){j.style.visibility="visible"}if((d!=null)&&(d.constructor===Function)){d(n)}}else{if(this.readyState==4&&this.status!=200&&this.status!=0){var o=['Could not load SVG from the URL "'+b+'". Recieved status code: '+this.status,[l.err]];throw new Error([o]);return}}};h.open("GET",b,true);if((a!=null)&&(a==false)){h.setRequestHeader("cache-control","no-cache, must-revalidate, post-check=0, pre-check=0");h.setRequestHeader("cache-control","max-age=0");h.setRequestHeader("expires","0");h.setRequestHeader("expires","Tue, 01 Jan 1980 1:00:00 GMT");h.setRequestHeader("pragma","no-cache")}h.send()};SvgFactory.prototype.loadRef=function(e){var g=null;var b=null;var f=this.getSvgElements(e);if(f.length==1){g=[this.getFillOf(f[0])];b=[];if(f[0].tagName.toLowerCase()=="path"){b=[[f[0].style.stroke,f[0].style.strokeOpacity,f[0].style.strokeMiterlimit,f[0].style.strokeDasharray,f[0].style.strokeLinejoin]]}}else{if(f.length>1){g=[];b=[];for(var c=0;c<f.length;c++){g.push(this.getFillOf(f[c]));if(f[c].tagName.toLowerCase()=="path"){b.push([[f[c].style.stroke,f[c].style.strokeOpacity,f[c].style.strokeMiterlimit,f[c].style.strokeDasharray,f[0].style.strokeLinejoin]])}}}}if(!e.hasAttribute("viewBox")){e.setAttribute("viewBox","0 0 "+e.width.baseVal.value+" "+e.height.baseVal.value+"")}var d=e.width.baseVal.value+this.unitTypesArray[e.width.baseVal.unitType];var a=e.height.baseVal.value+this.unitTypesArray[e.height.baseVal.unitType];return new SvgFactoryImage(e,g,b,null,d,a,this)};SvgFactory.prototype.getSvgElements=function(c){var b=[c.getElementsByTagName("path"),c.getElementsByTagName("ellipse"),c.getElementsByTagName("text"),c.getElementsByTagName("rect"),c.getElementsByTagName("circle"),c.getElementsByTagName("line"),c.getElementsByTagName("polygon"),c.getElementsByTagName("polyline")];var d=[];for(var a=0;a<b.length;a++){for(var e=0;e<b[a].length;e++){d.push(b[a][e])}}return d};SvgFactory.prototype.getFillOf=function(a){if(a.hasAttribute("style")){return[a.style.fill,a.style.fillOpacity]}else{return[a.getAttribute("fill"),1]}};SvgFactory.prototype.get=function(c){if(c==null){var b=["SVG reference is null.",[this.err]];throw new Error([b]);return null}if(c.constructor===String){for(var a=0;a<this.loadedSvgs.length;a++){if(this.loadedSvgs[a].id==c){return this.loadedSvgs[a]}}}else{if(c instanceof SVGElement){if(this.loadedSvgs.length>0){for(var a=0;a<this.loadedSvgs.length;a++){if(this.loadedSvgs[a].element==c){return this.loadedSvgs[a]}else{if(a==this.loadedSvgs.length-1){return this.loadRef(c)}}}}else{return this.loadRef(c)}}}return null};SvgFactory.prototype.setUnitType=function(a){if((a=="px")||(a=="%")||(a=="em")||(a=="ex")||(a=="cm")||(a=="mm")||(a=="in")||(a=="pt")||(a=="pc")){this.unitType=a}else{var b=['Unsupported unit type: "'+a+'"',[this.err]];throw new Error([b])}};SvgFactory.prototype.setFillOf=function(a,b){if(a.hasAttribute("style")){if(b[0]!=null){a.style.fill=b[0]}if(b[1]!=null){a.style.fillOpacity=b[1]}}else{if(b[0]!=null){a.setAttribute("fill",b[0])}if(b[1]!=null){a.setAttribute("fill-opacity",b[1])}}};SvgFactory.prototype.setStrokeOf=function(a,b){if(a.hasAttribute("style")){if(b[0]!=null){a.style.stroke=b[0]}if(b[1]!=null){a.style.strokeOpacity=b[1]}if(b[2]!=null){a.style.strokeWidth=b[2]}if(b[3]!=null){a.style.strokeMiterlimit=b[3]}if(b[4]!=null){a.style.strokeDasharray=b[4]}if(b[5]!=null){a.style.strokeLinecap=b[5]}if(b[6]!=null){a.style.strokeLinejoin=b[6]}}else{if(b[0]!=null){a.setAttribute("stroke",b[0])}if(b[1]!=null){a.setAttribute("stroke-opacity",b[1])}if(b[2]!=null){a.setAttribute("stroke-width",b[2])}if(b[3]!=null){a.setAttribute("stroke-miterlimit",b[3])}if(b[4]!=null){a.setAttribute("stroke-dasharray",b[4])}if(b[5]!=null){a.setAttribute("stroke-linecap",b[5])}if(b[6]!=null){a.setAttribute("stroke-linejoin",b[6])}}};SvgFactoryImage.prototype.getElementById=function(b){elements=this.factory.getSvgElements(this.element);for(var a=0;a<elements.length;a++){if(elements[a].id==b){return elements[a]}}return null};SvgFactoryImage.prototype.setSize=function(b,a){if(b!=null){if(b.constructor===String){this.element.setAttribute("width",b);this.width=b}else{this.element.setAttribute("width",b+this.factory.unitType);this.width=b+this.factory.unitType}}if(a!=null){if(a.constructor===String){this.element.setAttribute("height",a);this.height=a}else{this.element.setAttribute("height",a+this.factory.unitType);this.height=a+this.factory.unitType}}};SvgFactoryImage.prototype.setWidth=function(a){if(a!=null){if(a.constructor===String){this.element.setAttribute("width",a);this.width=a}else{this.element.setAttribute("width",a+this.factory.unitType);this.width=a+this.factory.unitType}}};SvgFactoryImage.prototype.setHeight=function(a){if(a!=null){if(a.constructor===String){this.element.setAttribute("height",a);this.height=a}else{this.element.setAttribute("height",a+this.factory.unitType);this.height=a+this.factory.unitType}}};SvgFactoryImage.prototype.setFills=function(e){if(e!=null){if(e.constructor===String){e=[[e]]}var c=this.factory.getSvgElements(this.element);var b=false;var d=1;if(e.length<c.length){b=true}for(var a=0;a<c.length;a++){if(b){this.factory.setFillOf(c[a],e[d-1]);if(d==e.length){d=1}else{d++}}else{this.factory.setFillOf(c[a],e[a])}}this.fills=e}};SvgFactoryImage.prototype.setStrokes=function(a){if(a!=null){if(a.constructor===String){a=[[a]]}var e=this.factory.getSvgElements(this.element);var d=false;var c=1;if(a.length<e.length){d=true}for(var b=0;b<e.length;b++){if(d){this.factory.setStrokeOf(e[b],a[c-1]);if(c==a.length){c=1}else{c++}}else{this.factory.setStrokeOf(e[b],a[b])}}this.strokes=a}};SvgFactoryImage.prototype.setId=function(a){if(a!=null){this.element.id=a;this.id=a}};SvgFactory.prototype.checkIfSvg=function(a){var c=a.split("/");var b=c[c.length-1].split(".");return(b[b.length-1].toLowerCase()=="svg")};SvgFactoryImage.prototype.remove=function(){this.element.parentNode.removeChild(this.element);for(var b=0;b<this.factory.loadedSvgs.length;b++){if(this.id==this.factory.loadedSvgs[b].id){var a=this.factory.loadedSvgs[b];a=null;this.factory.loadedSvgs.splice(b,1)}}};