diff options
| author | tigbro | 2013-10-14 12:06:26 -0700 |
|---|---|---|
| committer | Igor Minar | 2013-10-22 15:21:23 -0700 |
| commit | a86cf20e67202d614bbcaf038c5e04db94483256 (patch) | |
| tree | 9d8eadd5de50d6ba2b96f9432cee256647e6b681 /lib | |
| parent | b9557b0a86206d938a738ea470736d011dff7e1a (diff) | |
| download | angular.js-a86cf20e67202d614bbcaf038c5e04db94483256.tar.bz2 | |
fix: don't inline css in csp mode.
Also add `angular-csp.css` to the resulting build.
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/grunt/utils.js | 41 |
1 files changed, 32 insertions, 9 deletions
diff --git a/lib/grunt/utils.js b/lib/grunt/utils.js index c7d4431b..ababf2f6 100644 --- a/lib/grunt/utils.js +++ b/lib/grunt/utils.js @@ -3,6 +3,7 @@ var shell = require('shelljs'); var grunt = require('grunt'); var spawn = require('child_process').spawn; var version; +var CSP_CSS_HEADER = '/* Include this file in your html if you are using the CSP mode. */\n\n'; module.exports = { @@ -70,12 +71,20 @@ module.exports = { addStyle: function(src, styles, minify){ - styles = styles.map(processCSS.bind(this)).join('\n'); - src += styles; - return src; + styles = styles.reduce(processCSS.bind(this), { + js: [src], + css: [] + }); + return { + js: styles.js.join('\n'), + css: styles.css.join('\n') + }; + + function processCSS(state, file) { + var css = fs.readFileSync(file).toString(), + js; + state.css.push(css); - function processCSS(file){ - var css = fs.readFileSync(file).toString(); if(minify){ css = css .replace(/\r?\n/g, '') @@ -91,7 +100,10 @@ module.exports = { .replace(/\\/g, '\\\\') .replace(/'/g, "\\'") .replace(/\r?\n/g, '\\n'); - return "!angular.$$csp() && angular.element(document).find('head').prepend('<style type=\"text/css\">" + css + "</style>');"; + js = "!angular.$$csp() && angular.element(document).find('head').prepend('<style type=\"text/css\">" + css + "</style>');"; + state.js.push(js); + + return state; } }, @@ -100,7 +112,7 @@ module.exports = { var processed = src .replace(/"NG_VERSION_FULL"/g, NG_VERSION.full) .replace(/"NG_VERSION_MAJOR"/, NG_VERSION.major) - .replace(/"NG_VERSION_MINOR"/, NG_VERSION.minor) + .replace(/"NG_VERSION_ MINOR"/, NG_VERSION.minor) .replace(/"NG_VERSION_DOT"/, NG_VERSION.dot) .replace(/"NG_VERSION_CDN"/, NG_VERSION.cdn) .replace(/"NG_VERSION_CODENAME"/, NG_VERSION.codename); @@ -112,17 +124,28 @@ module.exports = { build: function(config, fn){ var files = grunt.file.expand(config.src); var styles = config.styles; + var processedStyles; //concat - var src = files.map(function(filepath){ + var src = files.map(function(filepath) { return grunt.file.read(filepath); }).join(grunt.util.normalizelf('\n')); //process var processed = this.process(src, grunt.config('NG_VERSION'), config.strict); - if (styles) processed = this.addStyle(processed, styles.css, styles.minify); + if (styles) { + processedStyles = this.addStyle(processed, styles.css, styles.minify); + processed = processedStyles.js; + if (config.styles.generateCspCssFile) { + grunt.file.write(removeSuffix(config.dest) + '-csp.css', CSP_CSS_HEADER + processedStyles.css); + } + } //write grunt.file.write(config.dest, processed); grunt.log.ok('File ' + config.dest + ' created.'); fn(); + + function removeSuffix(fileName) { + return fileName.replace(/\.js$/, ''); + } }, |
