mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-08-15 06:19:24 +02:00
Compare commits
11 Commits
@mermaid-j
...
UpdateClas
Author | SHA1 | Date | |
---|---|---|---|
![]() |
de6add6f0e | ||
![]() |
f1a6ef11f0 | ||
![]() |
67ff83a8b4 | ||
![]() |
c323293fe9 | ||
![]() |
dc1308a2b9 | ||
![]() |
65c0c0acb7 | ||
![]() |
96e5151aec | ||
![]() |
7a987a22c1 | ||
![]() |
824feb544d | ||
![]() |
ada4ddc60d | ||
![]() |
6d0794130c |
@@ -522,6 +522,7 @@ export const insertEdge = function (elem, e, edge, clusterDb, diagramType, graph
|
||||
default:
|
||||
strokeClasses = '';
|
||||
}
|
||||
|
||||
switch (edge.pattern) {
|
||||
case 'solid':
|
||||
strokeClasses += ' edge-pattern-solid';
|
||||
@@ -586,6 +587,9 @@ export const insertEdge = function (elem, e, edge, clusterDb, diagramType, graph
|
||||
case 'extension':
|
||||
svgPath.attr('marker-start', 'url(' + url + '#' + diagramType + '-extensionStart' + ')');
|
||||
break;
|
||||
case 'realization':
|
||||
svgPath.attr('marker-start', 'url(' + url + '#' + diagramType + '-realizationStart' + ')');
|
||||
break;
|
||||
case 'composition':
|
||||
svgPath.attr('marker-start', 'url(' + url + '#' + diagramType + '-compositionStart' + ')');
|
||||
break;
|
||||
@@ -616,6 +620,9 @@ export const insertEdge = function (elem, e, edge, clusterDb, diagramType, graph
|
||||
case 'extension':
|
||||
svgPath.attr('marker-end', 'url(' + url + '#' + diagramType + '-extensionEnd' + ')');
|
||||
break;
|
||||
case 'realization':
|
||||
svgPath.attr('marker-end', 'url(' + url + '#' + diagramType + '-realizationEnd' + ')');
|
||||
break;
|
||||
case 'composition':
|
||||
svgPath.attr('marker-end', 'url(' + url + '#' + diagramType + '-compositionEnd' + ')');
|
||||
break;
|
||||
|
@@ -11,6 +11,7 @@ const insertMarkers = (elem, markerArray, type, id) => {
|
||||
|
||||
const extension = (elem, type, id) => {
|
||||
log.trace('Making markers for ', id);
|
||||
|
||||
elem
|
||||
.append('defs')
|
||||
.append('marker')
|
||||
@@ -38,6 +39,36 @@ const extension = (elem, type, id) => {
|
||||
.attr('d', 'M 1,1 V 13 L18,7 Z'); // this is actual shape for arrowhead
|
||||
};
|
||||
|
||||
const realization = (elem, type, id) => {
|
||||
log.trace('Making markers for ', id);
|
||||
|
||||
elem
|
||||
.append('defs')
|
||||
.append('marker')
|
||||
.attr('id', type + '-realizationStart')
|
||||
.attr('class', 'marker realization ' + type)
|
||||
.attr('refX', 18)
|
||||
.attr('refY', 7)
|
||||
.attr('markerWidth', 190)
|
||||
.attr('markerHeight', 240)
|
||||
.attr('orient', 'auto')
|
||||
.append('path')
|
||||
.attr('d', 'M 1,7 L18,13 V 1 Z');
|
||||
|
||||
elem
|
||||
.append('defs')
|
||||
.append('marker')
|
||||
.attr('id', type + '-realizationEnd')
|
||||
.attr('class', 'marker realization ' + type)
|
||||
.attr('refX', 1)
|
||||
.attr('refY', 7)
|
||||
.attr('markerWidth', 20)
|
||||
.attr('markerHeight', 28)
|
||||
.attr('orient', 'auto')
|
||||
.append('path')
|
||||
.attr('d', 'M 1,1 V 13 L18,7 Z'); // this is actual shape for arrowhead
|
||||
};
|
||||
|
||||
const composition = (elem, type) => {
|
||||
elem
|
||||
.append('defs')
|
||||
@@ -282,6 +313,7 @@ const barb = (elem, type) => {
|
||||
// TODO rename the class diagram markers to something shape descriptive and semantic free
|
||||
const markers = {
|
||||
extension,
|
||||
realization,
|
||||
composition,
|
||||
aggregation,
|
||||
dependency,
|
||||
|
@@ -366,6 +366,7 @@ export const relationType = {
|
||||
COMPOSITION: 2,
|
||||
DEPENDENCY: 3,
|
||||
LOLLIPOP: 4,
|
||||
REALIZATION: 5,
|
||||
};
|
||||
|
||||
const setupToolTips = function (element: Element) {
|
||||
|
@@ -1193,16 +1193,18 @@ describe('given a class diagram with relationships, ', function () {
|
||||
});
|
||||
|
||||
it('should handle relation definitions with type only on right side', function () {
|
||||
const str = 'classDiagram\n' + 'Class1 --|> Class02';
|
||||
const str = 'classDiagram\n' + 'Class1 --|> Class2';
|
||||
|
||||
parser.parse(str);
|
||||
|
||||
const relations = parser.yy.getRelations();
|
||||
const class1 = parser.yy.getClass('Class1');
|
||||
const class2 = parser.yy.getClass('Class2');
|
||||
|
||||
expect(parser.yy.getClass('Class1').id).toBe('Class1');
|
||||
expect(parser.yy.getClass('Class02').id).toBe('Class02');
|
||||
expect(class1.id).toBe('Class1');
|
||||
expect(class2.id).toBe('Class2');
|
||||
expect(relations[0].relation.type1).toBe('none');
|
||||
expect(relations[0].relation.type2).toBe(classDb.relationType.EXTENSION);
|
||||
expect(relations[0].relation.type2).toBe(classDb.relationType.REALIZATION);
|
||||
expect(relations[0].relation.lineType).toBe(classDb.lineType.LINE);
|
||||
});
|
||||
|
||||
|
@@ -354,7 +354,7 @@ export const draw = async function (text: string, id: string, _version: string,
|
||||
await render(
|
||||
element,
|
||||
g,
|
||||
['aggregation', 'extension', 'composition', 'dependency', 'lollipop'],
|
||||
['aggregation', 'extension', 'realization', 'composition', 'dependency', 'lollipop'],
|
||||
'classDiagram',
|
||||
id
|
||||
);
|
||||
@@ -406,6 +406,9 @@ function getArrowMarker(type: number) {
|
||||
case 4:
|
||||
marker = 'lollipop';
|
||||
break;
|
||||
case 5:
|
||||
marker = 'realization';
|
||||
break;
|
||||
default:
|
||||
marker = 'none';
|
||||
}
|
||||
|
@@ -121,28 +121,37 @@ line was introduced with 'click'.
|
||||
<*>"_parent" return 'LINK_TARGET';
|
||||
<*>"_top" return 'LINK_TARGET';
|
||||
|
||||
<*>\s*\<\| return 'EXTENSION';
|
||||
<*>\s*\|\> return 'EXTENSION';
|
||||
<*>\s*\> return 'DEPENDENCY';
|
||||
<*>\s*\< return 'DEPENDENCY';
|
||||
<*>\s*\* return 'COMPOSITION';
|
||||
<*>\s*o return 'AGGREGATION';
|
||||
<*>\s*\(\) return 'LOLLIPOP';
|
||||
<*>\-\- return 'LINE';
|
||||
<*>\.\. return 'DOTTED_LINE';
|
||||
<*>":"{1}[^:\n;]+ return 'LABEL';
|
||||
<*>":"{3} return 'STYLE_SEPARATOR';
|
||||
<*>\- return 'MINUS';
|
||||
<*>"." return 'DOT';
|
||||
<*>\+ return 'PLUS';
|
||||
<*>\% return 'PCT';
|
||||
<*>"=" return 'EQUALS';
|
||||
<*>\= return 'EQUALS';
|
||||
<*>\w+ return 'ALPHA';
|
||||
<*>"[" return 'SQS';
|
||||
<*>"]" return 'SQE';
|
||||
<*>[!"#$%&'*+,-.`?\\/] return 'PUNCTUATION';
|
||||
<*>[0-9]+ return 'NUM';
|
||||
<bqstring>[`] this.popState();
|
||||
<bqstring>[^`]+ return "BQUOTE_STR";
|
||||
<*>[`] this.begin("bqstring");
|
||||
|
||||
<*>"_self" return 'LINK_TARGET';
|
||||
<*>"_blank" return 'LINK_TARGET';
|
||||
<*>"_parent" return 'LINK_TARGET';
|
||||
<*>"_top" return 'LINK_TARGET';
|
||||
|
||||
<*>\s*\<\| return 'EXTENSION';
|
||||
<*>\s*\|\> return 'REALIZATION';
|
||||
<*>\s*\> return 'DEPENDENCY';
|
||||
<*>\s*\< return 'DEPENDENCY';
|
||||
<*>\s*\* return 'COMPOSITION';
|
||||
<*>\s*o return 'AGGREGATION';
|
||||
<*>\s*\(\) return 'LOLLIPOP';
|
||||
<*>\-\- return 'LINE';
|
||||
<*>\.\. return 'DOTTED_LINE';
|
||||
<*>":"{1}[^:\n;]+ return 'LABEL';
|
||||
<*>":"{3} return 'STYLE_SEPARATOR';
|
||||
<*>\- return 'MINUS';
|
||||
<*>"." return 'DOT';
|
||||
<*>\+ return 'PLUS';
|
||||
<*>\% return 'PCT';
|
||||
<*>"=" return 'EQUALS';
|
||||
<*>\= return 'EQUALS';
|
||||
<*>\w+ return 'ALPHA';
|
||||
<*>"[" return 'SQS';
|
||||
<*>"]" return 'SQE';
|
||||
<*>[!"#$%&'*+,-.`?\\/] return 'PUNCTUATION';
|
||||
<*>[0-9]+ return 'NUM';
|
||||
<*>[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|
|
||||
[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|
|
||||
[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|
|
||||
@@ -368,6 +377,7 @@ relation
|
||||
relationType
|
||||
: AGGREGATION { $$=yy.relationType.AGGREGATION;}
|
||||
| EXTENSION { $$=yy.relationType.EXTENSION;}
|
||||
| REALIZATION { $$=yy.relationType.REALIZATION;}
|
||||
| COMPOSITION { $$=yy.relationType.COMPOSITION;}
|
||||
| DEPENDENCY { $$=yy.relationType.DEPENDENCY;}
|
||||
| LOLLIPOP { $$=yy.relationType.LOLLIPOP;}
|
||||
|
@@ -120,6 +120,18 @@ g.classGroup line {
|
||||
stroke-width: 1;
|
||||
}
|
||||
|
||||
#realizationStart, .realization {
|
||||
fill: transparent !important;
|
||||
stroke: ${options.lineColor} !important;
|
||||
stroke-width: 1;
|
||||
}
|
||||
|
||||
#realizationEnd, .realization {
|
||||
fill: transparent !important;
|
||||
stroke: ${options.lineColor} !important;
|
||||
stroke-width: 1;
|
||||
}
|
||||
|
||||
#aggregationStart, .aggregation {
|
||||
fill: transparent !important;
|
||||
stroke: ${options.lineColor} !important;
|
||||
|
@@ -9,6 +9,8 @@ export const drawEdge = function (elem, path, relation, conf, diagObj) {
|
||||
switch (type) {
|
||||
case diagObj.db.relationType.AGGREGATION:
|
||||
return 'aggregation';
|
||||
case diagObj.db.relationType.REALIZATION:
|
||||
return 'realization';
|
||||
case diagObj.db.relationType.EXTENSION:
|
||||
return 'extension';
|
||||
case diagObj.db.relationType.COMPOSITION:
|
||||
|
Reference in New Issue
Block a user