hexo-adsense 1.1.1 → 2.0.2
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 +0 -0
- package/LICENSE +0 -0
- package/dist/index.cjs +12799 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.js +12782 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +12782 -0
- package/dist/index.mjs.map +1 -0
- package/dist/source/adblock.css +2 -0
- package/dist/source/adblock.js +1 -0
- package/{lib → dist}/source/article-ads.css +0 -0
- package/dist/source/article-ads.js +1 -0
- package/dist/source/article-ads.old.js +1 -0
- package/{lib → dist}/source/blogger-redirect.html +0 -0
- package/dist/source/https.js +1 -0
- package/{lib → dist}/source/in_article_ads_test.html +0 -0
- package/package.json +122 -38
- package/{README.md → readme.md} +27 -8
- package/gulpfile.ts +0 -100
- package/lib/index.d.ts +0 -1
- package/lib/index.js +0 -91
- 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/source/adblock.js +0 -1
- package/lib/source/article-ads.js +0 -1
- package/lib/source/article-ads.old.js +0 -1
- package/lib/source/https.js +0 -1
- package/lib/src/article-ads.d.ts +0 -20
- package/lib/src/article-ads.js +0 -310
- package/lib/src/checkLocalHost.d.ts +0 -10
- package/lib/src/checkLocalHost.js +0 -37
- package/lib/src/config.d.ts +0 -14
- package/lib/src/config.js +0 -50
- package/lib/src/html-parser.d.ts +0 -8
- 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 -7
- package/lib/src/md5.js +0 -30
- 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 -160
- package/lib/src/versionParser.d.ts +0 -27
- package/lib/src/versionParser.js +0 -40
- package/packages/@types/.gitmodules +0 -8
- package/packages/@types/LICENSE +0 -21
- package/packages/@types/README.md +0 -27
- package/packages/@types/hexo/HexoConfig.d.ts +0 -216
- package/packages/@types/hexo/LICENSE +0 -21
- package/packages/@types/hexo/README.md +0 -16
- package/packages/@types/hexo/index.d.ts +0 -849
- package/packages/@types/hexo/package.json +0 -34
- package/packages/@types/hexo-bunyan/LICENSE +0 -21
- package/packages/@types/hexo-bunyan/README.md +0 -16
- package/packages/@types/hexo-bunyan/index.d.ts +0 -9
- package/packages/@types/hexo-bunyan/package.json +0 -24
- package/packages/@types/hexo-log/LICENSE +0 -21
- package/packages/@types/hexo-log/README.md +0 -16
- package/packages/@types/hexo-log/index.d.ts +0 -159
- package/packages/@types/hexo-log/package.json +0 -28
- package/packages/@types/index.js +0 -2
- package/packages/@types/package.json +0 -30
- package/packages/@types/test/package.json +0 -15
- package/packages/@types/test/through2.ts +0 -6
- package/packages/@types/tsconfig.json +0 -14
- package/packages/@types/typings/index.d.ts +0 -7
- package/packages/@types/typings/kill-port.d.ts +0 -3
- package/packages/@types/typings/markdown-it-abbr.d.ts +0 -4
- package/packages/@types/typings/markdown-it-footnote.d.ts +0 -4
- package/packages/@types/typings/markdown-it-image-figures.d.ts +0 -4
- package/packages/@types/typings/markdown-it-mark.d.ts +0 -4
- package/packages/@types/typings/markdown-it-sub.d.ts +0 -7
- package/packages/@types/typings/markdown-it-sup.d.ts +0 -7
- 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/tsconfig.json +0 -39
- package/unused.md +0 -11
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
require('./lib/extensions')(hexo);
|
|
4
|
-
|
|
5
|
-
hexo.extend.console.register('edit', 'Edit a post or draft with your favorite $EDITOR', {
|
|
6
|
-
desc: 'Edit a post or draft with your favorite $EDITOR. Filter on title (if applicable), before using optional arguments.',
|
|
7
|
-
usage: '[title] [-a | --after MM-DD-YYYY] [-b | --before MM-DD-YYYY] [-c | --category CATEGORY] [-d | --draft | --drafts] [-f | --folder FOLDER] [-g | --gui] [-l | --layout LAYOUT] [-p | --page | --pages] [-t | --tag | --tags TAG]',
|
|
8
|
-
arguments: [
|
|
9
|
-
{name: 'title', desc: '(Part of) the title of a post. If more posts match this regex, a menu will be called.'},
|
|
10
|
-
],
|
|
11
|
-
options: [
|
|
12
|
-
{name: '-a, --after', desc: 'Only consider posts after this date (MM-DD-YYYY)'},
|
|
13
|
-
{name: '-b, --before', desc: 'Only consider posts before this date (MM-DD-YYYY)'},
|
|
14
|
-
{name: '-c, --category, --categories', desc: 'Category to filter on.'},
|
|
15
|
-
{name: '-d, --draft, --drafts', desc: 'Only consider drafts'},
|
|
16
|
-
{name: '-f, --folder', desc: 'Name of subfolder to filter on.'},
|
|
17
|
-
{name: '-g, --gui', desc: 'Open file with associated GUI text editor. Default is to open in terminal using $EDITOR. If no $EDITOR is found, it will fall back to gui mode.'},
|
|
18
|
-
{name: '-l, --layout', desc: 'Only consider posts with a given layout'},
|
|
19
|
-
{name: '-p, --page, --pages', desc: 'Only consider pages'},
|
|
20
|
-
{name: '-t, --tag, --tags', desc: 'Tag to filter on.'},
|
|
21
|
-
],
|
|
22
|
-
}, require('./lib/edit'));
|
|
23
|
-
|
|
24
|
-
hexo.extend.console.register('rename', 'Rename a post or draft', {
|
|
25
|
-
desc: 'Rename a post or draft. Search for a post and set a new name with the -n or --new option, followed by the new title wrapped in single or double quotes',
|
|
26
|
-
usage: '<old name> <-n | --new new name>',
|
|
27
|
-
options: [
|
|
28
|
-
{name: '-n, --new', desc: '(required) The new title. Wrap in single or double quotes if the title includes spaces.'},
|
|
29
|
-
],
|
|
30
|
-
}, require('./lib/rename'));
|
|
31
|
-
|
|
32
|
-
hexo.extend.console.register('remove', 'Remove a post or draft', {
|
|
33
|
-
desc: 'Search for a post or draft and remove it.',
|
|
34
|
-
usage: '<search terms for a post to be deleted>',
|
|
35
|
-
}, require('./lib/remove'));
|
|
36
|
-
|
|
37
|
-
hexo.extend.console.register('isolate', 'Isolate a post or page by temporarily removing all others from the build process', {
|
|
38
|
-
desc: 'Move all posts to an ignored _exile subfolder, except for the one matching a given search term. If multiple posts match, a menu will be called. This can be useful for speeding up testing, but don\'t forget to use the integrate command to restore the exiled posts back to their previous location before deploying your site.',
|
|
39
|
-
usage: '[search term]',
|
|
40
|
-
options: [
|
|
41
|
-
{name: '-a, --all', desc: 'Stash all posts in _exile, including the one for which the pattern matches.'},
|
|
42
|
-
],
|
|
43
|
-
}, require('./lib/isolate'));
|
|
44
|
-
|
|
45
|
-
hexo.extend.console.register('integrate', 'Restore isolated posts', {
|
|
46
|
-
desc: 'Restore all exiled posts from _posts/_exile back to _posts. Opposite of the isolate command.',
|
|
47
|
-
usage: '',
|
|
48
|
-
}, require('./lib/integrate'));
|
|
@@ -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
|
-
|