@@ -42,7 +42,7 @@ Post.prototype.create = function(data, replace, callback) {
4242 var ctx = this . context ;
4343 var config = ctx . config ;
4444
45- data . slug = slugize ( ( data . slug || data . title ) . toString ( ) , { transform : config . filename_case } ) ;
45+ data . slug = slugize ( ( data . slug || data . title ) . toString ( ) , { transform : config . filename_case } ) ;
4646 data . layout = ( data . layout || config . default_layout ) . toLowerCase ( ) ;
4747 data . date = data . date ? moment ( data . date ) : moment ( ) ;
4848
@@ -53,25 +53,21 @@ Post.prototype.create = function(data, replace, callback) {
5353 context : ctx
5454 } ) ,
5555 this . _renderScaffold ( data )
56- ] )
57- . spread ( function ( path , content ) {
58- var result = {
59- path : path ,
60- content : content
61- } ;
62-
63- return Promise . all ( [
64- // Write content to file
65- fs . writeFile ( path , content ) ,
66- // Create asset folder
67- createAssetFolder ( path , config . post_asset_folder )
68- ] )
69- . then ( function ( ) {
70- ctx . emit ( 'new' , result ) ;
71- } )
72- . thenReturn ( result ) ;
73- } )
74- . asCallback ( callback ) ;
56+ ] ) . spread ( function ( path , content ) {
57+ var result = {
58+ path : path ,
59+ content : content
60+ } ;
61+
62+ return Promise . all ( [
63+ // Write content to file
64+ fs . writeFile ( path , content ) ,
65+ // Create asset folder
66+ createAssetFolder ( path , config . post_asset_folder )
67+ ] ) . then ( function ( ) {
68+ ctx . emit ( 'new' , result ) ;
69+ } ) . thenReturn ( result ) ;
70+ } ) . asCallback ( callback ) ;
7571} ;
7672
7773function prepareFrontMatter ( data ) {
@@ -108,54 +104,52 @@ Post.prototype._renderScaffold = function(data) {
108104 var tag = this . context . extend . tag ;
109105 var yfmSplit ;
110106
111- return this . _getScaffold ( data . layout )
112- . then ( function ( scaffold ) {
113- var frontMatter = prepareFrontMatter ( _ . clone ( data ) ) ;
114- yfmSplit = yfm . split ( scaffold ) ;
115-
116- return tag . render ( yfmSplit . data , frontMatter ) ;
117- } )
118- . then ( function ( frontMatter ) {
119- var separator = yfmSplit . separator ;
120- var jsonMode = separator [ 0 ] === ';' ;
121- var content = '' ;
122- var obj ;
123-
124- // Parse front-matter
125- if ( jsonMode ) {
126- obj = JSON . parse ( '{' + frontMatter + '}' ) ;
127- } else {
128- obj = yaml . load ( frontMatter ) ;
129- }
107+ return this . _getScaffold ( data . layout ) . then ( function ( scaffold ) {
108+ var frontMatter = prepareFrontMatter ( _ . clone ( data ) ) ;
109+ yfmSplit = yfm . split ( scaffold ) ;
110+
111+ return tag . render ( yfmSplit . data , frontMatter ) ;
112+ } ) . then ( function ( frontMatter ) {
113+ var separator = yfmSplit . separator ;
114+ var jsonMode = separator [ 0 ] === ';' ;
115+ var content = '' ;
116+ var obj ;
117+
118+ // Parse front-matter
119+ if ( jsonMode ) {
120+ obj = JSON . parse ( '{' + frontMatter + '}' ) ;
121+ } else {
122+ obj = yaml . load ( frontMatter ) ;
123+ }
130124
131- // Add data which are not in the front-matter
132- var keys = Object . keys ( data ) ;
133- var key = '' ;
125+ // Add data which are not in the front-matter
126+ var keys = Object . keys ( data ) ;
127+ var key = '' ;
134128
135- for ( var i = 0 , len = keys . length ; i < len ; i ++ ) {
136- key = keys [ i ] ;
129+ for ( var i = 0 , len = keys . length ; i < len ; i ++ ) {
130+ key = keys [ i ] ;
137131
138- if ( ! preservedKeys [ key ] && obj [ key ] == null ) {
139- obj [ key ] = data [ key ] ;
140- }
132+ if ( ! preservedKeys [ key ] && obj [ key ] == null ) {
133+ obj [ key ] = data [ key ] ;
141134 }
135+ }
142136
143- // Prepend the separator
144- if ( yfmSplit . prefixSeparator ) content += separator + '\n' ;
137+ // Prepend the separator
138+ if ( yfmSplit . prefixSeparator ) content += separator + '\n' ;
145139
146- content += yfm . stringify ( obj , {
147- mode : jsonMode ? 'json' : ''
148- } ) ;
140+ content += yfm . stringify ( obj , {
141+ mode : jsonMode ? 'json' : ''
142+ } ) ;
149143
150- // Concat content
151- content += yfmSplit . content ;
144+ // Concat content
145+ content += yfmSplit . content ;
152146
153- if ( data . content ) {
154- content += '\n' + data . content ;
155- }
147+ if ( data . content ) {
148+ content += '\n' + data . content ;
149+ }
156150
157- return content ;
158- } ) ;
151+ return content ;
152+ } ) ;
159153} ;
160154
161155function createAssetFolder ( path , assetFolder ) {
@@ -183,7 +177,7 @@ Post.prototype.publish = function(data, replace, callback) {
183177 var ctx = this . context ;
184178 var config = ctx . config ;
185179 var draftDir = pathFn . join ( ctx . source_dir , '_drafts' ) ;
186- var slug = ( data . slug = slugize ( data . slug . toString ( ) , { transform : config . filename_case } ) ) ;
180+ var slug = data . slug = slugize ( data . slug . toString ( ) , { transform : config . filename_case } ) ;
187181 var regex = new RegExp ( '^' + escapeRegExp ( slug ) + '(?:[^\\/\\\\]+)' ) ;
188182 var self = this ;
189183 var src = '' ;
@@ -192,55 +186,47 @@ Post.prototype.publish = function(data, replace, callback) {
192186 data . layout = ( data . layout || config . default_layout ) . toLowerCase ( ) ;
193187
194188 // Find the draft
195- return fs
196- . listDir ( draftDir )
197- . then ( function ( list ) {
198- var item = '' ;
199-
200- for ( var i = 0 , len = list . length ; i < len ; i ++ ) {
201- item = list [ i ] ;
202- if ( regex . test ( item ) ) return item ;
203- }
204- } )
205- . then ( function ( item ) {
206- if ( ! item ) throw new Error ( 'Draft "' + slug + '" does not exist.' ) ;
207-
208- // Read the content
209- src = pathFn . join ( draftDir , item ) ;
210- return fs . readFile ( src ) ;
211- } )
212- . then ( function ( content ) {
213- // Create post
214- _ . extend ( data , yfm ( content ) ) ;
215- data . content = data . _content ;
216- delete data . _content ;
217-
218- return self . create ( data , replace ) . then ( function ( post ) {
219- result . path = post . path ;
220- result . content = post . content ;
221- } ) ;
222- } )
223- . then ( function ( ) {
224- // Remove the original draft file
225- return fs . unlink ( src ) ;
226- } )
227- . then ( function ( ) {
228- if ( ! config . post_asset_folder ) return ;
229-
230- // Copy assets
231- var assetSrc = removeExtname ( src ) ;
232- var assetDest = removeExtname ( result . path ) ;
233-
234- return fs . exists ( assetSrc ) . then ( function ( exist ) {
235- if ( ! exist ) return ;
236-
237- return fs . copyDir ( assetSrc , assetDest ) . then ( function ( ) {
238- return fs . rmdir ( assetSrc ) ;
239- } ) ;
189+ return fs . listDir ( draftDir ) . then ( function ( list ) {
190+ var item = '' ;
191+
192+ for ( var i = 0 , len = list . length ; i < len ; i ++ ) {
193+ item = list [ i ] ;
194+ if ( regex . test ( item ) ) return item ;
195+ }
196+ } ) . then ( function ( item ) {
197+ if ( ! item ) throw new Error ( 'Draft "' + slug + '" does not exist.' ) ;
198+
199+ // Read the content
200+ src = pathFn . join ( draftDir , item ) ;
201+ return fs . readFile ( src ) ;
202+ } ) . then ( function ( content ) {
203+ // Create post
204+ _ . extend ( data , yfm ( content ) ) ;
205+ data . content = data . _content ;
206+ delete data . _content ;
207+
208+ return self . create ( data , replace ) . then ( function ( post ) {
209+ result . path = post . path ;
210+ result . content = post . content ;
211+ } ) ;
212+ } ) . then ( function ( ) {
213+ // Remove the original draft file
214+ return fs . unlink ( src ) ;
215+ } ) . then ( function ( ) {
216+ if ( ! config . post_asset_folder ) return ;
217+
218+ // Copy assets
219+ var assetSrc = removeExtname ( src ) ;
220+ var assetDest = removeExtname ( result . path ) ;
221+
222+ return fs . exists ( assetSrc ) . then ( function ( exist ) {
223+ if ( ! exist ) return ;
224+
225+ return fs . copyDir ( assetSrc , assetDest ) . then ( function ( ) {
226+ return fs . rmdir ( assetSrc ) ;
240227 } ) ;
241- } )
242- . thenReturn ( result )
243- . asCallback ( callback ) ;
228+ } ) ;
229+ } ) . thenReturn ( result ) . asCallback ( callback ) ;
244230} ;
245231
246232Post . prototype . render = function ( source , data , callback ) {
@@ -251,12 +237,17 @@ Post.prototype.render = function(source, data, callback) {
251237 var cache = [ ] ;
252238 var tag = ctx . extend . tag ;
253239 var ext = data . engine || ( source ? pathFn . extname ( source ) : '' ) ;
240+
254241 var isSwig = ext === 'swig' ;
255242
256243 var disableNunjucks = false ;
244+
257245 if ( ext && ctx . render . renderer . get ( ext ) ) {
258- // disable disableNunjucks when the renderer spcify that.
246+
247+ // disable Nunjucks when the renderer spcify that.
248+
259249 disableNunjucks = disableNunjucks || ! ! ctx . render . renderer . get ( ext ) . disableNunjucks ;
250+
260251 }
261252
262253 function escapeContent ( str ) {
@@ -281,61 +272,54 @@ Post.prototype.render = function(source, data, callback) {
281272
282273 // Read content from files
283274 fs . readFile ( source ) . then ( resolve , reject ) ;
284- } )
285- . then ( function ( content ) {
286- data . content = content ;
287-
288- // Run "before_post_render" filters
289- return ctx . execFilter ( 'before_post_render' , data , { context : ctx } ) . then ( function ( ) {
290- data . content = data . content . replace ( rEscapeContent , function ( match , content ) {
291- return escapeContent ( content ) ;
292- } ) ;
275+ } ) . then ( function ( content ) {
276+ data . content = content ;
277+
278+ // Run "before_post_render" filters
279+ return ctx . execFilter ( 'before_post_render' , data , { context : ctx } ) . then ( function ( ) {
280+ data . content = data . content . replace ( rEscapeContent , function ( match , content ) {
281+ return escapeContent ( content ) ;
293282 } ) ;
294- } )
295- . then ( function ( ) {
296- // Skip rendering if this is a swig file
297- if ( isSwig ) return data . content ;
298-
299- // Escape all Swig tags
300- if ( ! disableNunjucks ) {
301- data . content = data . content
302- . replace ( rSwigFullBlock , escapeContent )
303- . replace ( rSwigBlock , escapeContent )
304- . replace ( rSwigComment , '' )
305- . replace ( rSwigVar , escapeContent ) ;
306- }
283+ } ) ;
284+ } ) . then ( function ( ) {
285+ // Skip rendering if this is a swig file
286+ if ( isSwig ) return data . content ;
287+
288+ // Escape all Swig tags
289+ if ( ! disableNunjucks ) {
290+ data . content = data . content
291+ . replace ( rSwigFullBlock , escapeContent )
292+ . replace ( rSwigBlock , escapeContent )
293+ . replace ( rSwigComment , '' )
294+ . replace ( rSwigVar , escapeContent ) ;
295+ }
307296
308- var options = data . markdown || { } ;
309- if ( ! config . highlight . enable ) options . highlight = null ;
310-
311- // Render with markdown or other renderer
312- return ctx . render . render (
313- {
314- text : data . content ,
315- path : source ,
316- engine : data . engine ,
317- toString : true ,
318- onRenderEnd : tagFilter
319- } ,
320- options
321- ) ;
322- } )
323- . then ( function ( content ) {
324- data . content = content ;
325-
326- if ( ! isSwig ) {
327- return data . content ;
328- }
297+ var options = data . markdown || { } ;
298+ if ( ! config . highlight . enable ) options . highlight = null ;
299+
300+ // Render with markdown or other renderer
301+ return ctx . render . render ( {
302+ text : data . content ,
303+ path : source ,
304+ engine : data . engine ,
305+ toString : true ,
306+ onRenderEnd : tagFilter
307+ } , options ) ;
308+ } ) . then ( function ( content ) {
309+ data . content = content ;
329310
330- // Render with Nunjucks
331- return tag . render ( data . content , data ) ;
332- } )
333- . then ( function ( content ) {
334- data . content = content ;
311+ if ( ! isSwig ) {
312+ return data . content ;
313+ }
335314
336- // Run "after_post_render" filters
337- return ctx . execFilter ( 'after_post_render' , data , { context : ctx } ) ;
338- } ) ;
315+ // Render with Nunjucks
316+ return tag . render ( data . content , data ) ;
317+ } ) . then ( function ( content ) {
318+ data . content = content ;
319+
320+ // Run "after_post_render" filters
321+ return ctx . execFilter ( 'after_post_render' , data , { context : ctx } ) ;
322+ } ) ;
339323} ;
340324
341325module . exports = Post ;
0 commit comments