efront 3.14.0 → 3.14.8

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,70 +1 @@
1
- var { abs, sign = (a) => { if (a > 0) return 1; if (a < 0) return -1; return 0; }, sqrt } = Math;
2
- function main(gun, is_delta = true) {
3
- var smooth = function () {
4
- var currentTime = +new Date;
5
- var delta_time = currentTime - savedTime;
6
-
7
- savedTime = currentTime;
8
- if (delta_time > 6) {
9
- var abs_speed = 0;
10
- var args = speeds.map(function (_speed, i) {
11
- var __speed = _speed() * delta_time;
12
- var abs_spd = abs(__speed);
13
- if (abs_spd <= 1) {
14
- return _speed(0);
15
- }
16
- abs_speed = Math.max(abs_speed, abs_spd);
17
- __speed = __speed - sign(__speed) * (abs_spd - sqrt(abs_spd) * sqrt(abs_spd - 1));
18
- _speed(__speed);
19
- return __speed;
20
- });
21
- run(args);
22
- if (!(abs_speed >= 1)) {
23
- if (
24
- decrease instanceof Function
25
- ) decrease();
26
- return;
27
- }
28
- }
29
- smooth_timer = requestAnimationFrame(smooth);
30
- };
31
- var run = function (args) {
32
- if (false === gun.apply(that, args)) {
33
- speeds.forEach(a => a(0));
34
- }
35
- };
36
- var saved_args, speeds, smooth_timer, savedTime = 0, that, decrease;
37
- var trans = function () {
38
- cancelAnimationFrame(smooth_timer);
39
- var args = arguments;
40
- if (!saved_args) {
41
- saved_args = args;
42
- speeds = [].map.call(saved_args, a => speed());
43
- speeds.forEach(a => a(0));
44
- savedTime = +new Date;
45
- } else if (args.length !== saved_args.length) {
46
- saved_args = null;
47
- // throw new Error("前后传入的参数的个数应该相同!");
48
- } else {
49
- if (!is_delta) {
50
- args = [].map.call(args, (a, i) => a - saved_args[i]);
51
- }
52
- that = this;
53
- run(args);
54
- args = speeds.map((a, i) => a(args[i]));
55
- savedTime = +new Date;
56
- }
57
- };
58
- trans.smooth = function (d) {
59
- decrease = d;
60
- if (speeds) smooth_timer = requestAnimationFrame(smooth, 20);
61
- else decrease();
62
- };
63
- trans.reset = function () {
64
- cancelAnimationFrame(smooth_timer);
65
- saved_args = null;
66
- speeds = null;
67
- decrease = null;
68
- };
69
- return trans;
70
- }
1
+ Speed.inertia;
@@ -2,7 +2,10 @@ function isMounted(parent) {
2
2
  if ("isMounted" in parent) return parent.isMounted;
3
3
  var temp = parent;
4
4
  while (temp && temp !== document.documentElement) {
5
+ if ("isMounted" in temp) {
6
+ return parent.isMounted = temp.isMounted;
7
+ }
5
8
  temp = temp.parentNode;
6
9
  }
7
- return parent.isMounted = !!temp;
10
+ return !!temp;
8
11
  }
@@ -19,6 +19,7 @@ function lattice(element, minWidth, maxWidth = minWidth << 1, layers) {
19
19
  if (boxCount < 1) boxCount = 1, addClass(_box, inadequate_class);
20
20
  else removeClass(_box, inadequate_class);
21
21
  _box.paddingMax = boxCount;
22
+ _box.group = boxCount;
22
23
  };
