Skip to content

Commit 47d09d3

Browse files
committed
Fixing issue #163
1 parent ffc1a51 commit 47d09d3

File tree

7 files changed

+57
-24
lines changed

7 files changed

+57
-24
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ require-css
33

44
RequireJS CSS requiring and optimization, with almond support.
55

6-
Useful for writing modular CSS dependencies alongside scripts. For an example of widget rendering see [ZestJS](http://zestjs.org).
6+
Useful for writing modular CSS dependencies alongside scripts.
77

88
For LESS inclusion, use [require-less](https://github.com/guybedford/require-less), which behaves and builds the css exactly like this module apart from the preprocessing step.
99

bower.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "require-css",
3-
"version": "0.1.4",
3+
"version": "0.1.8",
44
"ignore": ["example", "test", ".gitignore"],
55
"main": ["css.js", "css-builder.js", "normalize.js"]
66
}

css-builder.js

Lines changed: 43 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ define(['require', './normalize'], function(req, normalize) {
77
if (config.optimizeCss == 'none') {
88
return css;
99
}
10+
1011
if (typeof process !== "undefined" && process.versions && !!process.versions.node && require.nodeRequire) {
1112
try {
1213
var csso = require.nodeRequire('csso');
@@ -95,7 +96,9 @@ define(['require', './normalize'], function(req, normalize) {
9596
// NB add @media query support for media imports
9697
var importRegEx = /@import\s*(url)?\s*(('([^']*)'|"([^"]*)")|\(('([^']*)'|"([^"]*)"|([^\)]*))\))\s*;?/g;
9798
var absUrlRegEx = /^([^\:\/]+:\/)?\//;
98-
99+
100+
// Write Css module definition
101+
var writeCSSDefinition = "define('@writecss', function() {return function writeCss(c) {var d=document,a='appendChild',i='styleSheet',s=d.createElement('style');s.type='text/css';d.getElementsByTagName('head')[0][a](s);s[i]?s[i].cssText=c:s[a](d.createTextNode(c));};});";
99102

100103
var siteRoot;
101104

@@ -106,11 +109,11 @@ define(['require', './normalize'], function(req, normalize) {
106109
var curModule = 0;
107110
var config;
108111

112+
var writeCSSForLayer = true;
109113
var layerBuffer = [];
110114
var cssBuffer = {};
111115

112116
cssAPI.load = function(name, req, load, _config) {
113-
114117
//store config
115118
config = config || _config;
116119

@@ -153,14 +156,40 @@ define(['require', './normalize'], function(req, normalize) {
153156
}
154157

155158
cssAPI.write = function(pluginName, moduleName, write, parse) {
159+
var cssModule;
160+
156161
//external URLS don't get added (just like JS requires)
157162
if (moduleName.match(absUrlRegEx))
158163
return;
159164

160165
layerBuffer.push(cssBuffer[moduleName]);
166+
167+
if (!global._requirejsCssData) {
168+
global._requirejsCssData = {
169+
usedBy: {css: true},
170+
css: ''
171+
}
172+
} else {
173+
global._requirejsCssData.usedBy.css = true;
174+
}
175+
176+
if (config.buildCSS != false) {
177+
var style = cssBuffer[moduleName];
178+
179+
if (config.writeCSSModule && style) {
180+
if (writeCSSForLayer) {
181+
writeCSSForLayer = false;
182+
write(writeCSSDefinition);
183+
}
161184

162-
if (config.buildCSS != false)
163-
write.asModule(pluginName + '!' + moduleName, 'define(function(){})');
185+
cssModule = 'define(["@writecss"], function(writeCss){\n writeCss("'+ escape(compress(style)) +'");\n})';
186+
}
187+
else {
188+
cssModule = 'define(function(){})';
189+
}
190+
191+
write.asModule(pluginName + '!' + moduleName, cssModule);
192+
}
164193
}
165194

166195
cssAPI.onLayerEnd = function(write, data) {
@@ -173,15 +202,20 @@ define(['require', './normalize'], function(req, normalize) {
173202

174203
var css = layerBuffer.join('');
175204

176-
if (fs.existsSync(outPath))
177-
console.log('RequireCSS: Warning, separateCSS module path "' + outPath + '" already exists and is being replaced by the layer CSS.');
178-
179205
process.nextTick(function() {
206+
if (global._requirejsCssData) {
207+
css = global._requirejsCssData.css = css + global._requirejsCssData.css;
208+
delete global._requirejsCssData.usedBy.css;
209+
if (Object.keys(global._requirejsCssData.usedBy).length === 0) {
210+
delete global._requirejsCssData;
211+
}
212+
}
213+
180214
saveFile(outPath, compress(css));
181215
});
182216

183217
}
184-
else if (config.buildCSS != false) {
218+
else if (config.buildCSS != false && config.writeCSSModule != true) {
185219
var styles = config.IESelectorLimit ? layerBuffer : [layerBuffer.join('')];
186220
for (var i = 0; i < styles.length; i++) {
187221
if (styles[i] == '')
@@ -194,6 +228,7 @@ define(['require', './normalize'], function(req, normalize) {
194228
}
195229
//clear layer buffer for next layer
196230
layerBuffer = [];
231+
writeCSSForLayer = true;
197232
}
198233

199234
return cssAPI;

css.js

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*
22
* Require-CSS RequireJS css! loader plugin
3-
* 0.1.2
4-
* Guy Bedford 2013
3+
* 0.1.8
4+
* Guy Bedford 2014
55
* MIT
66
*/
77

@@ -37,7 +37,7 @@ define(function() {
3737

3838
var head = document.getElementsByTagName('head')[0];
3939

40-
var engine = window.navigator.userAgent.match(/Trident\/([^ ;]*)|AppleWebKit\/([^ ;]*)|Opera\/([^ ;]*)|rv\:([^ ;]*)(.*?)Gecko\/([^ ;]*)|MSIE\s([^ ;]*)/) || 0;
40+
var engine = window.navigator.userAgent.match(/Trident\/([^ ;]*)|AppleWebKit\/([^ ;]*)|Opera\/([^ ;]*)|rv\:([^ ;]*)(.*?)Gecko\/([^ ;]*)|MSIE\s([^ ;]*)|AndroidWebKit\/([^ ;]*)/) || 0;
4141

4242
// use <style> @import load method (IE < 9, Firefox < 18)
4343
var useImportLoad = false;
@@ -49,12 +49,12 @@ define(function() {
4949
if (engine[1] || engine[7])
5050
useImportLoad = parseInt(engine[1]) < 6 || parseInt(engine[7]) <= 9;
5151
// webkit
52-
else if (engine[2])
52+
else if (engine[2] || engine[8] || 'WebkitAppearance' in document.documentElement.style)
5353
useOnload = false;
5454
// gecko
5555
else if (engine[4])
5656
useImportLoad = parseInt(engine[4]) < 18;
57-
57+
5858
//>>excludeEnd('excludeRequireCss')
5959
//main api object
6060
var cssAPI = {};
@@ -74,13 +74,14 @@ define(function() {
7474
var ieCurCallback;
7575

7676
var createIeLoad = function(url) {
77+
curSheet.addImport(url);
78+
curStyle.onload = function(){ processIeLoad() };
79+
7780
ieCnt++;
78-
if (ieCnt == 32) {
81+
if (ieCnt == 31) {
7982
createStyle();
8083
ieCnt = 0;
8184
}
82-
curSheet.addImport(url);
83-
curStyle.onload = function(){ processIeLoad() };
8485
}
8586
var processIeLoad = function() {
8687
ieCurCallback();
@@ -150,16 +151,13 @@ define(function() {
150151

151152
//>>excludeEnd('excludeRequireCss')
152153
cssAPI.normalize = function(name, normalize) {
153-
if (name.substr(name.length - 4, 4) == '.css')
154-
name = name.substr(0, name.length - 4);
155-
156154
return normalize(name);
157155
}
158156

159157
//>>excludeStart('excludeRequireCss', pragmas.excludeRequireCss)
160158
cssAPI.load = function(cssId, req, load, config) {
161159

162-
(useImportLoad ? importLoad : linkLoad)(req.toUrl(cssId + '.css'), load);
160+
(useImportLoad ? importLoad : linkLoad)((useImportLoad ? req.toUrl(cssId) : cssId), load);
163161

164162
}
165163

css.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

example/www/.DS_Store

-6 KB
Binary file not shown.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "require-css",
3-
"version": "0.1.4",
3+
"version": "0.1.8",
44
"volo": {
55
"type": "directory"
66
}

0 commit comments

Comments
 (0)