efront 3.14.3 → 3.15.1

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,5 +1,5 @@
1
1
  // 中文编码 utf8
2
- function ylist(container, generator, $Y, group) {
2
+ function ylist(container, generator, $Y) {
3
3
  const cache_height = 2000;
4
4
  var restHeight = cache_height;
5
5
  var list = container || div();
@@ -54,7 +54,7 @@ function ylist(container, generator, $Y, group) {
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
  }
@@ -174,7 +174,7 @@ function ylist(container, generator, $Y, group) {
174
174
  }
175
175
  var indexed_item = getIndexedElement(index) || bottom_item;
176
176
  if (indexed_item) {
177
- list.scrollTop = -getFirstElement().offsetTop + indexed_item.offsetTop + indexed_item.offsetHeight * ratio;
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, group) {
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;
@@ -264,7 +264,14 @@ function ylist(container, generator, $Y, group) {
264
264
  }
265
265
  }
266
266
  if (collection.length) {
267
- var { paddingCount, paddingMax } = list;
267
+ var item = collection[collection.length - 1];
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;
268
275
  if (paddingCount > 0 && paddingMax > 0 && paddingCount < paddingMax) {
269
276
  let item = collection[collection.length - 1];
270
277
  while (paddingCount > 0) {
@@ -274,13 +281,6 @@ function ylist(container, generator, $Y, group) {
274
281
  item = item.nextSibling;
275
282
  }
276
283
  }
277
- var item = collection[collection.length - 1];
278
- if (item) item = item.nextSibling;
279
- while (item && item.index % group) {
280
- item = collection.pop();
281
- }
282
- var item = collection[collection.length - 1];
283
- if (item) scrollTop -= item.offsetTop + getOffsetHeight(item) - collection[0].offsetTop;
284
284
  remove(collection);
285
285
  }
286
286
  //滚动到相应的位置
@@ -302,7 +302,7 @@ function ylist(container, generator, $Y, group) {
302
302
  if (!(paddingCount > 0 && paddingMax > 0 && paddingCount < paddingMax) || !(scrollTop < targetHeight)) {
303
303
  paddingCount = 0;
304
304
  }
305
- while (scrollTop < targetHeight || paddingCount > 0 || offset % group) {
305
+ while (scrollTop < targetHeight || paddingCount > 0 || offset % list.group) {
306
306
  offset--;
307
307
  if (!(scrollTop < targetHeight)) {
308
308
  paddingCount--;
@@ -352,36 +352,45 @@ function ylist(container, generator, $Y, group) {
352
352
  }
353
353
  };
354
354
 
355
- list.stopY = function () {
355
+ list.stopY = function (count, spd) {
356
356
  var firstElement = getFirstVisibleElement();
357
- if (!firstElement) return;
358
- var paddingTop = getFirstElement().offsetTop;
357
+ var lastElement = getLastVisibleElement();
358
+ if (!firstElement || !lastElement || !list.clientHeight) return false;
359
+ var paddingTop = getFirstElement(1).offsetTop;
359
360
  var paddingBottom = parseFloat(getComputedStyle(list).paddingBottom);
360
-
361
- 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;
362
363
  var last_y = currentY();
363
- if (scrolled_t > .5) {
364
+ if (spd[0] > 0) {
364
365
  var target_ty = last_y + (1 - scrolled_t) * firstElement.offsetHeight;
365
366
  } else {
366
367
  var target_ty = last_y - scrolled_t * firstElement.offsetHeight;
367
368
  }
368
- var lastElement = getLastVisibleElement();
369
369
  var scrolled_b = (list.scrollTop + list.clientHeight - lastElement.offsetTop - paddingBottom) / lastElement.offsetHeight;
370
- if (scrolled_b > .5) {
370
+ if (scrolled_b < 0) scrolled_b -= scrolled_b - 1 | 0;
371
+ if (spd[0] > 0) {
371
372
  var target_by = last_y + (1 - scrolled_b) * lastElement.offsetHeight;
372
373
  } else {
373
374
  var target_by = last_y - scrolled_b * lastElement.offsetHeight;
374
375
  }
375
376
  var target_y = Math.abs(target_ty - last_y) > Math.abs(target_by - last_y) ? target_by : target_ty;
376
377
  var delta = Math.min(calcPixel(60), list.clientHeight >> 2);
377
- if (lastElement.offsetHeight >= delta && firstElement.offsetHeight >= delta) {
378
- return last_y;
378
+ var deltay = Math.abs(target_y - last_y), y;
379
+ if (deltay >= delta) {
380
+ return false;
381
+ }
382
+ if (deltay < 1) y = target_y;
383
+ else if (deltay > count || deltay > 3) {
384
+ y = last_y + (target_y > last_y ? .8 : -.8);
385
+ }
386
+ else {
387
+ y = (target_y + last_y) / 2;
379
388
  }
380
- var resultY = this.Top(Math.abs(target_y - last_y) > 1 ? (target_y + last_y) >> 1 : target_y);
381
- if (resultY === last_y) {
382
- target_y = resultY;
389
+ list.Top(y);
390
+ if (target_y === y) {
391
+ return false;
383
392
  }
384
- return target_y;
393
+ return true;
385
394
  };
386
395
  //导出方法
387
396
  list.go = scrollTo;
@@ -406,7 +415,7 @@ function ylist(container, generator, $Y, group) {
406
415
  var firstVisible = getFirstVisibleElement();
407
416
  if (!firstVisible) return saved_itemIndex;
408
417
  var index = firstVisible.index;
409
- var firstElement = getFirstElement();
418
+ var firstElement = getFirstElement(1);
410
419
  var scrolled = (list.scrollTop - firstVisible.offsetTop + firstElement.offsetTop + .5 | 0) / firstVisible.offsetHeight;
411
420
  return index + scrolled;
412
421
  };
@@ -486,7 +495,8 @@ function list() {
486
495
  var groupCount = /\d+/.exec($Y);
487
496
  if (groupCount) groupCount = +groupCount[0];
488
497
  $Y = /^[xh]|[xh]$/i.test($Y) ? "X" : "Y";
489
- var list = ($Y === "X" ? xlist : ylist)(container, generator, $Y, groupCount || 2);
498
+ var list = ($Y === "X" ? xlist : ylist)(container, generator, $Y);
499
+ if (!list.group) list.group = groupCount || 2;
490
500
  if (bindSrc instanceof Array) {
491
501
  list.src = bindSrc;
492
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;
@@ -265,7 +265,7 @@ function main(page, items, active, direction = 'y') {
265
265
  };
266
266
  var open1 = function (event) {
267
267
  if (event.which === 3) event.preventDefault();
268
- if (istoolbar) open.call(this, event.button ? 20 : 600);
268
+ if (istoolbar) open.call(this, event.which === 3 ? 20 : 600);
269
269
  };
270
270
  if (!page.children.length || page.menutype === 1) {
271
271
  page.menutype = 1;
@@ -316,7 +316,8 @@ function main(page, items, active, direction = 'y') {
316
316
  a.menu = item;
317
317
  on("mouseleave")(a, cancel);
318
318
  on("mouseenter")(a, open);
319
- if (istoolbar) on("mousedown")(a, open1);
319
+ on("pointermove")(a, open);
320
+ if (istoolbar) on("pointerdown")(a, open1);
320
321
  on("click")(a, fire);
321
322
  return a;
322
323
  });
@@ -347,7 +348,8 @@ function main(page, items, active, direction = 'y') {
347
348
  elem.menu = this.src[index];
348
349
  on("mouseleave")(elem, cancel);
349
350
  on("mouseenter")(elem, open);
350
- if (istoolbar) on("mousedown")(elem, open1);
351
+ on("pointermove")(elem, cancel);
352
+ if (istoolbar) on("pointerdown")(elem, open1);
351
353
  on("click")(elem, fire);
352
354
  return elem;
353
355
  }, direction);
@@ -35,6 +35,7 @@ function moveupon(target, { start, move, end }, initialEvent) {
35
35
  };
36
36
  var cancel = function (event) {
37
37
  if (event.touches && event.touches.length) return;
38
+ if (event.touches) extendTouchEvent(event);
38
39
  removeAllListeners();
39
40
  if (isFunction(offmouseup)) offmouseup();
40
41
  if (isFunction(offtouchcancel)) offtouchcancel();
package/coms/zimoli/on.js CHANGED
@@ -330,10 +330,49 @@ if (is_addEventListener_enabled) {
330
330
  }, true);
331
331
  });
332
332
  }
333
+ var invoke = function (event, type, pointerType) {
334
+ var target = event.target;
335
+ var touch = event.changedTouches ? event.changedTouches[0] : event;
336
+ var clickEvent = document.createEvent("MouseEvents");
337
+ clickEvent.touchend = true;
338
+ clickEvent.pointerType = pointerType
339
+ clickEvent.initMouseEvent(type, true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null);
340
+ dispatch(target, clickEvent);
341
+ };
333
342
 
343
+ (function () {
344
+ var pointeractive = null;
345
+ if ("onpointerdown" in window) return;
346
+ var getPointerType = function (event) {
347
+ return event.type.replace(/(start|move|end|cancel|down|up|leave|out|over|enter)$/i, '');
348
+ };
349
+ var pointerdown = function (event) {
350
+ if (pointeractive) return;
351
+ pointeractive = getPointerType(event);
352
+ invoke(event, 'pointerdown', pointeractive);
353
+ };
354
+ var pointerup = function (event) {
355
+ var pointerType = getPointerType(event);
356
+ if (!pointeractive || pointerType !== pointeractive) return;
357
+ invoke(event, 'pointerup', pointerType);
358
+ };
359
+ var pointermove = function (event) {
360
+ var pointerType = getPointerType(event);
361
+ if (pointeractive && pointerType !== pointeractive) return;
362
+ invoke(event, 'pointermove', pointerType);
363
+ };
364
+ on('mousedown')(window, pointerdown, true);
365
+ on('mouseup')(window, pointerdown, true);
366
+ on('touchstart')(window, pointerdown, true);
367
+ on("touchmove")(window, pointermove, true);
368
+ on("mousemove")(window, pointermove, true);
369
+ on("touchend")(window, pointerup, true);
370
+ on("touchcancel")(window, pointerup, true);
371
+ }());
334
372
 
335
373
  (function () {
336
374
  // fastclick
375
+ if (window.fastclick) return;
337
376
  if (document.efronton) return on = document.efronton;
338
377
  document.efronton = on;
339
378
  var onclick = on("click");
@@ -371,12 +410,7 @@ if (is_addEventListener_enabled) {
371
410
  if (onclick.preventClick) return;
372
411
  needFireClick = true;
373
412
  touchendFired = true;
374
- var target = event.target;
375
- var touch = event.changedTouches[0];
376
- var clickEvent = document.createEvent("MouseEvents");
377
- clickEvent.touchend = true;
378
- clickEvent.initMouseEvent("click", true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null);
379
- dispatch(target, clickEvent);
413
+ invoke(event, 'click');
380
414
  }, true);
381
415
  window.addEventListener("click", function (event) {
382
416
  if (!isClickWithPointer) return;
@@ -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
  }
@@ -1,7 +1,3 @@
1
- var mountedPictures = [];
2
- on("resize")(window, function () {
3
- mountedPictures.forEach(a => a.update());
4
- });
5
1
  var getstation = function (n, s) {
6
2
  var scale = Math.pow(10, Math.round(Math.log(n) / Math.log(10)));
7
3
  var step;
@@ -18,41 +14,34 @@ var trimCoord = move.trimCoord;
18
14
  var isequal = (a, b) => a === b || Math.abs((a - b) / (a + b)) < 1e-12;
19
15
  function picture_(image = document.createElement("div")) {
20
16
  var image_width, image_height;
21
- var scaled, x, y, min_scale, loaded_scale, locked_scale, click_scale, loaded_x, loaded_y;
22
- var origin_width, origin_height;
17
+ var scaled = 1, x = 0, y = 0, min_scale, loaded_scale, locked_scale, click_scale, loaded_x, loaded_y;
18
+ var loaded_width, loaded_height;
23
19
  var max_scale = 10 * devicePixelRatio;
24
20
  var shape = function () {
25
- image.shape(x, y, scaled / devicePixelRatio, origin_rotate);
21
+ image.shape(x, y, scaled / devicePixelRatio, rotated);
22
+ loaded_rotate = rotated; loaded_scale = scaled;
26
23
  };
27
24
  image.reshape = shape;
28
25
  var park = function () {
29
- if (image.park) image.park(x, y, scaled / devicePixelRatio, origin_rotate);
26
+ if (image.park) image.park(x, y, scaled / devicePixelRatio, loaded_rotate);
30
27
  };
31
- var setInitParams = function () {
28
+ var loadParams = function () {
32
29
  if (!image.width) return;
33
30
  image_width = image.width / devicePixelRatio;
34
31
  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
- }
32
+ loaded_width = image.clientWidth;
33
+ loaded_height = image.clientHeight;
34
+ loaded_rotate = 0;
35
+ locked_scale = loaded_scale = Math.min(loaded_height / image_height, loaded_width / image_width);
36
+ if (loaded_scale >= 1) {
37
+ click_scale = 4;
38
+ loaded_scale = 1;
50
39
  } else {
51
40
  click_scale = 1;
52
41
  }
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;
42
+ loaded_x = (loaded_width - image_width * loaded_scale) / 2;
43
+ loaded_y = (loaded_height - image_height * loaded_scale) / 2;
44
+ min_scale = loaded_scale * .25;
56
45
  scaled = loaded_scale;
57
46
  x = loaded_x;
58
47
  y = loaded_y;
@@ -65,27 +54,16 @@ function picture_(image = document.createElement("div")) {
65
54
  shape();
66
55
  };
67
56
 
68
- on("append")(image, setInitParams);
69
-
70
- on("append")(image, function () {
71
- mountedPictures.push(image);
72
- });
73
- on("remove")(image, function () {
74
- removeFromList(mountedPictures, image);
75
- });
76
- image.init = setInitParams;
57
+ on("append")(image, loadParams);
58
+ image.init = loadParams;
77
59
  image.locked = false;
78
- var last_click_time = 0;
79
60
 
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;
61
+ on("dblclick")(image, function (event) {
62
+ if (event.defaultPrevented) return;
63
+ event.preventDefault();
85
64
  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);
65
+ loadParams();
66
+ image.locked = isequal(scaled, loaded_scale) && isequal(loaded_x, x) && isequal(loaded_y, y);
89
67
  var layerx = event.offsetX || 0;
90
68
  var layery = event.offsetY || 0;
91
69
  if (layerx)
@@ -99,23 +77,24 @@ function picture_(image = document.createElement("div")) {
99
77
  }
100
78
  scale(layerx, layery, click_scale / loaded_scale);
101
79
  } else {
80
+ click_scale = scaled;
102
81
  set_unlock();
103
82
  }
104
83
  });
105
84
  image.getScale = function () {
106
85
  if (!this.locked && !loaded_scale) {
107
- setInitParams();
86
+ loadParams();
108
87
  }
109
88
  return +String(+scaled + 0.00005).slice(0, 6);
110
89
  };
111
90
  var fixpos = function () {
112
91
  var width = image_width * scaled;
113
92
  var height = image_height * scaled;
114
- var r = image.rotate | 0;
93
+ var r = rotated;
115
94
  var [, , w, h] = getrotatedltwh(r);
116
95
  var x0 = x + (width - w) / 2;
117
96
  var y0 = y + (height - h) / 2;
118
- var [x1, y1] = trimCoord([image.clientWidth, image.clientHeight], [x0, y0, w, h], -1);
97
+ var [x1, y1] = trimCoord([loaded_width, loaded_height], [x0, y0, w, h], -1);
119
98
  x += x1 - x0;
120
99
  y += y1 - y0;
121
100
  };
@@ -139,6 +118,21 @@ function picture_(image = document.createElement("div")) {
139
118
  var centern = (n1 + n2) / 2;
140
119
  x = (x - centerx) * scale + centerm;
141
120
  y = (y - centery) * scale + centern;
121
+ var theta = Math.atan2(n2 - n1, m2 - m1) - Math.atan2(y2 - y1, x2 - x1);
122
+ var r = rotated;
123
+ r += (theta * 180 / Math.PI);
124
+ image.rotateBy(theta * 180 / Math.PI);
125
+ // var cosa = Math.cos(theta);
126
+ // var sina = Math.sin(theta);
127
+ // var hw = image.clientWidth / 2;
128
+ // var hh = image.clientHeight / 2;
129
+ // console.log(x, y);
130
+ // x -= hw;
131
+ // y -= hh;
132
+ // var x0 = x * cosa - y * sina;
133
+ // var y0 = x * sina + y * cosa;
134
+ // x = x0 + hw;
135
+ // y = y0 + hh;
142
136
  shape();
143
137
  };
144
138
  var recover = function (change) {
@@ -165,7 +159,9 @@ function picture_(image = document.createElement("div")) {
165
159
  fixpos();
166
160
  if (change || saved_x !== x || saved_y !== y) {
167
161
  park();
162
+ return;
168
163
  }
164
+ if (image.clientHeight && image.clientWidth) return true;
169
165
  };
170
166
  var move = inertia(function (deltax, deltay) {
171
167
  var saved_x = x, saved_y = y;
@@ -174,12 +170,12 @@ function picture_(image = document.createElement("div")) {
174
170
  shape();
175
171
  if (saved_x === x && saved_y === y) return false;
176
172
  });
177
- var saved_event, wheeltime;
173
+ var saved_event;
178
174
  onmousewheel(image, function (event) {
179
175
  var { offsetX: layerX, offsetY: layerY, deltaY } = event;
180
176
  if (this.locked) event.preventDefault();
181
177
  if (!deltaY) return;
182
- if (!this.locked) setInitParams();
178
+ if (!this.locked) loadParams();
183
179
  this.locked = true;
184
180
  var ratio = Math.pow(0.99, 20 * Math.atan(deltaY / 20));
185
181
  var __scaled = scaled;
@@ -199,7 +195,7 @@ function picture_(image = document.createElement("div")) {
199
195
  saved_event = event;
200
196
  event.moveLocked = scaled > locked_scale;
201
197
  if (!this.locked) {
202
- setInitParams();
198
+ loadParams();
203
199
  }
204
200
  move.reset();
205
201
  },
@@ -215,7 +211,6 @@ function picture_(image = document.createElement("div")) {
215
211
 
216
212
  switch (event.touches.length) {
217
213
  case 1:
218
- if (!this.locked) return;
219
214
  break;
220
215
  case 2:
221
216
  this.locked = true;
@@ -253,13 +248,13 @@ function picture_(image = document.createElement("div")) {
253
248
  }
254
249
  saved_event = null;
255
250
  event.moveLocked = scaled >= locked_scale;
256
-
257
- if (this.locked && onclick.preventClick) move.smooth(recover);
251
+ if (this.locked && onclick.preventClick) move.smooth();
258
252
  }
259
253
  });
260
- var origin_rotate = 0;
254
+ var loaded_rotate = 0, rotated = 0;
261
255
  var rotatexy = function (x1, y1, x2, y2) {
262
- var centerx = image.clientWidth / 2, centery = image.clientHeight / 2;
256
+ var { left, top } = getScreenPosition(image);
257
+ var centerx = left + image.clientLeft + image.clientWidth / 2, centery = top + image.clientTop + image.clientHeight / 2;
263
258
  var deltax = x2 - x1, deltay = y2 - y1;
264
259
  var rx = x1 - centerx, ry = y1 - centery;
265
260
  var sign = -ry * deltax + rx * deltay;
@@ -268,22 +263,22 @@ function picture_(image = document.createElement("div")) {
268
263
  if (sign) image.rotateBy(sign > 0 ? delta : -delta);
269
264
  }
270
265
  var updatexy = function () {
271
- var deg = image.rotate - origin_rotate;
266
+ var deg = rotated - loaded_rotate;
272
267
  if (isFinite(deg)) {
273
- origin_rotate = image.rotate;
268
+ loaded_rotate = rotated;
274
269
  [x, y] = getrotatedltwh(deg, scaled);
275
270
  }
276
271
  };
277
272
  var getrotatedltwh = function (a, s = scaled) {
278
273
  var w = image_width * s;
279
274
  var h = image_height * s;
280
- var c = [image.clientWidth / 2, image.clientHeight / 2];
275
+ var c = [loaded_width / 2, loaded_height / 2];
281
276
  var m = x + w / 2;
282
277
  var n = y + h / 2;
283
278
  var [c1, c2] = rotate([m, n], -a, c);
284
279
  c1 -= w / 2;
285
280
  c2 -= h / 2;
286
- var a = origin_rotate;
281
+ var a = loaded_rotate;
287
282
  var l = c[0] - w / 2;
288
283
  var r = l + w;
289
284
  var t = c[1] - h / 2;
@@ -301,29 +296,29 @@ function picture_(image = document.createElement("div")) {
301
296
  image.update = function (animate) {
302
297
  if (image.locked) {
303
298
  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;
299
+ x += (image.clientWidth - loaded_width) / 2;
300
+ y += (image.clientHeight - loaded_height) / 2;
301
+ loaded_height = image.clientHeight;
302
+ loaded_width = image.clientWidth;
308
303
  if (animate !== false) fixpos();
309
304
  shape();
310
305
  return;
311
306
  }
312
- setInitParams();
307
+ loadParams();
313
308
  if (animate !== false) {
314
- recover();
309
+ move.smooth(recover);
315
310
  } else {
316
- if (animate !== false) fixpos();
317
311
  shape();
318
312
  }
319
-
320
313
  };
314
+ bind('resize')(image, image.update);
315
+
321
316
  image.rotateTo = function (deg) {
322
- this.rotate = deg;
317
+ rotated = deg;
323
318
  this.update();
324
319
  };
325
320
  image.rotateBy = function (deg) {
326
- var r = this.rotate | 0;
321
+ var r = rotated;
327
322
  if (deg === 90 || deg === -90) {
328
323
  r += deg;
329
324
  if (deg > 0) {
@@ -346,9 +341,10 @@ function picture_(image = document.createElement("div")) {
346
341
  } else {
347
342
  r += deg;
348
343
  }
349
- this.rotate = r;
344
+ rotated = r;
350
345
  this.update(deg === 90 || deg === -90);
351
346
  };
347
+ on('remove')(image, move.reset);
352
348
  on("contextmenu")(image, function (e) {
353
349
  if (onclick.preventClick) e.preventDefault();
354
350
  });
@@ -3,6 +3,8 @@ var renderElements = Object.create(null);
3
3
  var presets = Object.create(null);
4
4
  presets.template = function (t) {
5
5
  var comment = document.createComment('template');
6
+ comment.$scope = t.$scope;
7
+ comment.$parentScopes = t.$parentScopes;
6
8
  once("append")(comment, function () {
7
9
  var node = document.createElement(comment.parentNode.tagName || "div");
8
10
  node.innerHTML = t.innerHTML;
@@ -123,17 +123,18 @@ function slider(autoplay, circle = true) {
123
123
  var park = function () {
124
124
  direction = 0;
125
125
  var singleTarget = getSingleTarget();
126
+ var spd = _speed();
126
127
  if (singleTarget) {
127
128
  negative_index = round(negative_index);
128
129
  }
129
130
  else if (delta_negative_index > 0) {
130
- if (negative_index - floor(negative_index) > 0.2 / (1 + 6 * abs(_speed())))
131
+ if (negative_index - floor(negative_index) > 0.2 / (1 + abs(spd)))
131
132
  negative_index = ceil(negative_index);
132
133
  else
133
134
  negative_index = floor(negative_index);
134
135
  }
135
136
  else if (delta_negative_index < 0) {
136
- if (ceil(negative_index) - negative_index > 0.2 / (1 + 6 * abs(_speed())))
137
+ if (ceil(negative_index) - negative_index > 0.2 / (1 + abs(spd)))
137
138
  negative_index = floor(negative_index);
138
139
  else
139
140
  negative_index = ceil(negative_index);
@@ -239,6 +240,7 @@ function slider(autoplay, circle = true) {
239
240
  });
240
241
  moveupon(outter, {
241
242
  start(event) {
243
+ event.preventDefault();
242
244
  cancelAnimationFrame(timer_animate);
243
245
  clearTimeout(timer_playyer);
244
246
  moving = true;
@@ -1,17 +1,13 @@
1
- function speed(time_splitter = 1) {
2
- var lastmoveTime = new Date, speed = 0;
3
- return function (deltay) {
4
- var now = new Date;
5
- var deltat = now - lastmoveTime;
6
- if (arguments.length) {
7
- if (deltat) {
8
- lastmoveTime = now;
9
- if (deltay) speed = speed ? (speed + deltay * time_splitter / deltat) / 2 : deltay * time_splitter / deltat;
10
- else if (deltay === 0) speed = 0;
11
- }
12
- } else if (deltat > 120) {
13
- speed = 0;
1
+
2
+ function speed() {
3
+ var speed = new Speed();
4
+ return function (a) {
5
+ var now = performance.now ? performance.now() : Date.now();
6
+ if (isFinite(a)) {
7
+ if (a === 0) speed.reset();
8
+ else speed.write([a], now);
9
+ return a;
14
10
  }
15
- return speed;
11
+ return speed.read(now)[0];
16
12
  };
17
13
  }