23
24
  if (layers) {
24
25
  var _box = list(element, function (index) {
@@ -54,7 +54,7 @@ function ylist(container, generator, $Y) {
54
54
  scrollTop += deltaY;
55
55
  for (var cx = 0, dx = children.length; cx < dx; cx++) {
56
56
  var child = children[cx];
57
- if (isFinite(child.index) && child.offsetTop + child.offsetHeight >= scrollTop) {
57
+ if (isFinite(child.index) && child.offsetTop + child.offsetHeight > scrollTop) {
58
58
  return child;
59
59
  }
60
60
  }
@@ -118,7 +118,7 @@ function ylist(container, generator, $Y) {
118
118
  if (isNaN(itemIndex)) return;
119
119
  itemIndex = +itemIndex;
120
120
  __animated = false;
121
- if (!list.offsetHeight && !list.offsetWidth && !list.isMounted) {
121
+ if (!list.offsetHeight && !list.offsetWidth && !isMounted(list)) {
122
122
  saved_itemIndex = itemIndex;
123
123
  return;
124
124
  }
@@ -174,7 +174,7 @@ function ylist(container, generator, $Y) {
174
174
  }
175
175
  var indexed_item = getIndexedElement(index) || bottom_item;
176
176
  if (indexed_item) {
177
- list.scrollTop = indexed_item.offsetTop + indexed_item.offsetHeight * ratio - parseFloat(getComputedStyle(list).paddingTop);
177
+ list.scrollTop = -getFirstElement(1).offsetTop + indexed_item.offsetTop + indexed_item.offsetHeight * ratio;
178
178
  }
179
179
  };
180
180
  var runbuild = lazy(function () {
@@ -229,7 +229,7 @@ function ylist(container, generator, $Y) {
229
229
  var cache_height = list.offsetHeight;
230
230
 
231
231
  var childrenMap = getChildrenMap();
232
- var last_element = getLastElement();
232
+ var last_element = getLastElement(1);
233
233
  if (!last_element || !last_element.offsetHeight) return;
234
234
  let { scrollTop } = list;
235
235
  scrollTop += deltaY;
@@ -265,8 +265,13 @@ function ylist(container, generator, $Y) {
265
265
  }
266
266
  if (collection.length) {
267
267
  var item = collection[collection.length - 1];
268
- scrollTop -= item.offsetTop + getOffsetHeight(item) - collection[0].offsetTop;
269
- var { paddingCount, paddingMax } = list;
268
+ var { paddingCount = 0, paddingMax } = list;
269
+ if (item) item = item.nextSibling;
270
+ if (!paddingMax) while (item && item.index % list.group) {
271
+ item = collection.pop();
272
+ }
273
+ var item = collection[collection.length - 1];
274
+ if (item) scrollTop -= item.offsetTop + getOffsetHeight(item) - collection[0].offsetTop;
270
275
  if (paddingCount > 0 && paddingMax > 0 && paddingCount < paddingMax) {
271
276
  let item = collection[collection.length - 1];
272
277
  while (paddingCount > 0) {
@@ -297,7 +302,7 @@ function ylist(container, generator, $Y) {
297
302
  if (!(paddingCount > 0 && paddingMax > 0 && paddingCount < paddingMax) || !(scrollTop < targetHeight)) {
298
303
  paddingCount = 0;
299
304
  }
300
- while (scrollTop < targetHeight || paddingCount > 0) {
305
+ while (scrollTop < targetHeight || paddingCount > 0 || offset % list.group) {
301
306
  offset--;
302
307
  if (!(scrollTop < targetHeight)) {
303
308
  paddingCount--;
@@ -347,36 +352,45 @@ function ylist(container, generator, $Y) {
347
352
  }
348
353
  };
349
354
 
350
- list.stopY = function () {
355
+ list.stopY = function (count, spd) {
351
356
  var firstElement = getFirstVisibleElement();
352
- if (!firstElement) return;
353
- var paddingTop = parseFloat(getComputedStyle(list).paddingTop);
357
+ var lastElement = getLastVisibleElement();
358
+ if (!firstElement || !lastElement || !list.clientHeight) return false;
359
+ var paddingTop = getFirstElement(1).offsetTop;
354
360
  var paddingBottom = parseFloat(getComputedStyle(list).paddingBottom);
355
-
356
- var scrolled_t = (list.scrollTop + paddingTop - firstElement.offsetTop) / firstElement.offsetHeight;
361
+ var scrolled_t = (list.scrollTop - firstElement.offsetTop + paddingTop) / firstElement.offsetHeight;
362
+ if (scrolled_t > 1) scrolled_t -= scrolled_t | 0;
357
363
  var last_y = currentY();
358
- if (scrolled_t > .5) {
364
+ if (spd[0] > 0) {
359
365
  var target_ty = last_y + (1 - scrolled_t) * firstElement.offsetHeight;
360
366
  } else {
361
367
  var target_ty = last_y - scrolled_t * firstElement.offsetHeight;
362
368
  }
363
- var lastElement = getLastVisibleElement();
364
369
  var scrolled_b = (list.scrollTop + list.clientHeight - lastElement.offsetTop - paddingBottom) / lastElement.offsetHeight;
365
- if (scrolled_b > .5) {
370
+ if (scrolled_b < 0) scrolled_b -= scrolled_b - 1 | 0;
371
+ if (spd[0] > 0) {
366
372
  var target_by = last_y + (1 - scrolled_b) * lastElement.offsetHeight;
367
373
  } else {
368
374
  var target_by = last_y - scrolled_b * lastElement.offsetHeight;
369
375
  }
370
376
  var target_y = Math.abs(target_ty - last_y) > Math.abs(target_by - last_y) ? target_by : target_ty;
371
377
  var delta = Math.min(calcPixel(60), list.clientHeight >> 2);
372
- if (lastElement.offsetHeight >= delta && firstElement.offsetHeight >= delta) {
373
- return last_y;
378
+ var deltay = Math.abs(target_y - last_y), y;
379
+ if (deltay >= delta) {
380
+ return false;
374
381
  }
375
- var resultY = this.Top(Math.abs(target_y - last_y) > 1 ? (target_y + last_y) >> 1 : target_y);
376
- if (resultY === last_y) {
377
- target_y = resultY;
382
+ if (deltay < 1) y = target_y;
383
+ else if (deltay > count || deltay > 3) {
384
+ y = last_y + (target_y > last_y ? .8 : -.8);
378
385
  }
379
- return target_y;
386
+ else {
387
+ y = (target_y + last_y) / 2;
388
+ }
389
+ list.Top(y);
390
+ if (target_y === y) {
391
+ return false;
392
+ }
393
+ return true;
380
394
  };
381
395
  //导出方法
382
396
  list.go = scrollTo;
@@ -398,10 +412,11 @@ function ylist(container, generator, $Y) {
398
412
  list.scrollBy = scrollBy;
399
413
  list.index = function (update) {
400
414
  if (update === false) return saved_itemIndex;
401
- var firstElement = getFirstVisibleElement();
402
- if (!firstElement) return saved_itemIndex;
403
- var index = firstElement.index;
404
- var scrolled = (list.scrollTop - firstElement.offsetTop + parseFloat(getComputedStyle(list).paddingTop) + .5 | 0) / firstElement.offsetHeight;
415
+ var firstVisible = getFirstVisibleElement();
416
+ if (!firstVisible) return saved_itemIndex;
417
+ var index = firstVisible.index;
418
+ var firstElement = getFirstElement(1);
419
+ var scrolled = (list.scrollTop - firstVisible.offsetTop + firstElement.offsetTop + .5 | 0) / firstVisible.offsetHeight;
405
420
  return index + scrolled;
406
421
  };
407
422
  list.topIndex = function () {
@@ -477,8 +492,11 @@ function list() {
477
492
  $Y = container.getAttribute("direction") || container.tagName;
478
493
  }
479
494
  }
495
+ var groupCount = /\d+/.exec($Y);
496
+ if (groupCount) groupCount = +groupCount[0];
480
497
  $Y = /^[xh]|[xh]$/i.test($Y) ? "X" : "Y";
481
498
  var list = ($Y === "X" ? xlist : ylist)(container, generator, $Y);
499
+ if (!list.group) list.group = groupCount || 2;
482
500
  if (bindSrc instanceof Array) {
483
501
  list.src = bindSrc;
484
502
  container.go(container.index() || 0);
@@ -0,0 +1,10 @@
1
+ var test_2d = function () {
2
+ var m = matrix.create2d();
3
+ assert(m.transform([0, 1]), [0, 1])
4
+ m.rotate(Math.PI);
5
+ assert(m.transform([0, 1]), [0, -1])
6
+ m.rotate(Math.PI / 2);
7
+ assert(m.transform([1, 0]), [0, -1]);
8
+ assert(m.transform([0, 1]), [1, 0]);
9
+ }
10
+ test_2d();
@@ -1,5 +1,6 @@
1
1
  & {
2
2
  white-space: nowrap;
3
+ outline: none;
3
4
  }
4
5
 
5
6
  &>div.lack+div.more {
@@ -114,11 +115,12 @@ body:active & {
114
115
  }
115
116
 
116
117
  &[toolbar] {
117
- >menu-item{
118
+ >menu-item {
118
119
  padding-left: 6px;
119
120
  padding-right: 6px;
120
121
  text-align: center;
121
122
  }
123
+
122
124
  >menu-item.has-children {
123
125
  &::after {
124
126
  display: block;
@@ -0,0 +1,7 @@
1
+ function oncemount(target, handle) {
2
+ if (isMounted(target)) {
3
+ handle.call(target);
4
+ return;
5
+ }
6
+ once("append")(target, handle);
7
+ }
@@ -8,7 +8,6 @@
8
8
  function onmounted(target, handle) {
9
9
  if (isMounted(target)) {
10
10
  handle.call(target);
11
- return;
12
11
  }
13
12
  onappend(target, handle);
14
13
  }
@@ -19,40 +19,33 @@ var isequal = (a, b) => a === b || Math.abs((a - b) / (a + b)) < 1e-12;
19
19
  function picture_(image = document.createElement("div")) {
20
20
  var image_width, image_height;
21
21
  var scaled, x, y, min_scale, loaded_scale, locked_scale, click_scale, loaded_x, loaded_y;
22
- var origin_width, origin_height;
22
+ var loaded_width, loaded_height;
23
23
  var max_scale = 10 * devicePixelRatio;
24
24
  var shape = function () {
25
- image.shape(x, y, scaled / devicePixelRatio, origin_rotate);
25
+ image.shape(x, y, scaled / devicePixelRatio, rotated);
26
+ loaded_rotate = rotated; loaded_scale = scaled;
26
27
  };
27
28
  image.reshape = shape;
28
29
  var park = function () {
29
- if (image.park) image.park(x, y, scaled / devicePixelRatio, origin_rotate);
30
+ if (image.park) image.park(x, y, scaled / devicePixelRatio, loaded_rotate);
30
31
  };
31
- var setInitParams = function () {
32
+ var loadParams = function () {
32
33
  if (!image.width) return;
33
34
  image_width = image.width / devicePixelRatio;
34
35
  image_height = image.height / devicePixelRatio;
35
- origin_width = image.clientWidth;
36
- origin_height = image.clientHeight;
37
- origin_rotate = 0;
38
- locked_scale = loaded_scale = Math.min(image.clientHeight / image_height, image.clientWidth / image_width);
39
- if (loaded_scale >= 0.9) {
40
- if (loaded_scale < 1.2) {
41
- click_scale = 1;
42
- loaded_scale = .8;
43
- } else if (loaded_scale < max_scale) {
44
- click_scale = loaded_scale;
45
- loaded_scale = 1;
46
- } else {
47
- click_scale = max_scale;
48
- loaded_scale = 1;
49
- }
36
+ loaded_width = image.clientWidth;
37
+ loaded_height = image.clientHeight;
38
+ loaded_rotate = 0;
39
+ locked_scale = loaded_scale = Math.min(loaded_height / image_height, loaded_width / image_width);
40
+ if (loaded_scale >= 1) {
41
+ click_scale = 4;
42
+ loaded_scale = 1;
50
43
  } else {
51
44
  click_scale = 1;
52
45
  }
53
- loaded_x = (image.clientWidth - image_width * loaded_scale) / 2;
54
- loaded_y = (image.clientHeight - image_height * loaded_scale) / 2;
55
- min_scale = loaded_scale * .75;
46
+ loaded_x = (loaded_width - image_width * loaded_scale) / 2;
47
+ loaded_y = (loaded_height - image_height * loaded_scale) / 2;
48
+ min_scale = loaded_scale * .25;
56
49
  scaled = loaded_scale;
57
50
  x = loaded_x;
58
51
  y = loaded_y;
@@ -65,7 +58,7 @@ function picture_(image = document.createElement("div")) {
65
58
  shape();
66
59
  };
67
60
 
68
- on("append")(image, setInitParams);
61
+ on("append")(image, loadParams);
69
62
 
70
63
  on("append")(image, function () {
71
64
  mountedPictures.push(image);
@@ -73,19 +66,15 @@ function picture_(image = document.createElement("div")) {
73
66
  on("remove")(image, function () {
74
67
  removeFromList(mountedPictures, image);
75
68
  });
76
- image.init = setInitParams;
69
+ image.init = loadParams;
77
70
  image.locked = false;
78
- var last_click_time = 0;
79
71
 
80
- on("click")(image, function (event) {
81
- var time = +new Date;
82
- var delta_time = time - last_click_time;
83
- last_click_time = time;
84
- if (delta_time > 300) return;
72
+ on("dblclick")(image, function (event) {
73
+ if (event.defaultPrevented) return;
74
+ event.preventDefault();
85
75
  var image = this;
86
- var __scaled = scaled, _x = x, _y = y;
87
- setInitParams();
88
- image.locked = isequal(__scaled, loaded_scale) && isequal(loaded_x, x) && isequal(loaded_y, y);
76
+ loadParams();
77
+ image.locked = isequal(scaled, loaded_scale) && isequal(loaded_x, x) && isequal(loaded_y, y);
89
78
  var layerx = event.offsetX || 0;
90
79
  var layery = event.offsetY || 0;
91
80
  if (layerx)
@@ -99,23 +88,24 @@ function picture_(image = document.createElement("div")) {
99
88
  }
100
89
  scale(layerx, layery, click_scale / loaded_scale);
101
90
  } else {
91
+ click_scale = scaled;
102
92
  set_unlock();
103
93
  }
104
94
  });
105
95
  image.getScale = function () {
106
96
  if (!this.locked && !loaded_scale) {
107
- setInitParams();
97
+ loadParams();
108
98
  }
109
99
  return +String(+scaled + 0.00005).slice(0, 6);
110
100
  };
111
101
  var fixpos = function () {
112
102
  var width = image_width * scaled;
113
103
  var height = image_height * scaled;
114
- var r = image.rotate | 0;
104
+ var r = rotated;
115
105
  var [, , w, h] = getrotatedltwh(r);
116
106
  var x0 = x + (width - w) / 2;
117
107
  var y0 = y + (height - h) / 2;
118
- var [x1, y1] = trimCoord([image.clientWidth, image.clientHeight], [x0, y0, w, h], -1);
108
+ var [x1, y1] = trimCoord([loaded_width, loaded_height], [x0, y0, w, h], -1);
119
109
  x += x1 - x0;
120
110
  y += y1 - y0;
121
111
  };
@@ -139,6 +129,21 @@ function picture_(image = document.createElement("div")) {
139
129
  var centern = (n1 + n2) / 2;
140
130
  x = (x - centerx) * scale + centerm;
141
131
  y = (y - centery) * scale + centern;
132
+ var theta = Math.atan2(n2 - n1, m2 - m1) - Math.atan2(y2 - y1, x2 - x1);
133
+ var r = rotated;
134
+ r += (theta * 180 / Math.PI);
135
+ image.rotateBy(theta * 180 / Math.PI);
136
+ // var cosa = Math.cos(theta);
137
+ // var sina = Math.sin(theta);
138
+ // var hw = image.clientWidth / 2;
139
+ // var hh = image.clientHeight / 2;
140
+ // console.log(x, y);
141
+ // x -= hw;
142
+ // y -= hh;
143
+ // var x0 = x * cosa - y * sina;
144
+ // var y0 = x * sina + y * cosa;
145
+ // x = x0 + hw;
146
+ // y = y0 + hh;
142
147
  shape();
143
148
  };
144
149
  var recover = function (change) {
@@ -165,7 +170,9 @@ function picture_(image = document.createElement("div")) {
165
170
  fixpos();
166
171
  if (change || saved_x !== x || saved_y !== y) {
167
172
  park();
173
+ return;
168
174
  }
175
+ if (image.clientHeight && image.clientWidth) return true;
169
176
  };
170
177
  var move = inertia(function (deltax, deltay) {
171
178
  var saved_x = x, saved_y = y;
@@ -174,12 +181,12 @@ function picture_(image = document.createElement("div")) {
174
181
  shape();
175
182
  if (saved_x === x && saved_y === y) return false;
176
183
  });
177
- var saved_event, wheeltime;
184
+ var saved_event;
178
185
  onmousewheel(image, function (event) {
179
186
  var { offsetX: layerX, offsetY: layerY, deltaY } = event;
180
187
  if (this.locked) event.preventDefault();
181
188
  if (!deltaY) return;
182
- if (!this.locked) setInitParams();
189
+ if (!this.locked) loadParams();
183
190
  this.locked = true;
184
191
  var ratio = Math.pow(0.99, 20 * Math.atan(deltaY / 20));
185
192
  var __scaled = scaled;
@@ -199,7 +206,7 @@ function picture_(image = document.createElement("div")) {
199
206
  saved_event = event;
200
207
  event.moveLocked = scaled > locked_scale;
201
208
  if (!this.locked) {
202
- setInitParams();
209
+ loadParams();
203
210
  }
204
211
  move.reset();
205
212
  },
@@ -215,7 +222,6 @@ function picture_(image = document.createElement("div")) {
215
222
 
216
223
  switch (event.touches.length) {
217
224
  case 1:
218
- if (!this.locked) return;
219
225
  break;
220
226
  case 2:
221
227
  this.locked = true;
@@ -253,13 +259,13 @@ function picture_(image = document.createElement("div")) {
253
259
  }
254
260
  saved_event = null;
255
261
  event.moveLocked = scaled >= locked_scale;
256
-
257
- if (this.locked && onclick.preventClick) move.smooth(recover);
262
+ if (this.locked && onclick.preventClick) move.smooth();
258
263
  }
259
264
  });
260
- var origin_rotate = 0;
265
+ var loaded_rotate = 0, rotated = 0;
261
266
  var rotatexy = function (x1, y1, x2, y2) {
262
- var centerx = image.clientWidth / 2, centery = image.clientHeight / 2;
267
+ var { left, top } = getScreenPosition(image);
268
+ var centerx = left + image.clientLeft + image.clientWidth / 2, centery = top + image.clientTop + image.clientHeight / 2;
263
269
  var deltax = x2 - x1, deltay = y2 - y1;
264
270
  var rx = x1 - centerx, ry = y1 - centery;
265
271
  var sign = -ry * deltax + rx * deltay;
@@ -268,22 +274,22 @@ function picture_(image = document.createElement("div")) {
268
274
  if (sign) image.rotateBy(sign > 0 ? delta : -delta);
269
275
  }
270
276
  var updatexy = function () {
271
- var deg = image.rotate - origin_rotate;
277
+ var deg = rotated - loaded_rotate;
272
278
  if (isFinite(deg)) {
273
- origin_rotate = image.rotate;
279
+ loaded_rotate = rotated;
274
280
  [x, y] = getrotatedltwh(deg, scaled);
275
281
  }
276
282
  };
277
283
  var getrotatedltwh = function (a, s = scaled) {
278
284
  var w = image_width * s;
279
285
  var h = image_height * s;
280
- var c = [image.clientWidth / 2, image.clientHeight / 2];
286
+ var c = [loaded_width / 2, loaded_height / 2];
281
287
  var m = x + w / 2;
282
288
  var n = y + h / 2;
283
289
  var [c1, c2] = rotate([m, n], -a, c);
284
290
  c1 -= w / 2;
285
291
  c2 -= h / 2;
286
- var a = origin_rotate;
292
+ var a = loaded_rotate;
287
293
  var l = c[0] - w / 2;
288
294
  var r = l + w;
289
295
  var t = c[1] - h / 2;
@@ -301,29 +307,28 @@ function picture_(image = document.createElement("div")) {
301
307
  image.update = function (animate) {
302
308
  if (image.locked) {
303
309
  updatexy();
304
- x += (image.clientWidth - origin_width) / 2;
305
- y += (image.clientHeight - origin_height) / 2;
306
- origin_height = image.clientHeight;
307
- origin_width = image.clientWidth;
310
+ x += (image.clientWidth - loaded_width) / 2;
311
+ y += (image.clientHeight - loaded_height) / 2;
312
+ loaded_height = image.clientHeight;
313
+ loaded_width = image.clientWidth;
308
314
  if (animate !== false) fixpos();
309
315
  shape();
310
316
  return;
311
317
  }
312
- setInitParams();
318
+ loadParams();
313
319
  if (animate !== false) {
314
- recover();
320
+ move.smooth(recover);
315
321
  } else {
316
- if (animate !== false) fixpos();
317
322
  shape();
318
323
  }
319
324
 
320
325
  };
321
326
  image.rotateTo = function (deg) {
322
- this.rotate = deg;
327
+ rotated = deg;
323
328
  this.update();
324
329
  };
325
330
  image.rotateBy = function (deg) {
326
- var r = this.rotate | 0;
331
+ var r = rotated;
327
332
  if (deg === 90 || deg === -90) {
328
333
  r += deg;
329
334
  if (deg > 0) {
@@ -346,9 +351,10 @@ function picture_(image = document.createElement("div")) {
346
351
  } else {
347
352
  r += deg;
348
353
  }
349
- this.rotate = r;
354
+ rotated = r;
350
355
  this.update(deg === 90 || deg === -90);
351
356
  };
357
+ on('remove')(image, move.reset);
352
358
  on("contextmenu")(image, function (e) {
353
359
  if (onclick.preventClick) e.preventDefault();
354
360
  });
@@ -233,7 +233,7 @@ var _as_yextra = function (global, innerWidth, innerHeight, element, target, poi
233
233
  display: element.style.display
234
234
  };
235
235
  }
236
- var zindex = zIndex();
236
+ var zindex = zIndex(0) + 1;
237
237
  css(element, `position:absolute;z-index:${zindex}`);
238
238
  css(_rhomb, { zIndex: zindex });
239
239
  var release1 = onremove(target, function () {
@@ -2,12 +2,14 @@ var hasOwnProperty = {}.hasOwnProperty;
2
2
  var renderElements = Object.create(null);
3
3
  var presets = Object.create(null);
4
4
  presets.template = function (t) {
5
- var node = document.createElement("div");
6
5
  var comment = document.createComment('template');
7
- node.innerHTML = t.innerHTML;
8
- comment.with = [].slice.call(node.childNodes, 0);
9
- renderElement(comment.with, t.$scope, t.$parentScopes);
10
- remove(node.childNodes);
6
+ once("append")(comment, function () {
7
+ var node = document.createElement(comment.parentNode.tagName || "div");
8
+ node.innerHTML = t.innerHTML;
9
+ comment.with = [].slice.call(node.childNodes, 0);
10
+ appendChild.after(comment, comment.with);
11
+ renderElement(comment.with, comment.$scope, comment.$parentScopes);
12
+ });
11
13
  return comment;
12
14
  };
13
15
  window.renderElements = renderElements;
@@ -624,7 +626,7 @@ function renderElement(element, scope = element.$scope, parentScopes = element.$
624
626
  element.renderid = 1;
625
627
  var parentNode = element.parentNode;
626
628
  if (parentNode) {
627
- if (parentNode.renderid > 1 || parentNode.isMounted) element.renderid = 2;
629
+ if (parentNode.renderid > 1 || isMounted(parentNode)) element.renderid = 2;
628
630
  }
629
631
  element.renders = element.renders ? [].concat(element.renders) : [];
630
632
  var { ons, copys, attrs, props, binds, context: withContext, ids } = element.$struct;
@@ -690,7 +692,7 @@ function renderElement(element, scope = element.$scope, parentScopes = element.$
690
692
  }
691
693
  for (var k in props) {
692
694
  try {
693
- element[k] = props[k];
695
+ if (element[k] !== props[k]) element[k] = props[k];
694
696
  } catch (e) { }
695
697
  }
696
698
  ons.forEach(([on, key, value]) => on.call(element, key, [withContext, value]));
@@ -698,7 +700,7 @@ function renderElement(element, scope = element.$scope, parentScopes = element.$
698
700
  rebuild(element);
699
701
  onappend(element, addRenderElement);
700
702
  onremove(element, removeRenderElement);
701
- if (element.isMounted || element.renderid > 1) addRenderElement.call(element);
703
+ if (isMounted(element) || element.renderid > 1) addRenderElement.call(element);
702
704
  }
703
705
  if (elementid) scope[elementid] = element;
704
706
  for (var id of ids) {
@@ -780,6 +782,9 @@ function renderStructure(element, scope, parentScopes = []) {
780
782
  element.removeAttribute(name);
781
783
  }
782
784
  else {
785
+ if (!/\-/.test(name) || value === '') {
786
+ copys.push(attr);
787
+ }
783
788
  props[name.replace(/\-(\w)/g, (_, w) => w.toUpperCase())] = value === "" ? true : value;
784
789
  }
785
790
  }
@@ -5,7 +5,10 @@ function search(seartext, options, path = "name") {
5
5
  var name = seek(o, path);
6
6
  if (name === seartext) hasFullmatch = true;
7
7
  var [power, m] = mark.power(name, seartext);
8
- return { power, [path]: m, value: o.value, item: o };
8
+ o = Object.create(o);
9
+ o.power = power;
10
+ if (path) o[path] = m;
11
+ return o;
9
12
  }).filter(a => a.power > 0);
10
13
  a.sort(function (a, b) {
11
14
  return b.power - a.power;