-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathsvg.wiml.min.js
2 lines (2 loc) · 3.42 KB
/
svg.wiml.min.js
1
2
// svg.wiml.js 0.1.1 - Copyright (c) 2014 Wout Fierens - Licensed under the MIT license
;(function(){function e(e,t,n){return e.indexOf(t)>-1&&n!=""&&n!=null}SVG.WIML=SVG.invent({create:function(e){this.target=e;this.content="";this.data={variables:{},defaults:{}}},extend:{text:function(e){if(e==null)return this.content;this.content=e;return this},fields:function(){var e,t,n=[],r=this.content.match(SVG.regex.wiml.all);if(r)for(t=0;t<r.length;t++)if(e=r[t].match(SVG.regex.wiml.single))n.push(e[2]);return n},variables:function(e,t){if(e==null)return this.data.variables;if(typeof e==="string")return this.data.variables[e]||(t===false?this.data.variables[e]:this.data.defaults[e]);if(typeof e==="object"){for(var n in e)this.data.variables[n]=e[n]}return this},defaults:function(e){if(arguments.length==0)return this.data.defaults;if(typeof e==="string")return this.data.defaults[e];if(typeof e==="object")this.data.defaults=e;return this},iterate:function(e){if(typeof e==="function")this.iterator=e;return this},render:function(t,n){if(t)this.variables(t);this.data.errors=[];var r,i,s,o,u,a,f,l,c,h,p,d,v,m=this.content,t=Object.keys(this.variables()),g=this.fields(),y=m.match(SVG.regex.wiml.variables),b=this;if(y){y.forEach(function(e){o=e.match(SVG.regex.wiml.variable);m=m.replace(new RegExp(e,"g"),(b.variables(o[1],n)||" ")+"%")})}m=m.replace(/%%%/g,"<wiml:percent>");this.target.text(function(g){m.split("\n").forEach(function(m){v=[];if(o=m.match(SVG.regex.wiml.statics))o.forEach(function(e){m=m.replace(e,"<wiml:tspan>"+e+"<wiml:tspan>")});d=m.split("<wiml:tspan>");for(r=0,i=d.length;r<i;r++){if(d[r]!=""){u={attr:{},wrap:false,render:true};if(o=d[r].match(SVG.regex.wiml.instance)){u.text=o[3].replace(/<wiml:percent>/g,"%");if(o[2]){o[2].match(SVG.regex.wiml.attributes).forEach(function(e){if(e&&e!=""){e=e.replace(";","").split(":");u.attr[e[0]]=e[1]}});a=u.attr.if||u.attr.unless;if(a!=null){if(SVG.regex.wiml.matchAny.test(a)){u.render=false;f=a.split(",");for(s=f.length-1;s>=0;s--){l=f[s].replace(SVG.regex.wiml.negative,"");c=SVG.regex.wiml.negative.test(f[s]);h=e(t,l,b.variables(l,n));if(!c&&h||c&&!h)u.render=true}}else if(SVG.regex.wiml.matchAll.test(a)){f=a.split("+");for(s=f.length-1;s>=0;s--){l=f[s].replace(SVG.regex.wiml.negative,"");c=SVG.regex.wiml.negative.test(f[s]);h=e(t,l,b.variables(l,n));if(c&&h||!c&&!h)u.render=false}}else{p=b.variables(a,n);u.render=e(t,a,p)}if(a==u.attr.unless)u.render=!u.render}delete u.attr.if;delete u.attr.unless;u.wrap=Object.keys(u.attr).length>0}}else{u.text=d[r]}v.push(u)}}g.tspan(function(e){v.forEach(function(t,n){if(b.iterator)b.iterator.call();if(t.render){if(t.wrap===true)s=e.tspan(t.text).attr(t.attr);else if(n>0||!SVG.regex.wiml.blank.test(t.text))s=e.plain(t.text)}});if(v.length==0||v.length==1&&this.node.firstChild&&SVG.regex.wiml.blank.test(this.node.firstChild.nodeValue))this.parent.node.removeChild(this.node);else this.newLine()})})});this.target.content=m;return this}},construct:{wiml:function(e,t,n){var r=this.text(" ");r.wiml(e,t,n);return this.put(r)}}});SVG.extend(SVG.Text,{wiml:function(e,t,n){return(this.wimler||(this.wimler=new SVG.WIML(this))).iterate(n).text(e).render(t)}});SVG.regex.wiml={all:/%(\{[^\}]+\})?=?[^%]+%/g,single:/%(\{[^}]+\})?=([^%]+)%/,variables:/=[^%]+%/g,variable:/=([^%\s]+)%/,statics:/%(\{[^\}]+\})?[^%]+%/g,instance:/%(\{([^}]+)\})?([^%]+)%/,attributes:/([^:]+:[^;]+);?/g,blank:/^(\s+?)?$/,negative:/^!/,matchAll:/^[^\+]+\+[^\+]+/,matchAny:/^[^,]+,[^,]+/}}).call(this);