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.
- package/CHANGELOG.md +6 -0
- package/LICENSE +0 -0
- package/dist/index.cjs +757 -0
- package/dist/index.d.cts +2 -0
- package/dist/index.d.mts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +740 -0
- package/dist/index.mjs +740 -0
- package/dist/source/adblock.css +2 -0
- package/{lib → dist}/source/adblock.js +0 -0
- package/{lib → dist}/source/article-ads.css +0 -0
- package/dist/source/article-ads.js +1 -0
- package/{lib/source/article-ads.js → dist/source/article-ads.old.js} +0 -0
- package/{lib → dist}/source/blogger-redirect.html +0 -0
- package/{lib → dist}/source/https.js +0 -0
- package/{lib → dist}/source/in_article_ads_test.html +0 -0
- package/package.json +122 -37
- package/{README.md → readme.md} +29 -11
- package/lib/index.d.ts +0 -1
- package/lib/index.js +0 -85
- package/lib/packages/hexo-cli-extras/lib/env.d.ts +0 -3
- package/lib/packages/hexo-cli-extras/lib/env.js +0 -49
- package/lib/packages/hexo-extend-injector2/index.d.ts +0 -2
- package/lib/packages/hexo-extend-injector2/index.js +0 -12
- package/lib/packages/hexo-extend-injector2/lib/bundle/css-bundle.d.ts +0 -2
- package/lib/packages/hexo-extend-injector2/lib/bundle/css-bundle.js +0 -64
- package/lib/packages/hexo-extend-injector2/lib/bundle/css-generator.d.ts +0 -2
- package/lib/packages/hexo-extend-injector2/lib/bundle/css-generator.js +0 -12
- package/lib/packages/hexo-extend-injector2/lib/bundle/handle-data-pre.d.ts +0 -2
- package/lib/packages/hexo-extend-injector2/lib/bundle/handle-data-pre.js +0 -28
- package/lib/packages/hexo-extend-injector2/lib/bundle/js-bundle.d.ts +0 -2
- package/lib/packages/hexo-extend-injector2/lib/bundle/js-bundle.js +0 -32
- package/lib/packages/hexo-extend-injector2/lib/bundle/js-generator.d.ts +0 -2
- package/lib/packages/hexo-extend-injector2/lib/bundle/js-generator.js +0 -8
- package/lib/packages/hexo-extend-injector2/lib/default-config.d.ts +0 -39
- package/lib/packages/hexo-extend-injector2/lib/default-config.js +0 -46
- package/lib/packages/hexo-extend-injector2/lib/filter.d.ts +0 -2
- package/lib/packages/hexo-extend-injector2/lib/filter.js +0 -22
- package/lib/packages/hexo-extend-injector2/lib/helper/injector.d.ts +0 -2
- package/lib/packages/hexo-extend-injector2/lib/helper/injector.js +0 -5
- package/lib/packages/hexo-extend-injector2/lib/helper/next-inject.d.ts +0 -2
- package/lib/packages/hexo-extend-injector2/lib/helper/next-inject.js +0 -12
- package/lib/packages/hexo-extend-injector2/lib/injector.d.ts +0 -29
- package/lib/packages/hexo-extend-injector2/lib/injector.js +0 -125
- package/lib/packages/hexo-extend-injector2/lib/load.d.ts +0 -3
- package/lib/packages/hexo-extend-injector2/lib/load.js +0 -37
- package/lib/packages/hexo-extend-injector2/lib/next-point.d.ts +0 -2
- package/lib/packages/hexo-extend-injector2/lib/next-point.js +0 -18
- package/lib/packages/hexo-extend-injector2/lib/next.d.ts +0 -2
- package/lib/packages/hexo-extend-injector2/lib/next.js +0 -99
- package/lib/packages/hexo-extend-injector2/lib/order.d.ts +0 -5
- package/lib/packages/hexo-extend-injector2/lib/order.js +0 -8
- package/lib/source/adblock.css +0 -2
- package/lib/src/article-ads.d.ts +0 -20
- package/lib/src/article-ads.js +0 -304
- package/lib/src/checkLocalHost.d.ts +0 -10
- package/lib/src/checkLocalHost.js +0 -37
- package/lib/src/config.d.ts +0 -13
- package/lib/src/config.js +0 -42
- package/lib/src/html-parser.d.ts +0 -9
- package/lib/src/html-parser.js +0 -26
- package/lib/src/log.d.ts +0 -1
- package/lib/src/log.js +0 -11
- package/lib/src/logger.d.ts +0 -3
- package/lib/src/logger.js +0 -25
- package/lib/src/md5.d.ts +0 -2
- package/lib/src/md5.js +0 -165
- package/lib/src/safestringify.d.ts +0 -2
- package/lib/src/safestringify.js +0 -125
- package/lib/src/utils.d.ts +0 -31
- package/lib/src/utils.js +0 -159
- package/lib/src/versionParser.d.ts +0 -27
- package/lib/src/versionParser.js +0 -40
- package/packages/hexo-cli-extras/.eslintrc +0 -13
- package/packages/hexo-cli-extras/LICENSE.md +0 -20
- package/packages/hexo-cli-extras/README.md +0 -146
- package/packages/hexo-cli-extras/docs/basic.gif +0 -0
- package/packages/hexo-cli-extras/docs/gui.gif +0 -0
- package/packages/hexo-cli-extras/docs/remove.png +0 -0
- package/packages/hexo-cli-extras/docs/rename.png +0 -0
- package/packages/hexo-cli-extras/index.js +0 -48
- package/packages/hexo-cli-extras/lib/edit.js +0 -209
- package/packages/hexo-cli-extras/lib/env.js +0 -52
- package/packages/hexo-cli-extras/lib/extensions.js +0 -23
- package/packages/hexo-cli-extras/lib/integrate.js +0 -87
- package/packages/hexo-cli-extras/lib/isolate.js +0 -179
- package/packages/hexo-cli-extras/lib/remove.js +0 -145
- package/packages/hexo-cli-extras/lib/rename.js +0 -171
- package/packages/hexo-cli-extras/package.json +0 -34
- package/packages/hexo-extend-injector2/.eslintrc +0 -4
- package/packages/hexo-extend-injector2/.github/workflows/linter.yml +0 -27
- package/packages/hexo-extend-injector2/.github/workflows/tester.yml +0 -24
- package/packages/hexo-extend-injector2/.vscode/settings.json +0 -10
- package/packages/hexo-extend-injector2/LICENSE +0 -165
- package/packages/hexo-extend-injector2/README-ZH.md +0 -189
- package/packages/hexo-extend-injector2/README.md +0 -191
- package/packages/hexo-extend-injector2/USAGE.md +0 -38
- package/packages/hexo-extend-injector2/index.js +0 -14
- package/packages/hexo-extend-injector2/lib/bundle/css-bundle.js +0 -79
- package/packages/hexo-extend-injector2/lib/bundle/css-generator.js +0 -13
- package/packages/hexo-extend-injector2/lib/bundle/handle-data-pre.js +0 -29
- package/packages/hexo-extend-injector2/lib/bundle/js-bundle.js +0 -42
- package/packages/hexo-extend-injector2/lib/bundle/js-generator.js +0 -10
- package/packages/hexo-extend-injector2/lib/default-config.js +0 -52
- package/packages/hexo-extend-injector2/lib/filter.js +0 -24
- package/packages/hexo-extend-injector2/lib/helper/injector.js +0 -6
- package/packages/hexo-extend-injector2/lib/helper/next-inject.js +0 -14
- package/packages/hexo-extend-injector2/lib/injector.js +0 -128
- package/packages/hexo-extend-injector2/lib/load.js +0 -45
- package/packages/hexo-extend-injector2/lib/next-point.js +0 -19
- package/packages/hexo-extend-injector2/lib/next.js +0 -87
- package/packages/hexo-extend-injector2/lib/order.js +0 -9
- package/packages/hexo-extend-injector2/package.json +0 -49
- package/packages/hexo-extend-injector2/renovate.json +0 -6
- package/packages/hexo-extend-injector2/test/.eslintrc +0 -3
- package/packages/hexo-extend-injector2/test/index.js +0 -18
- package/packages/hexo-extend-injector2/test/lib/bundle/bundle-css.js +0 -86
- package/packages/hexo-extend-injector2/test/lib/bundle/bundle-js.js +0 -36
- package/packages/hexo-extend-injector2/test/lib/bundle/test.css +0 -3
- package/packages/hexo-extend-injector2/test/lib/bundle/test.js +0 -5
- package/packages/hexo-extend-injector2/test/lib/helper/injector.js +0 -45
- package/packages/hexo-extend-injector2/test/lib/helper/next-inject.js +0 -69
- package/packages/hexo-extend-injector2/test/lib/hexo-compatible.js +0 -250
- package/packages/hexo-extend-injector2/test/lib/hexo-injector.js +0 -37
- package/packages/hexo-extend-injector2/test/lib/injector.js +0 -93
- package/packages/memoize/CHANGELOG.md +0 -82
- package/packages/memoize/CHANGES +0 -124
- package/packages/memoize/LICENSE +0 -15
- package/packages/memoize/README.md +0 -503
- package/packages/memoize/ext/async.js +0 -154
- package/packages/memoize/ext/dispose.js +0 -33
- package/packages/memoize/ext/max-age.js +0 -90
- package/packages/memoize/ext/max.js +0 -27
- package/packages/memoize/ext/promise.js +0 -147
- package/packages/memoize/ext/ref-counter.js +0 -48
- package/packages/memoize/index.js +0 -34
- package/packages/memoize/lib/configure-map.js +0 -182
- package/packages/memoize/lib/methods.js +0 -32
- package/packages/memoize/lib/registered-extensions.js +0 -1
- package/packages/memoize/lib/resolve-length.js +0 -15
- package/packages/memoize/lib/resolve-normalize.js +0 -17
- package/packages/memoize/lib/resolve-resolve.js +0 -21
- package/packages/memoize/lib/weak.js +0 -134
- package/packages/memoize/methods-plain.js +0 -3
- package/packages/memoize/methods.js +0 -3
- package/packages/memoize/normalizers/get-1.js +0 -29
- package/packages/memoize/normalizers/get-fixed.js +0 -71
- package/packages/memoize/normalizers/get-primitive-fixed.js +0 -16
- package/packages/memoize/normalizers/get.js +0 -90
- package/packages/memoize/normalizers/primitive.js +0 -9
- package/packages/memoize/package.json +0 -60
- package/packages/memoize/plain.js +0 -37
- package/packages/memoize/profile.js +0 -107
- package/packages/memoize/repository.md +0 -1
- package/packages/memoize/weak-plain.js +0 -3
- package/packages/memoize/weak.js +0 -3
- 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
|
-
|