hexo-adsense 1.0.26 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/LICENSE +0 -0
  3. package/dist/index.cjs +757 -0
  4. package/dist/index.d.cts +2 -0
  5. package/dist/index.d.mts +2 -0
  6. package/dist/index.d.ts +2 -0
  7. package/dist/index.js +740 -0
  8. package/dist/index.mjs +740 -0
  9. package/dist/source/adblock.css +2 -0
  10. package/{lib → dist}/source/adblock.js +0 -0
  11. package/{lib → dist}/source/article-ads.css +0 -0
  12. package/dist/source/article-ads.js +1 -0
  13. package/{lib/source/article-ads.js → dist/source/article-ads.old.js} +0 -0
  14. package/{lib → dist}/source/blogger-redirect.html +0 -0
  15. package/{lib → dist}/source/https.js +0 -0
  16. package/{lib → dist}/source/in_article_ads_test.html +0 -0
  17. package/package.json +122 -37
  18. package/{README.md → readme.md} +29 -11
  19. package/lib/index.d.ts +0 -1
  20. package/lib/index.js +0 -85
  21. package/lib/packages/hexo-cli-extras/lib/env.d.ts +0 -3
  22. package/lib/packages/hexo-cli-extras/lib/env.js +0 -49
  23. package/lib/packages/hexo-extend-injector2/index.d.ts +0 -2
  24. package/lib/packages/hexo-extend-injector2/index.js +0 -12
  25. package/lib/packages/hexo-extend-injector2/lib/bundle/css-bundle.d.ts +0 -2
  26. package/lib/packages/hexo-extend-injector2/lib/bundle/css-bundle.js +0 -64
  27. package/lib/packages/hexo-extend-injector2/lib/bundle/css-generator.d.ts +0 -2
  28. package/lib/packages/hexo-extend-injector2/lib/bundle/css-generator.js +0 -12
  29. package/lib/packages/hexo-extend-injector2/lib/bundle/handle-data-pre.d.ts +0 -2
  30. package/lib/packages/hexo-extend-injector2/lib/bundle/handle-data-pre.js +0 -28
  31. package/lib/packages/hexo-extend-injector2/lib/bundle/js-bundle.d.ts +0 -2
  32. package/lib/packages/hexo-extend-injector2/lib/bundle/js-bundle.js +0 -32
  33. package/lib/packages/hexo-extend-injector2/lib/bundle/js-generator.d.ts +0 -2
  34. package/lib/packages/hexo-extend-injector2/lib/bundle/js-generator.js +0 -8
  35. package/lib/packages/hexo-extend-injector2/lib/default-config.d.ts +0 -39
  36. package/lib/packages/hexo-extend-injector2/lib/default-config.js +0 -46
  37. package/lib/packages/hexo-extend-injector2/lib/filter.d.ts +0 -2
  38. package/lib/packages/hexo-extend-injector2/lib/filter.js +0 -22
  39. package/lib/packages/hexo-extend-injector2/lib/helper/injector.d.ts +0 -2
  40. package/lib/packages/hexo-extend-injector2/lib/helper/injector.js +0 -5
  41. package/lib/packages/hexo-extend-injector2/lib/helper/next-inject.d.ts +0 -2
  42. package/lib/packages/hexo-extend-injector2/lib/helper/next-inject.js +0 -12
  43. package/lib/packages/hexo-extend-injector2/lib/injector.d.ts +0 -29
  44. package/lib/packages/hexo-extend-injector2/lib/injector.js +0 -125
  45. package/lib/packages/hexo-extend-injector2/lib/load.d.ts +0 -3
  46. package/lib/packages/hexo-extend-injector2/lib/load.js +0 -37
  47. package/lib/packages/hexo-extend-injector2/lib/next-point.d.ts +0 -2
  48. package/lib/packages/hexo-extend-injector2/lib/next-point.js +0 -18
  49. package/lib/packages/hexo-extend-injector2/lib/next.d.ts +0 -2
  50. package/lib/packages/hexo-extend-injector2/lib/next.js +0 -99
  51. package/lib/packages/hexo-extend-injector2/lib/order.d.ts +0 -5
  52. package/lib/packages/hexo-extend-injector2/lib/order.js +0 -8
  53. package/lib/source/adblock.css +0 -2
  54. package/lib/src/article-ads.d.ts +0 -20
  55. package/lib/src/article-ads.js +0 -304
  56. package/lib/src/checkLocalHost.d.ts +0 -10
  57. package/lib/src/checkLocalHost.js +0 -37
  58. package/lib/src/config.d.ts +0 -13
  59. package/lib/src/config.js +0 -42
  60. package/lib/src/html-parser.d.ts +0 -9
  61. package/lib/src/html-parser.js +0 -26
  62. package/lib/src/log.d.ts +0 -1
  63. package/lib/src/log.js +0 -11
  64. package/lib/src/logger.d.ts +0 -3
  65. package/lib/src/logger.js +0 -25
  66. package/lib/src/md5.d.ts +0 -2
  67. package/lib/src/md5.js +0 -165
  68. package/lib/src/safestringify.d.ts +0 -2
  69. package/lib/src/safestringify.js +0 -125
  70. package/lib/src/utils.d.ts +0 -31
  71. package/lib/src/utils.js +0 -159
  72. package/lib/src/versionParser.d.ts +0 -27
  73. package/lib/src/versionParser.js +0 -40
  74. package/packages/hexo-cli-extras/.eslintrc +0 -13
  75. package/packages/hexo-cli-extras/LICENSE.md +0 -20
  76. package/packages/hexo-cli-extras/README.md +0 -146
  77. package/packages/hexo-cli-extras/docs/basic.gif +0 -0
  78. package/packages/hexo-cli-extras/docs/gui.gif +0 -0
  79. package/packages/hexo-cli-extras/docs/remove.png +0 -0
  80. package/packages/hexo-cli-extras/docs/rename.png +0 -0
  81. package/packages/hexo-cli-extras/index.js +0 -48
  82. package/packages/hexo-cli-extras/lib/edit.js +0 -209
  83. package/packages/hexo-cli-extras/lib/env.js +0 -52
  84. package/packages/hexo-cli-extras/lib/extensions.js +0 -23
  85. package/packages/hexo-cli-extras/lib/integrate.js +0 -87
  86. package/packages/hexo-cli-extras/lib/isolate.js +0 -179
  87. package/packages/hexo-cli-extras/lib/remove.js +0 -145
  88. package/packages/hexo-cli-extras/lib/rename.js +0 -171
  89. package/packages/hexo-cli-extras/package.json +0 -34
  90. package/packages/hexo-extend-injector2/.eslintrc +0 -4
  91. package/packages/hexo-extend-injector2/.github/workflows/linter.yml +0 -27
  92. package/packages/hexo-extend-injector2/.github/workflows/tester.yml +0 -24
  93. package/packages/hexo-extend-injector2/.vscode/settings.json +0 -10
  94. package/packages/hexo-extend-injector2/LICENSE +0 -165
  95. package/packages/hexo-extend-injector2/README-ZH.md +0 -189
  96. package/packages/hexo-extend-injector2/README.md +0 -191
  97. package/packages/hexo-extend-injector2/USAGE.md +0 -38
  98. package/packages/hexo-extend-injector2/index.js +0 -14
  99. package/packages/hexo-extend-injector2/lib/bundle/css-bundle.js +0 -79
  100. package/packages/hexo-extend-injector2/lib/bundle/css-generator.js +0 -13
  101. package/packages/hexo-extend-injector2/lib/bundle/handle-data-pre.js +0 -29
  102. package/packages/hexo-extend-injector2/lib/bundle/js-bundle.js +0 -42
  103. package/packages/hexo-extend-injector2/lib/bundle/js-generator.js +0 -10
  104. package/packages/hexo-extend-injector2/lib/default-config.js +0 -52
  105. package/packages/hexo-extend-injector2/lib/filter.js +0 -24
  106. package/packages/hexo-extend-injector2/lib/helper/injector.js +0 -6
  107. package/packages/hexo-extend-injector2/lib/helper/next-inject.js +0 -14
  108. package/packages/hexo-extend-injector2/lib/injector.js +0 -128
  109. package/packages/hexo-extend-injector2/lib/load.js +0 -45
  110. package/packages/hexo-extend-injector2/lib/next-point.js +0 -19
  111. package/packages/hexo-extend-injector2/lib/next.js +0 -87
  112. package/packages/hexo-extend-injector2/lib/order.js +0 -9
  113. package/packages/hexo-extend-injector2/package.json +0 -49
  114. package/packages/hexo-extend-injector2/renovate.json +0 -6
  115. package/packages/hexo-extend-injector2/test/.eslintrc +0 -3
  116. package/packages/hexo-extend-injector2/test/index.js +0 -18
  117. package/packages/hexo-extend-injector2/test/lib/bundle/bundle-css.js +0 -86
  118. package/packages/hexo-extend-injector2/test/lib/bundle/bundle-js.js +0 -36
  119. package/packages/hexo-extend-injector2/test/lib/bundle/test.css +0 -3
  120. package/packages/hexo-extend-injector2/test/lib/bundle/test.js +0 -5
  121. package/packages/hexo-extend-injector2/test/lib/helper/injector.js +0 -45
  122. package/packages/hexo-extend-injector2/test/lib/helper/next-inject.js +0 -69
  123. package/packages/hexo-extend-injector2/test/lib/hexo-compatible.js +0 -250
  124. package/packages/hexo-extend-injector2/test/lib/hexo-injector.js +0 -37
  125. package/packages/hexo-extend-injector2/test/lib/injector.js +0 -93
  126. package/packages/memoize/CHANGELOG.md +0 -82
  127. package/packages/memoize/CHANGES +0 -124
  128. package/packages/memoize/LICENSE +0 -15
  129. package/packages/memoize/README.md +0 -503
  130. package/packages/memoize/ext/async.js +0 -154
  131. package/packages/memoize/ext/dispose.js +0 -33
  132. package/packages/memoize/ext/max-age.js +0 -90
  133. package/packages/memoize/ext/max.js +0 -27
  134. package/packages/memoize/ext/promise.js +0 -147
  135. package/packages/memoize/ext/ref-counter.js +0 -48
  136. package/packages/memoize/index.js +0 -34
  137. package/packages/memoize/lib/configure-map.js +0 -182
  138. package/packages/memoize/lib/methods.js +0 -32
  139. package/packages/memoize/lib/registered-extensions.js +0 -1
  140. package/packages/memoize/lib/resolve-length.js +0 -15
  141. package/packages/memoize/lib/resolve-normalize.js +0 -17
  142. package/packages/memoize/lib/resolve-resolve.js +0 -21
  143. package/packages/memoize/lib/weak.js +0 -134
  144. package/packages/memoize/methods-plain.js +0 -3
  145. package/packages/memoize/methods.js +0 -3
  146. package/packages/memoize/normalizers/get-1.js +0 -29
  147. package/packages/memoize/normalizers/get-fixed.js +0 -71
  148. package/packages/memoize/normalizers/get-primitive-fixed.js +0 -16
  149. package/packages/memoize/normalizers/get.js +0 -90
  150. package/packages/memoize/normalizers/primitive.js +0 -9
  151. package/packages/memoize/package.json +0 -60
  152. package/packages/memoize/plain.js +0 -37
  153. package/packages/memoize/profile.js +0 -107
  154. package/packages/memoize/repository.md +0 -1
  155. package/packages/memoize/weak-plain.js +0 -3
  156. package/packages/memoize/weak.js +0 -3
  157. package/unused.md +0 -12
