Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 13 additions & 3 deletions packages/mermaid/src/diagrams/class/classDb.ts
Original file line number Diff line number Diff line change
Expand Up @@ -334,6 +334,7 @@ export class ClassDB implements DiagramDB {
if (/\d/.exec(_id[0])) {
id = MERMAID_DOM_ID_PREFIX + id;
}
id = this.splitClassNameAndType(id).className;
const classNode = this.classes.get(id);
if (classNode) {
classNode.cssClasses += ' ' + className;
Expand Down Expand Up @@ -376,7 +377,11 @@ export class ClassDB implements DiagramDB {
public setTooltip(ids: string, tooltip?: string) {
ids.split(',').forEach((id) => {
if (tooltip !== undefined) {
this.classes.get(id)!.tooltip = sanitizeText(tooltip);
const className = this.splitClassNameAndType(id).className;
const classNode = this.classes.get(className);
if (classNode) {
classNode.tooltip = sanitizeText(tooltip);
}
}
});
}
Expand All @@ -403,6 +408,7 @@ export class ClassDB implements DiagramDB {
if (/\d/.exec(_id[0])) {
id = MERMAID_DOM_ID_PREFIX + id;
}
id = this.splitClassNameAndType(id).className;
const theClass = this.classes.get(id);
if (theClass) {
theClass.link = utils.formatUrl(linkStr, config);
Expand All @@ -428,7 +434,11 @@ export class ClassDB implements DiagramDB {
public setClickEvent(ids: string, functionName: string, functionArgs: string) {
ids.split(',').forEach((id) => {
this.setClickFunc(id, functionName, functionArgs);
this.classes.get(id)!.haveCallback = true;
const className = this.splitClassNameAndType(id).className;
const classNode = this.classes.get(className);
if (classNode) {
classNode.haveCallback = true;
}
});
this.setCssClass(ids, 'clickable');
}
Expand All @@ -443,7 +453,7 @@ export class ClassDB implements DiagramDB {
return;
}

const id = domId;
const id = this.splitClassNameAndType(domId).className;
if (this.classes.has(id)) {
let argList: string[] = [];
if (typeof functionArgs === 'string') {
Expand Down
28 changes: 27 additions & 1 deletion packages/mermaid/src/diagrams/class/classDiagram.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -481,6 +481,32 @@ describe('given a basic class diagram, ', function () {
expect(c2.cssClasses).toBe('default styleClass2');
});

it('should apply cssClasses to generic classes', () => {
const str = 'classDiagram\n' + 'class C1~T~\n' + 'cssClass "C1~T~" styleClass';

parser.parse(str);

const c1 = classDb.getClass('C1');
expect(c1.cssClasses).toBe('default styleClass');
});

it('should apply cssClasses to generic classes via shorthand', () => {
const str = 'classDiagram\n' + 'class C1~T~:::styleClass';

parser.parse(str);

const c1 = classDb.getClass('C1');
expect(c1.cssClasses).toBe('default styleClass');
});

it('should bind click event on generic class', () => {
const str = 'classDiagram\n' + 'class C1~T~\n' + 'click C1~T~ call someFunction()';

parser.parse(str);
const c1 = classDb.getClass('C1');
expect(c1.haveCallback).toBe(true);
});

it('should parse multiple classes with same text labels', () => {
parser.parse(`classDiagram
class C1["Class with text label"]
Expand Down Expand Up @@ -682,7 +708,7 @@ class C13["With Città foreign language"]
{
"annotations": [],
"cssClasses": "default",
"domId": "classId-Student-149",
"domId": "classId-Student-152",
"id": "Student",
"label": "Student",
"members": [
Expand Down