From c0c978bbdf961221639ee0f22ca3490cc335d509 Mon Sep 17 00:00:00 2001 From: Xavier Stouder Date: Thu, 26 Aug 2021 10:53:03 +0200 Subject: [PATCH] feat: add the possibility to use classifiers on fields of class diagrams fix #1953 --- src/diagrams/class/svgDraw.js | 8 +++++--- src/diagrams/class/svgDraw.spec.js | 16 ++++++++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/diagrams/class/svgDraw.js b/src/diagrams/class/svgDraw.js index 5c58d0578..d9cd52161 100644 --- a/src/diagrams/class/svgDraw.js +++ b/src/diagrams/class/svgDraw.js @@ -274,7 +274,7 @@ export const drawClass = function (elem, classDef, conf) { }; export const parseMember = function (text) { - const fieldRegEx = /(\+|-|~|#)?(\w+)(~\w+~|\[\])?\s+(\w+)/; + const fieldRegEx = /^(\+|-|~|#)?(\w+)(~\w+~|\[\])?\s+(\w+) *(\*|\$)?$/; const methodRegEx = /^([+|\-|~|#])?(\w+) *\( *(.*)\) *(\*|\$)? *(\w*[~|[\]]*\s*\w*~?)$/; let fieldMatch = text.match(fieldRegEx); @@ -290,6 +290,7 @@ export const parseMember = function (text) { }; const buildFieldDisplay = function (parsedText) { + let cssStyle = ''; let displayText = ''; try { @@ -297,15 +298,17 @@ const buildFieldDisplay = function (parsedText) { let fieldType = parsedText[2] ? parsedText[2].trim() : ''; let genericType = parsedText[3] ? parseGenericTypes(parsedText[3].trim()) : ''; let fieldName = parsedText[4] ? parsedText[4].trim() : ''; + let classifier = parsedText[5] ? parsedText[5].trim() : ''; displayText = visibility + fieldType + genericType + ' ' + fieldName; + cssStyle = parseClassifier(classifier); } catch (err) { displayText = parsedText; } return { displayText: displayText, - cssStyle: '', + cssStyle: cssStyle, }; }; @@ -321,7 +324,6 @@ const buildMethodDisplay = function (parsedText) { let returnType = parsedText[5] ? ' : ' + parseGenericTypes(parsedText[5]).trim() : ''; displayText = visibility + methodName + '(' + parameters + ')' + returnType; - cssStyle = parseClassifier(classifier); } catch (err) { displayText = parsedText; diff --git a/src/diagrams/class/svgDraw.spec.js b/src/diagrams/class/svgDraw.spec.js index b6e26dbf8..6d4571b12 100644 --- a/src/diagrams/class/svgDraw.spec.js +++ b/src/diagrams/class/svgDraw.spec.js @@ -156,5 +156,21 @@ describe('class member Renderer, ', function () { expect(actual.displayText).toBe('List ids'); 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;'); + }); }); });