efront 4.4.14 → 4.5.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.
Files changed (60) hide show
  1. package/#/345/233/275/351/231/205/345/214/226.yml +83 -5
  2. package/apps/pivot/api.yml +4 -0
  3. package/apps/pivot/cert/edit.js +1 -0
  4. package/apps/pivot/cert/list.js +9 -0
  5. package/apps/pivot/cert/main.xht +188 -0
  6. package/apps/pivot/cert/orders.xht +232 -0
  7. package/apps/pivot/cert/update.xht +7 -0
  8. package/apps/pivot/menu.yml +1 -0
  9. package/coms/basic/assert.js +40 -16
  10. package/coms/basic/cross_.js +22 -4
  11. package/coms/basic/renderTags.js +23 -0
  12. package/coms/basic/shallowClone.js +8 -0
  13. package/coms/basic/shallowEqual.js +13 -4
  14. package/coms/basic/valid.js +19 -4
  15. package/coms/compile/Javascript.js +25 -12
  16. package/coms/compile//347/264/240/351/246/250.js +2 -1
  17. package/coms/docs/codetext.xht +3 -3
  18. package/coms/frame/chat.js +1 -1
  19. package/coms/frame/edit.html +1 -0
  20. package/coms/frame/edit.js +3 -2
  21. package/coms/kugou/bindScroll.js +1 -1
  22. package/coms/kugou/krc.js +2 -2
  23. package/coms/layer/leftCenter.js +5 -5
  24. package/coms/pivot/acme2.js +290 -0
  25. package/coms/pivot/pedit.js +13 -5
  26. package/coms/pivot/plist.js +12 -5
  27. package/coms/reptile/colored_console.js +5 -17
  28. package/coms/zimoli/appendChild.js +3 -2
  29. package/coms/zimoli/autofocus.js +2 -2
  30. package/coms/zimoli/button.less +5 -3
  31. package/coms/zimoli/checker.js +34 -15
  32. package/coms/zimoli/checker.less +2 -3
  33. package/coms/zimoli/container.js +26 -15
  34. package/coms/zimoli/data.js +124 -169
  35. package/coms/zimoli/field.js +3 -3
  36. package/coms/zimoli/field.less +8 -2
  37. package/coms/zimoli/filterTime.js +39 -8
  38. package/coms/zimoli/fromBase64.js +2 -0
  39. package/coms/zimoli/grid.js +2 -2
  40. package/coms/zimoli/isMounted.js +3 -3
  41. package/coms/zimoli/list.js +5 -5
  42. package/coms/zimoli/maps.js +1 -1
  43. package/coms/zimoli/menuList.js +1 -1
  44. package/coms/zimoli/model.js +61 -8
  45. package/coms/zimoli/on.js +4 -4
  46. package/coms/zimoli/remove.js +3 -3
  47. package/coms/zimoli/render.js +25 -33
  48. package/coms/zimoli/scrollbar.js +54 -19
  49. package/coms/zimoli/scrollbar.less +14 -2
  50. package/coms/zimoli/scrollbar_test.less +1 -0
  51. package/coms/zimoli/select.js +3 -3
  52. package/coms/zimoli/table.js +1 -1
  53. package/coms/zimoli/toBase64.js +16 -6
  54. package/coms/zimoli/view.js +24 -14
  55. package/coms/zimoli/view.less +6 -4
  56. package/coms/zimoli/watch.js +1 -1
  57. package/docs/loader.js +1 -1
  58. package/docs//347/273/204/344/273/266.xht +0 -1
  59. package/package.json +1 -1
  60. package/public/efront.js +1 -1
@@ -185,7 +185,7 @@ function maps(config = {}) {
185
185
  canvas.map.refresh();
186
186
  canvas._default = canvas.map.defaultImage();
187
187
  };
188
- if (canvas.isMounted) reshape();
188
+ if (canvas.$mounted) reshape();
189
189
  else once("append")(canvas, reshape);
190
190
  bind('resize')(canvas, reshape);
191
191
 
