efront 3.21.0 → 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.
@@ -291,9 +291,9 @@ function parse(string, preload) {
291
291
  module.exports = {
292
292
  stringify,
293
293
  parse(data, preload) {
294
- if (!/^\s*([\[\{]|\[\s*\]|\{\s*\})$/.test(data)) return parse(data, preload);
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, preload);
297
+ return JSON.parse(data);
298
298
  }
299
299
  };
@@ -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
  }
@@ -158,6 +158,7 @@ function cross_(jsonp, digest = noop, method, url, headers) {
158
158
  xhr = {
159
159
  status: xhr.status,
160
160
  response: encode62.safedecode(xhr.response || xhr.responseText, xhr.encrypt),
161
+ getResponseHeader: xhr.getResponseHeader && xhr.getResponseHeader.bind(xhr)
161
162
  };
162
163
  xhr.responseText = xhr.response;
163
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
- setTimeout(function(){
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
  }
@@ -1,6 +1,6 @@
1
1
  var { cookiesMap, saveCookie } = cookie;
2
2
  var saveCookie = lazy(function () {
3
- sessionStorage.setItem(cookieItemsInSessionStorageKey, JSON.stringify(cookiesMap));
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, JSON.parse(cookiesData));
14
+ extend(cookiesMap, JSAM.parse(cookiesData));
15
15
  } catch (e) {
16
16
  console.warn("加载cookie出错!");
17
17
  }
@@ -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
- } else if (keyCode === 110 || keyCode === 190) {
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 || /^natural|positive/i.test(type)) {
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;
@@ -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() : null;
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) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "efront",
3
- "version": "3.21.0",
3
+ "version": "3.21.1",
4
4
  "description": "一个开发工具,开放源代码,自带组件库和编译环境,可以用来开发web组件,web应用或nodejs模块,或做为已有代码的加密工具,也可以做为静态页面服务器或跨域中转服务器使用",
5
5
  "main": "public/efront.js",
6
6
  "directories": {