Skip to content

Commit 1a352af

Browse files
committed
deprecate globals and global script data-* attributes, and set up the package for people to start importing Docsify and passing in non-global configs
1 parent 2387399 commit 1a352af

File tree

10 files changed

+290
-41
lines changed

10 files changed

+290
-41
lines changed

build/build.js

+21-7
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ const version = process.env.VERSION || pkg.version;
1717
/**
1818
* @param {{
1919
* input: string,
20+
* format: 'iife' | 'module',
2021
* output?: string,
2122
* globalName?: string,
2223
* plugins?: Array<import('rollup').Plugin>
@@ -46,11 +47,11 @@ async function build(opts) {
4647
},
4748
})
4849
.then(bundle => {
49-
const dest = 'lib/' + (opts.output || opts.input);
50+
const dest = opts.output || opts.input;
5051

5152
console.log(dest);
5253
return bundle.write({
53-
format: 'iife',
54+
format: opts.format,
5455
output: opts.globalName ? { name: opts.globalName } : {},
5556
file: dest,
5657
strict: false,
@@ -64,15 +65,28 @@ async function buildCore() {
6465
promises.push(
6566
build({
6667
input: 'src/core/index.js',
67-
output: 'docsify.js',
68+
output: 'lib/docsify.js',
69+
format: 'iife',
70+
}),
71+
build({
72+
input: 'src/core/module.js',
73+
output: 'dist/core/module.js',
74+
format: 'module',
6875
})
6976
);
7077

7178
if (isProd) {
7279
promises.push(
7380
build({
7481
input: 'src/core/index.js',
75-
output: 'docsify.min.js',
82+
output: 'lib/docsify.min.js',
83+
format: 'iife',
84+
plugins: [uglify()],
85+
}),
86+
build({
87+
input: 'src/core/module.js',
88+
output: 'dist/core/module.min.js',
89+
format: 'module',
7690
plugins: [uglify()],
7791
})
7892
);
@@ -98,7 +112,7 @@ async function buildAllPlugin() {
98112
const promises = plugins.map(item => {
99113
return build({
100114
input: 'src/plugins/' + item.input,
101-
output: 'plugins/' + item.name + '.js',
115+
output: 'lib/plugins/' + item.name + '.js',
102116
});
103117
});
104118

@@ -107,7 +121,7 @@ async function buildAllPlugin() {
107121
promises.push(
108122
build({
109123
input: 'src/plugins/' + item.input,
110-
output: 'plugins/' + item.name + '.min.js',
124+
output: 'lib/plugins/' + item.name + '.min.js',
111125
plugins: [uglify()],
112126
})
113127
);
@@ -140,7 +154,7 @@ async function main() {
140154

141155
build({
142156
input,
143-
output: 'plugins/' + name + '.js',
157+
output: 'lib/plugins/' + name + '.js',
144158
});
145159
}
146160
})

docs/index.html

+165-4
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@
7171
<body>
7272
<div id="app">Loading ...</div>
7373
<script src="//cdn.jsdelivr.net/npm/docsify-plugin-carbon@1"></script>
74-
<script>
74+
<!-- <script>
7575
// Docsify configuration
7676
window.$docsify = {
7777
alias: {
@@ -214,8 +214,12 @@
214214
},
215215
],
216216
};
217-
</script>
218-
<script src="//cdn.jsdelivr.net/npm/docsify@4/lib/docsify.min.js"></script>
217+
</script> -->
218+
219+
<!-- <script src="//cdn.jsdelivr.net/npm/docsify@4/lib/docsify.min.js"></script> -->
220+
221+
<!-- TODO this all relied on globals, currently disabled -->
222+
<!--
219223
<script src="//cdn.jsdelivr.net/npm/docsify@4/lib/plugins/search.min.js"></script>
220224
<script src="//cdn.jsdelivr.net/npm/docsify@4/lib/plugins/front-matter.min.js"></script>
221225
<script src="//cdn.jsdelivr.net/npm/docsify@4/lib/plugins/ga.min.js"></script>
@@ -225,6 +229,163 @@
225229
<script src="//cdn.jsdelivr.net/npm/prismjs@1/components/prism-nginx.min.js"></script>
226230
<script src="//cdn.jsdelivr.net/npm/prismjs@1/components/prism-php.min.js"></script>
227231
<script src="//cdn.jsdelivr.net/npm/vue@2/dist/vue.min.js"></script>
228-
<!-- <script src="//cdn.jsdelivr.net/npm/vue@3/dist/vue.global.prod.js"></script> -->
232+
<script src="//cdn.jsdelivr.net/npm/vue@3/dist/vue.global.prod.js"></script>
233+
-->
234+
235+
<script type="module">
236+
import { Docsify } from '/lib/module.js';
237+
238+
new Docsify({
239+
alias: {
240+
'.*?/awesome':
241+
'https://raw.githubusercontent.com/docsifyjs/awesome-docsify/master/README.md',
242+
'.*?/changelog':
243+
'https://raw.githubusercontent.com/docsifyjs/docsify/master/CHANGELOG.md',
244+
'/.*/_navbar.md': '/_navbar.md',
245+
'/es/(.*)':
246+
'https://raw.githubusercontent.com/docsifyjs/docs-es/master/$1',
247+
'/de-de/(.*)':
248+
'https://raw.githubusercontent.com/docsifyjs/docs-de/master/$1',
249+
'/ru-ru/(.*)':
250+
'https://raw.githubusercontent.com/docsifyjs/docs-ru/master/$1',
251+
'/zh-cn/(.*)':
252+
'https://cdn.jsdelivr.net/gh/docsifyjs/docs-zh@master/$1',
253+
},
254+
auto2top: true,
255+
coverpage: true,
256+
executeScript: true,
257+
loadSidebar: true,
258+
loadNavbar: true,
259+
mergeNavbar: true,
260+
maxLevel: 4,
261+
subMaxLevel: 2,
262+
ga: 'UA-106147152-1',
263+
matomo: {
264+
host: '//matomo.thunderwave.de',
265+
id: 6,
266+
},
267+
name: 'docsify',
268+
nameLink: {
269+
'/es/': '#/es/',
270+
'/de-de/': '#/de-de/',
271+
'/ru-ru/': '#/ru-ru/',
272+
'/zh-cn/': '#/zh-cn/',
273+
'/': '#/',
274+
},
275+
search: {
276+
noData: {
277+
'/es/': '¡No hay resultados!',
278+
'/de-de/': 'Keine Ergebnisse!',
279+
'/ru-ru/': 'Никаких результатов!',
280+
'/zh-cn/': '没有结果!',
281+
'/': 'No results!',
282+
},
283+
paths: 'auto',
284+
placeholder: {
285+
'/es/': 'Buscar',
286+
'/de-de/': 'Suche',
287+
'/ru-ru/': 'Поиск',
288+
'/zh-cn/': '搜索',
289+
'/': 'Search',
290+
},
291+
pathNamespaces: ['/es', '/de-de', '/ru-ru', '/zh-cn'],
292+
},
293+
skipLink: {
294+
'/es/': 'Saltar al contenido principal',
295+
'/de-de/': 'Ga naar de hoofdinhoud',
296+
'/ru-ru/': 'Перейти к основному содержанию',
297+
'/zh-cn/': '跳到主要内容',
298+
},
299+
vueComponents: {
300+
'button-counter': {
301+
template: /* html */ `<button @click="count += 1">You clicked me {{ count }} times</button>`,
302+
data() {
303+
return {
304+
count: 0,
305+
};
306+
},
307+
},
308+
},
309+
vueGlobalOptions: {
310+
data() {
311+
return {
312+
count: 0,
313+
message: 'Hello, World!',
314+
// Fake API response
315+
images: [
316+
{
317+
title: 'Image 1',
318+
url: 'https://picsum.photos/150?random=1',
319+
},
320+
{
321+
title: 'Image 2',
322+
url: 'https://picsum.photos/150?random=2',
323+
},
324+
{
325+
title: 'Image 3',
326+
url: 'https://picsum.photos/150?random=3',
327+
},
328+
],
329+
};
330+
},
331+
computed: {
332+
timeOfDay() {
333+
const date = new Date();
334+
const hours = date.getHours();
335+
336+
if (hours < 12) {
337+
return 'morning';
338+
} else if (hours < 18) {
339+
return 'afternoon';
340+
} else {
341+
return 'evening';
342+
}
343+
},
344+
},
345+
methods: {
346+
hello() {
347+
alert(this.message);
348+
},
349+
},
350+
},
351+
vueMounts: {
352+
'#counter': {
353+
data() {
354+
return {
355+
count: 0,
356+
};
357+
},
358+
},
359+
},
360+
plugins: [
361+
DocsifyCarbon.create('CEBI6KQE', 'docsifyjsorg'),
362+
function (hook, vm) {
363+
hook.beforeEach(html => {
364+
let url;
365+
if (/githubusercontent\.com/.test(vm.route.file)) {
366+
url = vm.route.file
367+
.replace('raw.githubusercontent.com', 'github.com')
368+
.replace(/\/master/, '/blob/master');
369+
} else if (/jsdelivr\.net/.test(vm.route.file)) {
370+
url = vm.route.file
371+
.replace('cdn.jsdelivr.net/gh', 'github.com')
372+
.replace('@master', '/blob/master');
373+
} else {
374+
url =
375+
'https://github.com/docsifyjs/docsify/blob/develop/docs/' +
376+
vm.route.file;
377+
}
378+
const editHtml = '[:memo: Edit Document](' + url + ')\n';
379+
return (
380+
editHtml +
381+
html +
382+
'\n\n----\n\n' +
383+
'<a href="https://docsify.js.org" target="_blank" style="color: inherit; font-weight: normal; text-decoration: none;">Powered by docsify</a>'
384+
);
385+
});
386+
},
387+
],
388+
});
389+
</script>
229390
</body>
230391
</html>

