markmap-lib 0.15.0-alpha.0 → 0.15.1

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/dist/index.js CHANGED
@@ -1,89 +1,53 @@
1
- /*! markmap-lib v0.15.0-alpha.0 | MIT License */
1
+ /*! markmap-lib v0.15.1 | MIT License */
2
2
  'use strict';
3
3
 
4
4
  var _extends = require('@babel/runtime/helpers/extends');
5
- var markmapCommon = require('markmap-common');
6
5
  var remarkable = require('remarkable');
6
+ var markmapCommon = require('markmap-common');
7
7
  var remarkableKatex = require('remarkable-katex');
8
- var Prism = require('prismjs');
9
- var loadLanguages = require('prismjs/components/');
10
8
  var yaml = require('js-yaml');
9
+ var hljs = require('highlight.js');
11
10
 
12
- const template = "<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">\n<title>Markmap</title>\n<style>\n* {\n margin: 0;\n padding: 0;\n}\n#mindmap {\n display: block;\n width: 100vw;\n height: 100vh;\n}\n</style>\n<!--CSS-->\n</head>\n<body>\n<svg id=\"mindmap\"></svg>\n<!--JS-->\n</body>\n</html>\n";
13
- const baseJsPaths = [`d3@${"6.2.0"}`, `markmap-view@${"0.15.0-alpha.0"}`];
14
- function fillTemplate(root, assets, extra) {
15
- var _extra, _extra$baseJs;
16
- extra = _extends({}, extra);
17
- (_extra$baseJs = (_extra = extra).baseJs) != null ? _extra$baseJs : _extra.baseJs = baseJsPaths.map(markmapCommon.buildJSItem);
18
- const {
19
- scripts,
20
- styles
21
- } = assets;
22
- const cssList = [...(styles ? markmapCommon.persistCSS(styles) : [])];
23
- const context = {
24
- getMarkmap: () => window.markmap,
25
- getOptions: extra.getOptions,
26
- jsonOptions: extra.jsonOptions,
27
- root
28
- };
29
- const jsList = [...markmapCommon.persistJS([...extra.baseJs, ...(scripts || []), {
11
+ const template = "<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">\n<title>Markmap</title>\n<style>\n* {\n margin: 0;\n padding: 0;\n}\n#mindmap {\n display: block;\n width: 100vw;\n height: 100vh;\n}\n</style>\n<!--CSS-->\n</head>\n<body>\n<svg id=\"mindmap\"></svg>\n<!--JS-->\n</body>\n</html>\n" ;
12
+ const baseJsPaths = [`d3@${"7.8.5"}/dist/d3.min.js`, `markmap-view@${"0.15.0"}/dist/browser/index.js`];
13
+
14
+ const name$3 = 'katex';
15
+ const preloadScripts = [`katex@${"0.16.8"}/dist/katex.min.js`].map(path => markmapCommon.buildJSItem(path));
16
+ const webfontloader = markmapCommon.buildJSItem(`webfontloader@${"1.6.28"}/webfontloader.js`);
17
+ webfontloader.data.defer = true;
18
+ const styles$1 = [`katex@${"0.16.8"}/dist/katex.min.css`].map(path => markmapCommon.buildCSSItem(path));
19
+ const config$1 = {
20
+ versions: {
21
+ katex: "0.16.8" ,
22
+ webfontloader: "1.6.28"
23
+ },
24
+ preloadScripts,
25
+ scripts: [{
30
26
  type: 'iife',
31
27
  data: {
32
- fn: (getMarkmap, getOptions, root, jsonOptions) => {
33
- const markmap = getMarkmap();
34
- window.mm = markmap.Markmap.create('svg#mindmap', (getOptions || markmap.deriveOptions)(jsonOptions), root);
28
+ fn: getMarkmap => {
29
+ window.WebFontConfig = {
30
+ custom: {
31
+ families: ['KaTeX_AMS', 'KaTeX_Caligraphic:n4,n7', 'KaTeX_Fraktur:n4,n7', 'KaTeX_Main:n4,n7,i4,i7', 'KaTeX_Math:i4,i7', 'KaTeX_Script', 'KaTeX_SansSerif:n4,n7,i4', 'KaTeX_Size1', 'KaTeX_Size2', 'KaTeX_Size3', 'KaTeX_Size4', 'KaTeX_Typewriter']
32
+ },
33
+ active: () => {
34
+ getMarkmap().refreshHook.call();
35
+ }
36
+ };
35
37
  },
36
- getParams: ({
37
- getMarkmap,
38
- getOptions,
39
- root,
40
- jsonOptions
41
- }) => {
42
- return [getMarkmap, getOptions, root, jsonOptions];
38
+ getParams({
39
+ getMarkmap
40
+ }) {
41
+ return [getMarkmap];
43
42
  }
44
43
  }
45
- }], context)];
46
- const html = template.replace('<!--CSS-->', () => cssList.join('')).replace('<!--JS-->', () => jsList.join(''));
47
- return html;
48
- }
49
-
50
- function getConfig$1() {
51
- const preloadScripts = [`katex@${"0.16.0"}/dist/katex.min.js`].map(markmapCommon.buildJSItem);
52
- const webfontloader = markmapCommon.buildJSItem(`webfontloader@${"1.6.28"}/webfontloader.js`);
53
- webfontloader.data.defer = true;
54
- const styles = [`katex@${"0.16.0"}/dist/katex.min.css`].map(markmapCommon.buildCSSItem);
55
- return {
56
- versions: {
57
- katex: "0.16.0",
58
- webfontloader: "1.6.28"
59
- },
60
- preloadScripts,
61
- scripts: [{
62
- type: 'iife',
63
- data: {
64
- fn: getMarkmap => {
65
- window.WebFontConfig = {
66
- custom: {
67
- families: ['KaTeX_AMS', 'KaTeX_Caligraphic:n4,n7', 'KaTeX_Fraktur:n4,n7', 'KaTeX_Main:n4,n7,i4,i7', 'KaTeX_Math:i4,i7', 'KaTeX_Script', 'KaTeX_SansSerif:n4,n7,i4', 'KaTeX_Size1', 'KaTeX_Size2', 'KaTeX_Size3', 'KaTeX_Size4', 'KaTeX_Typewriter']
68
- },
69
- active: () => {
70
- getMarkmap().refreshHook.call();
71
- }
72
- };
73
- },
74
- getParams({
75
- getMarkmap
76
- }) {
77
- return [getMarkmap];
78
- }
79
- }
80
- }, webfontloader],
81
- styles
82
- };
83
- }
44
+ }, webfontloader],
45
+ styles: styles$1
46
+ };
84
47
 
85
- function createTransformHooks() {
48
+ function createTransformHooks(transformer) {
86
49
  return {
50
+ transformer,
87
51
  parser: new markmapCommon.Hook(),
88
52
  beforeParse: new markmapCommon.Hook(),
89
53
  afterParse: new markmapCommon.Hook(),
@@ -99,85 +63,34 @@ function definePlugin(plugin) {
99
63
  return plugin;
100
64
  }
101
65
 
102
- const name$3 = 'katex';
103
- var katex = definePlugin(() => {
104
- const plugin = {
105
- name: name$3,
106
- config: getConfig$1(),
107
- transform(transformHooks) {
108
- let enableFeature = markmapCommon.noop;
109
- transformHooks.parser.tap(md => {
110
- md.use(remarkableKatex);
111
- md.renderer.rules.katex = markmapCommon.wrapFunction(md.renderer.rules.katex, (render, ...args) => {
112
- enableFeature();
113
- return render(...args);
114
- });
115
- });
116
- transformHooks.beforeParse.tap((_, context) => {
117
- enableFeature = () => {
118
- context.features[name$3] = true;
119
- };
120
- });
121
- return {
122
- styles: plugin.config.styles,
123
- scripts: plugin.config.scripts
124
- };
125
- }
126
- };
127
- return plugin;
128
- });
129
-
130
- function getConfig() {
131
- const preloadScripts = [`prismjs@${"1.28.0"}/components/prism-core.min.js`, `prismjs@${"1.28.0"}/plugins/autoloader/prism-autoloader.min.js`].map(markmapCommon.buildJSItem);
132
- const styles = [`prismjs@${"1.28.0"}/themes/prism.css`].map(markmapCommon.buildCSSItem);
133
- return {
134
- versions: {
135
- prismjs: "1.28.0"
136
- },
137
- preloadScripts,
138
- styles
139
- };
140
- }
141
-
142
- const name$2 = 'prism';
143
- var prism = definePlugin(() => {
144
- const plugin = {
145
- name: name$2,
146
- config: getConfig(),
147
- transform(transformHooks) {
148
- let enableFeature = markmapCommon.noop;
149
- transformHooks.parser.tap(md => {
150
- md.set({
151
- highlight: (str, lang) => {
152
- enableFeature();
153
- let grammar = Prism.languages[lang];
154
- if (!grammar && lang) {
155
- loadLanguages([lang]);
156
- grammar = Prism.languages[lang];
157
- }
158
- if (grammar) {
159
- return Prism.highlight(str, grammar, lang);
160
- }
161
- return '';
162
- }
163
- });
164
- });
165
- transformHooks.beforeParse.tap((_, context) => {
166
- enableFeature = () => {
167
- context.features[name$2] = true;
168
- };
66
+ const plugin$1 = definePlugin({
67
+ name: name$3,
68
+ config: config$1,
69
+ transform(transformHooks) {
70
+ var _plugin$config, _plugin$config2;
71
+ let enableFeature = markmapCommon.noop;
72
+ transformHooks.parser.tap(md => {
73
+ md.use(remarkableKatex);
74
+ md.renderer.rules.katex = markmapCommon.wrapFunction(md.renderer.rules.katex, (render, ...args) => {
75
+ enableFeature();
76
+ return render(...args);
169
77
  });
170
- return {
171
- styles: plugin.config.styles
78
+ });
79
+ transformHooks.beforeParse.tap((_, context) => {
80
+ enableFeature = () => {
81
+ context.features[name$3] = true;
172
82
  };
173
- }
174
- };
175
- return plugin;
83
+ });
84
+ return {
85
+ styles: (_plugin$config = plugin$1.config) == null ? void 0 : _plugin$config.styles,
86
+ scripts: (_plugin$config2 = plugin$1.config) == null ? void 0 : _plugin$config2.scripts
87
+ };
88
+ }
176
89
  });
177
90
 
178
- const name$1 = 'frontmatter';
91
+ const name$2 = 'frontmatter';
179
92
  var frontmatter = definePlugin({
180
- name: name$1,
93
+ name: name$2,
181
94
  transform(transformHooks) {
182
95
  transformHooks.beforeParse.tap((md, context) => {
183
96
  const {
@@ -225,20 +138,22 @@ function normalizeNumber(value) {
225
138
  return +value;
226
139
  }
227
140
 
228
- const name = 'npmUrl';
141
+ const name$1 = 'npmUrl';
229
142
  var npmUrl = definePlugin({
230
- name,
143
+ name: name$1,
231
144
  transform(transformHooks) {
232
145
  transformHooks.afterParse.tap((_, context) => {
233
146
  const {
234
147
  frontmatter
235
148
  } = context;
236
- if (frontmatter != null && frontmatter.markmap) {
149
+ const markmap = frontmatter == null ? void 0 : frontmatter.markmap;
150
+ if (markmap) {
237
151
  ['extraJs', 'extraCss'].forEach(key => {
238
- if (frontmatter.markmap[key]) {
239
- frontmatter.markmap[key] = frontmatter.markmap[key].map(path => {
152
+ const value = markmap[key];
153
+ if (value) {
154
+ markmap[key] = value.map(path => {
240
155
  if (path.startsWith('npm:')) {
241
- return markmapCommon.getFullUrl(path.slice(4));
156
+ return transformHooks.transformer.urlBuilder.getFullUrl(path.slice(4));
242
157
  }
243
158
  return path;
244
159
  });
@@ -250,7 +165,61 @@ var npmUrl = definePlugin({
250
165
  }
251
166
  });
252
167
 
253
- const plugins = [frontmatter, katex, prism, npmUrl];
168
+ const name = 'hljs';
169
+ const styles = [`highlight.js@${"11.8.0"}/styles/default.css`].map(path => markmapCommon.buildCSSItem(path));
170
+ const config = {
171
+ versions: {
172
+ hljs: "11.8.0"
173
+ },
174
+ styles
175
+ };
176
+ const plugin = definePlugin({
177
+ name,
178
+ config,
179
+ transform(transformHooks) {
180
+ var _plugin$config;
181
+ let enableFeature = markmapCommon.noop;
182
+ transformHooks.parser.tap(md => {
183
+ md.set({
184
+ highlight: (str, language) => {
185
+ enableFeature();
186
+ return hljs.highlightAuto(str, language ? [language] : undefined).value;
187
+ }
188
+ });
189
+ });
190
+ transformHooks.beforeParse.tap((_, context) => {
191
+ enableFeature = () => {
192
+ context.features[name] = true;
193
+ };
194
+ });
195
+ return {
196
+ styles: (_plugin$config = plugin.config) == null ? void 0 : _plugin$config.styles
197
+ };
198
+ }
199
+ });
200
+
201
+ const plugins = [frontmatter, plugin$1, plugin, npmUrl];
202
+
203
+ function patchJSItem(transformer, item) {
204
+ if (item.type === 'script' && item.data.src) {
205
+ return _extends({}, item, {
206
+ data: _extends({}, item.data, {
207
+ src: transformer.urlBuilder.getFullUrl(item.data.src)
208
+ })
209
+ });
210
+ }
211
+ return item;
212
+ }
213
+ function patchCSSItem(transformer, item) {
214
+ if (item.type === 'stylesheet' && item.data.href) {
215
+ return _extends({}, item, {
216
+ data: _extends({}, item.data, {
217
+ href: transformer.urlBuilder.getFullUrl(item.data.href)
218
+ })
219
+ });
220
+ }
221
+ return item;
222
+ }
254
223
 
255
224
  function cleanNode(node) {
256
225
  if (node.type === 'heading') {
@@ -284,9 +253,7 @@ function cleanNode(node) {
284
253
  }
285
254
  });
286
255
  }
287
- if (node.children.length === 0) {
288
- delete node.children;
289
- } else {
256
+ if (node.children.length > 0) {
290
257
  node.children.forEach(child => cleanNode(child));
291
258
  if (node.children.length === 1 && !node.children[0].content) {
292
259
  node.children = node.children[0].children;
@@ -294,16 +261,16 @@ function cleanNode(node) {
294
261
  }
295
262
  }
296
263
  function resetDepth(node, depth = 0) {
297
- var _node$children;
298
264
  node.depth = depth;
299
- (_node$children = node.children) == null ? void 0 : _node$children.forEach(child => {
265
+ node.children.forEach(child => {
300
266
  resetDepth(child, depth + 1);
301
267
  });
302
268
  }
303
269
  class Transformer {
304
270
  constructor(plugins$1 = plugins) {
305
271
  this.assetsMap = {};
306
- this.hooks = createTransformHooks();
272
+ this.urlBuilder = new markmapCommon.UrlBuilder();
273
+ this.hooks = createTransformHooks(this);
307
274
  this.plugins = plugins$1.map(plugin => typeof plugin === 'function' ? plugin() : plugin);
308
275
  const assetsMap = {};
309
276
  for (const {
@@ -343,13 +310,13 @@ class Transformer {
343
310
  const stack = [root];
344
311
  let depth = 0;
345
312
  for (const token of tokens) {
313
+ const payload = {};
314
+ if (token.lines) {
315
+ payload.lines = token.lines;
316
+ }
346
317
  let current = stack[stack.length - 1];
347
318
  if (token.type.endsWith('_open')) {
348
319
  const type = token.type.slice(0, -5);
349
- const payload = {};
350
- if (token.lines) {
351
- payload.lines = token.lines;
352
- }
353
320
  if (type === 'heading') {
354
321
  depth = token.hLevel;
355
322
  while (((_current = current) == null ? void 0 : _current.depth) >= depth) {
@@ -384,10 +351,13 @@ class Transformer {
384
351
  }
385
352
  } else if (token.type === 'inline') {
386
353
  const revoke = this.hooks.htmltag.tap(ctx => {
387
- const comment = ctx.result.match(/^<!--([\s\S]*?)-->$/);
354
+ var _ctx$result;
355
+ const comment = (_ctx$result = ctx.result) == null ? void 0 : _ctx$result.match(/^<!--([\s\S]*?)-->$/);
388
356
  const data = comment == null ? void 0 : comment[1].trim().split(' ');
389
- if (data[0] === 'fold') {
390
- current.payload.fold = ['all', 'recursively'].includes(data[1]) ? 2 : 1;
357
+ if ((data == null ? void 0 : data[0]) === 'fold') {
358
+ current.payload = _extends({}, current.payload, {
359
+ fold: ['all', 'recursively'].includes(data[1]) ? 2 : 1
360
+ });
391
361
  ctx.result = '';
392
362
  }
393
363
  });
@@ -395,15 +365,13 @@ class Transformer {
395
365
  revoke();
396
366
  current.content = `${current.content || ''}${text}`;
397
367
  } else if (token.type === 'fence') {
398
- let result = md.renderer.render([token], md.options, {});
399
- // Remarkable only adds className to `<code>` but not `<pre>`, copy it to make PrismJS style work.
400
- const matches = result.match(/<code( class="[^"]*")>/);
401
- if (matches) result = result.replace('<pre>', `<pre${matches[1]}>`);
368
+ const result = md.renderer.render([token], md.options, {});
402
369
  current.children.push({
403
370
  type: token.type,
404
371
  depth: depth + 1,
405
372
  content: result,
406
- children: []
373
+ children: [],
374
+ payload
407
375
  });
408
376
  } else ;
409
377
  }
@@ -443,8 +411,8 @@ class Transformer {
443
411
  }
444
412
  }
445
413
  return {
446
- styles,
447
- scripts
414
+ styles: styles.map(item => patchCSSItem(this, item)),
415
+ scripts: scripts.map(item => patchJSItem(this, item))
448
416
  };
449
417
  }
450
418
 
@@ -455,15 +423,50 @@ class Transformer {
455
423
  const keys = this.plugins.map(plugin => plugin.name).filter(name => features[name]);
456
424
  return this.getAssets(keys);
457
425
  }
426
+ fillTemplate(root, assets, extra) {
427
+ var _extra, _extra$baseJs;
428
+ extra = _extends({}, extra);
429
+ (_extra$baseJs = (_extra = extra).baseJs) != null ? _extra$baseJs : _extra.baseJs = baseJsPaths.map(path => this.urlBuilder.getFullUrl(path)).map(path => markmapCommon.buildJSItem(path));
430
+ const {
431
+ scripts,
432
+ styles
433
+ } = assets;
434
+ const cssList = [...(styles ? markmapCommon.persistCSS(styles) : [])];
435
+ const context = {
436
+ getMarkmap: () => window.markmap,
437
+ getOptions: extra.getOptions,
438
+ jsonOptions: extra.jsonOptions,
439
+ root
440
+ };
441
+ const jsList = [...markmapCommon.persistJS([...extra.baseJs, ...(scripts || []), {
442
+ type: 'iife',
443
+ data: {
444
+ fn: (getMarkmap, getOptions, root, jsonOptions) => {
445
+ const markmap = getMarkmap();
446
+ window.mm = markmap.Markmap.create('svg#mindmap', (getOptions || markmap.deriveOptions)(jsonOptions), root);
447
+ },
448
+ getParams: ({
449
+ getMarkmap,
450
+ getOptions,
451
+ root,
452
+ jsonOptions
453
+ }) => {
454
+ return [getMarkmap, getOptions, root, jsonOptions];
455
+ }
456
+ }
457
+ }], context)];
458
+ const html = template.replace('<!--CSS-->', () => cssList.join('')).replace('<!--JS-->', () => jsList.join(''));
459
+ return html;
460
+ }
458
461
  }
459
462
 
460
463
  const transformerVersions = {
461
- 'markmap-lib': '0.15.0-alpha.0',
462
- d3: "6.2.0"
464
+ 'markmap-lib': '0.15.1',
465
+ d3: "7.8.5"
463
466
  };
464
467
 
465
468
  exports.Transformer = Transformer;
466
469
  exports.baseJsPaths = baseJsPaths;
467
470
  exports.builtInPlugins = plugins;
468
- exports.fillTemplate = fillTemplate;
471
+ exports.template = template;
469
472
  exports.transformerVersions = transformerVersions;