Skip to content

Commit 5069262

Browse files
Merge remote-tracking branch 'upstream/master'
2 parents 0f9f92a + 4c5b4b7 commit 5069262

File tree

7 files changed

+70
-19
lines changed

7 files changed

+70
-19
lines changed

cache/projectTemplate.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ return structured data about class</Description>
5858
set oClass = ##class(%ZEN.proxyObject).%New()
5959
6060
set oProperties = ##class(%ZEN.proxyObject).%New()
61+
set oClass.NAMESPACE = $NAMESPACE
6162
set oClass.super = classDefinition.Super
6263
set oClass.properties = oProperties
6364
set count = classDefinition.Properties.Count()

web/css/classView.css

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,12 @@ text {
2828
.centralText > div {
2929
display: table-cell;
3030
vertical-align: middle;
31+
}
32+
33+
.uml-class-name-text {
34+
cursor: help;
35+
}
36+
37+
.uml-class-name-text:hover {
38+
fill: red;
3139
}

web/css/treeView.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
display: none;
1212
}
1313

14-
.tv-class-name.selected {
14+
.tv-class-name.selected, .tv-package-name.selected {
1515
box-shadow: inset 0 0 2px 2px #ffcc1b;
1616
}
1717

web/js/ClassTree.js

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,9 @@ ClassTree.prototype.packageSelected = function (element, packageName) {
6565
ClassTree.prototype.updateTree = function (treeObject) {
6666

6767
var self = this,
68-
div = function () { return document.createElement("div"); };
68+
div = function () { return document.createElement("div");},
69+
selectedClassElement = this.SELECTED_CLASS_NAME ? this.SELECTED_CLASS_NAME.split(".") : [],
70+
sce = 0; // selectedClassElement level index
6971

7072
var packageClick = function (e) {
7173

@@ -87,24 +89,32 @@ ClassTree.prototype.updateTree = function (treeObject) {
8789

8890
};
8991

90-
var append = function (rootElement, elementName, isPackage, path) {
92+
var append = function (rootElement, elementName, isPackage, path, level) {
9193

92-
var el1 = div(),
94+
var sel = selectedClassElement.length
95+
&& sce === level && selectedClassElement[sce] === elementName ? ++sce : null,
96+
el1 = div(),
9397
el2, el3, el4;
9498

9599
if (isPackage) {
96100
el1.className = "tv-package";
97-
(el2 = div()).className = "tv-package-name minimized"; el2.textContent = elementName;
101+
(el2 = div()).className = "tv-package-name" + (sel ? "" : " minimized");
102+
el2.textContent = elementName;
103+
if (sel && sce === selectedClassElement.length) {
104+
el2.className += " selected";
105+
self.SELECTED_ELEMENT = el2;
106+
}
98107
(el3 = div()).className = "tv-package-content";
99108
el1.appendChild(el2); el1.appendChild(el3);
100109
el2.addEventListener("click", packageClick);
101110
el2.appendChild(el4 = div());
102111
el4.className = "tv-rightListIcon icon list";
103112
el4.addEventListener("click", function () {
104-
self.packageSelected(el1, (path ? path + "." : path) + elementName);
113+
self.packageSelected(el2, (path ? path + "." : path) + elementName);
105114
});
106115
} else {
107-
el1.className = "tv-class-name";
116+
if (sel) self.SELECTED_ELEMENT = el1;
117+
el1.className = "tv-class-name" + (sel ? " selected" : "");
108118
el1.textContent = elementName;
109119
el1.addEventListener("click", classClick);
110120
el1.CLASS_NAME = path + (path ? "." : "") + elementName;
@@ -116,7 +126,7 @@ ClassTree.prototype.updateTree = function (treeObject) {
116126

117127
};
118128

119-
var build = function (rootElement, object, path) {
129+
var build = function (rootElement, object, path, level) {
120130

121131
var i, element, rec,
122132
arr = [];
@@ -136,15 +146,16 @@ ClassTree.prototype.updateTree = function (treeObject) {
136146
rootElement,
137147
element.name,
138148
typeof element.val === "object",
139-
path.join(".")
149+
path.join("."),
150+
level
140151
)) {
141-
build(rec, element.val, path.concat([element.name]));
152+
build(rec, element.val, path.concat([element.name]), level + 1);
142153
}
143154
}
144155

145156
};
146157

147-
build(this.container, treeObject, []);
158+
build(this.container, treeObject, [], 0);
148159

149160
this.removeLoader();
150161

web/js/ClassView.js

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ var ClassView = function (parent, container) {
1818
this.MIN_PAPER_SCALE = 0.2;
1919
this.MAX_PAPER_SCALE = 4;
2020

21+
this.CLASS_DOC_PATH = "/csp/documatic/%25CSP.Documatic.cls";
22+
2123
this.init();
2224

2325
};
@@ -60,17 +62,28 @@ ClassView.prototype.resetView = function () {
6062

6163
};
6264

65+
ClassView.prototype.openClassDoc = function (className, nameSpace) {
66+
67+
window.open(
68+
this.CLASS_DOC_PATH + "?LIBRARY=" + encodeURIComponent(nameSpace)
69+
+ "&CLASSNAME=" + encodeURIComponent(className),
70+
"_blank"
71+
);
72+
73+
};
74+
6375
/**
6476
* @param {string} name
6577
* @param classMetaData
6678
* @returns {joint.shapes.uml.Class}
6779
*/
6880
ClassView.prototype.createClassInstance = function (name, classMetaData) {
6981

70-
var attrArr, methArr,
82+
var attrArr, methArr, nameArr,
7183
classParams = classMetaData["parameters"],
7284
classProps = classMetaData["properties"],
73-
classMethods = classMetaData["methods"];
85+
classMethods = classMetaData["methods"],
86+
self = this;
7487

7588
var insertString = function (array, string, extraString) {
7689
string.match(/.{1,44}/g).forEach(function (p) {
@@ -79,7 +92,7 @@ ClassView.prototype.createClassInstance = function (name, classMetaData) {
7992
};
8093

8194
return new joint.shapes.uml.Class({
82-
name: name,
95+
name: nameArr = (classMetaData["ABSTRACT"] ? ["<<Abstract>>", name] : [name]),
8396
attributes: attrArr = (function (params, ps) {
8497
var arr = [], n;
8598
for (n in params) {
@@ -99,7 +112,8 @@ ClassView.prototype.createClassInstance = function (name, classMetaData) {
99112
for (n in met) {
100113
insertString(
101114
arr,
102-
"+ " + n + (met[n]["returns"] ? ": " + met[n]["returns"] : ""),
115+
(met[n]["private"] ? "- " : "+ ") + n
116+
+ (met[n]["returns"] ? ": " + met[n]["returns"] : ""),
103117
(met[n]["classMethod"] ?
104118
"\x1b" + JSON.stringify({STYLES:{
105119
textDecoration: "underline"
@@ -108,9 +122,15 @@ ClassView.prototype.createClassInstance = function (name, classMetaData) {
108122
}
109123
return arr;
110124
})(classMethods),
125+
directProps: {
126+
nameClickHandler: function () {
127+
self.openClassDoc(name, classMetaData["NAMESPACE"]);
128+
}
129+
},
111130
size: {
112131
width: 300,
113-
height: Math.max(attrArr.length*12.1, 15) + Math.max(methArr.length*12.1, 15) + 40
132+
height: Math.max(nameArr.length*12.1, 0) + Math.max(attrArr.length*12.1, 0)
133+
+ Math.max(methArr.length*12.1, 0) + 30
114134
}
115135
});
116136

@@ -194,6 +214,7 @@ ClassView.prototype.loadClass = function (className) {
194214

195215
var self = this;
196216

217+
this.cacheUMLExplorer.classTree.SELECTED_CLASS_NAME = className;
197218
this.showLoader();
198219
this.cacheUMLExplorer.source.getClassView(className, function (err, data) {
199220
//console.log(data);
@@ -215,6 +236,7 @@ ClassView.prototype.loadPackage = function (packageName) {
215236

216237
var self = this;
217238

239+
this.cacheUMLExplorer.classTree.SELECTED_CLASS_NAME = packageName;
218240
this.showLoader();
219241
this.cacheUMLExplorer.source.getPackageView(packageName, function (err, data) {
220242
//console.log(data);

web/jsLib/joint.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17222,6 +17222,9 @@ if ( typeof window === "object" && typeof window.document === "object" ) {
1722217222
tspan.node.style[j] = setup["STYLES"][j];
1722317223
}
1722417224
}
17225+
if (opt.clickHandler) {
17226+
tspan.node.onclick = opt.clickHandler;
17227+
}
1722517228
}
1722617229
// Make sure the textContent is never empty. If it is, add an additional
1722717230
// space (an invisible character) so that following lines are correctly
@@ -20943,7 +20946,7 @@ joint.dia.ElementView = joint.dia.CellView.extend({
2094320946

2094420947
$selected.each(function() {
2094520948

20946-
V(this).text(attrs.text + '', { lineHeight: attrs.lineHeight, textPath: attrs.textPath });
20949+
V(this).text(attrs.text + '', attrs);
2094720950
});
2094820951
specialAttributes.push('lineHeight','textPath');
2094920952
}

web/jsLib/joint.shapes.uml.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,8 @@ joint.shapes.uml.Class = joint.shapes.basic.Generic.extend({
8282

8383
updateRectangles: function() {
8484

85-
var attrs = this.get('attrs');
85+
var attrs = this.get('attrs'),
86+
self = this;
8687

8788
var rects = [
8889
{ type: 'name', text: this.getClassName() },
@@ -92,15 +93,20 @@ joint.shapes.uml.Class = joint.shapes.basic.Generic.extend({
9293

9394
var offsetY = 0;
9495

96+
var dp = self.get("directProps") || {},
97+
nameClickHandler = dp.nameClickHandler;
98+
9599
_.each(rects, function(rect) {
96100

97101
var lines = _.isArray(rect.text) ? rect.text : [rect.text];
98102
var rectHeight = lines.length * 20 + 20;
99103

100104
attrs['.uml-class-' + rect.type + '-text'].text = lines.join('\n');
105+
if (nameClickHandler) {
106+
if (rect.type === "name") attrs['.uml-class-' + rect.type + '-text'].clickHandler = nameClickHandler;
107+
}
101108
attrs['.uml-class-' + rect.type + '-rect'].height = rectHeight;
102109
attrs['.uml-class-' + rect.type + '-rect'].transform = 'translate(0,'+ offsetY + ')';
103-
104110
offsetY += rectHeight;
105111

106112
});

0 commit comments

Comments
 (0)