@@ -3,6 +3,7 @@ var shell = require('shelljs');
33var grunt = require ( 'grunt' ) ;
44var spawn = require ( 'child_process' ) . spawn ;
55var version ;
6+ var CSP_CSS_HEADER = '/* Include this file in your html if you are using the CSP mode. */\n\n' ;
67
78module . exports = {
89
@@ -70,12 +71,20 @@ module.exports = {
7071
7172
7273 addStyle : function ( src , styles , minify ) {
73- styles = styles . map ( processCSS . bind ( this ) ) . join ( '\n' ) ;
74- src += styles ;
75- return src ;
74+ styles = styles . reduce ( processCSS . bind ( this ) , {
75+ js : [ src ] ,
76+ css : [ ]
77+ } ) ;
78+ return {
79+ js : styles . js . join ( '\n' ) ,
80+ css : styles . css . join ( '\n' )
81+ } ;
82+
83+ function processCSS ( state , file ) {
84+ var css = fs . readFileSync ( file ) . toString ( ) ,
85+ js ;
86+ state . css . push ( css ) ;
7687
77- function processCSS ( file ) {
78- var css = fs . readFileSync ( file ) . toString ( ) ;
7988 if ( minify ) {
8089 css = css
8190 . replace ( / \r ? \n / g, '' )
@@ -91,7 +100,10 @@ module.exports = {
91100 . replace ( / \\ / g, '\\\\' )
92101 . replace ( / ' / g, "\\'" )
93102 . replace ( / \r ? \n / g, '\\n' ) ;
94- return "!angular.$$csp() && angular.element(document).find('head').prepend('<style type=\"text/css\">" + css + "</style>');" ;
103+ js = "!angular.$$csp() && angular.element(document).find('head').prepend('<style type=\"text/css\">" + css + "</style>');" ;
104+ state . js . push ( js ) ;
105+
106+ return state ;
95107 }
96108 } ,
97109
@@ -100,7 +112,7 @@ module.exports = {
100112 var processed = src
101113 . replace ( / " N G _ V E R S I O N _ F U L L " / g, NG_VERSION . full )
102114 . replace ( / " N G _ V E R S I O N _ M A J O R " / , NG_VERSION . major )
103- . replace ( / " N G _ V E R S I O N _ M I N O R " / , NG_VERSION . minor )
115+ . replace ( / " N G _ V E R S I O N _ M I N O R " / , NG_VERSION . minor )
104116 . replace ( / " N G _ V E R S I O N _ D O T " / , NG_VERSION . dot )
105117 . replace ( / " N G _ V E R S I O N _ C D N " / , NG_VERSION . cdn )
106118 . replace ( / " N G _ V E R S I O N _ C O D E N A M E " / , NG_VERSION . codename ) ;
@@ -112,17 +124,28 @@ module.exports = {
112124 build : function ( config , fn ) {
113125 var files = grunt . file . expand ( config . src ) ;
114126 var styles = config . styles ;
127+ var processedStyles ;
115128 //concat
116- var src = files . map ( function ( filepath ) {
129+ var src = files . map ( function ( filepath ) {
117130 return grunt . file . read ( filepath ) ;
118131 } ) . join ( grunt . util . normalizelf ( '\n' ) ) ;
119132 //process
120133 var processed = this . process ( src , grunt . config ( 'NG_VERSION' ) , config . strict ) ;
121- if ( styles ) processed = this . addStyle ( processed , styles . css , styles . minify ) ;
134+ if ( styles ) {
135+ processedStyles = this . addStyle ( processed , styles . css , styles . minify ) ;
136+ processed = processedStyles . js ;
137+ if ( config . styles . generateCspCssFile ) {
138+ grunt . file . write ( removeSuffix ( config . dest ) + '-csp.css' , CSP_CSS_HEADER + processedStyles . css ) ;
139+ }
140+ }
122141 //write
123142 grunt . file . write ( config . dest , processed ) ;
124143 grunt . log . ok ( 'File ' + config . dest + ' created.' ) ;
125144 fn ( ) ;
145+
146+ function removeSuffix ( fileName ) {
147+ return fileName . replace ( / \. j s $ / , '' ) ;
148+ }
126149 } ,
127150
128151
0 commit comments