3
3
var pagination = require ( 'hexo-pagination' ) ;
4
4
var _pick = require ( 'lodash.pick' ) ;
5
5
6
+ function filterHTMLTags ( str ) {
7
+ return str ? str
8
+ . replace ( / \< (? ! i m g | b r ) .* ?\> / g, "" )
9
+ . replace ( / \r ? \n | \r / g, '' )
10
+ . replace ( / < i m g ( .* ) > / g, ' [Figure] ' ) : null
11
+ }
12
+ function fetchCovers ( str ) {
13
+ var temp ,
14
+ imgURLs = [ ] ,
15
+ rex = / < i m g [ ^ > ] + s r c = " ? ( [ ^ " \s ] + ) " ( .* ) > / g;
16
+ while ( temp = rex . exec ( str ) ) {
17
+ imgURLs . push ( temp [ 1 ] ) ;
18
+ }
19
+ return imgURLs . length > 0 ? imgURLs : null ;
20
+ }
21
+ function fetchCover ( str ) {
22
+ var covers = fetchCovers ( str )
23
+ return covers ? covers [ 0 ] : null ;
24
+ }
25
+
6
26
module . exports = function ( cfg , site ) {
7
27
8
28
var restful = cfg . hasOwnProperty ( 'restful' ) ? cfg . restful :
@@ -15,6 +35,7 @@ module.exports = function (cfg, site) {
15
35
date : true ,
16
36
updated : true ,
17
37
comments : true ,
38
+ cover : true ,
18
39
path : true ,
19
40
raw : false ,
20
41
excerpt : false ,
@@ -24,7 +45,8 @@ module.exports = function (cfg, site) {
24
45
} ,
25
46
categories : true ,
26
47
tags : true ,
27
- post : true
48
+ post : true ,
49
+ pages : false ,
28
50
} ,
29
51
30
52
posts = site . posts . sort ( '-date' ) . filter ( function ( post ) {
@@ -47,8 +69,9 @@ module.exports = function (cfg, site) {
47
69
updated : posts_props ( 'updated' , post . updated ) ,
48
70
comments : posts_props ( 'comments' , post . comments ) ,
49
71
path : posts_props ( 'path' , 'api/articles/' + post . slug + '.json' ) ,
50
- excerpt : posts_props ( 'excerpt' , post . excerpt ) ,
72
+ excerpt : posts_props ( 'excerpt' , filterHTMLTags ( post . excerpt ) ) ,
51
73
keywords : posts_props ( 'keywords' , cfg . keywords ) ,
74
+ cover : posts_props ( 'cover' , fetchCover ( post . content ) ) ,
52
75
content : posts_props ( 'content' , post . content ) ,
53
76
raw : posts_props ( 'raw' , post . raw ) ,
54
77
categories : posts_props ( 'categories' , function ( ) {
@@ -193,7 +216,8 @@ module.exports = function (cfg, site) {
193
216
updated : post . updated ,
194
217
comments : post . comments ,
195
218
path : path ,
196
- excerpt : post . excerpt ,
219
+ excerpt : filterHTMLTags ( post . excerpt ) ,
220
+ covers : fetchCovers ( post . content ) ,
197
221
keywords : cfg . keyword ,
198
222
content : post . content ,
199
223
categories : post . categories . map ( function ( cat ) {
@@ -213,5 +237,26 @@ module.exports = function (cfg, site) {
213
237
} ) ) ;
214
238
}
215
239
240
+ if ( restful . pages ) {
241
+ apiData = apiData . concat ( site . pages . data . map ( function ( page ) {
242
+ var safe_title = page . title . replace ( / [ ^ a - z 0 - 9 ] / gi, '-' ) . toLowerCase ( )
243
+ var path = 'api/pages/' + safe_title + '.json' ;
Has conversations. Original line has conversations.
244
+
245
+ return {
246
+ path : path ,
247
+ data : JSON . stringify ( {
248
+ title : page . title ,
249
+ date : page . date ,
250
+ updated : page . updated ,
251
+ comments : page . comments ,
252
+ path : path ,
253
+ covers : fetchCovers ( page . content ) ,
254
+ excerpt : filterHTMLTags ( page . excerpt ) ,
255
+ content : page . content
256
+ } )
257
+ } ;
258
+ } ) ) ;
259
+ }
260
+
216
261
return apiData ;
217
262
} ;