efront 3.19.1 → 3.20.1
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/coms/basic/cross_.js +35 -8
- package/coms/basic/submit_.js +40 -0
- package/coms/basic/valid.js +8 -0
- package/coms/crypt/encode62.js +12 -6
- package/coms/zimoli/encode62.js +12 -6
- package/coms/zimoli/field.js +2 -0
- package/coms/zimoli/submit.js +6 -39
- package/package.json +1 -1
- package/public/efront.js +1 -1
package/coms/basic/cross_.js
CHANGED
|
@@ -6,10 +6,12 @@ function isFile(a) {
|
|
|
6
6
|
}
|
|
7
7
|
}
|
|
8
8
|
var base = null, location_href = null;
|
|
9
|
+
var encrypt = null;
|
|
9
10
|
// ///// 1 ////////// 2 /////// 3 //// 4 //
|
|
10
11
|
var domainReg = /^(?:(https?)\:)?\/\/(.*?)(?:\/(.*?))?([\?#].*)?$/i;
|
|
11
12
|
var setHost = function (host) {
|
|
12
13
|
base = host;
|
|
14
|
+
if (encrypt) encrypt = getCode.call(this);
|
|
13
15
|
};
|
|
14
16
|
var HeadersKeys = ["Content-Type"];
|
|
15
17
|
var cors_hosts = [];
|
|
@@ -26,7 +28,7 @@ function isChildPath(relative, path) {
|
|
|
26
28
|
return relative.replace(/^(.*\/)[^\/]*$/, path);
|
|
27
29
|
}
|
|
28
30
|
|
|
29
|
-
var getCrossUrl = function (domain, headers) {
|
|
31
|
+
var getCrossUrl = function (domain, headers, encrypt) {
|
|
30
32
|
if (notCross(domain)) return domain;
|
|
31
33
|
var originDomain = getDomainPath(domain);
|
|
32
34
|
var _cookies = getCookies(originDomain);
|
|
@@ -37,9 +39,14 @@ var getCrossUrl = function (domain, headers) {
|
|
|
37
39
|
extend(_headers, headers);
|
|
38
40
|
_headers = serialize(_headers);
|
|
39
41
|
if (_headers) _headers = "," + _headers;
|
|
40
|
-
|
|
42
|
+
var b = encrypt ? "!" : `*`;
|
|
43
|
+
var ishttps = /^(https\:|s\/\/)/i.test(domain);
|
|
44
|
+
domain = domain
|
|
41
45
|
.replace(/^(s?)(\/\/)/i, "http$1:$2")
|
|
42
|
-
.replace(domainReg,
|
|
46
|
+
.replace(domainReg, `$2${_headers}/$3$4`)
|
|
47
|
+
if (ishttps) domain = b + domain;
|
|
48
|
+
if (encrypt) domain = encode62.timeencode(domain);
|
|
49
|
+
return base + b + domain;
|
|
43
50
|
};
|
|
44
51
|
function noop() { }
|
|
45
52
|
function toResponse() {
|
|
@@ -113,7 +120,7 @@ function cross_(jsonp, digest = noop, method, url, headers) {
|
|
|
113
120
|
}
|
|
114
121
|
else {
|
|
115
122
|
var nocross = notCross(url);
|
|
116
|
-
var callback = function () {
|
|
123
|
+
var callback = async function () {
|
|
117
124
|
var exposeHeaders = !nocross && xhr.getResponseHeader("access-control-expose-headers");
|
|
118
125
|
var exposeMap = {};
|
|
119
126
|
if (exposeHeaders) exposeHeaders.split(",").forEach(h => exposeMap[h.toLowerCase()] = true);
|
|
@@ -124,6 +131,13 @@ function cross_(jsonp, digest = noop, method, url, headers) {
|
|
|
124
131
|
addCookie(cookie, originDomain);
|
|
125
132
|
}
|
|
126
133
|
}
|
|
134
|
+
if (isencrypt && xhr.response) {
|
|
135
|
+
xhr = {
|
|
136
|
+
status: xhr.status,
|
|
137
|
+
response: encode62.safedecode(xhr.response || xhr.responseText, xhr.encrypt),
|
|
138
|
+
};
|
|
139
|
+
xhr.responseText = xhr.response;
|
|
140
|
+
};
|
|
127
141
|
switch (xhr.status) {
|
|
128
142
|
case 0:
|
|
129
143
|
if (!xhr.response) {
|
|
@@ -167,6 +181,10 @@ function cross_(jsonp, digest = noop, method, url, headers) {
|
|
|
167
181
|
var xhr = cross(callback, onerror);
|
|
168
182
|
var send = xhr.send;
|
|
169
183
|
xhr.toString = toResponse;
|
|
184
|
+
var isencrypt = /^[夏商周秦xszq]/i.test(method);
|
|
185
|
+
if (isencrypt) method = method.slice(1);
|
|
186
|
+
if (isencrypt && !encrypt) encrypt = cross.getCode();
|
|
187
|
+
xhr.encrypt = encrypt;
|
|
170
188
|
xhr.json = xhr.data = xhr.send = function (data, value) {
|
|
171
189
|
if (!jsondata && !(isEmpty(data) && isEmpty(value))) jsondata = data instanceof Array ? [] : {};
|
|
172
190
|
if (FormData && data instanceof FormData) {
|
|
@@ -202,8 +220,9 @@ function cross_(jsonp, digest = noop, method, url, headers) {
|
|
|
202
220
|
datas = serialize(jsondata, "&", "=");
|
|
203
221
|
}
|
|
204
222
|
};
|
|
205
|
-
|
|
206
|
-
|
|
223
|
+
var fire = async function () {
|
|
224
|
+
var code = await xhr.encrypt;
|
|
225
|
+
xhr.encrypt = code;
|
|
207
226
|
var isform = /^f/i.test(method);
|
|
208
227
|
if (isform) {
|
|
209
228
|
if (method === 'form') method = 'post';
|
|
@@ -236,12 +255,12 @@ function cross_(jsonp, digest = noop, method, url, headers) {
|
|
|
236
255
|
extend(realHeaders, _headers);
|
|
237
256
|
xhr.open(method, url);
|
|
238
257
|
} else {
|
|
239
|
-
xhr.open(method, getCrossUrl(url, _headers));
|
|
258
|
+
xhr.open(method, getCrossUrl(url, _headers, isencrypt));
|
|
240
259
|
}
|
|
241
260
|
if (is_gb2312) xhr.overrideMimeType("text/plain; charset=gb2312");
|
|
242
261
|
|
|
243
262
|
Object.keys(realHeaders).forEach(key => setRequestHeader.call(xhr, key, realHeaders[key]));
|
|
244
|
-
if (!isEmpty(datas)) send.call(xhr, datas);
|
|
263
|
+
if (!isEmpty(datas)) send.call(xhr, nocross || !isencrypt ? datas : encode62.safeencode(datas, code));
|
|
245
264
|
else send.call(xhr);
|
|
246
265
|
digest();
|
|
247
266
|
};
|
|
@@ -323,9 +342,17 @@ function reform(r, info, fire, cancel, e) {
|
|
|
323
342
|
function addReform(r) {
|
|
324
343
|
if (isFunction(r)) reforms.push(r);
|
|
325
344
|
}
|
|
345
|
+
function getCode() {
|
|
346
|
+
return new Promise((ok, oh) => {
|
|
347
|
+
this('get', base + "!").then((xhr) => { return ok(encode62.timedecode(xhr.response || xhr.responseText)) }, () => {
|
|
348
|
+
return oh('未连接到可加密的服务器!');
|
|
349
|
+
});
|
|
350
|
+
});
|
|
351
|
+
}
|
|
326
352
|
var bind = cross_.bind;
|
|
327
353
|
cross_.bind = function () {
|
|
328
354
|
var cross_ = bind.apply(this, arguments);
|
|
355
|
+
arguments[0].getCode = getCode.bind(cross_);
|
|
329
356
|
extend(cross_, {
|
|
330
357
|
requests,
|
|
331
358
|
abortAll() {
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
function submit(fields, data) {
|
|
2
|
+
var params = {};
|
|
3
|
+
var inputs = [];
|
|
4
|
+
var select = [];
|
|
5
|
+
var checks = [];
|
|
6
|
+
var id = 0;
|
|
7
|
+
for (var f of fields) {
|
|
8
|
+
var error = valid(f, data);
|
|
9
|
+
if (error === "empty") {
|
|
10
|
+
if (f.options instanceof Array || /date|time|range|switch|swap|radio/i.test(f.type)) {
|
|
11
|
+
if (!select.id) select.id = ++id;
|
|
12
|
+
select.push(f);
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
if (!inputs.id) inputs.id = ++id;
|
|
16
|
+
inputs.push(f);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
else if (error) {
|
|
20
|
+
checks.push(f);
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
params[f.key] = data[f.key];
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (checks.length + select.length + inputs.length) {
|
|
27
|
+
var errors = [];
|
|
28
|
+
if (inputs.length) errors.push("请输入" + inputs.map(f => f.name).join("、"));
|
|
29
|
+
if (select.length) errors.push("请选择" + select.map(f => f.name).join("、"));
|
|
30
|
+
if (select.id < inputs.id) {
|
|
31
|
+
errors = errors.reverse();
|
|
32
|
+
}
|
|
33
|
+
if (checks.length) {
|
|
34
|
+
errors.push(checks.map(f => f.name).join("、") + "格式错误");
|
|
35
|
+
}
|
|
36
|
+
errors = errors.join(",") + "!";
|
|
37
|
+
throw errors;
|
|
38
|
+
}
|
|
39
|
+
return params;
|
|
40
|
+
}
|
package/coms/basic/valid.js
CHANGED
|
@@ -6,5 +6,13 @@ function valid(field, data) {
|
|
|
6
6
|
}
|
|
7
7
|
return;
|
|
8
8
|
}
|
|
9
|
+
if (field.valid instanceof Function) {
|
|
10
|
+
var e = field.valid(data[field.key]);
|
|
11
|
+
if (e) return e;
|
|
12
|
+
}
|
|
13
|
+
if (field.options instanceof Function) {
|
|
14
|
+
var e = field.options(data[field.key]);
|
|
15
|
+
if (e) return e;
|
|
16
|
+
}
|
|
9
17
|
return error;
|
|
10
18
|
}
|
package/coms/crypt/encode62.js
CHANGED
|
@@ -28,13 +28,20 @@ Object.assign(encode62, {
|
|
|
28
28
|
src,
|
|
29
29
|
map,
|
|
30
30
|
time_delta: parseInt("zzzzz", 36),
|
|
31
|
+
safeencode(string, sign, offset) {
|
|
32
|
+
string = encodeURIComponent(string).replace(/\./g, '..').replace(/[\!'\(\)~]/g, a => escape(a)).replace(/%/g, '.');
|
|
33
|
+
return this.encode62(string, sign, offset);
|
|
34
|
+
},
|
|
35
|
+
safedecode(string, sign, offset) {
|
|
36
|
+
string = this.decode62(string, sign, offset).replace(/\.\.?/g, a => a === '.' ? "%" : ".");
|
|
37
|
+
return decodeURIComponent(string);
|
|
38
|
+
},
|
|
31
39
|
timedecode(string) {
|
|
32
40
|
var { time_delta } = this;
|
|
33
41
|
var time_rest = string.slice(string.length - time_delta.toString(36).length, string.length);
|
|
34
42
|
var time_start = parseInt((new Date() - parseInt(time_rest, 36)) / time_delta) * time_delta;
|
|
35
43
|
var time_stamp = time_start + parseInt(time_rest, 36);
|
|
36
|
-
|
|
37
|
-
return decodeURIComponent(string);
|
|
44
|
+
return this.safedecode(string.slice(0, string.length - time_delta.toString(36).length), time_stamp.toString(36));
|
|
38
45
|
},
|
|
39
46
|
timeencode(string) {
|
|
40
47
|
var { time_delta } = this;
|
|
@@ -43,8 +50,7 @@ Object.assign(encode62, {
|
|
|
43
50
|
var time_rest = time_stamp % time_delta;
|
|
44
51
|
var time_rest_str = time_rest.toString(36);
|
|
45
52
|
var time_delta_str = time_delta.toString(36);
|
|
46
|
-
|
|
47
|
-
return this.encode62(string, time_stamp.toString(36)) + repeat("0", time_delta_str.length - time_rest_str.length) + time_rest_str;
|
|
53
|
+
return this.safeencode(string, time_stamp.toString(36)) + repeat("0", time_delta_str.length - time_rest_str.length) + time_rest_str;
|
|
48
54
|
},
|
|
49
55
|
timeupdate(string) {
|
|
50
56
|
var { time_delta } = this;
|
|
@@ -57,7 +63,7 @@ Object.assign(encode62, {
|
|
|
57
63
|
return this.timeencode(this.timedecode(string));
|
|
58
64
|
}
|
|
59
65
|
},
|
|
60
|
-
encode62(data, sign) {
|
|
66
|
+
encode62(data, sign, offset = 0) {
|
|
61
67
|
if (!sign) return data;
|
|
62
68
|
var result = String(data);
|
|
63
69
|
sign = String(sign);
|
|
@@ -65,7 +71,7 @@ Object.assign(encode62, {
|
|
|
65
71
|
var result = result.replace(/\w/g, function (w, cx) {
|
|
66
72
|
var code = map[w];
|
|
67
73
|
if (typeof code !== "number") return w;
|
|
68
|
-
var s = code ^ (sign.charCodeAt(cx % sign.length) % src.length);
|
|
74
|
+
var s = code ^ (sign.charCodeAt((offset + cx) % sign.length) % src.length);
|
|
69
75
|
if (s >= src.length) return w;
|
|
70
76
|
return src[s];
|
|
71
77
|
});
|
package/coms/zimoli/encode62.js
CHANGED
|
@@ -18,13 +18,20 @@ var encode62 = {
|
|
|
18
18
|
}
|
|
19
19
|
return buff.join('');
|
|
20
20
|
},
|
|
21
|
+
safeencode(string, sign, offset) {
|
|
22
|
+
string = encodeURIComponent(string).replace(/\./g, '..').replace(/[\!'\(\)~]/g, a => escape(a)).replace(/%/g, '.');
|
|
23
|
+
return this.encode(string, sign, offset);
|
|
24
|
+
},
|
|
25
|
+
safedecode(string, sign, offset) {
|
|
26
|
+
string = this.encode(string, sign, offset).replace(/\.\.?/g, a => a === '.' ? "%" : ".");
|
|
27
|
+
return decodeURIComponent(string);
|
|
28
|
+
},
|
|
21
29
|
timedecode(string) {
|
|
22
30
|
var { time_delta } = this;
|
|
23
31
|
var time_rest = string.slice(string.length - time_delta.toString(36).length, string.length);
|
|
24
32
|
var time_start = parseInt((new Date() - parseInt(time_rest, 36)) / time_delta) * time_delta;
|
|
25
33
|
var time_stamp = time_start + parseInt(time_rest, 36);
|
|
26
|
-
|
|
27
|
-
return decodeURIComponent(string);
|
|
34
|
+
return this.safedecode(string.slice(0, string.length - time_delta.toString(36).length), time_stamp.toString(36));
|
|
28
35
|
},
|
|
29
36
|
timeencode(string) {
|
|
30
37
|
var { time_delta } = this;
|
|
@@ -35,8 +42,7 @@ var encode62 = {
|
|
|
35
42
|
var time_rest = time_stamp % time_delta;
|
|
36
43
|
var time_rest_str = time_rest.toString(36);
|
|
37
44
|
var time_delta_str = time_delta.toString(36);
|
|
38
|
-
|
|
39
|
-
return this.encode(string, time_stamp.toString(36)) + repeat("0", time_delta_str.length - time_rest_str.length) + time_rest_str;
|
|
45
|
+
return this.safeencode(string, time_stamp.toString(36)) + repeat("0", time_delta_str.length - time_rest_str.length) + time_rest_str;
|
|
40
46
|
},
|
|
41
47
|
timeupdate(string) {
|
|
42
48
|
var { time_delta } = this;
|
|
@@ -50,7 +56,7 @@ var encode62 = {
|
|
|
50
56
|
return this.timeencode(this.timedecode(string));
|
|
51
57
|
}
|
|
52
58
|
},
|
|
53
|
-
encode(data, sign) {
|
|
59
|
+
encode(data, sign, offset = 0) {
|
|
54
60
|
if (!sign) return data;
|
|
55
61
|
var result = String(data);
|
|
56
62
|
sign = String(sign);
|
|
@@ -58,7 +64,7 @@ var encode62 = {
|
|
|
58
64
|
var result = result.replace(/\w/g, function (w, cx) {
|
|
59
65
|
var code = map[w];
|
|
60
66
|
if (!isNumber(code)) return w;
|
|
61
|
-
var s = code ^ (sign.charCodeAt(cx % sign.length) % src.length);
|
|
67
|
+
var s = code ^ (sign.charCodeAt((offset + cx) % sign.length) % src.length);
|
|
62
68
|
if (s >= src.length) return w;
|
|
63
69
|
return src[s];
|
|
64
70
|
});
|
package/coms/zimoli/field.js
CHANGED
package/coms/zimoli/submit.js
CHANGED
|
@@ -1,41 +1,8 @@
|
|
|
1
|
-
function submit(
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
for (var f of fields) {
|
|
8
|
-
var error = valid(f, data);
|
|
9
|
-
if (error === "empty") {
|
|
10
|
-
if (f.options || /date|time|range|switch|swap|radio/i.test(f.type)) {
|
|
11
|
-
if (!select.id) select.id = ++id;
|
|
12
|
-
select.push(f);
|
|
13
|
-
}
|
|
14
|
-
else {
|
|
15
|
-
if (!inputs.id) inputs.id = ++id;
|
|
16
|
-
inputs.push(f);
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
else if (error) {
|
|
20
|
-
checks.push(f);
|
|
21
|
-
}
|
|
22
|
-
else {
|
|
23
|
-
params[f.key] = data[f.key];
|
|
24
|
-
}
|
|
1
|
+
function submit() {
|
|
2
|
+
try {
|
|
3
|
+
return submit_.apply(this, arguments);
|
|
4
|
+
} catch (e) {
|
|
5
|
+
alert(String(e), 'warn');
|
|
6
|
+
throw e;
|
|
25
7
|
}
|
|
26
|
-
if (checks.length + select.length + inputs.length) {
|
|
27
|
-
var errors = [];
|
|
28
|
-
if (inputs.length) errors.push("请输入" + inputs.map(f => f.name).join("、"));
|
|
29
|
-
if (select.length) errors.push("请选择" + select.map(f => f.name).join("、"));
|
|
30
|
-
if (select.id < inputs.id) {
|
|
31
|
-
errors = errors.reverse();
|
|
32
|
-
}
|
|
33
|
-
if (checks.length) {
|
|
34
|
-
errors.push(checks.map(f => f.name).join("、") + "格式错误");
|
|
35
|
-
}
|
|
36
|
-
errors = errors.join(",") + "!";
|
|
37
|
-
alert(errors, 'error');
|
|
38
|
-
throw new Error(errors);
|
|
39
|
-
}
|
|
40
|
-
return params;
|
|
41
8
|
}
|