efront 3.17.2 → 3.18.2

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.
Files changed (58) hide show
  1. package/apps/pivot/api/edit.js +1 -0
  2. package/apps/pivot/api/list.js +20 -0
  3. package/apps/pivot/api.yml +8 -4
  4. package/apps/pivot/dict/edit.js +1 -0
  5. package/apps/pivot/dict/list.js +12 -0
  6. package/apps/pivot/link/chat.js +32 -0
  7. package/apps/pivot/link/chat.less +5 -0
  8. package/apps/pivot/link/list.html +6 -3
  9. package/apps/pivot/link/list.js +23 -2
  10. package/apps/pivot/link/list.less +10 -2
  11. package/apps/pivot/menu.yml +4 -1
  12. package/apps/pivot/proxy/list.js +9 -8
  13. package/apps/pivot/task/list.js +1 -1
  14. package/apps/pivot/user/api.html +2 -0
  15. package/apps/pivot/user/api.js +14 -0
  16. package/apps/pivot/user/api.less +0 -0
  17. package/coms/basic/Speed.js +0 -1
  18. package/coms/basic/assert.js +5 -3
  19. package/coms/basic/lazy.js +19 -9
  20. package/coms/basic/lazy_test.js +62 -0
  21. package/coms/basic/parseURL.js +21 -2
  22. package/coms/basic/refilm_decode.js +4 -2
  23. package/coms/frame/chat.html +19 -0
  24. package/coms/frame/chat.js +60 -0
  25. package/coms/frame/chat.less +177 -0
  26. package/coms/frame/design.html +7 -0
  27. package/coms/frame/design.js +23 -0
  28. package/coms/frame/design.less +17 -0
  29. package/coms/frame/dict.js +21 -0
  30. package/coms/frame/edit.js +1 -1
  31. package/coms/frame/list.js +1 -1
  32. package/coms/frame/route.js +1 -0
  33. package/coms/kugou/song.html +1 -1
  34. package/coms/kugou/song.js +2 -1
  35. package/coms/pivot/pedit.js +3 -3
  36. package/coms/pivot/plist.js +2 -2
  37. package/coms/zimoli/HexEditor.js +1 -0
  38. package/coms/zimoli/HexEditor.less +2 -2
  39. package/coms/zimoli/Item.js +5 -0
  40. package/coms/zimoli/cloneVisible.js +1 -0
  41. package/coms/zimoli/container.js +13 -7
  42. package/coms/zimoli/data.js +26 -12
  43. package/coms/zimoli/design.html +5 -4
  44. package/coms/zimoli/design.less +8 -3
  45. package/coms/zimoli/drag.js +1 -1
  46. package/coms/zimoli/field.html +1 -1
  47. package/coms/zimoli/grid.js +69 -19
  48. package/coms/zimoli/list.js +5 -5
  49. package/coms/zimoli/menu.js +7 -6
  50. package/coms/zimoli/menuItem.js +1 -1
  51. package/coms/zimoli/menuList.js +2 -1
  52. package/coms/zimoli/model.js +4 -3
  53. package/coms/zimoli/render.js +70 -32
  54. package/coms/zimoli/tree.js +1 -1
  55. package/coms/zimoli/vbox.js +2 -2
  56. package/coms/zimoli/zimoli.js +12 -2
  57. package/package.json +1 -1
  58. package/public/efront.js +1 -1
@@ -202,6 +202,21 @@ var resizeView = function (event) {
202
202
  }
203
203
  grid.reshape();
204
204
  };
205
+ var clearResizer = function (grid) {
206
+ var target = grid.editting.target;
207
+ if (target) target.style.zIndex = null;
208
+ var { clientX, clientY } = grid.editting;
209
+ if (clientX) {
210
+ clientX[1].forEach(e => removeClass(e, 'border-right'));
211
+ clientX[2].forEach(e => removeClass(e, 'border-left'));
212
+ }
213
+ if (clientY) {
214
+ clientY[1].forEach(e => removeClass(e, "border-bottom"));
215
+ clientY[2].forEach(e => removeClass(e, "border-top"));
216
+ }
217
+ grid.editting = null;
218
+ };
219
+
205
220
  var resizer = function (event) {
206
221
  var grid = this;
207
222
  if (!grid.direction) return;
@@ -227,24 +242,7 @@ var resizer = function (event) {
227
242
  //右边
228
243
  generateResizeParameters.call(grid, "x", "left", "right", "width", area.right, event, 1, resize);
229
244
  }
230
- grid.editting = resize;
231
- var cancelup = onmouseup(window, function () {
232
- var target = grid.editting.target;
233
- if (target) target.style.zIndex = null;
234
- var { clientX, clientY } = resize;
235
- resize = null;
236
- if (clientX) {
237
- clientX[1].forEach(e => removeClass(e, 'border-right'));
238
- clientX[2].forEach(e => removeClass(e, 'border-left'));
239
- }
240
- if (clientY) {
241
- clientY[1].forEach(e => removeClass(e, "border-bottom"));
242
- clientY[2].forEach(e => removeClass(e, "border-top"));
243
- }
244
- grid.editting = null;
245
-
246
- cancelup();
247
- });
245
+ return grid.editting = resize;
248
246
  };
