efront 3.14.8 → 3.15.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.
@@ -4,7 +4,7 @@ function inertia(gun) {
4
4
  if (
5
5
  decrease instanceof Function
6
6
  ) {
7
- if (!spd.length || !spd[0]) return;
7
+ if (!spd.length || _decreased > 0 && spd.filter(a => a !== 0).length === 0) return;
8
8
  var id = smooth_timer;
9
9
  var res = decrease(_decreased++, spd);
10
10
  if (smooth_timer !== id) return;
@@ -70,6 +70,10 @@ class Speed extends Array {
70
70
  static inertia = inertia;
71
71
  reset() {
72
72
  this.cache.splice(0, this.cache.length, 0);
73
+ for (var cx = 0, dx = this.length; cx < dx; cx++) {
74
+ if (this[cx] > 0) this[cx] = 1e-13;
75
+ if (this[cx] < 0) this[cx] = -1e-13;
76
+ }
73
77
  }
74
78
  unset() {
75
79
  this.splice(0, this.length), this.cache.splice(0, this.cache.length), this.stamp = 0;
@@ -173,7 +173,7 @@ var 逆 = function (A) {
173
173
  A.push.apply(A, E);
174
174
  for (var cx = 0, dx = dim; cx < dx; cx++) {
175
175
  var start = cx * dim + cx;
176
- for (var ct = start, dy = X.length; ct < dy; ct += dim) {
176
+ for (var ct = start, dt = X.length; ct < dt; ct += dim) {
177
177
  if (X[ct] !== 0) break;
178
178
  }
179
179
  if (ct !== start) {
@@ -192,7 +192,7 @@ var 逆 = function (A) {
192
192
  A[cy] *= ratio;
193
193
  }
194
194
  }
195
- for (var ct = start + dim, dy = X.length; ct < dy; ct += dim) {
195
+ for (var ct = start + dim, dt = X.length; ct < dt; ct += dim) {
196
196
  if (X[ct] === 0) continue;
197
197
  var ratio = -X[ct];
198
198
  var delta = start - ct;
@@ -202,12 +202,12 @@ var 逆 = function (A) {
202
202
  }
203
203
  }
204
204
  }
205
- for (var cx = dim - 2; cx > 0; cx--) {
205
+ for (var cx = dim - 2; cx >= 0; cx--) {
206
206
  var start = cx * dim + cx + 1;
207
- for (var ct = start; ct > 0; ct -= dim) {
207
+ for (var ct = start; ct >= 0; ct -= dim) {
208
208
  if (X[ct] === 0) continue;
209
209
  var ratio = -X[ct];
210
- var delta = ct - start;
210
+ var delta = dim + start - ct;
211
211
  for (var cy = cx * dim, dy = cy + dim; cy < dy; cy++) {
212
212
  X[cy] += X[cy + delta] * ratio;
213
213
  A[cy] += A[cy + delta] * ratio;
@@ -217,7 +217,6 @@ var scan = function (text) {
217
217
  }
218
218
  if (data || prop) push();
219
219
  while (parents[0] === undefined && parents.length > 0) parents.shift();
220
- console.log(parents[0])
221
220
  return parents[0];
222
221
  }
223
222
  module.exports = scan;
@@ -173,7 +173,7 @@ function checkRefered(scope) {
173
173
  if (right.length) {
174
174
  var key = createExpressKey(right);
175
175
  var iswrite = false;
176
- iswrite = !!o.kind || !!e && e.type === STAMP && /=$/.test(e.text);
176
+ iswrite = !!o.kind || !!e && e.type === STAMP && /(?<![\!\=])\=$/.test(e.text);
177
177
  if (key) map[key] = map[key] | 1 + iswrite;
178
178
  }
179
179
  }
@@ -11,9 +11,10 @@ var rgb4v = function (r, g, b, v) {
11
11
  };
12
12
 
13
13
 
14
+ var number_sort = (a, b) => a - b;
14
15
 
15
16
  var rgb4h = function (r, g, b, h) {
16
- var [p, q, s] = [r, g, b].sort();
17
+ var [p, q, s] = [r, g, b].sort(number_sort);
17
18
  var m = s - p;
18
19
  h = (h % 360 + 360) % 360;
19
20
  if (h < 60) {
@@ -1,5 +1,5 @@
1
1
  function extendTouchEvent(e) {
2
- var touch = e.touches[0];
2
+ var touch = e.changedTouches[0];
3
3
  for (var k in touch) {
4
4
  if (!(k in e)) e[k] = touch[k];
5
5
  }
@@ -143,14 +143,14 @@ function ylist(container, generator, $Y) {
143
143
  last_index = index;
144
144
  continue;
145
145
  }
146
- if (last_index > offset) {
147
- list.insertBefore(item, last_item);
148
- } else {
149
- list.insertBefore(item, getNextSibling(last_item));
150
- }
151
146
  } else {
152
147
  delete childrenMap[offset];
153
148
  }
149
+ if (last_index > offset) {
150
+ if (item.nextElementSibling !== last_item) list.insertBefore(item, last_item);
151
+ } else {
152
+ if (item.previousElementSibling !== item) list.insertBefore(item, getNextSibling(last_item));
153
+ }
154
154
  last_index = offset;
155
155
  last_item = item;
156
156
  if (offset === index || !indexed_item) indexed_item = item;
@@ -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;
@@ -40,6 +40,10 @@ var create = function (url, key) {
40
40
  css(imgpic, style);
41
41
  if (imgpic) dispatch(imgpic, 'scaled');
42
42
  };
43
+ image.close = function () {
44
+ if (!p.touchclose) return false;
45
+ remove(p);
46
+ };
43
47
  image.park = function (x, y, scaled, rotate) {
44
48
  var style = get_style(x, y, scaled, rotate);
45
49
  var a = transition(imgpic, style, true);
@@ -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;
@@ -15,19 +11,66 @@ var getstation = function (n, s) {
15
11
  return n;
16
12
  };
17
13
  var trimCoord = move.trimCoord;
18
- var isequal = (a, b) => a === b || Math.abs((a - b) / (a + b)) < 1e-12;
14
+ var isequal = (a, b) => a === b || Math.abs(a - b) < .1;
15
+ var aimed = (from, to) => (from + from + from + to) / 4;
19
16
  function picture_(image = document.createElement("div")) {
20
17
  var image_width, image_height;
21
- var scaled, x, y, min_scale, loaded_scale, locked_scale, click_scale, loaded_x, loaded_y;
18
+ var scaled = 1, x = 0, y = 0, min_scale, cover_scale, isxrelex, contain_scale, loaded_scale, click_scale, loaded_x, loaded_y;
22
19
  var loaded_width, loaded_height;
23
20
  var max_scale = 10 * devicePixelRatio;
24
- var shape = function () {
21
+ var istouching = false;
22
+ var _shape = function (x, y, scaled, rotated) {
23
+ image.rotate = rotated;
24
+ image.scaled = scaled;
25
+ image.x = x;
26
+ image.y = y;
25
27
  image.shape(x, y, scaled / devicePixelRatio, rotated);
26
- loaded_rotate = rotated; loaded_scale = scaled;
28
+ image.locked = (scaled <= contain_scale) && !overflow();
29
+ }
30
+ var shape = function () {
31
+ _shape(x, y, scaled, rotated);
32
+ shaped_rotate = rotated;
33
+ };
34
+ var overflow = function () {
35
+ var deltax = 0, deltay = 0;
36
+ if (scaled <= contain_scale) {
37
+ deltax = x + image_width * scaled / 2 - loaded_width / 2;
38
+ deltay = y + image_height * scaled / 2 - loaded_height / 2;
39
+ }
40
+ else if (scaled <= cover_scale) {
41
+ if (isxrelex) {
42
+ if (x > 0) deltax = x;
43
+ else if (x + image_width * scaled < loaded_width) deltax = loaded_width - x + image_width * scaled;
44
+ deltay = y + image_height * scaled / 2 - loaded_height / 2;
45
+ } else {
46
+ if (y > 0) deltay = y;
47
+ else if (y + image_height * scaled < loaded_height) deltay = y + image_height * scaled - loaded_height;
48
+ deltax = x + image_width * scaled / 2 - loaded_width / 2;
49
+ }
50
+ }
51
+ else {
52
+ if (x > 0) deltax = x;
53
+ else if (x + image_width * scaled < loaded_width) deltax = y + image_height * scaled - loaded_height;
54
+ if (y > 0) deltay = y;
55
+ else if (y + image_height * scaled < loaded_height) deltay = y + image_height * scaled - loaded_height;
56
+ }
57
+ if (Math.abs(deltax) > .1 || Math.abs(deltay) > .1) {
58
+ deltax /= loaded_width;
59
+ deltay /= loaded_height;
60
+
61
+ return Math.sqrt(deltax * deltax + deltay * deltay);
62
+ }
27
63
  };
28
64
  image.reshape = shape;
29
65
  var park = function () {
30
- if (image.park) image.park(x, y, scaled / devicePixelRatio, loaded_rotate);
66
+ if (isequal(image.x, x) && isequal(image.y, y) && isequal(image.scaled, scaled) && isequal(image.rotate, rotated)) {
67
+ _shape(x, y, scaled, rotated);
68
+ if (image.park) image.park(x, y, scaled / devicePixelRatio, shaped_rotate);
69
+ }
70
+ else {
71
+ _shape(aimed(image.x, x), aimed(image.y, y), aimed(image.scaled, scaled), aimed(image.rotate, rotated));
72
+ return true;
73
+ }
31
74
  };
32
75
  var loadParams = function () {
33
76
  if (!image.width) return;
@@ -35,12 +78,20 @@ function picture_(image = document.createElement("div")) {
35
78
  image_height = image.height / devicePixelRatio;
36
79
  loaded_width = image.clientWidth;
37
80
  loaded_height = image.clientHeight;
38
- loaded_rotate = 0;
39
- locked_scale = loaded_scale = Math.min(loaded_height / image_height, loaded_width / image_width);
81
+ shaped_rotate = 0;
82
+ var y_scale = loaded_height / image_height;
83
+ var x_scale = loaded_width / image_width;
84
+ isxrelex = x_scale > y_scale;
85
+ cover_scale = isxrelex ? x_scale : y_scale;
86
+ loaded_scale = contain_scale = isxrelex ? y_scale : x_scale;
40
87
  if (loaded_scale >= 1) {
41
88
  click_scale = 4;
42
89
  loaded_scale = 1;
43
- } else {
90
+ }
91
+ else if (loaded_scale > .5) {
92
+ click_scale = 2;
93
+ }
94
+ else {
44
95
  click_scale = 1;
45
96
  }
46
97
  loaded_x = (loaded_width - image_width * loaded_scale) / 2;
@@ -50,47 +101,25 @@ function picture_(image = document.createElement("div")) {
50
101
  x = loaded_x;
51
102
  y = loaded_y;
52
103
  updatexy();
53
- set_unlock();
54
- };
55
- var set_unlock = function () {
56
- if (!loaded_scale) return;
57
104
  fixpos();
58
105
  shape();
59
106
  };
60
107
 
61
108
  on("append")(image, loadParams);
62
-
63
- on("append")(image, function () {
64
- mountedPictures.push(image);
65
- });
66
- on("remove")(image, function () {
67
- removeFromList(mountedPictures, image);
68
- });
69
109
  image.init = loadParams;
70
110
  image.locked = false;
71
111
 
72
112
  on("dblclick")(image, function (event) {
73
113
  if (event.defaultPrevented) return;
74
114
  event.preventDefault();
75
- var image = this;
76
- loadParams();
77
- image.locked = isequal(scaled, loaded_scale) && isequal(loaded_x, x) && isequal(loaded_y, y);
78
115
  var layerx = event.offsetX || 0;
79
116
  var layery = event.offsetY || 0;
80
- if (layerx)
81
- if (image.locked) {
82
- var width = image_width * loaded_scale, height = image_height * loaded_scale;
83
- if (layerx > loaded_x + width || layerx < loaded_x || width < image.offsetWidth >> 2) {
84
- layerx = loaded_x + width / 2;
85
- }
86
- if (layery > loaded_y + height || layery < loaded_y || height < image.offsetHeight >> 2) {
87
- layery = loaded_y + height / 2;
88
- }
89
- scale(layerx, layery, click_scale / loaded_scale);
90
- } else {
91
- click_scale = scaled;
92
- set_unlock();
93
- }
117
+ if (isequal(scaled, loaded_scale)) {
118
+ scale(layerx, layery, click_scale / scaled);
119
+ }
120
+ else {
121
+ scale(layerx, layery, loaded_scale / scaled);
122
+ }
94
123
  });
95
124
  image.getScale = function () {
96
125
  if (!this.locked && !loaded_scale) {
@@ -110,7 +139,6 @@ function picture_(image = document.createElement("div")) {
110
139
  y += y1 - y0;
111
140
  };
112
141
  var scale = function (layerx, layery, ratio) {
113
- if (!image.locked) return;
114
142
  scaled *= ratio;
115
143
  x = (x - layerx) * ratio + layerx;
116
144
  y = (y - layery) * ratio + layery;
@@ -123,30 +151,23 @@ function picture_(image = document.createElement("div")) {
123
151
  if (scaled >= max_scale * 1.1 && scale > 1) return;
124
152
  if (scaled <= min_scale && scale < 1) return;
125
153
  scaled *= scale;
126
- var centerx = (x1 + x2) / 2;
127
- var centery = (y1 + y2) / 2;
128
- var centerm = (m1 + m2) / 2;
129
- var centern = (n1 + n2) / 2;
130
- x = (x - centerx) * scale + centerm;
131
- y = (y - centery) * scale + centern;
154
+ var ox = image.clientWidth / 2;
155
+ var oy = image.clientHeight / 2;
156
+ x = (x - x1) * scale + ox;
157
+ y = (y - y1) * scale + oy;
132
158
  var theta = Math.atan2(n2 - n1, m2 - m1) - Math.atan2(y2 - y1, x2 - x1);
133
159
  var r = rotated;
134
160
  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;
161
+ rotated = r;
162
+ updatexy();
163
+ x = x - ox + m1;
164
+ y = y - oy + n1;
147
165
  shape();
148
166
  };
149
167
  var recover = function (change) {
168
+ if (image.close && scaled < cover_scale && overflow() > .3) {
169
+ if (image.close() !== false) return;
170
+ }
150
171
  var aimed_scale = getstation(scaled);
151
172
  if (aimed_scale !== scaled) {
152
173
  change = true;
@@ -169,24 +190,21 @@ function picture_(image = document.createElement("div")) {
169
190
  var saved_x = x, saved_y = y;
170
191
  fixpos();
171
192
  if (change || saved_x !== x || saved_y !== y) {
172
- park();
193
+ move.smooth(park);
173
194
  return;
174
195
  }
175
- if (image.clientHeight && image.clientWidth) return true;
176
196
  };
177
197
  var move = inertia(function (deltax, deltay) {
178
198
  var saved_x = x, saved_y = y;
179
199
  x += deltax, y += deltay;
180
- fixpos();
200
+ if (scaled > contain_scale) fixpos();
181
201
  shape();
182
- if (saved_x === x && saved_y === y) return false;
202
+ if (saved_x === x && saved_y === y || overflow() > 1) return false;
183
203
  });
184
204
  var saved_event;
185
205
  onmousewheel(image, function (event) {
186
206
  var { offsetX: layerX, offsetY: layerY, deltaY } = event;
187
- if (this.locked) event.preventDefault();
188
207
  if (!deltaY) return;
189
- if (!this.locked) loadParams();
190
208
  this.locked = true;
191
209
  var ratio = Math.pow(0.99, 20 * Math.atan(deltaY / 20));
192
210
  var __scaled = scaled;
@@ -204,18 +222,15 @@ function picture_(image = document.createElement("div")) {
204
222
  start(event) {
205
223
  event.preventDefault();
206
224
  saved_event = event;
207
- event.moveLocked = scaled > locked_scale;
208
- if (!this.locked) {
209
- loadParams();
210
- }
225
+ istouching = !this.locked;
211
226
  move.reset();
212
227
  },
213
228
  move(event) {
214
229
  if (event.moveLocked) return;
215
- event.moveLocked = scaled > locked_scale;
216
- event.preventDefault();
230
+ if (!onclick.preventClick) return;
217
231
  if (event.touches && saved_event.touches) {
218
232
  if (event.touches.length !== saved_event.touches.length) {
233
+ event.moveLocked = true;
219
234
  saved_event = event;
220
235
  return;
221
236
  }
@@ -224,7 +239,6 @@ function picture_(image = document.createElement("div")) {
224
239
  case 1:
225
240
  break;
226
241
  case 2:
227
- this.locked = true;
228
242
  event.moveLocked = true;
229
243
  var [xy1, xy2] = saved_event.touches;
230
244
  var [mn1, mn2] = event.touches;
@@ -244,39 +258,49 @@ function picture_(image = document.createElement("div")) {
244
258
  rotatexy(saved_event.clientX, saved_event.clientY, event.clientX, event.clientY);
245
259
  }
246
260
  else {
247
- if (!this.locked) return;
248
261
  var deltax = event.clientX - saved_event.clientX,
249
262
  deltay = event.clientY - saved_event.clientY;
250
- move(deltax, deltay);
263
+
264
+ if (!istouching && istouching !== null) {
265
+ istouching = Math.abs(deltay) > Math.abs(deltax) ? true : null;
266
+ }
267
+ if (istouching) {
268
+ event.moveLocked = true;
269
+ move(deltax, deltay);
270
+ }
251
271
  }
252
272
  saved_event = event;
253
273
  },
254
274
  end(event) {
275
+ if (event.touches && event.touches.length > 0) return;
276
+ istouching = false;
255
277
  if (saved_event) {
256
278
  if (event.timeStamp - saved_event.timeStamp > 120) {
257
279
  move.reset();
258
280
  }
259
281
  }
260
282
  saved_event = null;
261
- event.moveLocked = scaled >= locked_scale;
262
- if (this.locked && onclick.preventClick) move.smooth();
283
+ if (onclick.preventClick) move.smooth(recover);
263
284
  }
264
285
  });
265
- var loaded_rotate = 0, rotated = 0;
286
+ var shaped_rotate = 0, rotated = 0;
266
287
  var rotatexy = function (x1, y1, x2, y2) {
267
288
  var { left, top } = getScreenPosition(image);
268
289
  var centerx = left + image.clientLeft + image.clientWidth / 2, centery = top + image.clientTop + image.clientHeight / 2;
269
- var deltax = x2 - x1, deltay = y2 - y1;
270
- var rx = x1 - centerx, ry = y1 - centery;
271
- var sign = -ry * deltax + rx * deltay;
272
- var delta = 90 * Math.sqrt(deltax * deltax + deltay * deltay) / Math.sqrt(rx * rx + ry * ry);
273
- if (delta > 10) delta = 10;
274
- if (sign) image.rotateBy(sign > 0 ? delta : -delta);
290
+ // var deltax = x2 - x1, deltay = y2 - y1;
291
+ // var rx = x1 - centerx, ry = y1 - centery;
292
+ // var sign = -ry * deltax + rx * deltay;
293
+ // var delta = Math.sqrt(deltax * deltax + deltay * deltay) / Math.sqrt(rx * rx + ry * ry);
294
+ // if (delta > 10) delta = 10;
295
+ // delta *= sign > 0 ? 1 : -1;
296
+ if (isequal(x1, centerx) && isequal(y1, centery) || isequal(x2, centerx) && isequal(y2, centery)) return;
297
+ var delta = Math.atan2(y2 - centery, x2 - centerx) - Math.atan2(y1 - centery, x1 - centerx);
298
+ rotated += delta * 180 / Math.PI, updatexy(), shape();
275
299
  }
276
300
  var updatexy = function () {
277
- var deg = rotated - loaded_rotate;
301
+ var deg = rotated - shaped_rotate;
278
302
  if (isFinite(deg)) {
279
- loaded_rotate = rotated;
303
+ shaped_rotate = rotated;
280
304
  [x, y] = getrotatedltwh(deg, scaled);
281
305
  }
282
306
  };
@@ -289,7 +313,7 @@ function picture_(image = document.createElement("div")) {
289
313
  var [c1, c2] = rotate([m, n], -a, c);
290
314
  c1 -= w / 2;
291
315
  c2 -= h / 2;
292
- var a = loaded_rotate;
316
+ var a = shaped_rotate;
293
317
  var l = c[0] - w / 2;
294
318
  var r = l + w;
295
319
  var t = c[1] - h / 2;
@@ -321,8 +345,9 @@ function picture_(image = document.createElement("div")) {
321
345
  } else {
322
346
  shape();
323
347
  }
324
-
325
348
  };
349
+ bind('resize')(image, image.update);
350
+
326
351
  image.rotateTo = function (deg) {
327
352
  rotated = deg;
328
353
  this.update();
@@ -1,9 +1,8 @@
1
1
  function picture_test() {
2
2
  var p = picture([
3
- "/docs/images/cat.jpg",
4
- "zimoli/images/avatar.png",
5
- "zimoli/images/avatar.png",
6
- "zimoli/images/avatar.png",
3
+ "images/cat.jpg",
4
+ "images/mirror.png",
7
5
  ]);
6
+ p.touchclose = true;
8
7
  popup(p);
9
8
  }
@@ -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;
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "efront",
3
- "version": "3.14.8",
3
+ "version": "3.15.2",
4
4
  "description": "一个开发工具,开放源代码,自带组件库和编译环境,可以用来开发web组件,web应用或nodejs模块,或做为已有代码的加密工具,也可以做为静态页面服务器或跨域中转服务器使用",
5
5
  "main": "public/efront.js",
6
6
  "directories": {