efront 3.12.3 → 3.13.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.
- package/apps/pivot/api.yml +1 -0
- package/apps/pivot/home/welcome.html +1 -1
- package/apps/pivot/home/welcome.js +6 -9
- package/apps/pivot/log/count.html +1 -0
- package/apps/pivot/log/count.js +15 -0
- package/apps/pivot/log/count.less +8 -0
- package/apps/pivot/menu.yml +3 -1
- package/apps/pivot/share/list.less +0 -4
- package/coms/basic/{_cross.js → cross_.js} +9 -9
- package/coms/basic/parseYML.js +1 -1
- package/coms/frame/route.js +1 -0
- package/coms/kugou/parseSongsList.js +0 -1
- package/coms/reptile/cross.js +1 -1
- package/coms/zimoli/AudioContext_test.html +1 -1
- package/coms/zimoli/AudioContext_test.js +3 -3
- package/coms/zimoli/bind.js +4 -2
- package/coms/zimoli/cloneVisible.js +9 -2
- package/coms/zimoli/cross.js +3 -3
- package/coms/zimoli/css.js +13 -5
- package/coms/zimoli/data.js +6 -5
- package/coms/zimoli/drag.js +3 -2
- package/coms/zimoli/list.js +6 -6
- package/coms/zimoli/menu.js +33 -13
- package/coms/zimoli/menu.less +31 -9
- package/coms/zimoli/menuItem.js +1 -1
- package/coms/zimoli/menuList.html +5 -3
- package/coms/zimoli/menuList.js +63 -28
- package/coms/zimoli/menuList.less +5 -0
- package/coms/zimoli/model.js +1 -1
- package/coms/zimoli/on.js +5 -3
- package/coms/zimoli/picture.js +30 -335
- package/coms/zimoli/picture_.js +356 -0
- package/coms/zimoli/render.js +11 -2
- package/coms/zimoli/select.js +5 -5
- package/coms/zimoli/selectList.js +5 -2
- package/coms/zimoli/slider.js +13 -6
- package/coms/zimoli/table.html +6 -8
- package/coms/zimoli/table.js +25 -2
- package/coms/zimoli/table.less +24 -4
- package/coms/zimoli/vbox.js +1 -1
- package/package.json +1 -1
- package/public/efront.js +1 -1
package/coms/zimoli/menuList.js
CHANGED
|
@@ -102,23 +102,23 @@ var keyAction = function (deltax, deltay) {
|
|
|
102
102
|
}
|
|
103
103
|
};
|
|
104
104
|
function keyalt() {
|
|
105
|
-
if (
|
|
106
|
-
else {
|
|
105
|
+
if (this === document.activeElement) this.blur();
|
|
106
|
+
else if (root_menu === this && root_menu !== document.activeElement) {
|
|
107
107
|
root_menu.tabIndex = 0;
|
|
108
108
|
root_menu.focus();
|
|
109
|
-
root_menu.setFocus(
|
|
109
|
+
root_menu.setFocus(root_menu.firstMenu);
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
112
|
function keytab(event) {
|
|
113
|
-
if (root_menu !== document.activeElement) return;
|
|
114
113
|
var menu = mounted_menus[mounted_menus.length - 1] || root_menu;
|
|
115
114
|
event.preventDefault();
|
|
116
115
|
menu.moveFocus(event.shiftKey ? -1 : 1);
|
|
117
116
|
}
|
|
118
117
|
function keyesc() {
|
|
119
|
-
if (
|
|
120
|
-
|
|
121
|
-
|
|
118
|
+
if (this !== document.activeElement) return;
|
|
119
|
+
if (!mounted_menus.length) {
|
|
120
|
+
if (!this.ispop) this.blur();
|
|
121
|
+
else this.ispop = false;
|
|
122
122
|
}
|
|
123
123
|
}
|
|
124
124
|
function keyup() {
|
|
@@ -134,7 +134,6 @@ function keyright() {
|
|
|
134
134
|
keyAction(1, 0);
|
|
135
135
|
}
|
|
136
136
|
function keyspace() {
|
|
137
|
-
if (root_menu !== document.activeElement) return;
|
|
138
137
|
var menu = mounted_menus[mounted_menus.length - 1];
|
|
139
138
|
if (!menu || !menu.focused) menu = mounted_menus[mounted_menus.length - 2] || root_menu;
|
|
140
139
|
if (menu.focused) {
|
|
@@ -142,23 +141,26 @@ function keyspace() {
|
|
|
142
141
|
}
|
|
143
142
|
}
|
|
144
143
|
function register() {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
bind('keydown.alt.')(
|
|
148
|
-
bind('keydown.esc')(
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
144
|
+
var menu = this;
|
|
145
|
+
// if (!root_menu) root_menu = this;
|
|
146
|
+
bind('keydown.alt.')(menu, keyalt);
|
|
147
|
+
bind('keydown.esc')(menu, keyesc);
|
|
148
|
+
on('keydown.tab')(menu, keytab);
|
|
149
|
+
on('keydown.left')(menu, keyleft);
|
|
150
|
+
on('keydown.right')(menu, keyright);
|
|
151
|
+
on('keydown.up')(menu, keyup);
|
|
152
|
+
on('keydown.down')(menu, keydown);
|
|
153
|
+
on('keydown.enter')(menu, keyspace);
|
|
154
|
+
on('keydown.space')(menu, keyspace);
|
|
155
|
+
on("contextmenu")(menu, e => e.preventDefault());
|
|
155
156
|
}
|
|
156
157
|
function main(page, items, active, direction = 'y') {
|
|
157
158
|
if (!isNode(page)) {
|
|
158
159
|
var page = div();
|
|
159
160
|
}
|
|
160
161
|
var main = this;
|
|
161
|
-
if (direction
|
|
162
|
+
if (direction == 'y') page.ispop = true;
|
|
163
|
+
var istoolbar = direction === 't';
|
|
162
164
|
function popMenu(item, target) {
|
|
163
165
|
if (page.actived) {
|
|
164
166
|
clear();
|
|
@@ -195,7 +197,7 @@ function main(page, items, active, direction = 'y') {
|
|
|
195
197
|
if (offenter1) offenter1();
|
|
196
198
|
});
|
|
197
199
|
}
|
|
198
|
-
|
|
200
|
+
on("blur")(page, unfocus);
|
|
199
201
|
var template = page.tempalte || document.createElement("ylist");
|
|
200
202
|
if (!page.tempalte) {
|
|
201
203
|
template.className = '';
|
|
@@ -203,14 +205,19 @@ function main(page, items, active, direction = 'y') {
|
|
|
203
205
|
template.innerHTML = page.innerHTML;
|
|
204
206
|
page.tempalte = template;
|
|
205
207
|
}
|
|
206
|
-
var popTimer = 0;
|
|
207
|
-
var open = function () {
|
|
208
|
+
var popTimer = 0, byMousedown;
|
|
209
|
+
var open = function (time) {
|
|
208
210
|
cancel();
|
|
209
211
|
var elem = this;
|
|
210
|
-
|
|
212
|
+
time = +time;
|
|
213
|
+
if (byMousedown && !time) return;
|
|
214
|
+
if (time) byMousedown = false;
|
|
215
|
+
|
|
216
|
+
if (page.ispop || time) popTimer = setTimeout(function () {
|
|
217
|
+
if (time) byMousedown = elem;
|
|
211
218
|
page.setFocus(elem);
|
|
212
219
|
popMenu(elem.menu, elem);
|
|
213
|
-
}, 60);
|
|
220
|
+
}, time || 60);
|
|
214
221
|
};
|
|
215
222
|
var cancel = function () {
|
|
216
223
|
clearTimeout(popTimer);
|
|
@@ -218,13 +225,29 @@ function main(page, items, active, direction = 'y') {
|
|
|
218
225
|
var fire = function () {
|
|
219
226
|
cancel();
|
|
220
227
|
if (this.menu.line) return;
|
|
228
|
+
if (byMousedown) return;
|
|
221
229
|
var pop = active(this.menu, this);
|
|
222
230
|
if (pop === false) return;
|
|
223
231
|
var root = page.root || page;
|
|
232
|
+
if (root.direction === 't') {
|
|
233
|
+
var menu = this.menu;
|
|
234
|
+
if (root !== page) {
|
|
235
|
+
delete menu.children;
|
|
236
|
+
var target = root.actived.target;
|
|
237
|
+
menu = extend(target.menu, menu);
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
target = this;
|
|
241
|
+
}
|
|
242
|
+
if (root.selected) root.selected.selected = false;
|
|
243
|
+
menu.selected = true;
|
|
244
|
+
root.selected = target.menu;
|
|
245
|
+
}
|
|
224
246
|
if (root.ispop === 1) root.ispop = false;
|
|
225
247
|
if (page.actived && page.actived.target === this) {
|
|
226
248
|
while (mounted_menus.length && mounted_menus[mounted_menus.length - 1] !== page.actived) remove(mounted_menus.pop());
|
|
227
249
|
if (!mounted_menus.length) {
|
|
250
|
+
if (byMousedown === false) return;
|
|
228
251
|
popMenu(this.menu, this);
|
|
229
252
|
}
|
|
230
253
|
else {
|
|
@@ -233,14 +256,17 @@ function main(page, items, active, direction = 'y') {
|
|
|
233
256
|
}
|
|
234
257
|
else {
|
|
235
258
|
while (mounted_menus.length && mounted_menus[mounted_menus.length - 1] !== page) remove(mounted_menus.pop());
|
|
259
|
+
if (byMousedown === false) return;
|
|
236
260
|
popMenu(this.menu, this);
|
|
237
261
|
if (!page.actived) {
|
|
238
262
|
(page.root || page).blur();
|
|
239
263
|
}
|
|
240
264
|
}
|
|
241
265
|
};
|
|
242
|
-
|
|
243
|
-
|
|
266
|
+
var open1 = function (event) {
|
|
267
|
+
if (event.which === 3) event.preventDefault();
|
|
268
|
+
if (istoolbar) open.call(this, event.button ? 20 : 600);
|
|
269
|
+
};
|
|
244
270
|
if (!page.children.length || page.menutype === 1) {
|
|
245
271
|
page.menutype = 1;
|
|
246
272
|
var hasIcon = function () {
|
|
@@ -268,11 +294,15 @@ function main(page, items, active, direction = 'y') {
|
|
|
268
294
|
open: fire,
|
|
269
295
|
cancel,
|
|
270
296
|
popMenu: open,
|
|
297
|
+
popMenu1: open1
|
|
271
298
|
};
|
|
272
299
|
if (page.$src) {
|
|
273
300
|
var src = page.$src;
|
|
274
301
|
var itemName = src.itemName;
|
|
275
|
-
var className = `{'has-children':${itemName}.children&&${itemName}.children.length,
|
|
302
|
+
var className = `{'has-children':${itemName}.children&&${itemName}.children.length,
|
|
303
|
+
'warn':${itemName}.type==='danger'||${itemName}.type==='warn'||${itemName}.type==='red',
|
|
304
|
+
'selected':${itemName}.selected
|
|
305
|
+
}`;
|
|
276
306
|
var notHidden = `!${itemName}.hidden`;
|
|
277
307
|
var generator = getGenerator(page, 'menu-item');
|
|
278
308
|
list(page, function (index) {
|
|
@@ -286,6 +316,7 @@ function main(page, items, active, direction = 'y') {
|
|
|
286
316
|
a.menu = item;
|
|
287
317
|
on("mouseleave")(a, cancel);
|
|
288
318
|
on("mouseenter")(a, open);
|
|
319
|
+
if (istoolbar) on("mousedown")(a, open1);
|
|
289
320
|
on("click")(a, fire);
|
|
290
321
|
return a;
|
|
291
322
|
});
|
|
@@ -316,6 +347,7 @@ function main(page, items, active, direction = 'y') {
|
|
|
316
347
|
elem.menu = this.src[index];
|
|
317
348
|
on("mouseleave")(elem, cancel);
|
|
318
349
|
on("mouseenter")(elem, open);
|
|
350
|
+
if (istoolbar) on("mousedown")(elem, open1);
|
|
319
351
|
on("click")(elem, fire);
|
|
320
352
|
return elem;
|
|
321
353
|
}, direction);
|
|
@@ -326,11 +358,14 @@ function main(page, items, active, direction = 'y') {
|
|
|
326
358
|
page.active = function (a) {
|
|
327
359
|
fire.call(a);
|
|
328
360
|
};
|
|
329
|
-
page.registerAsRoot = register;
|
|
330
361
|
page.setFocus = setFocus;
|
|
331
362
|
page.moveFocus = moveFocus;
|
|
332
363
|
page.openFocus = openFocus;
|
|
333
364
|
page.closeFocus = closeFocus;
|
|
334
365
|
page.direction = direction;
|
|
366
|
+
register.call(page);
|
|
367
|
+
page.registerAsRoot = function () {
|
|
368
|
+
root_menu = this;
|
|
369
|
+
};
|
|
335
370
|
return page;
|
|
336
371
|
}
|
package/coms/zimoli/model.js
CHANGED
|
@@ -100,7 +100,7 @@ var constructors = {
|
|
|
100
100
|
break;
|
|
101
101
|
}
|
|
102
102
|
}
|
|
103
|
-
var pad = selectList(field.options, field.multi, true);
|
|
103
|
+
var pad = selectList(field.options, !!field.multi, true);
|
|
104
104
|
var e = document.createElement('select');
|
|
105
105
|
e.innerHTML = `<option selected value="${opt ? opt.key : ''}">${opt ? opt.name : '请选择'}</option>`;
|
|
106
106
|
e.value = opt ? opt.key : '';
|
package/coms/zimoli/on.js
CHANGED
|
@@ -155,14 +155,16 @@ function checkKeyNeed(eventtypes, e) {
|
|
|
155
155
|
}
|
|
156
156
|
return true;
|
|
157
157
|
}
|
|
158
|
+
var pendingid = 0;
|
|
158
159
|
function wrapHandler(h) {
|
|
159
160
|
if (h instanceof Function) {
|
|
160
161
|
return function () {
|
|
161
162
|
var res = h.apply(this, arguments);
|
|
162
163
|
if (res && isFunction(res.then)) {
|
|
163
|
-
|
|
164
|
+
var id = ++pendingid & 0x1fffffffffffff;
|
|
165
|
+
this.setAttribute('pending', id);
|
|
164
166
|
var removePending = () => {
|
|
165
|
-
this.removeAttribute('pending');
|
|
167
|
+
if (+this.getAttribute('pending') === id) this.removeAttribute('pending');
|
|
166
168
|
};
|
|
167
169
|
res.then(removePending, removePending);
|
|
168
170
|
}
|
|
@@ -273,7 +275,7 @@ if (is_addEventListener_enabled) {
|
|
|
273
275
|
}
|
|
274
276
|
if (e.button) {
|
|
275
277
|
if (e.buttons === undefined) e.buttons = e.button;
|
|
276
|
-
if (e.which === undefined) e.which = e.button;
|
|
278
|
+
if (e.which === undefined) e.which = e.button + 1;
|
|
277
279
|
}
|
|
278
280
|
if (e.keyCode) {
|
|
279
281
|
if (e.which === undefined) e.which = e.keyCode;
|
package/coms/zimoli/picture.js
CHANGED
|
@@ -1,21 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
on("resize")(window, function () {
|
|
3
|
-
mountedPictures.forEach(a => a.update());
|
|
4
|
-
});
|
|
1
|
+
|
|
5
2
|
var coordIn = move.coordIn;
|
|
6
|
-
var trimCoord = move.trimCoord;
|
|
7
|
-
var getstation = function (n, s) {
|
|
8
|
-
var scale = Math.pow(10, Math.round(Math.log(n) / Math.log(10)));
|
|
9
|
-
var step;
|
|
10
|
-
if (n / scale < 1) {
|
|
11
|
-
step = s ? .01 : .05;
|
|
12
|
-
} else {
|
|
13
|
-
step = s ? .05 : .1;
|
|
14
|
-
}
|
|
15
|
-
step = step * scale;
|
|
16
|
-
n = Math.round(n / step) * step;
|
|
17
|
-
return n;
|
|
18
|
-
};
|
|
19
3
|
var _createImage = function (url, callback) {
|
|
20
4
|
var imgpic;
|
|
21
5
|
if (url instanceof Image) {
|
|
@@ -38,17 +22,11 @@ var _createImage = function (url, callback) {
|
|
|
38
22
|
return imgpic;
|
|
39
23
|
};
|
|
40
24
|
var create = function (url, key) {
|
|
41
|
-
|
|
42
|
-
var __css = function (a) {
|
|
43
|
-
css.apply(a, arguments);
|
|
44
|
-
if (imgpic) dispatch(imgpic, 'scaled');
|
|
45
|
-
dispatch(p, 'scaled');
|
|
46
|
-
};
|
|
47
25
|
if (!url) return;
|
|
48
|
-
|
|
26
|
+
|
|
27
|
+
var image = picture_();
|
|
49
28
|
image.url = url;
|
|
50
29
|
if (广告 && !广告.parentNode) appendChild(image, 广告);
|
|
51
|
-
|
|
52
30
|
if (isObject(url)) {
|
|
53
31
|
if (key) {
|
|
54
32
|
url = seek(url, key);
|
|
@@ -56,56 +34,34 @@ var create = function (url, key) {
|
|
|
56
34
|
}
|
|
57
35
|
var p = this;
|
|
58
36
|
var createImage = p.createImage || _createImage;
|
|
59
|
-
var image_width, image_height;
|
|
60
|
-
var scaled, x, y, min_scale, loaded_scale, locked_scale, click_scale, loaded_x, loaded_y;
|
|
61
|
-
var origin_width, origin_height;
|
|
62
|
-
var max_scale = 10 * devicePixelRatio;
|
|
63
37
|
|
|
64
|
-
|
|
38
|
+
image.shape = function (x, y, scaled, rotate) {
|
|
39
|
+
var style = get_style(x, y, scaled, rotate);
|
|
40
|
+
css(imgpic, style);
|
|
41
|
+
if (imgpic) dispatch(imgpic, 'scaled');
|
|
42
|
+
};
|
|
43
|
+
image.park = function (x, y, scaled, rotate) {
|
|
44
|
+
var style = get_style(x, y, scaled, rotate);
|
|
45
|
+
var a = transition(imgpic, style, true);
|
|
46
|
+
setTimeout(function () {
|
|
47
|
+
// set_unlock();
|
|
48
|
+
// image.locked = false;
|
|
49
|
+
}, a || 0);
|
|
50
|
+
|
|
51
|
+
};
|
|
52
|
+
var init = function () {
|
|
65
53
|
if (!imgpic) return;
|
|
66
54
|
if (!image.clientHeight || !image.clientWidth) {
|
|
67
55
|
image.width = imgpic.width;
|
|
68
56
|
image.height = imgpic.height;
|
|
69
57
|
return;
|
|
70
58
|
}
|
|
71
|
-
image_width = image.width / devicePixelRatio;
|
|
72
|
-
image_height = image.height / devicePixelRatio;
|
|
73
|
-
origin_width = image.clientWidth;
|
|
74
|
-
origin_height = image.clientHeight;
|
|
75
|
-
origin_rotate = 0;
|
|
76
59
|
if (p.current === image) {
|
|
77
60
|
p.width = image.width;
|
|
78
61
|
p.height = image.height;
|
|
79
62
|
}
|
|
80
|
-
|
|
81
|
-
if (loaded_scale >= 0.9) {
|
|
82
|
-
if (loaded_scale < 1.2) {
|
|
83
|
-
click_scale = 1;
|
|
84
|
-
loaded_scale = .8;
|
|
85
|
-
} else if (loaded_scale < max_scale) {
|
|
86
|
-
click_scale = loaded_scale;
|
|
87
|
-
loaded_scale = 1;
|
|
88
|
-
} else {
|
|
89
|
-
click_scale = max_scale;
|
|
90
|
-
loaded_scale = 1;
|
|
91
|
-
}
|
|
92
|
-
} else {
|
|
93
|
-
click_scale = 1;
|
|
94
|
-
}
|
|
95
|
-
loaded_x = (image.clientWidth - image_width * loaded_scale) / 2;
|
|
96
|
-
loaded_y = (image.clientHeight - image_height * loaded_scale) / 2;
|
|
97
|
-
min_scale = loaded_scale * .75;
|
|
98
|
-
scaled = loaded_scale;
|
|
99
|
-
x = loaded_x;
|
|
100
|
-
y = loaded_y;
|
|
101
|
-
updatexy();
|
|
102
|
-
};
|
|
103
|
-
var set_unlock = function () {
|
|
104
|
-
if (!loaded_scale) return;
|
|
105
|
-
setInitParams();
|
|
106
|
-
__css(imgpic, get_style(-1));
|
|
63
|
+
image.init();
|
|
107
64
|
};
|
|
108
|
-
|
|
109
65
|
var imgpic;
|
|
110
66
|
image.setImage = function (_imgpic) {
|
|
111
67
|
if (!isElement(_imgpic)) _imgpic = this;
|
|
@@ -118,66 +74,24 @@ var create = function (url, key) {
|
|
|
118
74
|
remove(imgpic);
|
|
119
75
|
appendChild(image, _imgpic);
|
|
120
76
|
imgpic = _imgpic;
|
|
121
|
-
}
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
122
79
|
imgpic = _imgpic;
|
|
123
80
|
_imgpic.setAttribute('imgpic', '');
|
|
124
81
|
_imgpic.draggable = false;
|
|
125
82
|
image.width = _imgpic.width;
|
|
126
83
|
image.height = _imgpic.height;
|
|
127
84
|
appendChild(image, _imgpic);
|
|
128
|
-
|
|
129
|
-
set_unlock();
|
|
85
|
+
init();
|
|
130
86
|
}
|
|
131
87
|
};
|
|
88
|
+
|
|
132
89
|
createImage(url, image.setImage);
|
|
133
|
-
on("append")(image, setInitParams);
|
|
134
90
|
|
|
135
91
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
var time = +new Date;
|
|
140
|
-
var delta_time = time - last_click_time;
|
|
141
|
-
last_click_time = time;
|
|
142
|
-
if (delta_time > 300) return;
|
|
143
|
-
var image = this;
|
|
144
|
-
var __scaled = scaled, _x = x, _y = y;
|
|
145
|
-
setInitParams();
|
|
146
|
-
image.locked = __scaled === loaded_scale && loaded_x === _x && loaded_y === _y;
|
|
147
|
-
var layerx = event.offsetX || 0;
|
|
148
|
-
var layery = event.offsetY || 0;
|
|
149
|
-
if (layerx)
|
|
150
|
-
if (image.locked) {
|
|
151
|
-
var width = image_width * loaded_scale, height = image_height * loaded_scale;
|
|
152
|
-
if (layerx > loaded_x + width || layerx < loaded_x || width < image.offsetWidth >> 2) {
|
|
153
|
-
layerx = loaded_x + width / 2;
|
|
154
|
-
}
|
|
155
|
-
if (layery > loaded_y + height || layery < loaded_y || height < image.offsetHeight >> 2) {
|
|
156
|
-
layery = loaded_y + height / 2;
|
|
157
|
-
}
|
|
158
|
-
scale(layerx, layery, click_scale / loaded_scale);
|
|
159
|
-
} else {
|
|
160
|
-
set_unlock();
|
|
161
|
-
}
|
|
162
|
-
});
|
|
163
|
-
image.getScale = function () {
|
|
164
|
-
if (!this.locked && !loaded_scale) {
|
|
165
|
-
setInitParams();
|
|
166
|
-
}
|
|
167
|
-
return +String(+scaled + 0.00005).slice(0, 6);
|
|
168
|
-
};
|
|
169
|
-
var get_style = function (type) {
|
|
170
|
-
var width = image_width * scaled;
|
|
171
|
-
var height = image_height * scaled;
|
|
172
|
-
var r = image.rotate | 0;
|
|
173
|
-
var [, , w, h] = getrotatedltwh(r);
|
|
174
|
-
if (type <= 0) {
|
|
175
|
-
var x0 = x + (width - w) / 2;
|
|
176
|
-
var y0 = y + (height - h) / 2;
|
|
177
|
-
var [x1, y1] = trimCoord([image.clientWidth, image.clientHeight], [x0, y0, w, h], type);
|
|
178
|
-
x += x1 - x0;
|
|
179
|
-
y += y1 - y0;
|
|
180
|
-
}
|
|
92
|
+
var get_style = function (x, y, scaled, rotate) {
|
|
93
|
+
var width = image.width * scaled;
|
|
94
|
+
var height = image.height * scaled;
|
|
181
95
|
var [left, top, marginLeft, marginTop] = coordIn([image.clientWidth, image.clientHeight], [x, y, width, height]);
|
|
182
96
|
return {
|
|
183
97
|
imageRendering: scaled >= 3 / devicePixelRatio ? "pixelated" : "",
|
|
@@ -186,203 +100,9 @@ var create = function (url, key) {
|
|
|
186
100
|
left,
|
|
187
101
|
top,
|
|
188
102
|
marginLeft,
|
|
189
|
-
transform: `rotate(${
|
|
103
|
+
transform: `rotate(${rotate}deg)`,
|
|
190
104
|
marginTop
|
|
191
105
|
};
|
|
192
|
-
};
|
|
193
|
-
var scale = function (layerx, layery, ratio) {
|
|
194
|
-
if (!image.locked) return;
|
|
195
|
-
scaled *= ratio;
|
|
196
|
-
x = (x - layerx) * ratio + layerx;
|
|
197
|
-
y = (y - layery) * ratio + layery;
|
|
198
|
-
__css(imgpic, get_style());
|
|
199
|
-
};
|
|
200
|
-
var touch = function ([x1, y1, x2, y2], [m1, n1, m2, n2]) {
|
|
201
|
-
var l1 = Math.sqrt(Math.pow(m1 - m2, 2) + Math.pow(n1 - n2, 2));
|
|
202
|
-
var l2 = Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2));
|
|
203
|
-
var scale = l1 / l2;
|
|
204
|
-
if (scaled >= max_scale * 1.1 && scale > 1) return;
|
|
205
|
-
if (scaled <= min_scale && scale < 1) return;
|
|
206
|
-
scaled *= scale;
|
|
207
|
-
var centerx = (x1 + x2) / 2;
|
|
208
|
-
var centery = (y1 + y2) / 2;
|
|
209
|
-
var centerm = (m1 + m2) / 2;
|
|
210
|
-
var centern = (n1 + n2) / 2;
|
|
211
|
-
x = (x - centerx) * scale + centerm;
|
|
212
|
-
y = (y - centery) * scale + centern;
|
|
213
|
-
__css(imgpic, get_style());
|
|
214
|
-
};
|
|
215
|
-
var recover = function (change) {
|
|
216
|
-
var aimed_scale = getstation(scaled);
|
|
217
|
-
if (aimed_scale !== scaled) {
|
|
218
|
-
change = true;
|
|
219
|
-
x = (x - image.clientWidth / 2) / scaled * aimed_scale + image.clientWidth / 2;
|
|
220
|
-
y = (y - image.clientHeight / 2) / scaled * aimed_scale + image.clientHeight / 2;
|
|
221
|
-
scaled = aimed_scale;
|
|
222
|
-
}
|
|
223
|
-
if (scaled <= loaded_scale * 1.2) {
|
|
224
|
-
scaled = loaded_scale;
|
|
225
|
-
x = loaded_x;
|
|
226
|
-
y = loaded_y;
|
|
227
|
-
change = true;
|
|
228
|
-
}
|
|
229
|
-
if (scaled > max_scale) {
|
|
230
|
-
change = true;
|
|
231
|
-
x = (x - image.clientWidth / 2) * max_scale / scaled + image.clientWidth / 2;
|
|
232
|
-
y = (y - image.clientHeight / 2) * max_scale / scaled + image.clientHeight / 2;
|
|
233
|
-
scaled = max_scale;
|
|
234
|
-
}
|
|
235
|
-
var saved_x = x, saved_y = y;
|
|
236
|
-
var style = get_style(-1);
|
|
237
|
-
if (change || saved_x !== x || saved_y !== y) {
|
|
238
|
-
var a = transition(imgpic, style, true);
|
|
239
|
-
if (scaled === loaded_scale) {
|
|
240
|
-
setTimeout(function () {
|
|
241
|
-
set_unlock();
|
|
242
|
-
image.locked = false;
|
|
243
|
-
}, a || 0);
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
};
|
|
247
|
-
var move = inertia(function (deltax, deltay) {
|
|
248
|
-
var saved_x = x, saved_y = y;
|
|
249
|
-
x += deltax, y += deltay;
|
|
250
|
-
__css(imgpic, get_style(-1));
|
|
251
|
-
if (saved_x === x && saved_y === y) return false;
|
|
252
|
-
});
|
|
253
|
-
var saved_event, wheeltime;
|
|
254
|
-
onmousewheel(image, function (event) {
|
|
255
|
-
var { offsetX: layerX, offsetY: layerY, deltaY } = event;
|
|
256
|
-
if (this.locked) event.preventDefault();
|
|
257
|
-
if (!deltaY) return;
|
|
258
|
-
if (!this.locked) setInitParams();
|
|
259
|
-
this.locked = true;
|
|
260
|
-
var ratio = Math.pow(0.99, 20 * Math.atan(deltaY / 20));
|
|
261
|
-
var __scaled = scaled;
|
|
262
|
-
__scaled *= ratio;
|
|
263
|
-
if (__scaled > max_scale && ratio > 1) {
|
|
264
|
-
__scaled = max_scale;
|
|
265
|
-
}
|
|
266
|
-
if (__scaled < min_scale && ratio < 1) {
|
|
267
|
-
__scaled = min_scale;
|
|
268
|
-
}
|
|
269
|
-
ratio = __scaled / scaled;
|
|
270
|
-
scale(layerX, layerY, ratio);
|
|
271
|
-
});
|
|
272
|
-
moveupon(image, {
|
|
273
|
-
start(event) {
|
|
274
|
-
event.preventDefault();
|
|
275
|
-
saved_event = event;
|
|
276
|
-
event.moveLocked = scaled > locked_scale;
|
|
277
|
-
if (!this.locked) {
|
|
278
|
-
setInitParams();
|
|
279
|
-
}
|
|
280
|
-
move.reset();
|
|
281
|
-
},
|
|
282
|
-
move(event) {
|
|
283
|
-
if (event.moveLocked) return;
|
|
284
|
-
event.moveLocked = scaled > locked_scale;
|
|
285
|
-
event.preventDefault();
|
|
286
|
-
if (event.touches && saved_event.touches) {
|
|
287
|
-
if (event.touches.length !== saved_event.touches.length) {
|
|
288
|
-
saved_event = event;
|
|
289
|
-
return;
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
switch (event.touches.length) {
|
|
293
|
-
case 1:
|
|
294
|
-
if (!this.locked) return;
|
|
295
|
-
break;
|
|
296
|
-
case 2:
|
|
297
|
-
this.locked = true;
|
|
298
|
-
event.moveLocked = true;
|
|
299
|
-
var [xy1, xy2] = saved_event.touches;
|
|
300
|
-
var [mn1, mn2] = event.touches;
|
|
301
|
-
var { left, top } = getScreenPosition(image);
|
|
302
|
-
top += image.clientTop;
|
|
303
|
-
left += image.clientLeft;
|
|
304
|
-
touch(
|
|
305
|
-
[xy1.clientX - left, xy1.clientY - top, xy2.clientX - left, xy2.clientY - top],
|
|
306
|
-
[mn1.clientX - left, mn1.clientY - top, mn2.clientX - left, mn2.clientY - top]
|
|
307
|
-
);
|
|
308
|
-
saved_event = event;
|
|
309
|
-
return;
|
|
310
|
-
}
|
|
311
|
-
}
|
|
312
|
-
if (!this.locked) return;
|
|
313
|
-
var deltax = event.clientX - saved_event.clientX,
|
|
314
|
-
deltay = event.clientY - saved_event.clientY;
|
|
315
|
-
move(deltax, deltay);
|
|
316
|
-
saved_event = event;
|
|
317
|
-
},
|
|
318
|
-
end(event) {
|
|
319
|
-
if (saved_event) {
|
|
320
|
-
if (event.timeStamp - saved_event.timeStamp > 120) {
|
|
321
|
-
move.reset();
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
saved_event = null;
|
|
325
|
-
event.moveLocked = scaled >= locked_scale;
|
|
326
|
-
|
|
327
|
-
if (this.locked && onclick.preventClick) move.smooth(recover);
|
|
328
|
-
}
|
|
329
|
-
});
|
|
330
|
-
on("append")(image, function () {
|
|
331
|
-
mountedPictures.push(image);
|
|
332
|
-
set_unlock();
|
|
333
|
-
});
|
|
334
|
-
on("remove")(image, function () {
|
|
335
|
-
removeFromList(mountedPictures, image);
|
|
336
|
-
});
|
|
337
|
-
var origin_rotate = 0;
|
|
338
|
-
var updatexy = function () {
|
|
339
|
-
var deg = image.rotate - origin_rotate;
|
|
340
|
-
if (isFinite(deg)) {
|
|
341
|
-
origin_rotate = image.rotate;
|
|
342
|
-
[x, y] = getrotatedltwh(deg, scaled);
|
|
343
|
-
}
|
|
344
|
-
};
|
|
345
|
-
var getrotatedltwh = function (a, s = scaled) {
|
|
346
|
-
var w = image_width * s;
|
|
347
|
-
var h = image_height * s;
|
|
348
|
-
var c = [image.clientWidth / 2, image.clientHeight / 2];
|
|
349
|
-
var m = x + w / 2;
|
|
350
|
-
var n = y + h / 2;
|
|
351
|
-
var [c1, c2] = rotate([m, n], -a, c);
|
|
352
|
-
c1 -= w / 2;
|
|
353
|
-
c2 -= h / 2;
|
|
354
|
-
a = origin_rotate;
|
|
355
|
-
var l = c[0] - w / 2;
|
|
356
|
-
var r = l + w;
|
|
357
|
-
var t = c[1] - h / 2;
|
|
358
|
-
var b = t + h;
|
|
359
|
-
var [x1, y1] = rotate([l, t], a, c);
|
|
360
|
-
var [x2, y2] = rotate([r, t], a, c);
|
|
361
|
-
var [x3, y3] = rotate([l, b], a, c);
|
|
362
|
-
var [x4, y4] = rotate([r, b], a, c);
|
|
363
|
-
var l = Math.min(x1, x2, x3, x4);
|
|
364
|
-
var t = Math.min(y1, y2, y3, y4);
|
|
365
|
-
var w = Math.max(x1, x2, x3, x4) - l;
|
|
366
|
-
var h = Math.max(y1, y2, y3, y4) - t;
|
|
367
|
-
return [c1, c2, w, h];
|
|
368
|
-
};
|
|
369
|
-
image.update = function (animate) {
|
|
370
|
-
if (image.locked) {
|
|
371
|
-
updatexy();
|
|
372
|
-
x += (image.clientWidth - origin_width) / 2;
|
|
373
|
-
y += (image.clientHeight - origin_height) / 2;
|
|
374
|
-
origin_height = image.clientHeight;
|
|
375
|
-
origin_width = image.clientWidth;
|
|
376
|
-
__css(imgpic, get_style(-1));
|
|
377
|
-
return;
|
|
378
|
-
}
|
|
379
|
-
setInitParams();
|
|
380
|
-
if (animate !== false) {
|
|
381
|
-
recover();
|
|
382
|
-
} else {
|
|
383
|
-
__css(imgpic, get_style(-1));
|
|
384
|
-
}
|
|
385
|
-
|
|
386
106
|
}
|
|
387
107
|
return image;
|
|
388
108
|
};
|
|
@@ -446,39 +166,14 @@ function picture(url, to = 0, key) {
|
|
|
446
166
|
p.rotateTo = function (deg) {
|
|
447
167
|
var img = p.current;
|
|
448
168
|
if (!img) return;
|
|
449
|
-
img.
|
|
450
|
-
img.update();
|
|
169
|
+
img.rotateTo(deg);
|
|
451
170
|
return deg;
|
|
452
171
|
};
|
|
453
172
|
p.rotateBy = function (deg) {
|
|
454
173
|
var img = p.current;
|
|
455
174
|
if (!img) return;
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
r += deg;
|
|
459
|
-
if (deg > 0) {
|
|
460
|
-
// 九进八舍
|
|
461
|
-
var a = r / 90;
|
|
462
|
-
if (Math.ceil(a) - a < .01) {
|
|
463
|
-
r = Math.ceil(a) * 90;
|
|
464
|
-
} else {
|
|
465
|
-
r = Math.floor(a) * 90;
|
|
466
|
-
}
|
|
467
|
-
} else {
|
|
468
|
-
// 一进零舍
|
|
469
|
-
var a = r / 90;
|
|
470
|
-
if (Math.ceil(a) - a > .01) {
|
|
471
|
-
r = Math.ceil(a) * 90;
|
|
472
|
-
} else {
|
|
473
|
-
r = Math.floor(a) * 90;
|
|
474
|
-
}
|
|
475
|
-
}
|
|
476
|
-
} else {
|
|
477
|
-
r += deg;
|
|
478
|
-
}
|
|
479
|
-
img.rotate = r;
|
|
480
|
-
img.update(deg === 90 || deg === -90);
|
|
481
|
-
return r;
|
|
175
|
+
img.rotateBy(deg);
|
|
176
|
+
return img.rotate;
|
|
482
177
|
};
|
|
483
178
|
return p;
|
|
484
179
|
}
|