' + rp_config.titleHtml + '
'
16 | post.content += rps_html;
17 | }
18 | return post;
19 | }
--------------------------------------------------------------------------------
/lib/recommend_helper.js:
--------------------------------------------------------------------------------
1 | var recommend = require('./recommend');
2 | var extractConfig = require('./recommend_config');
3 |
4 | module.exports = function (post, site) {
5 | var recommended_posts = site.data.recommended_posts;
6 | var rp_config = extractConfig(this.config);
7 | var internal = rp_config.internalLinks;
8 | var external = rp_config.externalLinks;
9 | var totalLinks = internal + external;
10 | return recommend(recommended_posts, totalLinks, post, rp_config);
11 | }
12 |
13 |
14 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "hexo-recommended-posts",
3 | "version": "1.1.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "anymatch": {
8 | "version": "3.1.1",
9 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
10 | "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
11 | "requires": {
12 | "normalize-path": "^3.0.0",
13 | "picomatch": "^2.0.4"
14 | }
15 | },
16 | "binary-extensions": {
17 | "version": "2.1.0",
18 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz",
19 | "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ=="
20 | },
21 | "bluebird": {
22 | "version": "3.7.2",
23 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
24 | "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
25 | },
26 | "braces": {
27 | "version": "3.0.2",
28 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
29 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
30 | "requires": {
31 | "fill-range": "^7.0.1"
32 | }
33 | },
34 | "camel-case": {
35 | "version": "4.1.1",
36 | "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.1.tgz",
37 | "integrity": "sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q==",
38 | "requires": {
39 | "pascal-case": "^3.1.1",
40 | "tslib": "^1.10.0"
41 | }
42 | },
43 | "chokidar": {
44 | "version": "3.4.3",
45 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz",
46 | "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==",
47 | "requires": {
48 | "anymatch": "~3.1.1",
49 | "braces": "~3.0.2",
50 | "fsevents": "~2.1.2",
51 | "glob-parent": "~5.1.0",
52 | "is-binary-path": "~2.1.0",
53 | "is-glob": "~4.0.1",
54 | "normalize-path": "~3.0.0",
55 | "readdirp": "~3.5.0"
56 | }
57 | },
58 | "clipboard": {
59 | "version": "2.0.6",
60 | "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.6.tgz",
61 | "integrity": "sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg==",
62 | "optional": true,
63 | "requires": {
64 | "good-listener": "^1.2.2",
65 | "select": "^1.1.2",
66 | "tiny-emitter": "^2.0.0"
67 | }
68 | },
69 | "cross-spawn": {
70 | "version": "7.0.3",
71 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
72 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
73 | "requires": {
74 | "path-key": "^3.1.0",
75 | "shebang-command": "^2.0.0",
76 | "which": "^2.0.1"
77 | }
78 | },
79 | "deepmerge": {
80 | "version": "4.2.2",
81 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
82 | "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg=="
83 | },
84 | "delegate": {
85 | "version": "3.2.0",
86 | "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz",
87 | "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==",
88 | "optional": true
89 | },
90 | "dom-serializer": {
91 | "version": "1.1.0",
92 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.1.0.tgz",
93 | "integrity": "sha512-ox7bvGXt2n+uLWtCRLybYx60IrOlWL/aCebWJk1T0d4m3y2tzf4U3ij9wBMUb6YJZpz06HCCYuyCDveE2xXmzQ==",
94 | "requires": {
95 | "domelementtype": "^2.0.1",
96 | "domhandler": "^3.0.0",
97 | "entities": "^2.0.0"
98 | }
99 | },
100 | "domelementtype": {
101 | "version": "2.0.2",
102 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.2.tgz",
103 | "integrity": "sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA=="
104 | },
105 | "domhandler": {
106 | "version": "3.3.0",
107 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz",
108 | "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==",
109 | "requires": {
110 | "domelementtype": "^2.0.1"
111 | }
112 | },
113 | "domutils": {
114 | "version": "2.4.2",
115 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.4.2.tgz",
116 | "integrity": "sha512-NKbgaM8ZJOecTZsIzW5gSuplsX2IWW2mIK7xVr8hTQF2v1CJWTmLZ1HOCh5sH+IzVPAGE5IucooOkvwBRAdowA==",
117 | "requires": {
118 | "dom-serializer": "^1.0.1",
119 | "domelementtype": "^2.0.1",
120 | "domhandler": "^3.3.0"
121 | }
122 | },
123 | "entities": {
124 | "version": "2.1.0",
125 | "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz",
126 | "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w=="
127 | },
128 | "fill-range": {
129 | "version": "7.0.1",
130 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
131 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
132 | "requires": {
133 | "to-regex-range": "^5.0.1"
134 | }
135 | },
136 | "fsevents": {
137 | "version": "2.1.3",
138 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
139 | "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
140 | "optional": true
141 | },
142 | "glob-parent": {
143 | "version": "5.1.1",
144 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
145 | "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
146 | "requires": {
147 | "is-glob": "^4.0.1"
148 | }
149 | },
150 | "good-listener": {
151 | "version": "1.2.2",
152 | "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz",
153 | "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=",
154 | "optional": true,
155 | "requires": {
156 | "delegate": "^3.1.2"
157 | }
158 | },
159 | "graceful-fs": {
160 | "version": "4.2.4",
161 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
162 | "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw=="
163 | },
164 | "hexo-fs": {
165 | "version": "3.1.0",
166 | "resolved": "https://registry.npmjs.org/hexo-fs/-/hexo-fs-3.1.0.tgz",
167 | "integrity": "sha512-SfoDH7zlU9Iop+bAfEONXezbNIkpVX1QqjNCBYpapilZR+xVOCfTEdlNixanrKBbLGPb2fXqrdDBFgrKuiVGQQ==",
168 | "requires": {
169 | "bluebird": "^3.5.1",
170 | "chokidar": "^3.0.0",
171 | "graceful-fs": "^4.1.11",
172 | "hexo-util": "^2.0.0"
173 | }
174 | },
175 | "hexo-util": {
176 | "version": "2.4.0",
177 | "resolved": "https://registry.npmjs.org/hexo-util/-/hexo-util-2.4.0.tgz",
178 | "integrity": "sha512-IPQvAyn0cznYMU2gskMiZ6LZEvN7wHNusrJoYxrir4f7S7POpZeDTBswiko9R1qqd+/hu07wUYZdm4ceTTCEaA==",
179 | "requires": {
180 | "bluebird": "^3.5.2",
181 | "camel-case": "^4.0.0",
182 | "cross-spawn": "^7.0.0",
183 | "deepmerge": "^4.2.2",
184 | "highlight.js": "^10.0.0",
185 | "htmlparser2": "^4.0.0",
186 | "prismjs": "^1.17.1",
187 | "strip-indent": "^3.0.0",
188 | "striptags": "^3.1.1"
189 | }
190 | },
191 | "highlight.js": {
192 | "version": "10.4.0",
193 | "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.4.0.tgz",
194 | "integrity": "sha512-EfrUGcQ63oLJbj0J0RI9ebX6TAITbsDBLbsjr881L/X5fMO9+oadKzEF21C7R3ULKG6Gv3uoab2HiqVJa/4+oA=="
195 | },
196 | "htmlparser2": {
197 | "version": "4.1.0",
198 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz",
199 | "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==",
200 | "requires": {
201 | "domelementtype": "^2.0.1",
202 | "domhandler": "^3.0.0",
203 | "domutils": "^2.0.0",
204 | "entities": "^2.0.0"
205 | }
206 | },
207 | "is-binary-path": {
208 | "version": "2.1.0",
209 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
210 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
211 | "requires": {
212 | "binary-extensions": "^2.0.0"
213 | }
214 | },
215 | "is-extglob": {
216 | "version": "2.1.1",
217 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
218 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
219 | },
220 | "is-glob": {
221 | "version": "4.0.1",
222 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
223 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
224 | "requires": {
225 | "is-extglob": "^2.1.1"
226 | }
227 | },
228 | "is-number": {
229 | "version": "7.0.0",
230 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
231 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
232 | },
233 | "isexe": {
234 | "version": "2.0.0",
235 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
236 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
237 | },
238 | "lower-case": {
239 | "version": "2.0.1",
240 | "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.1.tgz",
241 | "integrity": "sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ==",
242 | "requires": {
243 | "tslib": "^1.10.0"
244 | }
245 | },
246 | "min-indent": {
247 | "version": "1.0.1",
248 | "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
249 | "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg=="
250 | },
251 | "no-case": {
252 | "version": "3.0.3",
253 | "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.3.tgz",
254 | "integrity": "sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw==",
255 | "requires": {
256 | "lower-case": "^2.0.1",
257 | "tslib": "^1.10.0"
258 | }
259 | },
260 | "normalize-path": {
261 | "version": "3.0.0",
262 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
263 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
264 | },
265 | "pascal-case": {
266 | "version": "3.1.1",
267 | "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.1.tgz",
268 | "integrity": "sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA==",
269 | "requires": {
270 | "no-case": "^3.0.3",
271 | "tslib": "^1.10.0"
272 | }
273 | },
274 | "path-key": {
275 | "version": "3.1.1",
276 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
277 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
278 | },
279 | "picomatch": {
280 | "version": "2.2.2",
281 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
282 | "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg=="
283 | },
284 | "prismjs": {
285 | "version": "1.22.0",
286 | "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.22.0.tgz",
287 | "integrity": "sha512-lLJ/Wt9yy0AiSYBf212kK3mM5L8ycwlyTlSxHBAneXLR0nzFMlZ5y7riFPF3E33zXOF2IH95xdY5jIyZbM9z/w==",
288 | "requires": {
289 | "clipboard": "^2.0.0"
290 | }
291 | },
292 | "readdirp": {
293 | "version": "3.5.0",
294 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
295 | "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==",
296 | "requires": {
297 | "picomatch": "^2.2.1"
298 | }
299 | },
300 | "select": {
301 | "version": "1.1.2",
302 | "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz",
303 | "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=",
304 | "optional": true
305 | },
306 | "shebang-command": {
307 | "version": "2.0.0",
308 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
309 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
310 | "requires": {
311 | "shebang-regex": "^3.0.0"
312 | }
313 | },
314 | "shebang-regex": {
315 | "version": "3.0.0",
316 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
317 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
318 | },
319 | "strip-indent": {
320 | "version": "3.0.0",
321 | "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
322 | "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
323 | "requires": {
324 | "min-indent": "^1.0.0"
325 | }
326 | },
327 | "striptags": {
328 | "version": "3.1.1",
329 | "resolved": "https://registry.npmjs.org/striptags/-/striptags-3.1.1.tgz",
330 | "integrity": "sha1-yMPn/db7S7OjKjt1LltePjgJPr0="
331 | },
332 | "tiny-emitter": {
333 | "version": "2.1.0",
334 | "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz",
335 | "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==",
336 | "optional": true
337 | },
338 | "to-regex-range": {
339 | "version": "5.0.1",
340 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
341 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
342 | "requires": {
343 | "is-number": "^7.0.0"
344 | }
345 | },
346 | "tslib": {
347 | "version": "1.14.1",
348 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
349 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
350 | },
351 | "which": {
352 | "version": "2.0.2",
353 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
354 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
355 | "requires": {
356 | "isexe": "^2.0.0"
357 | }
358 | }
359 | }
360 | }
361 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "hexo-recommended-posts",
3 | "version": "1.2.0",
4 | "description": "Recommended Posts Plugin for Hexo",
5 | "main": "index.js",
6 | "repository": {
7 | "type": "git",
8 | "url": "https://github.com/huiwang/hexo-recommended-posts"
9 | },
10 | "scripts": {
11 | "test": "echo \"Error: no test specified\" && exit 1"
12 | },
13 | "keywords": [
14 | "recommendation",
15 | "hexo",
16 | "plugin"
17 | ],
18 | "author": "Hui Wang",
19 | "license": "ISC",
20 | "dependencies": {
21 | "hexo-fs": "^3.1.0"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/wechat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huiwang/hexo-recommended-posts/5d4ba9409dddd2ecbc21a045bccb6222713bed71/wechat.png
--------------------------------------------------------------------------------