markmap-view 0.14.2-alpha.2 → 0.14.2-alpha.4
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.cjs.js +25 -237
- package/dist/index.esm.js +9 -220
- package/dist/index.js +26 -239
- package/dist/index.min.js +3 -4
- package/package.json +3 -3
package/dist/index.cjs.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
/*! markmap-view v0.14.2-alpha.
|
|
1
|
+
/*! markmap-view v0.14.2-alpha.4+569dd11 | MIT License */
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
+
var markmapCommon = require('markmap-common');
|
|
4
5
|
var d3 = require('d3');
|
|
5
6
|
|
|
6
7
|
function _interopNamespace(e) {
|
|
@@ -17,219 +18,6 @@ return Object.freeze(n);
|
|
|
17
18
|
|
|
18
19
|
var d3__namespace = /*#__PURE__*/_interopNamespace(d3);
|
|
19
20
|
|
|
20
|
-
/*! markmap-common v0.14.2-alpha.2+3837810 | MIT License */
|
|
21
|
-
class Hook {
|
|
22
|
-
constructor() {
|
|
23
|
-
this.listeners = [];
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
tap(fn) {
|
|
27
|
-
this.listeners.push(fn);
|
|
28
|
-
return () => this.revoke(fn);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
revoke(fn) {
|
|
32
|
-
const i = this.listeners.indexOf(fn);
|
|
33
|
-
if (i >= 0) this.listeners.splice(i, 1);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
revokeAll() {
|
|
37
|
-
this.listeners.splice(0);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
call(...args) {
|
|
41
|
-
for (const fn of this.listeners) {
|
|
42
|
-
fn(...args);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
function _extends$1() {
|
|
49
|
-
_extends$1 = Object.assign || function (target) {
|
|
50
|
-
for (var i = 1; i < arguments.length; i++) {
|
|
51
|
-
var source = arguments[i];
|
|
52
|
-
|
|
53
|
-
for (var key in source) {
|
|
54
|
-
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
55
|
-
target[key] = source[key];
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
return target;
|
|
61
|
-
};
|
|
62
|
-
|
|
63
|
-
return _extends$1.apply(this, arguments);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
const uniqId = Math.random().toString(36).slice(2, 8);
|
|
67
|
-
let globalIndex = 0;
|
|
68
|
-
|
|
69
|
-
function getId() {
|
|
70
|
-
globalIndex += 1;
|
|
71
|
-
return `mm-${uniqId}-${globalIndex}`;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
function noop() {// noop
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
function walkTree(tree, callback, key = 'children') {
|
|
78
|
-
const walk = (item, parent) => callback(item, () => {
|
|
79
|
-
var _item$key;
|
|
80
|
-
|
|
81
|
-
(_item$key = item[key]) == null ? void 0 : _item$key.forEach(child => {
|
|
82
|
-
walk(child, item);
|
|
83
|
-
});
|
|
84
|
-
}, parent);
|
|
85
|
-
|
|
86
|
-
walk(tree);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
function arrayFrom(arrayLike) {
|
|
90
|
-
if (Array.from) return Array.from(arrayLike);
|
|
91
|
-
const array = [];
|
|
92
|
-
|
|
93
|
-
for (let i = 0; i < arrayLike.length; i += 1) {
|
|
94
|
-
array.push(arrayLike[i]);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
return array;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
function addClass(className, ...rest) {
|
|
101
|
-
const classList = (className || '').split(' ').filter(Boolean);
|
|
102
|
-
rest.forEach(item => {
|
|
103
|
-
if (item && classList.indexOf(item) < 0) classList.push(item);
|
|
104
|
-
});
|
|
105
|
-
return classList.join(' ');
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
function childSelector(filter) {
|
|
109
|
-
if (typeof filter === 'string') {
|
|
110
|
-
const tagName = filter;
|
|
111
|
-
|
|
112
|
-
filter = el => el.tagName === tagName;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
const filterFn = filter;
|
|
116
|
-
return function selector() {
|
|
117
|
-
let nodes = arrayFrom(this.childNodes);
|
|
118
|
-
if (filterFn) nodes = nodes.filter(node => filterFn(node));
|
|
119
|
-
return nodes;
|
|
120
|
-
};
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
function memoize(fn) {
|
|
124
|
-
const cache = {};
|
|
125
|
-
return function memoized(...args) {
|
|
126
|
-
const key = `${args[0]}`;
|
|
127
|
-
let data = cache[key];
|
|
128
|
-
|
|
129
|
-
if (!data) {
|
|
130
|
-
data = {
|
|
131
|
-
value: fn(...args)
|
|
132
|
-
};
|
|
133
|
-
cache[key] = data;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
return data.value;
|
|
137
|
-
};
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
function createElement(tagName, props, attrs) {
|
|
141
|
-
const el = document.createElement(tagName);
|
|
142
|
-
|
|
143
|
-
if (props) {
|
|
144
|
-
Object.entries(props).forEach(([key, value]) => {
|
|
145
|
-
el[key] = value;
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
if (attrs) {
|
|
150
|
-
Object.entries(attrs).forEach(([key, value]) => {
|
|
151
|
-
el.setAttribute(key, value);
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
return el;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
const memoizedPreloadJS = memoize(url => {
|
|
159
|
-
document.head.append(createElement('link', {
|
|
160
|
-
rel: 'preload',
|
|
161
|
-
as: 'script',
|
|
162
|
-
href: url
|
|
163
|
-
}));
|
|
164
|
-
});
|
|
165
|
-
|
|
166
|
-
async function loadJSItem(item, context) {
|
|
167
|
-
if (!item.loaded) {
|
|
168
|
-
if (item.type === 'script') {
|
|
169
|
-
item.loaded = new Promise((resolve, reject) => {
|
|
170
|
-
var _item$data;
|
|
171
|
-
|
|
172
|
-
document.head.append(createElement('script', _extends$1({}, item.data, {
|
|
173
|
-
onload: resolve,
|
|
174
|
-
onerror: reject
|
|
175
|
-
}))); // Run inline script synchronously
|
|
176
|
-
|
|
177
|
-
if (!((_item$data = item.data) != null && _item$data.src)) resolve(undefined);
|
|
178
|
-
}).then(() => {
|
|
179
|
-
item.loaded = true;
|
|
180
|
-
});
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
if (item.type === 'iife') {
|
|
184
|
-
const {
|
|
185
|
-
fn,
|
|
186
|
-
getParams
|
|
187
|
-
} = item.data;
|
|
188
|
-
fn(...((getParams == null ? void 0 : getParams(context)) || []));
|
|
189
|
-
item.loaded = true;
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
await item.loaded;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
function loadCSSItem(item) {
|
|
197
|
-
if (item.loaded) return;
|
|
198
|
-
item.loaded = true;
|
|
199
|
-
|
|
200
|
-
if (item.type === 'style') {
|
|
201
|
-
document.head.append(createElement('style', {
|
|
202
|
-
textContent: item.data
|
|
203
|
-
}));
|
|
204
|
-
} else if (item.type === 'stylesheet') {
|
|
205
|
-
document.head.append(createElement('link', _extends$1({
|
|
206
|
-
rel: 'stylesheet'
|
|
207
|
-
}, item.data)));
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
async function loadJS(items, context) {
|
|
212
|
-
const needPreload = items.filter(item => {
|
|
213
|
-
var _item$data2;
|
|
214
|
-
|
|
215
|
-
return item.type === 'script' && ((_item$data2 = item.data) == null ? void 0 : _item$data2.src);
|
|
216
|
-
});
|
|
217
|
-
if (needPreload.length > 1) needPreload.forEach(item => memoizedPreloadJS(item.data.src));
|
|
218
|
-
context = _extends$1({
|
|
219
|
-
getMarkmap: () => window.markmap
|
|
220
|
-
}, context);
|
|
221
|
-
|
|
222
|
-
for (const item of items) {
|
|
223
|
-
await loadJSItem(item, context);
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
function loadCSS(items) {
|
|
228
|
-
for (const item of items) {
|
|
229
|
-
loadCSSItem(item);
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
|
|
233
21
|
function _extends() {
|
|
234
22
|
_extends = Object.assign || function (target) {
|
|
235
23
|
for (var i = 1; i < arguments.length; i++) {
|
|
@@ -1240,7 +1028,7 @@ function linkWidth(nodeData) {
|
|
|
1240
1028
|
}
|
|
1241
1029
|
|
|
1242
1030
|
function adjustSpacing(tree, spacing) {
|
|
1243
|
-
walkTree(tree, (d, next) => {
|
|
1031
|
+
markmapCommon.walkTree(tree, (d, next) => {
|
|
1244
1032
|
d.ySizeInner = d.ySize - spacing;
|
|
1245
1033
|
d.y += spacing;
|
|
1246
1034
|
next();
|
|
@@ -1258,7 +1046,7 @@ function stopPropagation(e) {
|
|
|
1258
1046
|
|
|
1259
1047
|
function createViewHooks() {
|
|
1260
1048
|
return {
|
|
1261
|
-
transformHtml: new Hook()
|
|
1049
|
+
transformHtml: new markmapCommon.Hook()
|
|
1262
1050
|
};
|
|
1263
1051
|
}
|
|
1264
1052
|
/**
|
|
@@ -1266,7 +1054,7 @@ function createViewHooks() {
|
|
|
1266
1054
|
*/
|
|
1267
1055
|
|
|
1268
1056
|
|
|
1269
|
-
const refreshHook = new Hook();
|
|
1057
|
+
const refreshHook = new markmapCommon.Hook();
|
|
1270
1058
|
const defaultColorFn = d3__namespace.scaleOrdinal(d3__namespace.schemeCategory10);
|
|
1271
1059
|
const isMacintosh = typeof navigator !== 'undefined' && navigator.userAgent.includes('Macintosh');
|
|
1272
1060
|
class Markmap {
|
|
@@ -1288,7 +1076,7 @@ class Markmap {
|
|
|
1288
1076
|
}).on('zoom', this.handleZoom);
|
|
1289
1077
|
this.setOptions(opts);
|
|
1290
1078
|
this.state = {
|
|
1291
|
-
id: this.options.id || this.svg.attr('id') || getId()
|
|
1079
|
+
id: this.options.id || this.svg.attr('id') || markmapCommon.getId()
|
|
1292
1080
|
};
|
|
1293
1081
|
this.g = this.svg.append('g');
|
|
1294
1082
|
this.updateStyle();
|
|
@@ -1309,7 +1097,7 @@ class Markmap {
|
|
|
1309
1097
|
}
|
|
1310
1098
|
|
|
1311
1099
|
updateStyle() {
|
|
1312
|
-
this.svg.attr('class', addClass(this.svg.attr('class'), 'markmap', this.state.id));
|
|
1100
|
+
this.svg.attr('class', markmapCommon.addClass(this.svg.attr('class'), 'markmap', this.state.id));
|
|
1313
1101
|
const style = this.getStyleContent();
|
|
1314
1102
|
this.styleNode.text(style);
|
|
1315
1103
|
}
|
|
@@ -1360,8 +1148,8 @@ class Markmap {
|
|
|
1360
1148
|
document.body.append(container, style);
|
|
1361
1149
|
const groupStyle = maxWidth ? `max-width: ${maxWidth}px` : '';
|
|
1362
1150
|
let foldRecursively = 0;
|
|
1363
|
-
walkTree(node, (item, next) => {
|
|
1364
|
-
var _item$children, _item$payload;
|
|
1151
|
+
markmapCommon.walkTree(node, (item, next, parent) => {
|
|
1152
|
+
var _item$children, _parent$state, _item$payload;
|
|
1365
1153
|
|
|
1366
1154
|
item.children = (_item$children = item.children) == null ? void 0 : _item$children.map(child => _extends({}, child));
|
|
1367
1155
|
nodeId += 1;
|
|
@@ -1377,7 +1165,8 @@ class Markmap {
|
|
|
1377
1165
|
container.append(group);
|
|
1378
1166
|
item.state = _extends({}, item.state, {
|
|
1379
1167
|
id: nodeId,
|
|
1380
|
-
el: group.firstChild
|
|
1168
|
+
el: group.firstChild,
|
|
1169
|
+
path: [parent == null ? void 0 : (_parent$state = parent.state) == null ? void 0 : _parent$state.path, item.state.id].filter(Boolean).join('.')
|
|
1381
1170
|
});
|
|
1382
1171
|
color(item); // preload colors
|
|
1383
1172
|
|
|
@@ -1394,7 +1183,7 @@ class Markmap {
|
|
|
1394
1183
|
next();
|
|
1395
1184
|
if (isFoldRecursively) foldRecursively -= 1;
|
|
1396
1185
|
});
|
|
1397
|
-
const nodes = arrayFrom(container.childNodes).map(group => group.firstChild);
|
|
1186
|
+
const nodes = markmapCommon.arrayFrom(container.childNodes).map(group => group.firstChild);
|
|
1398
1187
|
this.viewHooks.transformHtml.call(this, nodes); // Clone the rendered HTML and set `white-space: nowrap` to it to detect its max-width.
|
|
1399
1188
|
// The parent node will have a width of the max-width and the original content without
|
|
1400
1189
|
// `white-space: nowrap` gets re-layouted, then we will get the expected layout, with
|
|
@@ -1403,13 +1192,12 @@ class Markmap {
|
|
|
1403
1192
|
nodes.forEach(node => {
|
|
1404
1193
|
node.parentNode.append(node.cloneNode(true));
|
|
1405
1194
|
});
|
|
1406
|
-
walkTree(node, (item, next, parent) => {
|
|
1407
|
-
var _parent$
|
|
1195
|
+
markmapCommon.walkTree(node, (item, next, parent) => {
|
|
1196
|
+
var _parent$state2;
|
|
1408
1197
|
|
|
1409
1198
|
const rect = item.state.el.getBoundingClientRect();
|
|
1410
1199
|
item.content = item.state.el.innerHTML;
|
|
1411
1200
|
item.state.size = [Math.ceil(rect.width) + 1, Math.max(Math.ceil(rect.height), nodeMinHeight)];
|
|
1412
|
-
item.state.path = [parent == null ? void 0 : (_parent$state = parent.state) == null ? void 0 : _parent$state.path, item.state.id].filter(Boolean).join('.');
|
|
1413
1201
|
item.state.key = [parent == null ? void 0 : (_parent$state2 = parent.state) == null ? void 0 : _parent$state2.id, item.state.id].filter(Boolean).join('.') + // FIXME: find a way to check content hash
|
|
1414
1202
|
item.content;
|
|
1415
1203
|
next();
|
|
@@ -1479,7 +1267,7 @@ class Markmap {
|
|
|
1479
1267
|
const x0 = (_origin$data$state$x = origin.data.state.x0) != null ? _origin$data$state$x : origin.x;
|
|
1480
1268
|
const y0 = (_origin$data$state$y = origin.data.state.y0) != null ? _origin$data$state$y : origin.y; // Update the nodes
|
|
1481
1269
|
|
|
1482
|
-
const node = this.g.selectAll(childSelector('g')).data(descendants, d => d.data.state.key);
|
|
1270
|
+
const node = this.g.selectAll(markmapCommon.childSelector('g')).data(descendants, d => d.data.state.key);
|
|
1483
1271
|
const nodeEnter = node.enter().append('g').attr('data-depth', d => d.data.depth).attr('data-path', d => d.data.state.path).attr('transform', d => `translate(${y0 + origin.ySizeInner - d.ySizeInner},${x0 + origin.xSize / 2 - d.xSize})`);
|
|
1484
1272
|
const nodeExit = this.transition(node.exit());
|
|
1485
1273
|
nodeExit.select('line').attr('x1', d => d.ySizeInner).attr('x2', d => d.ySizeInner);
|
|
@@ -1492,12 +1280,12 @@ class Markmap {
|
|
|
1492
1280
|
});
|
|
1493
1281
|
this.transition(nodeMerge).attr('transform', d => `translate(${d.y},${d.x - d.xSize / 2})`); // Update lines under the content
|
|
1494
1282
|
|
|
1495
|
-
const line = nodeMerge.selectAll(childSelector('line')).data(d => [d], d => d.data.state.key).join(enter => {
|
|
1283
|
+
const line = nodeMerge.selectAll(markmapCommon.childSelector('line')).data(d => [d], d => d.data.state.key).join(enter => {
|
|
1496
1284
|
return enter.append('line').attr('x1', d => d.ySizeInner).attr('x2', d => d.ySizeInner);
|
|
1497
1285
|
}, update => update, exit => exit.remove());
|
|
1498
1286
|
this.transition(line).attr('x1', -1).attr('x2', d => d.ySizeInner + 2).attr('y1', d => d.xSize).attr('y2', d => d.xSize).attr('stroke', d => color(d.data)).attr('stroke-width', linkWidth); // Circle to link to children of the node
|
|
1499
1287
|
|
|
1500
|
-
const circle = nodeMerge.selectAll(childSelector('circle')).data(d => d.data.children ? [d] : [], d => d.data.state.key).join(enter => {
|
|
1288
|
+
const circle = nodeMerge.selectAll(markmapCommon.childSelector('circle')).data(d => d.data.children ? [d] : [], d => d.data.state.key).join(enter => {
|
|
1501
1289
|
return enter.append('circle').attr('stroke-width', '1.5').attr('cx', d => d.ySizeInner).attr('cy', d => d.xSize).attr('r', 0).on('click', (e, d) => this.handleClick(e, d));
|
|
1502
1290
|
}, update => update, exit => exit.remove());
|
|
1503
1291
|
this.transition(circle).attr('r', 6).attr('cx', d => d.ySizeInner).attr('cy', d => d.xSize).attr('stroke', d => color(d.data)).attr('fill', d => {
|
|
@@ -1505,7 +1293,7 @@ class Markmap {
|
|
|
1505
1293
|
|
|
1506
1294
|
return (_d$data$payload2 = d.data.payload) != null && _d$data$payload2.fold && d.data.children ? color(d.data) : '#fff';
|
|
1507
1295
|
});
|
|
1508
|
-
const foreignObject = nodeMerge.selectAll(childSelector('foreignObject')).data(d => [d], d => d.data.state.key).join(enter => {
|
|
1296
|
+
const foreignObject = nodeMerge.selectAll(markmapCommon.childSelector('foreignObject')).data(d => [d], d => d.data.state.key).join(enter => {
|
|
1509
1297
|
const fo = enter.append('foreignObject').attr('class', 'markmap-foreign').attr('x', paddingX).attr('y', 0).style('opacity', 0).on('mousedown', stopPropagation).on('dblclick', stopPropagation);
|
|
1510
1298
|
fo.append('xhtml:div').select(function select(d) {
|
|
1511
1299
|
const clone = d.data.state.el.cloneNode(true);
|
|
@@ -1516,7 +1304,7 @@ class Markmap {
|
|
|
1516
1304
|
}, update => update, exit => exit.remove()).attr('width', d => Math.max(0, d.ySizeInner - paddingX * 2)).attr('height', d => d.xSize);
|
|
1517
1305
|
this.transition(foreignObject).style('opacity', 1); // Update the links
|
|
1518
1306
|
|
|
1519
|
-
const path = this.g.selectAll(childSelector('path')).data(links, d => d.target.data.state.key).join(enter => {
|
|
1307
|
+
const path = this.g.selectAll(markmapCommon.childSelector('path')).data(links, d => d.target.data.state.key).join(enter => {
|
|
1520
1308
|
const source = [y0 + origin.ySizeInner, x0 + origin.xSize / 2];
|
|
1521
1309
|
return enter.insert('path', 'g').attr('class', 'markmap-link').attr('data-depth', d => d.target.data.depth).attr('data-path', d => d.target.data.state.path).attr('d', linkShape({
|
|
1522
1310
|
source,
|
|
@@ -1573,7 +1361,7 @@ class Markmap {
|
|
|
1573
1361
|
const naturalHeight = maxX - minX;
|
|
1574
1362
|
const scale = Math.min(offsetWidth / naturalWidth * fitRatio, offsetHeight / naturalHeight * fitRatio, 2);
|
|
1575
1363
|
const initialZoom = d3__namespace.zoomIdentity.translate((offsetWidth - naturalWidth * scale) / 2 - minY * scale, (offsetHeight - naturalHeight * scale) / 2 - minX * scale).scale(scale);
|
|
1576
|
-
return this.transition(this.svg).call(this.zoom.transform, initialZoom).end().catch(noop);
|
|
1364
|
+
return this.transition(this.svg).call(this.zoom.transform, initialZoom).end().catch(markmapCommon.noop);
|
|
1577
1365
|
}
|
|
1578
1366
|
/**
|
|
1579
1367
|
* Pan the content to make the provided node visible in the viewport.
|
|
@@ -1583,7 +1371,7 @@ class Markmap {
|
|
|
1583
1371
|
async ensureView(node, padding) {
|
|
1584
1372
|
let g;
|
|
1585
1373
|
let itemData;
|
|
1586
|
-
this.g.selectAll(childSelector('g')).each(function walk(d) {
|
|
1374
|
+
this.g.selectAll(markmapCommon.childSelector('g')).each(function walk(d) {
|
|
1587
1375
|
if (d.data === node) {
|
|
1588
1376
|
g = this;
|
|
1589
1377
|
itemData = d;
|
|
@@ -1610,7 +1398,7 @@ class Markmap {
|
|
|
1610
1398
|
|
|
1611
1399
|
if (dx || dy) {
|
|
1612
1400
|
const newTransform = transform.translate(dx, dy);
|
|
1613
|
-
return this.transition(this.svg).call(this.zoom.transform, newTransform).end().catch(noop);
|
|
1401
|
+
return this.transition(this.svg).call(this.zoom.transform, newTransform).end().catch(markmapCommon.noop);
|
|
1614
1402
|
}
|
|
1615
1403
|
}
|
|
1616
1404
|
/**
|
|
@@ -1628,7 +1416,7 @@ class Markmap {
|
|
|
1628
1416
|
const halfHeight = offsetHeight / 2;
|
|
1629
1417
|
const transform = d3__namespace.zoomTransform(svgNode);
|
|
1630
1418
|
const newTransform = transform.translate((halfWidth - transform.x) * (1 - scale) / transform.k, (halfHeight - transform.y) * (1 - scale) / transform.k).scale(scale);
|
|
1631
|
-
return this.transition(this.svg).call(this.zoom.transform, newTransform).end().catch(noop);
|
|
1419
|
+
return this.transition(this.svg).call(this.zoom.transform, newTransform).end().catch(markmapCommon.noop);
|
|
1632
1420
|
}
|
|
1633
1421
|
|
|
1634
1422
|
destroy() {
|
|
@@ -1711,10 +1499,10 @@ function deriveOptions(jsonOptions) {
|
|
|
1711
1499
|
return opts;
|
|
1712
1500
|
}
|
|
1713
1501
|
|
|
1502
|
+
exports.loadCSS = markmapCommon.loadCSS;
|
|
1503
|
+
exports.loadJS = markmapCommon.loadJS;
|
|
1714
1504
|
exports.Markmap = Markmap;
|
|
1715
1505
|
exports.defaultColorFn = defaultColorFn;
|
|
1716
1506
|
exports.deriveOptions = deriveOptions;
|
|
1717
1507
|
exports.globalCSS = globalCSS;
|
|
1718
|
-
exports.loadCSS = loadCSS;
|
|
1719
|
-
exports.loadJS = loadJS;
|
|
1720
1508
|
exports.refreshHook = refreshHook;
|
package/dist/index.esm.js
CHANGED
|
@@ -1,219 +1,8 @@
|
|
|
1
|
-
/*! markmap-view v0.14.2-alpha.
|
|
1
|
+
/*! markmap-view v0.14.2-alpha.4+569dd11 | MIT License */
|
|
2
|
+
import { Hook, getId, addClass, walkTree, arrayFrom, childSelector, noop } from 'markmap-common';
|
|
3
|
+
export { loadCSS, loadJS } from 'markmap-common';
|
|
2
4
|
import * as d3 from 'd3';
|
|
3
5
|
|
|
4
|
-
/*! markmap-common v0.14.2-alpha.2+3837810 | MIT License */
|
|
5
|
-
class Hook {
|
|
6
|
-
constructor() {
|
|
7
|
-
this.listeners = [];
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
tap(fn) {
|
|
11
|
-
this.listeners.push(fn);
|
|
12
|
-
return () => this.revoke(fn);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
revoke(fn) {
|
|
16
|
-
const i = this.listeners.indexOf(fn);
|
|
17
|
-
if (i >= 0) this.listeners.splice(i, 1);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
revokeAll() {
|
|
21
|
-
this.listeners.splice(0);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
call(...args) {
|
|
25
|
-
for (const fn of this.listeners) {
|
|
26
|
-
fn(...args);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
function _extends$1() {
|
|
33
|
-
_extends$1 = Object.assign || function (target) {
|
|
34
|
-
for (var i = 1; i < arguments.length; i++) {
|
|
35
|
-
var source = arguments[i];
|
|
36
|
-
|
|
37
|
-
for (var key in source) {
|
|
38
|
-
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
39
|
-
target[key] = source[key];
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
return target;
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
return _extends$1.apply(this, arguments);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
const uniqId = Math.random().toString(36).slice(2, 8);
|
|
51
|
-
let globalIndex = 0;
|
|
52
|
-
|
|
53
|
-
function getId() {
|
|
54
|
-
globalIndex += 1;
|
|
55
|
-
return `mm-${uniqId}-${globalIndex}`;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
function noop() {// noop
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
function walkTree(tree, callback, key = 'children') {
|
|
62
|
-
const walk = (item, parent) => callback(item, () => {
|
|
63
|
-
var _item$key;
|
|
64
|
-
|
|
65
|
-
(_item$key = item[key]) == null ? void 0 : _item$key.forEach(child => {
|
|
66
|
-
walk(child, item);
|
|
67
|
-
});
|
|
68
|
-
}, parent);
|
|
69
|
-
|
|
70
|
-
walk(tree);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
function arrayFrom(arrayLike) {
|
|
74
|
-
if (Array.from) return Array.from(arrayLike);
|
|
75
|
-
const array = [];
|
|
76
|
-
|
|
77
|
-
for (let i = 0; i < arrayLike.length; i += 1) {
|
|
78
|
-
array.push(arrayLike[i]);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
return array;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
function addClass(className, ...rest) {
|
|
85
|
-
const classList = (className || '').split(' ').filter(Boolean);
|
|
86
|
-
rest.forEach(item => {
|
|
87
|
-
if (item && classList.indexOf(item) < 0) classList.push(item);
|
|
88
|
-
});
|
|
89
|
-
return classList.join(' ');
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
function childSelector(filter) {
|
|
93
|
-
if (typeof filter === 'string') {
|
|
94
|
-
const tagName = filter;
|
|
95
|
-
|
|
96
|
-
filter = el => el.tagName === tagName;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
const filterFn = filter;
|
|
100
|
-
return function selector() {
|
|
101
|
-
let nodes = arrayFrom(this.childNodes);
|
|
102
|
-
if (filterFn) nodes = nodes.filter(node => filterFn(node));
|
|
103
|
-
return nodes;
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
function memoize(fn) {
|
|
108
|
-
const cache = {};
|
|
109
|
-
return function memoized(...args) {
|
|
110
|
-
const key = `${args[0]}`;
|
|
111
|
-
let data = cache[key];
|
|
112
|
-
|
|
113
|
-
if (!data) {
|
|
114
|
-
data = {
|
|
115
|
-
value: fn(...args)
|
|
116
|
-
};
|
|
117
|
-
cache[key] = data;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
return data.value;
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
function createElement(tagName, props, attrs) {
|
|
125
|
-
const el = document.createElement(tagName);
|
|
126
|
-
|
|
127
|
-
if (props) {
|
|
128
|
-
Object.entries(props).forEach(([key, value]) => {
|
|
129
|
-
el[key] = value;
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
if (attrs) {
|
|
134
|
-
Object.entries(attrs).forEach(([key, value]) => {
|
|
135
|
-
el.setAttribute(key, value);
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
return el;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
const memoizedPreloadJS = memoize(url => {
|
|
143
|
-
document.head.append(createElement('link', {
|
|
144
|
-
rel: 'preload',
|
|
145
|
-
as: 'script',
|
|
146
|
-
href: url
|
|
147
|
-
}));
|
|
148
|
-
});
|
|
149
|
-
|
|
150
|
-
async function loadJSItem(item, context) {
|
|
151
|
-
if (!item.loaded) {
|
|
152
|
-
if (item.type === 'script') {
|
|
153
|
-
item.loaded = new Promise((resolve, reject) => {
|
|
154
|
-
var _item$data;
|
|
155
|
-
|
|
156
|
-
document.head.append(createElement('script', _extends$1({}, item.data, {
|
|
157
|
-
onload: resolve,
|
|
158
|
-
onerror: reject
|
|
159
|
-
}))); // Run inline script synchronously
|
|
160
|
-
|
|
161
|
-
if (!((_item$data = item.data) != null && _item$data.src)) resolve(undefined);
|
|
162
|
-
}).then(() => {
|
|
163
|
-
item.loaded = true;
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
if (item.type === 'iife') {
|
|
168
|
-
const {
|
|
169
|
-
fn,
|
|
170
|
-
getParams
|
|
171
|
-
} = item.data;
|
|
172
|
-
fn(...((getParams == null ? void 0 : getParams(context)) || []));
|
|
173
|
-
item.loaded = true;
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
await item.loaded;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
function loadCSSItem(item) {
|
|
181
|
-
if (item.loaded) return;
|
|
182
|
-
item.loaded = true;
|
|
183
|
-
|
|
184
|
-
if (item.type === 'style') {
|
|
185
|
-
document.head.append(createElement('style', {
|
|
186
|
-
textContent: item.data
|
|
187
|
-
}));
|
|
188
|
-
} else if (item.type === 'stylesheet') {
|
|
189
|
-
document.head.append(createElement('link', _extends$1({
|
|
190
|
-
rel: 'stylesheet'
|
|
191
|
-
}, item.data)));
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
async function loadJS(items, context) {
|
|
196
|
-
const needPreload = items.filter(item => {
|
|
197
|
-
var _item$data2;
|
|
198
|
-
|
|
199
|
-
return item.type === 'script' && ((_item$data2 = item.data) == null ? void 0 : _item$data2.src);
|
|
200
|
-
});
|
|
201
|
-
if (needPreload.length > 1) needPreload.forEach(item => memoizedPreloadJS(item.data.src));
|
|
202
|
-
context = _extends$1({
|
|
203
|
-
getMarkmap: () => window.markmap
|
|
204
|
-
}, context);
|
|
205
|
-
|
|
206
|
-
for (const item of items) {
|
|
207
|
-
await loadJSItem(item, context);
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
function loadCSS(items) {
|
|
212
|
-
for (const item of items) {
|
|
213
|
-
loadCSSItem(item);
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
|
|
217
6
|
function _extends() {
|
|
218
7
|
_extends = Object.assign || function (target) {
|
|
219
8
|
for (var i = 1; i < arguments.length; i++) {
|
|
@@ -1344,8 +1133,8 @@ class Markmap {
|
|
|
1344
1133
|
document.body.append(container, style);
|
|
1345
1134
|
const groupStyle = maxWidth ? `max-width: ${maxWidth}px` : '';
|
|
1346
1135
|
let foldRecursively = 0;
|
|
1347
|
-
walkTree(node, (item, next) => {
|
|
1348
|
-
var _item$children, _item$payload;
|
|
1136
|
+
walkTree(node, (item, next, parent) => {
|
|
1137
|
+
var _item$children, _parent$state, _item$payload;
|
|
1349
1138
|
|
|
1350
1139
|
item.children = (_item$children = item.children) == null ? void 0 : _item$children.map(child => _extends({}, child));
|
|
1351
1140
|
nodeId += 1;
|
|
@@ -1361,7 +1150,8 @@ class Markmap {
|
|
|
1361
1150
|
container.append(group);
|
|
1362
1151
|
item.state = _extends({}, item.state, {
|
|
1363
1152
|
id: nodeId,
|
|
1364
|
-
el: group.firstChild
|
|
1153
|
+
el: group.firstChild,
|
|
1154
|
+
path: [parent == null ? void 0 : (_parent$state = parent.state) == null ? void 0 : _parent$state.path, item.state.id].filter(Boolean).join('.')
|
|
1365
1155
|
});
|
|
1366
1156
|
color(item); // preload colors
|
|
1367
1157
|
|
|
@@ -1388,12 +1178,11 @@ class Markmap {
|
|
|
1388
1178
|
node.parentNode.append(node.cloneNode(true));
|
|
1389
1179
|
});
|
|
1390
1180
|
walkTree(node, (item, next, parent) => {
|
|
1391
|
-
var _parent$
|
|
1181
|
+
var _parent$state2;
|
|
1392
1182
|
|
|
1393
1183
|
const rect = item.state.el.getBoundingClientRect();
|
|
1394
1184
|
item.content = item.state.el.innerHTML;
|
|
1395
1185
|
item.state.size = [Math.ceil(rect.width) + 1, Math.max(Math.ceil(rect.height), nodeMinHeight)];
|
|
1396
|
-
item.state.path = [parent == null ? void 0 : (_parent$state = parent.state) == null ? void 0 : _parent$state.path, item.state.id].filter(Boolean).join('.');
|
|
1397
1186
|
item.state.key = [parent == null ? void 0 : (_parent$state2 = parent.state) == null ? void 0 : _parent$state2.id, item.state.id].filter(Boolean).join('.') + // FIXME: find a way to check content hash
|
|
1398
1187
|
item.content;
|
|
1399
1188
|
next();
|
|
@@ -1695,4 +1484,4 @@ function deriveOptions(jsonOptions) {
|
|
|
1695
1484
|
return opts;
|
|
1696
1485
|
}
|
|
1697
1486
|
|
|
1698
|
-
export { Markmap, defaultColorFn, deriveOptions, globalCSS,
|
|
1487
|
+
export { Markmap, defaultColorFn, deriveOptions, globalCSS, refreshHook };
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/*! markmap-view v0.14.2-alpha.
|
|
2
|
-
(function (exports, d3) {
|
|
1
|
+
/*! markmap-view v0.14.2-alpha.4+569dd11 | MIT License */
|
|
2
|
+
(function (exports, markmapCommon, d3) {
|
|
3
3
|
'use strict';
|
|
4
4
|
|
|
5
5
|
function _interopNamespace(e) {
|
|
@@ -16,219 +16,6 @@ return Object.freeze(n);
|
|
|
16
16
|
|
|
17
17
|
var d3__namespace = /*#__PURE__*/_interopNamespace(d3);
|
|
18
18
|
|
|
19
|
-
/*! markmap-common v0.14.2-alpha.2+3837810 | MIT License */
|
|
20
|
-
class Hook {
|
|
21
|
-
constructor() {
|
|
22
|
-
this.listeners = [];
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
tap(fn) {
|
|
26
|
-
this.listeners.push(fn);
|
|
27
|
-
return () => this.revoke(fn);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
revoke(fn) {
|
|
31
|
-
const i = this.listeners.indexOf(fn);
|
|
32
|
-
if (i >= 0) this.listeners.splice(i, 1);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
revokeAll() {
|
|
36
|
-
this.listeners.splice(0);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
call(...args) {
|
|
40
|
-
for (const fn of this.listeners) {
|
|
41
|
-
fn(...args);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
function _extends$1() {
|
|
48
|
-
_extends$1 = Object.assign || function (target) {
|
|
49
|
-
for (var i = 1; i < arguments.length; i++) {
|
|
50
|
-
var source = arguments[i];
|
|
51
|
-
|
|
52
|
-
for (var key in source) {
|
|
53
|
-
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
54
|
-
target[key] = source[key];
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
return target;
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
return _extends$1.apply(this, arguments);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
const uniqId = Math.random().toString(36).slice(2, 8);
|
|
66
|
-
let globalIndex = 0;
|
|
67
|
-
|
|
68
|
-
function getId() {
|
|
69
|
-
globalIndex += 1;
|
|
70
|
-
return `mm-${uniqId}-${globalIndex}`;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
function noop() {// noop
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
function walkTree(tree, callback, key = 'children') {
|
|
77
|
-
const walk = (item, parent) => callback(item, () => {
|
|
78
|
-
var _item$key;
|
|
79
|
-
|
|
80
|
-
(_item$key = item[key]) == null ? void 0 : _item$key.forEach(child => {
|
|
81
|
-
walk(child, item);
|
|
82
|
-
});
|
|
83
|
-
}, parent);
|
|
84
|
-
|
|
85
|
-
walk(tree);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
function arrayFrom(arrayLike) {
|
|
89
|
-
if (Array.from) return Array.from(arrayLike);
|
|
90
|
-
const array = [];
|
|
91
|
-
|
|
92
|
-
for (let i = 0; i < arrayLike.length; i += 1) {
|
|
93
|
-
array.push(arrayLike[i]);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
return array;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
function addClass(className, ...rest) {
|
|
100
|
-
const classList = (className || '').split(' ').filter(Boolean);
|
|
101
|
-
rest.forEach(item => {
|
|
102
|
-
if (item && classList.indexOf(item) < 0) classList.push(item);
|
|
103
|
-
});
|
|
104
|
-
return classList.join(' ');
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
function childSelector(filter) {
|
|
108
|
-
if (typeof filter === 'string') {
|
|
109
|
-
const tagName = filter;
|
|
110
|
-
|
|
111
|
-
filter = el => el.tagName === tagName;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
const filterFn = filter;
|
|
115
|
-
return function selector() {
|
|
116
|
-
let nodes = arrayFrom(this.childNodes);
|
|
117
|
-
if (filterFn) nodes = nodes.filter(node => filterFn(node));
|
|
118
|
-
return nodes;
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
function memoize(fn) {
|
|
123
|
-
const cache = {};
|
|
124
|
-
return function memoized(...args) {
|
|
125
|
-
const key = `${args[0]}`;
|
|
126
|
-
let data = cache[key];
|
|
127
|
-
|
|
128
|
-
if (!data) {
|
|
129
|
-
data = {
|
|
130
|
-
value: fn(...args)
|
|
131
|
-
};
|
|
132
|
-
cache[key] = data;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
return data.value;
|
|
136
|
-
};
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
function createElement(tagName, props, attrs) {
|
|
140
|
-
const el = document.createElement(tagName);
|
|
141
|
-
|
|
142
|
-
if (props) {
|
|
143
|
-
Object.entries(props).forEach(([key, value]) => {
|
|
144
|
-
el[key] = value;
|
|
145
|
-
});
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
if (attrs) {
|
|
149
|
-
Object.entries(attrs).forEach(([key, value]) => {
|
|
150
|
-
el.setAttribute(key, value);
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
return el;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
const memoizedPreloadJS = memoize(url => {
|
|
158
|
-
document.head.append(createElement('link', {
|
|
159
|
-
rel: 'preload',
|
|
160
|
-
as: 'script',
|
|
161
|
-
href: url
|
|
162
|
-
}));
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
async function loadJSItem(item, context) {
|
|
166
|
-
if (!item.loaded) {
|
|
167
|
-
if (item.type === 'script') {
|
|
168
|
-
item.loaded = new Promise((resolve, reject) => {
|
|
169
|
-
var _item$data;
|
|
170
|
-
|
|
171
|
-
document.head.append(createElement('script', _extends$1({}, item.data, {
|
|
172
|
-
onload: resolve,
|
|
173
|
-
onerror: reject
|
|
174
|
-
}))); // Run inline script synchronously
|
|
175
|
-
|
|
176
|
-
if (!((_item$data = item.data) != null && _item$data.src)) resolve(undefined);
|
|
177
|
-
}).then(() => {
|
|
178
|
-
item.loaded = true;
|
|
179
|
-
});
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
if (item.type === 'iife') {
|
|
183
|
-
const {
|
|
184
|
-
fn,
|
|
185
|
-
getParams
|
|
186
|
-
} = item.data;
|
|
187
|
-
fn(...((getParams == null ? void 0 : getParams(context)) || []));
|
|
188
|
-
item.loaded = true;
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
await item.loaded;
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
function loadCSSItem(item) {
|
|
196
|
-
if (item.loaded) return;
|
|
197
|
-
item.loaded = true;
|
|
198
|
-
|
|
199
|
-
if (item.type === 'style') {
|
|
200
|
-
document.head.append(createElement('style', {
|
|
201
|
-
textContent: item.data
|
|
202
|
-
}));
|
|
203
|
-
} else if (item.type === 'stylesheet') {
|
|
204
|
-
document.head.append(createElement('link', _extends$1({
|
|
205
|
-
rel: 'stylesheet'
|
|
206
|
-
}, item.data)));
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
async function loadJS(items, context) {
|
|
211
|
-
const needPreload = items.filter(item => {
|
|
212
|
-
var _item$data2;
|
|
213
|
-
|
|
214
|
-
return item.type === 'script' && ((_item$data2 = item.data) == null ? void 0 : _item$data2.src);
|
|
215
|
-
});
|
|
216
|
-
if (needPreload.length > 1) needPreload.forEach(item => memoizedPreloadJS(item.data.src));
|
|
217
|
-
context = _extends$1({
|
|
218
|
-
getMarkmap: () => window.markmap
|
|
219
|
-
}, context);
|
|
220
|
-
|
|
221
|
-
for (const item of items) {
|
|
222
|
-
await loadJSItem(item, context);
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
function loadCSS(items) {
|
|
227
|
-
for (const item of items) {
|
|
228
|
-
loadCSSItem(item);
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
|
|
232
19
|
function _extends() {
|
|
233
20
|
_extends = Object.assign || function (target) {
|
|
234
21
|
for (var i = 1; i < arguments.length; i++) {
|
|
@@ -1239,7 +1026,7 @@ function linkWidth(nodeData) {
|
|
|
1239
1026
|
}
|
|
1240
1027
|
|
|
1241
1028
|
function adjustSpacing(tree, spacing) {
|
|
1242
|
-
walkTree(tree, (d, next) => {
|
|
1029
|
+
markmapCommon.walkTree(tree, (d, next) => {
|
|
1243
1030
|
d.ySizeInner = d.ySize - spacing;
|
|
1244
1031
|
d.y += spacing;
|
|
1245
1032
|
next();
|
|
@@ -1257,7 +1044,7 @@ function stopPropagation(e) {
|
|
|
1257
1044
|
|
|
1258
1045
|
function createViewHooks() {
|
|
1259
1046
|
return {
|
|
1260
|
-
transformHtml: new Hook()
|
|
1047
|
+
transformHtml: new markmapCommon.Hook()
|
|
1261
1048
|
};
|
|
1262
1049
|
}
|
|
1263
1050
|
/**
|
|
@@ -1265,7 +1052,7 @@ function createViewHooks() {
|
|
|
1265
1052
|
*/
|
|
1266
1053
|
|
|
1267
1054
|
|
|
1268
|
-
const refreshHook = new Hook();
|
|
1055
|
+
const refreshHook = new markmapCommon.Hook();
|
|
1269
1056
|
const defaultColorFn = d3__namespace.scaleOrdinal(d3__namespace.schemeCategory10);
|
|
1270
1057
|
const isMacintosh = typeof navigator !== 'undefined' && navigator.userAgent.includes('Macintosh');
|
|
1271
1058
|
class Markmap {
|
|
@@ -1287,7 +1074,7 @@ class Markmap {
|
|
|
1287
1074
|
}).on('zoom', this.handleZoom);
|
|
1288
1075
|
this.setOptions(opts);
|
|
1289
1076
|
this.state = {
|
|
1290
|
-
id: this.options.id || this.svg.attr('id') || getId()
|
|
1077
|
+
id: this.options.id || this.svg.attr('id') || markmapCommon.getId()
|
|
1291
1078
|
};
|
|
1292
1079
|
this.g = this.svg.append('g');
|
|
1293
1080
|
this.updateStyle();
|
|
@@ -1308,7 +1095,7 @@ class Markmap {
|
|
|
1308
1095
|
}
|
|
1309
1096
|
|
|
1310
1097
|
updateStyle() {
|
|
1311
|
-
this.svg.attr('class', addClass(this.svg.attr('class'), 'markmap', this.state.id));
|
|
1098
|
+
this.svg.attr('class', markmapCommon.addClass(this.svg.attr('class'), 'markmap', this.state.id));
|
|
1312
1099
|
const style = this.getStyleContent();
|
|
1313
1100
|
this.styleNode.text(style);
|
|
1314
1101
|
}
|
|
@@ -1359,8 +1146,8 @@ class Markmap {
|
|
|
1359
1146
|
document.body.append(container, style);
|
|
1360
1147
|
const groupStyle = maxWidth ? `max-width: ${maxWidth}px` : '';
|
|
1361
1148
|
let foldRecursively = 0;
|
|
1362
|
-
walkTree(node, (item, next) => {
|
|
1363
|
-
var _item$children, _item$payload;
|
|
1149
|
+
markmapCommon.walkTree(node, (item, next, parent) => {
|
|
1150
|
+
var _item$children, _parent$state, _item$payload;
|
|
1364
1151
|
|
|
1365
1152
|
item.children = (_item$children = item.children) == null ? void 0 : _item$children.map(child => _extends({}, child));
|
|
1366
1153
|
nodeId += 1;
|
|
@@ -1376,7 +1163,8 @@ class Markmap {
|
|
|
1376
1163
|
container.append(group);
|
|
1377
1164
|
item.state = _extends({}, item.state, {
|
|
1378
1165
|
id: nodeId,
|
|
1379
|
-
el: group.firstChild
|
|
1166
|
+
el: group.firstChild,
|
|
1167
|
+
path: [parent == null ? void 0 : (_parent$state = parent.state) == null ? void 0 : _parent$state.path, item.state.id].filter(Boolean).join('.')
|
|
1380
1168
|
});
|
|
1381
1169
|
color(item); // preload colors
|
|
1382
1170
|
|
|
@@ -1393,7 +1181,7 @@ class Markmap {
|
|
|
1393
1181
|
next();
|
|
1394
1182
|
if (isFoldRecursively) foldRecursively -= 1;
|
|
1395
1183
|
});
|
|
1396
|
-
const nodes = arrayFrom(container.childNodes).map(group => group.firstChild);
|
|
1184
|
+
const nodes = markmapCommon.arrayFrom(container.childNodes).map(group => group.firstChild);
|
|
1397
1185
|
this.viewHooks.transformHtml.call(this, nodes); // Clone the rendered HTML and set `white-space: nowrap` to it to detect its max-width.
|
|
1398
1186
|
// The parent node will have a width of the max-width and the original content without
|
|
1399
1187
|
// `white-space: nowrap` gets re-layouted, then we will get the expected layout, with
|
|
@@ -1402,13 +1190,12 @@ class Markmap {
|
|
|
1402
1190
|
nodes.forEach(node => {
|
|
1403
1191
|
node.parentNode.append(node.cloneNode(true));
|
|
1404
1192
|
});
|
|
1405
|
-
walkTree(node, (item, next, parent) => {
|
|
1406
|
-
var _parent$
|
|
1193
|
+
markmapCommon.walkTree(node, (item, next, parent) => {
|
|
1194
|
+
var _parent$state2;
|
|
1407
1195
|
|
|
1408
1196
|
const rect = item.state.el.getBoundingClientRect();
|
|
1409
1197
|
item.content = item.state.el.innerHTML;
|
|
1410
1198
|
item.state.size = [Math.ceil(rect.width) + 1, Math.max(Math.ceil(rect.height), nodeMinHeight)];
|
|
1411
|
-
item.state.path = [parent == null ? void 0 : (_parent$state = parent.state) == null ? void 0 : _parent$state.path, item.state.id].filter(Boolean).join('.');
|
|
1412
1199
|
item.state.key = [parent == null ? void 0 : (_parent$state2 = parent.state) == null ? void 0 : _parent$state2.id, item.state.id].filter(Boolean).join('.') + // FIXME: find a way to check content hash
|
|
1413
1200
|
item.content;
|
|
1414
1201
|
next();
|
|
@@ -1478,7 +1265,7 @@ class Markmap {
|
|
|
1478
1265
|
const x0 = (_origin$data$state$x = origin.data.state.x0) != null ? _origin$data$state$x : origin.x;
|
|
1479
1266
|
const y0 = (_origin$data$state$y = origin.data.state.y0) != null ? _origin$data$state$y : origin.y; // Update the nodes
|
|
1480
1267
|
|
|
1481
|
-
const node = this.g.selectAll(childSelector('g')).data(descendants, d => d.data.state.key);
|
|
1268
|
+
const node = this.g.selectAll(markmapCommon.childSelector('g')).data(descendants, d => d.data.state.key);
|
|
1482
1269
|
const nodeEnter = node.enter().append('g').attr('data-depth', d => d.data.depth).attr('data-path', d => d.data.state.path).attr('transform', d => `translate(${y0 + origin.ySizeInner - d.ySizeInner},${x0 + origin.xSize / 2 - d.xSize})`);
|
|
1483
1270
|
const nodeExit = this.transition(node.exit());
|
|
1484
1271
|
nodeExit.select('line').attr('x1', d => d.ySizeInner).attr('x2', d => d.ySizeInner);
|
|
@@ -1491,12 +1278,12 @@ class Markmap {
|
|
|
1491
1278
|
});
|
|
1492
1279
|
this.transition(nodeMerge).attr('transform', d => `translate(${d.y},${d.x - d.xSize / 2})`); // Update lines under the content
|
|
1493
1280
|
|
|
1494
|
-
const line = nodeMerge.selectAll(childSelector('line')).data(d => [d], d => d.data.state.key).join(enter => {
|
|
1281
|
+
const line = nodeMerge.selectAll(markmapCommon.childSelector('line')).data(d => [d], d => d.data.state.key).join(enter => {
|
|
1495
1282
|
return enter.append('line').attr('x1', d => d.ySizeInner).attr('x2', d => d.ySizeInner);
|
|
1496
1283
|
}, update => update, exit => exit.remove());
|
|
1497
1284
|
this.transition(line).attr('x1', -1).attr('x2', d => d.ySizeInner + 2).attr('y1', d => d.xSize).attr('y2', d => d.xSize).attr('stroke', d => color(d.data)).attr('stroke-width', linkWidth); // Circle to link to children of the node
|
|
1498
1285
|
|
|
1499
|
-
const circle = nodeMerge.selectAll(childSelector('circle')).data(d => d.data.children ? [d] : [], d => d.data.state.key).join(enter => {
|
|
1286
|
+
const circle = nodeMerge.selectAll(markmapCommon.childSelector('circle')).data(d => d.data.children ? [d] : [], d => d.data.state.key).join(enter => {
|
|
1500
1287
|
return enter.append('circle').attr('stroke-width', '1.5').attr('cx', d => d.ySizeInner).attr('cy', d => d.xSize).attr('r', 0).on('click', (e, d) => this.handleClick(e, d));
|
|
1501
1288
|
}, update => update, exit => exit.remove());
|
|
1502
1289
|
this.transition(circle).attr('r', 6).attr('cx', d => d.ySizeInner).attr('cy', d => d.xSize).attr('stroke', d => color(d.data)).attr('fill', d => {
|
|
@@ -1504,7 +1291,7 @@ class Markmap {
|
|
|
1504
1291
|
|
|
1505
1292
|
return (_d$data$payload2 = d.data.payload) != null && _d$data$payload2.fold && d.data.children ? color(d.data) : '#fff';
|
|
1506
1293
|
});
|
|
1507
|
-
const foreignObject = nodeMerge.selectAll(childSelector('foreignObject')).data(d => [d], d => d.data.state.key).join(enter => {
|
|
1294
|
+
const foreignObject = nodeMerge.selectAll(markmapCommon.childSelector('foreignObject')).data(d => [d], d => d.data.state.key).join(enter => {
|
|
1508
1295
|
const fo = enter.append('foreignObject').attr('class', 'markmap-foreign').attr('x', paddingX).attr('y', 0).style('opacity', 0).on('mousedown', stopPropagation).on('dblclick', stopPropagation);
|
|
1509
1296
|
fo.append('xhtml:div').select(function select(d) {
|
|
1510
1297
|
const clone = d.data.state.el.cloneNode(true);
|
|
@@ -1515,7 +1302,7 @@ class Markmap {
|
|
|
1515
1302
|
}, update => update, exit => exit.remove()).attr('width', d => Math.max(0, d.ySizeInner - paddingX * 2)).attr('height', d => d.xSize);
|
|
1516
1303
|
this.transition(foreignObject).style('opacity', 1); // Update the links
|
|
1517
1304
|
|
|
1518
|
-
const path = this.g.selectAll(childSelector('path')).data(links, d => d.target.data.state.key).join(enter => {
|
|
1305
|
+
const path = this.g.selectAll(markmapCommon.childSelector('path')).data(links, d => d.target.data.state.key).join(enter => {
|
|
1519
1306
|
const source = [y0 + origin.ySizeInner, x0 + origin.xSize / 2];
|
|
1520
1307
|
return enter.insert('path', 'g').attr('class', 'markmap-link').attr('data-depth', d => d.target.data.depth).attr('data-path', d => d.target.data.state.path).attr('d', linkShape({
|
|
1521
1308
|
source,
|
|
@@ -1572,7 +1359,7 @@ class Markmap {
|
|
|
1572
1359
|
const naturalHeight = maxX - minX;
|
|
1573
1360
|
const scale = Math.min(offsetWidth / naturalWidth * fitRatio, offsetHeight / naturalHeight * fitRatio, 2);
|
|
1574
1361
|
const initialZoom = d3__namespace.zoomIdentity.translate((offsetWidth - naturalWidth * scale) / 2 - minY * scale, (offsetHeight - naturalHeight * scale) / 2 - minX * scale).scale(scale);
|
|
1575
|
-
return this.transition(this.svg).call(this.zoom.transform, initialZoom).end().catch(noop);
|
|
1362
|
+
return this.transition(this.svg).call(this.zoom.transform, initialZoom).end().catch(markmapCommon.noop);
|
|
1576
1363
|
}
|
|
1577
1364
|
/**
|
|
1578
1365
|
* Pan the content to make the provided node visible in the viewport.
|
|
@@ -1582,7 +1369,7 @@ class Markmap {
|
|
|
1582
1369
|
async ensureView(node, padding) {
|
|
1583
1370
|
let g;
|
|
1584
1371
|
let itemData;
|
|
1585
|
-
this.g.selectAll(childSelector('g')).each(function walk(d) {
|
|
1372
|
+
this.g.selectAll(markmapCommon.childSelector('g')).each(function walk(d) {
|
|
1586
1373
|
if (d.data === node) {
|
|
1587
1374
|
g = this;
|
|
1588
1375
|
itemData = d;
|
|
@@ -1609,7 +1396,7 @@ class Markmap {
|
|
|
1609
1396
|
|
|
1610
1397
|
if (dx || dy) {
|
|
1611
1398
|
const newTransform = transform.translate(dx, dy);
|
|
1612
|
-
return this.transition(this.svg).call(this.zoom.transform, newTransform).end().catch(noop);
|
|
1399
|
+
return this.transition(this.svg).call(this.zoom.transform, newTransform).end().catch(markmapCommon.noop);
|
|
1613
1400
|
}
|
|
1614
1401
|
}
|
|
1615
1402
|
/**
|
|
@@ -1627,7 +1414,7 @@ class Markmap {
|
|
|
1627
1414
|
const halfHeight = offsetHeight / 2;
|
|
1628
1415
|
const transform = d3__namespace.zoomTransform(svgNode);
|
|
1629
1416
|
const newTransform = transform.translate((halfWidth - transform.x) * (1 - scale) / transform.k, (halfHeight - transform.y) * (1 - scale) / transform.k).scale(scale);
|
|
1630
|
-
return this.transition(this.svg).call(this.zoom.transform, newTransform).end().catch(noop);
|
|
1417
|
+
return this.transition(this.svg).call(this.zoom.transform, newTransform).end().catch(markmapCommon.noop);
|
|
1631
1418
|
}
|
|
1632
1419
|
|
|
1633
1420
|
destroy() {
|
|
@@ -1710,12 +1497,12 @@ function deriveOptions(jsonOptions) {
|
|
|
1710
1497
|
return opts;
|
|
1711
1498
|
}
|
|
1712
1499
|
|
|
1500
|
+
exports.loadCSS = markmapCommon.loadCSS;
|
|
1501
|
+
exports.loadJS = markmapCommon.loadJS;
|
|
1713
1502
|
exports.Markmap = Markmap;
|
|
1714
1503
|
exports.defaultColorFn = defaultColorFn;
|
|
1715
1504
|
exports.deriveOptions = deriveOptions;
|
|
1716
1505
|
exports.globalCSS = globalCSS;
|
|
1717
|
-
exports.loadCSS = loadCSS;
|
|
1718
|
-
exports.loadJS = loadJS;
|
|
1719
1506
|
exports.refreshHook = refreshHook;
|
|
1720
1507
|
|
|
1721
|
-
})(this.markmap = this.markmap || {}, d3);
|
|
1508
|
+
})(this.markmap = this.markmap || {}, markmapCommon, d3);
|
package/dist/index.min.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
/*! markmap-view v0.14.2-alpha.
|
|
2
|
-
!function(t,e){"use strict";function
|
|
3
|
-
/*! markmap-common v0.14.2-alpha.2+3837810 | MIT License */class i{constructor(){this.listeners=[]}tap(t){return this.listeners.push(t),()=>this.revoke(t)}revoke(t){const e=this.listeners.indexOf(t);e>=0&&this.listeners.splice(e,1)}revokeAll(){this.listeners.splice(0)}call(...t){for(const e of this.listeners)e(...t)}}function a(){return a=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},a.apply(this,arguments)}const o=Math.random().toString(36).slice(2,8);let s=0;function l(){}function c(t,e,n="children"){const r=(t,i)=>e(t,(()=>{var e;null==(e=t[n])||e.forEach((e=>{r(e,t)}))}),i);r(t)}function h(t){if(Array.from)return Array.from(t);const e=[];for(let n=0;n<t.length;n+=1)e.push(t[n]);return e}function d(t){if("string"==typeof t){const e=t;t=t=>t.tagName===e}const e=t;return function(){let t=h(this.childNodes);return e&&(t=t.filter((t=>e(t)))),t}}function u(t,e,n){const r=document.createElement(t);return e&&Object.entries(e).forEach((([t,e])=>{r[t]=e})),n&&Object.entries(n).forEach((([t,e])=>{r.setAttribute(t,e)})),r}const p=function(t){const e={};return function(...n){const r=`${n[0]}`;let i=e[r];return i||(i={value:t(...n)},e[r]=i),i.value}}((t=>{document.head.append(u("link",{rel:"preload",as:"script",href:t}))}));async function f(t,e){if(!t.loaded&&("script"===t.type&&(t.loaded=new Promise(((e,n)=>{var r;document.head.append(u("script",a({},t.data,{onload:e,onerror:n}))),null!=(r=t.data)&&r.src||e(void 0)})).then((()=>{t.loaded=!0}))),"iife"===t.type)){const{fn:n,getParams:r}=t.data;n(...(null==r?void 0:r(e))||[]),t.loaded=!0}await t.loaded}function m(t){t.loaded||(t.loaded=!0,"style"===t.type?document.head.append(u("style",{textContent:t.data})):"stylesheet"===t.type&&document.head.append(u("link",a({rel:"stylesheet"},t.data))))}function g(){return g=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},g.apply(this,arguments)}function y(t){var e=0,n=t.children,r=n&&n.length;if(r)for(;--r>=0;)e+=n[r].value;else e=1;t.value=e}function v(t,e){var n,r,i,a,o,s=new b(t),l=+t.value&&(s.value=t.value),c=[s];for(null==e&&(e=x);n=c.pop();)if(l&&(n.value=+n.data.value),(i=e(n.data))&&(o=i.length))for(n.children=new Array(o),a=o-1;a>=0;--a)c.push(r=n.children[a]=new b(i[a])),r.parent=n,r.depth=n.depth+1;return s.eachBefore(z)}function x(t){return t.children}function k(t){t.data=t.data.data}function z(t){var e=0;do{t.height=e}while((t=t.parent)&&t.height<++e)}function b(t){this.data=t,this.depth=this.height=0,this.parent=null}b.prototype=v.prototype={constructor:b,count:function(){return this.eachAfter(y)},each:function(t){var e,n,r,i,a=this,o=[a];do{for(e=o.reverse(),o=[];a=e.pop();)if(t(a),n=a.children)for(r=0,i=n.length;r<i;++r)o.push(n[r])}while(o.length);return this},eachAfter:function(t){for(var e,n,r,i=this,a=[i],o=[];i=a.pop();)if(o.push(i),e=i.children)for(n=0,r=e.length;n<r;++n)a.push(e[n]);for(;i=o.pop();)t(i);return this},eachBefore:function(t){for(var e,n,r=this,i=[r];r=i.pop();)if(t(r),e=r.children)for(n=e.length-1;n>=0;--n)i.push(e[n]);return this},sum:function(t){return this.eachAfter((function(e){for(var n=+t(e.data)||0,r=e.children,i=r&&r.length;--i>=0;)n+=r[i].value;e.value=n}))},sort:function(t){return this.eachBefore((function(e){e.children&&e.children.sort(t)}))},path:function(t){for(var e=this,n=function(t,e){if(t===e)return t;var n=t.ancestors(),r=e.ancestors(),i=null;t=n.pop(),e=r.pop();for(;t===e;)i=t,t=n.pop(),e=r.pop();return i}(e,t),r=[e];e!==n;)e=e.parent,r.push(e);for(var i=r.length;t!==n;)r.splice(i,0,t),t=t.parent;return r},ancestors:function(){for(var t=this,e=[t];t=t.parent;)e.push(t);return e},descendants:function(){var t=[];return this.each((function(e){t.push(e)})),t},leaves:function(){var t=[];return this.eachBefore((function(e){e.children||t.push(e)})),t},links:function(){var t=this,e=[];return t.each((function(n){n!==t&&e.push({source:n.parent,target:n})})),e},copy:function(){return v(this).eachBefore(k)}};var S={name:"d3-flextree",version:"2.1.2",main:"build/d3-flextree.js",module:"index","jsnext:main":"index",author:{name:"Chris Maloney",url:"http://chrismaloney.org"},description:"Flexible tree layout algorithm that allows for variable node sizes.",keywords:["d3","d3-module","layout","tree","hierarchy","d3-hierarchy","plugin","d3-plugin","infovis","visualization","2d"],homepage:"https://github.com/klortho/d3-flextree",license:"WTFPL",repository:{type:"git",url:"https://github.com/klortho/d3-flextree.git"},scripts:{clean:"rm -rf build demo test","build:demo":"rollup -c --environment BUILD:demo","build:dev":"rollup -c --environment BUILD:dev","build:prod":"rollup -c --environment BUILD:prod","build:test":"rollup -c --environment BUILD:test",build:"rollup -c",lint:"eslint index.js src","test:main":"node test/bundle.js","test:browser":"node test/browser-tests.js",test:"npm-run-all test:*",prepare:"npm-run-all clean build lint test"},dependencies:{"d3-hierarchy":"^1.1.5"},devDependencies:{"babel-plugin-external-helpers":"^6.22.0","babel-preset-es2015-rollup":"^3.0.0",d3:"^4.13.0","d3-selection-multi":"^1.0.1",eslint:"^4.19.1",jsdom:"^11.6.2","npm-run-all":"^4.1.2",rollup:"^0.55.3","rollup-plugin-babel":"^2.7.1","rollup-plugin-commonjs":"^8.0.2","rollup-plugin-copy":"^0.2.3","rollup-plugin-json":"^2.3.0","rollup-plugin-node-resolve":"^3.0.2","rollup-plugin-uglify":"^3.0.0","uglify-es":"^3.3.9"}};const{version:w}=S,E=Object.freeze({children:t=>t.children,nodeSize:t=>t.data.size,spacing:0});function j(t){const e=Object.assign({},E,t);function n(t){const n=e[t];return"function"==typeof n?n:()=>n}function r(t){const e=a(function(){const t=i(),e=n("nodeSize"),r=n("spacing");return class extends t{constructor(t){super(t),Object.assign(this,{x:0,y:0,relX:0,prelim:0,shift:0,change:0,lExt:this,lExtRelX:0,lThr:null,rExt:this,rExtRelX:0,rThr:null})}get size(){return e(this.data)}spacing(t){return r(this.data,t.data)}get x(){return this.data.x}set x(t){this.data.x=t}get y(){return this.data.y}set y(t){this.data.y=t}update(){return C(this),X(this),this}}}(),t,(t=>t.children));return e.update(),e.data}function i(){const t=n("nodeSize"),e=n("spacing");return class n extends v.prototype.constructor{constructor(t){super(t)}copy(){const t=a(this.constructor,this,(t=>t.children));return t.each((t=>t.data=t.data.data)),t}get size(){return t(this)}spacing(t){return e(this,t)}get nodes(){return this.descendants()}get xSize(){return this.size[0]}get ySize(){return this.size[1]}get top(){return this.y}get bottom(){return this.y+this.ySize}get left(){return this.x-this.xSize/2}get right(){return this.x+this.xSize/2}get root(){const t=this.ancestors();return t[t.length-1]}get numChildren(){return this.hasChildren?this.children.length:0}get hasChildren(){return!this.noChildren}get noChildren(){return null===this.children}get firstChild(){return this.hasChildren?this.children[0]:null}get lastChild(){return this.hasChildren?this.children[this.numChildren-1]:null}get extents(){return(this.children||[]).reduce(((t,e)=>n.maxExtents(t,e.extents)),this.nodeExtents)}get nodeExtents(){return{top:this.top,bottom:this.bottom,left:this.left,right:this.right}}static maxExtents(t,e){return{top:Math.min(t.top,e.top),bottom:Math.max(t.bottom,e.bottom),left:Math.min(t.left,e.left),right:Math.max(t.right,e.right)}}}}function a(t,e,n){const r=(e,i)=>{const a=new t(e);Object.assign(a,{parent:i,depth:null===i?0:i.depth+1,height:0,length:1});const o=n(e)||[];return a.children=0===o.length?null:o.map((t=>r(t,a))),a.children&&Object.assign(a,a.children.reduce(((t,e)=>({height:Math.max(t.height,e.height+1),length:t.length+e.length})),a)),a};return r(e,null)}return Object.assign(r,{nodeSize(t){return arguments.length?(e.nodeSize=t,r):e.nodeSize},spacing(t){return arguments.length?(e.spacing=t,r):e.spacing},children(t){return arguments.length?(e.children=t,r):e.children},hierarchy(t,n){const r=void 0===n?e.children:n;return a(i(),t,r)},dump(t){const e=n("nodeSize"),r=t=>n=>{const i=t+" ",a=t+" ",{x:o,y:s}=n,l=e(n),c=n.children||[],h=0===c.length?" ":`,${i}children: [${a}${c.map(r(a)).join(a)}${i}],${t}`;return`{ size: [${l.join(", ")}],${i}x: ${o}, y: ${s}${h}},`};return r("\n")(t)}}),r}j.version=w;const C=(t,e=0)=>(t.y=e,(t.children||[]).reduce(((e,n)=>{const[r,i]=e;C(n,t.y+t.ySize);const a=(0===r?n.lExt:n.rExt).bottom;0!==r&&I(t,r,i);return[r+1,D(a,r,i)]}),[0,null]),O(t),T(t),t),X=(t,e,n)=>{void 0===e&&(e=-t.relX-t.prelim,n=0);const r=e+t.relX;return t.relX=r+t.prelim-n,t.prelim=0,t.x=n+t.relX,(t.children||[]).forEach((e=>X(e,r,t.x))),t},O=t=>{(t.children||[]).reduce(((t,e)=>{const[n,r]=t,i=n+e.shift,a=r+i+e.change;return e.relX+=a,[i,a]}),[0,0])},I=(t,e,n)=>{const r=t.children[e-1],i=t.children[e];let a=r,o=r.relX,s=i,l=i.relX,c=!0;for(;a&&s;){a.bottom>n.lowY&&(n=n.next);const r=o+a.prelim-(l+s.prelim)+a.xSize/2+s.xSize/2+a.spacing(s);(r>0||r<0&&c)&&(l+=r,M(i,r),A(t,e,n.index,r)),c=!1;const h=a.bottom,d=s.bottom;h<=d&&(a=R(a),a&&(o+=a.relX)),h>=d&&(s=$(s),s&&(l+=s.relX))}!a&&s?B(t,e,s,l):a&&!s&&N(t,e,a,o)},M=(t,e)=>{t.relX+=e,t.lExtRelX+=e,t.rExtRelX+=e},A=(t,e,n,r)=>{const i=t.children[e],a=e-n;if(a>1){const e=r/a;t.children[n+1].shift+=e,i.shift-=e,i.change-=r-e}},$=t=>t.hasChildren?t.firstChild:t.lThr,R=t=>t.hasChildren?t.lastChild:t.rThr,B=(t,e,n,r)=>{const i=t.firstChild,a=i.lExt,o=t.children[e];a.lThr=n;const s=r-n.relX-i.lExtRelX;a.relX+=s,a.prelim-=s,i.lExt=o.lExt,i.lExtRelX=o.lExtRelX},N=(t,e,n,r)=>{const i=t.children[e],a=i.rExt,o=t.children[e-1];a.rThr=n;const s=r-n.relX-i.rExtRelX;a.relX+=s,a.prelim-=s,i.rExt=o.rExt,i.rExtRelX=o.rExtRelX},T=t=>{if(t.hasChildren){const e=t.firstChild,n=t.lastChild,r=(e.prelim+e.relX-e.xSize/2+n.relX+n.prelim+n.xSize/2)/2;Object.assign(t,{prelim:r,lExt:e.lExt,lExtRelX:e.lExtRelX,rExt:n.rExt,rExtRelX:n.rExtRelX})}},D=(t,e,n)=>{for(;null!==n&&t>=n.lowY;)n=n.next;return{lowY:t,index:e,next:n}};
|
|
1
|
+
/*! markmap-view v0.14.2-alpha.4+569dd11 | MIT License */
|
|
2
|
+
!function(t,e,n){"use strict";function r(t){if(t&&t.__esModule)return t;var e=Object.create(null);if(t)for(var n in t)e[n]=t[n];return e.default=t,Object.freeze(e)}var i=r(n);function a(){return a=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},a.apply(this,arguments)}function o(t){var e=0,n=t.children,r=n&&n.length;if(r)for(;--r>=0;)e+=n[r].value;else e=1;t.value=e}function s(t,e){var n,r,i,a,o,s=new d(t),h=+t.value&&(s.value=t.value),p=[s];for(null==e&&(e=l);n=p.pop();)if(h&&(n.value=+n.data.value),(i=e(n.data))&&(o=i.length))for(n.children=new Array(o),a=o-1;a>=0;--a)p.push(r=n.children[a]=new d(i[a])),r.parent=n,r.depth=n.depth+1;return s.eachBefore(c)}function l(t){return t.children}function h(t){t.data=t.data.data}function c(t){var e=0;do{t.height=e}while((t=t.parent)&&t.height<++e)}function d(t){this.data=t,this.depth=this.height=0,this.parent=null}d.prototype=s.prototype={constructor:d,count:function(){return this.eachAfter(o)},each:function(t){var e,n,r,i,a=this,o=[a];do{for(e=o.reverse(),o=[];a=e.pop();)if(t(a),n=a.children)for(r=0,i=n.length;r<i;++r)o.push(n[r])}while(o.length);return this},eachAfter:function(t){for(var e,n,r,i=this,a=[i],o=[];i=a.pop();)if(o.push(i),e=i.children)for(n=0,r=e.length;n<r;++n)a.push(e[n]);for(;i=o.pop();)t(i);return this},eachBefore:function(t){for(var e,n,r=this,i=[r];r=i.pop();)if(t(r),e=r.children)for(n=e.length-1;n>=0;--n)i.push(e[n]);return this},sum:function(t){return this.eachAfter((function(e){for(var n=+t(e.data)||0,r=e.children,i=r&&r.length;--i>=0;)n+=r[i].value;e.value=n}))},sort:function(t){return this.eachBefore((function(e){e.children&&e.children.sort(t)}))},path:function(t){for(var e=this,n=function(t,e){if(t===e)return t;var n=t.ancestors(),r=e.ancestors(),i=null;t=n.pop(),e=r.pop();for(;t===e;)i=t,t=n.pop(),e=r.pop();return i}(e,t),r=[e];e!==n;)e=e.parent,r.push(e);for(var i=r.length;t!==n;)r.splice(i,0,t),t=t.parent;return r},ancestors:function(){for(var t=this,e=[t];t=t.parent;)e.push(t);return e},descendants:function(){var t=[];return this.each((function(e){t.push(e)})),t},leaves:function(){var t=[];return this.eachBefore((function(e){e.children||t.push(e)})),t},links:function(){var t=this,e=[];return t.each((function(n){n!==t&&e.push({source:n.parent,target:n})})),e},copy:function(){return s(this).eachBefore(h)}};var p={name:"d3-flextree",version:"2.1.2",main:"build/d3-flextree.js",module:"index","jsnext:main":"index",author:{name:"Chris Maloney",url:"http://chrismaloney.org"},description:"Flexible tree layout algorithm that allows for variable node sizes.",keywords:["d3","d3-module","layout","tree","hierarchy","d3-hierarchy","plugin","d3-plugin","infovis","visualization","2d"],homepage:"https://github.com/klortho/d3-flextree",license:"WTFPL",repository:{type:"git",url:"https://github.com/klortho/d3-flextree.git"},scripts:{clean:"rm -rf build demo test","build:demo":"rollup -c --environment BUILD:demo","build:dev":"rollup -c --environment BUILD:dev","build:prod":"rollup -c --environment BUILD:prod","build:test":"rollup -c --environment BUILD:test",build:"rollup -c",lint:"eslint index.js src","test:main":"node test/bundle.js","test:browser":"node test/browser-tests.js",test:"npm-run-all test:*",prepare:"npm-run-all clean build lint test"},dependencies:{"d3-hierarchy":"^1.1.5"},devDependencies:{"babel-plugin-external-helpers":"^6.22.0","babel-preset-es2015-rollup":"^3.0.0",d3:"^4.13.0","d3-selection-multi":"^1.0.1",eslint:"^4.19.1",jsdom:"^11.6.2","npm-run-all":"^4.1.2",rollup:"^0.55.3","rollup-plugin-babel":"^2.7.1","rollup-plugin-commonjs":"^8.0.2","rollup-plugin-copy":"^0.2.3","rollup-plugin-json":"^2.3.0","rollup-plugin-node-resolve":"^3.0.2","rollup-plugin-uglify":"^3.0.0","uglify-es":"^3.3.9"}};const{version:u}=p,f=Object.freeze({children:t=>t.children,nodeSize:t=>t.data.size,spacing:0});function m(t){const e=Object.assign({},f,t);function n(t){const n=e[t];return"function"==typeof n?n:()=>n}function r(t){const e=a(function(){const t=i(),e=n("nodeSize"),r=n("spacing");return class extends t{constructor(t){super(t),Object.assign(this,{x:0,y:0,relX:0,prelim:0,shift:0,change:0,lExt:this,lExtRelX:0,lThr:null,rExt:this,rExtRelX:0,rThr:null})}get size(){return e(this.data)}spacing(t){return r(this.data,t.data)}get x(){return this.data.x}set x(t){this.data.x=t}get y(){return this.data.y}set y(t){this.data.y=t}update(){return g(this),y(this),this}}}(),t,(t=>t.children));return e.update(),e.data}function i(){const t=n("nodeSize"),e=n("spacing");return class n extends s.prototype.constructor{constructor(t){super(t)}copy(){const t=a(this.constructor,this,(t=>t.children));return t.each((t=>t.data=t.data.data)),t}get size(){return t(this)}spacing(t){return e(this,t)}get nodes(){return this.descendants()}get xSize(){return this.size[0]}get ySize(){return this.size[1]}get top(){return this.y}get bottom(){return this.y+this.ySize}get left(){return this.x-this.xSize/2}get right(){return this.x+this.xSize/2}get root(){const t=this.ancestors();return t[t.length-1]}get numChildren(){return this.hasChildren?this.children.length:0}get hasChildren(){return!this.noChildren}get noChildren(){return null===this.children}get firstChild(){return this.hasChildren?this.children[0]:null}get lastChild(){return this.hasChildren?this.children[this.numChildren-1]:null}get extents(){return(this.children||[]).reduce(((t,e)=>n.maxExtents(t,e.extents)),this.nodeExtents)}get nodeExtents(){return{top:this.top,bottom:this.bottom,left:this.left,right:this.right}}static maxExtents(t,e){return{top:Math.min(t.top,e.top),bottom:Math.max(t.bottom,e.bottom),left:Math.min(t.left,e.left),right:Math.max(t.right,e.right)}}}}function a(t,e,n){const r=(e,i)=>{const a=new t(e);Object.assign(a,{parent:i,depth:null===i?0:i.depth+1,height:0,length:1});const o=n(e)||[];return a.children=0===o.length?null:o.map((t=>r(t,a))),a.children&&Object.assign(a,a.children.reduce(((t,e)=>({height:Math.max(t.height,e.height+1),length:t.length+e.length})),a)),a};return r(e,null)}return Object.assign(r,{nodeSize(t){return arguments.length?(e.nodeSize=t,r):e.nodeSize},spacing(t){return arguments.length?(e.spacing=t,r):e.spacing},children(t){return arguments.length?(e.children=t,r):e.children},hierarchy(t,n){const r=void 0===n?e.children:n;return a(i(),t,r)},dump(t){const e=n("nodeSize"),r=t=>n=>{const i=t+" ",a=t+" ",{x:o,y:s}=n,l=e(n),h=n.children||[],c=0===h.length?" ":`,${i}children: [${a}${h.map(r(a)).join(a)}${i}],${t}`;return`{ size: [${l.join(", ")}],${i}x: ${o}, y: ${s}${c}},`};return r("\n")(t)}}),r}m.version=u;const g=(t,e=0)=>(t.y=e,(t.children||[]).reduce(((e,n)=>{const[r,i]=e;g(n,t.y+t.ySize);const a=(0===r?n.lExt:n.rExt).bottom;0!==r&&v(t,r,i);return[r+1,j(a,r,i)]}),[0,null]),x(t),C(t),t),y=(t,e,n)=>{void 0===e&&(e=-t.relX-t.prelim,n=0);const r=e+t.relX;return t.relX=r+t.prelim-n,t.prelim=0,t.x=n+t.relX,(t.children||[]).forEach((e=>y(e,r,t.x))),t},x=t=>{(t.children||[]).reduce(((t,e)=>{const[n,r]=t,i=n+e.shift,a=r+i+e.change;return e.relX+=a,[i,a]}),[0,0])},v=(t,e,n)=>{const r=t.children[e-1],i=t.children[e];let a=r,o=r.relX,s=i,l=i.relX,h=!0;for(;a&&s;){a.bottom>n.lowY&&(n=n.next);const r=o+a.prelim-(l+s.prelim)+a.xSize/2+s.xSize/2+a.spacing(s);(r>0||r<0&&h)&&(l+=r,k(i,r),z(t,e,n.index,r)),h=!1;const c=a.bottom,d=s.bottom;c<=d&&(a=b(a),a&&(o+=a.relX)),c>=d&&(s=S(s),s&&(l+=s.relX))}!a&&s?w(t,e,s,l):a&&!s&&E(t,e,a,o)},k=(t,e)=>{t.relX+=e,t.lExtRelX+=e,t.rExtRelX+=e},z=(t,e,n,r)=>{const i=t.children[e],a=e-n;if(a>1){const e=r/a;t.children[n+1].shift+=e,i.shift-=e,i.change-=r-e}},S=t=>t.hasChildren?t.firstChild:t.lThr,b=t=>t.hasChildren?t.lastChild:t.rThr,w=(t,e,n,r)=>{const i=t.firstChild,a=i.lExt,o=t.children[e];a.lThr=n;const s=r-n.relX-i.lExtRelX;a.relX+=s,a.prelim-=s,i.lExt=o.lExt,i.lExtRelX=o.lExtRelX},E=(t,e,n,r)=>{const i=t.children[e],a=i.rExt,o=t.children[e-1];a.rThr=n;const s=r-n.relX-i.rExtRelX;a.relX+=s,a.prelim-=s,i.rExt=o.rExt,i.rExtRelX=o.rExtRelX},C=t=>{if(t.hasChildren){const e=t.firstChild,n=t.lastChild,r=(e.prelim+e.relX-e.xSize/2+n.relX+n.prelim+n.xSize/2)/2;Object.assign(t,{prelim:r,lExt:e.lExt,lExtRelX:e.lExtRelX,rExt:n.rExt,rExtRelX:n.rExtRelX})}},j=(t,e,n)=>{for(;null!==n&&t>=n.lowY;)n=n.next;return{lowY:t,index:e,next:n}};
|
|
4
3
|
/*! @gera2ld/jsx-dom v2.1.1 | ISC License */
|
|
5
|
-
var H="http://www.w3.org/1999/xlink",L={show:H,actuate:H,href:H};function P(t,e){var n;if("string"==typeof t)n=1;else{if("function"!=typeof t)throw new Error("Invalid VNode type");n=2}return{vtype:n,type:t,props:e}}function F(t){return t.children}var Y={isSvg:!1};function W(t,e){if(1===e.type)null!=e.node&&t.append(e.node);else{if(4!==e.type)throw new Error("Unkown ref type "+JSON.stringify(e));e.children.forEach((function(e){W(t,e)}))}}var _={className:"class",labelFor:"for"};function U(t,e,n,r){if(e=_[e]||e,!0===n)t.setAttribute(e,"");else if(!1===n)t.removeAttribute(e);else{var i=r?L[e]:void 0;void 0!==i?t.setAttributeNS(i,e,n):t.setAttribute(e,n)}}function V(t,e){if(void 0===e&&(e=Y),null==t||"boolean"==typeof t)return{type:1,node:null};if(t instanceof Node)return{type:1,node:t};if(2===(null==(o=t)?void 0:o.vtype)){var n=t,r=n.type,i=n.props;if(r===F){var a=document.createDocumentFragment();if(i.children)W(a,V(i.children,e));return{type:1,node:a}}return V(r(i),e)}var o;if(function(t){return"string"==typeof t||"number"==typeof t}(t))return{type:1,node:document.createTextNode(""+t)};if(function(t){return 1===(null==t?void 0:t.vtype)}(t)){var s,l,c=t,h=c.type,d=c.props;if(e.isSvg||"svg"!==h||(e=Object.assign({},e,{isSvg:!0})),function(t,e,n){for(var r in e)"key"!==r&&"children"!==r&&"ref"!==r&&("dangerouslySetInnerHTML"===r?t.innerHTML=e[r].__html:"innerHTML"===r||"textContent"===r||"innerText"===r?t[r]=e[r]:r.startsWith("on")?t[r.toLowerCase()]=e[r]:U(t,r,e[r],n.isSvg))}(s=e.isSvg?document.createElementNS("http://www.w3.org/2000/svg",h):document.createElement(h),d,e),d.children){var u=e;e.isSvg&&"foreignObject"===h&&(u=Object.assign({},u,{isSvg:!1})),l=V(d.children,u)}null!=l&&W(s,l);var p=d.ref;return"function"==typeof p&&p(s),{type:1,node:s}}if(Array.isArray(t))return{type:4,children:t.map((function(t){return V(t,e)}))};throw new Error("mount: Invalid Vnode!")}function Z(t){for(var e=[],n=0;n<t.length;n+=1){var r=t[n];Array.isArray(r)?e=e.concat(Z(r)):null!=r&&e.push(r)}return e}function G(t){return 1===t.type?t.node:t.children.map(G)}function J(t){return Array.isArray(t)?Z(t.map(J)):G(V(t))}var K=".markmap{font:300 16px/20px sans-serif}.markmap-link{fill:none}.markmap-node>circle{cursor:pointer}.markmap-foreign{display:inline-block}.markmap-foreign a{color:#0097e6}.markmap-foreign a:hover{color:#00a8ff}.markmap-foreign code{background-color:#f0f0f0;border-radius:2px;color:#555;font-size:calc(1em - 2px)}.markmap-foreign :not(pre)>code{padding:.2em .4em}.markmap-foreign del{text-decoration:line-through}.markmap-foreign em{font-style:italic}.markmap-foreign strong{font-weight:bolder}.markmap-foreign mark{background:#ffeaa7}.markmap-foreign pre,.markmap-foreign pre[class*=language-]{margin:0;padding:.2em .4em}",q=".markmap-container{height:0;left:-100px;overflow:hidden;position:absolute;top:-100px;width:0}.markmap-container>.markmap-foreign{display:inline-block}.markmap-container>.markmap-foreign>div:last-child{white-space:nowrap}";function Q(t){const e=t.data;return Math.max(4-2*e.depth,1.5)}function tt(t,e){return t[r.minIndex(t,e)]}function et(t){t.stopPropagation()}const nt=new i,rt=r.scaleOrdinal(r.schemeCategory10),it="undefined"!=typeof navigator&&navigator.userAgent.includes("Macintosh");class at{constructor(t,e){this.revokers=[],["handleZoom","handleClick","handlePan"].forEach((t=>{this[t]=this[t].bind(this)})),this.viewHooks={transformHtml:new i},this.svg=t.datum?t:r.select(t),this.styleNode=this.svg.append("style"),this.zoom=r.zoom().filter((t=>this.options.scrollForPan&&"wheel"===t.type?t.ctrlKey&&!t.button:!(t.ctrlKey&&"wheel"!==t.type||t.button))).on("zoom",this.handleZoom),this.setOptions(e),this.state={id:this.options.id||this.svg.attr("id")||(s+=1,`mm-${o}-${s}`)},this.g=this.svg.append("g"),this.updateStyle(),this.revokers.push(nt.tap((()=>{this.setData()})))}getStyleContent(){const{style:t}=this.options,{id:e}=this.state,n="function"==typeof t?t(e):"";return[this.options.embedGlobalCSS&&K,n].filter(Boolean).join("\n")}updateStyle(){this.svg.attr("class",function(t,...e){const n=(t||"").split(" ").filter(Boolean);return e.forEach((t=>{t&&n.indexOf(t)<0&&n.push(t)})),n.join(" ")}(this.svg.attr("class"),"markmap",this.state.id));const t=this.getStyleContent();this.styleNode.text(t)}handleZoom(t){const{transform:e}=t;this.g.attr("transform",e)}handlePan(t){t.preventDefault();const e=r.zoomTransform(this.svg.node()),n=e.translate(-t.deltaX/e.k,-t.deltaY/e.k);this.svg.call(this.zoom.transform,n)}handleClick(t,e){var n;const{data:r}=e;r.payload=g({},r.payload,{fold:null!=(n=r.payload)&&n.fold?0:1}),this.renderData(e.data)}initializeData(t){let e=0;const{color:n,nodeMinHeight:r,maxWidth:i,initialExpandLevel:a}=this.options,{id:o}=this.state,s=J(P("div",{className:`markmap-container markmap ${o}-g`})),l=J(P("style",{children:[this.getStyleContent(),q].join("\n")}));document.body.append(s,l);const d=i?`max-width: ${i}px`:"";let u=0;c(t,((t,r)=>{var i,o;t.children=null==(i=t.children)?void 0:i.map((t=>g({},t))),e+=1;const l=J(P("div",{className:"markmap-foreign",style:d,children:P("div",{dangerouslySetInnerHTML:{__html:t.content}})}));s.append(l),t.state=g({},t.state,{id:e,el:l.firstChild}),n(t);const c=2===(null==(o=t.payload)?void 0:o.fold);c?u+=1:(u||a>=0&&t.depth>=a)&&(t.payload=g({},t.payload,{fold:1})),r(),c&&(u-=1)}));const p=h(s.childNodes).map((t=>t.firstChild));this.viewHooks.transformHtml.call(this,p),p.forEach((t=>{t.parentNode.append(t.cloneNode(!0))})),c(t,((t,e,n)=>{var i,a;const o=t.state.el.getBoundingClientRect();t.content=t.state.el.innerHTML,t.state.size=[Math.ceil(o.width)+1,Math.max(Math.ceil(o.height),r)],t.state.path=[null==n||null==(i=n.state)?void 0:i.path,t.state.id].filter(Boolean).join("."),t.state.key=[null==n||null==(a=n.state)?void 0:a.id,t.state.id].filter(Boolean).join(".")+t.content,e()})),s.remove(),l.remove()}setOptions(t){this.options=g({},at.defaultOptions,t),this.options.zoom?this.svg.call(this.zoom):this.svg.on(".zoom",null),this.svg.on("wheel",this.options.pan?this.handlePan:null)}setData(t,e){t&&(this.state.data=t),e&&this.setOptions(e),this.initializeData(this.state.data),this.renderData()}renderData(t){var e,n;if(!this.state.data)return;const{spacingHorizontal:i,paddingX:a,spacingVertical:o,autoFit:s,color:l}=this.options,h=j().children((t=>{var e;return!(null!=(e=t.payload)&&e.fold)&&t.children})).nodeSize((t=>{const[e,n]=t.data.state.size;return[n,e+(e?2*a:0)+i]})).spacing(((t,e)=>t.parent===e.parent?o:2*o)),u=h.hierarchy(this.state.data);h(u),function(t,e){c(t,((t,n)=>{t.ySizeInner=t.ySize-e,t.y+=e,n()}),"children")}(u,i);const p=u.descendants().reverse(),f=u.links(),m=r.linkHorizontal(),g=r.min(p,(t=>t.x-t.xSize/2)),y=r.max(p,(t=>t.x+t.xSize/2)),v=r.min(p,(t=>t.y)),x=r.max(p,(t=>t.y+t.ySizeInner));Object.assign(this.state,{minX:g,maxX:y,minY:v,maxY:x}),s&&this.fit();const k=t&&p.find((e=>e.data===t))||u,z=null!=(e=k.data.state.x0)?e:k.x,b=null!=(n=k.data.state.y0)?n:k.y,S=this.g.selectAll(d("g")).data(p,(t=>t.data.state.key)),w=S.enter().append("g").attr("data-depth",(t=>t.data.depth)).attr("data-path",(t=>t.data.state.path)).attr("transform",(t=>`translate(${b+k.ySizeInner-t.ySizeInner},${z+k.xSize/2-t.xSize})`)),E=this.transition(S.exit());E.select("line").attr("x1",(t=>t.ySizeInner)).attr("x2",(t=>t.ySizeInner)),E.select("foreignObject").style("opacity",0),E.attr("transform",(t=>`translate(${k.y+k.ySizeInner-t.ySizeInner},${k.x+k.xSize/2-t.xSize})`)).remove();const C=S.merge(w).attr("class",(t=>{var e;return["markmap-node",(null==(e=t.data.payload)?void 0:e.fold)&&"markmap-fold"].filter(Boolean).join(" ")}));this.transition(C).attr("transform",(t=>`translate(${t.y},${t.x-t.xSize/2})`));const X=C.selectAll(d("line")).data((t=>[t]),(t=>t.data.state.key)).join((t=>t.append("line").attr("x1",(t=>t.ySizeInner)).attr("x2",(t=>t.ySizeInner))),(t=>t),(t=>t.remove()));this.transition(X).attr("x1",-1).attr("x2",(t=>t.ySizeInner+2)).attr("y1",(t=>t.xSize)).attr("y2",(t=>t.xSize)).attr("stroke",(t=>l(t.data))).attr("stroke-width",Q);const O=C.selectAll(d("circle")).data((t=>t.data.children?[t]:[]),(t=>t.data.state.key)).join((t=>t.append("circle").attr("stroke-width","1.5").attr("cx",(t=>t.ySizeInner)).attr("cy",(t=>t.xSize)).attr("r",0).on("click",((t,e)=>this.handleClick(t,e)))),(t=>t),(t=>t.remove()));this.transition(O).attr("r",6).attr("cx",(t=>t.ySizeInner)).attr("cy",(t=>t.xSize)).attr("stroke",(t=>l(t.data))).attr("fill",(t=>{var e;return null!=(e=t.data.payload)&&e.fold&&t.data.children?l(t.data):"#fff"}));const I=C.selectAll(d("foreignObject")).data((t=>[t]),(t=>t.data.state.key)).join((t=>{const e=t.append("foreignObject").attr("class","markmap-foreign").attr("x",a).attr("y",0).style("opacity",0).on("mousedown",et).on("dblclick",et);return e.append("xhtml:div").select((function(t){const e=t.data.state.el.cloneNode(!0);return this.replaceWith(e),e})).attr("xmlns","http://www.w3.org/1999/xhtml"),e}),(t=>t),(t=>t.remove())).attr("width",(t=>Math.max(0,t.ySizeInner-2*a))).attr("height",(t=>t.xSize));this.transition(I).style("opacity",1);const M=this.g.selectAll(d("path")).data(f,(t=>t.target.data.state.key)).join((t=>{const e=[b+k.ySizeInner,z+k.xSize/2];return t.insert("path","g").attr("class","markmap-link").attr("data-depth",(t=>t.target.data.depth)).attr("data-path",(t=>t.target.data.state.path)).attr("d",m({source:e,target:e}))}),(t=>t),(t=>{const e=[k.y+k.ySizeInner,k.x+k.xSize/2];return this.transition(t).attr("d",m({source:e,target:e})).remove()}));this.transition(M).attr("stroke",(t=>l(t.target.data))).attr("stroke-width",(t=>Q(t.target))).attr("d",(t=>{const e=[t.source.y+t.source.ySizeInner,t.source.x+t.source.xSize/2],n=[t.target.y,t.target.x+t.target.xSize/2];return m({source:e,target:n})})),p.forEach((t=>{t.data.state.x0=t.x,t.data.state.y0=t.y}))}transition(t){const{duration:e}=this.options;return t.transition().duration(e)}async fit(){const t=this.svg.node(),{width:e,height:n}=t.getBoundingClientRect(),{fitRatio:i}=this.options,{minX:a,maxX:o,minY:s,maxY:c}=this.state,h=c-s,d=o-a,u=Math.min(e/h*i,n/d*i,2),p=r.zoomIdentity.translate((e-h*u)/2-s*u,(n-d*u)/2-a*u).scale(u);return this.transition(this.svg).call(this.zoom.transform,p).end().catch(l)}async ensureView(t,e){let n,i;if(this.g.selectAll(d("g")).each((function(e){e.data===t&&(n=this,i=e)})),!n||!i)return;const a=this.svg.node(),o=a.getBoundingClientRect(),s=r.zoomTransform(a),[c,h]=[i.y,i.y+i.ySizeInner+2].map((t=>t*s.k+s.x)),[u,p]=[i.x-i.xSize/2,i.x+i.xSize/2].map((t=>t*s.k+s.y)),f=g({left:0,right:0,top:0,bottom:0},e),m=[f.left-c,o.width-f.right-h],y=[f.top-u,o.height-f.bottom-p],v=m[0]*m[1]>0?tt(m,Math.abs)/s.k:0,x=y[0]*y[1]>0?tt(y,Math.abs)/s.k:0;if(v||x){const t=s.translate(v,x);return this.transition(this.svg).call(this.zoom.transform,t).end().catch(l)}}async rescale(t){const e=this.svg.node(),{width:n,height:i}=e.getBoundingClientRect(),a=n/2,o=i/2,s=r.zoomTransform(e),c=s.translate((a-s.x)*(1-t)/s.k,(o-s.y)*(1-t)/s.k).scale(t);return this.transition(this.svg).call(this.zoom.transform,c).end().catch(l)}destroy(){this.svg.on(".zoom",null),this.svg.html(null),this.revokers.forEach((t=>{t()}))}static create(t,e,n){const r=new at(t,e);return n&&(r.setData(n),r.fit()),r}}at.defaultOptions={autoFit:!1,color:t=>rt(`${t.state.path}`),duration:500,embedGlobalCSS:!0,fitRatio:.95,maxWidth:0,nodeMinHeight:16,paddingX:8,scrollForPan:it,spacingHorizontal:80,spacingVertical:5,initialExpandLevel:-1,zoom:!0,pan:!0},t.Markmap=at,t.defaultColorFn=rt,t.deriveOptions=function(t){const e={};t||(t={});const{color:n,colorFreezeLevel:i}=t;if(1===(null==n?void 0:n.length)){const t=n[0];e.color=()=>t}else if(null!=n&&n.length){const t=r.scaleOrdinal(n);e.color=e=>t(`${e.state.path}`)}if(i){const t=e.color||at.defaultOptions.color;e.color=e=>(e=g({},e,{state:g({},e.state,{path:e.state.path.split(".").slice(0,i+1).join(".")})}),t(e))}return["duration","maxWidth","initialExpandLevel"].forEach((n=>{const r=t[n];"number"==typeof r&&(e[n]=r)})),["zoom","pan"].forEach((n=>{const r=t[n];null!=r&&(e[n]=!!r)})),e},t.globalCSS=".markmap{font:300 16px/20px sans-serif}.markmap-link{fill:none}.markmap-node>circle{cursor:pointer}.markmap-foreign{display:inline-block}.markmap-foreign a{color:#0097e6}.markmap-foreign a:hover{color:#00a8ff}.markmap-foreign code{background-color:#f0f0f0;border-radius:2px;color:#555;font-size:calc(1em - 2px)}.markmap-foreign :not(pre)>code{padding:.2em .4em}.markmap-foreign del{text-decoration:line-through}.markmap-foreign em{font-style:italic}.markmap-foreign strong{font-weight:bolder}.markmap-foreign mark{background:#ffeaa7}.markmap-foreign pre,.markmap-foreign pre[class*=language-]{margin:0;padding:.2em .4em}",t.loadCSS=function(t){for(const e of t)m(e)},t.loadJS=async function(t,e){const n=t.filter((t=>{var e;return"script"===t.type&&(null==(e=t.data)?void 0:e.src)}));n.length>1&&n.forEach((t=>p(t.data.src))),e=a({getMarkmap:()=>window.markmap},e);for(const n of t)await f(n,e)},t.refreshHook=nt}(this.markmap=this.markmap||{},d3);
|
|
4
|
+
var X="http://www.w3.org/1999/xlink",I={show:X,actuate:X,href:X};function O(t,e){var n;if("string"==typeof t)n=1;else{if("function"!=typeof t)throw new Error("Invalid VNode type");n=2}return{vtype:n,type:t,props:e}}function M(t){return t.children}var A={isSvg:!1};function R(t,e){if(1===e.type)null!=e.node&&t.append(e.node);else{if(4!==e.type)throw new Error("Unkown ref type "+JSON.stringify(e));e.children.forEach((function(e){R(t,e)}))}}var T={className:"class",labelFor:"for"};function $(t,e,n,r){if(e=T[e]||e,!0===n)t.setAttribute(e,"");else if(!1===n)t.removeAttribute(e);else{var i=r?I[e]:void 0;void 0!==i?t.setAttributeNS(i,e,n):t.setAttribute(e,n)}}function B(t,e){if(void 0===e&&(e=A),null==t||"boolean"==typeof t)return{type:1,node:null};if(t instanceof Node)return{type:1,node:t};if(2===(null==(o=t)?void 0:o.vtype)){var n=t,r=n.type,i=n.props;if(r===M){var a=document.createDocumentFragment();if(i.children)R(a,B(i.children,e));return{type:1,node:a}}return B(r(i),e)}var o;if(function(t){return"string"==typeof t||"number"==typeof t}(t))return{type:1,node:document.createTextNode(""+t)};if(function(t){return 1===(null==t?void 0:t.vtype)}(t)){var s,l,h=t,c=h.type,d=h.props;if(e.isSvg||"svg"!==c||(e=Object.assign({},e,{isSvg:!0})),function(t,e,n){for(var r in e)"key"!==r&&"children"!==r&&"ref"!==r&&("dangerouslySetInnerHTML"===r?t.innerHTML=e[r].__html:"innerHTML"===r||"textContent"===r||"innerText"===r?t[r]=e[r]:r.startsWith("on")?t[r.toLowerCase()]=e[r]:$(t,r,e[r],n.isSvg))}(s=e.isSvg?document.createElementNS("http://www.w3.org/2000/svg",c):document.createElement(c),d,e),d.children){var p=e;e.isSvg&&"foreignObject"===c&&(p=Object.assign({},p,{isSvg:!1})),l=B(d.children,p)}null!=l&&R(s,l);var u=d.ref;return"function"==typeof u&&u(s),{type:1,node:s}}if(Array.isArray(t))return{type:4,children:t.map((function(t){return B(t,e)}))};throw new Error("mount: Invalid Vnode!")}function H(t){for(var e=[],n=0;n<t.length;n+=1){var r=t[n];Array.isArray(r)?e=e.concat(H(r)):null!=r&&e.push(r)}return e}function D(t){return 1===t.type?t.node:t.children.map(D)}function L(t){return Array.isArray(t)?H(t.map(L)):D(B(t))}var N=".markmap{font:300 16px/20px sans-serif}.markmap-link{fill:none}.markmap-node>circle{cursor:pointer}.markmap-foreign{display:inline-block}.markmap-foreign a{color:#0097e6}.markmap-foreign a:hover{color:#00a8ff}.markmap-foreign code{background-color:#f0f0f0;border-radius:2px;color:#555;font-size:calc(1em - 2px)}.markmap-foreign :not(pre)>code{padding:.2em .4em}.markmap-foreign del{text-decoration:line-through}.markmap-foreign em{font-style:italic}.markmap-foreign strong{font-weight:bolder}.markmap-foreign mark{background:#ffeaa7}.markmap-foreign pre,.markmap-foreign pre[class*=language-]{margin:0;padding:.2em .4em}",F=".markmap-container{height:0;left:-100px;overflow:hidden;position:absolute;top:-100px;width:0}.markmap-container>.markmap-foreign{display:inline-block}.markmap-container>.markmap-foreign>div:last-child{white-space:nowrap}";function P(t){const e=t.data;return Math.max(4-2*e.depth,1.5)}function Y(t,e){return t[i.minIndex(t,e)]}function W(t){t.stopPropagation()}const _=new e.Hook,U=i.scaleOrdinal(i.schemeCategory10),V="undefined"!=typeof navigator&&navigator.userAgent.includes("Macintosh");class J{constructor(t,n){this.revokers=[],["handleZoom","handleClick","handlePan"].forEach((t=>{this[t]=this[t].bind(this)})),this.viewHooks={transformHtml:new e.Hook},this.svg=t.datum?t:i.select(t),this.styleNode=this.svg.append("style"),this.zoom=i.zoom().filter((t=>this.options.scrollForPan&&"wheel"===t.type?t.ctrlKey&&!t.button:!(t.ctrlKey&&"wheel"!==t.type||t.button))).on("zoom",this.handleZoom),this.setOptions(n),this.state={id:this.options.id||this.svg.attr("id")||e.getId()},this.g=this.svg.append("g"),this.updateStyle(),this.revokers.push(_.tap((()=>{this.setData()})))}getStyleContent(){const{style:t}=this.options,{id:e}=this.state,n="function"==typeof t?t(e):"";return[this.options.embedGlobalCSS&&N,n].filter(Boolean).join("\n")}updateStyle(){this.svg.attr("class",e.addClass(this.svg.attr("class"),"markmap",this.state.id));const t=this.getStyleContent();this.styleNode.text(t)}handleZoom(t){const{transform:e}=t;this.g.attr("transform",e)}handlePan(t){t.preventDefault();const e=i.zoomTransform(this.svg.node()),n=e.translate(-t.deltaX/e.k,-t.deltaY/e.k);this.svg.call(this.zoom.transform,n)}handleClick(t,e){var n;const{data:r}=e;r.payload=a({},r.payload,{fold:null!=(n=r.payload)&&n.fold?0:1}),this.renderData(e.data)}initializeData(t){let n=0;const{color:r,nodeMinHeight:i,maxWidth:o,initialExpandLevel:s}=this.options,{id:l}=this.state,h=L(O("div",{className:`markmap-container markmap ${l}-g`})),c=L(O("style",{children:[this.getStyleContent(),F].join("\n")}));document.body.append(h,c);const d=o?`max-width: ${o}px`:"";let p=0;e.walkTree(t,((t,e,i)=>{var o,l,c;t.children=null==(o=t.children)?void 0:o.map((t=>a({},t))),n+=1;const u=L(O("div",{className:"markmap-foreign",style:d,children:O("div",{dangerouslySetInnerHTML:{__html:t.content}})}));h.append(u),t.state=a({},t.state,{id:n,el:u.firstChild,path:[null==i||null==(l=i.state)?void 0:l.path,t.state.id].filter(Boolean).join(".")}),r(t);const f=2===(null==(c=t.payload)?void 0:c.fold);f?p+=1:(p||s>=0&&t.depth>=s)&&(t.payload=a({},t.payload,{fold:1})),e(),f&&(p-=1)}));const u=e.arrayFrom(h.childNodes).map((t=>t.firstChild));this.viewHooks.transformHtml.call(this,u),u.forEach((t=>{t.parentNode.append(t.cloneNode(!0))})),e.walkTree(t,((t,e,n)=>{var r;const a=t.state.el.getBoundingClientRect();t.content=t.state.el.innerHTML,t.state.size=[Math.ceil(a.width)+1,Math.max(Math.ceil(a.height),i)],t.state.key=[null==n||null==(r=n.state)?void 0:r.id,t.state.id].filter(Boolean).join(".")+t.content,e()})),h.remove(),c.remove()}setOptions(t){this.options=a({},J.defaultOptions,t),this.options.zoom?this.svg.call(this.zoom):this.svg.on(".zoom",null),this.svg.on("wheel",this.options.pan?this.handlePan:null)}setData(t,e){t&&(this.state.data=t),e&&this.setOptions(e),this.initializeData(this.state.data),this.renderData()}renderData(t){var n,r;if(!this.state.data)return;const{spacingHorizontal:a,paddingX:o,spacingVertical:s,autoFit:l,color:h}=this.options,c=m().children((t=>{var e;return!(null!=(e=t.payload)&&e.fold)&&t.children})).nodeSize((t=>{const[e,n]=t.data.state.size;return[n,e+(e?2*o:0)+a]})).spacing(((t,e)=>t.parent===e.parent?s:2*s)),d=c.hierarchy(this.state.data);c(d),function(t,n){e.walkTree(t,((t,e)=>{t.ySizeInner=t.ySize-n,t.y+=n,e()}),"children")}(d,a);const p=d.descendants().reverse(),u=d.links(),f=i.linkHorizontal(),g=i.min(p,(t=>t.x-t.xSize/2)),y=i.max(p,(t=>t.x+t.xSize/2)),x=i.min(p,(t=>t.y)),v=i.max(p,(t=>t.y+t.ySizeInner));Object.assign(this.state,{minX:g,maxX:y,minY:x,maxY:v}),l&&this.fit();const k=t&&p.find((e=>e.data===t))||d,z=null!=(n=k.data.state.x0)?n:k.x,S=null!=(r=k.data.state.y0)?r:k.y,b=this.g.selectAll(e.childSelector("g")).data(p,(t=>t.data.state.key)),w=b.enter().append("g").attr("data-depth",(t=>t.data.depth)).attr("data-path",(t=>t.data.state.path)).attr("transform",(t=>`translate(${S+k.ySizeInner-t.ySizeInner},${z+k.xSize/2-t.xSize})`)),E=this.transition(b.exit());E.select("line").attr("x1",(t=>t.ySizeInner)).attr("x2",(t=>t.ySizeInner)),E.select("foreignObject").style("opacity",0),E.attr("transform",(t=>`translate(${k.y+k.ySizeInner-t.ySizeInner},${k.x+k.xSize/2-t.xSize})`)).remove();const C=b.merge(w).attr("class",(t=>{var e;return["markmap-node",(null==(e=t.data.payload)?void 0:e.fold)&&"markmap-fold"].filter(Boolean).join(" ")}));this.transition(C).attr("transform",(t=>`translate(${t.y},${t.x-t.xSize/2})`));const j=C.selectAll(e.childSelector("line")).data((t=>[t]),(t=>t.data.state.key)).join((t=>t.append("line").attr("x1",(t=>t.ySizeInner)).attr("x2",(t=>t.ySizeInner))),(t=>t),(t=>t.remove()));this.transition(j).attr("x1",-1).attr("x2",(t=>t.ySizeInner+2)).attr("y1",(t=>t.xSize)).attr("y2",(t=>t.xSize)).attr("stroke",(t=>h(t.data))).attr("stroke-width",P);const X=C.selectAll(e.childSelector("circle")).data((t=>t.data.children?[t]:[]),(t=>t.data.state.key)).join((t=>t.append("circle").attr("stroke-width","1.5").attr("cx",(t=>t.ySizeInner)).attr("cy",(t=>t.xSize)).attr("r",0).on("click",((t,e)=>this.handleClick(t,e)))),(t=>t),(t=>t.remove()));this.transition(X).attr("r",6).attr("cx",(t=>t.ySizeInner)).attr("cy",(t=>t.xSize)).attr("stroke",(t=>h(t.data))).attr("fill",(t=>{var e;return null!=(e=t.data.payload)&&e.fold&&t.data.children?h(t.data):"#fff"}));const I=C.selectAll(e.childSelector("foreignObject")).data((t=>[t]),(t=>t.data.state.key)).join((t=>{const e=t.append("foreignObject").attr("class","markmap-foreign").attr("x",o).attr("y",0).style("opacity",0).on("mousedown",W).on("dblclick",W);return e.append("xhtml:div").select((function(t){const e=t.data.state.el.cloneNode(!0);return this.replaceWith(e),e})).attr("xmlns","http://www.w3.org/1999/xhtml"),e}),(t=>t),(t=>t.remove())).attr("width",(t=>Math.max(0,t.ySizeInner-2*o))).attr("height",(t=>t.xSize));this.transition(I).style("opacity",1);const O=this.g.selectAll(e.childSelector("path")).data(u,(t=>t.target.data.state.key)).join((t=>{const e=[S+k.ySizeInner,z+k.xSize/2];return t.insert("path","g").attr("class","markmap-link").attr("data-depth",(t=>t.target.data.depth)).attr("data-path",(t=>t.target.data.state.path)).attr("d",f({source:e,target:e}))}),(t=>t),(t=>{const e=[k.y+k.ySizeInner,k.x+k.xSize/2];return this.transition(t).attr("d",f({source:e,target:e})).remove()}));this.transition(O).attr("stroke",(t=>h(t.target.data))).attr("stroke-width",(t=>P(t.target))).attr("d",(t=>{const e=[t.source.y+t.source.ySizeInner,t.source.x+t.source.xSize/2],n=[t.target.y,t.target.x+t.target.xSize/2];return f({source:e,target:n})})),p.forEach((t=>{t.data.state.x0=t.x,t.data.state.y0=t.y}))}transition(t){const{duration:e}=this.options;return t.transition().duration(e)}async fit(){const t=this.svg.node(),{width:n,height:r}=t.getBoundingClientRect(),{fitRatio:a}=this.options,{minX:o,maxX:s,minY:l,maxY:h}=this.state,c=h-l,d=s-o,p=Math.min(n/c*a,r/d*a,2),u=i.zoomIdentity.translate((n-c*p)/2-l*p,(r-d*p)/2-o*p).scale(p);return this.transition(this.svg).call(this.zoom.transform,u).end().catch(e.noop)}async ensureView(t,n){let r,o;if(this.g.selectAll(e.childSelector("g")).each((function(e){e.data===t&&(r=this,o=e)})),!r||!o)return;const s=this.svg.node(),l=s.getBoundingClientRect(),h=i.zoomTransform(s),[c,d]=[o.y,o.y+o.ySizeInner+2].map((t=>t*h.k+h.x)),[p,u]=[o.x-o.xSize/2,o.x+o.xSize/2].map((t=>t*h.k+h.y)),f=a({left:0,right:0,top:0,bottom:0},n),m=[f.left-c,l.width-f.right-d],g=[f.top-p,l.height-f.bottom-u],y=m[0]*m[1]>0?Y(m,Math.abs)/h.k:0,x=g[0]*g[1]>0?Y(g,Math.abs)/h.k:0;if(y||x){const t=h.translate(y,x);return this.transition(this.svg).call(this.zoom.transform,t).end().catch(e.noop)}}async rescale(t){const n=this.svg.node(),{width:r,height:a}=n.getBoundingClientRect(),o=r/2,s=a/2,l=i.zoomTransform(n),h=l.translate((o-l.x)*(1-t)/l.k,(s-l.y)*(1-t)/l.k).scale(t);return this.transition(this.svg).call(this.zoom.transform,h).end().catch(e.noop)}destroy(){this.svg.on(".zoom",null),this.svg.html(null),this.revokers.forEach((t=>{t()}))}static create(t,e,n){const r=new J(t,e);return n&&(r.setData(n),r.fit()),r}}J.defaultOptions={autoFit:!1,color:t=>U(`${t.state.path}`),duration:500,embedGlobalCSS:!0,fitRatio:.95,maxWidth:0,nodeMinHeight:16,paddingX:8,scrollForPan:V,spacingHorizontal:80,spacingVertical:5,initialExpandLevel:-1,zoom:!0,pan:!0},t.loadCSS=e.loadCSS,t.loadJS=e.loadJS,t.Markmap=J,t.defaultColorFn=U,t.deriveOptions=function(t){const e={};t||(t={});const{color:n,colorFreezeLevel:r}=t;if(1===(null==n?void 0:n.length)){const t=n[0];e.color=()=>t}else if(null!=n&&n.length){const t=i.scaleOrdinal(n);e.color=e=>t(`${e.state.path}`)}if(r){const t=e.color||J.defaultOptions.color;e.color=e=>(e=a({},e,{state:a({},e.state,{path:e.state.path.split(".").slice(0,r+1).join(".")})}),t(e))}return["duration","maxWidth","initialExpandLevel"].forEach((n=>{const r=t[n];"number"==typeof r&&(e[n]=r)})),["zoom","pan"].forEach((n=>{const r=t[n];null!=r&&(e[n]=!!r)})),e},t.globalCSS=".markmap{font:300 16px/20px sans-serif}.markmap-link{fill:none}.markmap-node>circle{cursor:pointer}.markmap-foreign{display:inline-block}.markmap-foreign a{color:#0097e6}.markmap-foreign a:hover{color:#00a8ff}.markmap-foreign code{background-color:#f0f0f0;border-radius:2px;color:#555;font-size:calc(1em - 2px)}.markmap-foreign :not(pre)>code{padding:.2em .4em}.markmap-foreign del{text-decoration:line-through}.markmap-foreign em{font-style:italic}.markmap-foreign strong{font-weight:bolder}.markmap-foreign mark{background:#ffeaa7}.markmap-foreign pre,.markmap-foreign pre[class*=language-]{margin:0;padding:.2em .4em}",t.refreshHook=_}(this.markmap=this.markmap||{},markmapCommon,d3);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "markmap-view",
|
|
3
|
-
"version": "0.14.2-alpha.
|
|
3
|
+
"version": "0.14.2-alpha.4+569dd11",
|
|
4
4
|
"description": "View markmaps in browser",
|
|
5
5
|
"author": "Gerald <gera2ld@live.com>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"d3-flextree": "^2.1.1"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
|
-
"markmap-common": "^0.14.
|
|
46
|
+
"markmap-common": "^0.14.0"
|
|
47
47
|
},
|
|
48
48
|
"peerDependencies": {
|
|
49
49
|
"markmap-common": "*"
|
|
@@ -51,5 +51,5 @@
|
|
|
51
51
|
"engines": {
|
|
52
52
|
"node": ">=10"
|
|
53
53
|
},
|
|
54
|
-
"gitHead": "
|
|
54
|
+
"gitHead": "569dd1128d16297708b4fb3789dbc43b082c2ee9"
|
|
55
55
|
}
|