Skip to content

Commit a6e7d54

Browse files
Class keywords basic editing, better error display, missed errors display
1 parent ef41c22 commit a6e7d54

File tree

5 files changed

+44
-18
lines changed

5 files changed

+44
-18
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "cache-visual-editor",
33
"printableName": "Cache Visual Editor",
44
"packageName": "VisualEditor",
5-
"version": "0.5.19",
5+
"version": "0.6.0",
66
"description": "Visual class editor for InterSystems Caché",
77
"main": "index.js",
88
"keywords": [

source/cache/REST/Editor.cls

Lines changed: 36 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,37 @@ XData UrlMap
77
{
88
<Routes>
99
<Route Url="/save" Method="POST" Call="Save"/>
10+
<Route Url="/test" Method="POST" Call="Test"/>
1011
</Routes>
1112
}
1213

14+
/// Saves keywords of class members and a class itself.
15+
ClassMethod SaveKeywords(memberKind As %String, definitionObj, assignObj As %ZEN.proxyObject) As %String [ Private ]
16+
{
17+
set errors = ""
18+
#define logError(%e) if (%e '= "") { set errors = errors _ %e _ $Char(10) }
19+
set propDefinition =
20+
##class(%Dictionary.ClassDefinition).%OpenId("%Dictionary."_memberKind_"Definition").Properties
21+
22+
set pName = $order(assignObj.%data(""))
23+
while (pName '= "") {
24+
if (pName = "$add") { set pName = $order(assignObj.%data(pName)) continue }
25+
if (propDefinition.FindObjectId("%Dictionary."_memberKind_"Definition||"_pName) > 0) {
26+
if (('$IsObject($PROPERTY(assignObj, pName)))) {
27+
set $PROPERTY(definitionObj, pName) = $PROPERTY(assignObj, pName)
28+
}
29+
} else {
30+
$$$logError("Unable to set """_pName_""" property of """_memberKind_""" in "_definitionObj.Name)
31+
}
32+
set pName = $order(assignObj.%data(pName))
33+
}
34+
$$$logError($System.Status.GetErrorText(definitionObj.%Save()))
35+
36+
return errors
37+
}
38+
1339
/// Saves properties of class properties.
14-
ClassMethod SaveClassMember(memberKind As %String, classDef As %Dictionary.ClassDefinition, prps As %ZEN.proxyObject) As %String
40+
ClassMethod SaveClassMember(memberKind As %String, classDef As %Dictionary.ClassDefinition, prps As %ZEN.proxyObject) As %String [ Private ]
1541
{
1642
set errors = ""
1743

@@ -24,8 +50,6 @@ ClassMethod SaveClassMember(memberKind As %String, classDef As %Dictionary.Class
2450
#define nextProperty set memberName = $order(properties(memberName)) continue
2551
#define logError(%e) if (%e '= "") { set errors = errors _ %e _ $Char(10) }
2652
#define hasErrors errors '= ""
27-
set propDefs =
28-
##class(%Dictionary.ClassDefinition).%OpenId("%Dictionary."_memberKind_"Definition").Properties
2953

3054
set memberName = $order(properties(""))
3155
while (memberName '= "") {
@@ -39,24 +63,14 @@ ClassMethod SaveClassMember(memberKind As %String, classDef As %Dictionary.Class
3963
set pDef = $System.OBJ.OpenId("%Dictionary."_memberKind_"Definition", classDef.Name_"||"_memberName)
4064
}
4165
if (pDef = "") {
42-
$$$logError(memberKind_" "_memberName_" not found in "_className)
66+
$$$logError("Member """_memberKind_""" named """_memberName_""" not found in "_classDef.Name)
4367
$$$nextProperty
4468
}
4569

4670
if ($data(props.%data("$delete"))) {
4771
set error = $System.Status.GetErrorText(pDef.%Delete(pDef.%Oid()))
4872
} else { // iterate over properties defined in props and save
49-
set pName = $order(props.%data(""))
50-
while (pName '= "") {
51-
if (pName = "$add") { set pName = $order(props.%data(pName)) continue }
52-
if (propDefs.FindObjectId("%Dictionary."_memberKind_"Definition||"_pName) > 0) {
53-
set $PROPERTY(pDef, pName) = $PROPERTY(props, pName)
54-
} else {
55-
$$$logError("Unable to set """_pName_""" property of """_memberName_""" in class "_classDef.Name)
56-
}
57-
set pName = $order(props.%data(pName))
58-
}
59-
$$$logError($System.Status.GetErrorText(pDef.%Save()))
73+
do ..SaveKeywords(memberKind, pDef, props)
6074
}
6175

6276
$$$nextProperty
@@ -118,6 +132,7 @@ ClassMethod Save() As %Status
118132
$$$logError(..SaveClassMember("Method", classDef, $PROPERTY(classData, "Methods")))
119133
$$$logError(..SaveClassMember("Query", classDef, $PROPERTY(classData, "Queries")))
120134
$$$logError(..SaveClassMember("XData", classDef, $PROPERTY(classData, "XDatas")))
135+
$$$logError(..SaveKeywords("Class", classDef, classData))
121136

122137
if ($$$hasErrors) { $$$nextClass }
123138

@@ -139,6 +154,12 @@ ClassMethod Save() As %Status
139154

140155
}
141156

157+
ClassMethod Test() As %Status
158+
{
159+
write %request.Content
160+
return $$$OK
161+
}
162+
142163
/// This method is a handler that is executed before each request.
143164
ClassMethod OnPreDispatch() As %Status
144165
{

source/client/js/classEditor/class/MANIFEST.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,10 @@ export default {
136136
default: 0,
137137
type: "boolean"
138138
},
139+
Super: {
140+
type: "string",
141+
default: ""
142+
},
139143
TimeChanged: {
140144
ignore: true
141145
},

source/client/js/classEditor/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ let backButton = onInit(() => {
6161
changeIsMade(false);
6262
new Toast(Toast.TYPE_DONE, `Saved!`);
6363
} else {
64-
new Toast(Toast.TYPE_ERROR, res["error"]);
64+
new Toast(Toast.TYPE_ERROR, res["error"], Toast.TIME_LONG);
6565
}
6666
});
6767
});

source/client/js/server.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,11 @@ function load (url, data, callback) {
1515

1616
xhr.onreadystatechange = () => {
1717
if (xhr.readyState === 4 && xhr.status === 200) {
18-
let data = {};
18+
let data = { error: `Unable to parse server response: ` };
1919
try {
2020
data = JSON.parse(xhr.responseText);
2121
} catch (e) {
22+
data.error += xhr.responseText;
2223
console.error(e, url, "Unable to parse:", { data: xhr.responseText });
2324
}
2425
return callback(data);

0 commit comments

Comments
 (0)