efront 3.20.16 → 3.21.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/JSAM.js +2 -2
- package/coms/basic/cookie.js +22 -0
- package/coms/basic/cross_.js +4 -0
- package/coms/zimoli/chooseFile.js +16 -3
- package/coms/zimoli/cross.js +2 -2
- package/coms/zimoli/input.js +39 -4
- package/coms/zimoli/model.js +12 -4
- package/package.json +1 -1
- package/public/efront.js +1 -1
- package/readme.md +1 -1
package/coms/basic/JSAM.js
CHANGED
|
@@ -291,9 +291,9 @@ function parse(string, preload) {
|
|
|
291
291
|
module.exports = {
|
|
292
292
|
stringify,
|
|
293
293
|
parse(data, preload) {
|
|
294
|
-
if (
|
|
294
|
+
if (/^\s*(?:[^\{\[\s]|\[\s*\]|\{\s*\})\s*$/.test(data)) return parse(data, preload);
|
|
295
295
|
if (/^\s*\{[\d\,\:\s]*\}\s*,/.test(data)) return parse(data, preload);
|
|
296
296
|
if (/^\s*\[[\d\,\:\s]*\]\s*,/.test(data)) return parse(data, preload);
|
|
297
|
-
return JSON.parse(data
|
|
297
|
+
return JSON.parse(data);
|
|
298
298
|
}
|
|
299
299
|
};
|
package/coms/basic/cookie.js
CHANGED
|
@@ -100,9 +100,31 @@ function getDomainPath(url) {
|
|
|
100
100
|
return host;
|
|
101
101
|
}
|
|
102
102
|
|
|
103
|
+
function linkCookie(from, to) {
|
|
104
|
+
from = getDomainPath(from).replace(/\/$/, '');
|
|
105
|
+
to = getDomainPath(to).replace(/\/$/, '');
|
|
106
|
+
if (cookiesMap[from]) {
|
|
107
|
+
cookiesMap[to] = cookiesMap[from];
|
|
108
|
+
}
|
|
109
|
+
cookiesMap[to] = cookiesMap[from] = extend({}, cookiesMap[to], cookiesMap[from]);
|
|
110
|
+
return to;
|
|
111
|
+
}
|
|
112
|
+
function copyCookie(from, to) {
|
|
113
|
+
from = getDomainPath(from).replace(/\/$,'/, '');
|
|
114
|
+
to = getDomainPath(to).replace(/\/$/, '');
|
|
115
|
+
if (from in cookiesMap) {
|
|
116
|
+
cookiesMap[to] = JSON.parse(JSON.stringify(cookiesMap[from]));
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
delete cookiesMap[to];
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
103
123
|
return {
|
|
104
124
|
cookiesMap,
|
|
105
125
|
addCookie,
|
|
106
126
|
getCookies,
|
|
107
127
|
delCookies,
|
|
128
|
+
linkCookie,
|
|
129
|
+
copyCookie
|
|
108
130
|
}
|
package/coms/basic/cross_.js
CHANGED
|
@@ -149,12 +149,16 @@ function cross_(jsonp, digest = noop, method, url, headers) {
|
|
|
149
149
|
}
|
|
150
150
|
|
|
151
151
|
}
|
|
152
|
+
if (exposeMap["strict-transport-security"] || exposeMap["efront-transport-security"]) {
|
|
153
|
+
if (!/^https\:\/\/|^s\/\//.test(url)) console.warn("请使用https访问如下路径:" + url);
|
|
154
|
+
}
|
|
152
155
|
}
|
|
153
156
|
if (isencrypt && xhr.response) {
|
|
154
157
|
try {
|
|
155
158
|
xhr = {
|
|
156
159
|
status: xhr.status,
|
|
157
160
|
response: encode62.safedecode(xhr.response || xhr.responseText, xhr.encrypt),
|
|
161
|
+
getResponseHeader: xhr.getResponseHeader && xhr.getResponseHeader.bind(xhr)
|
|
158
162
|
};
|
|
159
163
|
xhr.responseText = xhr.response;
|
|
160
164
|
}
|
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
function chooseFile(accept, multiple, extra) {
|
|
2
2
|
var form = document.createElement("form");
|
|
3
|
-
form.innerHTML = `<input ${extra ? extra + " " : ''}type='file'${accept ? ` accept="${accept}"` : ''}${multiple ? ' multiple' : ''} />`;
|
|
3
|
+
form.innerHTML = `<input tabindex=0 ${extra ? extra + " " : ''}type='file'${accept ? ` accept="${accept}"` : ''}${multiple ? ' multiple' : ''} />`;
|
|
4
4
|
var [input] = form.children;
|
|
5
|
-
var result = new Promise(function (ok) {
|
|
5
|
+
var result = new Promise(function (ok, oh) {
|
|
6
6
|
if (/msie\s+[2-9]/i.test(navigator.userAgent)) return alert("无法在当前浏览器操作!");
|
|
7
|
+
input.onfocus = function () {
|
|
8
|
+
// focus 事件比change事件早40-80毫秒
|
|
9
|
+
if (opened && document.hasFocus()) {
|
|
10
|
+
remove(input);
|
|
11
|
+
setTimeout(oh, 210);
|
|
12
|
+
}
|
|
13
|
+
};
|
|
7
14
|
on("change")(input, function () {
|
|
8
15
|
if (!this.files) {
|
|
9
16
|
var value = this.value;
|
|
@@ -27,8 +34,14 @@ function chooseFile(accept, multiple, extra) {
|
|
|
27
34
|
}
|
|
28
35
|
});
|
|
29
36
|
});
|
|
30
|
-
|
|
37
|
+
var opened = false;
|
|
38
|
+
input.tabIndex = 0;
|
|
39
|
+
css(input, 'opacity:0;pointer-events:none;position:absolute;position:fixed;top:-200px;left:0;')
|
|
40
|
+
appendChild(document.body, input);
|
|
41
|
+
requestAnimationFrame(function () {
|
|
42
|
+
input.focus();
|
|
31
43
|
input.click();
|
|
44
|
+
opened = true;
|
|
32
45
|
});
|
|
33
46
|
return result;
|
|
34
47
|
}
|
package/coms/zimoli/cross.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
var { cookiesMap, saveCookie } = cookie;
|
|
2
2
|
var saveCookie = lazy(function () {
|
|
3
|
-
sessionStorage.setItem(cookieItemsInSessionStorageKey,
|
|
3
|
+
sessionStorage.setItem(cookieItemsInSessionStorageKey, JSAM.stringify(cookiesMap));
|
|
4
4
|
}, 20);
|
|
5
5
|
var { efrontURI, cross_host = efrontURI } = this;
|
|
6
6
|
var location_href = parseURL(location.href);
|
|
@@ -11,7 +11,7 @@ var cookieItemsInSessionStorageKey = "--zimoli-coms-cross";
|
|
|
11
11
|
var cookiesData = sessionStorage.getItem(cookieItemsInSessionStorageKey);
|
|
12
12
|
if (cookiesData) {
|
|
13
13
|
try {
|
|
14
|
-
extend(cookiesMap,
|
|
14
|
+
extend(cookiesMap, JSAM.parse(cookiesData));
|
|
15
15
|
} catch (e) {
|
|
16
16
|
console.warn("加载cookie出错!");
|
|
17
17
|
}
|
package/coms/zimoli/input.js
CHANGED
|
@@ -6,14 +6,21 @@ var number = function (event) {
|
|
|
6
6
|
if (keyCode === 13 || keyCode === 18 || keyCode === 37 || keyCode === 38 || keyCode === 39 || keyCode === 40 || keyCode === 8 || keyCode === 46 || keyCode === 9) {
|
|
7
7
|
}
|
|
8
8
|
else if (keyCode >= 49 && keyCode <= 57 || keyCode >= 96 && keyCode <= 105) {
|
|
9
|
-
|
|
9
|
+
if (this.value) {
|
|
10
|
+
if (this.fixed && this.value.replace(/^[^\.]+/, '').length > this.fixed ||
|
|
11
|
+
this.limit && this.value.length >= this.limit && !/\./.test(this.value)) {
|
|
12
|
+
event.preventDefault();
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
else if (keyCode === 110 || keyCode === 190) {
|
|
10
17
|
if (/^int/i.test(type)) {
|
|
11
18
|
event.preventDefault();
|
|
12
19
|
} else if (/\./i.test(value) || !value || /^[\-\+]$/.test(value)) {
|
|
13
20
|
event.preventDefault();
|
|
14
21
|
}
|
|
15
22
|
} else if (keyCode === 189 || keyCode === 187) {// 负号 正号
|
|
16
|
-
if (value ||
|
|
23
|
+
if (value || this.positive) {
|
|
17
24
|
event.preventDefault();
|
|
18
25
|
}
|
|
19
26
|
} else {
|
|
@@ -31,11 +38,32 @@ var number = function (event) {
|
|
|
31
38
|
}
|
|
32
39
|
}
|
|
33
40
|
};
|
|
41
|
+
var positiveReg = /^\+|^positive\-?|\-?positive$|\+$/i;
|
|
42
|
+
var negativeReg = /^\-|^negative\-?|\-?negative$|\-$/i;
|
|
43
|
+
var numberLimit = /\:(\d+)?(?:\.(\d+))?$/;
|
|
44
|
+
/**
|
|
45
|
+
* @param {HTMLInputElement} element
|
|
46
|
+
*/
|
|
34
47
|
function input(element) {
|
|
35
48
|
if (element && /input/i.test(element.tagName)) {
|
|
36
49
|
var type = element.getAttribute("type");
|
|
37
50
|
if (type) {
|
|
38
51
|
var format;
|
|
52
|
+
var m = numberLimit.exec(type);
|
|
53
|
+
if (m) {
|
|
54
|
+
type = type.replace(numberLimit, '');
|
|
55
|
+
var [, limit, fixed] = m;
|
|
56
|
+
if (limit) element.limit = +limit;
|
|
57
|
+
if (fixed) element.fixed = +fixed;
|
|
58
|
+
}
|
|
59
|
+
if (positiveReg.test(type)) {
|
|
60
|
+
type = type.replace(positiveReg, '');
|
|
61
|
+
this.positive = true;
|
|
62
|
+
}
|
|
63
|
+
if (negativeReg.test(type)) {
|
|
64
|
+
type = type.replace(negativeReg, '');
|
|
65
|
+
this.negative = true;
|
|
66
|
+
}
|
|
39
67
|
switch (type.toLowerCase()) {
|
|
40
68
|
case "date":
|
|
41
69
|
format = "年月日";
|
|
@@ -56,15 +84,22 @@ function input(element) {
|
|
|
56
84
|
this.value = new Date(value).toLocaleString(undefined, { hour12: false });
|
|
57
85
|
};
|
|
58
86
|
break;
|
|
87
|
+
case "price":
|
|
88
|
+
if (!+element.positive) element.positive = true;
|
|
59
89
|
case "money":
|
|
90
|
+
if (!element.fixed) element.fixed = 2;
|
|
91
|
+
on("keydown")(element, number);
|
|
92
|
+
break;
|
|
93
|
+
case "natural":
|
|
94
|
+
if (!+element.positive) element.positive = true;
|
|
60
95
|
case "int":
|
|
61
96
|
case "integer":
|
|
62
|
-
case "integer":
|
|
63
97
|
case "number":
|
|
64
98
|
case "num":
|
|
65
|
-
case "natural":
|
|
66
99
|
on("keydown")(element, number);
|
|
67
100
|
break;
|
|
101
|
+
default:
|
|
102
|
+
if (element.limit && !(element.maxLength > 0)) element.maxLength = element.limit;
|
|
68
103
|
}
|
|
69
104
|
}
|
|
70
105
|
return element;
|
package/coms/zimoli/model.js
CHANGED
|
@@ -36,8 +36,6 @@ var renderModel = function (field, data) {
|
|
|
36
36
|
});
|
|
37
37
|
};
|
|
38
38
|
var constructors = {
|
|
39
|
-
input,
|
|
40
|
-
raw: input,
|
|
41
39
|
swap(e) {
|
|
42
40
|
var { field } = e;
|
|
43
41
|
e = swap(e);
|
|
@@ -58,6 +56,11 @@ var constructors = {
|
|
|
58
56
|
row: textarea,
|
|
59
57
|
password,
|
|
60
58
|
text: textarea,
|
|
59
|
+
number(e) {
|
|
60
|
+
e.innerHTML = `<input type="${e.field.type}" ng-model="data[field.key]" />`;
|
|
61
|
+
render(e.children, e.$scope, e.$parentScopes);
|
|
62
|
+
return e;
|
|
63
|
+
},
|
|
61
64
|
date() {
|
|
62
65
|
var elem = document.createElement("input");
|
|
63
66
|
elem.type = "date";
|
|
@@ -140,6 +143,7 @@ var constructors = {
|
|
|
140
143
|
|
|
141
144
|
}
|
|
142
145
|
};
|
|
146
|
+
constructors.price = constructors.money = constructors.number;
|
|
143
147
|
var readonly_types = {
|
|
144
148
|
"date"({ field }, data) {
|
|
145
149
|
var string = data[field.key];
|
|
@@ -204,6 +208,7 @@ function main(elem) {
|
|
|
204
208
|
elem.setAttribute("type", field_type);
|
|
205
209
|
}
|
|
206
210
|
remove(elem.children);
|
|
211
|
+
field_type = field_type.replace(/\:[\d+\.]+$/, '');
|
|
207
212
|
if (readonly || field.readonly) {
|
|
208
213
|
if (field_type === "function") {
|
|
209
214
|
field_editor(elem);
|
|
@@ -244,8 +249,11 @@ function main(elem) {
|
|
|
244
249
|
}
|
|
245
250
|
} else {
|
|
246
251
|
var create = field_type === "function" ? field_editor : constructors[field_type];
|
|
247
|
-
var ipt = create ? create(elem, field_ref) : field.key ? input()
|
|
248
|
-
|
|
252
|
+
var ipt = create ? create(elem, field_ref) : field.key ? input(function () {
|
|
253
|
+
var input = document.createElement('input');
|
|
254
|
+
input.setAttribute('type', field.type);
|
|
255
|
+
return input;
|
|
256
|
+
}()) : null;
|
|
249
257
|
if (ipt) {
|
|
250
258
|
if (ipt !== elem) appendChild(elem, ipt);
|
|
251
259
|
if (!ipt.$scope) {
|