efront 3.18.0 → 3.18.3

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.
@@ -12,14 +12,11 @@ async function link(id, page) {
12
12
  var xhr = null;
13
13
  while (true) {
14
14
  if (removed) break;
15
- xhr = data.from("care", { id }, function (data) {
16
- page.$scope.msglist.push.apply(page.$scope.msglist, data);
17
- });
18
- await xhr;
15
+ xhr = data.from("care", { id });
16
+ page.push(await xhr);
19
17
  }
20
18
  }
21
19
  function main(id) {
22
- console.log(id)
23
20
  var page = frame$chat();
24
21
  care(page, 'send', function (msg) {
25
22
  data.from("cast", { id: page.roomid, msg });
@@ -1,11 +1,9 @@
1
- <btn @click="chat()">新建连接</btn>
2
- <div>
3
- 自动刷新<swap -model="autoreload"></swap>
4
- </div>
5
1
  <div class="clusters">
6
2
  <a -repeat="(c,i) in clusters" ng-class="{current:i===index.index}" @click="active(i,c)">
7
3
  <span -text="c"></span>
8
4
  </a>
5
+ 自动刷新<swap -model="autoreload"></swap>
6
+ <btn @click="chat()">新建连接</btn>
9
7
  </div>
10
8
  <lattice -src="c in clients">
11
9
  <padding>
@@ -4,7 +4,7 @@ function main() {
4
4
  page.innerHTML = template;
5
5
  renderWithDefaults(page, {
6
6
  load: lazy(async function () {
7
- this.clusters = data.asyncInstance("cluster", { opt: "list" });
7
+ this.clusters = data.lazyInstance("cluster", { opt: "list" });
8
8
  await this.clusters;
9
9
  this.active();
10
10
  }, -1000),
@@ -1,9 +1,14 @@
1
1
  .clusters a {
2
2
  display: inline-block;
3
- margin-right: 20px;
4
3
  padding: 0 6px;
5
4
  }
6
-
5
+ .clusters>*{
6
+ vertical-align: top;
7
+ margin-right: 12px;
8
+ }
9
+ .clusters{
10
+ padding-left: 6px;
11
+ }
7
12
  .time {
8
13
  color: #bbb;
9
14
  }
@@ -230,12 +230,16 @@ function cross_(jsonp, digest = noop, method, url, headers) {
230
230
  }
231
231
  }
232
232
  }
233
+ var is_gb2312 = /^[gbk][^e]/i.test(method);
234
+ if (is_gb2312) method = method.slice(1);
233
235
  if (nocross) {
234
236
  extend(realHeaders, _headers);
235
237
  xhr.open(method, url);
236
238
  } else {
237
239
  xhr.open(method, getCrossUrl(url, _headers));
238
240
  }
241
+ if (is_gb2312) xhr.overrideMimeType("text/plain; charset=gb2312");
242
+
239
243
  Object.keys(realHeaders).forEach(key => setRequestHeader.call(xhr, key, realHeaders[key]));
240
244
  if (!isEmpty(datas)) send.call(xhr, datas);
241
245
  else send.call(xhr);
@@ -286,7 +290,10 @@ function addDirect(a) {
286
290
  if (typeof a === 'string' || a instanceof RegExp) cors_hosts.push(a);
287
291
  }
288
292
  function notCross(domain) {
289
- if (!base || location_href && location_href === domain.slice(0, location_href.length) || !/^https?\:\/\/|^s?\/\//.test(domain)) return true;
293
+ if (!base ||
294
+ location_href && location_href === domain.slice(0, location_href.length) ||
295
+ !/^https?\:\/\/|^s?\/\//.test(domain) ||
296
+ domain.replace(domainReg, '$2') === base.replace(domainReg, '$2')) return true;
290
297
  for (var cx = 0, dx = cors_hosts.length; cx < dx; cx++) {
291
298
  var host = cors_hosts[cx];
292
299
  if (host instanceof RegExp) {
@@ -1,13 +1,19 @@
1
- <div head -html="title">
1
+ <div head>
2
+ <template -src="title">
3
+ </template>
4
+ <close @click="remove()"></close>
2
5
  </div>
3
- <grid body>
6
+ <grid body #body>
4
7
  <chat -src="m in msglist">
5
- <msg class="msg" -src="m"></msg>
8
+ <padding>
9
+ <msg class="msg"></msg>
10
+ <div style="clear: both;"></div>
11
+ </padding>
6
12
  </chat>
7
- <div textarea>
8
- <div contenteditable="true" -model="text"></div>
13
+ <div textarea @mousedown="this.firstChild.focus()">
14
+ <div @keydown.alt.enter="send()" contenteditable="true" -model="text"></div>
9
15
  </div>
10
16
  </grid>
11
17
  <div foot>
12
- <btn @click="send()">发送</btn>
18
+ <btn @click="send();">发送</btn>
13
19
  </div>
@@ -1,22 +1,36 @@
1
1
 
2
- function msg(elem) {
3
- care(elem, function (data) {
4
- if (!data) return;
5
- var m = JSAM.parse(data);
6
- if (m) switch (m.type) {
7
- case "html":
8
- elem.innerHTML = m.content;
9
- break;
10
- default:
11
- elem.innerText = data;
12
- }
13
- })
2
+ function msg(elem, { m: data }, parentScopes) {
3
+ if (!data) return;
4
+ data = encode62.timedecode(data);
5
+ var m = JSAM.parse(data);
6
+ if (m.sender === parentScopes[parentScopes.length - 1].localid) {
7
+ elem.setAttribute("self", "");
8
+ }
9
+ if (m) switch (m.type) {
10
+ case "html":
11
+ elem.innerHTML = m.content;
12
+ break;
13
+ default:
14
+ elem.innerText = data;
15
+ }
14
16
  }
15
17
  function chat(title = '会话窗口') {
16
18
  var page = view();
17
19
  page.innerHTML = template;
18
- drag.on(page.firstChild, page);
20
+ drag.on(page.firstElementChild, page);
19
21
  resize.on(page);
22
+ page.push = function (msgs) {
23
+ var { msglist } = this.$scope;
24
+ msglist.push.apply(msglist, msgs);
25
+ var chat = page.querySelector("chat");
26
+ var lastmsg = chat.getLastVisibleElement();
27
+ if (msgs.length && (!lastmsg || lastmsg.offsetTop + lastmsg.offsetHeight === chat.scrollHeight)) {
28
+ chat.go(msglist.length ? msglist.length - 1 : 0);
29
+ }
30
+ };
31
+ page.renders = [function () {
32
+ this.$scope.resize(this.$scope.body);
33
+ }];
20
34
  renderWithDefaults(page, {
21
35
  chat: list,
22
36
  title,
@@ -25,13 +39,32 @@ function chat(title = '会话窗口') {
25
39
  text: '',
26
40
  localid: Math.random(),
27
41
  msg,
42
+ remove() {
43
+ remove(page);
44
+ },
45
+ resize(body) {
46
+ var textarea = body.querySelector("[textarea]");
47
+ var lastElementChild = textarea.lastElementChild;
48
+ var targetHeight = Math.min(textarea.scrollHeight, body.clientHeight * .6, lastElementChild.offsetTop + lastElementChild.offsetHeight);
49
+ if (Math.abs(targetHeight - textarea.clientHeight) < 2) return;
50
+
51
+ body.resizeCell(textarea, 'top', textarea.clientHeight - targetHeight - 2);
52
+ },
28
53
  send() {
29
54
  if (!this.text) return;
30
- cast(page, "send", JSAM.stringify({
55
+ var data = JSAM.stringify({
31
56
  type: 'html',
32
57
  sender: this.localid,
33
58
  content: this.text,
34
- }));
59
+ });
60
+
61
+ data = encode62.timeencode(data);
62
+ if (this.text.length > 2000) {
63
+ alert("信息太长,无法发送!");
64
+ return;
65
+ }
66
+ cast(page, "send", data);
67
+ this.body.lastElementChild.focus();
35
68
  this.text = '';
36
69
  }
37
70
  });
@@ -1,5 +1,5 @@
1
- @height: 320px;
2
- @width: 360px;
1
+ @height: 420px;
2
+ @width: 480px;
3
3
  @margin-top: -160px;
4
4
  @margin-left: -180px;
5
5
 
@@ -18,9 +18,56 @@
18
18
  max-height: 100%;
19
19
  }
20
20
 
21
+ padding {
22
+ display: block;
23
+ position: relative;
24
+
25
+ &:after {
26
+ display: "";
27
+ display: block;
28
+ clear: both;
29
+ }
30
+ }
21
31
 
22
32
  msg {
23
33
  display: block;
34
+ border-radius: 4px;
35
+ padding: 6px 12px;
36
+ line-height: 20px;
37
+ white-space: normal;
38
+ word-break: break-all;
39
+ background: #fff;
40
+ position: relative;
41
+ margin: 0 10px;
42
+ float: left;
43
+
44
+ &:before {
45
+ content: "";
46
+ display: block;
47
+ position: absolute;
48
+ border: 6px solid transparent;
49
+ top: 22px;
50
+ margin: -12px;
51
+ }
52
+
53
+ &:not([self]):before {
54
+ display: block;
55
+ left: 0;
56
+ border-right-color: #fff;
57
+ }
58
+
59
+ &[self] {
60
+ &:before {
61
+ right: 0;
62
+ border-left-color: #77ddaa;
63
+ }
64
+
65
+ margin-left: 20px;
66
+
67
+ float: right;
68
+ background-color: #77ddaa;
69
+ color: #333;
70
+ }
24
71
  }
25
72
 
26
73
 
@@ -55,7 +102,7 @@ chat {
55
102
  height: 100%;
56
103
  }
57
104
 
58
- .editor-height(80px);
105
+ .editor-height(96px);
59
106
 
60
107
  [textarea] {
61
108
  display: block;
@@ -67,14 +114,17 @@ chat {
67
114
  border: none;
68
115
  outline: none;
69
116
  border-top: 1px solid #000;
117
+ border-bottom: 28px solid transparent;
70
118
  ime-mode: active;
119
+ overflow: auto;
71
120
 
72
121
  >div {
73
- height: 100%;
122
+ height: auto;
123
+ min-height: 52px;
74
124
  width: 100%;
75
125
  vertical-align: top;
76
- padding: 6px 16px 30px;
77
- overflow: auto;
126
+ padding: 6px 16px;
127
+ box-sizing: border-box;
78
128
  outline: none;
79
129
  }
80
130
  }
@@ -104,10 +154,12 @@ chat {
104
154
  .editor-height(36px);
105
155
 
106
156
  [textarea] {
107
- border: none;
157
+ border-bottom: none;
108
158
  outline: none;
109
- >div{
110
- padding-right: 80px;
159
+
160
+ >div {
161
+ min-height: 30px;
162
+ padding-right: 110px;
111
163
  }
112
164
  }
113
165
  }
@@ -2,11 +2,20 @@ function main(title, { fields, options: options0, load, remove }, edit_ref) {
2
2
  prepare(edit_ref);
3
3
  var page = document.createElement("div");
4
4
  var edit = function (o) {
5
+ if (!edit_ref) {
6
+ return;
7
+ }
8
+ var callback = function () {
9
+ page.$scope.load();
10
+ };
11
+ if (isFunction(edit_ref)) {
12
+ var p = edit_ref(o, callback);
13
+ if (p) on('submited')(p, callback);
14
+ return;
15
+ }
5
16
  zimoli.prepare(edit_ref, function () {
6
- var p = popup(edit_ref, { fields, data: o })
7
- on("submited")(p, function () {
8
- page.$scope.load();
9
- })
17
+ var p = popup(edit_ref, { fields, data: o})
18
+ on("submited")(p, callback);
10
19
  })
11
20
  };
12
21
  page.innerHTML = template;
@@ -27,14 +27,19 @@ var baidu = {
27
27
  getURL: function (x, y, z) {
28
28
  if (x < 0) x = "M" + -x;
29
29
  if (y < 0) y = "M" + -y;
30
- return `http://online0.map.bdimg.com/tile/?qt=tile&x=${x}&y=${y}&z=${z}&styles=pl&scaler=1&udt=20180721`;
30
+ return `https://maponline2.bdimg.com/tile/?qt=tile&x=${x}&y=${y}&z=${z}&styles=pl&scaler=1&udt=20180721`;
31
31
  },
32
32
  lat2y,
33
33
  lng2x,
34
34
  x2lng,
35
35
  y2lat,
36
+ minLng: -180,
37
+ maxLng: 180,
36
38
  direction: -1,
37
39
  lat2tile(lat, zoom) {
38
40
  return Math.ceil(this.lat2y(lat, zoom));
41
+ },
42
+ lng2tile(lng, zoom) {
43
+ return Math.floor(this.lng2x(lng, zoom));
39
44
  }
40
45
  }
@@ -0,0 +1,3 @@
1
+ return {
2
+ url:'http://webst04.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}'
3
+ };
@@ -1,4 +1,4 @@
1
1
  var google = {
2
- url: `http://mt{1-3}.google.cn/vt/lyrs=h&hl=zh-CN&gl=cn&x={x}&y={y}&z={z}`,
3
- url: `http://mt{1-3}.google.cn/vt/lyrs=s&hl=zh-CN&gl=cn&x={x}&y={y}&z={z}`
2
+ url: `https://mt{1-3}.google.cn/vt/lyrs=h&hl=zh-CN&gl=cn&x={x}&y={y}&z={z}`,
3
+ url: `https://gac-geo.googlecnapps.cn/maps/vt?lyrs=s%40781&hl=zh-CN&gl=CN&x={x}&y={y}&z={z}&src=app&scale=1&from=app`
4
4
  };
package/coms/maps/osm.js CHANGED
@@ -1,5 +1,5 @@
1
1
  var osm = {
2
- url: `http://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png`,
2
+ url: `https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png`,
3
3
  loadImage(image, src) {
4
4
  var img = new Image;
5
5
  img.crossOrigin = "anonymous";
@@ -0,0 +1,3 @@
1
+ &{
2
+ position: absolute;
3
+ }
@@ -9,5 +9,11 @@ function main(title, type, fields, edit_ref, options, idkey = fields[0].key) {
9
9
  },
10
10
  fields,
11
11
  options,
12
- }, edit_ref);
12
+ }, edit_ref ? edit_ref : function (o) {
13
+ var p = pedit(title, type, { data: o, fields });
14
+ p.initialStyle = popup.style;
15
+ popup(p, true);
16
+ move.setPosition(p, [.5, .5]);
17
+ return p;
18
+ });
13
19
  }
@@ -0,0 +1,154 @@
1
+ // data.setConfig(data.parseConfig(`
2
+ // https://shenfen.supfree.net/:
3
+ // sheng: gget:[].bblue #title=!title&href=!href&short=!innerText
4
+ // shi: gget:[].bblue sheng.asp?sheng#title=!title&href=!href&short=!innerText
5
+ // qu: gget:[].bblue shi.asp?sheng&shi#title=!title&href=!href&short=!innerText
6
+ // `));
7
+ // var setid = function (a) {
8
+ // a = a.filter(a => a.title);
9
+ // for (var o of a) {
10
+ // o.name = o.title.replace(/身份证|号码/g, "").replace(/市县/, '市');
11
+ // o.id = o.href.replace(/^([^\d]+)\.asp\?[\s\S]*\1\=(\d+)[\s\S]*?$/g, "$2");
12
+ // delete o.href;
13
+ // delete o.title;
14
+ // }
15
+ // return a;
16
+ // };
17
+ // var prefix = {};
18
+ // var tree = {};
19
+ // await queue.call(await data.from("sheng", setid), async function (h) {
20
+ // var shi = await data.from("shi", { sheng: h.id }, setid);
21
+ // var so = {};
22
+ // tree[h.short] = so;
23
+ // while (shi.length) {
24
+ // var s = shi.pop();
25
+ // var qu = await data.from("qu", { sheng: h.id, shi: s.id }, setid);
26
+ // var qo = {};
27
+ // so[s.short] = qo;
28
+ // while (qu.length) {
29
+ // var q = qu.pop();
30
+ // var id = +`${h.id}${s.id}${q.id}`;
31
+ // qo[q.short] = id;
32
+ // prefix[id] = { id, sheng: h.short, shi: s.short, qu: q.short };
33
+ // }
34
+ // }
35
+ // }, 9);
36
+ // prefix = Object.keys(prefix).sort((a, b) => a - b).map(k => prefix[k]);
37
+ // console.log(tree)
38
+ // var prefix = [...];
39
+ // console.log(prefix)
40
+ // for (var cx = 0, ci = 0, cs = prefix[0]; cx < prefix.length; cx++) {
41
+ // if (prefix[cx + 1] !== prefix[cx] + 1) {
42
+ // prefix.splice(ci + 1, cx - ci, prefix[cx] - prefix[ci]);
43
+ // if (ci > 1) {
44
+ // var temp = prefix[ci];
45
+ // prefix[ci] -= cs;
46
+ // cs = temp;
47
+ // }
48
+ // cx = ci + 1;
49
+ // ci = cx + 1;
50
+ // };
51
+ // }
52
+ // console.log(prefix)
53
+
54
+ var prefix = function (source) {
55
+ var src = [];
56
+ do {
57
+ var s = source[0];
58
+ src.push(s);
59
+ if (source[1] === 0) {
60
+ if (source.length <= 2) break;
61
+ source[2] += source[0], source.shift(), source.shift();
62
+ }
63
+ else source[0]++, source[1]--;
64
+ } while (source.length);
65
+ return src;
66
+ }([110101, 8, 10, 6, 117, 1, 9873, 14, 120, 0, 2, 0, 2, 0, 9876, 7, 20, 0, 2, 10, 58, 4, 20, 7, 20, 0, 2, 2, 4, 0, 2, 1, 52, 2, 20, 3, 20, 3, 80, 3, 5, 0, 15, 0, 2, 12, 58, 0, 20, 2, 20, 14, 60, 1, 20, 3, 20, 17, 60, 3, 20, 2, 4, 1, 16, 12, 80, 3, 20, 7, 80, 2, 20, 9, 60, 3, 20, 2, 21, 4, 6, 0, 53, 1, 20, 1, 20, 7, 60, 1, 8920, 0, 4, 5, 16, 2, 60, 0, 20, 2, 10, 1, 10, 6, 80, 2, 10, 0, 10, 1, 80, 1, 10, 0, 10, 0, 2, 8, 58, 0, 20, 1, 20, 1, 3, 1, 57, 0, 20, 2, 20, 3, 80, 1, 20, 8, 60, 0, 20, 1, 20, 9, 60, 1, 20, 1, 20, 11, 60, 0, 20, 1, 20, 13, 60, 1, 20, 1, 20, 9, 60, 1, 1020, 1, 21, 1, 3, 9, 176, 1, 20, 3, 6, 0, 2, 2, 4, 0, 168, 2, 20, 2, 4, 0, 2, 9, 74, 2, 22, 4, 6, 4, 7372, 4, 20, 4, 80, 6, 20, 2, 80, 3, 100, 3, 20, 5, 7, 2, 73, 1, 20, 5, 60, 0, 21, 0, 19, 6, 80, 1, 20, 6, 60, 4, 20, 1, 20, 5, 80, 1, 20, 8, 60, 0, 1120, 5, 21, 1, 5, 4, 74, 1, 20, 3, 80, 1, 21, 5, 179, 1, 21, 9, 79, 1, 23, 3, 5, 3, 5, 0, 67, 0, 21, 6, 79, 0, 21, 5, 99, 2, 57180, 5, 10, 3, 11, 2, 59, 0, 20, 3, 10, 2, 13, 0, 57, 2, 20, 3, 10, 0, 10, 0, 2, 0, 58, 0, 20, 3, 10, 0, 10, 2, 80, 4, 20, 1, 80, 3, 23, 0, 57, 1, 20, 2, 10, 0, 15, 1, 55, 1, 20, 3, 10, 0, 70, 1, 20, 4, 10, 0, 10, 1, 80, 4, 10, 0, 10, 0, 60, 0, 20, 2, 20, 1, 80, 1, 3, 0, 17, 0, 2, 1, 58, 1, 20, 2, 20, 1, 3, 0, 57, 1, 20, 3, 20, 1, 60, 0, 8620, 5, 11, 0, 10, 0, 59, 2, 20, 3, 10, 0, 10, 0, 60, 3, 20, 2, 21, 1, 59, 1, 20, 2, 20, 1, 80, 2, 20, 0, 2, 1, 58, 1, 20, 1, 20, 2, 4, 0, 56, 0, 20, 1, 20, 3, 80, 1, 20, 1, 60, 1, 1520, 5, 23, 0, 2, 0, 7675, 7, 20, 0, 2, 6, 58, 3, 20, 7, 20, 0, 2, 2, 4, 0, 2, 2, 52, 0, 20, 6, 20, 0, 60, 1, 20, 6, 20, 1, 80, 2, 4, 1, 16, 3, 80, 5, 20, 3, 80, 15, 21, 0, 59, 0, 20, 4, 10, 0, 11, 0, 4, 0, 2, 0, 5, 0, 48, 1, 20, 3, 20, 0, 80, 4, 23, 1, 57, 0, 2, 2, 18, 1, 20, 0, 2, 1, 58, 1, 20, 1, 20, 5, 60, 2, 1020, 3, 23, 2, 6, 2, 391, 2, 77380, 0, 2, 7, 9, 8, 118, 0, 9871, 6, 10, 5, 10, 4, 80, 5, 10, 0, 70, 2, 20, 4, 10, 0, 10, 3, 60, 1, 20, 1, 3, 1, 7, 1, 70, 2, 20, 6, 10, 0, 70, 5, 20, 1, 10, 0, 10, 0, 2, 0, 58, 3, 20, 0, 2, 3, 18, 3, 80, 3, 10, 0, 10, 0, 5, 0, 3, 2, 53, 0, 19, 2, 20, 4, 7, 0, 53, 1, 20, 2, 10, 0, 12, 0, 4, 0, 54, 0, 3, 0, 4, 0, 13, 1, 10, 1, 10, 0, 60, 2, 20, 2, 80, 3, 20, 1, 20, 3, 8780, 5, 7, 2, 14, 0, 5, 0, 54, 4, 20, 0, 2, 3, 8, 1, 14, 2, 56, 2, 20, 3, 21, 0, 2, 0, 2, 3, 55, 1, 20, 1, 10, 0, 10, 0, 3, 0, 57, 2, 20, 2, 20, 2, 80, 1, 20, 0, 3, 0, 57, 2, 20, 2, 20, 0, 2, 0, 3, 1, 55, 3, 20, 2, 20, 1, 3, 1, 57, 0, 20, 2, 20, 1, 80, 3, 20, 3, 60, 1, 20, 1, 20, 6, 60, 0, 1320, 1, 21, 1, 3, 4, 7576, 3, 10, 0, 10, 2, 80, 3, 6, 0, 14, 2, 80, 3, 10, 0, 10, 2, 80, 5, 20, 0, 80, 4, 20, 0, 80, 3, 20, 0, 80, 2, 10, 0, 10, 0, 80, 2, 10, 0, 11, 6, 59, 0, 120, 3, 20, 3, 80, 2, 21, 0, 2, 2, 57, 1, 20, 3, 20, 6, 60, 1, 20, 1, 20, 3, 80, 1, 20, 3, 80, 2, 20, 4, 80, 1, 20, 2, 80, 1, 20, 2, 80, 1, 20, 4, 60, 0, 520, 0, 21, 1, 3, 2, 76, 1, 21, 1, 7, 2, 72, 0, 21, 1, 3, 1, 276, 0, 20, 2, 7180, 4, 10, 0, 10, 4, 7, 0, 53, 1, 20, 5, 10, 2, 90, 4, 20, 1, 80, 2, 20, 0, 2, 7, 58, 0, 20, 4, 20, 0, 3, 3, 57, 2, 20, 2, 21, 7, 59, 0, 20, 1, 20, 4, 60, 3, 20, 1, 20, 4, 60, 0, 20, 1, 20, 5, 60, 1, 1220, 2, 24, 0, 2, 4, 7874, 4, 10, 0, 10, 3, 80, 2, 21, 0, 59, 0, 20, 1, 12, 0, 8, 2, 80, 2, 20, 0, 2, 7, 58, 0, 20, 1, 20, 0, 80, 1, 21, 0, 59, 0, 20, 1, 20, 14, 60, 1, 20, 2, 20, 9, 60, 0, 20, 1, 20, 5, 60, 2, 20, 1, 20, 9, 80, 1, 20, 9, 60, 0, 1020, 3, 25, 3, 6, 1, 69, 1, 20, 5, 8, 2, 5, 0, 67, 1, 20, 9, 11, 0, 70, 0, 20, 7, 9, 1, 7570, 4, 11, 1, 11, 3, 58, 0, 20, 2, 4, 0, 6, 3, 70, 4, 20, 5, 20, 2, 80, 5, 80, 0, 20, 2, 20, 2, 80, 1, 10, 2, 23, 0, 47, 6, 20, 4, 23, 1, 57, 5, 20, 1, 10, 0, 15, 6, 55, 2, 20, 2, 10, 0, 10, 0, 2, 0, 59, 1, 19, 1, 80, 2, 20, 1, 20, 1, 80, 2, 100, 1, 10, 1, 10, 8, 80, 1, 20, 7, 60, 1, 20, 1, 20, 5, 60, 0, 20, 1, 20, 5, 80, 1, 20, 7, 580, 0, 20, 0, 2, 2, 5, 0, 2, 0, 571, 0, 21, 4, 6, 2, 37173, 5, 7, 0, 14, 0, 59, 4, 20, 4, 10, 0, 10, 4, 80, 6, 10, 0, 11, 7, 59, 0, 20, 3, 10, 0, 10, 2, 4, 0, 56, 1, 20, 5, 10, 0, 11, 1, 4, 1, 55, 0, 20, 2, 10, 0, 10, 1, 80, 3, 10, 0, 10, 0, 3, 4, 57, 1, 20, 3, 10, 0, 10, 2, 4, 0, 56, 2, 20, 1, 21, 1, 4, 2, 75, 1, 22, 2, 58, 1, 20, 1, 20, 2, 80, 1, 20, 1, 3, 0, 57, 1, 20, 2, 20, 9, 60, 0, 20, 2, 20, 5, 60, 0, 20, 2, 20, 7, 80, 1, 20, 7, 60, 0, 20, 1, 20, 8, 980, 1, 20, 7, 80, 0, 20, 8, 7280, 6, 10, 6, 90, 4, 21, 0, 59, 0, 20, 2, 20, 4, 60, 0, 120, 5, 20, 0, 4, 4, 56, 2, 20, 1, 5, 1, 15, 0, 3, 2, 58, 2, 19, 3, 100, 1, 3, 0, 17, 1, 60, 0, 20, 1, 20, 2, 60, 3, 20, 2, 21, 2, 59, 0, 2, 0, 4, 0, 14, 1, 20, 6, 60, 1, 20, 1, 20, 3, 60, 0, 20, 1, 80, 0, 1420, 1, 21, 1, 3, 3, 6179, 2, 17, 0, 1080, 4, 10, 0, 10, 1, 3, 0, 57, 0, 20, 3, 10, 0, 10, 0, 2, 2, 58, 0, 20, 1, 3, 0, 17, 0, 60, 1, 20, 7, 10, 1, 10, 3, 5, 0, 55, 1, 20, 2, 10, 0, 10, 4, 6, 2, 54, 0, 20, 2, 10, 0, 10, 0, 2, 1, 3, 0, 55, 1, 20, 2, 20, 5, 60, 0, 20, 1, 10, 0, 10, 1, 80, 2, 20, 2, 60, 0, 20, 2, 20, 7, 60, 0, 20, 2, 20, 8, 80, 1, 20, 9, 60, 0, 20, 1, 20, 1, 60, 1, 1120, 2, 21, 0, 2, 0, 477, 0, 100, 0, 21, 5, 8, 0, 6971, 6, 10, 3, 70, 3, 20, 3, 20, 3, 8, 0, 3, 1, 49, 1, 20, 0, 2, 5, 98, 3, 20, 0, 80, 0, 5, 9, 17, 0, 59, 1, 19, 7, 80, 3, 20, 0, 2, 2, 78, 4, 20, 3, 10, 0, 12, 0, 2, 0, 56, 2, 20, 2, 22, 0, 58, 2, 220, 2, 22, 3, 60, 1, 18, 2, 21, 2, 59, 0, 20, 1, 20, 3, 5, 1, 55, 0, 20, 1, 20, 0, 2, 0, 58, 0, 20, 1, 20, 4, 80, 1, 20, 0, 2, 0, 58, 0, 20, 1, 20, 0, 2, 0, 2, 2, 56, 1, 20, 0, 100, 0, 3100, 1, 20, 1, 80, 1, 20, 1, 3, 0, 57, 0, 20, 1, 20, 2, 60, 0, 4720, 5, 10, 0, 10, 6, 80, 4, 10, 0, 10, 5, 80, 4, 10, 0, 10, 11, 80, 0, 2, 2, 8, 0, 10, 2, 60, 0, 20, 2, 11, 0, 9, 0, 80, 2, 20, 0, 60, 0, 20, 2, 20, 1, 80, 3, 20, 0, 60, 0, 20, 1, 20, 3, 60, 0, 20, 1, 20, 10, 80, 1, 20, 2, 80, 1, 20, 8, 60, 0, 20, 1, 20, 3, 60, 0, 20, 1, 20, 4, 60, 0, 620, 0, 21, 2, 4, 7, 75, 0, 22, 8, 179, 0, 22, 0, 3, 1, 174, 0, 21, 10, 79, 1, 22, 8, 7278, 6, 24, 3, 5, 1, 3, 3, 68, 7, 100, 0, 8800, 2, 4, 2, 20, 3, 5, 1, 3, 6, 31068, 14, 121, 16, 18, 3, 141, 3, 9720, 0, 3, 4, 8, 3, 9, 4, 8, 0, 2, 1, 50, 3, 120, 3, 10, 0, 10, 1, 80, 2, 10, 0, 10, 1, 80, 3, 20, 1, 3, 1, 77, 0, 2, 0, 20, 0, 3, 0, 55, 2, 20, 0, 2, 1, 19, 5, 59, 0, 20, 1, 10, 1, 10, 3, 80, 3, 20, 2, 80, 1, 10, 0, 13, 1, 4, 0, 73, 1, 10, 2, 12, 1, 3, 0, 3, 0, 3, 1, 49, 0, 120, 3, 20, 4, 60, 0, 20, 1, 20, 4, 80, 1, 20, 8, 80, 1, 20, 2, 60, 0, 20, 1, 20, 4, 60, 0, 20, 1, 20, 6, 80, 1, 20, 2, 80, 1, 20, 1, 60, 0, 920, 1, 20, 2, 8, 1, 72, 0, 21, 6, 99, 12, 100, 17, 80, 0, 21, 15, 279, 0, 20, 2, 100, 5, 6280, 2, 10, 3, 10, 2, 60, 0, 20, 2, 20, 1, 80, 2, 20, 9, 60, 1, 20, 1, 20, 4, 1780, 0, 21, 8, 79, 0, 21, 6, 79, 0, 21, 6, 79, 0, 25, 4, 75, 0, 21, 14, 79, 1, 21, 1, 3, 7, 7376, 2, 10, 2, 10, 1, 3, 5, 57, 0, 120, 1, 20, 5, 7, 0, 53, 0, 20, 1, 20, 7, 80, 1, 20, 3, 80, 1, 20, 9, 80, 1, 20, 3, 80, 1, 20, 8, 80, 1, 20, 6, 1180, 0, 21, 9, 179, 0, 21, 7, 9, 0, 170, 1, 21, 10, 99, 7, 80, 0, 21, 8, 79, 0, 21, 1, 79, 0, 21, 10, 79, 0, 21, 3, 79, 2, 21, 2, 99, 3, 100, 0, 2, 2, 98, 2, 100, 7, 6580, 1, 20, 6, 2000, 8, 11, 5, 89, 8, 10, 2, 70, 0, 21, 16, 99, 9, 100, 7, 100, 6, 67480, 3, 10, 5, 10, 1, 3, 2, 77, 3, 20, 1, 80, 3, 20, 3, 5, 5, 75, 3, 21, 9, 59, 0, 20, 1, 20, 7, 60, 1, 20, 1, 20, 11, 80, 1, 20, 9, 80, 1, 20, 10, 80, 1, 20, 8, 80, 1, 20, 5, 1380, 0, 21, 8, 79, 0, 21, 5, 179, 0, 21, 10, 7379, 4, 10, 0, 10, 2, 80, 0, 100, 1, 20, 0, 80, 2, 20, 2, 80, 2, 20, 4, 80, 1, 20, 2, 80, 1, 20, 4, 80, 1, 20, 5, 80, 1, 20, 3, 60, 1, 20, 1, 20, 6, 80, 1, 20, 5, 980, 2, 22, 3, 78, 0, 21, 4, 79, 0, 21, 1, 4, 0, 95, 0, 3, 5, 197, 0, 2, 7, 78, 0, 21, 5, 79, 0, 20, 6, 80, 0, 20, 6, 80, 0, 20, 6, 7080, 4, 20, 2, 2000, 7, 100, 3, 100, 3, 200, 4, 100, 5, 100, 5, 80, 1, 20, 2, 7280, 5, 10, 0, 10, 1, 60, 0, 20, 4, 20, 2, 80, 1, 20, 3, 60, 1, 20, 1, 21, 3, 79, 1, 20, 1, 1700, 5, 7880, 7, 20, 0, 80, 4, 1900, 0, 21, 1, 79, 0, 21, 1, 79, 2, 22, 2, 4, 1, 374, 0, 21, 1, 79, 0, 21, 7, 79, 0, 21, 7, 79, 0, 21, 2, 79, 0, 20, 10, 80, 0, 20, 6, 780, 2, 20, 7, 180, 1, 20, 0, 2, 3, 78, 0, 20, 5, 4680, 3]);
67
+ // var prefix = function (source) {
68
+ // var src = [];
69
+ // do {
70
+ // var sheng = source[0]++;
71
+ // src.push(sheng);
72
+ // if (source[0] > source[1]) source.shift(), source.shift();
73
+ // } while (source.length);
74
+ // return src;
75
+ // }([11, 15, 21, 23, 31, 37, 41, 46, 50, 54, 61, 65, 71, 71, 81, 82]);
76
+ var birth = function (q) {
77
+ var d = new Date(1000, q % 12, 1 + q % 31);
78
+ d = new Date(+d + (Date.now() - d) * (1 - Math.pow(.5, q % 9 + 2)));
79
+ return d;
80
+ }
81
+ /**
82
+ * @param {Date} d;
83
+ */
84
+ var date = function (d = birth(), y = d.getFullYear()) {
85
+ return y * 10000 + (d.getMonth() + 1) * 100 + d.getDate();
86
+ };
87
+ var order = function (r = Math.random(), q = r * 20220309 | 0) {
88
+ return (Math.pow(r, q % 10 + 4) * 498 + 1 | 0);
89
+ };
90
+ var code = function (q = Math.random() * 202203091636) {
91
+ return String(prefix[q % prefix.length]);
92
+ };
93
+ var parse = function (r) {
94
+ var p, y, m, d, o, s, x;
95
+ if (typeof r === 'string') switch (r.length) {
96
+ case 18:
97
+ s = r.slice(17, 18);
98
+ case 17:
99
+ o = r.slice(14, 17);
100
+ case 14:
101
+ d = r.slice(12, 14);
102
+ case 12:
103
+ m = r.slice(10, 12);
104
+ case 10:
105
+ y = r.slice(6, 10);
106
+ case 6:
107
+ p = r.slice(0, 6);
108
+ break;
109
+ case 8:
110
+ y = r.slice(0, 4);
111
+ m = r.slice(4, 6);
112
+ d = r.slice(6, 8);
113
+ break;
114
+ case 4:
115
+ y = r.slice(0, 4);
116
+ break;
117
+ case 3:
118
+ o = r >> 1;
119
+ case 1:
120
+ x = o & 1;
121
+ break;
122
+ case 2:
123
+ m = r;
124
+ }
125
+ else if (r === 1 || r === 0) x = r;
126
+ return [p, y, m, d, o, x, s];
127
+ }
128
+ function sex(r = Math.random()) {
129
+ return r < .5 | 0;
130
+ }
131
+ function sfz(r) {
132
+ var p17, middle;
133
+ if (typeof r === 'string' || r === 1 || r === 0) {
134
+ var r0 = Math.random();
135
+ var q = r0 * 20220309 | 0;
136
+ var d = birth(q);
137
+ var [p = code(q), y = d.getFullYear(), m = d.getMonth() + 1, d = d.getDate(), o = order(r0), x = sex(r0)] = parse(r);
138
+ middle = (y * 10000 + m * 100 + d) * 1000 + (o << 1 | x);
139
+ p17 = p + middle;
140
+ }
141
+ if (!p17) {
142
+ var q = r * 20220309 | 0;
143
+ var d = birth(q);
144
+ middle = (d.getFullYear() * 10000 + (d.getMonth() + 1) * 100 + d.getDate()) * 1000 + (order(r) << 1 | sex(r))
145
+ p17 = code(q) + middle;
146
+ }
147
+ var s = 0;
148
+ var a = [2, 4, 8, 5, 10, 9, 7, 3, 6, 1, 2, 4, 8, 5, 10, 9, 7];
149
+ for (var p of p17) {
150
+ s += p * a.pop();
151
+ }
152
+ var end = [1, 0, "X", 9, 8, 7, 6, 5, 4, 3, 2][s % 11];
153
+ return p17 + end;
154
+ }
@@ -1,5 +1,5 @@
1
1
  return cross_.bind(function (callback, onerror) {
2
- var response, responseObject, responseType = "", error;
2
+ var response, responseObject, responseType = "", decoder, error;
3
3
  var xhr = {
4
4
  status: 0,
5
5
  readyState: 0,
@@ -11,7 +11,7 @@ return cross_.bind(function (callback, onerror) {
11
11
  get response() {
12
12
  if (responseType === "" || responseType === "text") {
13
13
  if (this.readyState !== 4) return '';
14
- return String(response);
14
+ return decoder ? decoder(response) : String(response);
15
15
  }
16
16
  else if (error) return null;
17
17
  if (responseObject !== null) return responseObject;
@@ -20,7 +20,7 @@ return cross_.bind(function (callback, onerror) {
20
20
  return response.buffer;
21
21
  case "json":
22
22
  if (!response) return null;
23
- responseObject = JSON.parse(String(response));
23
+ responseObject = JSON.parse(decoder ? decoder(response) : String(response));
24
24
  return responseObject;
25
25
  }
26
26
  return responseObject;
@@ -103,7 +103,12 @@ return cross_.bind(function (callback, onerror) {
103
103
  setRequestHeader(key, value) {
104
104
  this.headers[key] = value;
105
105
  },
106
-
106
+ overrideMimeType(type) {
107
+ responseType = type;
108
+ if (/gb(k|2312|18030)/.test(type)) {
109
+ decoder = require("../efront/gbk2utf8");
110
+ }
111
+ },
107
112
  };
108
113
  return xhr;
109
114
  }, null, undefined);
@@ -41,6 +41,7 @@ var filterKey = function (event) {
41
41
  if (c === s) break;
42
42
  }
43
43
  if (keyCode === 8) {
44
+ if (!s) return;
44
45
  event.preventDefault();
45
46
  if (s.nextSibling) {
46
47
  if (s.nextSibling.innerText === '_') {
@@ -7,7 +7,7 @@
7
7
  min-height: 100px;
8
8
  padding: 0 0 10px 16px;
9
9
  font-family: 宋体;
10
- width: 422px;
10
+ width: 438px;
11
11
 
12
12
  >a {
13
13
  display: inline-block;
@@ -32,7 +32,7 @@
32
32
  &:before {
33
33
  position: relative;
34
34
  white-space: nowrap;
35
- box-sizing: border-box;
35
+ box-sizing: content-box;
36
36
  color: #ccc;
37
37
  word-spacing: 2px;
38
38
  font-size: inherit;
@@ -22,6 +22,11 @@ Item.prototype = extend([], {
22
22
  this.color = value.color;
23
23
  this.test = value.test;
24
24
  this.line = value.line;
25
+ if (value.path) this.path = value.path;
26
+ if (value.id) this.id = value.id;
27
+ if (value.url) this.url = value.url;
28
+ if (value.href) this.href = value.href;
29
+ if (value.src) this.src = value.src;
25
30
  }
26
31
  else {
27
32
  this.name = value;