249
247
  var gridListener = function () {
250
248
  var grid = this;
@@ -261,7 +259,14 @@ var gridListener = function () {
261
259
  /**
262
260
  * 指针按下
263
261
  */
264
- var offmousedown = onmousedown(grid, resizer);
262
+ var offmousedown = onmousedown(grid, function (event) {
263
+ if (!resizer.call(this, event)) return;
264
+ var that = this;
265
+ var cancelup = onmouseup(window, function () {
266
+ clearResizer(that);
267
+ cancelup();
268
+ });
269
+ });
265
270
 
266
271
  var offremove = onremove(grid, function () {
267
272
  offremove();
@@ -359,6 +364,51 @@ var bindToOrderedSpliters = function (split_points, target, value, side) {
359
364
  return split_points;
360
365
  };
361
366
  var grid_prototype = {
367
+ resizeCell(cell, side, delta) {
368
+ side = side.toLowerCase();
369
+ var { left, top, right, bottom } = getScreenPosition(cell);
370
+ var clientX, clientY, targetX, targetY;
371
+ var direction;
372
+ switch (side.toLowerCase()[0]) {
373
+ case "l":
374
+ case "w":
375
+ direction = 'w';
376
+ clientX = left;
377
+ targetX = left + delta;
378
+ targetY = clientY = top + bottom >> 1;
379
+ break;
380
+ case "t":
381
+ case "n":
382
+ direction = 'n';
383
+ clientY = top;
384
+ targetY = top + delta;
385
+ targetX = clientX = left + right >> 1;
386
+ break;
387
+ case "r":
388
+ case "e":
389
+ direction = 'e';
390
+ clientX = right;
391
+ targetX = right + delta;
392
+ targetY = clientY = left + right >> 1;
393
+
394
+ break;
395
+ case "b":
396
+ case "s":
397
+ direction = 's';
398
+ clientX = bottom;
399
+ targetY = bottom + delta;
400
+ targetX = clientX = left + right >> 1;
401
+ break;
402
+ default:
403
+ throw new Error("参数不支持", side);
404
+ }
405
+ this.direction = direction;
406
+ var e = resizer.call(this, { clientX, clientY, target: cell });
407
+ if (!e) return;
408
+ resizeView.call(this, { clientX: targetX, clientY: targetY, target: cell });
409
+ clearResizer(this);
410
+ this.direction = '';
411
+ },
362
412
  setGrid(breakpoints, bounds) {
363
413
  var grid = this;
364
414
  if (!bounds) {
@@ -379,12 +379,12 @@ function ylist(container, generator, $Y) {
379
379
  if (deltay >= delta) {
380
380
  return false;
381
381
  }
382
- if (deltay < 1) y = target_y;
383
- else if (deltay > count || deltay > 3) {
384
- y = last_y + Math.max(2 * (target_y > last_y ? .8 : -.8));
385
- }
382
+ if (deltay < 2) y = target_y;
386
383
  else {
387
- y = (target_y + last_y) / 2;
384
+ var speed = Math.abs(spd.read()[0]);
385
+ if (speed < 1) speed = 1;
386
+ if (deltay < 3) speed = .5;
387
+ y = last_y + (target_y > last_y ? speed : -speed);
388
388
  }
389
389
  list.Top(y);
390
390
  if (target_y === y) {
@@ -48,19 +48,20 @@ var getArrayNodes = function (elem) {
48
48
  var nodeName = node.children.length > 1 ? node.children[0].innerHTML : node.innerHTML;
49
49
  deep++;
50
50
  if (nodeName) {
51
- nodes.push({
51
+ nodes.push(new Item({
52
52
  name: nodeName,
53
53
  tab: deep,
54
54
  href: node.getAttribute("path") || node.getAttribute("href"),
55
55
  class: node.className,
56
56
  closed: true
57
- });
57
+ }));
58
58
  }
59
59
  var index = nodes.length - 1;
60
60
  if (node.children.length > 1) {
61
61
  [].forEach.call(node.children[1].children, run);
62
62
  }
63
- nodes[index].children = nodes.splice(index + 1, nodes.length - index);
63
+ nodes[index].push.apply(nodes[index], nodes.splice(index + 1, nodes.length - index));
64
+ nodes[index].children = nodes[index];
64
65
  deep--;
65
66
  };
66
67
  [].forEach.call(elem.children, run);
@@ -93,7 +94,7 @@ var getTreeNodes = function (elem) {
93
94
  var emitEvent = function (item, event) {
94
95
  event.preventDefault(true);
95
96
  if (item.disabled) return;
96
- active(this, item, item, createItemTarget.call(this, item));
97
+ active(this, item, item, this.$src ? createItemTarget.call(this, item) : this);
97
98
  }
98
99
  function bindGlobalkey(elem, keymap, emit) {
99
100
  if (elem.keymap) {
@@ -194,8 +195,8 @@ function main(elem, mode) {
194
195
  case "y":
195
196
  case "vertical":
196
197
  if (!direction) mode = "vertical", direction = 'y';
197
- var emit = function (item) {
198
- active(elem, item.value, item, createItemTarget.call(elem, item.value));
198
+ var emit = function (item, target) {
199
+ active(elem, item.value, item, elem.$src ? createItemTarget.call(elem, item.value) : target);
199
200
  };
200
201
  if ("$src" in elem) {
201
202
  getGenerator(elem, 'menu-item');
@@ -17,7 +17,7 @@ function main(elem, scope, hasIcon) {
17
17
  else {
18
18
  item.removeAttribute("disabled");
19
19
  }
20
- render(item.children, scope, hasIcon instanceof Array ? hasIcon : [{ useIcon: hasIcon, hasIcon, name, icon }], false);
20
+ render(item.children, scope, hasIcon instanceof Array ? hasIcon : [{ useIcon: hasIcon, hasIcon, name, icon }], 0);
21
21
  if (scope.line) item.setAttribute("line", ''), on("click")(item, preventDefault);
22
22
  if (scope.hotkey) bindAccesskey(item, scope.hotkey);
23
23
  return item;
@@ -286,6 +286,7 @@ function main(page, items, active, direction = 'y') {
286
286
  };
287
287
  var $scope = {
288
288
  "menu-item"(e, s) {
289
+ if (e && s === e.$scope) s = itemName ? s[itemName] : s.menu;
289
290
  var a = button(
290
291
  menuItem(e, s.value, this.hasIcon)
291
292
  );
@@ -293,7 +294,7 @@ function main(page, items, active, direction = 'y') {
293
294
  page.firstMenu = a;
294
295
  page.total = items.length;
295
296
  }
296
- a.menu = s.menu;
297
+ a.menu = s;
297
298
  return a;
298
299
  },
299
300
  menus: items,
@@ -212,9 +212,9 @@ function main(elem) {
212
212
  if (create) {
213
213
  var e = create(elem, data, field_ref);
214
214
  if (isNode(e)) {
215
- appendChild(elem, e);
215
+ if (e !== elem) appendChild(elem, e);
216
216
  }
217
- else {
217
+ else if (!isEmpty(e)) {
218
218
  elem.innerHTML = e;
219
219
  }
220
220
  return;
@@ -222,6 +222,7 @@ function main(elem) {
222
222
  elem.innerHTML = '<span ng-bind=get()></span>';
223
223
  render(elem, {
224
224
  get() {
225
+ if (!field.key) return;
225
226
  var value = seek(data, field.key);
226
227
  if (field.options) {
227
228
  if (!field.optionsMap) {
@@ -243,7 +244,7 @@ function main(elem) {
243
244
  }
244
245
  } else {
245
246
  var create = field_type === "function" ? field_editor : constructors[field_type];
246
- var ipt = create ? create(elem, field_ref) : input();
247
+ var ipt = create ? create(elem, field_ref) : field.key ? input() : null;
247
248
 
248
249
  if (ipt) {
249
250
  if (ipt !== elem) appendChild(elem, ipt);
@@ -1,17 +1,26 @@
1
1
  var hasOwnProperty = {}.hasOwnProperty;
2
2
  var renderElements = Object.create(null);
3
3
  var presets = Object.create(null);
4
+ var createTemplateNodes = function (text) {
5
+ var node = document.createElement(this.parentNode.tagName || "div");
6
+ node.innerHTML = text;
7
+ remove(this.with);
8
+ this.with = [].slice.call(node.childNodes, 0);
9
+ appendChild.after(this, this.with);
10
+ renderElement(this.with, this.$scope, this.$parentScopes, this.renderid === 9);
11
+ };
4
12
  presets.template = function (t) {
5
13
  var comment = document.createComment('template');
6
14
  comment.$scope = t.$scope;
7
15
  comment.$parentScopes = t.$parentScopes;
8
- once("append")(comment, function () {
9
- var node = document.createElement(comment.parentNode.tagName || "div");
10
- node.innerHTML = t.innerHTML;
11
- comment.with = [].slice.call(node.childNodes, 0);
12
- appendChild.after(comment, comment.with);
13
- renderElement(comment.with, comment.$scope, comment.$parentScopes);
14
- });
16
+ if (!t.innerHTML) {
17
+ care(comment, createTemplateNodes)
18
+ }
19
+ else {
20
+ once("append")(comment, function () {
21
+ createTemplateNodes.call(comment, t.innerHTML);
22
+ });
23
+ }
15
24
  return comment;
16
25
  };
17
26
  window.renderElements = renderElements;
@@ -20,8 +29,11 @@ var renderidClosed = 0;
20
29
  var addRenderElement = function () {
21
30
  var element = this;
22
31
  if (!isNode(element)) return;
23
- if (element.renderid < 10 && element.renderid > 0) element.renderid = ++renderidOffset;
24
- renderElements[element.renderid] = element;
32
+ if (element.renderid !== 9) {
33
+ // 只渲染一次
34
+ if (element.renderid < 10 && element.renderid > 0) element.renderid = ++renderidOffset;
35
+ renderElements[element.renderid] = element;
36
+ }
25
37
  rebuild(element);
26
38
  };
27
39
  var removeRenderElement = function () {
@@ -78,12 +90,19 @@ var createGetter = function (search, isprop = true) {
78
90
  var initialComment = function (renders, type, expression) {
79
91
  var comment = document.createComment(`${type} ${expression}`);
80
92
  comment.renders = renders;
81
- comment.renderid = ++renderidOffset;
82
- onappend(comment, addRenderElement);
83
- onremove(comment, removeRenderElement);
84
93
  appendChild.after(this, comment);
85
94
  if (!/if/i.test(type)) remove(this);
86
- rebuild(comment);
95
+ if (!this.$struct.once) {
96
+ comment.renderid = ++renderidOffset;
97
+ onmounted(comment, addRenderElement);
98
+ onremove(comment, removeRenderElement);
99
+ if (isMounted(comment) || eagermount) rebuild(comment);
100
+ }
101
+ else {
102
+ comment.renderid = 9;
103
+ rebuild(comment);
104
+ remove(comment);
105
+ }
87
106
  return comment;
88
107
  };
89
108
  var parseRepeat = function (expression) {
@@ -442,7 +461,7 @@ var directives = {
442
461
  } else if (/^(select|input|textarea)$/i.test(this.tagName) || "value" in this) {
443
462
  this.renders.push(setter || function () {
444
463
  var value = getter();
445
- if (value === undefined) value = "";
464
+ if (isEmpty(value)) value = "";
446
465
  if (deepEqual(oldValue, value)) return;
447
466
  oldValue = value;
448
467
  if (this.value !== value) this.value = value;
@@ -599,17 +618,17 @@ function getFromScopes(key, scope, parentScopes) {
599
618
  }
600
619
  }
601
620
 
602
- function renderElement(element, scope = element.$scope, parentScopes = element.$parentScopes, eager) {
621
+ function renderElement(element, scope = element.$scope, parentScopes = element.$parentScopes, once) {
603
622
  if (!isNode(element) && element.length) {
604
623
  return [].concat.apply([], element).map(function (element) {
605
- return renderElement(element, scope, parentScopes);
624
+ return renderElement(element, scope, parentScopes, once);
606
625
  });
607
626
  }
608
627
  if (!isElement(element)) {
609
628
  return element;
610
629
  }
611
630
  if (!isNumber(element.renderid)) {
612
- renderStructure(element, scope, parentScopes);
631
+ renderStructure(element, scope, parentScopes, once);
613
632
  }
614
633
  var elementid = element.getAttribute("renderid") || element.getAttribute("elementid") || element.getAttribute("id");
615
634
  if (elementid) {
@@ -631,7 +650,8 @@ function renderElement(element, scope = element.$scope, parentScopes = element.$
631
650
  if (parentNode.renderid > 1 || isMounted(parentNode)) element.renderid = 2;
632
651
  }
633
652
  element.renders = element.renders ? [].concat(element.renders) : [];
634
- var { ons, copys, attrs, props, binds, context: withContext, ids } = element.$struct;
653
+ var { ons, copys, attrs, props, binds, context: withContext, ids, once } = element.$struct;
654
+ if (once) element.renderid = 9;
635
655
  delete element.$struct;
636
656
  if (binds.src) {
637
657
  element.$src = parseRepeat(binds.src);
@@ -671,7 +691,9 @@ function renderElement(element, scope = element.$scope, parentScopes = element.$
671
691
  }
672
692
  });
673
693
  replacer.renderid = element.renderid;
674
- replacer.renders = element.renders;
694
+ var renders = element.renders;
695
+ if (replacer.renders) renders = renders.concat(replacer.renders);
696
+ replacer.renders = renders;
675
697
  if (binds.src) replacer.$src = element.$src;
676
698
  element = replacer;
677
699
  element.$scope = scope;
@@ -679,8 +701,10 @@ function renderElement(element, scope = element.$scope, parentScopes = element.$
679
701
  }
680
702
  }
681
703
  }
682
- if (element.children && element.children.length) renderElement(element.children, scope, parentScopes);
704
+ if (element.children && element.children.length) renderElement(element.children, scope, parentScopes, once);
683
705
  if (!isFirstRender) return element;
706
+ var renders = element.renders;
707
+ element.renders = [];
684
708
  for (var k in binds) {
685
709
  if (directives.hasOwnProperty(k)) {
686
710
  directives[k].call(element, [withContext, binds[k]])
@@ -698,11 +722,17 @@ function renderElement(element, scope = element.$scope, parentScopes = element.$
698
722
  } catch (e) { }
699
723
  }
700
724
  ons.forEach(([on, key, value]) => on.call(element, key, [withContext, value]));
725
+ if (renders.length) element.renders.push.apply(element.renders, renders);
701
726
  if (element.renders.length) {
702
- onmounted(element, addRenderElement);
703
- onremove(element, removeRenderElement);
704
- if (isMounted(element) || element.renderid > 1) addRenderElement.call(element);
705
- else if (eagermount) rebuild(element);
727
+ if (element.renderid !== 9) {
728
+ onmounted(element, addRenderElement);
729
+ onremove(element, removeRenderElement);
730
+ if (isMounted(element) || element.renderid > 1) addRenderElement.call(element);
731
+ else if (eagermount) rebuild(element);
732
+ }
733
+ else {
734
+ rebuild(element);
735
+ }
706
736
  }
707
737
  if (elementid) scope[elementid] = element;
708
738
  for (var id of ids) {
@@ -710,7 +740,7 @@ function renderElement(element, scope = element.$scope, parentScopes = element.$
710
740
  }
711
741
  return element;
712
742
  }
713
- function renderStructure(element, scope, parentScopes = []) {
743
+ function renderStructure(element, scope, parentScopes = [], once) {
714
744
  // 处理结构流
715
745
  if (parentScopes !== null && !isArray(parentScopes)) {
716
746
  throw new Error('父级作用域链应以数组的类型传入');
@@ -791,25 +821,33 @@ function renderStructure(element, scope, parentScopes = []) {
791
821
  if (!/\-/.test(name) || value === '') {
792
822
  copys.push(attr);
793
823
  }
794
- props[name.replace(/\-(\w)/g, (_, w) => w.toUpperCase())] = value === "" ? true : value;
824
+ var k = name.replace(/\-(\w)/g, (_, w) => w.toUpperCase());
825
+ if (!(k in element)) {
826
+ props[k] = value === "" ? true : value;
827
+ }
828
+ else {
829
+ props[k] = element[k];
830
+ }
795
831
  }
796
832
  }
797
- if (!element.$struct) element.$struct = { ons, copys, binds, attrs: attr1, props, context: withContext, ids };
833
+ if (props["zimoli"] || props["fresh"] || props["once"]) once = true;
834
+ else if (props["refresh"] || props["digest"] || props["mount"]) once = false;
835
+ if (!element.$struct) element.$struct = { ons, copys, binds, attrs: attr1, props, context: withContext, ids, once };
798
836
  if (element.renderid <= -1) createStructure.call(element, types.if, types.repeat, withContext);
799
837
  }
800
838
  var eagermount = false, renderlock = false;
801
839
  function render(element, scope, parentScopes, lazy = true) {
802
840
  var if_top_length = if_top.length;
803
841
  var haslock = false;
842
+ if (isFinite(scope) && arguments.length === 2) lazy = scope, scope = undefined;
843
+ else if (isFinite(parentScopes) && arguments.length === 3) lazy = parentScopes, parentScopes = undefined;
844
+ var renderonce = lazy === 0;
804
845
  if (!renderlock) {
805
846
  haslock = true;
806
847
  renderlock = true;
807
- if (isBoolean(scope) && arguments.length === 2) lazy = +scope, scope = undefined;
808
- else if (isBoolean(parentScopes) && arguments.length === 3) lazy = +parentScopes, parentScopes = undefined;
809
- else lazy = +lazy;
810
- eagermount = !lazy;
848
+ eagermount = !+lazy;
811
849
  }
812
- var e = renderElement(element, scope, parentScopes);
850
+ var e = renderElement(element, scope, parentScopes, renderonce);
813
851
  if (haslock) {
814
852
  renderlock = false;
815
853
  eagermount = false;
@@ -224,7 +224,7 @@ function tree() {
224
224
  _div.refresh();
225
225
  onclick(_div, function (event) {
226
226
  var isClosed = com.isClosed();
227
- if (!active(banner, com.value, com, element.$src ? createItemTarget.call(element, com.value) : _div)) {
227
+ if (!active(banner, com.value, com, banner.$src ? createItemTarget.call(banner, com.value) : _div)) {
228
228
  return;
229
229
  }
230
230
  if (isClosed === com.isClosed() && com.length) {
@@ -84,7 +84,7 @@ function ybox(generator) {
84
84
  var stop = _box.stopY;
85
85
  var stop2 = lazy(function () {
86
86
  scrollY.smooth(stop);
87
- }, 60);
87
+ }, 40);
88
88
  var decrease = function () {
89
89
  var res = _decrease(increaser_t) + _decrease(increaser_b);
90
90
  if (!res) {
@@ -128,7 +128,7 @@ function ybox(generator) {
128
128
  } else {
129
129
  var wheelTime = 0;
130
130
  onmousewheel(_box, function (event) {
131
- if (event.timeStamp - wheelTime > 60 && Math.abs(event.deltaY) < 12) {
131
+ if (event.timeStamp - wheelTime > 40 && Math.abs(event.deltaY) < 12) {
132
132
  wheelTime = event.timeStamp;
133
133
  return;
134
134
  }
@@ -127,7 +127,13 @@ function go(pagepath, args, history_name, oldpagepath) {
127
127
  } else {
128
128
  var { roles, options, id } = getZimoliParams(pagepath);
129
129
  }
130
- if (!pagepath) return true;
130
+ if (!pagepath) {
131
+ if (isNode(history_name)) {
132
+ remove(history_name.activateNode);
133
+ history_name.activate = pagepath;
134
+ }
135
+ return true;
136
+ }
131
137
  setZimoliParams(pagepath, { data: args, from: oldpagepath, options, roles, id });
132
138
  prepare(pagepath, function (res) {
133
139
  if (!res.roles || res.roles === true) res.roles = !!roles;
@@ -594,7 +600,11 @@ function addGlobal(element, name = null, isDestroy) {
594
600
  }
595
601
  global[name] = element;
596
602
  } else if (isNode(name)) {
597
- if (isDestroy) appendChild.insert(name, element);
603
+ if (name.nodeType !== 1) {
604
+ appendChild.after(name, element);
605
+ name.with = [element];
606
+ }
607
+ else if (isDestroy) appendChild.insert(name, element);
598
608
  else appendChild(name, element);
599
609
  } else if (isFunction(name)) {
600
610
  name(element);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "efront",
3
- "version": "3.17.2",
3
+ "version": "3.18.2",
4
4
  "description": "一个开发工具,开放源代码,自带组件库和编译环境,可以用来开发web组件,web应用或nodejs模块,或做为已有代码的加密工具,也可以做为静态页面服务器或跨域中转服务器使用",
5
5
  "main": "public/efront.js",
6
6
  "directories": {