mirror of
				https://github.com/mermaid-js/mermaid.git
				synced 2025-10-30 18:34:09 +01:00 
			
		
		
		
	Compare commits
	
		
			1 Commits
		
	
	
		
			@mermaid-j
			...
			sidv/mindm
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 87cdc03e84 | 
| @@ -58,6 +58,7 @@ | ||||
|   }, | ||||
|   "devDependencies": { | ||||
|     "concurrently": "^7.4.0", | ||||
|     "mermaid": "workspace:*", | ||||
|     "rimraf": "^3.0.2" | ||||
|   }, | ||||
|   "resolutions": { | ||||
|   | ||||
| @@ -1,3 +1,5 @@ | ||||
| import type { MermaidConfig } from 'mermaid/dist/config.type'; | ||||
|  | ||||
| const warning = (s: string) => { | ||||
|   // Todo remove debug code | ||||
|   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 getConfig: () => object; | ||||
| export let getConfig: () => MermaidConfig; | ||||
| export let sanitizeText: (str: string) => string; | ||||
| // eslint-disable @typescript-eslint/no-explicit-any | ||||
| export let setupGraphViewbox: ( | ||||
|   | ||||
| @@ -1,16 +1,30 @@ | ||||
| /** Created by knut on 15-01-14. */ | ||||
| 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 elements = {}; | ||||
| let elements: Record<number, HTMLElement> = {}; | ||||
| export const clear = () => { | ||||
|   nodes = []; | ||||
|   cnt = 0; | ||||
|   elements = {}; | ||||
| }; | ||||
| 
 | ||||
| const getParent = function (level) { | ||||
| const getParent = function (level: number) { | ||||
|   for (let i = nodes.length - 1; i >= 0; i--) { | ||||
|     if (nodes[i].level < level) { | ||||
|       return nodes[i]; | ||||
| @@ -23,28 +37,21 @@ const getParent = function (level) { | ||||
| export const getMindmap = () => { | ||||
|   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); | ||||
|   const conf = getConfig(); | ||||
|   const node = { | ||||
|   const padding = conf.mindmap?.padding ?? 15; | ||||
|   const node: Node = { | ||||
|     id: cnt++, | ||||
|     nodeId: sanitizeText(id), | ||||
|     level, | ||||
|     descr: sanitizeText(descr), | ||||
|     type, | ||||
|     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); | ||||
|   if (parent) { | ||||
|     parent.children.push(node); | ||||
| @@ -56,9 +63,10 @@ export const addNode = (level, id, descr, type) => { | ||||
|       nodes.push(node); | ||||
|     } else { | ||||
|       // 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 + '")' | ||||
|       ); | ||||
|       // @ts-ignore TODO: Add mermaid error
 | ||||
|       error.hash = { | ||||
|         text: 'branch ' + name, | ||||
|         token: 'branch ' + name, | ||||
| @@ -81,7 +89,7 @@ export const nodeType = { | ||||
|   BANG: 5, | ||||
| }; | ||||
| 
 | ||||
| export const getType = (startStr, endStr) => { | ||||
| export const getType = (startStr: string, endStr: string): number => { | ||||
|   log.debug('In get type', startStr, endStr); | ||||
|   switch (startStr) { | ||||
|     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; | ||||
| }; | ||||
| 
 | ||||
| export const decorateNode = (decoration) => { | ||||
| export const decorateNode = (decoration: { icon: string; class: string }) => { | ||||
|   const node = nodes[nodes.length - 1]; | ||||
|   if (decoration && 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) { | ||||
|     case nodeType.DEFAULT: | ||||
|       return 'no-border'; | ||||
| @@ -132,13 +140,15 @@ export const type2Str = (type) => { | ||||
|   } | ||||
| }; | ||||
| 
 | ||||
| export let parseError; | ||||
| export const setErrorHandler = (handler) => { | ||||
| export type ParseErrorFunction = (err: string | DetailedError, hash?: any) => void; | ||||
| export let parseError: ParseErrorFunction; | ||||
| export const setErrorHandler = (handler: ParseErrorFunction) => { | ||||
|   parseError = handler; | ||||
| }; | ||||
| 
 | ||||
| // Expose logger to grammar
 | ||||
| export const getLogger = () => log; | ||||
| 
 | ||||
| export const getNodeById = (id) => nodes[id]; | ||||
| export const getElementById = (id) => elements[id]; | ||||
| export const getNodeById = (id: number): Node => nodes[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-fcose: ^2.1.0 | ||||
|       d3: ^7.0.0 | ||||
|       mermaid: workspace:* | ||||
|       non-layered-tidy-tree-layout: ^2.0.2 | ||||
|       rimraf: ^3.0.2 | ||||
|     dependencies: | ||||
| @@ -300,6 +301,7 @@ importers: | ||||
|       non-layered-tidy-tree-layout: 2.0.2 | ||||
|     devDependencies: | ||||
|       concurrently: 7.4.0 | ||||
|       mermaid: link:../mermaid | ||||
|       rimraf: 3.0.2 | ||||
|  | ||||
| packages: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user