@@ -5,7 +5,8 @@ var // files
5
5
pageFiles = grunt . file . expandFiles ( "pages/*.html" ) ,
6
6
entryFiles = grunt . file . expandFiles ( "entries/*.xml" ) ,
7
7
noteFiles = grunt . file . expandFiles ( "notes/*.xml" ) ,
8
-
8
+ path = require ( "path" ) ,
9
+ rimraf = require ( "rimraf" ) ,
9
10
xmlFiles = [ ] . concat ( entryFiles , noteFiles , "cat2tax.xsl" , "categories.xml" , "entries2html.xsl" , "xml2json.xsl" ) ;
10
11
11
12
grunt . loadNpmTasks ( "grunt-clean" ) ;
@@ -39,6 +40,91 @@ grunt.initConfig({
39
40
} , grunt . file . readJSON ( "config.json" ) )
40
41
} ) ;
41
42
43
+
44
+ grunt . registerMultiTask ( "build-pages" , "Process html files as pages" , function ( ) {
45
+ var task = this ,
46
+ taskDone = task . async ( ) ,
47
+ files = this . data ,
48
+ targetDir = grunt . config ( "wordpress.dir" ) + "/posts/page/" ;
49
+
50
+ grunt . file . mkdir ( targetDir ) ;
51
+
52
+ grunt . utils . async . forEachSeries ( files , function ( fileName , fileDone ) {
53
+ var targetFileName = targetDir + fileName . replace ( / ^ .+ ?\/ / , "" ) ;
54
+
55
+ grunt . verbose . write ( "Processing " + fileName + "..." ) ;
56
+ grunt . file . copy ( fileName , targetFileName ) ;
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 ( "Built " + files . length + " pages." ) ;
66
+ taskDone ( ) ;
67
+ } ) ;
68
+ } ) ;
69
+
70
+ grunt . registerMultiTask ( "build-xml-entries" , "Process API xml files with xsl" , function ( ) {
71
+ var task = this ,
72
+ taskDone = task . async ( ) ,
73
+ files = this . data ,
74
+ // TODO make `entry` a custom post type instead of (ab)using `post`?
75
+ targetDir = grunt . config ( "wordpress.dir" ) + "/posts/post/" ;
76
+
77
+ grunt . file . mkdir ( targetDir ) ;
78
+
79
+ grunt . utils . async . forEachSeries ( files , function ( fileName , fileDone ) {
80
+ grunt . verbose . write ( "Transforming (pass 1: preproc-xinclude.xsl) " + fileName + "..." ) ;
81
+ grunt . utils . spawn ( {
82
+ cmd : "xsltproc" ,
83
+ args : [ "preproc-xinclude.xsl" , fileName ]
84
+ } , function ( err , pass1result ) {
85
+ if ( err ) {
86
+ grunt . verbose . error ( ) ;
87
+ grunt . log . error ( err ) ;
88
+ fileDone ( ) ;
89
+ return ;
90
+ }
91
+ grunt . verbose . ok ( ) ;
92
+
93
+ var targetXMLFileName = "entries_tmp/" + path . basename ( fileName ) ;
94
+
95
+ grunt . file . write ( targetXMLFileName , pass1result ) ;
96
+
97
+ grunt . verbose . write ( "Transforming (pass 2: entries2html.xsl) " + fileName + "..." ) ;
98
+ grunt . utils . spawn ( {
99
+ cmd : "xsltproc" ,
100
+ args : [ "--xinclude" , "entries2html.xsl" , targetXMLFileName ]
101
+ } , function ( err , pass2result ) {
102
+ if ( err ) {
103
+ grunt . verbose . error ( ) ;
104
+ grunt . log . error ( err ) ;
105
+ fileDone ( ) ;
106
+ return ;
107
+ }
108
+ grunt . verbose . ok ( ) ;
109
+
110
+ var targetHTMLFileName = targetDir + path . basename ( fileName ) ;
111
+ targetHTMLFileName = targetHTMLFileName . substr ( 0 , targetHTMLFileName . length - "xml" . length ) + "html" ;
112
+ grunt . file . write ( targetHTMLFileName , pass2result ) ;
113
+ fileDone ( ) ;
114
+ } ) ;
115
+ } ) ;
116
+ } , function ( ) {
117
+ if ( task . errorCount ) {
118
+ grunt . warn ( "Task \"" + task . name + "\" failed." ) ;
119
+ taskDone ( ) ;
120
+ return ;
121
+ }
122
+ rimraf . sync ( "entries_tmp" ) ;
123
+ grunt . log . writeln ( "Built " + files . length + " entries." ) ;
124
+ taskDone ( ) ;
125
+ } ) ;
126
+ } ) ;
127
+
42
128
grunt . registerTask ( "default" , "build-wordpress" ) ;
43
129
grunt . registerTask ( "build-wordpress" , "clean lint xmllint build-pages build-xml-entries build-xml-categories build-resources" ) ;
44
130
grunt . registerTask ( "tidy" , "xmllint xmltidy" ) ;
0 commit comments