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.
- package/coms/basic/Speed.js +5 -1
- package/coms/basic/matrix.js +5 -5
- package/coms/basic/parseYML.js +0 -1
- package/coms/compile/washcode.js +1 -1
- package/coms/zimoli/color.js +2 -1
- package/coms/zimoli/extendTouchEvent.js +1 -1
- package/coms/zimoli/list.js +5 -5
- package/coms/zimoli/menuList.js +5 -3
- package/coms/zimoli/moveupon.js +1 -0
- package/coms/zimoli/on.js +40 -6
- package/coms/zimoli/picture.js +4 -0
- package/coms/zimoli/picture_.js +112 -87
- package/coms/zimoli/picture_test.js +3 -4
- package/coms/zimoli/render.js +2 -0
- package/docs/images/mirror.png +0 -0
- package/package.json +1 -1
- package/public/efront.js +1 -1
package/coms/basic/Speed.js
CHANGED
|
@@ -4,7 +4,7 @@ function inertia(gun) {
|
|
|
4
4
|
if (
|
|
5
5
|
decrease instanceof Function
|
|
6
6
|
) {
|
|
7
|
-
if (!spd.length ||
|
|
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;
|
package/coms/basic/matrix.js
CHANGED
|
@@ -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,
|
|
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,
|
|
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
|
|
205
|
+
for (var cx = dim - 2; cx >= 0; cx--) {
|
|
206
206
|
var start = cx * dim + cx + 1;
|
|
207
|
-
for (var ct = start; ct
|
|
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 =
|
|
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;
|
package/coms/basic/parseYML.js
CHANGED
package/coms/compile/washcode.js
CHANGED
|
@@ -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 &&
|
|
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
|
}
|
package/coms/zimoli/color.js
CHANGED
|
@@ -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) {
|
package/coms/zimoli/list.js
CHANGED
|
@@ -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;
|
package/coms/zimoli/menuList.js
CHANGED
|
@@ -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.
|
|
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
|
-
|
|
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
|
-
|
|
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);
|
package/coms/zimoli/moveupon.js
CHANGED
|
@@ -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
|
-
|
|
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;
|
package/coms/zimoli/picture.js
CHANGED
|
@@ -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);
|
package/coms/zimoli/picture_.js
CHANGED
|
@@ -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(
|
|
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,
|
|
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
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
39
|
-
|
|
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
|
-
}
|
|
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 (
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
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
|
|
127
|
-
var
|
|
128
|
-
|
|
129
|
-
|
|
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
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
262
|
-
if (this.locked && onclick.preventClick) move.smooth();
|
|
283
|
+
if (onclick.preventClick) move.smooth(recover);
|
|
263
284
|
}
|
|
264
285
|
});
|
|
265
|
-
var
|
|
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 =
|
|
273
|
-
if (delta > 10) delta = 10;
|
|
274
|
-
|
|
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 -
|
|
301
|
+
var deg = rotated - shaped_rotate;
|
|
278
302
|
if (isFinite(deg)) {
|
|
279
|
-
|
|
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 =
|
|
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();
|
package/coms/zimoli/render.js
CHANGED
|
@@ -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
|