@filbert-js/css-ast
Version:
> CSS to AST transformer for filbert-js.
2 lines (1 loc) • 1.42 kB
JavaScript
!function(r,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(r.cssAst={})}(this,function(r){var t=";",e=":";function n(r){var t=r.children;void 0===t&&(t=[]);var e=r.rules;void 0===e&&(e=[]);var n=r.start;void 0===n&&(n=-1);var i=r.end;void 0===i&&(i=-1);var a=r.raw,s=r.parent;this.children=t,this.rules=e,this.start=n,this.end=i,this.raw=a,this.raw_selector=void 0,this.parent=s}var i=/(url\(|"|').*?(\)|"|')/g;function a(r,n){var a,s,o="$_"+Date.now(),d=r.raw;r.children.forEach(function(r,e){var i=n.substring(r.start,r.end+1);d=d.replace(i,""+o+e+t)}),a=function(r){for(var t,e={},n=0;null!==(t=i.exec(r));){var a="_"+ ++n+"_",s=t[0];r=r.replace(s,a),e[a]=s.toString()}return[r,e]}(d),s=a[1];var u=(d=a[0]).split(t).reduce(function(n,i){if(!i.trim())return n;if(-1===i.indexOf(o)){var a=i.split(e),u=a[0],c=a[1];u=u.trim(),c=c.trim(),n.push({name:u.trim(),value:void 0!==s[c]?s[c]:c})}else{var f=i.split(o);r.children[f[1]].raw_selector=f[0].trim(),d=d.replace(""+i+t,"")}return n},[]);r.rules=u}r.CLOSE_BRACKET="}",r.OPEN_BRACKET="{",r.RULE_END=t,r.RULE_SEPARATOR=e,r.toAST=function(r){for(var t=new n({start:0,end:r.length-1,raw:r}),e=t,i=0;i<r.length;i++){if("{"===r[i]){var s=new n({start:i,parent:e});e.children.push(s),e=s}if("}"===r[i]){var o=e;o.end=i,o.raw=r.substring(o.start+1,o.end),e=o.parent,a(o,r)}}return a(e,r),t}});