efront 3.14.11 → 3.15.6
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/cross_.js +5 -0
- 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 +114 -87
- package/coms/zimoli/picture_test.js +3 -4
- package/coms/zimoli/render.js +6 -2
- 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/cross_.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,7 @@ function picture_(image = document.createElement("div")) {
|
|
|
224
239
|
case 1:
|
|
225
240
|
break;
|
|
226
241
|
case 2:
|
|
227
|
-
|
|
242
|
+
default:
|
|
228
243
|
event.moveLocked = true;
|
|
229
244
|
var [xy1, xy2] = saved_event.touches;
|
|
230
245
|
var [mn1, mn2] = event.touches;
|
|
@@ -237,6 +252,7 @@ function picture_(image = document.createElement("div")) {
|
|
|
237
252
|
);
|
|
238
253
|
saved_event = event;
|
|
239
254
|
return;
|
|
255
|
+
|
|
240
256
|
}
|
|
241
257
|
}
|
|
242
258
|
if (event.which === 3) {
|
|
@@ -244,39 +260,49 @@ function picture_(image = document.createElement("div")) {
|
|
|
244
260
|
rotatexy(saved_event.clientX, saved_event.clientY, event.clientX, event.clientY);
|
|
245
261
|
}
|
|
246
262
|
else {
|
|
247
|
-
if (!this.locked) return;
|
|
248
263
|
var deltax = event.clientX - saved_event.clientX,
|
|
249
264
|
deltay = event.clientY - saved_event.clientY;
|
|
250
|
-
|
|
265
|
+
|
|
266
|
+
if (!istouching && istouching !== null) {
|
|
267
|
+
istouching = Math.abs(deltay) > Math.abs(deltax) ? true : null;
|
|
268
|
+
}
|
|
269
|
+
if (istouching) {
|
|
270
|
+
event.moveLocked = true;
|
|
271
|
+
move(deltax, deltay);
|
|
272
|
+
}
|
|
251
273
|
}
|
|
252
274
|
saved_event = event;
|
|
253
275
|
},
|
|
254
276
|
end(event) {
|
|
277
|
+
if (event.touches && event.touches.length > 0) return;
|
|
278
|
+
istouching = false;
|
|
255
279
|
if (saved_event) {
|
|
256
280
|
if (event.timeStamp - saved_event.timeStamp > 120) {
|
|
257
281
|
move.reset();
|
|
258
282
|
}
|
|
259
283
|
}
|
|
260
284
|
saved_event = null;
|
|
261
|
-
|
|
262
|
-
if (this.locked && onclick.preventClick) move.smooth();
|
|
285
|
+
if (onclick.preventClick) move.smooth(recover);
|
|
263
286
|
}
|
|
264
287
|
});
|
|
265
|
-
var
|
|
288
|
+
var shaped_rotate = 0, rotated = 0;
|
|
266
289
|
var rotatexy = function (x1, y1, x2, y2) {
|
|
267
290
|
var { left, top } = getScreenPosition(image);
|
|
268
291
|
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
|
-
|
|
292
|
+
// var deltax = x2 - x1, deltay = y2 - y1;
|
|
293
|
+
// var rx = x1 - centerx, ry = y1 - centery;
|
|
294
|
+
// var sign = -ry * deltax + rx * deltay;
|
|
295
|
+
// var delta = Math.sqrt(deltax * deltax + deltay * deltay) / Math.sqrt(rx * rx + ry * ry);
|
|
296
|
+
// if (delta > 10) delta = 10;
|
|
297
|
+
// delta *= sign > 0 ? 1 : -1;
|
|
298
|
+
if (isequal(x1, centerx) && isequal(y1, centery) || isequal(x2, centerx) && isequal(y2, centery)) return;
|
|
299
|
+
var delta = Math.atan2(y2 - centery, x2 - centerx) - Math.atan2(y1 - centery, x1 - centerx);
|
|
300
|
+
rotated += delta * 180 / Math.PI, updatexy(), shape();
|
|
275
301
|
}
|
|
276
302
|
var updatexy = function () {
|
|
277
|
-
var deg = rotated -
|
|
303
|
+
var deg = rotated - shaped_rotate;
|
|
278
304
|
if (isFinite(deg)) {
|
|
279
|
-
|
|
305
|
+
shaped_rotate = rotated;
|
|
280
306
|
[x, y] = getrotatedltwh(deg, scaled);
|
|
281
307
|
}
|
|
282
308
|
};
|
|
@@ -289,7 +315,7 @@ function picture_(image = document.createElement("div")) {
|
|
|
289
315
|
var [c1, c2] = rotate([m, n], -a, c);
|
|
290
316
|
c1 -= w / 2;
|
|
291
317
|
c2 -= h / 2;
|
|
292
|
-
var a =
|
|
318
|
+
var a = shaped_rotate;
|
|
293
319
|
var l = c[0] - w / 2;
|
|
294
320
|
var r = l + w;
|
|
295
321
|
var t = c[1] - h / 2;
|
|
@@ -321,8 +347,9 @@ function picture_(image = document.createElement("div")) {
|
|
|
321
347
|
} else {
|
|
322
348
|
shape();
|
|
323
349
|
}
|
|
324
|
-
|
|
325
350
|
};
|
|
351
|
+
bind('resize')(image, image.update);
|
|
352
|
+
|
|
326
353
|
image.rotateTo = function (deg) {
|
|
327
354
|
rotated = deg;
|
|
328
355
|
this.update();
|
package/coms/zimoli/render.js
CHANGED
|
@@ -725,7 +725,7 @@ function renderStructure(element, scope, parentScopes = []) {
|
|
|
725
725
|
var attrs = [].concat.apply([], element.attributes);
|
|
726
726
|
var withContext = parentScopes ? parentScopes.map((_, cx) => `with(this.$parentScopes[${cx}])`).join("") : '';
|
|
727
727
|
var types = {};
|
|
728
|
-
var emiter_reg = /^(?:(v|ng|on|once)
|
|
728
|
+
var emiter_reg = /^(?:(v|ng|on|once)?\-|v\-on\:|@|once|on)/i;
|
|
729
729
|
var ons = [];
|
|
730
730
|
var copys = [];
|
|
731
731
|
var binds = {};
|
|
@@ -768,21 +768,25 @@ function renderStructure(element, scope, parentScopes = []) {
|
|
|
768
768
|
continue;
|
|
769
769
|
}
|
|
770
770
|
if (element.$struct) continue;
|
|
771
|
-
|
|
771
|
+
// ng-html,ng-src,ng-text,ng-model,ng-style,ng-class,...
|
|
772
|
+
var key = name.replace(/^(ng|v|[^\_\:\.]*?)\-|^[\:\_\.]|^v\-bind\:/i, "").toLowerCase();
|
|
772
773
|
if (directives.hasOwnProperty(key) || /^([\_\:\.]|v\-bind\:)/.test(name)) {
|
|
773
774
|
binds[key] = value;
|
|
774
775
|
element.removeAttribute(name);
|
|
775
776
|
}
|
|
777
|
+
// ng-click on-click v-click @click @mousedown ...
|
|
776
778
|
else if (emiter_reg.test(name)) {
|
|
777
779
|
var match = emiter_reg.exec(name);
|
|
778
780
|
var ngon = (match[1] || match[0]).toLowerCase() === 'once' ? 'once' : 'on';
|
|
779
781
|
element.removeAttribute(name);
|
|
780
782
|
ons.push([emiters[ngon], name.replace(emiter_reg, ''), value]);
|
|
781
783
|
}
|
|
784
|
+
// placeholder_ href_ checked_ ...
|
|
782
785
|
else if (/[_@\:\.]$/.test(name)) {
|
|
783
786
|
attr1[name.replace(/[_@\:\.]$/, "")] = value;
|
|
784
787
|
element.removeAttribute(name);
|
|
785
788
|
}
|
|
789
|
+
// title alt name type placeholder href checked ...
|
|
786
790
|
else {
|
|
787
791
|
if (!/\-/.test(name) || value === '') {
|
|
788
792
|
copys.push(attr);
|
|
Binary file
|