diff --git a/HEADER.js b/HEADER.js index e2f6dfee..8a3dc986 100644 --- a/HEADER.js +++ b/HEADER.js @@ -1,4 +1,4 @@ -/*! Fabric.js Copyright 2008-2012, Bitsonnet (Juriy Zaytsev, Maxim Chernyak) */ +/*! Fabric.js Copyright 2008-2012, Printio (Juriy Zaytsev, Maxim Chernyak) */ var fabric = fabric || { version: "0.8.34" }; diff --git a/build.js b/build.js index f57bf4c7..84c8ba0a 100644 --- a/build.js +++ b/build.js @@ -1,13 +1,22 @@ var fs = require('fs'), exec = require('child_process').exec; -var modules = process.argv.slice(2)[0]; -modules = modules ? modules.split('=')[1].split(',') : [ ]; +var buildArgs = process.argv.slice(2), + buildArgsAsObject = { }; -var minifier = process.argv.slice(3)[0]; +buildArgs.forEach(function(arg) { + var key = arg.split('=')[0], + value = arg.split('=')[1]; + + buildArgsAsObject[key] = value; +}); + +var modulesToInclude = buildArgsAsObject.modules ? buildArgsAsObject.modules.split(',') : [ ]; +var modulesToExclude = buildArgsAsObject.exclude ? buildArgsAsObject.exclude.split(',') : [ ]; + +var minifier = buildArgsAsObject.minifier || 'yui'; var mininfierCmd; -minifier = minifier ? minifier.split('=')[1] : 'yui'; if (minifier === 'yui') { mininfierCmd = 'java -jar lib/yuicompressor-2.4.2.jar dist/all.js -o dist/all.min.js'; } @@ -15,9 +24,15 @@ else if (minifier === 'closure') { mininfierCmd = 'java -jar lib/google_closure_compiler.jar --js dist/all.js --js_output_file dist/all.min.js'; } -var includeAllModules = modules.length === 1 && modules[0] === 'ALL'; +var includeAllModules = modulesToInclude.length === 1 && modulesToInclude[0] === 'ALL'; +var noStrict = 'no-strict' in buildArgsAsObject; -var distFileContents = '/* build: `node build.js modules=' + modules.join(',') + '` */\n'; +var distFileContents = + '/* build: `node build.js modules=' + + modulesToInclude.join(',') + + (modulesToExclude.length ? (' exclude=' + modulesToExclude.join(',')) : '') + + (noStrict ? ' no-strict' : '') + + '` */\n'; function appendFileContents(fileNames, callback) { @@ -35,6 +50,9 @@ function appendFileContents(fileNames, callback) { fs.readFile(__dirname + '/' + fileName, function (err, data) { if (err) throw err; + if (noStrict) { + data = String(data).replace(/"use strict";?\n?/, ''); + } distFileContents += (data + '\n'); readNextFile(); }); @@ -43,14 +61,27 @@ function appendFileContents(fileNames, callback) { } function ifSpecifiedInclude(moduleName, fileName) { - return (modules.indexOf(moduleName) > -1 || includeAllModules) ? fileName : ''; + var isInIncludedList = modulesToInclude.indexOf(moduleName) > -1; + var isInExcludedList = modulesToExclude.indexOf(moduleName) > -1; + + // excluded list takes precedence over modules=ALL + return ((isInIncludedList || includeAllModules) && !isInExcludedList) ? fileName : ''; } var filesToInclude = [ 'HEADER.js', - ifSpecifiedInclude('serialization', 'lib/json2.js'), + ( + ( + (modulesToInclude.indexOf('serialization') > -1 || includeAllModules) && + (modulesToExclude.indexOf('json') == -1)) + + // only include json if serialization module is specified, AND if json is not explicitly excluded + ? 'lib/json2.js' + : '' + ), + ifSpecifiedInclude('text', 'lib/cufon.js'), 'src/log.js', diff --git a/dist/all.js b/dist/all.js index 301b3eb5..a3220a54 100644 --- a/dist/all.js +++ b/dist/all.js @@ -1,5 +1,5 @@ /* build: `node build.js modules=ALL` */ -/*! Fabric.js Copyright 2008-2012, Bitsonnet (Juriy Zaytsev, Maxim Chernyak) */ +/*! Fabric.js Copyright 2008-2012, Printio (Juriy Zaytsev, Maxim Chernyak) */ var fabric = fabric || { version: "0.8.34" }; diff --git a/dist/all.min.js b/dist/all.min.js index 522a34ef..bea3ce4e 100644 --- a/dist/all.min.js +++ b/dist/all.min.js @@ -1,4 +1,4 @@ -/* Fabric.js Copyright 2008-2012, Bitsonnet (Juriy Zaytsev, Maxim Chernyak) */ +/* Fabric.js Copyright 2008-2012, Printio (Juriy Zaytsev, Maxim Chernyak) */ var fabric=fabric||{version:"0.8.34"};if(typeof exports!="undefined"){exports.fabric=fabric}if(typeof document!="undefined"&&typeof window!="undefined"){fabric.document=document;fabric.window=window}else{fabric.document=require("jsdom").jsdom("");fabric.window=fabric.document.createWindow()}fabric.isTouchSupported="ontouchstart" in fabric.document.documentElement;if(!this.JSON){this.JSON={}}(function(){function f(n){return n<10?"0"+n:n}if(typeof Date.prototype.toJSON!=="function"){Date.prototype.toJSON=function(key){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf()}}var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==="string"?c:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+string+'"'}function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==="object"&&typeof value.toJSON==="function"){value=value.toJSON(key)}if(typeof rep==="function"){value=rep.call(holder,key,value)}switch(typeof value){case"string":return quote(value);case"number":return isFinite(value)?String(value):"null";case"boolean":case"null":return String(value);case"object":if(!value){return"null"}gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==="[object Array]"){length=value.length;for(i=0;i