@@ -3,6 +3,7 @@ var shell = require('shelljs');
3
3
var grunt = require ( 'grunt' ) ;
4
4
var spawn = require ( 'child_process' ) . spawn ;
5
5
var version ;
6
+ var CSP_CSS_HEADER = '/* Include this file in your html if you are using the CSP mode. */\n\n' ;
6
7
7
8
module . exports = {
8
9
@@ -70,12 +71,20 @@ module.exports = {
70
71
71
72
72
73
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 ) ;
76
87
77
- function processCSS ( file ) {
78
- var css = fs . readFileSync ( file ) . toString ( ) ;
79
88
if ( minify ) {
80
89
css = css
81
90
. replace ( / \r ? \n / g, '' )
@@ -91,7 +100,10 @@ module.exports = {
91
100
. replace ( / \\ / g, '\\\\' )
92
101
. replace ( / ' / g, "\\'" )
93
102
. 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 ;
95
107
}
96
108
} ,
97
109
@@ -100,7 +112,7 @@ module.exports = {
100
112
var processed = src
101
113
. replace ( / " N G _ V E R S I O N _ F U L L " / g, NG_VERSION . full )
102
114
. 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 )
Has conversations. Original line has conversations. 104
116
. replace ( / " N G _ V E R S I O N _ D O T " / , NG_VERSION . dot )
105
117
. replace ( / " N G _ V E R S I O N _ C D N " / , NG_VERSION . cdn )
106
118
. 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 = {
112
124
build : function ( config , fn ) {
113
125
var files = grunt . file . expand ( config . src ) ;
114
126
var styles = config . styles ;
127
+ var processedStyles ;
115
128
//concat
116
- var src = files . map ( function ( filepath ) {
129
+ var src = files . map ( function ( filepath ) {
117
130
return grunt . file . read ( filepath ) ;
118
131
} ) . join ( grunt . util . normalizelf ( '\n' ) ) ;
119
132
//process
120
133
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
+ }
122
141
//write
123
142
grunt . file . write ( config . dest , processed ) ;
124
143
grunt . log . ok ( 'File ' + config . dest + ' created.' ) ;
125
144
fn ( ) ;
145
+
146
+ function removeSuffix ( fileName ) {
147
+ return fileName . replace ( / \. j s $ / , '' ) ;
148
+ }
126
149
} ,
127
150
128
151