UNPKG

asperjs-dev

Version:

A developmental branch of AsperJS, formerly Easy-Query.

3 lines (2 loc) 8.63 kB
var fs=require("fs");var _=require("underscore");var AsperJS=function(){function AsperJS(obj){var _this=this;this.default_language="scss";this.default_framework="bootstrap3";this.supported_languages=["scss","sass","less"];this.supported_measurements=["px","pt","rem","em"];this.supported_frameworks=["bootstrap2","bootstrap3","bootstrap4","foundation5","foundation6forapps","foundation6foremails","foundation6forsites","openframework","skeleton2"];this.language=this.default_language;this.framework=this.default_framework;this.build_css=true;this.breakpoints=[];this.breakpoint_definitions={};this.rem_size=16;this.file_destination="./";this.split_measurement=function(measurement){var parts=measurement.match(/(\d*\.?\d*)(.*)/);return{original:parts[0],quantity:parts[1],type:parts[2]}};this.trim_rem=function(rem){return rem-1/_this.rem_size};this.convert_string_array=function(array){var newArray=[];for(var x=0;x<array.length;x++){var member=_this.split_measurement(array[x]);switch(member["type"]){case"px":newArray.push(_this.convert_px_to_rem(member["quantity"]));break;case"pt":newArray.push(_this.convert_pt_to_rem(member["quantity"]));break;case"em":case"rem":default:newArray.push(member["quantity"]);break}}return newArray};this.convert_px_to_rem=function(px){return px/_this.rem_size};this.convert_pt_to_rem=function(pt){return pt/11.955168};this.validate_language=function(language){return _.contains(_this.supported_languages,language.toLowerCase())};this.validate_framework=function(framework){return _.contains(_this.supported_frameworks,framework.toLowerCase())};this.validate_array=function(array){var type=typeof array[0];if(type==="string"){for(var x=0;x<array.length;x++){if(typeof array[x]!==type||_this.validate_string_array_measurements(_this.split_measurement(array[x])[2]))return false}array=_this.convert_string_array(array)}else if(type==="number"){for(var x=0;x<array.length;x++){if(typeof array[x]!==type||array[x]<=0)return false}}else{return false}return _this.validate_number_array(array)};this.validate_number_array=function(array){for(var x=0;x<array.length;x++){if(typeof array[x]!=="number"){return false}}return true};this.validate_string_array_measurements=function(type){return _.contains(_this.supported_measurements,type.toLowerCase())};this.load_framework=function(framework){var loaded_framework=[];try{loaded_framework=require("./frameworks/"+framework)}catch(e){console.error("An error occured: "+e)}_this.framework=framework;_this.breakpoints=loaded_framework;return loaded_framework};this.build_configuration_object=function(obj){if(obj.hasOwnProperty("framework")&&obj.hasOwnProperty("breakpoints")){console.log("An error occured: If a custom constructor object is specified, you cannot specify both a custom "+"array of breakpoints and load a framework. Please select only one of the two.");return}_this.language=obj.hasOwnProperty("lang")&&_this.validate_language(obj["lang"])?obj["lang"]:_this.default_language;_this.breakpoints=obj.hasOwnProperty("breakpoints")&&_this.validate_array(obj["framework"])?obj["breakpoints"]:obj.hasOwnProperty("framework")&&_this.validate_framework(obj["framework"])?_this.load_framework(obj["framework"]):_this.load_framework(_this.default_framework);_this.build_css=obj.hasOwnProperty("build_css")&&typeof obj["build_css"]==="boolean"?obj["build_css"]:true;_this.file_destination=obj.hasOwnProperty("file_destination")&&typeof obj["file_destination"]==="string"?obj["file_destination"]:"./";_this.rem_size=obj.hasOwnProperty("rem_size")&&typeof obj["rem_size"]==="number"&&obj["rem_size"]>0?obj["rem_size"]:16};this.build_breakpoints=function(){if(_this.breakpoints){var count=Object.keys(_this.breakpoints).length;var breakpoint_labels=[];if(count>=1&&count<=5){switch(count){case 1:breakpoint_labels=["sm","lg"];break;case 2:breakpoint_labels=["sm","md","lg"];break;case 3:breakpoint_labels=["xs","sm","md","lg"];break;case 4:breakpoint_labels=["xs","sm","md","lg","xl"];break;case 5:breakpoint_labels=["xs","sm","md","lg","xl","xx"];break}for(var x=0;x<breakpoint_labels.length;x++){_this.breakpoint_definitions[x]={id:breakpoint_labels[x],min:x===0?0:_this.breakpoints[x-1],max:x===breakpoint_labels.length-1?9999:_this.trim_rem(_this.breakpoints[x])}}}else{console.error("An error occured. There must be at least one breakpoint but no more than 5.")}}else{console.log("Breakpoints are undefined.")}};this.build_stylesheet=function(){var pfx=_this.language.toLowerCase()==="less"?"@":"$";var braceL=_this.language.toLowerCase()==="sass"?"\n":"{";var braceR=_this.language.toLowerCase()==="sass"?"\n":"}";var terminator=_this.language==="sass"?"\n":";\n";var query=_this.language.toLowerCase()==="less"?"@":"#{$";var interp_start=_this.language.toLowerCase()==="less"?"@{":"${";var interp_end=_this.language.toLowerCase()==="less"?"}":"";var end=_this.language.toLowerCase()==="less"?"":"}";var caret=_this.language.toLowerCase()==="less"?"~":"";var css_default=_this.language.toLowerCase()==="less"?"":" !default";_this.generated_code=pfx+"screen: "+caret+"'only screen'"+css_default+terminator;_this.build_breakpoints();for(var x=0;x<Object.keys(_this.breakpoint_definitions).length;x++){var curr_breakpoint=_this.breakpoint_definitions[x];var prev_breakpoint=_this.build_css===true&&x>0?_this.breakpoint_definitions[x-1]:null;var next_breakpoint=_this.build_css===true&&x!==Object.keys(_this.breakpoint_definitions).length-1?_this.breakpoint_definitions[x+1]:null;_this.generated_code+="\n"+pfx+curr_breakpoint["id"]+"-only: "+caret+'"'+interp_start+"screen"+interp_end+" and "+"(min-width: "+curr_breakpoint["min"]+"rem) and "+"(max-width: "+curr_breakpoint["max"]+'rem)"'+terminator;if(next_breakpoint!==null&&prev_breakpoint!==null){_this.generated_code+=build_stylesheet_inner_point(curr_breakpoint)}}if(_this.build_css){_this.generated_code+="\n\n";for(var x=0;x<Object.keys(_this.breakpoint_definitions).length;x++){var curr_breakpoint=_this.breakpoint_definitions[x];var prev_breakpoint=x>0?_this.breakpoint_definitions[x-1]:null;var next_breakpoint=x!==Object.keys(_this.breakpoint_definitions).length-1?_this.breakpoint_definitions[x+1]:null;if(prev_breakpoint===null){var scope=next_breakpoint["max"]===9999?"-only":"-up";_this.generated_code+="."+curr_breakpoint["id"]+"-only "+braceL+"\n"+"\t@media "+query+next_breakpoint["id"]+scope+end+" "+braceL+"\n"+"\t\tdisplay: none"+terminator+"\t"+braceR+"\n"+braceR+"\n\n"}if(next_breakpoint===null){var scope=prev_breakpoint["min"]===0?"-only":"-down";_this.generated_code+="."+curr_breakpoint["id"]+"-only "+braceL+"\n"+"\t@media "+query+prev_breakpoint["id"]+scope+end+" "+braceL+"\n"+"\t\tdisplay: none"+terminator+"\t"+braceR+"\n"+braceR+"\n\n"}if(prev_breakpoint!==null&&next_breakpoint!==null){var prev_scope=prev_breakpoint["min"]===0?"-only":"-down";var next_scope=next_breakpoint["max"]===9999?"-only":"-up";var scope=["-only","-up","-down"];for(var x=0;x<scope.length;x++){_this.generated_code+="."+curr_breakpoint["id"]+scope[x]+" "+braceL+"\n"+"\t@media "+query+prev_breakpoint["id"]+prev_scope+end+" "+braceL+"\n"+"\t\tdisplay: none"+terminator+"\t"+braceR+"\n\n"+"\t@media "+query+next_breakpoint["id"]+next_scope+end+" "+braceL+"\n"+"\t\tdisplay: none"+terminator+"\t"+braceR+"\n"+braceR+"\n\n"}}}}function build_stylesheet_inner_point(breakpoint){return"\n"+pfx+breakpoint["id"]+"-down: "+caret+'"'+interp_start+"screen"+interp_end+" and "+"(min-width: 0rem) and "+"(max-width: "+breakpoint["max"]+'rem)"'+terminator+"\n"+pfx+breakpoint["id"]+"-up: "+caret+'"'+interp_start+"screen"+interp_end+" and "+"(min-width: "+breakpoint["min"]+"rem) and "+'(max-width: 9999rem)"'+terminator}};this.write_stylesheet=function(){var dest=_this.file_destination+"_asper."+_this.language;try{fs.writeFile(dest,_this.generated_code,function(err){if(err)console.error("Error writing to file: "+dest)})}catch(e){console.log("An Error Occured: "+e.name+": "+e.message)}return dest};if(!!obj){if(typeof obj==="string"&&this.validate_framework(obj)){this.load_framework(obj)}else if(typeof obj==="object"&&obj.constructor===Array&&this.validate_array(obj)){this.breakpoints=obj}else if(typeof obj==="object"){this.build_configuration_object(obj)}else if(arguments.length===0){this.load_framework(this.default_framework)}else{console.error("An error occured. Constructor parameter is invalid. Please see documentation for "+"instructions on valid constructor parameters.")}}else{this.load_framework(this.default_framework)}this.build_stylesheet();this.write_stylesheet()}return AsperJS}();module.exports=function(object){return new AsperJS(object)}; //# sourceMappingURL=index.min.js.map