@@ -1,209 +0,0 @@
1
- 'use strict';
2
-
3
- var chalk = require('chalk');
4
- var moment = require('moment');
5
- var open = require('opn');
6
- var editor = process.env.EDITOR;
7
- var spawn = require('child_process').spawn;
8
- var path = require('path');
9
- var inquirer = require('inquirer');
10
- var Promise = require('bluebird');
11
-
12
- module.exports = function modExports(args) {
13
- var filters = {
14
- title: args._ || '',
15
-
16
- after: args.a || args.after || null,
17
- before: args.b || args.before || null,
18
- cat: args.c || args.category || args.categories || null,
19
- draft: args.draft || args.drafts || null,
20
- folder: args.f || args.folder || null,
21
- layout: args.l || args.layout || null,
22
- tag: args.t || args.tag || null,
23
- };
24
-
25
- var gui = args.g || args.gui || !editor;
26
- var page = args.p || args.page || args.pages || null;
27
-
28
- // load in the posts before processing them
29
- this.load().then(function loadDB() {
30
- var sourceDir = this.source_dir;
31
- var searchDir = sourceDir;
32
-
33
- var query = (page) ? 'pages' : 'posts';
34
-
35
- // the following promise chain details the main functionality
36
- loadArticles(query, this.locals).then(function filter(articles) {
37
- return filterArticles(articles, filters);
38
- }).then(function select(filtered) {
39
- return selectArticle(filtered);
40
- }).then(function openFn(selected) {
41
- openFile(selected);
42
- }).catch(function catchAll(err) {
43
- console.log(err.stack ? chalk.red(err.stack) : chalk.red('Error: ') + chalk.gray(err));
44
- });
45
-
46
- function loadArticles(dataType, locals) {
47
- return Promise.resolve(locals.get(dataType).sort('-date').toArray());
48
- }
49
-
50
- function filterArticles(items, filterObj) {
51
- var results;
52
- // allow omission of leading underscore or trailing s for the common _drafts and _posts folders;
53
- if (/post|draft/.test(filterObj.folder)) {
54
- filterObj.folder = (/^_/.test(filterObj.folder)) ? filterObj.folder : '_' + filterObj.folder;
55
- filterObj.folder = (/s$/.test(filterObj.folder)) ? filterObj.folder : filterObj.folder + 's';
56
- }
57
-
58
- results = filterTitle(items, filterObj.title);
59
-
60
- results = (filterObj.draft) ? filterDrafts(results) : results;
61
- results = (filterObj.layout) ? filterLayout(results, filterObj.layout) : results;
62
- results = (filterObj.folder) ? filterFolder(results, filterObj.folder) : results;
63
- results = (filterObj.tag) ? filterTag(results, filterObj.tag) : results;
64
- results = (filterObj.cat) ? filterCategory(results, filterObj.cat) : results;
65
- results = (filterObj.before) ? filterBefore(results, filterObj.before) : results;
66
- results = (filterObj.after) ? filterAfter(results, filterObj.after) : results;
67
-
68
- return results;
69
-
70
- // filter the posts with the supplied regular expression
71
- function filterTitle(posts, title) {
72
- var reTitle = title.map(function makeRE(word) {
73
- return new RegExp(word, 'i');
74
- });
75
-
76
- return posts.filter(function filterPosts(post) {
77
- return reTitle.every(function checkRE(regex) {
78
- return regex.test(post.title) || regex.test(post.slug);
79
- });
80
- });
81
- }
82
-
83
- // filter the posts using a subfolder if supplied
84
- function filterFolder(posts, folder) {
85
- var reFolder = new RegExp(folder);
86
- return posts.filter(function filterPosts(post) {
87
- return reFolder.test(post.source.substr(0, post.source.lastIndexOf(path.sep)));
88
- });
89
- }
90
-
91
- // filter the posts using a tag if supplied
92
- function filterTag(posts, tag) {
93
- var reTag = new RegExp(tag);
94
- return posts.filter(function filterPosts(post) {
95
- return post.tags.data.some(function checkRe(postTag) {
96
- return reTag.test(postTag.name);
97
- });
98
- });
99
- }
100
-
101
- // filter the posts using a category if supplied
102
- function filterCategory(posts, cat) {
103
- var reCat = new RegExp(cat);
104
- return posts.filter(function filterPosts(post) {
105
- return post.categories.data.some(function checkRe(postCat) {
106
- return reCat.test(postCat.name);
107
- });
108
- });
109
- }
110
-
111
- // filter the posts using a layout if supplied
112
- function filterLayout(posts, layout) {
113
- var reLayout = new RegExp(layout, 'i');
114
-
115
- return posts.filter(function filterPosts(post) {
116
- return reLayout.test(post.layout);
117
- });
118
- }
119
-
120
- // filter out all non-published posts
121
- function filterDrafts(posts) {
122
- return posts.filter(function filterPosts(post) {
123
- return !post.published;
124
- });
125
- }
126
-
127
- // filter the posts using a before date if supplied
128
- function filterBefore(posts, before) {
129
- var momentBefore = moment(before.replace(/\//g, '-'), 'MM-DD-YYYY', true);
130
- if (!momentBefore.isValid()) {
131
- console.log(chalk.red('Before date is not valid (expecting `MM-DD-YYYY`), ignoring argument.'));
132
- return posts;
133
- }
134
-
135
- return posts.filter(function filterPosts(post) {
136
- return moment(post.date).isBefore(momentBefore);
137
- });
138
- }
139
-
140
- // filter the posts using an after date if supplied
141
- function filterAfter(posts, after) {
142
- var momentAfter = moment(after.replace(/\//g, '-'), 'MM-DD-YYYY', true);
143
- if (!momentAfter.isValid()) {
144
- console.log(chalk.red('After date is not valid (expecting `MM-DD-YYYY`), ignoring argument.'));
145
- return posts;
146
- }
147
-
148
- return posts.filter(function filterPosts(post) {
149
- return moment(post.date).isAfter(momentAfter);
150
- });
151
- }
152
- }
153
-
154
- function selectArticle(items) {
155
- if (items.length === 0) {
156
- return Promise.reject('Sorry, no articles match your query.');
157
- }
158
-
159
- if (items.length === 1) {
160
- // no menu necessary if there is only one matching file
161
- var selected = path.join(searchDir, items[0].source);
162
- return Promise.resolve(selected);
163
- }
164
-
165
- // populate a list of entries to use for the menu -- slugs are easy because they show the subfolder and can easily
166
- // be put back together with the searchDir to open the file
167
- var entries = items.map(function makeEntries(post) {
168
- var entry = '';
169
- var loc = post.source.substr(0, post.source.lastIndexOf(path.sep));
170
- if (!post.published) {
171
- entry = ['[', chalk.yellow.bgBlack('draft'), '] ', post.title].join('');
172
- } else {
173
- entry = ['[', chalk.gray(post.date.format('MM-DD-YYYY')), '] ', post.title, ' (', chalk.green(loc), ')'].join('');
174
- }
175
-
176
- return entry;
177
- });
178
-
179
- // display the menu
180
- return inquirer.prompt([
181
- {
182
- type: 'list',
183
- name: 'file',
184
- message: 'Select the file you wish to edit.',
185
- choices: entries,
186
- }
187
- ]).then(function getAnswer(answer) {
188
- var pos = entries.indexOf(answer.file);
189
- var selected = path.join(sourceDir, items[pos].source);
190
-
191
- if (!selected) {
192
- return Promise.reject('Invalid choice.');
193
- }
194
- return selected;
195
- });
196
- }
197
-
198
- // spawn process and open with associated gui or terminal editor
199
- function openFile(file) {
200
- var edit;
201
- if (!editor || gui) {
202
- open(file);
203
- } else {
204
- edit = spawn(editor, [file], {stdio: 'inherit'});
205
- edit.on('exit', process.exit);
206
- }
207
- }
208
- }.bind(this));
209
- };
@@ -1,52 +0,0 @@
1
- "use strict";
2
- const Hexo = require("hexo");
3
- const { memoize } = require("underscore");
4
- const argv = require("minimist")(process.argv.slice(2));
5
-
6
- /**
7
- * Check is production or development
8
- * @param {Hexo} inHexo
9
- * @returns
10
- */
11
- const getEnv = memoize(function (inHexo) {
12
- var DEV = "development";
13
- var PRD = "production";
14
- // --development
15
- const arg = typeof argv["development"] == "boolean" && argv["development"];
16
-
17
- // set NODE_ENV = "development"
18
- const env = process.env.NODE_ENV && process.env.NODE_ENV.toString().toLowerCase() === "development";
19
-
20
- // define is development
21
- const isDev = arg || env;
22
-
23
- if (inHexo) {
24
- if (isDev) return DEV;
25
- if (typeof inHexo.env.args.development == "boolean" && inHexo.env.args.development) return DEV;
26
- if (inHexo.env.args._ && inHexo.env.args._.length > 0) {
27
- for (var i = 0; i < inHexo.env.args._.length; i++) {
28
- if (inHexo.env.args._[i] == "s" || inHexo.env.args._[i] == "server") return DEV;
29
- if (inHexo.env.args._[i] == "d" || inHexo.env.args._[i] == "deploy") return PRD;
30
- if (inHexo.env.args._[i] == "g" || inHexo.env.args._[i] == "generate") return PRD;
31
- }
32
- }
33
- }
34
-
35
- return null;
36
- });
37
-
38
- const isDev = memoize(function (hexo) {
39
- return getEnv(hexo) == "development";
40
- });
41
-
42
- const isProd = memoize(function (hexo) {
43
- return getEnv(hexo) == "production";
44
- });
45
-
46
- module.exports = {
47
- env: function (inHexo) {
48
- return getEnv(inHexo);
49
- },
50
- isProd,
51
- isDev,
52
- };
@@ -1,23 +0,0 @@
1
- 'use strict';
2
-
3
- module.exports = function modExports(hexo) {
4
- var open = require('opn');
5
- var editor = process.env.EDITOR;
6
- var spawn = require('child_process').spawn;
7
-
8
- // extend `hexo new` to open newly created post/draft
9
- hexo.on('new', function onNew(post) {
10
- var edit;
11
- var content = post.content;
12
-
13
- // only open a new empty post -- prevent opening on publishing an already written one
14
- if (content.substr(content.indexOf('\n---\n')).length === 5) {
15
- if (!editor) {
16
- open(post.path);
17
- } else {
18
- edit = spawn(editor, [post.path], {stdio: 'inherit'});
19
- edit.on('exit', process.exit);
20
- }
21
- }
22
- });
23
- };
@@ -1,87 +0,0 @@
1
- 'use strict';
2
-
3
- var Promise = require('bluebird');
4
- var chalk = require('chalk');
5
- var fsStat = Promise.promisify(require('fs').stat);
6
- var fsRename = Promise.promisify(require('fs').rename);
7
- var fsReaddir = Promise.promisify(require('fs').readdir);
8
- var path = require('path');
9
-
10
- module.exports = function modExports() {
11
-
12
- // load DB (kind of unnecessary here, but it does give easy access to source_dir)
13
- this.load().then(function loadDB() {
14
- var postsDir = path.join(this.source_dir, '_posts');
15
- var exileDir = path.join(postsDir, '_exile');
16
-
17
- isExileDir(exileDir).then(function checkExileDir(exists) {
18
- if (!exists) {
19
- process.exit();
20
- }
21
- }).then(function lsDir() {
22
- return getExiledPosts(exileDir);
23
- }).then(function checkExiledPosts(files) {
24
- if (!files) {
25
- console.log(chalk.red('No exiled posts detected. Exiting..'));
26
- process.exit();
27
- } else {
28
- return files;
29
- }
30
- }).then(function processFiles(files) {
31
- // set the exiled files up for restoration
32
- return files.map(function mapAbsolutePaths(file) {
33
- return {
34
- origin: path.join(exileDir, file),
35
- destination: path.join(postsDir, file),
36
- };
37
- });
38
- }).then(function doIntegrate(files) {
39
- var movePromises = files.map(function makePromise(file) {
40
- return new Promise(function returnPromise(resolve) {
41
- resolve(move(file.origin, file.destination));
42
- });
43
- });
44
-
45
- Promise.all(movePromises).then(function allDone() {
46
- console.log(chalk.gray('All exiled posts and asset directories restored.'));
47
- });
48
- }).catch(function catchUncaught(err) {
49
- console.log(err.stack ? chalk.red(err.stack) : chalk.red('Error: ') + chalk.gray(err));
50
- });
51
-
52
- function move(origin, destination) {
53
- return fsRename(origin, destination).then(function doMove() {
54
- // console.log('%s moved to %s', origin, destination);
55
- }).catch(function catchMove(err) {
56
- console.log('%s could not be moved to %s: %s', origin, destination, err);
57
- });
58
- }
59
-
60
- function isExileDir(dir) {
61
- return fsStat(dir).then(function doCheckDir(stats) {
62
- if (stats.isFile()) {
63
- console.log(chalk.gray(dir), 'seems to be a file on your filesystem! It needs to be either non-existent or a directory, so please rename your _exile post and run', chalk.yellow('hexo isolate'), 'before using this command.');
64
- return false;
65
- } else if (stats.isDirectory()) {
66
- return true;
67
- } else {
68
- console.log(chalk.gray(dir), 'seems to be neither a file nor a directory! This really shouldn\'t be happening, please issue a bug report.');
69
- return false;
70
- }
71
- }).catch(function catchCheckDir() {
72
- // The directory doesn't exist
73
- console.log(chalk.red('No _exile dir detected. Have you run'), chalk.yellow('hexo isolate'), chalk.red('first?'));
74
- return false;
75
- });
76
- }
77
-
78
- function getExiledPosts(dir) {
79
- return fsReaddir(dir).then(function doReadDir(contents) {
80
- return contents;
81
- }).catch(function catchCheckDir(err) {
82
- console.log(chalk.red('Error: '), err);
83
- });
84
- }
85
- }.bind(this));
86
- };
87
-
@@ -1,179 +0,0 @@
1
- 'use strict';
2
-
3
- var Promise = require('bluebird');
4
- var chalk = require('chalk');
5
- var inquirer = require('inquirer');
6
- var fsStat = Promise.promisify(require('fs').stat);
7
- var fsRename = Promise.promisify(require('fs').rename);
8
- var fsMkdir = Promise.promisify(require('fs').mkdir);
9
- var path = require('path');
10
-
11
- module.exports = function modExports(args) {
12
- // set up -a/--all option and searchTerms
13
- var doWholeFolder = !!args.a || !!args.all;
14
- var searchTerms = [];
15
-
16
- if (!doWholeFolder) {
17
- searchTerms = args._.map(function makeRE(arg) {
18
- return new RegExp(arg, 'i');
19
- });
20
- }
21
-
22
- this.load().then(function loadDB() {
23
-
24
- var locals = this.locals;
25
- var exileDir = path.join(this.source_dir, '_posts', '_exile');
26
- var allPosts;
27
-
28
- // if the _exile dir doesn't exist yet, make it
29
- isDir(exileDir).then(function checkExileDir(exists) {
30
- if (!exists) {
31
- makeDir(exileDir);
32
- }
33
- }).then(function loadArticles() {
34
- return getArticles(locals);
35
- }).then(function selectArticle(arts) {
36
- allPosts = arts;
37
- return selectIsolated(arts, doWholeFolder);
38
- }).then(function splitPosts(isolated) {
39
- // split into { isolated, articlesToStash }
40
- return makeIsoObject(allPosts, isolated);
41
- }).then(function isolateArticles(articlesObject) {
42
- return doIsolate(articlesObject);
43
- }).then(function allDone(isolated) {
44
- console.log(chalk.gray(isolated), 'successfully isolated.\nTo restore the exiled posts, run', chalk.yellow('hexo integrate'));
45
- }).catch(function catchUncaught(err) {
46
- console.log(err.stack ? chalk.red(err.stack) : chalk.gray(err));
47
- });
48
-
49
- function isDir(dir) {
50
- return fsStat(dir).then(function doCheckDir(stats) {
51
- if (stats.isFile() && /_exile/.test(dir)) {
52
- console.log(chalk.gray(dir), 'seems to be a file on your filesystem! It needs to be either non-existent or a directory, so please rename your _exile post before using this command.');
53
- process.exit();
54
- } else if (stats.isDirectory()) {
55
- // console.log('%s is a directory', dir);
56
- return true;
57
- } else {
58
- console.log(chalk.gray(dir), 'seems to be neither a file nor a directory! This really shouldn\'t be happening, please issue a bug report.');
59
- process.exit();
60
- }
61
- }).catch(function catchCheckDir() {
62
- // The directory doesn't exist (which is not a bad thing)
63
- // console.log('%s doesn\'t exist', dir);
64
- return false;
65
- });
66
- }
67
-
68
- function makeDir(dir) {
69
- return fsMkdir(dir).then(function doMakeDir() {
70
- console.log(chalk.gray(dir), 'created');
71
- }).catch(function catchMakeDir(err) {
72
- console.log(chalk.gray(dir), 'could not be created: ', chalk.red(err));
73
- });
74
- }
75
-
76
- function getArticles(data) {
77
- return Promise.resolve(data.get('posts').sort('-date').toArray());
78
- }
79
-
80
- function filterOnName(arts, terms) {
81
- return arts.filter(function filterArts(article) {
82
- return terms.every(function testRE(term) {
83
- return term.test(article.title) || term.test(article.slug);
84
- });
85
- });
86
- }
87
-
88
- function selectIsolated(items, doAll) {
89
- // narrow down the post to isolate based on the user's inputted search terms (if available)
90
- var isolated = filterOnName(items, searchTerms);
91
-
92
- // stash everything if run with the -a/--all option
93
- if (doAll) {
94
- return Promise.resolve(isolated);
95
- }
96
-
97
- if (isolated.length === 0) {
98
- console.log(chalk.red('No posts matched. Exiting.'));
99
- process.exit();
100
- }
101
-
102
- if (isolated.length === 1) {
103
- return Promise.resolve(isolated[0].full_source);
104
- }
105
-
106
- // set up menu for selecting a post in case multiple match the search terms
107
- var entries = isolated.map(function mapTitles(article) {
108
- return [article.title, ' (', chalk.green(article.updated.format('YYYY-MM-DD')), ')'].join('');
109
- });
110
-
111
- return inquirer.prompt([
112
- {
113
- type: 'list',
114
- name: 'selected',
115
- message: 'Select the post you want to isolate.',
116
- choices: entries,
117
- },
118
- ]).then(function getAnswer(answer) {
119
- var pos = entries.indexOf(answer.selected);
120
- return isolated[pos].full_source;
121
- });
122
- }
123
-
124
- function makeIsoObject(items, iso) {
125
- var toStash = items.map(function mapSource(item) {
126
- return item.full_source;
127
- }).filter(function filterOutIsolated(item) {
128
- return item !== iso;
129
- });
130
-
131
- return {
132
- isolated: iso,
133
- articlesToStash: toStash,
134
- };
135
- }
136
-
137
- function doIsolate(itemObj) {
138
- var newName;
139
- var isolated = itemObj.isolated;
140
- var toStash = itemObj.articlesToStash;
141
-
142
- var movePromises = toStash.map(function makePromise(article) {
143
- newName = path.join(exileDir, article.substr(article.lastIndexOf(path.sep)));
144
- return new Promise(function returnPromise(resolve) {
145
- resolve(move(article, newName));
146
- });
147
- });
148
-
149
- // just for outputting a completed message
150
- var thePost = (isolated) ? isolated : 'All posts';
151
-
152
- return Promise.all(movePromises).then(function allDone() {
153
- return thePost;
154
- });
155
- }
156
-
157
- function move(origin, destination) {
158
- // setting up the moving of the asset dirs in case they exist
159
- var assetDir = path.join(path.parse(origin).dir, path.parse(origin).name);
160
- var assetDirDestination = path.join(path.parse(destination).dir, path.parse(destination).name);
161
- Promise.resolve(isDir(assetDir)).then(function checkAssetDir(exists) {
162
- if (exists) {
163
- fsRename(assetDir, assetDirDestination).then(function doAssetDirMove() {
164
- // console.log('%s moved to %s', assetDir, assetDirDestination);
165
- }).catch(function catchAssetDirMove(err) {
166
- console.log('%s could not be moved to %s: %s', assetDir, assetDirDestination, err);
167
- });
168
- }
169
- });
170
- return fsRename(origin, destination).then(function doMove() {
171
- // console.log('%s moved to %s', origin, destination);
172
- }).catch(function catchMove(err) {
173
- console.log('%s could not be moved to %s: %s', origin, destination, err);
174
- });
175
- }
176
-
177
- }.bind(this));
178
- };
179
-
@@ -1,145 +0,0 @@
1
- 'use strict';
2
-
3
- var Promise = require('bluebird');
4
- var chalk = require('chalk');
5
- var inquirer = require('inquirer');
6
- var fsStat = Promise.promisify(require('fs').stat);
7
- var fsUnlink = Promise.promisify(require('fs').unlink);
8
- var fsRmdir = Promise.promisify(require('rimraf'));
9
-
10
- module.exports = function modExports(args) {
11
- var searchTerms;
12
-
13
- if (!args._.join('')) {
14
- console.log(chalk.red('You need to search for a specific post before you can remove it. Check `hexo help remove` for usage details.'));
15
- process.exit();
16
- } else {
17
- // every whitespace-separated word in the input search is a case-insensitive regular expression
18
- searchTerms = args._.map(function mapSearchTerms(arg) {
19
- return new RegExp(arg, 'i');
20
- });
21
- }
22
-
23
- // load database
24
- this.load().then(function loadDb() {
25
- var locals = this.locals;
26
-
27
- // load posts and pages
28
- getArticles(locals).then(function loadArticles(articles) {
29
- return selectArticle(articles);
30
- }).then(function processSelected(selected) {
31
- return confirmRemove(selected);
32
- }).catch(function failProcessSelected(err) {
33
- console.log(err.stack ? chalk.red(err.stack) : chalk.gray(err));
34
- process.exit();
35
- });
36
-
37
- function getArticles(data) {
38
- return Promise.resolve(data.get('posts').toArray().concat(locals.get('pages').toArray()));
39
- }
40
-
41
- function filterOnName(articles, terms) {
42
- return articles.filter(function filterArticles(article) {
43
- return terms.every(function checkRE(term) {
44
- return term.test(article.title) || term.test(article.slug);
45
- });
46
- });
47
- }
48
-
49
- function selectArticle(items) {
50
- var filtered = filterOnName(items, searchTerms);
51
-
52
- if (filtered.length === 0) {
53
- return Promise.reject(chalk.red('No posts or pages found using your query.'));
54
- }
55
-
56
- if (filtered.length === 1) {
57
- return Promise.resolve(filtered[0]);
58
- }
59
-
60
- var entries = filtered.map(function mapEntries(article) {
61
- return [article.title, ' (', chalk.green(article.source), ')'].join('');
62
- });
63
-
64
- return inquirer.prompt([
65
- {
66
- type: 'list',
67
- name: 'selected',
68
- message: 'Select the post or page you wish to rename.',
69
- choices: entries,
70
- },
71
- ]).then(function getAnswer(answer) {
72
- var pos = entries.indexOf(answer.selected);
73
- return filtered[pos];
74
- });
75
- }
76
-
77
- function confirmRemove(post) {
78
- var message = '\n - Remove ' + chalk.green.underline(post.title) + '?\n' + chalk.red.bgBlack('Warning: this action is irreversible!');
79
- var del = chalk.red('Delete it!');
80
- var can = chalk.green('Cancel');
81
-
82
- return inquirer.prompt([
83
- {
84
- type: 'list',
85
- message: message,
86
- name: 'answer',
87
- choices: [
88
- del,
89
- can,
90
- ],
91
- },
92
- ]).then(function getResponse(response) {
93
- var ans = response.answer;
94
-
95
- switch (ans) {
96
- case del:
97
- remove(post);
98
- break;
99
- case can:
100
- console.log(chalk.gray('OK. See you later.'));
101
- process.exit();
102
- break;
103
- default:
104
- console.log(chalk.red('This shouldn\'t happen, please file a bug report.'));
105
- process.exit();
106
- }
107
- return chalk.gray('Done.');
108
- });
109
- }
110
-
111
- function remove(post) {
112
- var src = post.full_source;
113
-
114
- // first check if the file exists
115
- fsStat(src).then(function getStats(stats) {
116
- if (stats.isFile()) {
117
-
118
- // delete the file
119
- fsUnlink(src).then(function unlinkFile() {
120
- var assetDir = src.substr(0, src.lastIndexOf('.'));
121
- console.log(chalk.red.underline(src + ' deleted.'));
122
-
123
- // check for the asset directory
124
- fsStat(assetDir).then(function getAssetDirStats(adStats) {
125
- if (adStats.isDirectory()) {
126
-
127
- // delete the asset dir
128
- fsRmdir(assetDir).then(function unlinkAssetDir() {
129
- console.log(chalk.red.underline(assetDir + ' (asset directory) deleted.'));
130
- });
131
- }
132
- }).catch(function failAssetDir() {
133
- console.log(chalk.gray('No asset dir found.'));
134
- });
135
- });
136
- }
137
- }).catch(function failRemove(err) {
138
- console.log(chalk.red('Problem deleting article :', err));
139
- process.exit();
140
- });
141
- }
142
-
143
- }.bind(this));
144
- };
145
-