From 7f9e0eec9a8fbc30d0202aba7290e8d31eebed9c Mon Sep 17 00:00:00 2001 From: Cameron Dalton Date: Thu, 18 Dec 2014 23:35:28 -0500 Subject: [PATCH 1/7] Adding some example files for testing various build scenarios, not for pushing to require-css --- example/issue-176-test/dep.css | 4 ++++ example/issue-176-test/dep.js | 3 +++ example/issue-176-test/main-out.css | 7 +++++++ example/issue-176-test/main-out.js | 1 + example/issue-176-test/main.css | 4 ++++ example/issue-176-test/main.js | 3 +++ example/issue-176-test/requireConfig.js | 7 +++++++ example/issue-176-test/single-layer-build.js | 15 +++++++++++++++ 8 files changed, 44 insertions(+) create mode 100644 example/issue-176-test/dep.css create mode 100644 example/issue-176-test/dep.js create mode 100644 example/issue-176-test/main-out.css create mode 100644 example/issue-176-test/main-out.js create mode 100644 example/issue-176-test/main.css create mode 100644 example/issue-176-test/main.js create mode 100644 example/issue-176-test/requireConfig.js create mode 100644 example/issue-176-test/single-layer-build.js diff --git a/example/issue-176-test/dep.css b/example/issue-176-test/dep.css new file mode 100644 index 0000000..173ff4a --- /dev/null +++ b/example/issue-176-test/dep.css @@ -0,0 +1,4 @@ +#dep { + /* a test comment in dep.css */ + height: 40px; +} \ No newline at end of file diff --git a/example/issue-176-test/dep.js b/example/issue-176-test/dep.js new file mode 100644 index 0000000..b68e347 --- /dev/null +++ b/example/issue-176-test/dep.js @@ -0,0 +1,3 @@ +define(['../../css!dep.css'], function(css) { + console.log('dep loaded'); +}); diff --git a/example/issue-176-test/main-out.css b/example/issue-176-test/main-out.css new file mode 100644 index 0000000..2924406 --- /dev/null +++ b/example/issue-176-test/main-out.css @@ -0,0 +1,7 @@ +#dep { + /* a test comment in dep.css */ + height: 40px; +}#main { + /* a test comment in main.css */ + width: 100; +} \ No newline at end of file diff --git a/example/issue-176-test/main-out.js b/example/issue-176-test/main-out.js new file mode 100644 index 0000000..962ccf5 --- /dev/null +++ b/example/issue-176-test/main-out.js @@ -0,0 +1 @@ +define("../../normalize",[],function(){function s(e,i,s){if(e.match(r)||e.match(n))return e;e=t(e);var a=s.match(n),f=i.match(n);return f&&(!a||a[1]!=f[1]||a[2]!=f[2])?o(e,i):u(o(e,i),s)}function o(e,t){e.substr(0,2)=="./"&&(e=e.substr(2));if(e.match(r)||e.match(n))return e;var i=t.split("/"),s=e.split("/");i.pop();while(curPart=s.shift())curPart==".."?i.pop():i.push(curPart);return i.join("/")}function u(e,t){var n=t.split("/");n.pop(),t=n.join("/")+"/",i=0;while(t.substr(i,1)==e.substr(i,1))i++;while(t.substr(i,1)!="/")i--;t=t.substr(i+1),e=e.substr(i+1),n=t.split("/");var r=e.split("/");out="";while(n.shift())out+="../";while(curPart=r.shift())out+=curPart+"/";return out.substr(0,out.length-1)}var e=/([^:])\/+/g,t=function(t){return t.replace(e,"$1/")},n=/[^\:\/]*:\/\/([^\/])*/,r=/^(\/|data:)/,a=function(e,n,r){n=t(n),r=t(r);var i=/@import\s*("([^"]*)"|'([^']*)')|url\s*\((?!#)\s*(\s*"([^"]*)"|'([^']*)'|[^\)]*\s*)\s*\)/ig,o,u,e;while(o=i.exec(e)){u=o[3]||o[2]||o[5]||o[6]||o[4];var a;a=s(u,n,r);var f=o[5]||o[6]?1:0;e=e.substr(0,i.lastIndex-u.length-f-1)+a+e.substr(i.lastIndex-f-1),i.lastIndex=i.lastIndex+(a.length-u.length)}return e};return a.convertURIBase=s,a.absoluteURI=o,a.relativeURI=u,a}),define("../../css",[],function(){if(typeof window=="undefined")return{load:function(e,t,n){n()}};var e=document.getElementsByTagName("head")[0],t=window.navigator.userAgent.match(/Trident\/([^ ;]*)|AppleWebKit\/([^ ;]*)|Opera\/([^ ;]*)|rv\:([^ ;]*)(.*?)Gecko\/([^ ;]*)|MSIE\s([^ ;]*)|AndroidWebKit\/([^ ;]*)/)||0,n=!1,r=!0;t[1]||t[7]?n=parseInt(t[1])<6||parseInt(t[7])<=9:t[2]||t[8]?r=!1:t[4]&&(n=parseInt(t[4])<18);var i={};i.pluginBuilder="./css-builder";var s,o,u=function(){s=document.createElement("style"),e.appendChild(s),o=s.styleSheet||s.sheet},a=0,f=[],l,c=function(e){a++,a==32&&(u(),a=0),o.addImport(e),s.onload=function(){h()}},h=function(){l();var e=f.shift();if(!e){l=null;return}l=e[1],c(e[0])},p=function(e,t){(!o||!o.addImport)&&u();if(o&&o.addImport)l?f.push([e,t]):(c(e),l=t);else{s.textContent='@import "'+e+'";';var n=setInterval(function(){try{s.sheet.cssRules,clearInterval(n),t()}catch(e){}},10)}},d=function(t,n){var i=document.createElement("link");i.type="text/css",i.rel="stylesheet";if(r)i.onload=function(){i.onload=function(){},setTimeout(n,7)};else var s=setInterval(function(){for(var e=0;e Date: Tue, 23 Dec 2014 16:49:04 -0500 Subject: [PATCH 2/7] Small fix to css in local example setup --- example/issue-176-test/main.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/example/issue-176-test/main.css b/example/issue-176-test/main.css index 407df4e..39baee1 100644 --- a/example/issue-176-test/main.css +++ b/example/issue-176-test/main.css @@ -1,4 +1,4 @@ #main { /* a test comment in main.css */ - width: 100; + width: 100px; } \ No newline at end of file From a8cc55d17b604f8e3e56ecc99a31443862de9b53 Mon Sep 17 00:00:00 2001 From: Cameron Dalton Date: Tue, 23 Dec 2014 17:20:43 -0500 Subject: [PATCH 3/7] Fix #176: new config flag to dis/enable optimizing Fix guybedford/require-css#176 Only perform optimization on the css content if the build's config.css.optimize option is not set to false. This is a new config option, added under require's "config" option which allows specifying module-specific configuration without polluting the global config object. --- css-builder.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/css-builder.js b/css-builder.js index c7929df..f58c0e4 100644 --- a/css-builder.js +++ b/css-builder.js @@ -4,7 +4,7 @@ define(['require', './normalize'], function(req, normalize) { var isWindows = !!process.platform.match(/^win/); function compress(css) { - if (config.optimizeCss == 'none') { + if (cssConfig.optimize===false) { return css; } @@ -108,6 +108,7 @@ define(['require', './normalize'], function(req, normalize) { var curModule = 0; var config; + var cssConfig; var writeCSSForLayer = true; var layerBuffer = []; @@ -116,6 +117,7 @@ define(['require', './normalize'], function(req, normalize) { cssAPI.load = function(name, req, load, _config) { //store config config = config || _config; + cssConfig = (config.config && config.config.css) ? config.config.css : {}; if (!siteRoot) { siteRoot = path.resolve(config.dir || path.dirname(config.out), config.siteRoot || '.') + '/'; From 57eea95868dabb10d3e84b44e3c02bb2daa55872 Mon Sep 17 00:00:00 2001 From: Cameron Dalton Date: Tue, 23 Dec 2014 19:40:11 -0500 Subject: [PATCH 4/7] new config flag to dis/enable optimizing - readme Added usage documentation to the readme for the option to enable/disable css optimization, for fixing guybedford/require-css#176 --- README.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/README.md b/README.md index 2317f94..4c4399e 100644 --- a/README.md +++ b/README.md @@ -216,6 +216,25 @@ To disable any CSS build entirely, use the configuration option `buildCSS`: CSS requires will then be left in the source "as is". This shouldn't be used with `stubModules`. +### Disabling CSS Optimization + +To disable CSS optimization (but perhaps still concatenate the CSS), use the optimize option. + +```javascript +{ + config: { + 'css': { + optimize: false + } + }, + modules: [ + { + name: 'mymodule' + } + ] +} +``` + CSS Compression --------------- From d1401df119b20c809226f22e036a144933ae6daa Mon Sep 17 00:00:00 2001 From: Cameron Dalton Date: Tue, 23 Dec 2014 22:25:20 -0500 Subject: [PATCH 5/7] new config flag to dis/enable optimizing - readme Minor update to the readme documentation for this new option to read a bit better --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4c4399e..c7b6b5a 100644 --- a/README.md +++ b/README.md @@ -218,7 +218,7 @@ CSS requires will then be left in the source "as is". This shouldn't be used wit ### Disabling CSS Optimization -To disable CSS optimization (but perhaps still concatenate the CSS), use the optimize option. +To disable CSS optimization of the built CSS, use the `optimize` option: ```javascript { From d9e2edc5e6813b934110d89d23fa30da93248fea Mon Sep 17 00:00:00 2001 From: Cameron Dalton Date: Tue, 23 Dec 2014 22:40:02 -0500 Subject: [PATCH 6/7] Removing local test files from branch for PR Removing the local test example files I created from the branch since I stupidly added them to master before creating the PR branch and don't want them in the PR. --- example/issue-176-test/dep.css | 4 ---- example/issue-176-test/dep.js | 3 --- example/issue-176-test/main-out.css | 7 ------- example/issue-176-test/main-out.js | 1 - example/issue-176-test/main.css | 4 ---- example/issue-176-test/main.js | 3 --- example/issue-176-test/requireConfig.js | 7 ------- example/issue-176-test/single-layer-build.js | 15 --------------- 8 files changed, 44 deletions(-) delete mode 100644 example/issue-176-test/dep.css delete mode 100644 example/issue-176-test/dep.js delete mode 100644 example/issue-176-test/main-out.css delete mode 100644 example/issue-176-test/main-out.js delete mode 100644 example/issue-176-test/main.css delete mode 100644 example/issue-176-test/main.js delete mode 100644 example/issue-176-test/requireConfig.js delete mode 100644 example/issue-176-test/single-layer-build.js diff --git a/example/issue-176-test/dep.css b/example/issue-176-test/dep.css deleted file mode 100644 index 173ff4a..0000000 --- a/example/issue-176-test/dep.css +++ /dev/null @@ -1,4 +0,0 @@ -#dep { - /* a test comment in dep.css */ - height: 40px; -} \ No newline at end of file diff --git a/example/issue-176-test/dep.js b/example/issue-176-test/dep.js deleted file mode 100644 index b68e347..0000000 --- a/example/issue-176-test/dep.js +++ /dev/null @@ -1,3 +0,0 @@ -define(['../../css!dep.css'], function(css) { - console.log('dep loaded'); -}); diff --git a/example/issue-176-test/main-out.css b/example/issue-176-test/main-out.css deleted file mode 100644 index 2924406..0000000 --- a/example/issue-176-test/main-out.css +++ /dev/null @@ -1,7 +0,0 @@ -#dep { - /* a test comment in dep.css */ - height: 40px; -}#main { - /* a test comment in main.css */ - width: 100; -} \ No newline at end of file diff --git a/example/issue-176-test/main-out.js b/example/issue-176-test/main-out.js deleted file mode 100644 index 962ccf5..0000000 --- a/example/issue-176-test/main-out.js +++ /dev/null @@ -1 +0,0 @@ -define("../../normalize",[],function(){function s(e,i,s){if(e.match(r)||e.match(n))return e;e=t(e);var a=s.match(n),f=i.match(n);return f&&(!a||a[1]!=f[1]||a[2]!=f[2])?o(e,i):u(o(e,i),s)}function o(e,t){e.substr(0,2)=="./"&&(e=e.substr(2));if(e.match(r)||e.match(n))return e;var i=t.split("/"),s=e.split("/");i.pop();while(curPart=s.shift())curPart==".."?i.pop():i.push(curPart);return i.join("/")}function u(e,t){var n=t.split("/");n.pop(),t=n.join("/")+"/",i=0;while(t.substr(i,1)==e.substr(i,1))i++;while(t.substr(i,1)!="/")i--;t=t.substr(i+1),e=e.substr(i+1),n=t.split("/");var r=e.split("/");out="";while(n.shift())out+="../";while(curPart=r.shift())out+=curPart+"/";return out.substr(0,out.length-1)}var e=/([^:])\/+/g,t=function(t){return t.replace(e,"$1/")},n=/[^\:\/]*:\/\/([^\/])*/,r=/^(\/|data:)/,a=function(e,n,r){n=t(n),r=t(r);var i=/@import\s*("([^"]*)"|'([^']*)')|url\s*\((?!#)\s*(\s*"([^"]*)"|'([^']*)'|[^\)]*\s*)\s*\)/ig,o,u,e;while(o=i.exec(e)){u=o[3]||o[2]||o[5]||o[6]||o[4];var a;a=s(u,n,r);var f=o[5]||o[6]?1:0;e=e.substr(0,i.lastIndex-u.length-f-1)+a+e.substr(i.lastIndex-f-1),i.lastIndex=i.lastIndex+(a.length-u.length)}return e};return a.convertURIBase=s,a.absoluteURI=o,a.relativeURI=u,a}),define("../../css",[],function(){if(typeof window=="undefined")return{load:function(e,t,n){n()}};var e=document.getElementsByTagName("head")[0],t=window.navigator.userAgent.match(/Trident\/([^ ;]*)|AppleWebKit\/([^ ;]*)|Opera\/([^ ;]*)|rv\:([^ ;]*)(.*?)Gecko\/([^ ;]*)|MSIE\s([^ ;]*)|AndroidWebKit\/([^ ;]*)/)||0,n=!1,r=!0;t[1]||t[7]?n=parseInt(t[1])<6||parseInt(t[7])<=9:t[2]||t[8]?r=!1:t[4]&&(n=parseInt(t[4])<18);var i={};i.pluginBuilder="./css-builder";var s,o,u=function(){s=document.createElement("style"),e.appendChild(s),o=s.styleSheet||s.sheet},a=0,f=[],l,c=function(e){a++,a==32&&(u(),a=0),o.addImport(e),s.onload=function(){h()}},h=function(){l();var e=f.shift();if(!e){l=null;return}l=e[1],c(e[0])},p=function(e,t){(!o||!o.addImport)&&u();if(o&&o.addImport)l?f.push([e,t]):(c(e),l=t);else{s.textContent='@import "'+e+'";';var n=setInterval(function(){try{s.sheet.cssRules,clearInterval(n),t()}catch(e){}},10)}},d=function(t,n){var i=document.createElement("link");i.type="text/css",i.rel="stylesheet";if(r)i.onload=function(){i.onload=function(){},setTimeout(n,7)};else var s=setInterval(function(){for(var e=0;e Date: Fri, 26 Dec 2014 13:10:37 -0500 Subject: [PATCH 7/7] new config flag to dis/enable optimizing Changes suggested in pull request to move config.css.optimize to optimizeRequireCSS since the rest of the require-css config doesn't use that convention. --- README.md | 8 ++------ css-builder.js | 4 +--- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index c7b6b5a..56b397c 100644 --- a/README.md +++ b/README.md @@ -218,15 +218,11 @@ CSS requires will then be left in the source "as is". This shouldn't be used wit ### Disabling CSS Optimization -To disable CSS optimization of the built CSS, use the `optimize` option: +To disable CSS optimization of the built CSS, use the `optimizeRequireCSS` option: ```javascript { - config: { - 'css': { - optimize: false - } - }, + optimizeRequireCSS: false, modules: [ { name: 'mymodule' diff --git a/css-builder.js b/css-builder.js index f58c0e4..ec9a374 100644 --- a/css-builder.js +++ b/css-builder.js @@ -4,7 +4,7 @@ define(['require', './normalize'], function(req, normalize) { var isWindows = !!process.platform.match(/^win/); function compress(css) { - if (cssConfig.optimize===false) { + if (config.optimizeRequireCSS===false) { return css; } @@ -108,7 +108,6 @@ define(['require', './normalize'], function(req, normalize) { var curModule = 0; var config; - var cssConfig; var writeCSSForLayer = true; var layerBuffer = []; @@ -117,7 +116,6 @@ define(['require', './normalize'], function(req, normalize) { cssAPI.load = function(name, req, load, _config) { //store config config = config || _config; - cssConfig = (config.config && config.config.css) ? config.config.css : {}; if (!siteRoot) { siteRoot = path.resolve(config.dir || path.dirname(config.out), config.siteRoot || '.') + '/';