markmap-lib
Version:
Visualize your Markdown as mindmaps with Markmap
74 lines (59 loc) • 1.75 kB
JavaScript
;
exports.__esModule = true;
exports.getId = getId;
exports.walkTree = walkTree;
exports.arrayFrom = arrayFrom;
exports.flatMap = flatMap;
exports.addClass = addClass;
exports.childSelector = childSelector;
const uniqId = Math.random().toString(36).slice(2, 8);
let globalIndex = 0;
function getId() {
globalIndex += 1;
return `mm-${uniqId}-${globalIndex}`;
}
function walkTree(tree, callback, key = 'c') {
const walk = (item, parent) => callback(item, () => {
var _item$key;
(_item$key = item[key]) == null ? void 0 : _item$key.forEach(child => {
walk(child, item);
});
}, parent);
walk(tree);
}
function arrayFrom(arrayLike) {
if (Array.from) return Array.from(arrayLike);
const array = [];
for (let i = 0; i < arrayLike.length; i += 1) {
array.push(arrayLike[i]);
}
return array;
}
function flatMap(arrayLike, callback) {
if (arrayLike.flatMap) return arrayLike.flatMap(callback);
const array = [];
for (let i = 0; i < arrayLike.length; i += 1) {
const result = callback(arrayLike[i], i, arrayLike);
if (Array.isArray(result)) array.push(...result);else array.push(result);
}
return array;
}
function addClass(className, ...rest) {
const classList = (className || '').split(' ').filter(Boolean);
rest.forEach(item => {
if (item && classList.indexOf(item) < 0) classList.push(item);
});
return classList.join(' ');
}
function childSelector(filter) {
if (typeof filter === 'string') {
const tagName = filter;
filter = el => el.tagName === tagName;
}
const filterFn = filter;
return function selector() {
let nodes = arrayFrom(this.childNodes);
if (filterFn) nodes = nodes.filter(node => filterFn(node));
return nodes;
};
}