efront 3.21.4 → 3.21.5

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.
@@ -4,7 +4,7 @@ function main(paytypes, price, subject = '网站扫码支付') {
4
4
  page.innerHTML = payment;
5
5
  renderWithDefaults(page, {
6
6
  get paytype() {
7
- return paytype.value;
7
+ return paytype.value || '0';
8
8
  },
9
9
  set paytype(value) {
10
10
  data.patchInstance("paytype", { value }, true);
@@ -7,7 +7,7 @@ var createTemplateNodes = function (text) {
7
7
  remove(this.with);
8
8
  this.with = [].slice.call(node.childNodes, 0);
9
9
  appendChild.after(this, this.with);
10
- renderElement(this.with, this.$scope, this.$parentScopes, this.renderid === 9);
10
+ this.with = renderElement(this.with, this.$scope, this.$parentScopes, this.renderid === 9);
11
11
  };
12
12
  presets.template = function (t) {
13
13
  var comment = document.createComment('template');
@@ -23,7 +23,7 @@ presets.template = function (t) {
23
23
  }
24
24
  return comment;
25
25
  };
26
- window.renderElements = renderElements;
26
+ if (!isProduction) window.renderElements = renderElements;
27
27
  var renderidOffset = 10;
28
28
  var renderidClosed = 0;
29
29
  var addRenderElement = function () {
@@ -87,14 +87,22 @@ var createGetter = function (search, isprop = true) {
87
87
  }
88
88
  return new Function("event", `${withContext}with(this.$scope){${/([\=\(\+\-])/.test(searchContext) ? ret + searchContext : `${ret}${searchContext}.call(this.$scope,event)`}}`);
89
89
  };
90
- var initialComment = function (renders, type, expression) {
90
+ var createComment = function (renders, type, expression) {
91
91
  var comment = document.createComment(`${type} ${expression}`);
92
92
  comment.renders = renders;
93
93
  comment.$scope = this.$scope;
94
+ comment.$struct = this.$struct;
94
95
  comment.$parentScopes = this.$parentScopes;
95
- appendChild.after(this, comment);
96
- if (!/if/i.test(type)) remove(this);
97
- if (!this.$struct.once) {
96
+ if (this.parentNode) {
97
+ appendChild.after(this, comment);
98
+ if (!/^if|^else/i.test(type)) remove(this);
99
+ }
100
+ comment.template = this;
101
+ return comment;
102
+ };
103
+
104
+ var initialComment = function (comment) {
105
+ if (!comment.$struct.once) {
98
106
  comment.renderid = ++renderidOffset;
99
107
  onmounted(comment, addRenderElement);
100
108
  onremove(comment, removeRenderElement);
@@ -105,8 +113,8 @@ var initialComment = function (renders, type, expression) {
105
113
  rebuild(comment);
106
114
  remove(comment);
107
115
  }
108
- return comment;
109
116
  };
117
+
110
118
  var parseRepeat = function (expression) {
111
119
  var reg =
112
120
  // /////////////////////////////////////////// i // r ///////////////////////// o ///// a ///////////////////// t /////
@@ -141,7 +149,6 @@ var parseRepeat = function (expression) {
141
149
  var createRepeat = function (search, id = 0) {
142
150
  // 懒渲染
143
151
  // throw new Error("repeat is not supported! use list component instead");
144
-
145
152
  var [context, expression] = search;
146
153
  var res = parseRepeat(expression);
147
154
  if (!res) throw new Error(`不能识别循环表达式: ${expression} `);
@@ -206,33 +213,15 @@ var createRepeat = function (search, id = 0) {
206
213
  if (clonedElements1[k] !== clonedElements[k]) remove(clonedElements[k]);
207
214
  }
208
215
  clonedElements = clonedElements1;
216
+ this.with = cloned;
209
217
  }];
210
- if (this.parentNode) {
211
- initialComment.call(this, renders, 'repeat', expression);
212
- } else {
213
- once("append")(this, initialComment.bind(this, renders, "repeat", expression));
214
- }
215
- };
216
- var comment = function (elements) {
217
- for (var cx = elements.length - 2; cx > 1; cx -= 2) {
218
- var e = elements[cx];
219
- if (e.previousSibling === this) var c = this;
220
- else {
221
- var c = document.createComment('else' + (cx < elements.length - 2 ? "if .." : ''));
222
- e.parentNode.insertBefore(c, e);
223
- }
224
- elements.splice(cx, 0, c);
225
- remove(e);
226
- }
218
+ var comment = createComment.call(this, renders, 'repeat', expression);
219
+ initialComment(comment);
220
+ return comment;
227
221
  };
228
222
  var initIf = function (ifs) {
229
223
  for (var s of ifs) {
230
- comment(s);
231
- if (s.parent) {
232
- initialComment.call(s[0], s.renders, "if", s.comment);
233
- } else {
234
- once("append")(s[0], initialComment.bind(s[0], s.renders, "if", s.comment));
235
- }
224
+ initialComment(s[0]);
236
225
  }
237
226
  };
238
227
  var createIf = function (search, id = 0) {
@@ -246,7 +235,7 @@ var createIf = function (search, id = 0) {
246
235
  elements.comment = search[1];
247
236
  elements.renders = [function () {
248
237
  var shouldMount = -1;
249
- for (var cx = 0, dx = elements.length; cx < dx; cx += 3) {
238
+ for (var cx = 0, dx = elements.length; cx < dx; cx += 2) {
250
239
  var getter = elements[cx + 1];
251
240
  if (!getter || getter()) {
252
241
  shouldMount = cx;
@@ -255,21 +244,23 @@ var createIf = function (search, id = 0) {
255
244
  }
256
245
  if (savedValue === shouldMount) return;
257
246
  savedValue = shouldMount;
258
- for (var cx = 0, dx = elements.length; cx < dx; cx += 3) {
259
- var element = elements[cx];
247
+ for (var cx = 0, dx = elements.length; cx < dx; cx += 2) {
248
+ var c = elements[cx];
260
249
  if (cx === shouldMount) {
261
- appendChild.after(cx > 0 ? elements[cx - 1] : this, element);
262
- if (element.renderid < 0) {
263
- element.renderid = id;
264
- elements[cx] = render(element, this.$scope, this.$parentScopes);
250
+ var e = c.template;
251
+ appendChild.after(c, e);
252
+ if (e.renderid < 0) {
253
+ e.renderid = id;
254
+ c.template = render(e, this.$scope, this.$parentScopes);
265
255
  }
266
256
  }
267
257
  else {
268
- remove(element);
258
+ remove(c.template);
269
259
  }
270
260
  }
271
261
 
272
262
  }];
263
+ return elements[0] = createComment.call(element, elements.renders, 'if', elements.comment);
273
264
  };
274
265
  var parseIfWithRepeat = function (ifExpression, repeatExpression) {
275
266
  var repeater = parseRepeat(repeatExpression);
@@ -350,17 +341,17 @@ var createStructure = function ({ name: ifkey, key, value: ifexp } = {}, { name:
350
341
  }
351
342
  if (before.length > 0) {
352
343
  // 懒渲染
353
- createIf.call(element, [context, before.join("&&")], null);
344
+ return createIf.call(element, [context, before.join("&&")], null);
354
345
  } else {
355
346
  element.removeAttribute(forkey);
356
- createRepeat.call(element, [context, repeat], null);
347
+ return createRepeat.call(element, [context, repeat], null);
357
348
  }
358
349
  };
359
350
 
360
351
  var if_top = [];
361
352
  var structures = {
362
353
  "if"(search) {
363
- createIf.call(this, search);
354
+ return createIf.call(this, search);
364
355
  },
365
356
  "else"(search) {
366
357
  for (var cx = if_top.length - 1; cx >= 0; cx--) {
@@ -374,10 +365,11 @@ var structures = {
374
365
  if (search && search[1]) {
375
366
  var getter = createGetter(search).bind(this);
376
367
  }
377
- top.push(this, getter);
368
+ var comment = createComment.call(this, undefined, search[1] ? 'elseif' : 'else', search[1]);
369
+ top.push(comment, getter);
378
370
  },
379
371
  repeat(search) {
380
- createRepeat.call(this, search);
372
+ return createRepeat.call(this, search);
381
373
  },
382
374
  };
383
375
  structures["else-if"] = structures.elseif = structures.else;
@@ -629,7 +621,7 @@ function getFromScopes(key, scope, parentScopes) {
629
621
 
630
622
  function renderElement(element, scope = element.$scope, parentScopes = element.$parentScopes, once) {
631
623
  if (!isNode(element) && element.length) {
632
- return [].concat.apply([], element).map(function (element) {
624
+ return Array.prototype.slice.call(element, 0, element.length).map(function (element) {
633
625
  return renderElement(element, scope, parentScopes, once);
634
626
  });
635
627
  }
@@ -637,19 +629,20 @@ function renderElement(element, scope = element.$scope, parentScopes = element.$
637
629
  return element;
638
630
  }
639
631
  if (!isNumber(element.renderid)) {
640
- renderStructure(element, scope, parentScopes, once);
641
- }
642
- var elementid = element.getAttribute("renderid") || element.getAttribute("elementid") || element.getAttribute("id");
643
- if (elementid) {
644
- if (scope[elementid]) {
645
- if (scope[elementid] !== element) throw new Error("同一个id不能使用两次:" + elementid);
646
- } else {
647
- scope[elementid] = element;
632
+ let element1 = renderStructure(element, scope, parentScopes, once);
633
+ if (element1 !== element) {
634
+ element = element1;
648
635
  }
636
+ if (!element) return;
649
637
  }
650
- if (element.renderid < 0) {
638
+ if (element.renderid < 0 || element.nodeType !== 1) {
651
639
  return element;
652
640
  }
641
+ var elementid = element.getAttribute("renderid") || element.getAttribute("elementid") || element.getAttribute("id");
642
+ if (elementid) {
643
+ if (scope[elementid] && scope[elementid] !== element) throw new Error("同一个id不能使用两次:" + elementid);
644
+ scope[elementid] = element;
645
+ }
653
646
  var isFirstRender = !element.renderid;
654
647
 
655
648
  if (isFirstRender) {
@@ -842,7 +835,8 @@ function renderStructure(element, scope, parentScopes = [], once) {
842
835
  if (props["zimoli"] || props["fresh"] || props["once"]) once = true;
843
836
  else if (props["refresh"] || props["digest"] || props["mount"]) once = false;
844
837
  if (!element.$struct) element.$struct = { ons, copys, binds, attrs: attr1, props, context: withContext, ids, once };
845
- if (element.renderid <= -1) createStructure.call(element, types.if, types.repeat, withContext);
838
+ if (element.renderid <= -1) return createStructure.call(element, types.if, types.repeat, withContext);
839
+ return element;
846
840
  }
847
841
  var eagermount = false, renderlock = false;
848
842
  function render(element, scope, parentScopes, lazy = true) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "efront",
3
- "version": "3.21.4",
3
+ "version": "3.21.5",
4
4
  "description": "一个开发工具,开放源代码,自带组件库和编译环境,可以用来开发web组件,web应用或nodejs模块,或做为已有代码的加密工具,也可以做为静态页面服务器或跨域中转服务器使用",
5
5
  "main": "public/efront.js",
6
6
  "directories": {