mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-01-28 07:03:17 +08:00
feat: add the possibility to use classifiers on fields of class diagrams
fix #1953
This commit is contained in:
parent
719de71de4
commit
c0c978bbdf
@ -274,7 +274,7 @@ export const drawClass = function (elem, classDef, conf) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const parseMember = function (text) {
|
export const parseMember = function (text) {
|
||||||
const fieldRegEx = /(\+|-|~|#)?(\w+)(~\w+~|\[\])?\s+(\w+)/;
|
const fieldRegEx = /^(\+|-|~|#)?(\w+)(~\w+~|\[\])?\s+(\w+) *(\*|\$)?$/;
|
||||||
const methodRegEx = /^([+|\-|~|#])?(\w+) *\( *(.*)\) *(\*|\$)? *(\w*[~|[\]]*\s*\w*~?)$/;
|
const methodRegEx = /^([+|\-|~|#])?(\w+) *\( *(.*)\) *(\*|\$)? *(\w*[~|[\]]*\s*\w*~?)$/;
|
||||||
|
|
||||||
let fieldMatch = text.match(fieldRegEx);
|
let fieldMatch = text.match(fieldRegEx);
|
||||||
@ -290,6 +290,7 @@ export const parseMember = function (text) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const buildFieldDisplay = function (parsedText) {
|
const buildFieldDisplay = function (parsedText) {
|
||||||
|
let cssStyle = '';
|
||||||
let displayText = '';
|
let displayText = '';
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -297,15 +298,17 @@ const buildFieldDisplay = function (parsedText) {
|
|||||||
let fieldType = parsedText[2] ? parsedText[2].trim() : '';
|
let fieldType = parsedText[2] ? parsedText[2].trim() : '';
|
||||||
let genericType = parsedText[3] ? parseGenericTypes(parsedText[3].trim()) : '';
|
let genericType = parsedText[3] ? parseGenericTypes(parsedText[3].trim()) : '';
|
||||||
let fieldName = parsedText[4] ? parsedText[4].trim() : '';
|
let fieldName = parsedText[4] ? parsedText[4].trim() : '';
|
||||||
|
let classifier = parsedText[5] ? parsedText[5].trim() : '';
|
||||||
|
|
||||||
displayText = visibility + fieldType + genericType + ' ' + fieldName;
|
displayText = visibility + fieldType + genericType + ' ' + fieldName;
|
||||||
|
cssStyle = parseClassifier(classifier);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
displayText = parsedText;
|
displayText = parsedText;
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
displayText: displayText,
|
displayText: displayText,
|
||||||
cssStyle: '',
|
cssStyle: cssStyle,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -321,7 +324,6 @@ const buildMethodDisplay = function (parsedText) {
|
|||||||
let returnType = parsedText[5] ? ' : ' + parseGenericTypes(parsedText[5]).trim() : '';
|
let returnType = parsedText[5] ? ' : ' + parseGenericTypes(parsedText[5]).trim() : '';
|
||||||
|
|
||||||
displayText = visibility + methodName + '(' + parameters + ')' + returnType;
|
displayText = visibility + methodName + '(' + parameters + ')' + returnType;
|
||||||
|
|
||||||
cssStyle = parseClassifier(classifier);
|
cssStyle = parseClassifier(classifier);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
displayText = parsedText;
|
displayText = parsedText;
|
||||||
|
@ -156,5 +156,21 @@ describe('class member Renderer, ', function () {
|
|||||||
expect(actual.displayText).toBe('List<int> ids');
|
expect(actual.displayText).toBe('List<int> ids');
|
||||||
expect(actual.cssStyle).toBe('');
|
expect(actual.cssStyle).toBe('');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should handle abstract classifier', function () {
|
||||||
|
const str = 'String foo*';
|
||||||
|
let actual = svgDraw.parseMember(str);
|
||||||
|
|
||||||
|
expect(actual.displayText).toBe('String foo');
|
||||||
|
expect(actual.cssStyle).toBe('font-style:italic;');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should handle static classifier', function () {
|
||||||
|
const str = 'String foo$';
|
||||||
|
let actual = svgDraw.parseMember(str);
|
||||||
|
|
||||||
|
expect(actual.displayText).toBe('String foo');
|
||||||
|
expect(actual.cssStyle).toBe('text-decoration:underline;');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user