efront 3.25.8 → 3.25.11

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/zimoli/on.js CHANGED
@@ -1,9 +1,28 @@
1
1
  // "use strict";
2
2
  if (document.efronton) return document.efronton;
3
3
  var is_addEventListener_enabled = "addEventListener" in window;
4
+ // Edg 禁用passive原因:无滚动条的元素上纵向滚动时触发整个页面回弹
5
+ // Chrome 禁用passive原因:无滚动条的元素上横向滚动触发浏览器导航
6
+ var supportPassive = false, preventPassive = /Edg|Chrome/.test(navigator.userAgent);
7
+ if (is_addEventListener_enabled) try {
8
+ window.addEventListener('test', null, { get passive() { return supportPassive = true } });
9
+ } catch { }
10
+
11
+ var listenerOptions = [];
12
+ /**
13
+ * @param {EventNeed} eventtype
14
+ */
15
+ var getListenerOption = function (eventtype, k) {
16
+ if (!supportPassive || preventPassive && /wheel$/.test(k)) return eventtype.capture;
17
+ var index = +eventtype.capture | +eventtype.passive << 1;
18
+ if (!listenerOptions[index]) listenerOptions[index] = { capture: eventtype.capture, passive: eventtype.passive };
19
+ return listenerOptions[index];
20
+ };
21
+
4
22
  if ('attachEvent' in document) {
5
23
  is_addEventListener_enabled = false;
6
24
  }