package.json

+5-2
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,16 @@
1818
"// These exports require moduleResolution:NodeNext to be enabled in the consumer.": "",
1919
"// TODO native ESM (in browsers) does not work yet because prismjs is not ESM and Docsify source imports it as CommonJS": "",
2020
"exports": {
21-
"./*": "./*",
21+
"./src/*": "./src/*",
22+
"./dist/core/module.js": "./dist/core/module.js",
23+
"./dist/core/module.min.js": "./dist/core/module.min.js",
2224
".": {
2325
"types": "./dist/core/Docsify.d.ts",
24-
"default": "./src/core/Docsify.js"
26+
"default": "./dist/core/module.min.js"
2527
}
2628
},
2729
"files": [
30+
"src",
2831
"lib",
2932
"themes"
3033
],

src/core/Docsify.js

+18-2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import prism from 'prismjs';
12
import { Router } from './router/index.js';
23
import { Render } from './render/index.js';
34
import { Fetch } from './fetch/index.js';
@@ -8,18 +9,31 @@ import config from './config.js';
89
import { isFn } from './util/core.js';
910
import { Lifecycle } from './init/lifecycle.js';
1011

12+
export { prism };
13+
export { marked } from 'marked';
14+
export * as util from './util/index.js';
15+
export * as dom from './util/dom.js';
16+
export { Compiler } from './render/compiler.js';
17+
export { slugify } from './render/slugify.js';
18+
export { get } from './util/ajax.js';
19+
1120
/** @typedef {new (...args: any[]) => any} Constructor */
21+
/** @typedef {import('./config.js').DocsifyConfig} DocsifyConfig */
1222

1323
// eslint-disable-next-line new-cap
1424
export class Docsify extends Fetch(
1525
// eslint-disable-next-line new-cap
1626
Events(Render(VirtualRoutes(Router(Lifecycle(Object)))))
1727
) {
18-
config = config(this);
28+
/** @type {DocsifyConfig} */
29+
config;
1930

20-
constructor() {
31+
/** @param {Partial<DocsifyConfig>} conf */
32+
constructor(conf = {}) {
2133
super();
2234

35+
this.config = config(this, conf);
36+
2337
this.initLifecycle(); // Init hooks
2438
this.initPlugin(); // Install plugins
2539
this.callHook('init');
@@ -45,3 +59,5 @@ export class Docsify extends Fetch(
4559
});
4660
}
4761
}
62+
63+
export const version = '__VERSION__';

0 commit comments

Comments
 (0)