| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244 | 
							- define(['require', './normalize'], function(req, normalize) {
 
-   var cssAPI = {};
 
-   var isWindows = !!process.platform.match(/^win/);
 
-   function compress(css) {
 
-     if (config.optimizeCss == 'none') {
 
-       return css;
 
-     }
 
-     
 
-     if (typeof process !== "undefined" && process.versions && !!process.versions.node && require.nodeRequire) {
 
-       try {
 
-         var csso = require.nodeRequire('csso');
 
-       }
 
-       catch(e) {
 
-         console.log('Compression module not installed. Use "npm install csso -g" to enable.');
 
-         return css;
 
-       }
 
-       var csslen = css.length;
 
-       try {
 
-         if (typeof csso.minify === 'function') {
 
-             var minifyResult = csso.minify(css);
 
-             if (typeof minifyResult === 'string'){ // for csso < 2.0.0
 
-               css = minifyResult; 
 
-             } else if (typeof minifyResult === 'object'){ // for csso >= 2.0.0
 
-               css = minifyResult.css; 
 
-             } 
 
-         } else { // justDoIt() was always. minify() appeared in csso 1.4.0.
 
-           css = csso.justDoIt(css);
 
-         }
 
-       }
 
-       catch(e) {
 
-         console.log('Compression failed due to a CSS syntax error.');
 
-         return css;
 
-       }
 
-       console.log('Compressed CSS output to ' + Math.round(css.length / csslen * 100) + '%.');
 
-       return css;
 
-     }
 
-     console.log('Compression not supported outside of nodejs environments.');
 
-     return css;
 
-   }
 
-   //load file code - stolen from text plugin
 
-   function loadFile(path) {
 
-     if (typeof process !== "undefined" && process.versions && !!process.versions.node && require.nodeRequire) {
 
-       var fs = require.nodeRequire('fs');
 
-       var file = fs.readFileSync(path, 'utf8');
 
-       if (file.indexOf('\uFEFF') === 0)
 
-         return file.substring(1);
 
-       return file;
 
-     }
 
-     else {
 
-       var file = new java.io.File(path),
 
-         lineSeparator = java.lang.System.getProperty("line.separator"),
 
-         input = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(file), 'utf-8')),
 
-         stringBuffer, line;
 
-       try {
 
-         stringBuffer = new java.lang.StringBuffer();
 
-         line = input.readLine();
 
-         if (line && line.length() && line.charAt(0) === 0xfeff)
 
-           line = line.substring(1);
 
-         stringBuffer.append(line);
 
-         while ((line = input.readLine()) !== null) {
 
-           stringBuffer.append(lineSeparator).append(line);
 
-         }
 
-         return String(stringBuffer.toString());
 
-       }
 
-       finally {
 
-         input.close();
 
-       }
 
-     }
 
-   }
 
-   function saveFile(path, data) {
 
-     if (typeof process !== "undefined" && process.versions && !!process.versions.node && require.nodeRequire) {
 
-       var fs = require.nodeRequire('fs');
 
-       fs.writeFileSync(path, data, 'utf8');
 
-     }
 
-     else {
 
-       var content = new java.lang.String(data);
 
-       var output = new java.io.BufferedWriter(new java.io.OutputStreamWriter(new java.io.FileOutputStream(path), 'utf-8'));
 
-       try {
 
-         output.write(content, 0, content.length());
 
-         output.flush();
 
-       }
 
-       finally {
 
-         output.close();
 
-       }
 
-     }
 
-   }
 
-   //when adding to the link buffer, paths are normalised to the baseUrl
 
-   //when removing from the link buffer, paths are normalised to the output file path
 
-   function escape(content) {
 
-     return content.replace(/(["'\\])/g, '\\$1')
 
-       .replace(/[\f]/g, "\\f")
 
-       .replace(/[\b]/g, "\\b")
 
-       .replace(/[\n]/g, "\\n")
 
-       .replace(/[\t]/g, "\\t")
 
-       .replace(/[\r]/g, "\\r");
 
-   }
 
-   // NB add @media query support for media imports
 
-   var importRegEx = /@import\s*(url)?\s*(('([^']*)'|"([^"]*)")|\(('([^']*)'|"([^"]*)"|([^\)]*))\))\s*;?/g;
 
-   var absUrlRegEx = /^([^\:\/]+:\/)?\//;
 
-   
 
-   // Write Css module definition
 
-   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));};});";
 
-   var siteRoot;
 
-   var baseParts = req.toUrl('base_url').split('/');
 
-   baseParts[baseParts.length - 1] = '';
 
-   var baseUrl = baseParts.join('/');
 
-   var curModule = 0;
 
-   var config;
 
