22module . exports = function ( grunt ) {
33
44var // modules
5- fs = require ( "fs" ) ,
6- path = require ( "path" ) ,
75 pygmentize = require ( "pygmentize" ) ,
8- rimraf = require ( "rimraf" ) ,
9- spawn = require ( "child_process" ) . spawn ,
106
117 // files
128 pageFiles = grunt . file . expandFiles ( "pages/*.html" ) ,
139 entryFiles = grunt . file . expandFiles ( "entries/*.xml" ) ,
1410 noteFiles = grunt . file . expandFiles ( "notes/*.xml" ) ,
15- resourceFiles = grunt . file . expandFiles ( "resources/*" ) ,
1611
1712 xmlFiles = [ ] . concat ( entryFiles , noteFiles , "cat2tax.xsl" , "categories.xml" , "entries2html.xsl" , "xml2json.xsl" ) ;
1813
19- function pathSlug ( fileName ) {
20- return path . basename ( fileName , path . extname ( fileName ) ) ;
21- }
22-
2314grunt . loadNpmTasks ( "grunt-clean" ) ;
2415grunt . loadNpmTasks ( "grunt-wordpress" ) ;
16+ grunt . loadNpmTasks ( "grunt-jquery-content" ) ;
2517
2618grunt . initConfig ( {
2719 clean : {
@@ -33,38 +25,18 @@ grunt.initConfig({
3325 xmllint : {
3426 all : xmlFiles
3527 } ,
28+ xmltidy : {
29+ all : [ ] . concat ( entryFiles , noteFiles , "categories.xml" )
30+ } ,
31+ "build-xml-entries" : {
32+ all : entryFiles
33+ } ,
34+ "build-resources" : {
35+ all : grunt . file . expandFiles ( "resources/*" )
36+ } ,
3637 wordpress : grunt . utils . _ . extend ( {
3738 dir : "dist/wordpress"
38- } , grunt . file . readJSON ( "config-stage.json" ) )
39- } ) ;
40-
41- grunt . registerTask ( "xmllint" , function ( ) {
42- var task = this ,
43- taskDone = task . async ( ) ;
44- grunt . utils . async . forEachSeries ( xmlFiles , function ( fileName , fileDone ) {
45- grunt . verbose . write ( "Linting " + fileName + "..." ) ;
46- grunt . utils . spawn ( {
47- cmd : "xmllint" ,
48- args : [ "--noout" , fileName ]
49- } , function ( err , result ) {
50- if ( err ) {
51- grunt . verbose . error ( ) ;
52- grunt . log . error ( err ) ;
53- fileDone ( ) ;
54- return ;
55- }
56- grunt . verbose . ok ( ) ;
57- fileDone ( ) ;
58- } ) ;
59- } , function ( ) {
60- if ( task . errorCount ) {
61- grunt . warn ( "Task \"" + task . name + "\" failed." ) ;
62- taskDone ( ) ;
63- return ;
64- }
65- grunt . log . writeln ( "Lint free files: " + xmlFiles . length ) ;
66- taskDone ( ) ;
67- } ) ;
39+ } , grunt . file . readJSON ( "config.json" ) )
6840} ) ;
6941
7042grunt . registerTask ( "build-pages" , function ( ) {
@@ -103,169 +75,8 @@ grunt.registerTask( "build-pages", function() {
10375 } ) ;
10476} ) ;
10577
106- grunt . registerTask ( "build-entries" , function ( ) {
107- var task = this ,
108- taskDone = task . async ( ) ,
109- // TODO make `entry` a custom post type instead of (ab)using `post`?
110- targetDir = grunt . config ( "wordpress.dir" ) + "/posts/post/" ;
111-
112- grunt . file . mkdir ( targetDir ) ;
113-
114- grunt . utils . async . forEachSeries ( entryFiles , function ( fileName , fileDone ) {
115- grunt . verbose . write ( "Transforming (pass 1: preproc-xinclude.xsl) " + fileName + "..." ) ;
116- grunt . utils . spawn ( {
117- cmd : "xsltproc" ,
118- args : [ "preproc-xinclude.xsl" , fileName ]
119- } , function ( err , pass1result ) {
120- if ( err ) {
121- grunt . verbose . error ( ) ;
122- grunt . log . error ( err ) ;
123- fileDone ( ) ;
124- return ;
125- }
126- grunt . verbose . ok ( ) ;
127-
128- var targetXMLFileName = "entries_tmp/" + path . basename ( fileName ) ;
129-
130- grunt . file . write ( targetXMLFileName , pass1result ) ;
131-
132- grunt . verbose . write ( "Transforming (pass 2: entries2html.xsl) " + fileName + "..." ) ;
133- grunt . utils . spawn ( {
134- cmd : "xsltproc" ,
135- args : [ "--xinclude" , "entries2html.xsl" , targetXMLFileName ]
136- } , function ( err , pass2result ) {
137- if ( err ) {
138- grunt . verbose . error ( ) ;
139- grunt . log . error ( err ) ;
140- fileDone ( ) ;
141- return ;
142- }
143- grunt . verbose . ok ( ) ;
144-
145- var targetHTMLFileName = targetDir + path . basename ( fileName ) ;
146- targetHTMLFileName = targetHTMLFileName . substr ( 0 , targetHTMLFileName . length - "xml" . length ) + "html" ;
147-
148- grunt . verbose . write ( "Pygmentizing " + targetHTMLFileName + "..." ) ;
149- pygmentize . file ( pass2result , function ( error , data ) {
150- if ( error ) {
151- grunt . verbose . error ( ) ;
152- grunt . log . error ( error ) ;
153- fileDone ( ) ;
154- return ;
155- }
156- grunt . verbose . ok ( ) ;
157-
158- grunt . file . write ( targetHTMLFileName , data ) ;
159-
160- fileDone ( ) ;
161- } ) ;
162- } ) ;
163- } ) ;
164- } , function ( ) {
165- if ( task . errorCount ) {
166- grunt . warn ( "Task \"" + task . name + "\" failed." ) ;
167- taskDone ( ) ;
168- return ;
169- }
170- rimraf . sync ( "entries_tmp" ) ;
171- grunt . log . writeln ( "Built " + entryFiles . length + " entries." ) ;
172- taskDone ( ) ;
173- } ) ;
174- } ) ;
175-
176- grunt . registerTask ( "build-categories" , function ( ) {
177- var task = this ,
178- taskDone = task . async ( ) ,
179- categories = { } ,
180- outFilename = grunt . config ( "wordpress.dir" ) + "/taxonomies.json" ;
181-
182- grunt . utils . spawn ( {
183- cmd : "xsltproc" ,
184- args : [ "--output" , "taxonomies.xml" , "cat2tax.xsl" , "categories.xml" ]
185- } , function ( err , result ) {
186- if ( err ) {
187- grunt . verbose . error ( ) ;
188- grunt . log . error ( err ) ;
189- taskDone ( ) ;
190- return ;
191- }
192- grunt . utils . spawn ( {
193- cmd : "xsltproc" ,
194- args : [ "--output" , outFilename , "xml2json.xsl" , "taxonomies.xml" ]
195- } , function ( err , result ) {
196- if ( err ) {
197- grunt . verbose . error ( ) ;
198- grunt . log . error ( err ) ;
199- taskDone ( ) ;
200- return ;
201- }
202- fs . unlinkSync ( "taxonomies.xml" ) ;
203- grunt . verbose . ok ( ) ;
204- taskDone ( ) ;
205- } ) ;
206- } ) ;
207- } ) ;
208-
209- grunt . registerTask ( "build-resources" , function ( ) {
210- var task = this ,
211- taskDone = task . async ( ) ,
212- targetDir = grunt . config ( "wordpress.dir" ) + "/resources/" ;
213-
214- grunt . file . mkdir ( targetDir ) ;
215-
216- grunt . utils . async . forEachSeries ( resourceFiles , function ( fileName , fileDone ) {
217- grunt . file . copy ( fileName , targetDir + path . basename ( fileName ) ) ;
218- fileDone ( ) ;
219- } , function ( ) {
220- if ( task . errorCount ) {
221- grunt . warn ( "Task \"" + task . name + "\" failed." ) ;
222- taskDone ( ) ;
223- return ;
224- }
225- grunt . log . writeln ( "Built " + resourceFiles . length + " resources." ) ;
226- taskDone ( ) ;
227- } ) ;
228- } ) ;
229-
230- grunt . registerTask ( "xmltidy" , function ( ) {
231- var task = this ,
232- taskDone = task . async ( ) ,
233- filesToTidy = [ ] . concat ( entryFiles , noteFiles , "categories.xml" ) ;
234-
235- // Only tidy files that are lint free
236- task . requires ( "xmllint" ) ;
237-
238- grunt . utils . async . forEachSeries ( filesToTidy , function ( fileName , fileDone ) {
239- grunt . verbose . write ( "Tidying " + fileName + "..." ) ;
240- grunt . utils . spawn ( {
241- cmd : "xmllint" ,
242- args : [ "--format" , fileName ]
243- } , function ( err , result ) {
244- if ( err ) {
245- grunt . verbose . error ( ) ;
246- grunt . log . error ( err ) ;
247- fileDone ( ) ;
248- return ;
249- }
250- grunt . verbose . ok ( ) ;
251-
252- grunt . file . write ( fileName , result ) ;
253-
254- fileDone ( ) ;
255- } ) ;
256- } , function ( ) {
257- if ( task . errorCount ) {
258- grunt . warn ( "Task \"" + task . name + "\" failed." ) ;
259- taskDone ( ) ;
260- return ;
261- }
262- grunt . log . writeln ( "Tidied " + filesToTidy . length + " files." ) ;
263- taskDone ( ) ;
264- } ) ;
265- } ) ;
266-
26778grunt . registerTask ( "default" , "build-wordpress" ) ;
268- grunt . registerTask ( "build-wordpress" , "clean lint xmllint build-pages build-entries build-categories build-resources" ) ;
79+ grunt . registerTask ( "build-wordpress" , "clean lint xmllint build-pages build-xml- entries build-xml -categories build-resources" ) ;
26980grunt . registerTask ( "tidy" , "xmllint xmltidy" ) ;
27081
27182} ;
0 commit comments