sdc_client 0.58.5 → 0.158.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/node.js.yml +2 -2
- package/.idea/inspectionProfiles/Project_Default.xml +17 -0
- package/.idea/workspace.xml +122 -23
- package/.readthedocs.yaml +13 -0
- package/dist/index.js +70 -51
- package/dist/ugly.index.js +1 -1
- package/docs/api-reference.rst +225 -0
- package/docs/conf.py +11 -0
- package/docs/controllers.rst +228 -0
- package/docs/events-and-dom.rst +120 -0
- package/docs/getting-started.rst +143 -0
- package/docs/index.rst +22 -0
- package/docs/models.rst +351 -0
- package/docs/overview.rst +66 -0
- package/docs/requirements.txt +1 -0
- package/eslint.config.js +60 -0
- package/gulp/gulp.jsx +15 -13
- package/package.json +13 -3
- package/src/index.js +44 -11
- package/src/simpleDomControl/AbstractSDC.js +287 -286
- package/src/simpleDomControl/sdc_controller.js +157 -132
- package/src/simpleDomControl/sdc_dom_events.js +99 -88
- package/src/simpleDomControl/sdc_events.js +39 -40
- package/src/simpleDomControl/sdc_main.js +88 -67
- package/src/simpleDomControl/sdc_model.js +1510 -0
- package/src/simpleDomControl/sdc_params.js +44 -29
- package/src/simpleDomControl/sdc_server_call.js +153 -154
- package/src/simpleDomControl/sdc_socket.js +8 -821
- package/src/simpleDomControl/sdc_test_utils.js +77 -80
- package/src/simpleDomControl/sdc_utils.js +295 -176
- package/src/simpleDomControl/sdc_view.js +245 -177
- package/test/model.test.js +332 -0
- package/test/models/Author.js +145 -0
- package/test/models/Book.js +112 -0
- package/test/models/BookContent.js +114 -0
- package/test/models/SdcUser.js +75 -0
- package/test/models/src.js +8 -0
- package/test/sdc_model_dates.ai.test.js +57 -0
- package/test/sdc_server_call.ai.test.js +267 -0
|
@@ -1,26 +1,34 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import {
|
|
2
|
+
getParamsNameOfFunction,
|
|
3
|
+
checkIfParamNumberBoolOrString,
|
|
4
|
+
} from "./sdc_utils.js";
|
|
5
|
+
import { DATA_CONTROLLER_KEY } from "./sdc_view.js";
|
|
4
6
|
|
|
5
7
|
export function prepareData(data, paramNameList = []) {
|
|
6
|
-
const data_json_key =
|
|
8
|
+
const data_json_key = "SDC_JSON_MODEL=[";
|
|
7
9
|
return Object.fromEntries(
|
|
8
|
-
Object.entries(data)
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
10
|
+
Object.entries(data)
|
|
11
|
+
.filter(([key, element]) => {
|
|
12
|
+
return key !== DATA_CONTROLLER_KEY && !paramNameList.includes(key);
|
|
13
|
+
})
|
|
14
|
+
.map(([key, element]) => {
|
|
15
|
+
if (typeof element === "string" && element.startsWith(data_json_key)) {
|
|
16
|
+
try {
|
|
17
|
+
const { pk, fields } = JSON.parse(
|
|
18
|
+
element.slice(data_json_key.length, -1),
|
|
19
|
+
);
|
|
20
|
+
return [
|
|
21
|
+
key,
|
|
22
|
+
{
|
|
23
|
+
...fields,
|
|
24
|
+
id: pk,
|
|
25
|
+
pk,
|
|
26
|
+
},
|
|
27
|
+
];
|
|
28
|
+
} catch {}
|
|
20
29
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
})
|
|
30
|
+
return [key, element];
|
|
31
|
+
}),
|
|
24
32
|
);
|
|
25
33
|
}
|
|
26
34
|
|
|
@@ -40,11 +48,11 @@ function getParamList(paramNameList, $element) {
|
|
|
40
48
|
if (data.hasOwnProperty(data_name)) {
|
|
41
49
|
returnList.push(data[data_name]);
|
|
42
50
|
} else {
|
|
43
|
-
returnList.push(
|
|
51
|
+
returnList.push("undefined");
|
|
44
52
|
}
|
|
45
53
|
}
|
|
46
54
|
|
|
47
|
-
returnList.push(restData)
|
|
55
|
+
returnList.push(restData);
|
|
48
56
|
return returnList;
|
|
49
57
|
}
|
|
50
58
|
|
|
@@ -73,23 +81,30 @@ function getDomTagParamsWithList(paramNameList, $element, controller = null) {
|
|
|
73
81
|
*/
|
|
74
82
|
function reg_runOnInitWithParameter(controller, $element, applyController) {
|
|
75
83
|
if (!controller) {
|
|
76
|
-
return false
|
|
77
|
-
} else if (typeof controller.onInit !==
|
|
78
|
-
return false
|
|
84
|
+
return false;
|
|
85
|
+
} else if (typeof controller.onInit !== "function") {
|
|
86
|
+
return false;
|
|
79
87
|
}
|
|
80
88
|
let paramNameList;
|
|
81
|
-
if (typeof controller._on_init_params ===
|
|
89
|
+
if (typeof controller._on_init_params === "function") {
|
|
82
90
|
paramNameList = controller._on_init_params();
|
|
83
91
|
} else {
|
|
84
92
|
paramNameList = getParamsNameOfFunction(controller.onInit);
|
|
85
93
|
}
|
|
86
94
|
|
|
87
|
-
|
|
88
|
-
|
|
95
|
+
let initParams = getDomTagParamsWithList(
|
|
96
|
+
paramNameList,
|
|
97
|
+
$element,
|
|
98
|
+
applyController._parentController,
|
|
99
|
+
);
|
|
89
100
|
controller.onInit.apply(applyController, initParams);
|
|
90
101
|
if (applyController === controller) {
|
|
91
102
|
for (let mixinKey in controller._mixins) {
|
|
92
|
-
reg_runOnInitWithParameter(
|
|
103
|
+
reg_runOnInitWithParameter(
|
|
104
|
+
controller._mixins[mixinKey],
|
|
105
|
+
$element,
|
|
106
|
+
applyController,
|
|
107
|
+
);
|
|
93
108
|
}
|
|
94
109
|
}
|
|
95
110
|
}
|
|
@@ -100,4 +115,4 @@ export function runOnInitWithParameter($element, controller) {
|
|
|
100
115
|
|
|
101
116
|
export function getUrlParam(controller, $element) {
|
|
102
117
|
return getDomTagParamsWithList(controller._urlParams, $element);
|
|
103
|
-
}
|
|
118
|
+
}
|
|
@@ -1,187 +1,186 @@
|
|
|
1
|
-
import {uuidv4} from "./sdc_utils.js";
|
|
2
|
-
import {trigger} from "./sdc_events.js";
|
|
1
|
+
import { uuidv4 } from "./sdc_utils.js";
|
|
2
|
+
import { trigger } from "./sdc_events.js";
|
|
3
3
|
|
|
4
4
|
let IS_CONNECTED = false;
|
|
5
5
|
let IS_CONNECTING = false;
|
|
6
|
-
let SDC_SOCKET = null
|
|
6
|
+
let SDC_SOCKET = null;
|
|
7
7
|
let OPEN_REQUESTS = {};
|
|
8
8
|
|
|
9
9
|
export function callServer(app, controller, parsedContentUrl, funcName, args) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
10
|
+
if (window.SERVER_CALL_VIA_WEB_SOCKET) {
|
|
11
|
+
return socketCallServer(app, controller, funcName, args);
|
|
12
|
+
} else {
|
|
13
|
+
return postCallServer(parsedContentUrl, funcName, args);
|
|
14
|
+
}
|
|
16
15
|
}
|
|
17
16
|
|
|
18
17
|
export function isConnected() {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
18
|
+
if (window.SERVER_CALL_VIA_WEB_SOCKET) {
|
|
19
|
+
return socketIsConnected();
|
|
20
|
+
} else {
|
|
21
|
+
return Promise.resolve(true);
|
|
22
|
+
}
|
|
24
23
|
}
|
|
25
24
|
|
|
26
25
|
export function close() {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
if (window.SERVER_CALL_VIA_WEB_SOCKET) {
|
|
27
|
+
socketClose();
|
|
28
|
+
}
|
|
30
29
|
}
|
|
31
30
|
|
|
32
31
|
function postCallServer(parsedContentUrl, funcName, args) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
32
|
+
if (typeof args !== "object" && Array.isArray(args) && args === null) {
|
|
33
|
+
args = { arg0: args };
|
|
34
|
+
}
|
|
35
|
+
args = {
|
|
36
|
+
data: JSON.stringify(args),
|
|
37
|
+
_sdc_func_name: funcName,
|
|
38
|
+
_method: "sdc_server_call",
|
|
39
|
+
};
|
|
40
|
+
return $.post({
|
|
41
|
+
url: parsedContentUrl,
|
|
42
|
+
data: args,
|
|
43
|
+
beforeSend: function (xhr, settings) {
|
|
44
|
+
xhr.setRequestHeader("X-CSRFToken", window.CSRF_TOKEN);
|
|
45
|
+
},
|
|
46
|
+
})
|
|
47
|
+
.then((res) => {
|
|
48
|
+
const data = res["_return_data"];
|
|
49
|
+
_handle_response(data);
|
|
50
|
+
return data;
|
|
51
|
+
})
|
|
52
|
+
.catch((res) => {
|
|
53
|
+
const data = res.responseJSON;
|
|
54
|
+
data.is_error = true;
|
|
55
|
+
_handle_response(data);
|
|
56
|
+
throw res;
|
|
55
57
|
});
|
|
56
58
|
}
|
|
57
59
|
|
|
58
60
|
function socketCallServer(app, controller, funcName, args) {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
61
|
+
let id = uuidv4();
|
|
62
|
+
isConnected().then(() => {
|
|
63
|
+
SDC_SOCKET.send(
|
|
64
|
+
JSON.stringify({
|
|
65
|
+
event: "sdc_call",
|
|
66
|
+
id: id,
|
|
67
|
+
controller: controller,
|
|
68
|
+
app: app,
|
|
69
|
+
function: funcName,
|
|
70
|
+
args: args,
|
|
71
|
+
}),
|
|
72
|
+
);
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
return new Promise((resolve, reject) => {
|
|
76
|
+
OPEN_REQUESTS[id] = [resolve, reject];
|
|
77
|
+
});
|
|
75
78
|
}
|
|
76
79
|
|
|
77
80
|
function _connect() {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
}
|
|
81
|
+
IS_CONNECTING = true;
|
|
82
|
+
return new Promise((resolve) => {
|
|
83
|
+
if (window.location.protocol === "https:") {
|
|
84
|
+
SDC_SOCKET = new WebSocket(`wss://${window.location.host}/sdc_ws/ws/`);
|
|
85
|
+
} else {
|
|
86
|
+
SDC_SOCKET = new WebSocket(`ws://${window.location.host}/sdc_ws/ws/`);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
SDC_SOCKET.onmessage = function (e) {
|
|
90
|
+
let data = JSON.parse(e.data);
|
|
91
|
+
_handle_response(data);
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
SDC_SOCKET.onclose = function () {
|
|
95
|
+
if (IS_CONNECTED) {
|
|
96
|
+
console.error("SDC Socket closed unexpectedly");
|
|
97
|
+
}
|
|
98
|
+
IS_CONNECTED = false;
|
|
99
|
+
for (const [key, value] of Object.entries(OPEN_REQUESTS)) {
|
|
100
|
+
value[1]({});
|
|
101
|
+
delete OPEN_REQUESTS[key];
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
setTimeout(() => {
|
|
105
|
+
_connect();
|
|
106
|
+
}, 1000);
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
SDC_SOCKET.onerror = function (err) {
|
|
110
|
+
console.error(
|
|
111
|
+
"Socket encountered error: ",
|
|
112
|
+
err.message,
|
|
113
|
+
"Closing socket",
|
|
114
|
+
);
|
|
115
|
+
if (IS_CONNECTED) {
|
|
116
|
+
try {
|
|
117
|
+
SDC_SOCKET.close();
|
|
118
|
+
} catch (e) {}
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
SDC_SOCKET.onopen = function () {
|
|
123
|
+
IS_CONNECTED = true;
|
|
124
|
+
IS_CONNECTING = false;
|
|
125
|
+
resolve();
|
|
126
|
+
};
|
|
127
|
+
});
|
|
124
128
|
}
|
|
125
129
|
|
|
126
130
|
function _handle_response(data) {
|
|
127
|
-
|
|
128
|
-
|
|
131
|
+
if (!data) {
|
|
132
|
+
data = {};
|
|
133
|
+
}
|
|
134
|
+
if (data.is_error) {
|
|
135
|
+
if (data.msg || data.header) {
|
|
136
|
+
trigger("pushErrorMsg", data.header || "", data.msg || "");
|
|
129
137
|
}
|
|
130
|
-
if (data.
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
trigger(event, data.payload);
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
} else if (data.type && data.type === 'sdc_redirect') {
|
|
155
|
-
trigger('onNavLink', data.link);
|
|
156
|
-
}
|
|
138
|
+
if (data.id && OPEN_REQUESTS[data.id]) {
|
|
139
|
+
OPEN_REQUESTS[data.id][1](data.data || null);
|
|
140
|
+
delete OPEN_REQUESTS[data.id];
|
|
141
|
+
}
|
|
142
|
+
} else {
|
|
143
|
+
if (data.msg || data.header) {
|
|
144
|
+
trigger("pushMsg", data.header || "", data.msg || "");
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
if (data.type && data.type === "sdc_recall") {
|
|
148
|
+
if (data.id && OPEN_REQUESTS[data.id]) {
|
|
149
|
+
OPEN_REQUESTS[data.id][0](data.data);
|
|
150
|
+
delete OPEN_REQUESTS[data.id];
|
|
151
|
+
}
|
|
152
|
+
} else if (data.type && data.type === "sdc_event") {
|
|
153
|
+
let event = data.event;
|
|
154
|
+
if (event) {
|
|
155
|
+
trigger(event, data.payload);
|
|
156
|
+
}
|
|
157
|
+
} else if (data.type && data.type === "sdc_redirect") {
|
|
158
|
+
trigger("onNavLink", data.link);
|
|
157
159
|
}
|
|
160
|
+
}
|
|
158
161
|
}
|
|
159
162
|
|
|
160
163
|
function socketClose() {
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
}
|
|
164
|
+
if (IS_CONNECTED) {
|
|
165
|
+
IS_CONNECTED = false;
|
|
166
|
+
try {
|
|
167
|
+
SDC_SOCKET.close();
|
|
168
|
+
} catch (e) {}
|
|
169
|
+
}
|
|
170
170
|
}
|
|
171
171
|
|
|
172
172
|
function socketIsConnected() {
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
}
|
|
173
|
+
return new Promise((resolve) => {
|
|
174
|
+
if (IS_CONNECTED) {
|
|
175
|
+
return resolve();
|
|
176
|
+
} else if (IS_CONNECTING) {
|
|
177
|
+
setTimeout(() => {
|
|
178
|
+
isConnected().then(() => {
|
|
179
|
+
resolve();
|
|
180
|
+
});
|
|
181
|
+
}, 200);
|
|
182
|
+
} else {
|
|
183
|
+
return resolve(_connect());
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
}
|