mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-08-17 23:39:26 +02:00
Compare commits
1 Commits
@mermaid-j
...
sidv/mindm
Author | SHA1 | Date | |
---|---|---|---|
![]() |
87cdc03e84 |
@@ -58,6 +58,7 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"concurrently": "^7.4.0",
|
"concurrently": "^7.4.0",
|
||||||
|
"mermaid": "workspace:*",
|
||||||
"rimraf": "^3.0.2"
|
"rimraf": "^3.0.2"
|
||||||
},
|
},
|
||||||
"resolutions": {
|
"resolutions": {
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
|
import type { MermaidConfig } from 'mermaid/dist/config.type';
|
||||||
|
|
||||||
const warning = (s: string) => {
|
const warning = (s: string) => {
|
||||||
// Todo remove debug code
|
// Todo remove debug code
|
||||||
console.error('Log function was called before initialization', s); // eslint-disable-line
|
console.error('Log function was called before initialization', s); // eslint-disable-line
|
||||||
@@ -24,7 +26,7 @@ export const log: Record<keyof typeof LEVELS, typeof console.log> = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export let setLogLevel: (level: keyof typeof LEVELS | number | string) => void;
|
export let setLogLevel: (level: keyof typeof LEVELS | number | string) => void;
|
||||||
export let getConfig: () => object;
|
export let getConfig: () => MermaidConfig;
|
||||||
export let sanitizeText: (str: string) => string;
|
export let sanitizeText: (str: string) => string;
|
||||||
// eslint-disable @typescript-eslint/no-explicit-any
|
// eslint-disable @typescript-eslint/no-explicit-any
|
||||||
export let setupGraphViewbox: (
|
export let setupGraphViewbox: (
|
||||||
|
@@ -1,16 +1,30 @@
|
|||||||
/** Created by knut on 15-01-14. */
|
/** Created by knut on 15-01-14. */
|
||||||
import { sanitizeText, getConfig, log } from './mermaidUtils';
|
import { sanitizeText, getConfig, log } from './mermaidUtils';
|
||||||
|
import type { DetailedError } from 'mermaid/dist/utils';
|
||||||
|
|
||||||
let nodes = [];
|
interface Node {
|
||||||
|
id: number;
|
||||||
|
nodeId: string;
|
||||||
|
level: number;
|
||||||
|
descr: string;
|
||||||
|
type: number;
|
||||||
|
children: Node[];
|
||||||
|
width: number;
|
||||||
|
padding: number;
|
||||||
|
icon?: string;
|
||||||
|
class?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
let nodes: Node[] = [];
|
||||||
let cnt = 0;
|
let cnt = 0;
|
||||||
let elements = {};
|
let elements: Record<number, HTMLElement> = {};
|
||||||
export const clear = () => {
|
export const clear = () => {
|
||||||
nodes = [];
|
nodes = [];
|
||||||
cnt = 0;
|
cnt = 0;
|
||||||
elements = {};
|
elements = {};
|
||||||
};
|
};
|
||||||
|
|
||||||
const getParent = function (level) {
|
const getParent = function (level: number) {
|
||||||
for (let i = nodes.length - 1; i >= 0; i--) {
|
for (let i = nodes.length - 1; i >= 0; i--) {
|
||||||
if (nodes[i].level < level) {
|
if (nodes[i].level < level) {
|
||||||
return nodes[i];
|
return nodes[i];
|
||||||
@@ -23,28 +37,21 @@ const getParent = function (level) {
|
|||||||
export const getMindmap = () => {
|
export const getMindmap = () => {
|
||||||
return nodes.length > 0 ? nodes[0] : null;
|
return nodes.length > 0 ? nodes[0] : null;
|
||||||
};
|
};
|
||||||
export const addNode = (level, id, descr, type) => {
|
|
||||||
|
export const addNode = (level: number, id: string, descr: string, type: number) => {
|
||||||
log.info('addNode', level, id, descr, type);
|
log.info('addNode', level, id, descr, type);
|
||||||
const conf = getConfig();
|
const conf = getConfig();
|
||||||
const node = {
|
const padding = conf.mindmap?.padding ?? 15;
|
||||||
|
const node: Node = {
|
||||||
id: cnt++,
|
id: cnt++,
|
||||||
nodeId: sanitizeText(id),
|
nodeId: sanitizeText(id),
|
||||||
level,
|
level,
|
||||||
descr: sanitizeText(descr),
|
descr: sanitizeText(descr),
|
||||||
type,
|
type,
|
||||||
children: [],
|
children: [],
|
||||||
width: getConfig().mindmap.maxNodeWidth,
|
width: getConfig().mindmap?.maxNodeWidth ?? 200,
|
||||||
|
padding: type === nodeType.ROUNDED_RECT || type === nodeType.RECT ? 2 * padding : padding,
|
||||||
};
|
};
|
||||||
switch (node.type) {
|
|
||||||
case nodeType.ROUNDED_RECT:
|
|
||||||
node.padding = 2 * conf.mindmap.padding;
|
|
||||||
break;
|
|
||||||
case nodeType.RECT:
|
|
||||||
node.padding = 2 * conf.mindmap.padding;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
node.padding = conf.mindmap.padding;
|
|
||||||
}
|
|
||||||
const parent = getParent(level);
|
const parent = getParent(level);
|
||||||
if (parent) {
|
if (parent) {
|
||||||
parent.children.push(node);
|
parent.children.push(node);
|
||||||
@@ -56,9 +63,10 @@ export const addNode = (level, id, descr, type) => {
|
|||||||
nodes.push(node);
|
nodes.push(node);
|
||||||
} else {
|
} else {
|
||||||
// Syntax error ... there can only bee one root
|
// Syntax error ... there can only bee one root
|
||||||
let error = new Error(
|
const error = new Error(
|
||||||
'There can be only one root. No parent could be found for ("' + node.descr + '")'
|
'There can be only one root. No parent could be found for ("' + node.descr + '")'
|
||||||
);
|
);
|
||||||
|
// @ts-ignore TODO: Add mermaid error
|
||||||
error.hash = {
|
error.hash = {
|
||||||
text: 'branch ' + name,
|
text: 'branch ' + name,
|
||||||
token: 'branch ' + name,
|
token: 'branch ' + name,
|
||||||
@@ -81,7 +89,7 @@ export const nodeType = {
|
|||||||
BANG: 5,
|
BANG: 5,
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getType = (startStr, endStr) => {
|
export const getType = (startStr: string, endStr: string): number => {
|
||||||
log.debug('In get type', startStr, endStr);
|
log.debug('In get type', startStr, endStr);
|
||||||
switch (startStr) {
|
switch (startStr) {
|
||||||
case '[':
|
case '[':
|
||||||
@@ -99,11 +107,11 @@ export const getType = (startStr, endStr) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export const setElementForId = (id, element) => {
|
export const setElementForId = (id: number, element: HTMLElement) => {
|
||||||
elements[id] = element;
|
elements[id] = element;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const decorateNode = (decoration) => {
|
export const decorateNode = (decoration: { icon: string; class: string }) => {
|
||||||
const node = nodes[nodes.length - 1];
|
const node = nodes[nodes.length - 1];
|
||||||
if (decoration && decoration.icon) {
|
if (decoration && decoration.icon) {
|
||||||
node.icon = sanitizeText(decoration.icon);
|
node.icon = sanitizeText(decoration.icon);
|
||||||
@@ -113,7 +121,7 @@ export const decorateNode = (decoration) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export const type2Str = (type) => {
|
export const type2Str = (type: number) => {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case nodeType.DEFAULT:
|
case nodeType.DEFAULT:
|
||||||
return 'no-border';
|
return 'no-border';
|
||||||
@@ -132,13 +140,15 @@ export const type2Str = (type) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export let parseError;
|
export type ParseErrorFunction = (err: string | DetailedError, hash?: any) => void;
|
||||||
export const setErrorHandler = (handler) => {
|
export let parseError: ParseErrorFunction;
|
||||||
|
export const setErrorHandler = (handler: ParseErrorFunction) => {
|
||||||
parseError = handler;
|
parseError = handler;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Expose logger to grammar
|
// Expose logger to grammar
|
||||||
export const getLogger = () => log;
|
export const getLogger = () => log;
|
||||||
|
|
||||||
export const getNodeById = (id) => nodes[id];
|
export const getNodeById = (id: number): Node => nodes[id];
|
||||||
export const getElementById = (id) => elements[id];
|
export const getElementById = (id: number | string): HTMLElement =>
|
||||||
|
elements[typeof id === 'string' ? parseInt(id) : id];
|
2
pnpm-lock.yaml
generated
2
pnpm-lock.yaml
generated
@@ -289,6 +289,7 @@ importers:
|
|||||||
cytoscape-cose-bilkent: ^4.1.0
|
cytoscape-cose-bilkent: ^4.1.0
|
||||||
cytoscape-fcose: ^2.1.0
|
cytoscape-fcose: ^2.1.0
|
||||||
d3: ^7.0.0
|
d3: ^7.0.0
|
||||||
|
mermaid: workspace:*
|
||||||
non-layered-tidy-tree-layout: ^2.0.2
|
non-layered-tidy-tree-layout: ^2.0.2
|
||||||
rimraf: ^3.0.2
|
rimraf: ^3.0.2
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -300,6 +301,7 @@ importers:
|
|||||||
non-layered-tidy-tree-layout: 2.0.2
|
non-layered-tidy-tree-layout: 2.0.2
|
||||||
devDependencies:
|
devDependencies:
|
||||||
concurrently: 7.4.0
|
concurrently: 7.4.0
|
||||||
|
mermaid: link:../mermaid
|
||||||
rimraf: 3.0.2
|
rimraf: 3.0.2
|
||||||
|
|
||||||
packages:
|
packages:
|
||||||
|
Reference in New Issue
Block a user