hexo-adsense 1.0.21 → 1.0.25
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 +19 -0
- package/README.md +20 -6
- package/lib/index.js +8 -1
- package/lib/source/adblock.css +2 -83
- package/lib/source/adblock.js +1 -31
- package/lib/source/article-ads.css +2 -11
- package/lib/source/article-ads.js +1 -270
- package/lib/source/blogger-redirect.html +1 -14
- package/lib/source/https.js +1 -4
- package/lib/src/article-ads.d.ts +1 -1
- package/lib/src/article-ads.js +6 -6
- package/lib/src/config.d.ts +12 -19
- package/lib/src/config.js +3 -5
- package/lib/src/utils.d.ts +9 -1
- package/lib/src/utils.js +2 -2
- package/package.json +20 -5
- package/packages/hexo-cli-extras/.eslintrc +13 -0
- package/packages/hexo-cli-extras/LICENSE.md +20 -0
- package/packages/hexo-cli-extras/README.md +146 -0
- 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 +48 -0
- package/packages/hexo-cli-extras/lib/edit.js +209 -0
- package/packages/hexo-cli-extras/lib/env.js +52 -0
- package/packages/hexo-cli-extras/lib/extensions.js +23 -0
- package/packages/hexo-cli-extras/lib/integrate.js +87 -0
- package/packages/hexo-cli-extras/lib/isolate.js +179 -0
- package/packages/hexo-cli-extras/lib/remove.js +145 -0
- package/packages/hexo-cli-extras/lib/rename.js +171 -0
- package/packages/hexo-cli-extras/package.json +34 -0
- package/packages/hexo-extend-injector2/.eslintrc +4 -0
- package/packages/hexo-extend-injector2/.github/workflows/linter.yml +27 -0
- package/packages/hexo-extend-injector2/.github/workflows/tester.yml +24 -0
- package/packages/hexo-extend-injector2/.vscode/settings.json +10 -0
- package/packages/hexo-extend-injector2/LICENSE +165 -0
- package/packages/hexo-extend-injector2/README-ZH.md +189 -0
- package/packages/hexo-extend-injector2/README.md +191 -0
- package/packages/hexo-extend-injector2/USAGE.md +38 -0
- package/packages/hexo-extend-injector2/index.js +13 -0
- package/packages/hexo-extend-injector2/lib/bundle/css-bundle.js +79 -0
- package/packages/hexo-extend-injector2/lib/bundle/css-generator.js +13 -0
- package/packages/hexo-extend-injector2/lib/bundle/handle-data-pre.js +29 -0
- package/packages/hexo-extend-injector2/lib/bundle/js-bundle.js +42 -0
- package/packages/hexo-extend-injector2/lib/bundle/js-generator.js +10 -0
- package/packages/hexo-extend-injector2/lib/default-config.js +52 -0
- package/packages/hexo-extend-injector2/lib/filter.js +24 -0
- package/packages/hexo-extend-injector2/lib/helper/injector.js +6 -0
- package/packages/hexo-extend-injector2/lib/helper/next-inject.js +14 -0
- package/packages/hexo-extend-injector2/lib/injector.js +128 -0
- package/packages/hexo-extend-injector2/lib/load.js +45 -0
- package/packages/hexo-extend-injector2/lib/next-point.js +19 -0
- package/packages/hexo-extend-injector2/lib/next.js +87 -0
- package/packages/hexo-extend-injector2/lib/order.js +9 -0
- package/packages/hexo-extend-injector2/package.json +49 -0
- package/packages/hexo-extend-injector2/renovate.json +6 -0
- package/packages/hexo-extend-injector2/test/.eslintrc +3 -0
- package/packages/hexo-extend-injector2/test/index.js +18 -0
- package/packages/hexo-extend-injector2/test/lib/bundle/bundle-css.js +86 -0
- package/packages/hexo-extend-injector2/test/lib/bundle/bundle-js.js +36 -0
- package/packages/hexo-extend-injector2/test/lib/bundle/test.css +3 -0
- package/packages/hexo-extend-injector2/test/lib/bundle/test.js +5 -0
- package/packages/hexo-extend-injector2/test/lib/helper/injector.js +45 -0
- package/packages/hexo-extend-injector2/test/lib/helper/next-inject.js +69 -0
- package/packages/hexo-extend-injector2/test/lib/hexo-compatible.js +250 -0
- package/packages/hexo-extend-injector2/test/lib/hexo-injector.js +37 -0
- package/packages/hexo-extend-injector2/test/lib/injector.js +93 -0
- package/packages/memoize/CHANGELOG.md +82 -0
- package/packages/memoize/CHANGES +124 -0
- package/packages/memoize/LICENSE +15 -0
- package/packages/memoize/README.md +503 -0
- package/packages/memoize/ext/async.js +154 -0
- package/packages/memoize/ext/dispose.js +33 -0
- package/packages/memoize/ext/max-age.js +90 -0
- package/packages/memoize/ext/max.js +27 -0
- package/packages/memoize/ext/promise.js +147 -0
- package/packages/memoize/ext/ref-counter.js +48 -0
- package/packages/memoize/index.js +34 -0
- package/packages/memoize/lib/configure-map.js +182 -0
- package/packages/memoize/lib/methods.js +32 -0
- package/packages/memoize/lib/registered-extensions.js +1 -0
- package/packages/memoize/lib/resolve-length.js +15 -0
- package/packages/memoize/lib/resolve-normalize.js +17 -0
- package/packages/memoize/lib/resolve-resolve.js +21 -0
- package/packages/memoize/lib/weak.js +134 -0
- package/packages/memoize/methods-plain.js +3 -0
- package/packages/memoize/methods.js +3 -0
- package/packages/memoize/normalizers/get-1.js +29 -0
- package/packages/memoize/normalizers/get-fixed.js +71 -0
- package/packages/memoize/normalizers/get-primitive-fixed.js +16 -0
- package/packages/memoize/normalizers/get.js +90 -0
- package/packages/memoize/normalizers/primitive.js +9 -0
- package/packages/memoize/package.json +60 -0
- package/packages/memoize/plain.js +37 -0
- package/packages/memoize/profile.js +107 -0
- package/packages/memoize/repository.md +1 -0
- package/packages/memoize/weak-plain.js +3 -0
- package/packages/memoize/weak.js +3 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
require('chai').should();
|
|
4
|
+
const Injector = require('../../../lib/injector');
|
|
5
|
+
const Hexo = require('hexo');
|
|
6
|
+
const hexo = new Hexo();
|
|
7
|
+
const injectorHelper = require('../../../lib/helper/injector');
|
|
8
|
+
|
|
9
|
+
describe('injector', () => {
|
|
10
|
+
|
|
11
|
+
it('injector(point).text()', () => {
|
|
12
|
+
const injector = new Injector(hexo);
|
|
13
|
+
injector.register('body-start', 'xx');
|
|
14
|
+
injector.register('head-start', 'ww');
|
|
15
|
+
injector.register('head-end', 'cc');
|
|
16
|
+
injector.register('body-end', 'a');
|
|
17
|
+
injector.register('body end', 'b');
|
|
18
|
+
injector.register('bodyend', 'c');
|
|
19
|
+
injector.register('body_end', 'd');
|
|
20
|
+
const result = injectorHelper(injector)('body-end').text();
|
|
21
|
+
injector.config.injector_point_bodyend.should.be.true;
|
|
22
|
+
result.should.eql('abcd');
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it('use injector(point).text() in home', () => {
|
|
26
|
+
const injector = new Injector(hexo);
|
|
27
|
+
injector.register('body-end', 'a');
|
|
28
|
+
injector.register('body-end', 'b', 'home');
|
|
29
|
+
injector.register('body-end', 'v', injector.is('post'));
|
|
30
|
+
const result = injectorHelper(injector, {page: {__index: true}})('body-end').text();
|
|
31
|
+
injector.config.injector_point_bodyend.should.be.true;
|
|
32
|
+
result.should.eql('ab');
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
it('use injector(point).text() in post', () => {
|
|
36
|
+
const injector = new Injector(hexo);
|
|
37
|
+
injector.register('body-end', 'a');
|
|
38
|
+
injector.register('body-end', 'b', 'home');
|
|
39
|
+
injector.register('body-end', 'v', injector.is('post'));
|
|
40
|
+
const result = injectorHelper(injector, {page: {__post: true}})('body-end').text();
|
|
41
|
+
injector.config.injector_point_bodyend.should.be.true;
|
|
42
|
+
result.should.eql('av');
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
});
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
require('chai').should();
|
|
4
|
+
const Injector = require('../../../lib/injector');
|
|
5
|
+
const Hexo = require('hexo');
|
|
6
|
+
const hexo = new Hexo();
|
|
7
|
+
const nextInjectHelper = require('../../../lib/helper/next-inject');
|
|
8
|
+
|
|
9
|
+
hexo.theme.config = {
|
|
10
|
+
injects: {
|
|
11
|
+
'head': [],
|
|
12
|
+
'header': [],
|
|
13
|
+
'sidebar': [],
|
|
14
|
+
'postMeta': [],
|
|
15
|
+
'postBodyEnd': [],
|
|
16
|
+
'footer': [],
|
|
17
|
+
'bodyEnd': [],
|
|
18
|
+
'comment': []
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
describe('next-inject', () => {
|
|
23
|
+
|
|
24
|
+
it('next_inject(point)', () => {
|
|
25
|
+
const injector = new Injector(hexo);
|
|
26
|
+
injector.register('body-start', 'xx');
|
|
27
|
+
injector.register('head-start', 'ww');
|
|
28
|
+
injector.register('head-end', 'cc');
|
|
29
|
+
injector.register('body-end', 'a');
|
|
30
|
+
injector.register('body end', 'b');
|
|
31
|
+
injector.register('bodyend', 'c');
|
|
32
|
+
injector.register('body_end', 'd');
|
|
33
|
+
const result = nextInjectHelper(injector, hexo)('bodyEnd');
|
|
34
|
+
injector.config.injector_point_bodyend.should.be.true;
|
|
35
|
+
result.should.eql('abcd');
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it('use next_inject(point) in home', () => {
|
|
39
|
+
const injector = new Injector(hexo);
|
|
40
|
+
injector.register('body-end', 'a');
|
|
41
|
+
injector.register('body-end', 'b', 'home');
|
|
42
|
+
injector.register('body-end', 'v', injector.is('post'));
|
|
43
|
+
const result = nextInjectHelper(injector, Object.assign({page: {__index: true}}, hexo))('bodyEnd');
|
|
44
|
+
injector.config.injector_point_bodyend.should.be.true;
|
|
45
|
+
result.should.eql('ab');
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it('use next_inject(point) in post', () => {
|
|
49
|
+
const injector = new Injector(hexo);
|
|
50
|
+
injector.register('body-end', 'a');
|
|
51
|
+
injector.register('body-end', 'b', 'home');
|
|
52
|
+
injector.register('body-end', 'v', injector.is('post'));
|
|
53
|
+
const result = nextInjectHelper(injector, Object.assign({page: {__post: true}}, hexo))('bodyEnd');
|
|
54
|
+
injector.config.injector_point_bodyend.should.be.true;
|
|
55
|
+
result.should.eql('av');
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
it('next_inject(head) include head and head-end', () => {
|
|
59
|
+
const injector = new Injector(hexo);
|
|
60
|
+
injector.register('head', 'a');
|
|
61
|
+
injector.register('body-end', 'b');
|
|
62
|
+
injector.register('head-end', 'c');
|
|
63
|
+
const result = nextInjectHelper(injector, Object.assign({page: {__post: true}}, hexo))('head');
|
|
64
|
+
injector.config.injector_point_head.should.be.true;
|
|
65
|
+
injector.config.injector_point_headend.should.be.true;
|
|
66
|
+
result.should.eql('ac');
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
});
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
describe('hexo\'s injector compatible', () => {
|
|
4
|
+
const content = [
|
|
5
|
+
'<!DOCTYPE html>',
|
|
6
|
+
'<html lang="en">',
|
|
7
|
+
'<head id="head"><title>Test</title>',
|
|
8
|
+
'</head>',
|
|
9
|
+
'<body id="body">',
|
|
10
|
+
'<div></div>',
|
|
11
|
+
'<p></p>',
|
|
12
|
+
'</body>',
|
|
13
|
+
'</html>'
|
|
14
|
+
].join('');
|
|
15
|
+
|
|
16
|
+
const Injector = require('./hexo-injector');
|
|
17
|
+
|
|
18
|
+
it('register() - entry is required', () => {
|
|
19
|
+
const i = new Injector();
|
|
20
|
+
|
|
21
|
+
// no name
|
|
22
|
+
try {
|
|
23
|
+
i.register();
|
|
24
|
+
} catch (err) {
|
|
25
|
+
err.should.be
|
|
26
|
+
.instanceOf(TypeError)
|
|
27
|
+
.property('message', 'entry is required');
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
it('register() - string', () => {
|
|
32
|
+
const i = new Injector();
|
|
33
|
+
|
|
34
|
+
const str = '<link rel="stylesheet" href="DPlayer.min.css" />';
|
|
35
|
+
i.register('head_begin', str);
|
|
36
|
+
i.register('head_end', str, 'home');
|
|
37
|
+
|
|
38
|
+
i.get('head_begin').should.contains(str);
|
|
39
|
+
i.get('head_begin', 'default').should.contains(str);
|
|
40
|
+
i.get('head_end', 'home').should.contains(str);
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it('register() - function', () => {
|
|
44
|
+
const i = new Injector();
|
|
45
|
+
|
|
46
|
+
const fn = () => '<link rel="stylesheet" href="DPlayer.min.css" />';
|
|
47
|
+
i.register('head_begin', fn);
|
|
48
|
+
|
|
49
|
+
i.get('head_begin').should.contains(fn());
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it.skip('register() - fallback when entry not exists', () => {
|
|
53
|
+
const i = new Injector();
|
|
54
|
+
|
|
55
|
+
const str = '<link rel="stylesheet" href="DPlayer.min.css" />';
|
|
56
|
+
i.register('foo', str);
|
|
57
|
+
|
|
58
|
+
i.get('head_end').should.contains(str);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
it.skip('list()', () => {
|
|
62
|
+
const i = new Injector();
|
|
63
|
+
|
|
64
|
+
i.register('body_begin', '<script src="DPlayer.min.js"></script>');
|
|
65
|
+
|
|
66
|
+
i.list().body_begin.default.should.be.instanceOf(Set);
|
|
67
|
+
[...i.list().body_begin.default].should.not.be.empty;
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
it('get()', () => {
|
|
71
|
+
const i = new Injector();
|
|
72
|
+
const str = '<script src="jquery.min.js"></script>';
|
|
73
|
+
|
|
74
|
+
i.register('body_begin', str);
|
|
75
|
+
i.register('body_end', str, 'home');
|
|
76
|
+
|
|
77
|
+
i.get('body_begin').should.be.instanceOf(Array);
|
|
78
|
+
i.get('body_begin').should.contains(str);
|
|
79
|
+
i.get('body_end', 'home').should.be.instanceOf(Array);
|
|
80
|
+
i.get('body_end', 'home').should.contains(str);
|
|
81
|
+
|
|
82
|
+
i.get('head_end').should.be.instanceOf(Array);
|
|
83
|
+
i.get('head_end').should.eql([]);
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it('getText()', () => {
|
|
87
|
+
const i = new Injector();
|
|
88
|
+
const str = '<script src="jquery.min.js"></script>';
|
|
89
|
+
|
|
90
|
+
i.register('head_end', str);
|
|
91
|
+
i.register('body_end', str, 'home');
|
|
92
|
+
|
|
93
|
+
i.getText('body_end', 'home').should.eql(str);
|
|
94
|
+
i.getText('body_end').should.eql('');
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
it('getSize()', () => {
|
|
98
|
+
const i = new Injector();
|
|
99
|
+
const str = '<script src="jquery.min.js"></script>';
|
|
100
|
+
|
|
101
|
+
i.register('head_end', str);
|
|
102
|
+
i.register('body_end', str);
|
|
103
|
+
i.register('body_end', str, 'home');
|
|
104
|
+
|
|
105
|
+
i.getSize('head_begin').should.eql(0);
|
|
106
|
+
i.getSize('head_end').should.eql(1);
|
|
107
|
+
i.getSize('body_end').should.eql(2);
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
it.skip('exec() - default', () => {
|
|
111
|
+
const i = new Injector();
|
|
112
|
+
const result = i.exec(content);
|
|
113
|
+
result.should.contain('<head id="head"><title>Test</title></head>');
|
|
114
|
+
result.should.contain('<body id="body"><div></div><p></p></body>');
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
it.skip('exec() - default', () => {
|
|
118
|
+
const i = new Injector();
|
|
119
|
+
const result = i.exec(content);
|
|
120
|
+
result.should.contain('<head id="head"><title>Test</title></head>');
|
|
121
|
+
result.should.contain('<body id="body"><div></div><p></p></body>');
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
it.skip('exec() - insert code', () => {
|
|
125
|
+
const i = new Injector();
|
|
126
|
+
|
|
127
|
+
i.register('head_begin', '<!-- Powered by Hexo -->');
|
|
128
|
+
i.register('head_end', '<link href="prism.css" rel="stylesheet">');
|
|
129
|
+
i.register('head_end', '<link href="prism-linenumber.css" rel="stylesheet">');
|
|
130
|
+
i.register('body_begin', '<script>window.Prism = window.Prism || {}; window.Prism.manual = true;</script>');
|
|
131
|
+
i.register('body_end', '<script src="prism.js"></script>');
|
|
132
|
+
|
|
133
|
+
const result = i.exec(content);
|
|
134
|
+
|
|
135
|
+
result.should.contain('<head id="head"><!-- hexo injector head_begin start --><!-- Powered by Hexo --><!-- hexo injector head_begin end -->');
|
|
136
|
+
result.should.contain('<!-- hexo injector head_end start --><link href="prism.css" rel="stylesheet"><link href="prism-linenumber.css" rel="stylesheet"><!-- hexo injector head_end end --></head>');
|
|
137
|
+
result.should.contain('<body id="body"><!-- hexo injector body_begin start --><script>window.Prism = window.Prism || {}; window.Prism.manual = true;</script><!-- hexo injector body_begin end -->');
|
|
138
|
+
result.should.contain('<!-- hexo injector body_end start --><script src="prism.js"></script><!-- hexo injector body_end end --></body>');
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
it.skip('exec() - no duplicate insert', () => {
|
|
142
|
+
const content = [
|
|
143
|
+
'<!DOCTYPE html>',
|
|
144
|
+
'<html lang="en">',
|
|
145
|
+
'<head id="head"><!-- hexo injector head_begin start --><!-- hexo injector head_begin end -->',
|
|
146
|
+
'<title>Test</title>',
|
|
147
|
+
'<!-- hexo injector head_end start --><link href="prism.css" rel="stylesheet"></head>',
|
|
148
|
+
'<body id="body"><!-- hexo injector body_begin start --><!-- hexo injector body_begin end -->',
|
|
149
|
+
'<div></div>',
|
|
150
|
+
'<p></p>',
|
|
151
|
+
'<!-- hexo injector body_end start --><script src="prism.js"></script><!-- hexo injector body_end end --></body>',
|
|
152
|
+
'</html>'
|
|
153
|
+
].join('');
|
|
154
|
+
|
|
155
|
+
const i = new Injector();
|
|
156
|
+
|
|
157
|
+
i.register('head_begin', '<!-- Powered by Hexo -->');
|
|
158
|
+
i.register('head_end', '<link href="prism.css" rel="stylesheet">');
|
|
159
|
+
i.register('head_end', '<link href="prism-linenumber.css" rel="stylesheet">');
|
|
160
|
+
i.register('body_begin', '<script>window.Prism = window.Prism || {}; window.Prism.manual = true;</script>');
|
|
161
|
+
i.register('body_end', '<script src="prism.js"></script>');
|
|
162
|
+
|
|
163
|
+
const result = i.exec(content);
|
|
164
|
+
|
|
165
|
+
result.should.contain('<head id="head"><!-- hexo injector head_begin start --><!-- hexo injector head_begin end -->');
|
|
166
|
+
result.should.contain('<!-- hexo injector head_end start --><link href="prism.css" rel="stylesheet"></head>');
|
|
167
|
+
result.should.contain('<body id="body"><!-- hexo injector body_begin start --><!-- hexo injector body_begin end -->');
|
|
168
|
+
result.should.contain('<!-- hexo injector body_end start --><script src="prism.js"></script><!-- hexo injector body_end end --></body>');
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
it.skip('exec() - multi-line head & body', () => {
|
|
172
|
+
const content = [
|
|
173
|
+
'<!DOCTYPE html>',
|
|
174
|
+
'<html lang="en">',
|
|
175
|
+
'<head id="head"><title>Test</title>',
|
|
176
|
+
'</head>',
|
|
177
|
+
'<body id="body">',
|
|
178
|
+
'<div></div>',
|
|
179
|
+
'<p></p>',
|
|
180
|
+
'</body>',
|
|
181
|
+
'</html>'
|
|
182
|
+
].join('\n');
|
|
183
|
+
|
|
184
|
+
const i = new Injector();
|
|
185
|
+
|
|
186
|
+
i.register('head_begin', '<!-- Powered by Hexo -->');
|
|
187
|
+
i.register('head_end', '<link href="prism.css" rel="stylesheet">');
|
|
188
|
+
i.register('head_end', '<link href="prism-linenumber.css" rel="stylesheet">');
|
|
189
|
+
i.register('body_begin', '<script>window.Prism = window.Prism || {}; window.Prism.manual = true;</script>');
|
|
190
|
+
i.register('body_end', '<script src="prism.js"></script>');
|
|
191
|
+
|
|
192
|
+
const result = i.exec(content);
|
|
193
|
+
|
|
194
|
+
result.should.contain('<head id="head"><!-- hexo injector head_begin start --><!-- Powered by Hexo --><!-- hexo injector head_begin end -->');
|
|
195
|
+
result.should.contain('<!-- hexo injector head_end start --><link href="prism.css" rel="stylesheet"><link href="prism-linenumber.css" rel="stylesheet"><!-- hexo injector head_end end --></head>');
|
|
196
|
+
result.should.contain('<body id="body"><!-- hexo injector body_begin start --><script>window.Prism = window.Prism || {}; window.Prism.manual = true;</script><!-- hexo injector body_begin end -->');
|
|
197
|
+
result.should.contain('<!-- hexo injector body_end start --><script src="prism.js"></script><!-- hexo injector body_end end --></body>');
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
it.skip('exec() - inject on specific page', () => {
|
|
201
|
+
const content = [
|
|
202
|
+
'<!DOCTYPE html>',
|
|
203
|
+
'<html lang="en">',
|
|
204
|
+
'<head id="head"><title>Test</title>',
|
|
205
|
+
'</head>',
|
|
206
|
+
'<body id="body">',
|
|
207
|
+
'<div></div>',
|
|
208
|
+
'<p></p>',
|
|
209
|
+
'</body>',
|
|
210
|
+
'</html>'
|
|
211
|
+
].join('\n');
|
|
212
|
+
|
|
213
|
+
const i = new Injector();
|
|
214
|
+
|
|
215
|
+
i.register('head_begin', '<!-- head_begin_default -->');
|
|
216
|
+
i.register('head_begin', '<!-- head_begin_home -->', 'home');
|
|
217
|
+
i.register('head_begin', '<!-- head_begin_post -->', 'post');
|
|
218
|
+
i.register('head_begin', '<!-- head_begin_page -->', 'page');
|
|
219
|
+
i.register('head_begin', '<!-- head_begin_archive -->', 'archive');
|
|
220
|
+
i.register('head_begin', '<!-- head_begin_category -->', 'category');
|
|
221
|
+
i.register('head_begin', '<!-- head_begin_tag -->', 'tag');
|
|
222
|
+
|
|
223
|
+
const result1 = i.exec(content, { page: {} });
|
|
224
|
+
const result2 = i.exec(content, { page: { __index: true } });
|
|
225
|
+
const result3 = i.exec(content, { page: { __post: true } });
|
|
226
|
+
const result4 = i.exec(content, { page: { __page: true } });
|
|
227
|
+
const result5 = i.exec(content, { page: { archive: true } });
|
|
228
|
+
const result6 = i.exec(content, { page: { category: true } });
|
|
229
|
+
const result7 = i.exec(content, { page: { tag: true } });
|
|
230
|
+
|
|
231
|
+
// home
|
|
232
|
+
result1.should.not.contain('<!-- head_begin_home -->');
|
|
233
|
+
result2.should.contain('<!-- head_begin_home --><!-- head_begin_default -->');
|
|
234
|
+
// post
|
|
235
|
+
result1.should.not.contain('<!-- head_begin_post -->');
|
|
236
|
+
result3.should.contain('<!-- head_begin_post --><!-- head_begin_default -->');
|
|
237
|
+
// page
|
|
238
|
+
result1.should.not.contain('<!-- head_begin_page -->');
|
|
239
|
+
result4.should.contain('<!-- head_begin_page --><!-- head_begin_default -->');
|
|
240
|
+
// archive
|
|
241
|
+
result1.should.not.contain('<!-- head_begin_archive -->');
|
|
242
|
+
result5.should.contain('<!-- head_begin_archive --><!-- head_begin_default -->');
|
|
243
|
+
// category
|
|
244
|
+
result1.should.not.contain('<!-- head_begin_category -->');
|
|
245
|
+
result6.should.contain('<!-- head_begin_category --><!-- head_begin_default -->');
|
|
246
|
+
// tag
|
|
247
|
+
result1.should.not.contain('<!-- head_begin_tag -->');
|
|
248
|
+
result7.should.contain('<!-- head_begin_tag --><!-- head_begin_default -->');
|
|
249
|
+
});
|
|
250
|
+
});
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const Hexo = require('hexo');
|
|
4
|
+
const hexo = new Hexo();
|
|
5
|
+
|
|
6
|
+
const getLocalsFromType = type => {
|
|
7
|
+
let options;
|
|
8
|
+
switch (type) {
|
|
9
|
+
case 'default': options = {context: {page: {}}}; break;
|
|
10
|
+
case 'home': options = {context: {page: {__index: true}}}; break;
|
|
11
|
+
case 'post': options = {context: {page: {__post: true}}}; break;
|
|
12
|
+
case 'page': options = {context: {page: {__page: true}}}; break;
|
|
13
|
+
case 'archive': options = {context: {page: {archive: true}}}; break;
|
|
14
|
+
case 'category': options = {context: {page: {category: true}}}; break;
|
|
15
|
+
case 'tag': options = {context: {page: {tag: true}}}; break;
|
|
16
|
+
default: options = {context: {page: {layout: type}}}; break;
|
|
17
|
+
}
|
|
18
|
+
return options;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const Injector2 = require('../../lib/injector');
|
|
22
|
+
class Injector extends Injector2 {
|
|
23
|
+
constructor() {
|
|
24
|
+
super(hexo);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
get(entry, to = 'default') {
|
|
28
|
+
const options = getLocalsFromType(to);
|
|
29
|
+
return super.get(entry, options).rendered().map(item => item.value);
|
|
30
|
+
}
|
|
31
|
+
getText(entry, to = 'default') {
|
|
32
|
+
const options = getLocalsFromType(to);
|
|
33
|
+
return super.get(entry, options).text();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
module.exports = Injector;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
require('chai').should();
|
|
4
|
+
const Injector = require('../../lib/injector');
|
|
5
|
+
const Hexo = require('hexo');
|
|
6
|
+
const hexo = new Hexo();
|
|
7
|
+
|
|
8
|
+
describe('injector', () => {
|
|
9
|
+
|
|
10
|
+
it('basic', () => {
|
|
11
|
+
const injector = new Injector(hexo);
|
|
12
|
+
injector.register('body-end', 'a');
|
|
13
|
+
injector.register('body-end', 'b');
|
|
14
|
+
injector.get('body-end').list().should.have.lengthOf(2);
|
|
15
|
+
injector.get('body-end').text().should.eql('ab');
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
it('format key', () => {
|
|
19
|
+
const injector = new Injector(hexo);
|
|
20
|
+
const registerKey = 'o n_e-tW o';
|
|
21
|
+
injector.register(registerKey, 'a');
|
|
22
|
+
injector.formatKey(registerKey).should.eql('onetwo');
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it('value is function, should render when call rendered', () => {
|
|
26
|
+
const injector = new Injector(hexo);
|
|
27
|
+
injector.register('one', () => 'a');
|
|
28
|
+
injector.get('one').rendered()[0].should.include({value: 'a'});
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
it('exec predicate', () => {
|
|
32
|
+
const injector = new Injector(hexo);
|
|
33
|
+
const homeEnv = {page: {__index: true}};
|
|
34
|
+
const postEnv = {page: {__post: true}};
|
|
35
|
+
const pageEnv = {page: {__page: true}};
|
|
36
|
+
injector.register('one', 'a', 'home');
|
|
37
|
+
injector.register('one', 'b', 'post');
|
|
38
|
+
injector.register('one', 'c', injector.is('post', 'page'));
|
|
39
|
+
injector.register('one', 'd', ctx => ctx.page.__index || ctx.page.__page);
|
|
40
|
+
injector.get('one', {context: homeEnv}).text().should.eql('ad');
|
|
41
|
+
injector.get('one', {context: postEnv}).text().should.eql('bc');
|
|
42
|
+
injector.get('one', {context: pageEnv}).text().should.eql('cd');
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
it('exec priority', () => {
|
|
46
|
+
const injector = new Injector(hexo);
|
|
47
|
+
injector.register('one', 'a', () => true, 2);
|
|
48
|
+
injector.register('one', 'b', () => true, 1);
|
|
49
|
+
injector.get('one').text().should.eql('ba');
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it('should be clean when isRun is true', () => {
|
|
53
|
+
const injector = new Injector(hexo);
|
|
54
|
+
injector.register('one', 'a', () => true, 2, true);
|
|
55
|
+
injector.register('one', 'b', () => true, 1, false);
|
|
56
|
+
injector.clean();
|
|
57
|
+
injector.get('one').text().should.eql('b');
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it('getSize()', () => {
|
|
61
|
+
const injector = new Injector(hexo);
|
|
62
|
+
injector.register('one', 'a', () => true, 2, true);
|
|
63
|
+
injector.register('one', 'b', () => true, 1, false);
|
|
64
|
+
injector.register('two', 'c', () => true, 1, true);
|
|
65
|
+
injector.register('three', 'c', () => true, 1, false);
|
|
66
|
+
injector.getSize('one').should.eql(2);
|
|
67
|
+
injector.getSize('two').should.eql(1);
|
|
68
|
+
injector.getSize('three').should.eql(1);
|
|
69
|
+
injector.getSize('four').should.eql(0);
|
|
70
|
+
injector.clean();
|
|
71
|
+
injector.getSize('one').should.eql(1);
|
|
72
|
+
injector.getSize('two').should.eql(0);
|
|
73
|
+
injector.getSize('three').should.eql(1);
|
|
74
|
+
injector.getSize('four').should.eql(0);
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
it('exec filter', () => {
|
|
78
|
+
const newHexo = new Hexo();
|
|
79
|
+
const injector = new Injector(newHexo);
|
|
80
|
+
newHexo.extend.filter.register('injector2:register', data => {
|
|
81
|
+
data.value += 'x';
|
|
82
|
+
});
|
|
83
|
+
newHexo.extend.filter.register('injector2:register-bodyend', data => {
|
|
84
|
+
data.value += 'bodyend';
|
|
85
|
+
});
|
|
86
|
+
injector.register('body-end', 'a');
|
|
87
|
+
injector.register('body-end', 'b');
|
|
88
|
+
injector.register('one', 'a', () => true, 2, true);
|
|
89
|
+
injector.get('bodyend').text().should.eql('axbodyendbxbodyend');
|
|
90
|
+
injector.get('one').text().should.eql('ax');
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
});
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
|
+
|
|
5
|
+
### [0.4.15](https://github.com/medikoo/memoizee/compare/v0.4.14...v0.4.15) (2021-01-08)
|
|
6
|
+
|
|
7
|
+
_Maintainance update_
|
|
8
|
+
|
|
9
|
+
<a name="0.4.14"></a>
|
|
10
|
+
|
|
11
|
+
## [0.4.14](https://github.com/medikoo/memoizee/compare/v0.4.13...v0.4.14) (2018-08-13)
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
- ensure to not force unhandled rejections ([9b416ea](https://github.com/medikoo/memoizee/commit/9b416ea))
|
|
16
|
+
|
|
17
|
+
<a name="0.4.13"></a>
|
|
18
|
+
|
|
19
|
+
## [0.4.13](https://github.com/medikoo/memoizee/compare/v0.4.12...v0.4.13) (2018-08-06)
|
|
20
|
+
|
|
21
|
+
### Features
|
|
22
|
+
|
|
23
|
+
- **promise:** support cancellation case ([b4b018d](https://github.com/medikoo/memoizee/commit/b4b018d)), closes [#97](https://github.com/medikoo/memoizee/issues/97)
|
|
24
|
+
|
|
25
|
+
<a name="0.4.12"></a>
|
|
26
|
+
|
|
27
|
+
## [0.4.12](https://github.com/medikoo/memoizee/compare/v0.4.11...v0.4.12) (2018-02-23)
|
|
28
|
+
|
|
29
|
+
### Bug Fixes
|
|
30
|
+
|
|
31
|
+
- **max-age:** unref timeouts to not block processes from exiting ([5bcc5a4](https://github.com/medikoo/memoizee/commit/5bcc5a4)), closes [#25](https://github.com/medikoo/memoizee/issues/25)
|
|
32
|
+
|
|
33
|
+
<a name="0.4.11"></a>
|
|
34
|
+
|
|
35
|
+
## [0.4.11](https://github.com/medikoo/memoizee/compare/v0.4.10...v0.4.11) (2017-09-11)
|
|
36
|
+
|
|
37
|
+
### Bug Fixes
|
|
38
|
+
|
|
39
|
+
- \_get and \_has internal args handling. ([7cb1c7a](https://github.com/medikoo/memoizee/commit/7cb1c7a)), closes [#88](https://github.com/medikoo/memoizee/issues/88)
|
|
40
|
+
|
|
41
|
+
<a name="0.4.10"></a>
|
|
42
|
+
|
|
43
|
+
## [0.4.10](https://github.com/medikoo/memoizee/compare/v0.4.9...v0.4.10) (2017-09-07)
|
|
44
|
+
|
|
45
|
+
### Bug Fixes
|
|
46
|
+
|
|
47
|
+
- remove then:finally mode as it can't work right ([5b79698](https://github.com/medikoo/memoizee/commit/5b79698))
|
|
48
|
+
|
|
49
|
+
<a name="0.4.9"></a>
|
|
50
|
+
|
|
51
|
+
## [0.4.9](https://github.com/medikoo/memoizee/compare/v0.4.8...v0.4.9) (2017-08-29)
|
|
52
|
+
|
|
53
|
+
<a name="0.4.8"></a>
|
|
54
|
+
|
|
55
|
+
## [0.4.8](https://github.com/medikoo/memoizee/compare/v0.4.7...v0.4.8) (2017-08-29)
|
|
56
|
+
|
|
57
|
+
<a name="0.4.7"></a>
|
|
58
|
+
|
|
59
|
+
## [0.4.7](https://github.com/medikoo/memoizee/compare/v0.4.6...v0.4.7) (2017-08-29)
|
|
60
|
+
|
|
61
|
+
### Features
|
|
62
|
+
|
|
63
|
+
- improve 'promise' mode handling ([759e315](https://github.com/medikoo/memoizee/commit/759e315))
|
|
64
|
+
- improve internal promise validation ([d23b94f](https://github.com/medikoo/memoizee/commit/d23b94f))
|
|
65
|
+
|
|
66
|
+
<a name="0.4.6"></a>
|
|
67
|
+
|
|
68
|
+
## [0.4.6](https://github.com/medikoo/memoizee/compare/v0.4.5...v0.4.6) (2017-08-24)
|
|
69
|
+
|
|
70
|
+
- `profileName` option for naming memoizee instances in profile output
|
|
71
|
+
|
|
72
|
+
<a name="0.4.5"></a>
|
|
73
|
+
|
|
74
|
+
## [0.4.5](https://github.com/medikoo/memoizee/compare/v0.4.4...v0.4.5) (2017-05-10)
|
|
75
|
+
|
|
76
|
+
### Bug Fixes
|
|
77
|
+
|
|
78
|
+
- resolution of extensions with weak handling ([f29a97b](https://github.com/medikoo/memoizee/commit/f29a97b)), closes [#79](https://github.com/medikoo/memoizee/issues/79)
|
|
79
|
+
|
|
80
|
+
## Old changelog
|
|
81
|
+
|
|
82
|
+
See `CHANGES`
|