6
6
* Licensed under the MIT license.
7
7
*/
8
8
9
- var fs = require ( 'fs' ) ,
10
- jade = require ( 'jade' ) ,
11
- highlighter = require ( 'highlight.js' ) ,
12
- marked = require ( 'marked' ) ;
13
-
14
9
module . exports = function ( grunt ) {
15
10
'use strict' ;
16
11
12
+ var jade = require ( 'jade' ) ,
13
+ highlighter = require ( 'highlight.js' ) ,
14
+ marked = require ( 'marked' ) ,
15
+ blog = require ( './lib/blog' ) . init ( grunt ) ;
16
+
17
17
/**
18
- * Custom task to generate grunt documentation
18
+ * Custom task to generate the grunt blog
19
19
*/
20
20
grunt . registerTask ( 'blog' , 'Compile Grunt Blog' , function ( ) {
21
- var done = this . async ( ) ;
22
21
grunt . log . ok ( 'Generating blog...' ) ;
23
22
24
23
// Set default marked options
25
24
marked . setOptions ( {
26
25
gfm :true ,
27
26
anchors :true ,
28
- base :"/" ,
27
+ base :'/' ,
29
28
pedantic :false ,
30
29
sanitize :true ,
31
30
// callback for code highlighter
@@ -40,18 +39,10 @@ module.exports = function (grunt) {
40
39
base = 'tmp/wiki/' ,
41
40
files = grunt . file . expand ( { cwd :base } , [ 'Blog-*.md' ] ) ;
42
41
43
- function formatBlogDate ( postDate ) {
44
- var postDate = postDate . split ( '-' ) ,
45
- monthNames = [ "January" , "February" , "March" , "April" , "May" , "June" ,
46
- "July" , "August" , "September" , "October" , "November" , "December" ] ;
47
- return monthNames [ parseInt ( postDate [ 1 ] , 10 ) - 1 ] + ' ' + postDate [ 2 ] + ', ' + postDate [ 0 ] ;
48
- }
49
-
50
42
names = files . map ( function ( name ) {
51
43
return name . substring ( 5 , name . length - 3 ) ;
52
44
} ) . reverse ( ) ;
53
45
54
-
55
46
// REVERSE the list, generate short article list
56
47
files . reverse ( ) . forEach ( function ( file , i ) {
57
48
var name = names [ i ] ,
@@ -60,9 +51,9 @@ module.exports = function (grunt) {
60
51
destName = name . toLowerCase ( ) ;
61
52
62
53
articleList . push ( {
63
- url : destName ,
64
- title :postTitle ,
65
- postDate : formatBlogDate ( postDate )
54
+ url :destName ,
55
+ title :postTitle ,
56
+ postDate :blog . formatDate ( postDate )
66
57
} ) ;
67
58
} ) ;
68
59
@@ -77,26 +68,21 @@ module.exports = function (grunt) {
77
68
78
69
grunt . file . copy ( src , dest , {
79
70
process :function ( src ) {
80
- try {
81
- var file = 'src/tmpl/blog.jade' ,
82
- templateData = {
83
- page :'news' ,
84
- singlePost : true ,
85
- url : destName ,
86
- title :postTitle ,
87
- postDate : formatBlogDate ( postDate ) ,
88
- postRawDate : postDate ,
89
- articleList : articleList ,
90
- content :marked ( src ) ,
91
- rawSrc : src
92
- } ;
93
- shortList . push ( templateData ) ;
94
-
95
- return jade . compile ( grunt . file . read ( file ) , { filename :file } ) ( templateData ) ;
96
- } catch ( e ) {
97
- grunt . log . error ( e ) ;
98
- grunt . fail . warn ( 'Jade failed to compile.' ) ;
99
- }
71
+ var file = 'src/tmpl/blog.jade' ,
72
+ templateData = {
73
+ page :'news' ,
74
+ singlePost :true ,
75
+ url :destName ,
76
+ title :postTitle ,
77
+ postDate :blog . formatDate ( postDate ) ,
78
+ postRawDate :postDate ,
79
+ articleList :articleList ,
80
+ content :marked ( src ) ,
81
+ rawSrc :src
82
+ } ;
83
+ shortList . push ( templateData ) ;
84
+
85
+ return jade . compile ( grunt . file . read ( file ) , { filename :file } ) ( templateData ) ;
100
86
}
101
87
} ) ;
102
88
} ) ;
@@ -105,72 +91,43 @@ module.exports = function (grunt) {
105
91
* Generate the blog page with a list of posts
106
92
*/
107
93
grunt . log . ok ( 'Generating blog front page..' ) ;
108
- try {
109
- var src = 'src/tmpl/blog.jade' ,
110
- templateData = {
111
- page :'blog' ,
112
- title :"The Grunt Blog" ,
113
- content :shortList ,
114
- articleList : articleList
115
- } ;
116
- grunt . file . write (
117
- 'build/blog.html' ,
118
- jade . compile ( grunt . file . read ( src ) , { filename :src } ) ( templateData ) ) ;
119
- } catch ( e ) {
120
- grunt . log . error ( e ) ;
121
- grunt . fail . warn ( 'Jade failed to compile.' ) ;
122
- }
123
-
94
+ var blogTpl = 'src/tmpl/blog.jade' ;
95
+ var blogOut = jade . compile ( grunt . file . read ( blogTpl ) , { filename :blogTpl } ) ( {
96
+ page :'blog' ,
97
+ title :'The Grunt Blog' ,
98
+ content :shortList ,
99
+ articleList :articleList
100
+ } ) ;
101
+ grunt . file . write ( 'build/blog.html' , blogOut ) ;
124
102
125
103
/**
126
104
* Generate the RSS feed
127
105
*/
128
106
grunt . log . ok ( 'Generating rss feed...' ) ;
129
-
130
107
// remove anchors from RSS setting
131
108
marked . setOptions ( {
132
- anchors : false
109
+ anchors :false
133
110
} ) ;
134
111
// generate the feed items with different 'marked' settings
135
- shortList . forEach ( function ( item ) {
112
+ shortList . forEach ( function ( item ) {
136
113
item . rssSrc = marked ( item . rawSrc ) ;
137
114
} ) ;
138
-
139
- try {
140
- var src = 'src/tmpl/rss.jade' ,
141
- templateData = {
142
- page :'rss' ,
143
- posts : shortList
144
- } ;
145
- grunt . file . write (
146
- 'build/atom.xml' ,
147
- jade . compile ( grunt . file . read ( src ) , { filename :src } ) ( templateData ) ) ;
148
- } catch ( e ) {
149
- grunt . log . error ( e ) ;
150
- grunt . fail . warn ( 'Jade failed to compile.' ) ;
151
- }
152
-
115
+ var rssTpl = 'src/tmpl/rss.jade' ;
116
+ var rssOut = jade . compile ( grunt . file . read ( rssTpl ) , { filename :rssTpl } ) ( {
117
+ page :'rss' ,
118
+ posts :shortList
119
+ } ) ;
120
+ grunt . file . write ( 'build/atom.xml' , rssOut ) ;
153
121
154
122
/**
155
123
* Generate the front page
156
124
*/
157
125
grunt . log . ok ( 'Generating the front page...' ) ;
158
- try {
159
- var src = 'src/tmpl/index.jade' ,
160
- templateData = {
161
- page :'index' ,
162
- news : shortList . splice ( 0 , 5 )
163
- } ;
164
- grunt . file . write (
165
- 'build/index.html' ,
166
- jade . compile ( grunt . file . read ( src ) , { filename :src } ) ( templateData ) ) ;
167
- } catch ( e ) {
168
- grunt . log . error ( e ) ;
169
- grunt . fail . warn ( 'Jade failed to compile.' ) ;
170
- }
171
-
172
-
173
- grunt . log . ok ( 'Created ' + names . length + ' files.' ) ;
174
- done ( true ) ;
126
+ var indexTpl = 'src/tmpl/index.jade' ;
127
+ var indexOut = jade . compile ( grunt . file . read ( indexTpl ) , { filename :indexTpl } ) ( {
128
+ page :'index' ,
129
+ news :shortList . splice ( 0 , 5 )
130
+ } ) ;
131
+ grunt . file . write ( 'build/index.html' , indexOut ) ;
175
132
} ) ;
176
133
} ;
0 commit comments