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.
Files changed (42) hide show
  1. package/apps/pivot/api.yml +1 -0
  2. package/apps/pivot/home/welcome.html +1 -1
  3. package/apps/pivot/home/welcome.js +6 -9
  4. package/apps/pivot/log/count.html +1 -0
  5. package/apps/pivot/log/count.js +15 -0
  6. package/apps/pivot/log/count.less +8 -0
  7. package/apps/pivot/menu.yml +3 -1
  8. package/apps/pivot/share/list.less +0 -4
  9. package/coms/basic/{_cross.js → cross_.js} +9 -9
  10. package/coms/basic/parseYML.js +1 -1
  11. package/coms/frame/route.js +1 -0
  12. package/coms/kugou/parseSongsList.js +0 -1
  13. package/coms/reptile/cross.js +1 -1
  14. package/coms/zimoli/AudioContext_test.html +1 -1
  15. package/coms/zimoli/AudioContext_test.js +3 -3
  16. package/coms/zimoli/bind.js +4 -2
  17. package/coms/zimoli/cloneVisible.js +9 -2
  18. package/coms/zimoli/cross.js +3 -3
  19. package/coms/zimoli/css.js +13 -5
  20. package/coms/zimoli/data.js +6 -5
  21. package/coms/zimoli/drag.js +3 -2
  22. package/coms/zimoli/list.js +6 -6
  23. package/coms/zimoli/menu.js +33 -13
  24. package/coms/zimoli/menu.less +31 -9
  25. package/coms/zimoli/menuItem.js +1 -1
  26. package/coms/zimoli/menuList.html +5 -3
  27. package/coms/zimoli/menuList.js +63 -28
  28. package/coms/zimoli/menuList.less +5 -0
  29. package/coms/zimoli/model.js +1 -1
  30. package/coms/zimoli/on.js +5 -3
  31. package/coms/zimoli/picture.js +30 -335
  32. package/coms/zimoli/picture_.js +356 -0
  33. package/coms/zimoli/render.js +11 -2
  34. package/coms/zimoli/select.js +5 -5
  35. package/coms/zimoli/selectList.js +5 -2
  36. package/coms/zimoli/slider.js +13 -6
  37. package/coms/zimoli/table.html +6 -8
  38. package/coms/zimoli/table.js +25 -2
  39. package/coms/zimoli/table.less +24 -4
  40. package/coms/zimoli/vbox.js +1 -1
  41. package/package.json +1 -1
  42. package/public/efront.js +1 -1
@@ -102,23 +102,23 @@ var keyAction = function (deltax, deltay) {
102
102
  }
103
103
  };
104
104
  function keyalt() {
105
- if (root_menu === document.activeElement) root_menu.blur();
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(this.firstMenu);
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 (root_menu === document.activeElement && !mounted_menus.length) {
120
- if (!root_menu.ispop) root_menu.blur();
121
- else root_menu.ispop = false;
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
- root_menu = this;
146
- bind('keydown.tab')(root_menu, keytab);
147
- bind('keydown.alt.')(root_menu, keyalt);
148
- bind('keydown.esc')(root_menu, keyesc);
149
- bind('keydown.left')(root_menu, keyleft);
150
- bind('keydown.right')(root_menu, keyright);
151
- bind('keydown.up')(root_menu, keyup);
152
- bind('keydown.down')(root_menu, keydown);
153
- bind('keydown.enter')(root_menu, keyspace);
154
- bind('keydown.space')(root_menu, keyspace);
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 !== 'x') page.ispop = true;
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
- if (!page.ispop) on("blur")(page, unfocus);
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
- if (page.ispop) popTimer = setTimeout(function () {
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,'warn':${itemName}.type==='danger'||${itemName}.type==='warn'||${itemName}.type==='red'}`;
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
  }
@@ -29,6 +29,11 @@
29
29
  color: #29c;
30
30
  }
31
31
 
32
+ &.selected {
33
+ background: #29c;
34
+ color: #fff;
35
+ }
36
+
32
37
  &.has-children {
33
38
  padding-right: 24px;
34
39
  padding-left: 16px;
@@ -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
- this.setAttribute('pending', '');
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;
@@ -1,21 +1,5 @@
1
- var mountedPictures = [];
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
- var image = div();
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
- var setInitParams = function () {
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
- locked_scale = loaded_scale = Math.min(image.clientHeight / image_height, image.clientWidth / image_width);
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
- } else {
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
- setInitParams();
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
- image.locked = false;
137
- var last_click_time = 0;
138
- on("click")(image, function (event) {
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(${origin_rotate}deg)`,
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.rotate = deg;
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
- var r = img.rotate | 0;
457
- if (deg === 90 || deg === -90) {
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
  }