efront 3.25.11 → 3.25.14

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.
@@ -1,3 +1,15 @@
1
+ /**
2
+ * @param {Item} item
3
+ */
4
+ function pathTo(find, item, path) {
5
+ path.push(item);
6
+ if (item === find || find === item.value) {
7
+ return path;
8
+ }
9
+ for (var m of item) {
10
+ if (pathTo(find, m, path)) return path;
11
+ }
12
+ }
1
13
  var id = 0;
2
14
  class Item extends Array {
3
15
  extended = false;
@@ -60,7 +72,9 @@ class Item extends Array {
60
72
  if (isObject(this.value)) return getName(this.value);
61
73
  return String(this.value);
62
74
  }
63
-
75
+ pathTo(menu) {
76
+ return pathTo(menu, this, []);
77
+ }
64
78
  isClosed() {
65
79
  if (isObject(this.value)) return !!this.value.closed;
66
80
  return this.closed;
@@ -1,7 +1,7 @@
1
1
  var notMatchLength = new Error("矩阵长度不一致");
2
2
  class Matrix extends Array {
3
3
  static create2d(theta = 0) {
4
- return MatrixTransposed.matrix2d(theta);
4
+ return MathMatrix.matrix2d(theta);
5
5
  }
6
6
  static create3d(factor = [0, 0, 0]) {
7
7
  return MathMatrix.matrix3d(factor);
@@ -83,6 +83,10 @@ class Matrix extends Array {
83
83
  }
84
84
  }
85
85
  class MathMatrix extends Matrix {
86
+ toDOMString() {
87
+ if (this.size()[1] === 2) return `matrix(${[this[0], this[1], this[3], this[4], this[6], this[7]]})`;
88
+ return `matrix(${this})`;
89
+ }
86
90
 
87
91
  static transform(B, dots) {
88
92
  var dimention = Math.sqrt(B.length - 1) | 0;
@@ -217,6 +221,10 @@ class MathMatrix extends Matrix {
217
221
 
218
222
  }
219
223
  class MatrixTransposed extends Matrix {
224
+ toDOMString() {
225
+ if (this.size()[1] === 2) return `matrix(${[this[0], this[3], this[1], this[4], this[2], this[5]]})`;
226
+ return `matrix(${this.transpose()})`;
227
+ }
220
228
  static transform(B, dots) {
221
229
  var dimention = Math.sqrt(B.length - 1) | 0;
222
230
  if (dots.length % dimention !== 0) throw notMatchLength;
@@ -1,6 +1,14 @@
1
+ var [
2
+ /* 静止 */静止,
3
+ /* 停止 */停止,
4
+ /* 移动 */移动,
5
+ /* 减速 */减速,
6
+ /* 回弹 */回弹,
7
+ /* 停靠 */停靠,
8
+ ] = new Array(6).fill(0).map((_, i) => i);
9
+
1
10
  function inertia(gun) {
2
11
  var spd = new Speed;
3
- var animateIndex = 0;
4
12
  var lastTime = 0;
5
13
  var _decrease = function () {
6
14
  lastTime = Speed.now() - 1;
@@ -13,12 +21,12 @@ function inertia(gun) {
13
21
  if (!spd.length) return;
14
22
  var id = smooth_timer;
15
23
  var now = Speed.now();
16
- var res = decrease(now - lastTime, spd);
24
+ var res = decrease.call(that, now - lastTime, spd);
17
25
  lastTime = now;
18
26
  if (smooth_timer !== id) return;
19
27
  if (res === false || isEmpty(res)) {
20
28
  spd.unset();
21
- animateIndex = 0;
29
+ train.state = 停止;
22
30
  return;
23
31
  }
24
32
  smooth_timer = requestAnimationFrame(_decrease0);
@@ -35,12 +43,12 @@ function inertia(gun) {
35
43
  if (id !== smooth_timer) return;
36
44
  if (false === res) {
37
45
  spd.reset();
38
- animateIndex = 2;
46
+ train.state = 回弹;
39
47
  smooth_timer = requestAnimationFrame(_decrease);
40
48
  return;
41
49
  }
42
50
  if (decrease && args.filter(a => Math.abs(a) > 1).length === 0) {
43
- animateIndex = 2;
51
+ train.state = 回弹;
44
52
  smooth_timer = requestAnimationFrame(_decrease);
45
53
  return;
46
54
  }
@@ -48,30 +56,48 @@ function inertia(gun) {
48
56
  };
49
57
  var spd, smooth_timer, that, decrease;
50
58
  var train = function () {
51
- animateIndex = 1;
52
59
  _cancel();
53
60
  var args = [].slice.call(arguments, 0, arguments.length);
54
61
  spd.write(args);
62
+ if (train.state !== 移动) train.state = 移动;
55
63
  gun.apply(this, args);
56
64
  that = this;
57
65
  };
58
66
  train.smooth = function (d) {
59
67
  _cancel();
60
68
  decrease = d;
61
- if (animateIndex === 1) {
69
+ if (train.state === 移动) {
70
+ train.state = 减速;
62
71
  smooth_timer = requestAnimationFrame(smooth);
63
72
  }
64
- else if (animateIndex === 2) {
73
+ else if (train.state === 回弹 || train.state === 停靠) {
74
+ train.state = 停靠;
65
75
  smooth_timer = requestAnimationFrame(_decrease);
66
76
  }
67
77
  };
68
- train.reset = function () {
78
+ train.state = 静止;
79
+ train.reset = train.start = function () {
69
80
  _cancel();
70
- spd.reset();
81
+ spd.unset();
82
+ train.state = 静止;
71
83
  };
72
84
  return train;
73
85
 
74
86
  }
87
+
88
+ inertia.静止 = 静止;
89
+ inertia.停止 = 停止;
90
+ inertia.移动 = 移动;
91
+ inertia.减速 = 减速;
92
+ inertia.回弹 = 回弹;
93
+ inertia.停靠 = 停靠;
94
+ inertia.STAND = 静止;
95
+ inertia.STOPPING = 停止;
96
+ inertia.MOVING = 移动;
97
+ inertia.SLOWING_DWON = 减速;
98
+ inertia.REBOUNDING = 回弹;
99
+ inertia.DOCKING = 停靠;
100
+
75
101
  class Speed extends Array {
76
102
  cache = [];
77
103
  stamp = 0;
@@ -0,0 +1,41 @@
1
+ /**
2
+ * 为可能正在加载的元素添加then方法
3
+ * 占用onload onerror complete then 共4个属性
4
+ * @param {Element|Object|any} image;
5
+ */
6
+ function awaitable(image) {
7
+ if (image.complete) return image;
8
+ var oks = [];
9
+ var ohs = [];
10
+ var resolved = false,
11
+ errored = false,
12
+ error = null;
13
+ var fire = function () {
14
+ if (resolved || errored) {
15
+ var _oks = oks.splice(0, oks.length);
16
+ var _ohs = ohs.splice(0, ohs.length);
17
+ if (errored) for (var o of _ohs) o(error);
18
+ delete image.then;
19
+ if (resolved) for (var o of _oks) o(image);
20
+ image.then = then;
21
+ }
22
+ };
23
+ var then = image.then = function (ok, oh) {
24
+ if (ok) oks.push(ok);
25
+ if (oh) ohs.push(oh);
26
+ fire();
27
+ };
28
+ image.onload = function () {
29
+ if (resolved || errored) return;
30
+ resolved = true;
31
+ if (!image.complete) image.complete = true;
32
+ fire();
33
+ };
34
+ image.onerror = function (e) {
35
+ if (resolved || errored) return;
36
+ errored = true;
37
+ error = e;
38
+ fire();
39
+ };
40
+ return image;
41
+ }
@@ -74,16 +74,29 @@ function alert() {
74
74
  if (close_timer) clearTimeout(close_timer);
75
75
  }
76
76
  onremove(elem, _onclose);
77
- if (autoclose) {
78
- if (autoclose === true) {
79
- autoclose = text.length * 200 + 400;
80
- } else if (autoclose < 100) {
81
- autoclose = autoclose * 1000;
77
+ var close_timer;
78
+ var waitclose = function (autoclose, deltaTime) {
79
+ if (autoclose) {
80
+ if (autoclose === true) {
81
+ autoclose = text.length * 160 + deltaTime;
82
+ } else if (autoclose < 100) {
83
+ autoclose = autoclose * 1000;
84
+ }
85
+ close_timer = setTimeout(function () {
86
+ remove(elem);
87
+ }, autoclose);
82
88
  }
83
- var close_timer = setTimeout(function () {
84
- remove(elem);
85
- }, autoclose);
86
- }
89
+ };
90
+ waitclose(autoclose, 400)
91
+ elem.setText = function (content, timeout = true) {
92
+ var c = elem.children[0];
93
+ c.innerHTML = content;
94
+ text = content;
95
+ if (timeout) {
96
+ clearTimeout(close_timer);
97
+ waitclose(timeout, -100);
98
+ }
99
+ };
87
100
  alerts.push(elem);
88
101
  popup(elem);
89
102
  return elem;
@@ -1,10 +1,16 @@
1
+ function set(target, k, v) {
2
+ if (target.getAttribute(k) !== v) target.setAttribute(k, v);
3
+ }
4
+ function unset(target, k) {
5
+ if (target.hasAttribute(k)) target.removeAttribute(k);
6
+ }
1
7
  function attr(target, key, value) {
2
8
  if (arguments.length === 3) {
3
- if (value === null) target.removeAttribute(key, value);
4
- else target.setAttribute(key, value);
9
+ if (value === null) unset(target, key);
10
+ else set(target, key, value);
5
11
  } else if (isObject(key)) {
6
12
  for (var k in key) {
7
- target.setAttribute(k, key[k]);
13
+ set(target, k, key[k]);
8
14
  }
9
15
  } else if (isString(key)) {
10
16
  return target.getAttribute(key);
@@ -31,11 +31,13 @@ var keydownhandler = function (event) {
31
31
  on("keydown")(window, keydownhandler);
32
32
  var bindAccesskey = function (btn, k) {
33
33
  if (!keyMap[k]) keyMap[k] = [];
34
- removeFromList(keyMap[k], btn);
35
- keyMap[k].push(btn);
36
- once("remove")(btn, function () {
34
+ on("remove")(btn, function () {
37
35
  removeFromList(keyMap[k], btn);
38
36
  });
37
+ onmounted(btn, function () {
38
+ removeFromList(keyMap[k], btn);
39
+ keyMap[k].push(btn);
40
+ })
39
41
  };
40
42
  var getKeyFromText = function (btn) {
41
43
  var { innerText } = btn;
@@ -52,7 +52,7 @@ var mousedown = function () {
52
52
  });
53
53
  active.call(this);
54
54
  };
55
- var mouseleave = function () {
55
+ var mouseleave = function (event) {
56
56
  removeClass(this, "hover");
57
57
  };
58
58
  var mousemove = function (event) {
@@ -97,7 +97,7 @@ var emitEvent = function (item, event) {
97
97
  if (event.defaultPrevented) return;
98
98
  event.preventDefault(true);
99
99
  if (item.disabled) return;
100
- active(this, item, item, this.$src ? createItemTarget.call(this, item) : this);
100
+ active(this, item, "global", this.$src ? createItemTarget.call(this, item) : this);
101
101
  }
102
102
  function bindGlobalkey(elem, keymap, emit) {
103
103
  if (elem.keyoff) {
@@ -286,7 +286,7 @@ function main() {
286
286
  };
287
287
  var clickMenu = function (event) {
288
288
  switchMenu.cancel();
289
- if (!switchMenu.done) activeMenu.call(this);
289
+ if (!switchMenu.done) page.setFocus(this), activeMenu.call(this);
290
290
  };
291
291
 
292
292
 
@@ -360,6 +360,21 @@ function main() {
360
360
  page.active = function (a) {
361
361
  activeMenu.call(a);
362
362
  };
363
+ if (istoolbar) on("active")(page, function (event) {
364
+ if (event.item !== 'global') return;
365
+ if (page.selected) page.selected.setActive(false);
366
+ var selected = null;
367
+ for (var e of this.children) {
368
+ if (!e.menu) continue;
369
+ selected = e.menu.pathTo(event.value);
370
+ if (selected) break;
371
+ }
372
+ if (!selected) return;
373
+ var menu = selected.pop();
374
+ page.selected = menu;
375
+ if (selected[0]) selected[0].extends(menu.value);
376
+ menu.setActive(true);
377
+ });
363
378
  on("focused")(page, function () {
364
379
  var focused = page.focused;
365
380
  if (page.ispop && page === root_menu) popMenu(focused.menu, focused, false);
package/coms/zimoli/on.js CHANGED
@@ -482,7 +482,13 @@ var invoke = function (event, type, pointerType) {
482
482
  });
483
483
  if (window.addEventListener) {
484
484
  window.addEventListener("touchmove", clickcancel, true);
485
- window.addEventListener("touchstart", clickstart, true);
485
+ window.addEventListener("touchstart", function (event) {
486
+ if (event.touches.length > 1) {
487
+ clickcancel();
488
+ return;
489
+ }
490
+ clickstart.call(this, event);
491
+ }, true);
486
492
  window.addEventListener("touchend", function (event) {
487
493
  if (event.touches.length > 1) return;
488
494
  if (onclick.preventClick) return;
@@ -1 +1 @@
1
- var onmouseleave=on("mouseout");
1
+ var onmouseleave=on("mouseleave");
@@ -122,6 +122,7 @@ appendChild(广告, alink);
122
122
  function picture(url, to = 0, key) {
123
123
 
124
124
  var images = {};
125
+ var cacheLength = 8;
125
126
  var gen = function (index, ratio) {
126
127
  if (index >= urls.length || index < 0) return null;
127
128
  if (images[index] && images[index].url !== urls[index]) {
@@ -133,9 +134,9 @@ function picture(url, to = 0, key) {
133
134
  if (!images[index + 1] && index + 1 < urls.length) {
134
135
  images[index + 1] = create.call(p, urls[index + 1], key, p.index === index);
135
136
  }
136
- if (index >= 5) delete images[index - 5];
137
- if (index + 5 < urls.length) {
138
- delete images[index + 5];
137
+ if (index >= cacheLength) delete images[index - cacheLength];
138
+ if (index + cacheLength < urls.length) {
139
+ delete images[index + cacheLength];
139
140
  }
140
141
  var img = images[index]
141
142
  if (ratio > .75 && img) {
@@ -354,7 +354,8 @@ function picture_(image = document.createElement("div")) {
354
354
 
355
355
  image.rotateTo = function (deg) {
356
356
  rotated = deg;
357
- this.update();
357
+ updatexy();
358
+ shape();
358
359
  };
359
360
  image.rotateBy = function (deg) {
360
361
  var r = rotated;
@@ -381,7 +382,8 @@ function picture_(image = document.createElement("div")) {
381
382
  r += deg;
382
383
  }
383
384
  rotated = r;
384
- this.update(deg === 90 || deg === -90);
385
+ updatexy();
386
+ shape();
385
387
  };
386
388
  on('remove')(image, move.reset);
387
389
  on("contextmenu")(image, function (e) {
@@ -8,6 +8,7 @@ on("keydown.esc.only")(document, function (e) {
8
8
  if (r) {
9
9
  r.blur();
10
10
  remove(r);
11
+ e.preventDefault();
11
12
  }
12
13
  }
13
14
  });
@@ -667,7 +667,6 @@ function renderElement(element, scope = element.$scope, parentScopes = element.$
667
667
  element.renders = element.renders ? [].concat(element.renders) : [];
668
668
  var { ons, copys, attrs, props, binds, context: withContext, ids, once } = element.$struct;
669
669
  if (once) element.renderid = 9;
670
- delete element.$struct;
671
670
  if (binds.src) {
672
671
  element.$src = parseRepeat(binds.src);
673
672
  }
@@ -710,12 +709,14 @@ function renderElement(element, scope = element.$scope, parentScopes = element.$
710
709
  if (replacer.renders) renders = renders.concat(replacer.renders);
711
710
  replacer.renders = renders;
712
711
  if (binds.src) replacer.$src = element.$src;
712
+ delete element.$struct;
713
713
  element = replacer;
714
714
  element.$scope = scope;
715
715
  element.$parentScopes = parentScopes;
716
716
  }
717
717
  }
718
718
  }
719
+ delete element.$struct;
719
720
  if (element.children && element.children.length) renderElement(element.children, scope, parentScopes, once);
720
721
  if (!isFirstRender) return element;
721
722
  var renders = element.renders;
@@ -900,3 +901,6 @@ render.register = function (key, name) {
900
901
  register(key, name);
901
902
  }
902
903
  };
904
+ render.style = function (element, search) {
905
+ return directives.style.call(element, search);
906
+ }
@@ -245,8 +245,9 @@ function slider(autoplay, circle = true) {
245
245
  if (!event.deltaX) return;
246
246
  if (event._target && event._target !== this) return;
247
247
  event._target = outter;
248
+ cancelAnimationFrame(timer_animate);
248
249
  clearTimeout(stop_wheel_timer);
249
- stop_wheel_timer = setTimeout(park, 60);
250
+ stop_wheel_timer = setTimeout(park, 160);
250
251
  var deltax = -event.deltaX;
251
252
  moveDeltaX(deltax, event);
252
253
  });
@@ -203,6 +203,7 @@ function enrichField(f) {
203
203
  }
204
204
  else switch (f.type) {
205
205
  case "text":
206
+ case "html":
206
207
  width = 200;
207
208
  break;
208
209
  case "input":
@@ -358,12 +359,16 @@ function table(elem) {
358
359
  var tds = getTdsOfSameRow(td);
359
360
  setClass(tds, 'x-ing', activeRows);
360
361
  activeRows = tds;
361
- return;
362
362
  }
363
363
  if (!thead) {
364
364
  thead = getThead(table);
365
365
  }
366
- if (!getTargetIn(thead, event.target)) return;
366
+ if (!getTargetIn(thead, event.target)) {
367
+ activeCols.forEach(function (td) {
368
+ removeClass(td, 'y-ing');
369
+ });
370
+ return;
371
+ }
367
372
  var tds = getTargetIn(cellMatchManager, event.target);
368
373
  if (!tds) return;
369
374
  setClass(tds, 'y-ing', activeCols);
@@ -19,13 +19,11 @@ function ybox(generator) {
19
19
  return _box.scrollHeight;
20
20
  };
21
21
  // currentTop
22
- var _scrolledTop = _box.scrollTop;
23
22
  if (!isFunction(_box_Top)) _box_Top = function (top) {
24
23
  if (isNumber(top)) {
25
24
  if (_box.scrollTop !== top) {
26
25
  _box.scrollTop = top;
27
26
  }
28
- _scrolledTop = top;
29
27
  }
30
28
  return _box.scrollTop;
31
29
  };
@@ -40,7 +38,7 @@ function ybox(generator) {
40
38
  var r = true;
41
39
  if (top < 0) {
42
40
  if (useIncrease && _Top <= 0) {
43
- r = increase(top);
41
+ r = increase_half(top, increaser_t.height);
44
42
  }
45
43
  _box.$Top(0);
46
44
  } else if (top + height >= scrollHeight) {
@@ -48,7 +46,7 @@ function ybox(generator) {
48
46
  top = increase_height + scrollHeight - height;
49
47
  }
50
48
  if (useIncrease && top + height >= scrollHeight) {
51
- r = increase(top + height - scrollHeight);
49
+ r = increase_half(top + height - scrollHeight, increaser_b.height);
52
50
  }
53
51
  _box.$Top(top);
54
52
  } else {
@@ -102,6 +100,13 @@ function ybox(generator) {
102
100
  }
103
101
  return true;
104
102
  };
103
+ var increase_half = function (deltaY, targetHeight) {
104
+ if (scrollY.state !== inertia.MOVING) {
105
+ deltaY *= (increase_height - targetHeight) / increase_height;
106
+ if (Math.abs(deltaY) < 1) return false;
107
+ }
108
+ return increase(deltaY);
109
+ }
105
110
  var increase = function (deltaY, minusOnly) {
106
111
  var t_height = increaser_t.height;
107
112
  var b_height = increaser_b.height;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "efront",
3
- "version": "3.25.11",
3
+ "version": "3.25.14",
4
4
  "description": "简化前端开发,优化web性能",
5
5
  "main": "public/efront.js",
6
6
  "directories": {