mirror of
				https://github.com/mermaid-js/mermaid.git
				synced 2025-11-04 04:44:08 +01:00 
			
		
		
		
	Compare commits
	
		
			1 Commits
		
	
	
		
			v10.1.0
			...
			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