mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-01-28 07:03:17 +08:00
Implement database for namespace data
This commit is contained in:
parent
4017bb3c49
commit
75502d076e
@ -14,7 +14,14 @@ import {
|
|||||||
setDiagramTitle,
|
setDiagramTitle,
|
||||||
getDiagramTitle,
|
getDiagramTitle,
|
||||||
} from '../../commonDb';
|
} from '../../commonDb';
|
||||||
import { ClassRelation, ClassNode, ClassNote, ClassMap } from './classTypes';
|
import {
|
||||||
|
ClassRelation,
|
||||||
|
ClassNode,
|
||||||
|
ClassNote,
|
||||||
|
ClassMap,
|
||||||
|
NamespaceMap,
|
||||||
|
NamespaceNode,
|
||||||
|
} from './classTypes';
|
||||||
|
|
||||||
const MERMAID_DOM_ID_PREFIX = 'classId-';
|
const MERMAID_DOM_ID_PREFIX = 'classId-';
|
||||||
|
|
||||||
@ -22,6 +29,8 @@ let relations: ClassRelation[] = [];
|
|||||||
let classes: ClassMap = {};
|
let classes: ClassMap = {};
|
||||||
let notes: ClassNote[] = [];
|
let notes: ClassNote[] = [];
|
||||||
let classCounter = 0;
|
let classCounter = 0;
|
||||||
|
let namespaces: NamespaceMap = {};
|
||||||
|
let namespaceCounter = 0;
|
||||||
|
|
||||||
let functions: any[] = [];
|
let functions: any[] = [];
|
||||||
|
|
||||||
@ -100,6 +109,8 @@ export const clear = function () {
|
|||||||
notes = [];
|
notes = [];
|
||||||
functions = [];
|
functions = [];
|
||||||
functions.push(setupToolTips);
|
functions.push(setupToolTips);
|
||||||
|
namespaces = {};
|
||||||
|
namespaceCounter = 0;
|
||||||
commonClear();
|
commonClear();
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -393,14 +404,28 @@ const setDirection = (dir: string) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function called by parser when a namespace keyword has been found.
|
* Function called by parser when a namespace definition has been found.
|
||||||
*
|
*
|
||||||
* @param id - Id of the namespace to add
|
* @param id - Id of the namespace to add
|
||||||
* @public
|
* @public
|
||||||
*/
|
*/
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
export const addNamespace = function (name: string) {
|
||||||
export const addNamespace = function (id: string) {
|
namespaces[name] = {
|
||||||
// TODO: Implement here
|
id: name,
|
||||||
|
domId: MERMAID_DOM_ID_PREFIX + name + '-' + namespaceCounter,
|
||||||
|
classes: {},
|
||||||
|
children: {},
|
||||||
|
};
|
||||||
|
|
||||||
|
namespaceCounter++;
|
||||||
|
};
|
||||||
|
|
||||||
|
const getNamespace = function (name: string): NamespaceNode {
|
||||||
|
return namespaces[name];
|
||||||
|
};
|
||||||
|
|
||||||
|
const getNamespaces = function (): NamespaceMap {
|
||||||
|
return namespaces;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -410,9 +435,14 @@ export const addNamespace = function (id: string) {
|
|||||||
* @param classNames - Ids of the class to add
|
* @param classNames - Ids of the class to add
|
||||||
* @public
|
* @public
|
||||||
*/
|
*/
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
||||||
export const addClassesToNamespace = function (id: string, classNames: string[]) {
|
export const addClassesToNamespace = function (id: string, classNames: string[]) {
|
||||||
// TODO: Implement here
|
if (namespaces[id] !== undefined) {
|
||||||
|
classNames.map((className) => {
|
||||||
|
namespaces[id].classes[className] = classes[className];
|
||||||
|
delete classes[className];
|
||||||
|
classCounter--;
|
||||||
|
});
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
@ -450,4 +480,6 @@ export default {
|
|||||||
setClassLabel,
|
setClassLabel,
|
||||||
addNamespace,
|
addNamespace,
|
||||||
addClassesToNamespace,
|
addClassesToNamespace,
|
||||||
|
getNamespace,
|
||||||
|
getNamespaces,
|
||||||
};
|
};
|
||||||
|
@ -1008,6 +1008,25 @@ foo()
|
|||||||
expect(classDb.setClickEvent).toHaveBeenCalledWith('Class1', 'functionCall');
|
expect(classDb.setClickEvent).toHaveBeenCalledWith('Class1', 'functionCall');
|
||||||
expect(classDb.setTooltip).toHaveBeenCalledWith('Class1', 'A tooltip');
|
expect(classDb.setTooltip).toHaveBeenCalledWith('Class1', 'A tooltip');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should add classes namespaces', function () {
|
||||||
|
const str = `classDiagram
|
||||||
|
namespace Namespace1 {
|
||||||
|
class Class1 {
|
||||||
|
int : test
|
||||||
|
string : foo
|
||||||
|
test()
|
||||||
|
foo()
|
||||||
|
}
|
||||||
|
class Class2
|
||||||
|
}`;
|
||||||
|
parser.parse(str);
|
||||||
|
|
||||||
|
const testNamespace = parser.yy.getNamespace('Namespace1');
|
||||||
|
expect(Object.keys(testNamespace.classes).length).toBe(2);
|
||||||
|
expect(Object.keys(testNamespace.children).length).toBe(0);
|
||||||
|
expect(testNamespace.classes['Class1'].id).toBe('Class1');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('when parsing classDiagram with text labels', () => {
|
describe('when parsing classDiagram with text labels', () => {
|
||||||
|
@ -52,4 +52,13 @@ export type ClassRelation = {
|
|||||||
lineType: number;
|
lineType: number;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export interface NamespaceNode {
|
||||||
|
id: string;
|
||||||
|
domId: string;
|
||||||
|
classes: ClassMap;
|
||||||
|
children: NamespaceMap;
|
||||||
|
}
|
||||||
|
|
||||||
export type ClassMap = Record<string, ClassNode>;
|
export type ClassMap = Record<string, ClassNode>;
|
||||||
|
export type NamespaceMap = Record<string, NamespaceNode>;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user