css.js
11 years ago
css.min.js
11 years ago
csslint.js
11 years ago
csslint.min.js
11 years ago
editor.js
11 years ago
editor.min.js
11 years ago
inspector.js
11 years ago
inspector.min.js
11 years ago
jquery.sizes.js
11 years ago
jquery.sizes.min.js
11 years ago
specificity.js
11 years ago
specificity.min.js
11 years ago
css.min.js
79 lines
| 1 | |
| 2 | (function($){'use strict';var fi=function(){this.cssImportStatements=[];this.cssKeyframeStatements=[];this.cssRegex=new RegExp('([\\s\\S]*?){([\\s\\S]*?)}','gi');this.cssMediaQueryRegex='((@media [\\s\\S]*?){([\\s\\S]*?}\\s*?)})';this.cssKeyframeRegex='((@.*?keyframes [\\s\\S]*?){([\\s\\S]*?}\\s*?)})';this.combinedCSSRegex='((\\s*?@media[\\s\\S]*?){([\\s\\S]*?)}\\s*?})|(([\\s\\S]*?){([\\s\\S]*?)})';this.cssCommentsRegex='(\\/\\*[\\s\\S]*?\\*\\/)';this.cssImportStatementRegex=new RegExp('@import .*?;','gi');};fi.prototype.stripComments=function(cssString){var regex=new RegExp(this.cssCommentsRegex,'gi');return cssString.replace(regex,'');};fi.prototype.parseCSS=function(source){if(source===undefined){return[];} |
| 3 | var css=[];while(true){var imports=this.cssImportStatementRegex.exec(source);if(imports!==null){this.cssImportStatements.push(imports[0]);css.push({selector:'@imports',type:'imports',styles:imports[0]});} |
| 4 | else{break;}} |
| 5 | source=source.replace(this.cssImportStatementRegex,'');var keyframesRegex=new RegExp(this.cssKeyframeRegex,'gi');var arr;while(true){arr=keyframesRegex.exec(source);if(arr===null){break;} |
| 6 | css.push({selector:'@keyframes',type:'keyframes',styles:arr[0]});} |
| 7 | source=source.replace(keyframesRegex,'');var unified=new RegExp(this.combinedCSSRegex,'gi');while(true){arr=unified.exec(source);if(arr===null){break;} |
| 8 | var selector='';if(arr[2]===undefined){selector=arr[5].split('\r\n').join('\n').trim();} |
| 9 | else{selector=arr[2].split('\r\n').join('\n').trim();} |
| 10 | var commentsRegex=new RegExp(this.cssCommentsRegex,'gi');var comments=commentsRegex.exec(selector);if(comments!==null){selector=selector.replace(commentsRegex,'').trim();} |
| 11 | selector=selector.replace(/\n+/,"\n");if(selector.indexOf('@media')!==-1){var cssObject={selector:selector,type:'media',subStyles:this.parseCSS(arr[3]+'\n}')};if(comments!==null){cssObject.comments=comments[0];} |
| 12 | css.push(cssObject);} |
| 13 | else{var rules=this.parseRules(arr[6]);var style={selector:selector,rules:rules};if(selector==='@font-face'){style.type='font-face';} |
| 14 | if(comments!==null){style.comments=comments[0];} |
| 15 | css.push(style);}} |
| 16 | return css;};fi.prototype.parseRules=function(rules){rules=rules.split('\r\n').join('\n');var ret=[];rules=rules.split(';');for(var i=0;i<rules.length;i++){var line=rules[i];line=line.trim();if(line.indexOf(':')!==-1){line=line.split(':');var cssDirective=line[0].trim();var cssValue=line.slice(1).join(':').trim();ret.push({directive:cssDirective,value:cssValue});} |
| 17 | else{if(line.trim().substr(0,7)==='base64,'){ret[ret.length-1].value+=line.trim();} |
| 18 | else{if(line.length>0){ret.push({directive:'',value:line,defective:true});}}}} |
| 19 | return ret;};fi.prototype.findCorrespondingRule=function(rules,directive,value){if(value===undefined){value=false;} |
| 20 | var ret=false;for(var i=0;i<rules.length;i++){if(rules[i].directive==directive){ret=rules[i];if(value===rules[i].value){break;}}} |
| 21 | return ret;};fi.prototype.findBySelector=function(cssObjectArray,selector,contains){if(contains===undefined){contains=false;} |
| 22 | var found=[];for(var i=0;i<cssObjectArray.length;i++){if(contains===false){if(cssObjectArray[i].selector===selector){found.push(cssObjectArray[i]);}} |
| 23 | else{if(cssObjectArray[i].selector.indexOf(selector)!==-1){found.push(cssObjectArray[i]);}}} |
| 24 | if(found.length<2){return found;} |
| 25 | else{var base=found[0];for(i=1;i<found.length;i++){this.intelligentCSSPush([base],found[i]);} |
| 26 | return[base];}};fi.prototype.deleteBySelector=function(cssObjectArray,selector){var ret=[];for(var i=0;i<cssObjectArray.length;i++){if(cssObjectArray[i].selector!==selector){ret.push(cssObjectArray[i]);}} |
| 27 | return ret;};fi.prototype.compressCSS=function(cssObjectArray){var compressed=[];var done={};for(var i=0;i<cssObjectArray.length;i++){var obj=cssObjectArray[i];if(done[obj.selector]===true){continue;} |
| 28 | var found=this.findBySelector(cssObjectArray,obj.selector);if(found.length!==0){compressed.push(found[0]);done[obj.selector]=true;}} |
| 29 | return compressed;};fi.prototype.cssDiff=function(css1,css2){if(css1.selector!==css2.selector){return false;} |
| 30 | if((css1.type==='media'||css2.type==='media')){return false;} |
| 31 | var diff={selector:css1.selector,rules:[]};var rule1,rule2;for(var i=0;i<css1.rules.length;i++){rule1=css1.rules[i];rule2=this.findCorrespondingRule(css2.rules,rule1.directive,rule1.value);if(rule2===false){diff.rules.push(rule1);} |
| 32 | else{if(rule1.value!==rule2.value){diff.rules.push(rule1);}}} |
| 33 | for(var ii=0;ii<css2.rules.length;ii++){rule2=css2.rules[ii];rule1=this.findCorrespondingRule(css1.rules,rule2.directive);if(rule1===false){rule2.type='DELETED';diff.rules.push(rule2);}} |
| 34 | if(diff.rules.length===0){return false;} |
| 35 | return diff;};fi.prototype.intelligentMerge=function(cssObjectArray,newArray,reverse){if(reverse===undefined){reverse=false;} |
| 36 | for(var i=0;i<newArray.length;i++){this.intelligentCSSPush(cssObjectArray,newArray[i],reverse);} |
| 37 | for(i=0;i<cssObjectArray.length;i++){var cobj=cssObjectArray[i];if(cobj.type==='media'||(cobj.type==='keyframes')){continue;} |
| 38 | cobj.rules=this.compactRules(cobj.rules);}};fi.prototype.intelligentCSSPush=function(cssObjectArray,minimalObject,reverse){var pushSelector=minimalObject.selector;var cssObject=false;if(reverse===undefined){reverse=false;} |
| 39 | if(reverse===false){for(var i=0;i<cssObjectArray.length;i++){if(cssObjectArray[i].selector===minimalObject.selector){cssObject=cssObjectArray[i];break;}}} |
| 40 | else{for(var j=cssObjectArray.length-1;j>-1;j--){if(cssObjectArray[j].selector===minimalObject.selector){cssObject=cssObjectArray[j];break;}}} |
| 41 | if(cssObject===false){cssObjectArray.push(minimalObject);} |
| 42 | else{if(minimalObject.type!=='media'){for(var ii=0;ii<minimalObject.rules.length;ii++){var rule=minimalObject.rules[ii];var oldRule=this.findCorrespondingRule(cssObject.rules,rule.directive);if(oldRule===false){cssObject.rules.push(rule);}else if(rule.type==='DELETED'){oldRule.type='DELETED';} |
| 43 | else{oldRule.value=rule.value;}}} |
| 44 | else{cssObject.subStyles=minimalObject.subStyles;}}};fi.prototype.compactRules=function(rules){var newRules=[];for(var i=0;i<rules.length;i++){if(rules[i].type!=='DELETED'){newRules.push(rules[i]);}} |
| 45 | return newRules;};fi.prototype.getCSSForEditor=function(cssBase,depth){if(depth===undefined){depth=0;} |
| 46 | var ret='';if(cssBase===undefined){cssBase=this.css;} |
| 47 | for(var i=0;i<cssBase.length;i++){if(cssBase[i].type==='imports'){ret+=cssBase[i].styles+'\n\n';}} |
| 48 | for(i=0;i<cssBase.length;i++){var tmp=cssBase[i];if(tmp.selector===undefined){continue;} |
| 49 | var comments="";if(tmp.comments!==undefined){comments=tmp.comments+'\n';} |
| 50 | if(tmp.type==='media'){ret+=comments+tmp.selector+'{\n';ret+=this.getCSSForEditor(tmp.subStyles,depth+1);ret+='}\n\n';} |
| 51 | else if(tmp.type!=='keyframes'&&tmp.type!=='imports'){ret+=this.getSpaces(depth)+comments+tmp.selector+' {\n';ret+=this.getCSSOfRules(tmp.rules,depth+1);ret+=this.getSpaces(depth)+'}\n\n';}} |
| 52 | for(i=0;i<cssBase.length;i++){if(cssBase[i].type==='keyframes'){ret+=cssBase[i].styles+'\n\n';}} |
| 53 | return ret;};fi.prototype.getImports=function(cssObjectArray){var imps=[];for(var i=0;i<cssObjectArray.length;i++){if(cssObjectArray[i].type==='imports'){imps.push(cssObjectArray[i].styles);}} |
| 54 | return imps;};fi.prototype.getCSSOfRules=function(rules,depth){var ret='';for(var i=0;i<rules.length;i++){if(rules[i]===undefined){continue;} |
| 55 | if(rules[i].value===''){continue;} |
| 56 | if(rules[i].defective===undefined){ret+=this.getSpaces(depth)+rules[i].directive+': '+rules[i].value+';\n';} |
| 57 | else{ret+=this.getSpaces(depth)+rules[i].value+';\n';}} |
| 58 | return ret||'\n';};fi.prototype.getSpaces=function(num){var ret='';for(var i=0;i<num*2;i++){ret+=' ';} |
| 59 | return ret;};fi.prototype.applyNamespacing=function(css,forcedNamespace){var cssObjectArray=css;var namespaceClass='.'+this.cssPreviewNamespace;if(forcedNamespace!==undefined){namespaceClass=forcedNamespace;} |
| 60 | if(typeof css==='string'){cssObjectArray=this.parseCSS(css);} |
| 61 | for(var i=0;i<cssObjectArray.length;i++){var obj=cssObjectArray[i];if(obj.selector.indexOf('@font-face')>-1||obj.selector.indexOf('keyframes')>-1||obj.selector.indexOf('@import')>-1||obj.selector.indexOf('.form-all')>-1||obj.selector.indexOf('#stage')>-1){continue;} |
| 62 | if(obj.type!=='media'){var selector=obj.selector.split(',');var newSelector=[];for(var j=0;j<selector.length;j++){if(selector[j].indexOf('.supernova')===-1){newSelector.push(namespaceClass+' '+selector[j]);} |
| 63 | else{newSelector.push(selector[j]);}} |
| 64 | obj.selector=newSelector.join(',');} |
| 65 | else{obj.subStyles=this.applyNamespacing(obj.subStyles,forcedNamespace);}} |
| 66 | return cssObjectArray;};fi.prototype.clearNamespacing=function(css,returnObj){if(returnObj===undefined){returnObj=false;} |
| 67 | var cssObjectArray=css;var namespaceClass='.'+this.cssPreviewNamespace;if(typeof css==='string'){cssObjectArray=this.parseCSS(css);} |
| 68 | for(var i=0;i<cssObjectArray.length;i++){var obj=cssObjectArray[i];if(obj.type!=='media'){var selector=obj.selector.split(',');var newSelector=[];for(var j=0;j<selector.length;j++){newSelector.push(selector[j].split(namespaceClass+' ').join(''));} |
| 69 | obj.selector=newSelector.join(',');} |
| 70 | else{obj.subStyles=this.clearNamespacing(obj.subStyles,true);}} |
| 71 | if(returnObj===false){return this.getCSSForEditor(cssObjectArray);} |
| 72 | else{return cssObjectArray;}};fi.prototype.createStyleElement=function(id,css,format){if(format===undefined){format=false;} |
| 73 | if(this.testMode===false&&format!=='nonamespace'){css=this.applyNamespacing(css);} |
| 74 | if(typeof css!=='string'){css=this.getCSSForEditor(css);} |
| 75 | if(format===true){css=this.getCSSForEditor(this.parseCSS(css));} |
| 76 | if(this.testMode!==false){return this.testMode('create style #'+id,css);} |
| 77 | var __el=document.getElementById(id);if(__el){__el.parentNode.removeChild(__el);} |
| 78 | var head=document.head||document.getElementsByTagName('head')[0],style=document.createElement('style');style.id=id;style.type='text/css';head.appendChild(style);if(style.styleSheet&&!style.sheet){style.styleSheet.cssText=css;} |
| 79 | else{style.appendChild(document.createTextNode(css));}};window.cssjs=fi;})(); |