-   var writeCSSForLayer = true;
 
-   var layerBuffer = [];
 
-   var cssBuffer = {};
 
-   cssAPI.load = function(name, req, load, _config) {
 
-     //store config
 
-     config = config || _config;
 
-     if (!siteRoot) {
 
-       siteRoot = path.resolve(config.dir || path.dirname(config.out), config.siteRoot || '.') + '/';
 
-       if (isWindows)
 
-         siteRoot = siteRoot.replace(/\\/g, '/');
 
-     }
 
-     //external URLS don't get added (just like JS requires)
 
-     if (name.match(absUrlRegEx))
 
-       return load();
 
-     var fileUrl = req.toUrl(name + '.css');
 
-     if (isWindows)
 
-       fileUrl = fileUrl.replace(/\\/g, '/');
 
-     // rebase to the output directory if based on the source directory;
 
-     // baseUrl points always to the output directory, fileUrl only if
 
-     // it is not prefixed by a computed path (relative too)
 
-     var fileSiteUrl = fileUrl;
 
-     if (fileSiteUrl.indexOf(baseUrl) < 0) {
 
-       var appRoot = req.toUrl(config.appDir);
 
-       if (isWindows)
 
-         appRoot = appRoot.replace(/\\/g, '/');
 
-       if (fileSiteUrl.indexOf(appRoot) == 0)
 
-         fileSiteUrl = siteRoot + fileSiteUrl.substring(appRoot.length);
 
-     }
 
-     //add to the buffer
 
-     cssBuffer[name] = normalize(loadFile(fileUrl), fileSiteUrl, siteRoot);
 
-     load();
 
-   }
 
-   cssAPI.normalize = function(name, normalize) {
 
-     if (name.substr(name.length - 4, 4) == '.css')
 
-       name = name.substr(0, name.length - 4);
 
-     return normalize(name);
 
-   }
 
-   cssAPI.write = function(pluginName, moduleName, write, parse) {
 
-     var cssModule;
 
-     
 
-     //external URLS don't get added (just like JS requires)
 
-     if (moduleName.match(absUrlRegEx))
 
-       return;
 
-     layerBuffer.push(cssBuffer[moduleName]);
 
-     
 
-     if (!global._requirejsCssData) {
 
-       global._requirejsCssData = {
 
-         usedBy: {css: true},
 
-         css: ''
 
-       }
 
-     } else {
 
-       global._requirejsCssData.usedBy.css = true;
 
-     }
 
-     if (config.buildCSS != false) {
 
-       var style = cssBuffer[moduleName];
 
-       if (config.writeCSSModule && style) {
 
-  	    if (writeCSSForLayer) {
 
-     	  writeCSSForLayer = false;
 
-           write(writeCSSDefinition);
 
-         }
 
-         cssModule = 'define(["@writecss"], function(writeCss){\n writeCss("'+ escape(compress(style)) +'");\n})';
 
-       }
 
-       else {
 
- 		cssModule = 'define(function(){})';
 
-       }
 
-       write.asModule(pluginName + '!' + moduleName, cssModule);
 
-     }
 
-   }
 
-   cssAPI.onLayerEnd = function(write, data) {
 
-     if (config.separateCSS && config.IESelectorLimit)
 
-       throw 'RequireCSS: separateCSS option is not compatible with ensuring the IE selector limit';
 
-     if (config.separateCSS) {
 
-       var outPath = data.path.replace(/(\.js)?$/, '.css');
 
-       console.log('Writing CSS! file: ' + outPath + '\n');
 
-       var css = layerBuffer.join('');
 
-       process.nextTick(function() {
 
-         if (global._requirejsCssData) {
 
-           css = global._requirejsCssData.css = css + global._requirejsCssData.css;
 
-           delete global._requirejsCssData.usedBy.css;
 
-           if (Object.keys(global._requirejsCssData.usedBy).length === 0) {
 
-             delete global._requirejsCssData;
 
-           }
 
-         }
 
-         
 
-         saveFile(outPath, compress(css));
 
-       });
 
-     }
 
-     else if (config.buildCSS != false && config.writeCSSModule != true) {
 
-       var styles = config.IESelectorLimit ? layerBuffer : [layerBuffer.join('')];
 
-       for (var i = 0; i < styles.length; i++) {
 
-         if (styles[i] == '')
 
-           return;
 
-         write(
 
-           "(function(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));})\n"
 
-           + "('" + escape(compress(styles[i])) + "');\n"
 
-         );
 
-       }
 
-     }
 
-     //clear layer buffer for next layer
 
-     layerBuffer = [];
 
-     writeCSSForLayer = true;
 
-   }
 
-   return cssAPI;
 
- });
 
 
  |