25
+
7
26
  if (!is_addEventListener_enabled) var __call = function (target, context, handler, firstmost) {
8
27
  // use strict 无效的情况
9
28
  if (isEmpty(target)) {
@@ -16,7 +35,7 @@ if (!is_addEventListener_enabled) var __call = function (target, context, handle
16
35
 
17
36
  var handlersMap = {};
18
37
  var changes_key = 'changes';
19
- var eventtypereg = /(?:\.once|\.prevent|\.stop|\.capture|\.self|\.passive|\.[a-z0-9]+)+\.?$/i;
38
+ var eventtypereg = /(?:\.once|\.prevent|\.stop|\.capture|\.self|\.passive|\.only|\.[!-~←↑→↓⇄↵⨉]+)+\.?$/i;
20
39
  var keyCodeMap = {
21
40
  backspace: 8,
22
41
  tab: 9,
@@ -134,24 +153,25 @@ var keyCodeMap = {
134
153
  "\"": 222,
135
154
  bright: 255,
136
155
  };
156
+ class EventNeed {
157
+ once = false;
158
+ stop = false;
159
+ capture = false;
160
+ self = false;
161
+ prevent = false;
162
+ passive = false;
163
+ keyNeed = [];
164
+ keyCode = 0
165
+ };
137
166
  var parseEventTypes = function (eventtypes) {
138
- var types = {
139
- once: false,
140
- stop: false,
141
- capture: false,
142
- self: false,
143
- prevent: false,
144
- passive: false,
145
- keyNeed: [],
146
- keyCode: 0,
147
- };
167
+ var types = new EventNeed;
148
168
  var keyneed = types.keyNeed;
149
169
  eventtypes = eventtypereg.exec(eventtypes);
150
170
  if (eventtypes) eventtypes = eventtypes[0].slice(1);
151
171
  if (eventtypes) {
152
172
  var etypes = eventtypes.split(".");
153
173
  etypes.forEach(t => {
154
- if (t.length === 1) {
174
+ if (t.length === 1 && /^[0-9a-zA-Z]$/.test(t)) {
155
175
  types.keyCode = t.toUpperCase().charCodeAt(0);
156
176
  return;
157
177
  }
@@ -166,7 +186,9 @@ var parseEventTypes = function (eventtypes) {
166
186
  keyneed.push(t);
167
187
  break;
168
188
  case "":
189
+ case "only":
169
190
  if (!types.keyCode) types.keyCode = true;
191
+ types.only = true;
170
192
  break;
171
193
  default:
172
194
  if (isFinite(t)) {
@@ -175,6 +197,9 @@ var parseEventTypes = function (eventtypes) {
175
197
  else if (keyCodeMap[t]) {
176
198
  types.keyCode = keyCodeMap[t];
177
199
  }
200
+ else {
201
+ throw new Error(`绑定事件参数无效${t}`);
202
+ }
178
203
 
179
204
  }
180
205
 
@@ -182,14 +207,25 @@ var parseEventTypes = function (eventtypes) {
182
207
  }
183
208
  return types;
184
209
  }
210
+ /**
211
+ * @param {EventNeed} eventtypes
212
+ * @param {Event} e;
213
+ */
185
214
  function checkKeyNeed(eventtypes, e) {
186
215
  var keyneed = eventtypes.keyNeed;
216
+ var keykeep = {}
187
217
  if (eventtypes.keyNeed) {
188
218
  for (var cx = 0, dx = keyneed.length; cx < dx; cx++) {
189
219
  var key = keyneed[cx];
220
+ keykeep[key] = true;
190
221
  if (!e[key + "Key"]) return false;
191
222
  }
192
223
  }
224
+ if (eventtypes.only) {
225
+ for (var key of ["meta", 'shift', 'ctrl', 'alt']) {
226
+ if (!keykeep[key] && e[key + "Key"]) return false;
227
+ }
228
+ }
193
229
  if (eventtypes.keyCode === true) {
194
230
  for (var cx = 0, dx = keyneed.length; cx < dx; cx++) {
195
231
  var key = keyneed[cx];
@@ -232,7 +268,7 @@ var remove = function (k, hk, [eventtypes, handler, context]) {
232
268
  if (!hs.length && hs.h) {
233
269
  element[hk] = null;
234
270
  if (is_addEventListener_enabled) {
235
- element.removeEventListener(k, hs.h, /1$/.test(hk));
271
+ element.removeEventListener(k, hs.h, getListenerOption(eventtypes, k));
236
272
  } else {
237
273
  if (element["on" + k] === hs.h) element["on" + k] = null;
238
274
  }
@@ -242,6 +278,7 @@ var remove = function (k, hk, [eventtypes, handler, context]) {
242
278
  var broadcast = function (k, hk, event) {
243
279
  var element = this;
244
280
  var handlers = element[hk];
281
+ if (!handlers) console.log(handlers, hk, event, element)
245
282
  if (handlers.length > 1) handlers = handlers.slice();
246
283
  if (event.which === 1 && event.buttons === 0) {
247
284
  // firefox 无按键
@@ -259,7 +296,7 @@ var broadcast = function (k, hk, event) {
259
296
  if (eventtypes.self && event.target !== element) continue;
260
297
  if (!checkKeyNeed(eventtypes, event)) continue;
261
298
  if (eventtypes.stop) event.stopPropagation();
262
- if (eventtypes.passive) event.preventDefault = function () { };
299
+ if (eventtypes.passive && !preventPassive) event.preventDefault = function () { };
263
300
  if (eventtypes.prevent) event.preventDefault();
264
301
  if (handler instanceof Array) {
265
302
  for (var h of handler) {
@@ -305,6 +342,7 @@ var on = document.efronton = function (k) {
305
342
  k = k.replace(eventtypereg, '');
306
343
  var handler_path = k + "handlers";
307
344
  var hk = handler_path + +!!eventtypes.capture;
345
+ if (supportPassive) hk += +!!eventtypes.passive;
308
346
  if (is_addEventListener_enabled) var addhandler = function (context, handler, firstmost = false) {
309
347
  var target = this || context;
310
348
  target = checkroot(target, k);
@@ -313,7 +351,7 @@ var on = document.efronton = function (k) {
313
351
  var h = broadcast.bind(target, k, hk);
314
352
  target[hk] = [];
315
353
  target[hk].h = h;
316
- target.addEventListener(k, h, eventtypes.capture);
354
+ target.addEventListener(k, h, getListenerOption(eventtypes, k));
317
355
  }
318
356
  var listener = [eventtypes, handler, context];
319
357
  append.call(target, k, hk, listener, firstmost);
@@ -459,7 +497,7 @@ var invoke = function (event, type, pointerType) {
459
497
  isClickWithPointer = false;
460
498
  var saved_time = lasttime_click;
461
499
  lasttime_click = event.timeStamp;
462
- if (!need || lasttime_click - saved_time < 60 || onclick.preventClick || touchendFired && !event.touchend) {
500
+ if (!need || lasttime_click - saved_time < 120 || onclick.preventClick || touchendFired && !event.touchend) {
463
501
  // 阻止非人为点击,防止误操作
464
502
  event.preventDefault();
465
503
  event.stopPropagation();
@@ -1,4 +1,4 @@
1
- var _onmousewheel = "onmousewheel" in window || "onmousewheel" in document ? on("mousewheel") : on("DOMMouseScroll");
1
+ var _onmousewheel = "onmousewheel" in window || "onmousewheel" in document ? on("mousewheel.passive") : on("DOMMouseScroll.passive");
2
2
  var addDeltaY = function (event) {
3
3
  if (isNumber(event.deltaY)) return;
4
4
  if (isNumber(event.wheelDeltaY)) {
@@ -1,8 +1,9 @@
1
1
  /**
2
2
  * 弹出层
3
3
  */
4
- onkeydown(document, function (e) {
5
- if (e.which === 27 && rootElements.length) {
4
+ on("keydown.esc.only")(document, function (e) {
5
+ if (e.defaultPrevented) return;
6
+ if (rootElements.length) {
6
7
  var r = rootElements.pop();
7
8
  if (r) {
8
9
  r.blur();
@@ -235,19 +236,16 @@ var _as_yextra = function (global, innerWidth, innerHeight, element, target, poi
235
236
  var zindex = zIndex(0) + 1;
236
237
  css(element, `position:absolute;z-index:${zindex}`);
237
238
  css(_rhomb, { zIndex: zindex });
238
- var release1 = onremove(target, function () {
239
- remove(element);
240
- });
241
- var release2 = onremove(element, function () {
242
- release1();
243
- release2();
244
- remove(_rhomb);
245
- if (document.removeEventListener) {
246
- document.removeEventListener("scroll", reshape, true);
247
- window.removeEventListener("resize", reshape);
248
- }
239
+ onmounted(element, function () {
240
+ var release1 = onremove(target, function () {
241
+ remove(element);
242
+ });
243
+ var release2 = onremove(element, function () {
244
+ release1();
245
+ release2();
246
+ remove(_rhomb);
247
+ });
249
248
  });
250
- global(element, false);
251
249
  var reshape = function () {
252
250
  extend(element.style, element.origin);
253
251
  var position = getScreenPosition(target);
@@ -290,7 +288,6 @@ var _as_yextra = function (global, innerWidth, innerHeight, element, target, poi
290
288
  }
291
289
  var side;
292
290
  if (aimedWidth !== originWidth) {
293
- console.log(originWidth,aimedWidth)
294
291
  css(element, { width: fromOffset(aimedWidth) });
295
292
  }
296
293
  if (position.top + element.offsetHeight + position.height > innerHeight) {
@@ -333,13 +330,11 @@ var _as_yextra = function (global, innerWidth, innerHeight, element, target, poi
333
330
  } else if (_rhomb && !_rhomb.parentNode) {
334
331
  appendChild.before(element, _rhomb)
335
332
  }
336
- }
337
- if (document.addEventListener) {
338
- document.addEventListener("scroll", reshape, true);
339
- window.addEventListener("resize", reshape);
340
- }
341
- reshape();
342
- lazy(reshape)();
333
+ };
334
+ bind("resize")(element, reshape);
335
+ bind("scroll.capture.passive", document)(element, reshape);
336
+ onmounted(element, reshape);
337
+ global(element, false);
343
338
  };
344
339
  var _as_xextra = arriswise(_as_yextra, arguments);
345
340
  var popup_as_single = function (element) {
@@ -97,7 +97,8 @@ var createComment = function (renders, type, expression) {
97
97
  appendChild.after(this, comment);
98
98
  if (!/^if|^else/i.test(type)) remove(this);
99
99
  }
100
- comment.template = this;
100
+ comment.$template = this;
101
+ this.$comment = comment;
101
102
  return comment;
102
103
  };
103
104
 
@@ -247,15 +248,16 @@ var createIf = function (search, id = 0) {
247
248
  for (var cx = 0, dx = elements.length; cx < dx; cx += 2) {
248
249
  var c = elements[cx];
249
250
  if (cx === shouldMount) {
250
- var e = c.template;
251
+ var e = c.$template;
251
252
  appendChild.after(c, e);
252
253
  if (e.renderid < 0) {
253
254
  e.renderid = id;
254
- c.template = render(e, this.$scope, this.$parentScopes);
255
+ e = c.$template = render(e, this.$scope, this.$parentScopes);
256
+ e.$comment = c;
255
257
  }
256
258
  }
257
259
  else {
258
- remove(c.template);
260
+ remove(c.$template);
259
261
  }
260
262
  }
261
263
 
@@ -286,8 +286,10 @@ function slider(autoplay, circle = true) {
286
286
  css(_imageMain, "z-index:0;transform:scale(.92);opacity:0;transition:none");
287
287
  setTimeout(() => css(_imageMain, "transform:scale(1);opacity:1;transition:.2s transform ease-out,.4s opacity"), 0);
288
288
  if (player.ing) play();
289
- return outter;
290
- }, 20);
289
+ }, 20, outter);
290
+ onmounted(outter, function () {
291
+ reshape(current_index);
292
+ });
291
293
  outter.play = function (schedule = player.schedule, _isMiss) {
292
294
  if (isDefined(_isMiss)) {
293
295
  isMiss = _isMiss;
@@ -10,7 +10,7 @@ render(page, {
10
10
  return ele;
11
11
  });
12
12
  var _slider = slider(images, 0 !== +element.getAttribute("circle"));
13
- _slider.go(0).play();
13
+ _slider.play();
14
14
  window.Slider = _slider;
15
15
  return _slider;
16
16
  }
@@ -60,9 +60,11 @@ function ybox(generator) {
60
60
  var increaser_t = document.createElement("insert");
61
61
  addClass(increaser_t, 'y-insert');
62
62
  var increaser_b = increaser_t.cloneNode();
63
+ increaser_b.height = 0;
64
+ increaser_t.height = 0;
63
65
  var increase_height = calcPixel(100);
64
66
  var _decrease = function (increaser, t) {
65
- var height = parseInt(increaser.height);
67
+ var height = increaser.height;
66
68
  if (height > 1) {
67
69
  var scrollTop = _box.$Top();
68
70
  if (scrollTop > 0 && increaser_t === increaser) {
@@ -101,8 +103,8 @@ function ybox(generator) {
101
103
  return true;
102
104
  };
103
105
  var increase = function (deltaY, minusOnly) {
104
- var t_height = increaser_t.height || 0;
105
- var b_height = increaser_b.height || 0;
106
+ var t_height = increaser_t.height;
107
+ var b_height = increaser_b.height;
106
108
  t_height -= deltaY;
107
109
  b_height += deltaY;
108
110
  if (!minusOnly && deltaY < 0 && t_height > 0) {
package/docs/main.js CHANGED
@@ -11,4 +11,7 @@ contextmenu(document, function (event) {
11
11
  }
12
12
  }
13
13
  ]);
14
+ })
15
+ on("beforeunload")(window, function () {
16
+ zimoli.clearHistory();
14
17
  })
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "efront",
3
- "version": "3.25.8",
4
- "description": "一个开发工具,开放源代码,自带组件库和编译环境,可以用来开发web组件,web应用或nodejs模块,或做为已有代码的加密工具,也可以做为静态页面服务器或跨域中转服务器使用",
3
+ "version": "3.25.11",
4
+ "description": "简化前端开发,优化web性能",
5
5
  "main": "public/efront.js",
6
6
  "directories": {
7
7
  "test": "test"