@@ -296,7 +296,7 @@ function main() {
296
296
  }
297
297
  return generator(index, item);
298
298
  }, direction);
299
- page.renders.unshift(function () {
299
+ page.$renders.unshift(function () {
300
300
  this.$scope.hasIcon = hasIcon();
301
301
  });
302
302
  page.open = function (a) {
@@ -46,6 +46,36 @@ unmark(checkbox);
46
46
  unmark(swap);
47
47
  unmark(image);
48
48
  unmark(success);
49
+ var renderOption = function (o, index) {
50
+ if (typeof o === 'string') return o;
51
+ if (isFunction(o)) {
52
+ var name = typeof index === 'number' ? o.name : index;
53
+ return `<a href="javascript:;" @click=field.options[${strings.encode(index)}](data)>${name}</a>`
54
+ }
55
+ if (isObject(o)) {
56
+ if (o.href) {
57
+ return `<a href=${strings.encode(o.href)}>${o.name}</a>`;
58
+ }
59
+ return `<a href='javascript:;' @click=field.options[${strings.encode(index)}](data)>${o.name}</a>`
60
+ }
61
+ return o;
62
+ }
63
+ var renderOptions = function (field, data) {
64
+ var { options } = field;
65
+ if (typeof options === 'string') return options;
66
+ if (isFunction(options)) return renderOption(options);
67
+ if (options instanceof Array) {
68
+ return options.map(renderOption).join('');
69
+ }
70
+ else if (isObject(options)) {
71
+ return Object.keys(options).map(k => renderOption(options[k], k)).join('');
72
+ }
73
+ return '';
74
+ }
75
+ var onoff = function () {
76
+ var { data, field } = this;
77
+ data[field.key] = checker.changeValue(data[field.key]);
78
+ };
49
79
  var constructors = {
50
80
  input,
51
81
  swap(e) {
@@ -74,10 +104,19 @@ var constructors = {
74
104
  input(ipt);
75
105
  return ipt;
76
106
  },
107
+ generator(elem) {
108
+ var { data, field } = elem;
109
+ elem.innerHTML = `<a @click="gen()" -if="!data[field.key]">${field.holder || '单击生成'}</a><span -else -bind="data[field.key]"></span>`;
110
+ render(elem, {
111
+ data, field, a: button, async gen() {
112
+ await field.options(data);
113
+ }
114
+ });
115
+ },
77
116
  date() {
78
117
  var elem = document.createElement("input");
79
118
  elem.type = "date";
80
- elem.renders = [function () {
119
+ elem.$renders = [function () {
81
120
  var { data, field } = this.$scope;
82
121
  if (data && field) elem.value = parseDate(data[field.key]);
83
122
  }]
@@ -96,6 +135,11 @@ var constructors = {
96
135
  if (options) img.setAttribute("uploadto", options.uploadto);
97
136
  return img;
98
137
  },
138
+ checker(elem) {
139
+ var { data, field } = elem;
140
+ elem.innerHTML = `<span @click="onoff()"><checker -model=data[field.key]></checker><span -bind='field.holder'></span></span>${renderOptions(field, data)}`;
141
+ render(elem.children, { onoff, checker, data, a: button, field });
142
+ },
99
143
  checkbox({ field }) {
100
144
  var elem = checkbox();
101
145
  cast(elem, field);
@@ -132,7 +176,7 @@ var constructors = {
132
176
  },
133
177
  "repeat"(_, field_type) {
134
178
  var elem = input();
135
- elem.renders = [function () {
179
+ elem.$renders = [function () {
136
180
  var { field, data } = this.$scope;
137
181
  var { status } = this;
138
182
  var valid = this.value === data[field_type];
@@ -157,6 +201,7 @@ var constructors = {
157
201
  }
158
202
  };
159
203
  constructors.price = constructors.money = constructors.number;
204
+ constructors.gen = constructors.generator;
160
205
  var readonly_types = {
161
206
  "date"({ field }, data) {
162
207
  var string = data[field.key];
@@ -164,9 +209,11 @@ var readonly_types = {
164
209
  },
165
210
  "url"({ field }, data) {
166
211
  var href = data[field.key];
167
- var e = anchor2(href, href);
168
- e.target = "_blank";
169
- return e;
212
+ if (href) {
213
+ var e = anchor2(field.holder || href, href);
214
+ e.target = "_blank";
215
+ return e;
216
+ }
170
217
  },
171
218
  "size"({ field }, data) {
172
219
  var f = data[field.key];
@@ -177,13 +224,18 @@ var readonly_types = {
177
224
  t.innerHTML = seek(data, a.field.key);
178
225
  return t;
179
226
  },
227
+ text(e) {
228
+ var { data, field } = e;
229
+ e.innerHTML = data[field.key] ?? '';
230
+ },
180
231
  swap(e, data) {
181
232
  var { field } = e;
182
233
  var v = data[field.key];
183
234
  if (field.options) {
184
235
  if (!field.optionsMap) field.optionsMap = createOptionsMap(field.options);
185
236
  var o = field.optionsMap[v];
186
- if (isObject(o)) return o.name;
237
+ try { e.setAttribute(field.key, v); } catch { }
238
+ if (isObject(o)) return `<s></s>` + o.name;
187
239
  if (isHandled(o)) return o;
188
240
  }
189
241
  if (isEmpty(v)) v = '';
@@ -191,6 +243,7 @@ var readonly_types = {
191
243
  },
192
244
  };
193
245
  readonly_types.anchor = readonly_types.url;
246
+ readonly_types.gen = readonly_types.generator = readonly_types.text;
194
247
  var createOptionsMap = function (options) {
195
248
  if (!isObject(options[0])) return options;
196
249
  var map = Object.create(null);
@@ -293,7 +346,7 @@ function main(elem) {
293
346
  if (!ipt.$scope) {
294
347
  renderModel.call(ipt, field, data);
295
348
  var saved_sataus;
296
- ipt.renders.push(function () {
349
+ ipt.$renders.push(function () {
297
350
  var { valid, status } = this;
298
351
  if (elem.valid !== valid) elem.valid = valid;
299
352
  if (saved_sataus === status) return;
@@ -310,7 +363,7 @@ function main(elem) {
310
363
  on("change")(ipt, copyOptionData);
311
364
  }
312
365
  if ("options_from" in field) {
313
- ipt.renders.push(rebuildOptions);
366
+ ipt.$renders.push(rebuildOptions);
314
367
  }
315
368
  }
316
369
  }
package/coms/zimoli/on.js CHANGED
@@ -263,7 +263,7 @@ var remove = function (k, hk, [eventtypes, handler, context]) {
263
263
  var [e, h, c] = hs[cx];
264
264
  if (h === handler && e === eventtypes && c === context) {
265
265
  hs.splice(cx, 1);
266
- if (k === changes_key) element.needchanges--;
266
+ if (k === changes_key) element.$needchanges--;
267
267
  }
268
268
  }
269
269
  if (!hs.length && hs.h) {
@@ -330,8 +330,8 @@ var append = function (k, hk, listener2, firstmost) {
330
330
  if (h === handler && eventtypes === e && c === context) return;
331
331
  }
332
332
  if (k === changes_key) {
333
- if (!element.needchanges) element.needchanges = 0;
334
- element.needchanges++;
333
+ if (!element.$needchanges) element.$needchanges = 0;
334
+ element.$needchanges++;
335
335
  }
336
336
  if (firstmost) handlers.unshift(listener2);
337
337
  else handlers.push(listener2);
@@ -342,7 +342,7 @@ var on = document.efronton = function (k) {
342
342
  if (handlersMap[on_event_path]) return handlersMap[on_event_path];
343
343
  var eventtypes = parseEventTypes(k);
344
344
  k = k.replace(eventtypereg, '');
345
- var handler_path = k + "handlers";
345
+ var handler_path = "$h_" + k;
346
346
  var hk = handler_path + +!!eventtypes.capture;
347
347
  if (supportPassive) hk += +!!eventtypes.passive;
348
348
  if (is_addEventListener_enabled) var addhandler = function (context, handler, firstmost = false) {
@@ -40,14 +40,14 @@ function hasLeaveStyle(o) {
40
40
  }
41
41
 
42
42
  function _onremove(node, event) {
43
- if (!node || node.isMounted === false) return;
43
+ if (!node || node.$mounted === false) return;
44
44
  var children = node.childNodes;
45
- if (node.isMounted) {
45
+ if (node.$mounted) {
46
46
  if (!event) {
47
47
  event = createEvent("remove");
48
48
  }
49
49
  dispatch(node, event);
50
- node.isMounted = false;
50
+ node.$mounted = false;
51
51
  }
52
52
  if (children) for (var cx = 0, dx = children.length; cx < dx; cx++) {
53
53
  _onremove(children[cx], event);
@@ -71,7 +71,7 @@ var removeRenderElement = function () {
71
71
  function refresh(root) {
72
72
  var rest = [];
73
73
  var body = document.documentElement;
74
- if (root && root.renders) {
74
+ if (root && root.$renders) {
75
75
  for (var k in renderElements) {
76
76
  var element = renderElements[k];
77
77
  if (
@@ -90,8 +90,8 @@ function refresh(root) {
90
90
  if (rest.length) rest.forEach(a => removeRenderElement.call(a));
91
91
  }
92
92
  function rebuild(element) {
93
- if (!element.needchanges) {
94
- element.renders.forEach(a => a.call(element));
93
+ if (!element.$needchanges) {
94
+ element.$renders.forEach(a => a.call(element));
95
95
  return;
96
96
  }
97
97
  var props = {};
@@ -99,7 +99,7 @@ function rebuild(element) {
99
99
  var data = element[key];
100
100
  props[key] = isObject(data) && !isFunction(data) && !isDate(data) && !isNode(data) ? extend(data instanceof Array ? [] : {}, data) : data;
101
101
  });
102
- element.renders.forEach(a => a.call(element));
102
+ element.$renders.forEach(a => a.call(element));
103
103
  var changes = getChanges(element, props);
104
104
  if (changes) {
105
105
  var event = createEvent('changes');
@@ -118,7 +118,7 @@ var createGetter = function (target, search, isprop = true) {
118
118
  };
119
119
  var createComment = function (renders, type, expression) {
120
120
  var comment = document.createComment(`${type} ${expression}`);
121
- comment.renders = renders;
121
+ comment.$renders = renders;
122
122
  comment.$scope = this.$scope;
123
123
  comment.$struct = this.$struct;
124
124
  comment.$parentScopes = this.$parentScopes;
@@ -294,7 +294,7 @@ var createIf = function (search, id = 0) {
294
294
  elements.comment = search;
295
295
  if (this.$struct.repeat) id = -3;
296
296
 
297
- elements.renders = [function () {
297
+ elements.$renders = [function () {
298
298
  var shouldMount = -1;
299
299
  for (var cx = 0, dx = elements.length; cx < dx; cx += 2) {
300
300
  var getter = elements[cx + 1];
@@ -322,7 +322,7 @@ var createIf = function (search, id = 0) {
322
322
  }
323
323
 
324
324
  }];
325
- return elements[0] = createComment.call(element, elements.renders, 'if', elements.comment);
325
+ return elements[0] = createComment.call(element, elements.$renders, 'if', elements.comment);
326
326
  };
327
327
  var parseIfWithRepeat = function (ifExpression, repeatExpression) {
328
328
  var repeater = parseRepeat(repeatExpression);
@@ -443,7 +443,7 @@ var createBinder = function (binder) {
443
443
  return function (search) {
444
444
  var getter = createGetter(this, `(${search})`);
445
445
  var oldValue;
446
- this.renders.push(function () {
446
+ this.$renders.push(function () {
447
447
  var value = getter(this);
448
448
  if (shallowEqual(value, oldValue)) return;
449
449
  var oldv = oldValue;
@@ -465,19 +465,11 @@ var createBinder = function (binder) {
465
465
  var src2 = function (search) {
466
466
  var getter = createGetter(this, search);
467
467
  var savedValue;
468
- this.renders.push(function () {
468
+ this.$renders.push(function () {
469
469
  var origin = getter(this);
470
- var temp = origin;
471
- if (origin instanceof Array) {
472
- temp = extend([], origin);
473
- } else if (isObject(origin)) {
474
- temp = extend({}, origin);
475
- } else if (!isHandled(origin)) {
476
- temp = "";
477
- }
470
+ var temp = shallowClone(origin, 1);
478
471
  if (isHandled(savedValue)) {
479
- var changes = getChanges(temp, savedValue);
480
- if (!changes) return;
472
+ if (shallowEqual(temp, savedValue, 1)) return;
481
473
  }
482
474
  else {
483
475
  if (isSame(savedValue, temp)) return;
@@ -533,16 +525,16 @@ var directives = {
533
525
  this[key] = value;
534
526
  };
535
527
  if (/^input$/i.test(target.tagName) && /^checkbox$/i.test(target.type) || /^checkbox$/i.test(target.tagName)) {
536
- this.renders.push(setter || setter2.bind(target, 'checked'));
528
+ this.$renders.push(setter || setter2.bind(target, 'checked'));
537
529
  var change = getstr || "this.checked";
538
530
  } else if (("value" in target || target.getValue instanceof Function) && target.setValue instanceof Function) {
539
- this.renders.push(setter);
531
+ this.$renders.push(setter);
540
532
  var change = getstr || "this.value";
541
533
  } else if (/^(select|input|textarea)$/i.test(target.tagName) || "value" in target) {
542
- this.renders.push(setter || setter2.bind(target, 'value'));
534
+ this.$renders.push(setter || setter2.bind(target, 'value'));
543
535
  var change = getstr || "this.value";
544
536
  } else {
545
- this.renders.push(setter || function () {
537
+ this.$renders.push(setter || function () {
546
538
  var value = getter(this);
547
539
  if (value === undefined) value = "";
548
540
  if (deepEqual(oldValue, value)) return;
@@ -569,7 +561,7 @@ var directives = {
569
561
  var getter = createGetter(this, `(${search})`);
570
562
  var generatedClassNames = {};
571
563
  var oldValue;
572
- this.renders.push(function () {
564
+ this.$renders.push(function () {
573
565
  var className = getter(this);
574
566
  if (deepEqual(oldValue, className)) return;
575
567
  oldValue = className;
@@ -608,7 +600,7 @@ var binders = {
608
600
  attr = attr.replace(/\-(\w)/g, (_, w) => w.toUpperCase());
609
601
  var getter = createGetter(this, search);
610
602
  var oldValue;
611
- this.renders.push(function () {
603
+ this.$renders.push(function () {
612
604
  var value = getter(this);
613
605
  if (deepEqual(value, oldValue)) return;
614
606
  oldValue = value;
@@ -620,7 +612,7 @@ var binders = {
620
612
  ""(attr, search) {
621
613
  var getter = createGetter(this, search);
622
614
  var oldValue;
623
- this.renders.push(function () {
615
+ this.$renders.push(function () {
624
616
  var value = getter(this);
625
617
  if (deepEqual(value, oldValue)) return;
626
618
  oldValue = value;
@@ -720,8 +712,8 @@ function getFromScopes(key, scope, parentScopes) {
720
712
  }
721
713
 
722
714
  function renderRest(element, struct, replacer = element) {
723
- var renders = element.renders;
724
- element.renders = [];
715
+ var renders = element.$renders;
716
+ element.$renders = [];
725
717
  var { binds, attrs, props } = struct;
726
718
  for (var k in binds) {
727
719
  if (k === 'src') continue;
@@ -741,7 +733,7 @@ function renderRest(element, struct, replacer = element) {
741
733
  } catch (e) { }
742
734
  }
743
735
  if (binds.src) directives.src.call(element, binds.src);
744
- if (renders && renders.length) element.renders.push.apply(element.renders, renders);
736
+ if (renders && renders.length) element.$renders.push.apply(element.$renders, renders);
745
737
  }
746
738
 
747
739
  function renderElement(element, scope = element.$scope, parentScopes = element.$parentScopes, once) {
@@ -786,7 +778,7 @@ function renderElement(element, scope = element.$scope, parentScopes = element.$
786
778
  if (parentNode) {
787
779
  if (parentNode.$renderid > 1 || isMounted(parentNode)) element.$renderid = 2;
788
780
  }
789
- element.renders = element.renders ? [].concat(element.renders) : [];
781
+ element.$renders = element.$renders || element.renders ? [].concat(element.$renders || [], element.renders || []) : [];
790
782
  var { copys, binds, once } = element.$struct;
791
783
  if (once) element.$renderid = 9;
792
784
  if (binds.src) {
@@ -823,8 +815,8 @@ function renderElement(element, scope = element.$scope, parentScopes = element.$
823
815
  if (!isFirstRender) return element;
824
816
  renderRest(element, element.$struct, replacer);
825
817
  if (isNode(replacer) && replacer !== element) {
826
- if (!replacer.renders) replacer.renders = [];
827
- replacer.renders.push.apply(replacer.renders, element.renders);
818
+ if (!replacer.$renders) replacer.$renders = [];
819
+ replacer.$renders.push.apply(replacer.$renders, element.$renders);
828
820
  if (replacer.$struct && replacer.$struct !== element.$struct) {
829
821
  element.$struct.ons.forEach(([on, key, value]) => on.call(element, replacer, key, value));
830
822
  }
@@ -833,7 +825,7 @@ function renderElement(element, scope = element.$scope, parentScopes = element.$
833
825
  else {
834
826
  element.$struct.ons.forEach(([on, key, value]) => on.call(element, element, key, value));
835
827
  }
836
- if (element.renders.length) {
828
+ if (element.$renders.length) {
837
829
  if (element.$renderid !== 9) {
838
830
  onmounted(element, addRenderElement);
839
831
  onremove(element, removeRenderElement);
@@ -65,6 +65,13 @@ var scrollbary = function () {
65
65
  css(thumb, { top: targetY });
66
66
  dispatch(target, "change");
67
67
  }
68
+ var tt = target.target;
69
+ if (tt) {
70
+ var { Height, height } = getTargetHeight(tt);
71
+ var top = targetY * (Height - height) / (target.clientHeight - thumb.offsetHeight);
72
+ setTargetTop(tt, top);
73
+ }
74
+
68
75
  };
69
76
 
70
77
  var mouseup = function () {
@@ -141,29 +148,30 @@ var scrollbary = function () {
141
148
  return { Height, height };
142
149
  };
143
150
 
144
- function bindTarget(_container, followResize = _container) {
145
- var _scrollbar = this;
146
- _container.with = _scrollbar;
147
- _scrollbar.target = _container;
148
- onmounted(_container, _scrollbar.reshape);
149
- on("scroll")(_container, function () {
150
- var top = getTargetTop(_container);
151
+ function scrollbar(elem) {
152
+ var onscroll = function () {
153
+ var top = getTargetTop(this);
151
154
  _scrollbar.scrollTo(top);
152
155
  _scrollbar.autoshow();
153
- });
154
- on("change")(_scrollbar, function () {
156
+ };
157
+ var onchange = function () {
155
158
  var top = _scrollbar.$Top();
156
- setTargetTop(_container, top);
157
- });
158
- if (followResize) on("resize")(followResize, _scrollbar.reshape);
159
- }
160
- function scrollbar(elem) {
159
+ setTargetTop(this, top);
160
+ };
161
+ function bindTarget(_container, followResize = _container) {
162
+ _container.with = _scrollbar;
163
+ _scrollbar.target = _container;
164
+ onmounted(_container, _scrollbar.reshape);
165
+ on("scroll")(_container, onscroll);
166
+ on("change")(_scrollbar, onchange);
167
+ if (followResize) resizingList.set(followResize, _scrollbar.reshape);
168
+ }
161
169
  var _scrollbar = elem || document.createElement("scrollbar");
162
- _scrollbar.reshape = function () {
170
+ _scrollbar.reshape = lazy(function () {
163
171
  var _container = _scrollbar.target;
164
172
  var { Height, height } = getTargetHeight(_container);
165
173
  reshape.call(_scrollbar, Height, height);
166
- };
174
+ });
167
175
  _scrollbar.scrollTo = scrollTo;
168
176
  var _handler = document.createElement("scrollbar-thumb");
169
177
  _handler.className = "thumb";
@@ -192,16 +200,43 @@ var scrollbary = function () {
192
200
  }
193
201
  var scrollbar_y = scrollbary();
194
202
  var scrollbar_x = arriswise(scrollbary, arguments)();
195
- function main(direction) {
203
+ var isBody = function (elem) {
204
+ return hasClass(elem, 'body') || elem.hasAttribute('body');
205
+ }
206
+ function main(elem) {
207
+ var direction, bar, target;
208
+ if (typeof elem === 'string') {
209
+ direction = elem;
210
+ elem = null;
211
+ }
212
+ else if (isElement(elem)) {
213
+ direction = elem.tagName;
214
+ var $struct = elem.$struct;
215
+ if ($struct) {
216
+ if ($struct.props?.target);
217
+ else if (isBody(elem.previousElementSibling)) {
218
+ target = elem.previousElementSibling;
219
+ }
220
+ else if (isBody(elem.nextElementSibling)) {
221
+ target = elem.nextElementSibling;
222
+ }
223
+ }
224
+ else if (!/^(\w*\-?)?scroll/i.test(direction)) target = elem, elem = null;
225
+ }
226
+ else {
227
+ elem = null;
228
+ }
196
229
  var bar, target;
197
230
  if (isElement(direction)) {
198
231
  target = direction;
199
232
  direction = target.tagName;
200
233
  }
201
234
  if (/^[xh]/i.test(direction)) {
202
- bar = scrollbar_x();
235
+ bar = scrollbar_x(elem);
236
+ bar.setAttribute('x', '');
203
237
  } else {
204
- bar = scrollbar_y();
238
+ bar = scrollbar_y(elem);
239
+ bar.setAttribute('y', '');
205
240
  }
206
241
  if (target) bar.bindTarget(target);
207
242
  return bar;
@@ -1,12 +1,24 @@
1
1
  & {
2
2
  position: absolute;
3
3
  width: 6px;
4
- background-color: rgba(0, 0, 0, .1);
5
4
  border-radius: 7px;
6
5
  height: 100px;
7
6
  border-left: 3px solid transparent;
8
7
 
9
- &:hover {
8
+ &[x],
9
+ &.x {
10
+ left: 0;
11
+ bottom: 0;
12
+ }
13
+
14
+ &[y],
15
+ &.y {
16
+ top: 0;
17
+ right: 0;
18
+ }
19
+
20
+ &:hover,
21
+ &:active {
10
22
  >.thumb {
11
23
  opacity: 1 !important;
12
24
  overflow: visible;
@@ -1,4 +1,5 @@
1
1
  & {
2
+ background-color: rgba(0, 0, 0, .1);
2
3
  >div {
3
4
  @mask-color: #ccc;
4
5
  width: 200px;
@@ -219,10 +219,10 @@ function select(target, list, removeOnSelect, direction) {
219
219
  }
220
220
  else _remove();
221
221
  };
222
- if (!target.renders) {
223
- target.renders = [];
222
+ if (!target.$renders) {
223
+ target.$renders = [];
224
224
  }
225
- target.renders.push(setIcon);
225
+ target.$renders.push(setIcon);
226
226
  onclick(target, mousedown);
227
227
  return target;
228
228
  }
@@ -506,7 +506,7 @@ function table(elem) {
506
506
  },
507
507
  thead(t) {
508
508
  var tr = document.createElement('thead');
509
- tr.renders = [function () {
509
+ tr.$renders = [function () {
510
510
  resizeT(this.firstChild)
511
511
  }];
512
512
  css(tr, { display: 'block' });
@@ -1,14 +1,24 @@
1
1
  var encoding = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
2
- function toBase64(input) {
2
+ function toBase64(input, url) {
3
+ var encoding1 = encoding;
4
+ if (url) {
5
+ encoding1[62] = "-";
6
+ encoding1[63] = "_";
7
+ }
3
8
  for (var cx = 0, block, output = [], dx = input.length; cx < dx;) {
4
9
  block = input[cx++] << 16 | input[cx++] << 8 | input[cx++];
5
10
  output.push(
6
- encoding[block >> 18],
7
- encoding[block >> 12 & 0b111111],
8
- encoding[block >> 6 & 0b111111],
9
- encoding[block & 0b111111]
11
+ encoding1[block >> 18],
12
+ encoding1[block >> 12 & 0b111111],
13
+ encoding1[block >> 6 & 0b111111],
14
+ encoding1[block & 0b111111]
10
15
  );
11
16
  }
12
- for (cx = output.length + dx - cx, dx = output.length; cx < dx; cx++) output[cx] = '=';
17
+ if (url) {
18
+ encoding1[62] = "+";
19
+ encoding1[63] = "/";
20
+ while (cx-- > dx) output.pop();
21
+ }
22
+ else for (cx = output.length + dx - cx, dx = output.length; cx < dx; cx++) output[cx] = '=';
13
23
  return output.join("");
14
24
  }
@@ -103,12 +103,12 @@ var resize2 = function () {
103
103
  else if (isType(c, "foot")) foot = c;
104
104
  }
105
105
  if (head && body) {
106
- var height = head.offsetHeight;
106
+ var height = head.offsetHeight + head.offsetTop;
107
107
  css(head, {
108
108
  marginBottom: fromOffset(-height),
109
109
  })
110
110
  css(body, {
111
- paddingTop: fromOffset(height)
111
+ paddingTop: fromOffset(height - body.clientTop)
112
112
  });
113
113
  }
114
114
  if (foot && body) {
@@ -120,22 +120,32 @@ var resize2 = function () {
120
120
  marginTop: fromOffset(-height)
121
121
  })
122
122
  }
123
+ if (body) {
124
+ if (body.scrollHeight + body.offsetTop > this.clientHeight) {
125
+ css(body, { height: fromOffset(this.clientHeight) });
126
+ }
127
+ else {
128
+ css(body, { height: '' });
129
+ }
130
+ }
123
131
  };
124
132
  function view(element) {
125
- var window = isNode(element) ? element : document.createElement("form");
133
+ var w = isNode(element) ? element : document.createElement("form");
126
134
  init();
127
- extend(window, prototype);
128
- if (window !== element) {
129
- extend(window, element);
130
- once("append")(window, function () {
131
- if (window.draggable !== true && window.draggable !== false) {
132
- window.draggable = /^(fixed|absolute)$/i.test(getComputedStyle(window).position);
135
+ extend(w, prototype);
136
+ if (w !== element) {
137
+ extend(w, element);
138
+ once("append")(w, function () {
139
+ if (w.draggable !== true && w.draggable !== false) {
140
+ w.draggable = /^(fixed|absolute)$/i.test(getComputedStyle(w).position);
133
141
  }
134
- if (window.draggable) window.setAttribute('draggable', 'draggable');
142
+ if (w.draggable) w.setAttribute('draggable', 'draggable');
135
143
  })
136
- if (window.resizable) resize.on(window);
144
+ if (w.resizable) resize.on(w);
137
145
  }
138
- on('resize')(window, resize2);
139
- onmounted(window, resize2);
140
- return window;
146
+ resizingList.set(w, resize2);
147
+ w.renders = [resize2];
148
+ w.reshape = lazy(resize2);
149
+ onmounted(w, w.reshape);
150
+ return w;
141
151
  }