@anu3ev/fabric-image-editor 0.1.28 → 0.1.30
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/dist/main.js +712 -438
- package/package.json +1 -1
package/dist/main.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { ActiveSelection as
|
|
2
|
-
import { create as
|
|
3
|
-
var
|
|
1
|
+
import { ActiveSelection as P, util as U, controlsUtils as Oe, InteractiveFabricObject as Te, loadSVGFromURL as ke, FabricImage as le, Point as xe, Rect as Be, Circle as Ze, Triangle as ze, Group as Pe, Pattern as Ue, Canvas as Ye } from "fabric";
|
|
2
|
+
import { create as He } from "jsondiffpatch";
|
|
3
|
+
var _e = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict", w = function() {
|
|
4
4
|
for (var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 21, t = "", a = crypto.getRandomValues(new Uint8Array(e |= 0)); e--; )
|
|
5
|
-
t +=
|
|
5
|
+
t += _e[a[e] & 63];
|
|
6
6
|
return t;
|
|
7
7
|
};
|
|
8
|
-
function
|
|
8
|
+
function he(o, e, t, a, r, n, i) {
|
|
9
9
|
try {
|
|
10
10
|
var s = o[n](i), c = s.value;
|
|
11
11
|
} catch (u) {
|
|
@@ -13,22 +13,22 @@ function le(o, e, t, a, r, n, i) {
|
|
|
13
13
|
}
|
|
14
14
|
s.done ? e(c) : Promise.resolve(c).then(a, r);
|
|
15
15
|
}
|
|
16
|
-
function
|
|
16
|
+
function Re(o) {
|
|
17
17
|
return function() {
|
|
18
18
|
var e = this, t = arguments;
|
|
19
19
|
return new Promise(function(a, r) {
|
|
20
20
|
var n = o.apply(e, t);
|
|
21
21
|
function i(c) {
|
|
22
|
-
|
|
22
|
+
he(n, a, r, i, s, "next", c);
|
|
23
23
|
}
|
|
24
24
|
function s(c) {
|
|
25
|
-
|
|
25
|
+
he(n, a, r, i, s, "throw", c);
|
|
26
26
|
}
|
|
27
27
|
i(void 0);
|
|
28
28
|
});
|
|
29
29
|
};
|
|
30
30
|
}
|
|
31
|
-
class
|
|
31
|
+
class z {
|
|
32
32
|
/**
|
|
33
33
|
* Конструктор принимает редактор и опции.
|
|
34
34
|
* @param {Object} params
|
|
@@ -49,7 +49,7 @@ class Z {
|
|
|
49
49
|
editor: t,
|
|
50
50
|
options: a = {}
|
|
51
51
|
} = e;
|
|
52
|
-
this.editor = t, this.canvas = t.canvas, this.options = a, this.isUndoRedoKeyPressed = !1, this.handleAdaptCanvasToContainerBound =
|
|
52
|
+
this.editor = t, this.canvas = t.canvas, this.options = a, this.isUndoRedoKeyPressed = !1, this.isSpacePressed = !1, this.handleAdaptCanvasToContainerBound = z.debounce(this.handleAdaptCanvasToContainer.bind(this), 500), this.handleCopyEventBound = this.handleCopyEvent.bind(this), this.handlePasteEventBound = this.handlePasteEvent.bind(this), this.handleUndoRedoEventBound = this.handleUndoRedoEvent.bind(this), this.handleUndoRedoKeyUpBound = this.handleUndoRedoKeyUp.bind(this), this.handleSelectAllEventBound = this.handleSelectAllEvent.bind(this), this.handleDeleteObjectsEventBound = this.handleDeleteObjectsEvent.bind(this), this.handleSpaceKeyDownBound = this.handleSpaceKeyDown.bind(this), this.handleSpaceKeyUpBound = this.handleSpaceKeyUp.bind(this), this.handleObjectModifiedHistoryBound = z.debounce(this.handleObjectModifiedHistory.bind(this), 300), this.handleObjectRotatingHistoryBound = z.debounce(this.handleObjectRotatingHistory.bind(this), 300), this.handleObjectAddedHistoryBound = this.handleObjectAddedHistory.bind(this), this.handleObjectRemovedHistoryBound = this.handleObjectRemovedHistory.bind(this), this.handleOverlayUpdateBound = this.handleOverlayUpdate.bind(this), this.handleCanvasDragStartBound = this.handleCanvasDragStart.bind(this), this.handleCanvasDraggingBound = this.handleCanvasDragging.bind(this), this.handleCanvasDragEndBound = this.handleCanvasDragEnd.bind(this), this.handleMouseWheelZoomBound = this.handleMouseWheelZoom.bind(this), this.handleBringToFrontBound = this.handleBringToFront.bind(this), this.handleResetObjectFitBound = this.handleResetObjectFit.bind(this), this.handleLockedSelectionBound = this._filterLockedSelection.bind(this), this.init();
|
|
53
53
|
}
|
|
54
54
|
/**
|
|
55
55
|
* Инициализация всех обработчиков согласно опциям.
|
|
@@ -67,7 +67,11 @@ class Z {
|
|
|
67
67
|
deleteObjectsByHotkey: u,
|
|
68
68
|
resetObjectFitByDoubleClick: l
|
|
69
69
|
} = this.options;
|
|
70
|
-
t && (this.canvas.on("mouse:down", this.handleCanvasDragStartBound), this.canvas.on("mouse:move", this.handleCanvasDraggingBound), this.canvas.on("mouse:up", this.handleCanvasDragEndBound)
|
|
70
|
+
t && (this.canvas.on("mouse:down", this.handleCanvasDragStartBound), this.canvas.on("mouse:move", this.handleCanvasDraggingBound), this.canvas.on("mouse:up", this.handleCanvasDragEndBound), document.addEventListener("keydown", this.handleSpaceKeyDownBound, {
|
|
71
|
+
capture: !0
|
|
72
|
+
}), document.addEventListener("keyup", this.handleSpaceKeyUpBound, {
|
|
73
|
+
capture: !0
|
|
74
|
+
})), a && this.canvas.on("mouse:wheel", this.handleMouseWheelZoomBound), r && (this.canvas.on("selection:created", this.handleBringToFrontBound), this.canvas.on("selection:updated", this.handleBringToFrontBound)), l && this.canvas.on("mouse:dblclick", this.handleResetObjectFitBound), e && window.addEventListener("resize", this.handleAdaptCanvasToContainerBound, {
|
|
71
75
|
capture: !0
|
|
72
76
|
}), n && document.addEventListener("keydown", this.handleCopyEventBound, {
|
|
73
77
|
capture: !0
|
|
@@ -103,7 +107,7 @@ class Z {
|
|
|
103
107
|
this.canvas.setActiveObject(n[0]);
|
|
104
108
|
return;
|
|
105
109
|
}
|
|
106
|
-
var i = new
|
|
110
|
+
var i = new P(n, {
|
|
107
111
|
canvas: this.canvas
|
|
108
112
|
});
|
|
109
113
|
this.canvas.setActiveObject(i), this.canvas.requestRenderAll();
|
|
@@ -193,9 +197,9 @@ class Z {
|
|
|
193
197
|
var s = i.getAsFile();
|
|
194
198
|
if (!s) return;
|
|
195
199
|
var c = new FileReader();
|
|
196
|
-
c.onload = (
|
|
200
|
+
c.onload = (v) => {
|
|
197
201
|
this.editor.imageManager.importImage({
|
|
198
|
-
source:
|
|
202
|
+
source: v.target.result
|
|
199
203
|
});
|
|
200
204
|
}, c.readAsDataURL(s);
|
|
201
205
|
return;
|
|
@@ -222,7 +226,7 @@ class Z {
|
|
|
222
226
|
*/
|
|
223
227
|
handleUndoRedoEvent(e) {
|
|
224
228
|
var t = this;
|
|
225
|
-
return
|
|
229
|
+
return Re(function* () {
|
|
226
230
|
var {
|
|
227
231
|
ctrlKey: a,
|
|
228
232
|
metaKey: r,
|
|
@@ -266,9 +270,52 @@ class Z {
|
|
|
266
270
|
handleDeleteObjectsEvent(e) {
|
|
267
271
|
e.code === "Delete" && (e.preventDefault(), this.editor.deletionManager.deleteSelectedObjects());
|
|
268
272
|
}
|
|
273
|
+
/**
|
|
274
|
+
* Обработчик для нажатия пробела.
|
|
275
|
+
* Отключает выделение объектов и делает курсор "grab" для перетаскивания канваса.
|
|
276
|
+
* @param {Object} event — объект события
|
|
277
|
+
* @param {String} event.code — код клавиши
|
|
278
|
+
*/
|
|
279
|
+
handleSpaceKeyDown(e) {
|
|
280
|
+
if (e.code === "Space") {
|
|
281
|
+
var {
|
|
282
|
+
canvas: t,
|
|
283
|
+
editor: a,
|
|
284
|
+
isSpacePressed: r,
|
|
285
|
+
isDragging: n
|
|
286
|
+
} = this;
|
|
287
|
+
r || n || (this.isSpacePressed = !0, e.preventDefault(), t.set({
|
|
288
|
+
selection: !1,
|
|
289
|
+
defaultCursor: "grab"
|
|
290
|
+
}), t.setCursor("grab"), a.canvasManager.getObjects().forEach((i) => {
|
|
291
|
+
i.set({
|
|
292
|
+
selectable: !1,
|
|
293
|
+
evented: !1
|
|
294
|
+
});
|
|
295
|
+
}));
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Обработчик для отпускания пробела.
|
|
300
|
+
* Завершает перетаскивание канваса, если оно активно.
|
|
301
|
+
* Включает выделение объектов и возвращает курсор в состояние "default".
|
|
302
|
+
* @param {Object} event — объект события
|
|
303
|
+
* @param {String} event.code — код клавиши
|
|
304
|
+
*/
|
|
305
|
+
handleSpaceKeyUp(e) {
|
|
306
|
+
e.code === "Space" && (this.isSpacePressed = !1, this.canvas.isDragging && this.handleCanvasDragEnd(), this.canvas.set({
|
|
307
|
+
defaultCursor: "default",
|
|
308
|
+
selection: !0
|
|
309
|
+
}), this.canvas.setCursor("default"), this.editor.canvasManager.getObjects().forEach((t) => {
|
|
310
|
+
t.set({
|
|
311
|
+
selectable: !0,
|
|
312
|
+
evented: !0
|
|
313
|
+
});
|
|
314
|
+
}));
|
|
315
|
+
}
|
|
269
316
|
// --- Обработчики для событий canvas (Fabric) ---
|
|
270
317
|
/**
|
|
271
|
-
* Начало перетаскивания канваса (срабатывает при mouse:down).
|
|
318
|
+
* Начало перетаскивания канваса (срабатывает при mouse:down и зажатом пробеле).
|
|
272
319
|
* @param {Object} options
|
|
273
320
|
* @param {Object} options.e — объект события
|
|
274
321
|
*/
|
|
@@ -276,7 +323,10 @@ class Z {
|
|
|
276
323
|
var {
|
|
277
324
|
e: t
|
|
278
325
|
} = e;
|
|
279
|
-
|
|
326
|
+
this.isSpacePressed && (this.canvas.set({
|
|
327
|
+
isDragging: !0,
|
|
328
|
+
defaultCursor: "grabbing"
|
|
329
|
+
}), this.canvas.setCursor("grabbing"), this.canvas.lastPosX = t.clientX, this.canvas.lastPosY = t.clientY);
|
|
280
330
|
}
|
|
281
331
|
/**
|
|
282
332
|
* Перетаскивание канваса (mouse:move).
|
|
@@ -289,7 +339,7 @@ class Z {
|
|
|
289
339
|
var {
|
|
290
340
|
e: t
|
|
291
341
|
} = e;
|
|
292
|
-
if (this.canvas.isDragging) {
|
|
342
|
+
if (!(!this.canvas.isDragging || !this.isSpacePressed)) {
|
|
293
343
|
var a = this.canvas.viewportTransform;
|
|
294
344
|
a[4] += t.clientX - this.canvas.lastPosX, a[5] += t.clientY - this.canvas.lastPosY, this.canvas.requestRenderAll(), this.canvas.lastPosX = t.clientX, this.canvas.lastPosY = t.clientY;
|
|
295
345
|
}
|
|
@@ -299,18 +349,21 @@ class Z {
|
|
|
299
349
|
* Сохраняет новое положение канваса.
|
|
300
350
|
*/
|
|
301
351
|
handleCanvasDragEnd() {
|
|
302
|
-
this.canvas.setViewportTransform(this.canvas.viewportTransform), this.canvas.isDragging
|
|
352
|
+
this.canvas.isDragging && (this.canvas.setViewportTransform(this.canvas.viewportTransform), this.canvas.set("isDragging", !1), this.isSpacePressed && (this.canvas.set("defaultCursor", "grab"), this.canvas.setCursor("grab")));
|
|
303
353
|
}
|
|
304
354
|
/**
|
|
305
|
-
* Обработчик зума колесиком мыши.
|
|
355
|
+
* Обработчик зума колесиком мыши. Работает при зажатом Ctrl или Cmd.
|
|
306
356
|
* @param {Object} options
|
|
307
357
|
* @param {Object} options.e — объект события
|
|
308
358
|
*/
|
|
309
359
|
handleMouseWheelZoom(e) {
|
|
310
360
|
var {
|
|
311
361
|
e: t
|
|
312
|
-
} = e
|
|
313
|
-
|
|
362
|
+
} = e;
|
|
363
|
+
if (!(!t.ctrlKey && !t.metaKey)) {
|
|
364
|
+
var a = 1e-3, r = -t.deltaY * a;
|
|
365
|
+
this.editor.transformManager.zoom(r), t.preventDefault(), t.stopPropagation();
|
|
366
|
+
}
|
|
314
367
|
}
|
|
315
368
|
/**
|
|
316
369
|
* Обработчик, поднимающий выделенные объекты на передний план.
|
|
@@ -352,7 +405,11 @@ class Z {
|
|
|
352
405
|
capture: !0
|
|
353
406
|
}), document.removeEventListener("keydown", this.handleDeleteObjectsEventBound, {
|
|
354
407
|
capture: !0
|
|
355
|
-
}), this.options.canvasDragging && (this.canvas.off("mouse:down", this.handleCanvasDragStartBound), this.canvas.off("mouse:move", this.handleCanvasDraggingBound), this.canvas.off("mouse:up", this.handleCanvasDragEndBound)
|
|
408
|
+
}), this.options.canvasDragging && (this.canvas.off("mouse:down", this.handleCanvasDragStartBound), this.canvas.off("mouse:move", this.handleCanvasDraggingBound), this.canvas.off("mouse:up", this.handleCanvasDragEndBound), document.removeEventListener("keydown", this.handleSpaceKeyDownBound, {
|
|
409
|
+
capture: !0
|
|
410
|
+
}), document.removeEventListener("keyup", this.handleSpaceKeyUpBound, {
|
|
411
|
+
capture: !0
|
|
412
|
+
})), this.options.mouseWheelZooming && this.canvas.off("mouse:wheel", this.handleMouseWheelZoomBound), this.options.bringToFrontOnSelection && (this.canvas.off("selection:created", this.handleBringToFrontBound), this.canvas.off("selection:updated", this.handleBringToFrontBound)), this.options.resetObjectFitByDoubleClick && this.canvas.off("mouse:dblclick", this.handleResetObjectFitBound), this.canvas.off("object:modified", this.handleObjectModifiedHistoryBound), this.canvas.off("object:rotating", this.handleObjectRotatingHistoryBound), this.canvas.off("object:added", this.handleObjectAddedHistoryBound), this.canvas.off("object:removed", this.handleObjectRemovedHistoryBound), this.canvas.off("object:added", this.handleOverlayUpdateBound), this.canvas.off("selection:created", this.handleOverlayUpdateBound), this.canvas.off("selection:created", this.handleLockedSelectionBound.bind(this)), this.canvas.off("selection:updated", this.handleLockedSelectionBound.bind(this));
|
|
356
413
|
}
|
|
357
414
|
// Дебаунс для снижения частоты сохранения состояния
|
|
358
415
|
static debounce(e, t) {
|
|
@@ -367,7 +424,7 @@ class Z {
|
|
|
367
424
|
};
|
|
368
425
|
}
|
|
369
426
|
}
|
|
370
|
-
class
|
|
427
|
+
class We {
|
|
371
428
|
/**
|
|
372
429
|
* @description Класс для динамической загрузки внешних модулей.
|
|
373
430
|
*/
|
|
@@ -385,7 +442,7 @@ class _e {
|
|
|
385
442
|
return this.loaders[e] ? (this.cache.has(e) || this.cache.set(e, this.loaders[e]()), this.cache.get(e)) : Promise.reject(new Error('Unknown module "'.concat(e, '"')));
|
|
386
443
|
}
|
|
387
444
|
}
|
|
388
|
-
class
|
|
445
|
+
class Fe {
|
|
389
446
|
/**
|
|
390
447
|
* @param {string|URL} [scriptUrl] — URL скрипта воркера.
|
|
391
448
|
* По-умолчанию использует файл рядом с этим модулем
|
|
@@ -425,7 +482,7 @@ class Re {
|
|
|
425
482
|
* @returns {Promise<any>}
|
|
426
483
|
*/
|
|
427
484
|
post(e, t) {
|
|
428
|
-
var a = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : [], r = "".concat(e, ":").concat(
|
|
485
|
+
var a = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : [], r = "".concat(e, ":").concat(w(8));
|
|
429
486
|
return new Promise((n, i) => {
|
|
430
487
|
this._callbacks.set(r, {
|
|
431
488
|
resolve: n,
|
|
@@ -444,98 +501,98 @@ class Re {
|
|
|
444
501
|
this.worker.terminate();
|
|
445
502
|
}
|
|
446
503
|
}
|
|
447
|
-
var
|
|
448
|
-
function
|
|
449
|
-
var n =
|
|
450
|
-
o.save(), o.translate(e, t), o.rotate(U.degreesToRadians(r.angle)), o.fillStyle =
|
|
451
|
-
}
|
|
452
|
-
function he(o, e, t, a, r) {
|
|
453
|
-
var n = X, i = Q, s = Fe;
|
|
454
|
-
o.save(), o.translate(e, t), o.rotate(U.degreesToRadians(r.angle)), o.fillStyle = te, o.strokeStyle = ee, o.lineWidth = q, o.beginPath(), o.roundRect(-8 / 2, -20 / 2, n, i, s), o.fill(), o.stroke(), o.restore();
|
|
504
|
+
var I = 12, Ve = 2, K = 8, $ = 20, Ge = 100, q = 20, ee = 8, Xe = 100, te = 32, ae = 1, Qe = "#2B2D33", re = "#3D8BF4", ne = "#FFFFFF";
|
|
505
|
+
function R(o, e, t, a, r) {
|
|
506
|
+
var n = I, i = Ve;
|
|
507
|
+
o.save(), o.translate(e, t), o.rotate(U.degreesToRadians(r.angle)), o.fillStyle = ne, o.strokeStyle = re, o.lineWidth = ae, o.beginPath(), o.roundRect(-12 / 2, -12 / 2, n, n, i), o.fill(), o.stroke(), o.restore();
|
|
455
508
|
}
|
|
456
509
|
function ge(o, e, t, a, r) {
|
|
457
|
-
var n =
|
|
458
|
-
o.save(), o.translate(e, t), o.rotate(U.degreesToRadians(r.angle)), o.fillStyle =
|
|
510
|
+
var n = K, i = $, s = Ge;
|
|
511
|
+
o.save(), o.translate(e, t), o.rotate(U.degreesToRadians(r.angle)), o.fillStyle = ne, o.strokeStyle = re, o.lineWidth = ae, o.beginPath(), o.roundRect(-8 / 2, -20 / 2, n, i, s), o.fill(), o.stroke(), o.restore();
|
|
512
|
+
}
|
|
513
|
+
function ve(o, e, t, a, r) {
|
|
514
|
+
var n = q, i = ee, s = Xe;
|
|
515
|
+
o.save(), o.translate(e, t), o.rotate(U.degreesToRadians(r.angle)), o.fillStyle = ne, o.strokeStyle = re, o.lineWidth = ae, o.beginPath(), o.roundRect(-20 / 2, -8 / 2, n, i, s), o.fill(), o.stroke(), o.restore();
|
|
459
516
|
}
|
|
460
|
-
var
|
|
461
|
-
|
|
462
|
-
function
|
|
463
|
-
var n =
|
|
464
|
-
o.save(), o.translate(e, t), o.rotate(U.degreesToRadians(r.angle)), o.fillStyle =
|
|
517
|
+
var Je = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTE4Ljc1IDQuMzc1djMuNzVhLjYyNS42MjUgMCAwIDEtLjYyNS42MjVoLTMuNzVhLjYyNS42MjUgMCAwIDEgMC0xLjI1aDIuMTRsLTIuMDc3LTEuOTAzLS4wMi0uMDE5YTYuMjUgNi4yNSAwIDEgMC0uMTMgOC45NjcuNjI2LjYyNiAwIDAgMSAuODYuOTA5QTcuNDU2IDcuNDU2IDAgMCAxIDEwIDE3LjVoLS4xMDNhNy41IDcuNSAwIDEgMSA1LjM5Ni0xMi44MTJMMTcuNSA2LjcwM1Y0LjM3NWEuNjI1LjYyNSAwIDAgMSAxLjI1IDBaIi8+PC9zdmc+", we = new Image();
|
|
518
|
+
we.src = Je;
|
|
519
|
+
function Ke(o, e, t, a, r) {
|
|
520
|
+
var n = te, i = n / 2;
|
|
521
|
+
o.save(), o.translate(e, t), o.rotate(U.degreesToRadians(r.angle)), o.fillStyle = Qe, o.beginPath(), o.arc(0, 0, i, 0, 2 * Math.PI), o.fill(), o.drawImage(we, -16 / 2, -16 / 2, i, i), o.restore();
|
|
465
522
|
}
|
|
466
|
-
var
|
|
523
|
+
var $e = {
|
|
467
524
|
// Угловые точки
|
|
468
525
|
tl: {
|
|
469
|
-
render:
|
|
470
|
-
sizeX:
|
|
471
|
-
sizeY:
|
|
526
|
+
render: R,
|
|
527
|
+
sizeX: I,
|
|
528
|
+
sizeY: I,
|
|
472
529
|
offsetX: 0,
|
|
473
530
|
offsetY: 0
|
|
474
531
|
},
|
|
475
532
|
tr: {
|
|
476
|
-
render:
|
|
477
|
-
sizeX:
|
|
478
|
-
sizeY:
|
|
533
|
+
render: R,
|
|
534
|
+
sizeX: I,
|
|
535
|
+
sizeY: I,
|
|
479
536
|
offsetX: 0,
|
|
480
537
|
offsetY: 0
|
|
481
538
|
},
|
|
482
539
|
bl: {
|
|
483
|
-
render:
|
|
484
|
-
sizeX:
|
|
485
|
-
sizeY:
|
|
540
|
+
render: R,
|
|
541
|
+
sizeX: I,
|
|
542
|
+
sizeY: I,
|
|
486
543
|
offsetX: 0,
|
|
487
544
|
offsetY: 0
|
|
488
545
|
},
|
|
489
546
|
br: {
|
|
490
|
-
render:
|
|
491
|
-
sizeX:
|
|
492
|
-
sizeY:
|
|
547
|
+
render: R,
|
|
548
|
+
sizeX: I,
|
|
549
|
+
sizeY: I,
|
|
493
550
|
offsetX: 0,
|
|
494
551
|
offsetY: 0
|
|
495
552
|
},
|
|
496
553
|
// Середина вертикалей
|
|
497
554
|
ml: {
|
|
498
|
-
render:
|
|
499
|
-
sizeX:
|
|
500
|
-
sizeY:
|
|
555
|
+
render: ge,
|
|
556
|
+
sizeX: K,
|
|
557
|
+
sizeY: $,
|
|
501
558
|
offsetX: 0,
|
|
502
559
|
offsetY: 0
|
|
503
560
|
},
|
|
504
561
|
mr: {
|
|
505
|
-
render:
|
|
506
|
-
sizeX:
|
|
507
|
-
sizeY:
|
|
562
|
+
render: ge,
|
|
563
|
+
sizeX: K,
|
|
564
|
+
sizeY: $,
|
|
508
565
|
offsetX: 0,
|
|
509
566
|
offsetY: 0
|
|
510
567
|
},
|
|
511
568
|
// Середина горизонталей
|
|
512
569
|
mt: {
|
|
513
|
-
render:
|
|
514
|
-
sizeX:
|
|
515
|
-
sizeY:
|
|
570
|
+
render: ve,
|
|
571
|
+
sizeX: q,
|
|
572
|
+
sizeY: ee,
|
|
516
573
|
offsetX: 0,
|
|
517
574
|
offsetY: 0
|
|
518
575
|
},
|
|
519
576
|
mb: {
|
|
520
|
-
render:
|
|
521
|
-
sizeX:
|
|
522
|
-
sizeY:
|
|
577
|
+
render: ve,
|
|
578
|
+
sizeX: q,
|
|
579
|
+
sizeY: ee,
|
|
523
580
|
offsetX: 0,
|
|
524
581
|
offsetY: 0
|
|
525
582
|
},
|
|
526
583
|
// Специальный «rotate» контрол
|
|
527
584
|
mtr: {
|
|
528
|
-
render:
|
|
529
|
-
sizeX:
|
|
530
|
-
sizeY:
|
|
585
|
+
render: Ke,
|
|
586
|
+
sizeX: te,
|
|
587
|
+
sizeY: te,
|
|
531
588
|
offsetX: 0,
|
|
532
589
|
offsetY: -32
|
|
533
590
|
}
|
|
534
591
|
};
|
|
535
|
-
class
|
|
592
|
+
class qe {
|
|
536
593
|
static apply() {
|
|
537
594
|
var e = Oe.createObjectDefaultControls();
|
|
538
|
-
Object.entries(
|
|
595
|
+
Object.entries($e).forEach((t) => {
|
|
539
596
|
var [a, r] = t;
|
|
540
597
|
Object.assign(e[a], {
|
|
541
598
|
render: r.render,
|
|
@@ -547,8 +604,8 @@ class $e {
|
|
|
547
604
|
}), Te.ownDefaults.controls = e;
|
|
548
605
|
}
|
|
549
606
|
}
|
|
550
|
-
var
|
|
551
|
-
function
|
|
607
|
+
var et = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNi44NzUgMi41YS42MjUuNjI1IDAgMCAwLS42MjUuNjI0VjYuMjVIMy4xMjVhLjYyNS42MjUgMCAwIDAtLjYyNS42MjV2MTBjMCAuMzQ1LjI4LjYyNS42MjUuNjI1aDEwYy4zNDUgMCAuNjI1LS4yOC42MjUtLjYyNXYtMy4xMjZoMy4xMjVjLjM0NSAwIC42MjUtLjI4LjYyNS0uNjI1di0xMGEuNjI1LjYyNSAwIDAgMC0uNjI1LS42MjVoLTEwWm02Ljg3NSAxMGgyLjVWMy43NUg3LjV2Mi41aDUuNjI1Yy4zNDUgMCAuNjI1LjI4LjYyNS42MjV2NS42MjRabS0xMCAzLjc1VjcuNWg4Ljc1djguNzVIMy43NVoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==", tt = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMi41IDcuNWMwLS42OS41Ni0xLjI1IDEuMjUtMS4yNWgxMi41Yy42OSAwIDEuMjUuNTYgMS4yNSAxLjI1djguNzVjMCAuNjktLjU2IDEuMjUtMS4yNSAxLjI1SDMuNzVjLS42OSAwLTEuMjUtLjU2LTEuMjUtMS4yNVY3LjVabTEzLjc1IDBIMy43NXY4Ljc1aDEyLjVWNy41WiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTAgMS44NzVhMi4xODggMi4xODggMCAwIDAtMi4xODggMi4xODh2Mi44MTJhLjYyNS42MjUgMCAxIDEtMS4yNSAwVjQuMDYyYTMuNDM3IDMuNDM3IDAgMSAxIDYuODc1IDB2Mi44MTNhLjYyNS42MjUgMCAxIDEtMS4yNSAwVjQuMDYyQTIuMTg4IDIuMTg4IDAgMCAwIDEwIDEuODc2WiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTEwIDEyLjgxM2EuOTM3LjkzNyAwIDEgMCAwLTEuODc1LjkzNy45MzcgMCAwIDAgMCAxLjg3NFoiLz48L3N2Zz4=", at = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTE2LjI1IDYuMjVINy41VjQuMzc1YTIuNSAyLjUgMCAwIDEgMi41LTIuNWMxLjIgMCAyLjI4MS44NiAyLjUxMiAyYS42MjUuNjI1IDAgMCAwIDEuMjI2LS4yNWMtLjM1NC0xLjczOC0xLjkyNS0zLTMuNzM4LTNhMy43NTQgMy43NTQgMCAwIDAtMy43NSAzLjc1VjYuMjVoLTIuNUExLjI1IDEuMjUgMCAwIDAgMi41IDcuNXY4Ljc1YTEuMjUgMS4yNSAwIDAgMCAxLjI1IDEuMjVoMTIuNWExLjI1IDEuMjUgMCAwIDAgMS4yNS0xLjI1VjcuNWExLjI1IDEuMjUgMCAwIDAtMS4yNS0xLjI1Wm0wIDEwSDMuNzVWNy41aDEyLjV2OC43NVptLTUuMzEzLTQuMzc1YS45MzcuOTM3IDAgMSAxLTEuODc0IDAgLjkzNy45MzcgMCAwIDEgMS44NzQgMFoiLz48L3N2Zz4K", rt = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTIuNSA4LjEyNSAxMCAxMi41bDcuNS00LjM3NUwxMCAzLjc1IDIuNSA4LjEyNVoiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik05LjY4NSAzLjIxYS42MjUuNjI1IDAgMCAxIC42MyAwbDcuNSA0LjM3NWEuNjI1LjYyNSAwIDAgMSAwIDEuMDhsLTcuNSA0LjM3NWEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtNy41LTQuMzc1YS42MjUuNjI1IDAgMCAxIDAtMS4wOGw3LjUtNC4zNzVaTTMuNzQgOC4xMjUgMTAgMTEuNzc2bDYuMjYtMy42NTFMMTAgNC40NzQgMy43NCA4LjEyNVoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTUuNCA5LjQ2YS42MjUuNjI1IDAgMCAxIC42MyAwTDEwIDExLjc3NmwzLjk3LTIuMzE2YS42MjUuNjI1IDAgMCAxIC42MyAwbDMuMjE1IDEuODc1YS42MjUuNjI1IDAgMCAxIDAgMS4wOGwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEgMC0xLjA4TDUuNCA5LjQ2Wm0tMS42NiAyLjQxNUwxMCAxNS41MjZsNi4yNi0zLjY1MS0xLjk3NC0xLjE1MS0zLjk3MSAyLjMxNmEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtMy45Ny0yLjMxNi0xLjk3NSAxLjE1MVoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==", nt = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNOS42ODUgMy4yMWEuNjI1LjYyNSAwIDAgMSAuNjMgMGw3LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEgMCAxLjA4bC03LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEtLjYzIDBsLTcuNS00LjM3NWEuNjI1LjYyNSAwIDAgMSAwLTEuMDhsNy41LTQuMzc1Wk0zLjc0IDguMTI1IDEwIDExLjc3Nmw2LjI2LTMuNjUxTDEwIDQuNDc0IDMuNzQgOC4xMjVaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01LjcxNCAxMCAxMCAxMi41bDQuMjg2LTIuNSAzLjIxNCAxLjg3NUwxMCAxNi4yNWwtNy41LTQuMzc1TDUuNzE0IDEwWiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNS40IDkuNDZhLjYyNS42MjUgMCAwIDEgLjYzIDBMMTAgMTEuNzc2bDMuOTctMi4zMTZhLjYyNS42MjUgMCAwIDEgLjYzIDBsMy4yMTUgMS44NzVhLjYyNS42MjUgMCAwIDEgMCAxLjA4bC03LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEtLjYzIDBsLTcuNS00LjM3NWEuNjI1LjYyNSAwIDAgMSAwLTEuMDhMNS40IDkuNDZabS0xLjY2IDIuNDE1TDEwIDE1LjUyNmw2LjI2LTMuNjUxLTEuOTc0LTEuMTUxLTMuOTcxIDIuMzE2YS42MjUuNjI1IDAgMCAxLS42MyAwbC0zLjk3LTIuMzE2LTEuOTc1IDEuMTUxWiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+", it = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTIuNSA2LjI1IDcuNSA0LjM3NSA3LjUtNC4zNzVMMTAgMS44NzUgMi41IDYuMjVaIi8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNOS42ODUgMS4zMzVhLjYyNS42MjUgMCAwIDEgLjYzIDBsNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxIDAgMS4wOGwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEgMC0xLjA4bDcuNS00LjM3NVpNMy43NCA2LjI1IDEwIDkuOTAxbDYuMjYtMy42NTFMMTAgMi41OTkgMy43NCA2LjI1WiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNS40IDExLjMzNWEuNjI1LjYyNSAwIDAgMSAuNjMgMEwxMCAxMy42NTFsMy45Ny0yLjMxNmEuNjI1LjYyNSAwIDAgMSAuNjMgMGwzLjIxNSAxLjg3NWEuNjI1LjYyNSAwIDAgMSAwIDEuMDhsLTcuNSA0LjM3NWEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtNy41LTQuMzc1YS42MjUuNjI1IDAgMCAxIDAtMS4wOEw1LjQgMTEuMzM1Wk0zLjc0IDEzLjc1IDEwIDE3LjQwMWw2LjI2LTMuNjUxLTEuOTc0LTEuMTUxLTMuOTcxIDIuMzE2YS42MjUuNjI1IDAgMCAxLS42MyAwbC0zLjk3LTIuMzE2TDMuNzQgMTMuNzVaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01LjQgNy41ODVhLjYyNS42MjUgMCAwIDEgLjYzIDBMMTAgOS45MDFsMy45Ny0yLjMxNmEuNjI1LjYyNSAwIDAgMSAuNjMgMGwzLjIxNSAxLjg3NWEuNjI1LjYyNSAwIDAgMSAwIDEuMDhsLTcuNSA0LjM3NWEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtNy41LTQuMzc1YS42MjUuNjI1IDAgMCAxIDAtMS4wOEw1LjQgNy41ODVaTTMuNzQgMTAgMTAgMTMuNjUxIDE2LjI2IDEwbC0xLjk3NC0xLjE1MS0zLjk3MSAyLjMxNmEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtMy45Ny0yLjMxNkwzLjc0IDEwWiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+", ot = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMS45NiAxMy40MzVhLjYyNS42MjUgMCAwIDEgLjg1NS0uMjI1TDEwIDE3LjQwMWw3LjE4NS00LjE5YS42MjUuNjI1IDAgMCAxIC42MyAxLjA3OWwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEtLjIyNS0uODU1Wk05LjY4NSAxLjMzNWEuNjI1LjYyNSAwIDAgMSAuNjMgMGw3LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEgMCAxLjA4bC03LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEtLjYzIDBsLTcuNS00LjM3NWEuNjI1LjYyNSAwIDAgMSAwLTEuMDhsNy41LTQuMzc1Wk0zLjc0IDYuMjUgMTAgOS45MDFsNi4yNi0zLjY1MUwxMCAyLjU5OSAzLjc0IDYuMjVaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Im01LjcxNCAxMS44NzUgNC4yODYgMi41IDQuMjg2LTIuNUwxNy41IDEzLjc1IDEwIDE4LjEyNSAyLjUgMTMuNzVsMy4yMTQtMS44NzVaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01LjQgMTEuMzM1YS42MjUuNjI1IDAgMCAxIC42MyAwTDEwIDEzLjY1MWwzLjk3LTIuMzE2YS42MjUuNjI1IDAgMCAxIC42MyAwbDMuMjE1IDEuODc1YS42MjUuNjI1IDAgMCAxIDAgMS4wOGwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEgMC0xLjA4TDUuNCAxMS4zMzVaTTMuNzQgMTMuNzUgMTAgMTcuNDAxbDYuMjYtMy42NTEtMS45NzQtMS4xNTEtMy45NzEgMi4zMTZhLjYyNS42MjUgMCAwIDEtLjYzIDBsLTMuOTctMi4zMTZMMy43NCAxMy43NVoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTUuNCA3LjU4NWEuNjI1LjYyNSAwIDAgMSAuNjMgMEwxMCA5LjkwMWwzLjk3LTIuMzE2YS42MjUuNjI1IDAgMCAxIC42MyAwbDMuMjE1IDEuODc1YS42MjUuNjI1IDAgMCAxIDAgMS4wOGwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEgMC0xLjA4TDUuNCA3LjU4NVpNMy43NCAxMCAxMCAxMy42NTEgMTYuMjYgMTBsLTEuOTc0LTEuMTUxLTMuOTcxIDIuMzE2YS42MjUuNjI1IDAgMCAxLS42MyAwbC0zLjk3LTIuMzE2TDMuNzQgMTBaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=", st = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI0VDNEU0MCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNOC4xMjUgMS4yNUExLjg3NSAxLjg3NSAwIDAgMCA2LjI1IDMuMTI1di42MjVIMy4xMjVhLjYyNS42MjUgMCAwIDAgMCAxLjI1aC42MjV2MTEuMjVBMS4yNSAxLjI1IDAgMCAwIDUgMTcuNWgxMGExLjI1IDEuMjUgMCAwIDAgMS4yNS0xLjI1VjVoLjYyNWEuNjI1LjYyNSAwIDAgMCAwLTEuMjVIMTMuNzV2LS42MjVhMS44NzUgMS44NzUgMCAwIDAtMS44NzUtMS44NzVoLTMuNzVabTQuMzc1IDIuNXYtLjYyNWEuNjI1LjYyNSAwIDAgMC0uNjI1LS42MjVoLTMuNzVhLjYyNS42MjUgMCAwIDAtLjYyNS42MjV2LjYyNWg1Wk01IDE2LjI1VjVoMTB2MTEuMjVINVpNOC4xMjUgNy41Yy4zNDUgMCAuNjI1LjI4LjYyNS42MjV2NWEuNjI1LjYyNSAwIDEgMS0xLjI1IDB2LTVjMC0uMzQ1LjI4LS42MjUuNjI1LS42MjVabTQuMzc1IDUuNjI1di01YS42MjUuNjI1IDAgMCAwLTEuMjUgMHY1YS42MjUuNjI1IDAgMSAwIDEuMjUgMFoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==";
|
|
608
|
+
function me(o, e, t, a, r, n, i) {
|
|
552
609
|
try {
|
|
553
610
|
var s = o[n](i), c = s.value;
|
|
554
611
|
} catch (u) {
|
|
@@ -556,22 +613,22 @@ function ve(o, e, t, a, r, n, i) {
|
|
|
556
613
|
}
|
|
557
614
|
s.done ? e(c) : Promise.resolve(c).then(a, r);
|
|
558
615
|
}
|
|
559
|
-
function
|
|
616
|
+
function ct(o) {
|
|
560
617
|
return function() {
|
|
561
618
|
var e = this, t = arguments;
|
|
562
619
|
return new Promise(function(a, r) {
|
|
563
620
|
var n = o.apply(e, t);
|
|
564
621
|
function i(c) {
|
|
565
|
-
|
|
622
|
+
me(n, a, r, i, s, "next", c);
|
|
566
623
|
}
|
|
567
624
|
function s(c) {
|
|
568
|
-
|
|
625
|
+
me(n, a, r, i, s, "throw", c);
|
|
569
626
|
}
|
|
570
627
|
i(void 0);
|
|
571
628
|
});
|
|
572
629
|
};
|
|
573
630
|
}
|
|
574
|
-
const
|
|
631
|
+
const x = {
|
|
575
632
|
style: {
|
|
576
633
|
position: "absolute",
|
|
577
634
|
display: "none",
|
|
@@ -630,18 +687,18 @@ const k = {
|
|
|
630
687
|
}],
|
|
631
688
|
offsetTop: 50,
|
|
632
689
|
icons: {
|
|
633
|
-
copyPaste:
|
|
634
|
-
delete:
|
|
635
|
-
lock:
|
|
636
|
-
unlock:
|
|
637
|
-
bringToFront:
|
|
638
|
-
sendToBack:
|
|
639
|
-
bringForward:
|
|
640
|
-
sendBackwards:
|
|
690
|
+
copyPaste: et,
|
|
691
|
+
delete: st,
|
|
692
|
+
lock: tt,
|
|
693
|
+
unlock: at,
|
|
694
|
+
bringToFront: it,
|
|
695
|
+
sendToBack: ot,
|
|
696
|
+
bringForward: rt,
|
|
697
|
+
sendBackwards: nt
|
|
641
698
|
},
|
|
642
699
|
handlers: {
|
|
643
700
|
copyPaste: function() {
|
|
644
|
-
var o =
|
|
701
|
+
var o = ct(function* (t) {
|
|
645
702
|
yield t.clipboardManager.copy(), yield t.clipboardManager.paste();
|
|
646
703
|
});
|
|
647
704
|
function e(t) {
|
|
@@ -672,7 +729,7 @@ const k = {
|
|
|
672
729
|
}
|
|
673
730
|
}
|
|
674
731
|
};
|
|
675
|
-
function
|
|
732
|
+
function fe(o, e) {
|
|
676
733
|
var t = Object.keys(o);
|
|
677
734
|
if (Object.getOwnPropertySymbols) {
|
|
678
735
|
var a = Object.getOwnPropertySymbols(o);
|
|
@@ -685,22 +742,22 @@ function me(o, e) {
|
|
|
685
742
|
function j(o) {
|
|
686
743
|
for (var e = 1; e < arguments.length; e++) {
|
|
687
744
|
var t = arguments[e] != null ? arguments[e] : {};
|
|
688
|
-
e % 2 ?
|
|
689
|
-
|
|
690
|
-
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(o, Object.getOwnPropertyDescriptors(t)) :
|
|
745
|
+
e % 2 ? fe(Object(t), !0).forEach(function(a) {
|
|
746
|
+
ut(o, a, t[a]);
|
|
747
|
+
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(o, Object.getOwnPropertyDescriptors(t)) : fe(Object(t)).forEach(function(a) {
|
|
691
748
|
Object.defineProperty(o, a, Object.getOwnPropertyDescriptor(t, a));
|
|
692
749
|
});
|
|
693
750
|
}
|
|
694
751
|
return o;
|
|
695
752
|
}
|
|
696
|
-
function
|
|
697
|
-
return (e =
|
|
753
|
+
function ut(o, e, t) {
|
|
754
|
+
return (e = dt(e)) in o ? Object.defineProperty(o, e, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : o[e] = t, o;
|
|
698
755
|
}
|
|
699
|
-
function
|
|
700
|
-
var e =
|
|
756
|
+
function dt(o) {
|
|
757
|
+
var e = lt(o, "string");
|
|
701
758
|
return typeof e == "symbol" ? e : e + "";
|
|
702
759
|
}
|
|
703
|
-
function
|
|
760
|
+
function lt(o, e) {
|
|
704
761
|
if (typeof o != "object" || !o) return o;
|
|
705
762
|
var t = o[Symbol.toPrimitive];
|
|
706
763
|
if (t !== void 0) {
|
|
@@ -710,7 +767,7 @@ function dt(o, e) {
|
|
|
710
767
|
}
|
|
711
768
|
return (e === "string" ? String : Number)(o);
|
|
712
769
|
}
|
|
713
|
-
class
|
|
770
|
+
class ht {
|
|
714
771
|
/**
|
|
715
772
|
* @param {object} options
|
|
716
773
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -722,11 +779,11 @@ class lt {
|
|
|
722
779
|
if (this.options = t.options, !!this.options.showToolbar) {
|
|
723
780
|
this.editor = t, this.canvas = t.canvas;
|
|
724
781
|
var a = this.options.toolbar || {};
|
|
725
|
-
this.config = j(j(j({},
|
|
726
|
-
style: j(j({},
|
|
727
|
-
btnStyle: j(j({},
|
|
728
|
-
icons: j(j({},
|
|
729
|
-
handlers: j(j({},
|
|
782
|
+
this.config = j(j(j({}, x), a), {}, {
|
|
783
|
+
style: j(j({}, x.style), a.style || {}),
|
|
784
|
+
btnStyle: j(j({}, x.btnStyle), a.btnStyle || {}),
|
|
785
|
+
icons: j(j({}, x.icons), a.icons || {}),
|
|
786
|
+
handlers: j(j({}, x.handlers), a.handlers || {})
|
|
730
787
|
}), this.currentTarget = null, this.currentLocked = null, this.isTransforming = !1, this._onMouseDown = this._handleMouseDown.bind(this), this._onObjectMoving = this._startTransform.bind(this), this._onObjectScaling = this._startTransform.bind(this), this._onObjectRotating = this._startTransform.bind(this), this._onMouseUp = this._endTransform.bind(this), this._onObjectModified = this._endTransform.bind(this), this._onSelectionChange = this._updateToolbar.bind(this), this._onSelectionClear = () => {
|
|
731
788
|
this.el.style.display = "none";
|
|
732
789
|
}, this._createDOM(), this._bindEvents();
|
|
@@ -847,10 +904,10 @@ class lt {
|
|
|
847
904
|
} = e.getCenterPoint(), {
|
|
848
905
|
top: u,
|
|
849
906
|
height: l
|
|
850
|
-
} = e.getBoundingRect(!1, !0), d = c * n + i, h = d - t.offsetWidth / 2,
|
|
907
|
+
} = e.getBoundingRect(!1, !0), d = c * n + i, h = d - t.offsetWidth / 2, v = (u + l) * n + s + a.offsetTop;
|
|
851
908
|
Object.assign(t.style, {
|
|
852
909
|
left: "".concat(h, "px"),
|
|
853
|
-
top: "".concat(
|
|
910
|
+
top: "".concat(v, "px"),
|
|
854
911
|
display: "flex"
|
|
855
912
|
});
|
|
856
913
|
}
|
|
@@ -862,7 +919,7 @@ class lt {
|
|
|
862
919
|
this.el.removeEventListener("mouseover", this._onBtnOver), this.el.removeEventListener("mouseout", this._onBtnOut), this.canvas.off("mouse:down", this._onMouseDown), this.canvas.off("object:moving", this._onObjectMoving), this.canvas.off("object:scaling", this._onObjectScaling), this.canvas.off("object:rotating", this._onObjectRotating), this.canvas.off("mouse:up", this._onMouseUp), this.canvas.off("object:modified", this._onObjectModified), this.canvas.off("selection:created", this._onSelectionChange), this.canvas.off("selection:updated", this._onSelectionChange), this.canvas.off("selection:changed", this._onSelectionChange), this.canvas.off("after:render", this._onSelectionChange), this.canvas.off("selection:cleared", this._onSelectionClear), this.el.remove();
|
|
863
920
|
}
|
|
864
921
|
}
|
|
865
|
-
function
|
|
922
|
+
function Me(o, e, t, a, r, n, i) {
|
|
866
923
|
try {
|
|
867
924
|
var s = o[n](i), c = s.value;
|
|
868
925
|
} catch (u) {
|
|
@@ -870,22 +927,22 @@ function fe(o, e, t, a, r, n, i) {
|
|
|
870
927
|
}
|
|
871
928
|
s.done ? e(c) : Promise.resolve(c).then(a, r);
|
|
872
929
|
}
|
|
873
|
-
function
|
|
930
|
+
function X(o) {
|
|
874
931
|
return function() {
|
|
875
932
|
var e = this, t = arguments;
|
|
876
933
|
return new Promise(function(a, r) {
|
|
877
934
|
var n = o.apply(e, t);
|
|
878
935
|
function i(c) {
|
|
879
|
-
|
|
936
|
+
Me(n, a, r, i, s, "next", c);
|
|
880
937
|
}
|
|
881
938
|
function s(c) {
|
|
882
|
-
|
|
939
|
+
Me(n, a, r, i, s, "throw", c);
|
|
883
940
|
}
|
|
884
941
|
i(void 0);
|
|
885
942
|
});
|
|
886
943
|
};
|
|
887
944
|
}
|
|
888
|
-
class
|
|
945
|
+
class gt {
|
|
889
946
|
/**
|
|
890
947
|
* @param {object} options
|
|
891
948
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -901,7 +958,7 @@ class ht {
|
|
|
901
958
|
return this._historySuspendCount > 0;
|
|
902
959
|
}
|
|
903
960
|
_createDiffPatcher() {
|
|
904
|
-
this.diffPatcher =
|
|
961
|
+
this.diffPatcher = He({
|
|
905
962
|
objectHash(e) {
|
|
906
963
|
return [e.id, e.format, e.locked, e.left, e.top, e.width, e.height, e.flipX, e.flipY, e.scaleX, e.scaleY, e.angle, e.opacity].join("-");
|
|
907
964
|
},
|
|
@@ -974,7 +1031,7 @@ class ht {
|
|
|
974
1031
|
*/
|
|
975
1032
|
loadStateFromFullState(e) {
|
|
976
1033
|
var t = this;
|
|
977
|
-
return
|
|
1034
|
+
return X(function* () {
|
|
978
1035
|
if (e) {
|
|
979
1036
|
console.log("loadStateFromFullState fullState", e), yield t.canvas.loadFromJSON(e);
|
|
980
1037
|
var a = t.canvas.getObjects().find((n) => n.id === "montage-area");
|
|
@@ -990,7 +1047,7 @@ class ht {
|
|
|
990
1047
|
*/
|
|
991
1048
|
undo() {
|
|
992
1049
|
var e = this;
|
|
993
|
-
return
|
|
1050
|
+
return X(function* () {
|
|
994
1051
|
if (!e.skipHistory) {
|
|
995
1052
|
if (e.currentIndex <= 0) {
|
|
996
1053
|
console.log("Нет предыдущих состояний для отмены.");
|
|
@@ -1017,7 +1074,7 @@ class ht {
|
|
|
1017
1074
|
*/
|
|
1018
1075
|
redo() {
|
|
1019
1076
|
var e = this;
|
|
1020
|
-
return
|
|
1077
|
+
return X(function* () {
|
|
1021
1078
|
if (!e.skipHistory) {
|
|
1022
1079
|
if (e.currentIndex >= e.patches.length) {
|
|
1023
1080
|
console.log("Нет состояний для повтора.");
|
|
@@ -1039,8 +1096,8 @@ class ht {
|
|
|
1039
1096
|
})();
|
|
1040
1097
|
}
|
|
1041
1098
|
}
|
|
1042
|
-
var
|
|
1043
|
-
function
|
|
1099
|
+
var vt = 0.1, mt = 2, ft = 0.1, Mt = 90, B = 16, Z = 16, N = 4096, L = 4096;
|
|
1100
|
+
function je(o, e, t, a, r, n, i) {
|
|
1044
1101
|
try {
|
|
1045
1102
|
var s = o[n](i), c = s.value;
|
|
1046
1103
|
} catch (u) {
|
|
@@ -1048,22 +1105,22 @@ function Me(o, e, t, a, r, n, i) {
|
|
|
1048
1105
|
}
|
|
1049
1106
|
s.done ? e(c) : Promise.resolve(c).then(a, r);
|
|
1050
1107
|
}
|
|
1051
|
-
function
|
|
1108
|
+
function O(o) {
|
|
1052
1109
|
return function() {
|
|
1053
1110
|
var e = this, t = arguments;
|
|
1054
1111
|
return new Promise(function(a, r) {
|
|
1055
1112
|
var n = o.apply(e, t);
|
|
1056
1113
|
function i(c) {
|
|
1057
|
-
|
|
1114
|
+
je(n, a, r, i, s, "next", c);
|
|
1058
1115
|
}
|
|
1059
1116
|
function s(c) {
|
|
1060
|
-
|
|
1117
|
+
je(n, a, r, i, s, "throw", c);
|
|
1061
1118
|
}
|
|
1062
1119
|
i(void 0);
|
|
1063
1120
|
});
|
|
1064
1121
|
};
|
|
1065
1122
|
}
|
|
1066
|
-
class
|
|
1123
|
+
class A {
|
|
1067
1124
|
/**
|
|
1068
1125
|
* @param {object} options
|
|
1069
1126
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -1072,7 +1129,7 @@ class C {
|
|
|
1072
1129
|
var {
|
|
1073
1130
|
editor: t
|
|
1074
1131
|
} = e;
|
|
1075
|
-
this.editor = t, this.options = t.options, this._createdBlobUrls = [];
|
|
1132
|
+
this.editor = t, this.options = t.options, this._createdBlobUrls = [], this.acceptContentTypes = this.editor.options.acceptContentTypes, this.acceptFormats = this.getAllowedFormatsFromContentTypes();
|
|
1076
1133
|
}
|
|
1077
1134
|
/**
|
|
1078
1135
|
* Импорт изображения
|
|
@@ -1087,89 +1144,131 @@ class C {
|
|
|
1087
1144
|
*/
|
|
1088
1145
|
importImage(e) {
|
|
1089
1146
|
var t = this;
|
|
1090
|
-
return
|
|
1147
|
+
return O(function* () {
|
|
1091
1148
|
var {
|
|
1092
1149
|
source: a,
|
|
1093
1150
|
scale: r = "image-".concat(t.options.scaleType),
|
|
1094
1151
|
withoutSave: n = !1
|
|
1095
1152
|
} = e;
|
|
1096
1153
|
if (a) {
|
|
1097
|
-
var
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1154
|
+
var {
|
|
1155
|
+
canvas: i,
|
|
1156
|
+
montageArea: s,
|
|
1157
|
+
transformManager: c,
|
|
1158
|
+
historyManager: u,
|
|
1159
|
+
errorManager: l
|
|
1160
|
+
} = t.editor, d = yield t.getContentType(a), h = A.getFormatFromContentType(d), {
|
|
1161
|
+
acceptContentTypes: v,
|
|
1162
|
+
acceptFormats: m
|
|
1163
|
+
} = t;
|
|
1164
|
+
if (!t.isAllowedContentType(d)) {
|
|
1165
|
+
var f = "Неверный contentType для изображения: ".concat(d, ". Ожидается один из: ").concat(t.acceptContentTypes.join(", "), ".");
|
|
1166
|
+
l.emitError({
|
|
1167
|
+
origin: "ImageManager",
|
|
1168
|
+
method: "importImage",
|
|
1169
|
+
code: "INVALID_CONTENT_TYPE",
|
|
1170
|
+
message: f,
|
|
1171
|
+
data: {
|
|
1172
|
+
source: a,
|
|
1173
|
+
format: h,
|
|
1174
|
+
contentType: d,
|
|
1175
|
+
acceptContentTypes: v,
|
|
1176
|
+
acceptFormats: m
|
|
1177
|
+
}
|
|
1102
1178
|
});
|
|
1103
1179
|
return;
|
|
1104
1180
|
}
|
|
1105
|
-
|
|
1106
|
-
canvas: c,
|
|
1107
|
-
montageArea: u,
|
|
1108
|
-
transformManager: l,
|
|
1109
|
-
historyManager: d
|
|
1110
|
-
} = t.editor;
|
|
1111
|
-
d.suspendHistory();
|
|
1181
|
+
u.suspendHistory();
|
|
1112
1182
|
try {
|
|
1113
|
-
var
|
|
1183
|
+
var M, g;
|
|
1114
1184
|
if (a instanceof File)
|
|
1115
|
-
|
|
1185
|
+
M = URL.createObjectURL(a);
|
|
1116
1186
|
else if (typeof a == "string") {
|
|
1117
|
-
var
|
|
1187
|
+
var C = yield fetch(a, {
|
|
1118
1188
|
mode: "cors"
|
|
1119
|
-
}),
|
|
1120
|
-
type:
|
|
1189
|
+
}), y = yield C.blob({
|
|
1190
|
+
type: d,
|
|
1121
1191
|
quality: 1
|
|
1122
1192
|
});
|
|
1123
|
-
|
|
1124
|
-
} else
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1193
|
+
M = URL.createObjectURL(y);
|
|
1194
|
+
} else {
|
|
1195
|
+
l.emitError({
|
|
1196
|
+
origin: "ImageManager",
|
|
1197
|
+
method: "importImage",
|
|
1198
|
+
code: "INVALID_SOURCE_TYPE",
|
|
1199
|
+
message: "Неверный тип источника изображения. Ожидается URL или объект File.",
|
|
1200
|
+
data: {
|
|
1201
|
+
source: a,
|
|
1202
|
+
format: h,
|
|
1203
|
+
contentType: d,
|
|
1204
|
+
acceptContentTypes: v,
|
|
1205
|
+
acceptFormats: m
|
|
1206
|
+
}
|
|
1207
|
+
});
|
|
1208
|
+
return;
|
|
1209
|
+
}
|
|
1210
|
+
if (t._createdBlobUrls.push(M), h === "svg") {
|
|
1211
|
+
var D = yield ke(M);
|
|
1212
|
+
g = U.groupSVGElements(D.objects, D.options);
|
|
1131
1213
|
} else
|
|
1132
|
-
g = yield
|
|
1214
|
+
g = yield le.fromURL(M, {
|
|
1133
1215
|
crossOrigin: "anonymous"
|
|
1134
1216
|
});
|
|
1135
1217
|
var {
|
|
1136
|
-
width:
|
|
1137
|
-
height:
|
|
1218
|
+
width: E,
|
|
1219
|
+
height: S
|
|
1138
1220
|
} = g;
|
|
1139
|
-
if (
|
|
1140
|
-
var
|
|
1141
|
-
t._createdBlobUrls.push(
|
|
1221
|
+
if (S > L || E > N) {
|
|
1222
|
+
var p = yield t.resizeImageToBoundaries(g._element.src, "max"), T = URL.createObjectURL(p);
|
|
1223
|
+
t._createdBlobUrls.push(T), g = yield le.fromURL(T, {
|
|
1142
1224
|
crossOrigin: "anonymous"
|
|
1143
1225
|
});
|
|
1144
1226
|
}
|
|
1145
|
-
if (g.set("id", "".concat(g.type, "-").concat(
|
|
1227
|
+
if (g.set("id", "".concat(g.type, "-").concat(w())), g.set("format", h), r === "scale-montage")
|
|
1146
1228
|
t.editor.canvasManager.scaleMontageAreaToImage({
|
|
1147
1229
|
object: g,
|
|
1148
1230
|
withoutSave: !0
|
|
1149
1231
|
});
|
|
1150
1232
|
else {
|
|
1151
1233
|
var {
|
|
1152
|
-
width:
|
|
1153
|
-
height:
|
|
1154
|
-
} =
|
|
1234
|
+
width: Y,
|
|
1235
|
+
height: H
|
|
1236
|
+
} = s, _ = t.calculateScaleFactor({
|
|
1155
1237
|
imageObject: g,
|
|
1156
1238
|
scaleType: r
|
|
1157
1239
|
});
|
|
1158
|
-
r === "image-contain" &&
|
|
1240
|
+
r === "image-contain" && _ < 1 ? c.fitObject({
|
|
1159
1241
|
object: g,
|
|
1160
1242
|
type: "contain",
|
|
1161
1243
|
withoutSave: !0
|
|
1162
|
-
}) : r === "image-cover" && (
|
|
1244
|
+
}) : r === "image-cover" && (E > Y || S > H) && c.fitObject({
|
|
1163
1245
|
object: g,
|
|
1164
1246
|
type: "cover",
|
|
1165
1247
|
withoutSave: !0
|
|
1166
1248
|
});
|
|
1167
1249
|
}
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1250
|
+
i.add(g), i.centerObject(g), i.setActiveObject(g), i.renderAll(), u.resumeHistory(), n || u.saveState(), i.fire("editor:image-imported", {
|
|
1251
|
+
image: g,
|
|
1252
|
+
format: h,
|
|
1253
|
+
contentType: d,
|
|
1254
|
+
scale: r,
|
|
1255
|
+
withoutSave: n,
|
|
1256
|
+
source: a
|
|
1257
|
+
});
|
|
1258
|
+
} catch (k) {
|
|
1259
|
+
l.emitError({
|
|
1260
|
+
origin: "ImageManager",
|
|
1261
|
+
method: "importImage",
|
|
1262
|
+
code: "IMPORT_FAILED",
|
|
1263
|
+
message: "Ошибка импорта изображения: ".concat(k.message),
|
|
1264
|
+
data: {
|
|
1265
|
+
source: a,
|
|
1266
|
+
format: h,
|
|
1267
|
+
contentType: d,
|
|
1268
|
+
scale: r,
|
|
1269
|
+
withoutSave: n
|
|
1270
|
+
}
|
|
1271
|
+
}), u.resumeHistory();
|
|
1173
1272
|
}
|
|
1174
1273
|
}
|
|
1175
1274
|
})();
|
|
@@ -1184,15 +1283,22 @@ class C {
|
|
|
1184
1283
|
*/
|
|
1185
1284
|
resizeImageToBoundaries(e) {
|
|
1186
1285
|
var t = arguments, a = this;
|
|
1187
|
-
return
|
|
1188
|
-
var r = t.length > 1 && t[1] !== void 0 ? t[1] : "max", n = "Размер изображения больше максимального размера канваса, поэтому оно будет уменьшено до максимальных размеров: ".concat(
|
|
1189
|
-
|
|
1190
|
-
|
|
1286
|
+
return O(function* () {
|
|
1287
|
+
var r = t.length > 1 && t[1] !== void 0 ? t[1] : "max", n = "Размер изображения больше максимального размера канваса, поэтому оно будет уменьшено до максимальных размеров: ".concat(N, "x").concat(L);
|
|
1288
|
+
a.editor.errorManager.emitWarning({
|
|
1289
|
+
origin: "ImageManager",
|
|
1290
|
+
method: "resizeImageToBoundaries",
|
|
1291
|
+
code: "IMAGE_RESIZE_WARNING",
|
|
1292
|
+
message: n,
|
|
1293
|
+
data: {
|
|
1294
|
+
dataURL: e,
|
|
1295
|
+
size: r
|
|
1296
|
+
}
|
|
1191
1297
|
});
|
|
1192
1298
|
var i = yield a.editor.workerManager.post("resizeImage", {
|
|
1193
1299
|
dataURL: e,
|
|
1194
|
-
maxWidth:
|
|
1195
|
-
maxHeight:
|
|
1300
|
+
maxWidth: N,
|
|
1301
|
+
maxHeight: L,
|
|
1196
1302
|
sizeType: r
|
|
1197
1303
|
});
|
|
1198
1304
|
return i;
|
|
@@ -1211,7 +1317,7 @@ class C {
|
|
|
1211
1317
|
*/
|
|
1212
1318
|
exportCanvasAsImageFile() {
|
|
1213
1319
|
var e = arguments, t = this;
|
|
1214
|
-
return
|
|
1320
|
+
return O(function* () {
|
|
1215
1321
|
var {
|
|
1216
1322
|
fileName: a = "image.png",
|
|
1217
1323
|
contentType: r = "image/png",
|
|
@@ -1221,98 +1327,114 @@ class C {
|
|
|
1221
1327
|
canvas: s,
|
|
1222
1328
|
montageArea: c,
|
|
1223
1329
|
workerManager: u
|
|
1224
|
-
} = t.editor
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
var
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
var P = {
|
|
1261
|
-
image: A,
|
|
1262
|
-
format: h,
|
|
1263
|
-
contentType: d,
|
|
1264
|
-
fileName: a
|
|
1265
|
-
};
|
|
1266
|
-
return s.fire("editor:canvas-exported", P), P;
|
|
1267
|
-
}
|
|
1268
|
-
var E = yield createImageBitmap(A), re = yield u.post("toDataURL", {
|
|
1269
|
-
format: h,
|
|
1270
|
-
quality: 1,
|
|
1271
|
-
bitmap: E
|
|
1272
|
-
}, [E]);
|
|
1273
|
-
if (l) {
|
|
1274
|
-
var ne = 0.264583, W = f * ne, _ = y * ne, we = (yield t.editor.moduleLoader.loadModule("jspdf")).jsPDF, R = new we({
|
|
1275
|
-
orientation: W > _ ? "landscape" : "portrait",
|
|
1276
|
-
unit: "mm",
|
|
1277
|
-
format: [W, _]
|
|
1330
|
+
} = t.editor;
|
|
1331
|
+
try {
|
|
1332
|
+
var l = r === "application/pdf", d = l ? "image/jpg" : r, h = A.getFormatFromContentType(d);
|
|
1333
|
+
c.setCoords();
|
|
1334
|
+
var {
|
|
1335
|
+
left: v,
|
|
1336
|
+
top: m,
|
|
1337
|
+
width: f,
|
|
1338
|
+
height: M
|
|
1339
|
+
} = c.getBoundingRect(), g = yield s.clone(["id", "format", "locked"]);
|
|
1340
|
+
["image/jpg", "image/jpeg"].includes(d) && (g.backgroundColor = "#ffffff");
|
|
1341
|
+
var C = g.getObjects().find((b) => b.id === c.id);
|
|
1342
|
+
C.visible = !1, g.viewportTransform = [1, 0, 0, 1, -v, -m], g.setDimensions({
|
|
1343
|
+
width: f,
|
|
1344
|
+
height: M
|
|
1345
|
+
}, {
|
|
1346
|
+
backstoreOnly: !0
|
|
1347
|
+
}), g.renderAll();
|
|
1348
|
+
var y = g.getObjects().filter((b) => b.format).every((b) => b.format === "svg");
|
|
1349
|
+
if (h === "svg" && y) {
|
|
1350
|
+
var D = g.toSVG();
|
|
1351
|
+
g.dispose();
|
|
1352
|
+
var E = A._exportSVGStringAsFile(D, {
|
|
1353
|
+
exportAsBase64: n,
|
|
1354
|
+
exportAsBlob: i,
|
|
1355
|
+
fileName: a
|
|
1356
|
+
}), S = {
|
|
1357
|
+
image: E,
|
|
1358
|
+
format: "svg",
|
|
1359
|
+
contentType: "image/svg+xml",
|
|
1360
|
+
fileName: a.replace(/\.[^/.]+$/, ".svg")
|
|
1361
|
+
};
|
|
1362
|
+
return s.fire("editor:canvas-exported", S), S;
|
|
1363
|
+
}
|
|
1364
|
+
var p = yield new Promise((b) => {
|
|
1365
|
+
g.getElement().toBlob(b);
|
|
1278
1366
|
});
|
|
1279
|
-
if (
|
|
1280
|
-
var
|
|
1281
|
-
image:
|
|
1367
|
+
if (g.dispose(), i) {
|
|
1368
|
+
var T = {
|
|
1369
|
+
image: p,
|
|
1370
|
+
format: h,
|
|
1371
|
+
contentType: d,
|
|
1372
|
+
fileName: a
|
|
1373
|
+
};
|
|
1374
|
+
return s.fire("editor:canvas-exported", T), T;
|
|
1375
|
+
}
|
|
1376
|
+
var Y = yield createImageBitmap(p), H = yield u.post("toDataURL", {
|
|
1377
|
+
format: h,
|
|
1378
|
+
quality: 1,
|
|
1379
|
+
bitmap: Y
|
|
1380
|
+
}, [Y]);
|
|
1381
|
+
if (l) {
|
|
1382
|
+
var _ = 0.264583, k = f * _, V = M * _, Ce = (yield t.editor.moduleLoader.loadModule("jspdf")).jsPDF, G = new Ce({
|
|
1383
|
+
orientation: k > V ? "landscape" : "portrait",
|
|
1384
|
+
unit: "mm",
|
|
1385
|
+
format: [k, V]
|
|
1386
|
+
});
|
|
1387
|
+
if (G.addImage(H, "JPG", 0, 0, k, V), n) {
|
|
1388
|
+
var De = G.output("datauristring"), oe = {
|
|
1389
|
+
image: De,
|
|
1390
|
+
format: "pdf",
|
|
1391
|
+
contentType: "application/pdf",
|
|
1392
|
+
fileName: a
|
|
1393
|
+
};
|
|
1394
|
+
return s.fire("editor:canvas-exported", oe), oe;
|
|
1395
|
+
}
|
|
1396
|
+
var Ne = G.output("blob"), Le = new File([Ne], a, {
|
|
1397
|
+
type: "application/pdf"
|
|
1398
|
+
}), se = {
|
|
1399
|
+
image: Le,
|
|
1282
1400
|
format: "pdf",
|
|
1283
1401
|
contentType: "application/pdf",
|
|
1284
1402
|
fileName: a
|
|
1285
1403
|
};
|
|
1286
|
-
return s.fire("editor:canvas-exported",
|
|
1404
|
+
return s.fire("editor:canvas-exported", se), se;
|
|
1287
1405
|
}
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
image:
|
|
1406
|
+
if (n) {
|
|
1407
|
+
var ce = {
|
|
1408
|
+
image: H,
|
|
1409
|
+
format: h,
|
|
1410
|
+
contentType: d,
|
|
1411
|
+
fileName: a
|
|
1412
|
+
};
|
|
1413
|
+
return s.fire("editor:canvas-exported", ce), ce;
|
|
1414
|
+
}
|
|
1415
|
+
var ue = h === "svg" && !y ? a.replace(/\.[^/.]+$/, ".png") : a, Ee = new File([p], ue, {
|
|
1416
|
+
type: d
|
|
1417
|
+
}), de = {
|
|
1418
|
+
image: Ee,
|
|
1301
1419
|
format: h,
|
|
1302
1420
|
contentType: d,
|
|
1303
|
-
fileName:
|
|
1421
|
+
fileName: ue
|
|
1304
1422
|
};
|
|
1305
|
-
return s.fire("editor:canvas-exported",
|
|
1423
|
+
return s.fire("editor:canvas-exported", de), de;
|
|
1424
|
+
} catch (b) {
|
|
1425
|
+
return t.editor.errorManager.emitError({
|
|
1426
|
+
origin: "ImageManager",
|
|
1427
|
+
method: "exportCanvasAsImageFile",
|
|
1428
|
+
code: "IMAGE_EXPORT_FAILED",
|
|
1429
|
+
message: "Ошибка экспорта изображения: ".concat(b.message),
|
|
1430
|
+
data: {
|
|
1431
|
+
contentType: r,
|
|
1432
|
+
fileName: a,
|
|
1433
|
+
exportAsBase64: n,
|
|
1434
|
+
exportAsBlob: i
|
|
1435
|
+
}
|
|
1436
|
+
}), "";
|
|
1306
1437
|
}
|
|
1307
|
-
var ce = h === "svg" && !M ? a.replace(/\.[^/.]+$/, ".png") : a, Le = new File([A], ce, {
|
|
1308
|
-
type: d
|
|
1309
|
-
}), ue = {
|
|
1310
|
-
image: Le,
|
|
1311
|
-
format: h,
|
|
1312
|
-
contentType: d,
|
|
1313
|
-
fileName: ce
|
|
1314
|
-
};
|
|
1315
|
-
return s.fire("editor:canvas-exported", ue), ue;
|
|
1316
1438
|
})();
|
|
1317
1439
|
}
|
|
1318
1440
|
/**
|
|
@@ -1328,7 +1450,7 @@ class C {
|
|
|
1328
1450
|
*/
|
|
1329
1451
|
exportObjectAsImageFile() {
|
|
1330
1452
|
var e = arguments, t = this;
|
|
1331
|
-
return
|
|
1453
|
+
return O(function* () {
|
|
1332
1454
|
var {
|
|
1333
1455
|
object: a,
|
|
1334
1456
|
fileName: r = "image.png",
|
|
@@ -1340,57 +1462,81 @@ class C {
|
|
|
1340
1462
|
workerManager: u
|
|
1341
1463
|
} = t.editor, l = a || c.getActiveObject();
|
|
1342
1464
|
if (!l)
|
|
1343
|
-
return
|
|
1344
|
-
|
|
1465
|
+
return t.editor.errorManager.emitError({
|
|
1466
|
+
origin: "ImageManager",
|
|
1467
|
+
method: "exportObjectAsImageFile",
|
|
1468
|
+
code: "NO_OBJECT_SELECTED",
|
|
1469
|
+
message: "Не выбран объект для экспорта",
|
|
1470
|
+
data: {
|
|
1471
|
+
contentType: n,
|
|
1472
|
+
fileName: r,
|
|
1473
|
+
exportAsBase64: i,
|
|
1474
|
+
exportAsBlob: s
|
|
1475
|
+
}
|
|
1345
1476
|
}), "";
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1477
|
+
try {
|
|
1478
|
+
var d = A.getFormatFromContentType(n);
|
|
1479
|
+
if (d === "svg") {
|
|
1480
|
+
var h = l.toSVG(), v = t._exportSVGStringAsFile(h, {
|
|
1481
|
+
exportAsBase64: i,
|
|
1482
|
+
exportAsBlob: s,
|
|
1483
|
+
fileName: r
|
|
1484
|
+
}), m = {
|
|
1485
|
+
image: v,
|
|
1486
|
+
format: d,
|
|
1487
|
+
contentType: "image/svg+xml",
|
|
1488
|
+
fileName: r.replace(/\.[^/.]+$/, ".svg")
|
|
1489
|
+
};
|
|
1490
|
+
return c.fire("editor:object-exported", m), m;
|
|
1491
|
+
}
|
|
1492
|
+
if (i) {
|
|
1493
|
+
var f = yield createImageBitmap(l._element), M = yield u.post("toDataURL", {
|
|
1494
|
+
format: d,
|
|
1495
|
+
quality: 1,
|
|
1496
|
+
bitmap: f
|
|
1497
|
+
}, [f]), g = {
|
|
1498
|
+
image: M,
|
|
1499
|
+
format: d,
|
|
1500
|
+
contentType: n,
|
|
1501
|
+
fileName: r
|
|
1502
|
+
};
|
|
1503
|
+
return c.fire("editor:object-exported", g), g;
|
|
1504
|
+
}
|
|
1505
|
+
var C = l.toCanvasElement(), y = yield new Promise((p) => {
|
|
1506
|
+
C.toBlob(p);
|
|
1507
|
+
});
|
|
1508
|
+
if (s) {
|
|
1509
|
+
var D = {
|
|
1510
|
+
image: y,
|
|
1511
|
+
format: d,
|
|
1512
|
+
contentType: n,
|
|
1513
|
+
fileName: r
|
|
1514
|
+
};
|
|
1515
|
+
return c.fire("editor:object-exported", D), D;
|
|
1516
|
+
}
|
|
1517
|
+
var E = new File([y], r, {
|
|
1518
|
+
type: n
|
|
1519
|
+
}), S = {
|
|
1520
|
+
image: E,
|
|
1379
1521
|
format: d,
|
|
1380
1522
|
contentType: n,
|
|
1381
1523
|
fileName: r
|
|
1382
1524
|
};
|
|
1383
|
-
return c.fire("editor:object-exported",
|
|
1525
|
+
return c.fire("editor:object-exported", S), S;
|
|
1526
|
+
} catch (p) {
|
|
1527
|
+
return t.editor.errorManager.emitError({
|
|
1528
|
+
origin: "ImageManager",
|
|
1529
|
+
method: "exportObjectAsImageFile",
|
|
1530
|
+
code: "IMAGE_EXPORT_FAILED",
|
|
1531
|
+
message: "Ошибка экспорта объекта: ".concat(p.message),
|
|
1532
|
+
data: {
|
|
1533
|
+
contentType: n,
|
|
1534
|
+
fileName: r,
|
|
1535
|
+
exportAsBase64: i,
|
|
1536
|
+
exportAsBlob: s
|
|
1537
|
+
}
|
|
1538
|
+
}), "";
|
|
1384
1539
|
}
|
|
1385
|
-
var O = new File([M], r, {
|
|
1386
|
-
type: n
|
|
1387
|
-
}), S = {
|
|
1388
|
-
image: O,
|
|
1389
|
-
format: d,
|
|
1390
|
-
contentType: n,
|
|
1391
|
-
fileName: r
|
|
1392
|
-
};
|
|
1393
|
-
return c.fire("editor:object-exported", S), S;
|
|
1394
1540
|
})();
|
|
1395
1541
|
}
|
|
1396
1542
|
/**
|
|
@@ -1423,6 +1569,13 @@ class C {
|
|
|
1423
1569
|
type: "image/svg+xml"
|
|
1424
1570
|
});
|
|
1425
1571
|
}
|
|
1572
|
+
/**
|
|
1573
|
+
* Получает список допустимых форматов изображений
|
|
1574
|
+
* @returns {string[]} - массив допустимых форматов изображений
|
|
1575
|
+
*/
|
|
1576
|
+
getAllowedFormatsFromContentTypes() {
|
|
1577
|
+
return this.acceptContentTypes.map((e) => A.getFormatFromContentType(e)).filter((e) => e);
|
|
1578
|
+
}
|
|
1426
1579
|
/**
|
|
1427
1580
|
* Извлекает чистый формат (subtype) из contentType,
|
|
1428
1581
|
* отбросив любую часть после «+» или «;»
|
|
@@ -1440,21 +1593,8 @@ class C {
|
|
|
1440
1593
|
* @returns {boolean} true, если contentType допустим, иначе false
|
|
1441
1594
|
*/
|
|
1442
1595
|
isAllowedContentType() {
|
|
1443
|
-
var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : ""
|
|
1444
|
-
|
|
1445
|
-
} = this.editor.options;
|
|
1446
|
-
return t.includes(e);
|
|
1447
|
-
}
|
|
1448
|
-
/**
|
|
1449
|
-
* Проверяет, является ли формат допустимым.
|
|
1450
|
-
* @param {string} format - формат изображения, например 'png', 'jpeg', 'svg'
|
|
1451
|
-
* @returns {boolean} true, если формат допустим, иначе false
|
|
1452
|
-
*/
|
|
1453
|
-
isAllowedFormat() {
|
|
1454
|
-
var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "", {
|
|
1455
|
-
acceptContentTypes: t
|
|
1456
|
-
} = this.editor.options, a = "image/".concat(e);
|
|
1457
|
-
return t.includes(a);
|
|
1596
|
+
var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "";
|
|
1597
|
+
return this.acceptContentTypes.includes(e);
|
|
1458
1598
|
}
|
|
1459
1599
|
/**
|
|
1460
1600
|
* Получает contentType изображения из источника
|
|
@@ -1464,7 +1604,7 @@ class C {
|
|
|
1464
1604
|
*/
|
|
1465
1605
|
getContentType(e) {
|
|
1466
1606
|
var t = this;
|
|
1467
|
-
return
|
|
1607
|
+
return O(function* () {
|
|
1468
1608
|
return typeof e == "string" ? t.getContentTypeFromUrl(e) : e.type || "application/octet-stream";
|
|
1469
1609
|
})();
|
|
1470
1610
|
}
|
|
@@ -1476,7 +1616,7 @@ class C {
|
|
|
1476
1616
|
*/
|
|
1477
1617
|
getContentTypeFromUrl(e) {
|
|
1478
1618
|
var t = this;
|
|
1479
|
-
return
|
|
1619
|
+
return O(function* () {
|
|
1480
1620
|
if (e.startsWith("data:")) {
|
|
1481
1621
|
var a = e.match(/^data:([^;]+)/);
|
|
1482
1622
|
return a ? a[1] : "application/octet-stream";
|
|
@@ -1501,15 +1641,13 @@ class C {
|
|
|
1501
1641
|
*/
|
|
1502
1642
|
getContentTypeFromExtension(e) {
|
|
1503
1643
|
try {
|
|
1504
|
-
var t, {
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
} catch (s) {
|
|
1512
|
-
return console.warn("Не удалось определить расширение из URL:", e, s), "application/octet-stream";
|
|
1644
|
+
var t, a = new URL(e), r = (t = a.pathname.split(".").pop()) === null || t === void 0 ? void 0 : t.toLowerCase(), n = {};
|
|
1645
|
+
return this.acceptContentTypes.forEach((i) => {
|
|
1646
|
+
var s = A.getFormatFromContentType(i);
|
|
1647
|
+
s && (n[s] = i);
|
|
1648
|
+
}), n[r] || "application/octet-stream";
|
|
1649
|
+
} catch (i) {
|
|
1650
|
+
return console.warn("Не удалось определить расширение из URL:", e, i), "application/octet-stream";
|
|
1513
1651
|
}
|
|
1514
1652
|
}
|
|
1515
1653
|
/**
|
|
@@ -1533,7 +1671,7 @@ class C {
|
|
|
1533
1671
|
return a === "contain" || a === "image-contain" ? Math.min(n / s, i / c) : a === "cover" || a === "image-cover" ? Math.max(n / s, i / c) : 1;
|
|
1534
1672
|
}
|
|
1535
1673
|
}
|
|
1536
|
-
class
|
|
1674
|
+
class jt {
|
|
1537
1675
|
/**
|
|
1538
1676
|
* @param {object} options
|
|
1539
1677
|
* @param {ImageEditor} options.editor – экземпляр редактора
|
|
@@ -1568,7 +1706,7 @@ class Mt {
|
|
|
1568
1706
|
} = this.editor, {
|
|
1569
1707
|
width: c,
|
|
1570
1708
|
height: u
|
|
1571
|
-
} = i, l = Number(Math.max(Math.min(e,
|
|
1709
|
+
} = i, l = Number(Math.max(Math.min(e, N), B));
|
|
1572
1710
|
if (!s || s === "auto" || r ? this.adaptCanvasToContainer() : s ? this.setCanvasBackstoreWidth(s) : this.setCanvasBackstoreWidth(l), i.set({
|
|
1573
1711
|
width: l
|
|
1574
1712
|
}), n.clipPath.set({
|
|
@@ -1579,10 +1717,10 @@ class Mt {
|
|
|
1579
1717
|
return;
|
|
1580
1718
|
}
|
|
1581
1719
|
var {
|
|
1582
|
-
left:
|
|
1583
|
-
top:
|
|
1720
|
+
left: v,
|
|
1721
|
+
top: m
|
|
1584
1722
|
} = this.getObjectDefaultCoords(i), f = n.getZoom();
|
|
1585
|
-
n.setViewportTransform([f, 0, 0, f,
|
|
1723
|
+
n.setViewportTransform([f, 0, 0, f, v, m]), this.centerMontageArea(), a || this.editor.historyManager.saveState(), n == null || n.fire("editor:resolution-width-changed", {
|
|
1586
1724
|
width: e
|
|
1587
1725
|
});
|
|
1588
1726
|
}
|
|
@@ -1611,7 +1749,7 @@ class Mt {
|
|
|
1611
1749
|
} = this.editor, {
|
|
1612
1750
|
width: c,
|
|
1613
1751
|
height: u
|
|
1614
|
-
} = i, l = Number(Math.max(Math.min(e,
|
|
1752
|
+
} = i, l = Number(Math.max(Math.min(e, L), Z));
|
|
1615
1753
|
if (!s || s === "auto" || r ? this.adaptCanvasToContainer() : s ? this.setCanvasBackstoreHeight(s) : this.setCanvasBackstoreHeight(l), i.set({
|
|
1616
1754
|
height: l
|
|
1617
1755
|
}), n.clipPath.set({
|
|
@@ -1622,10 +1760,10 @@ class Mt {
|
|
|
1622
1760
|
return;
|
|
1623
1761
|
}
|
|
1624
1762
|
var {
|
|
1625
|
-
left:
|
|
1626
|
-
top:
|
|
1763
|
+
left: v,
|
|
1764
|
+
top: m
|
|
1627
1765
|
} = this.getObjectDefaultCoords(i), f = n.getZoom();
|
|
1628
|
-
n.setViewportTransform([f, 0, 0, f,
|
|
1766
|
+
n.setViewportTransform([f, 0, 0, f, v, m]), this.centerMontageArea(), a || this.editor.historyManager.saveState(), n == null || n.fire("editor:resolution-height-changed", {
|
|
1629
1767
|
height: e
|
|
1630
1768
|
});
|
|
1631
1769
|
}
|
|
@@ -1638,7 +1776,7 @@ class Mt {
|
|
|
1638
1776
|
var {
|
|
1639
1777
|
canvas: e,
|
|
1640
1778
|
montageArea: t
|
|
1641
|
-
} = this.editor, a = e.getWidth(), r = e.getHeight(), n = e.getZoom(), i = new
|
|
1779
|
+
} = this.editor, a = e.getWidth(), r = e.getHeight(), n = e.getZoom(), i = new xe(a / 2, r / 2);
|
|
1642
1780
|
t.set({
|
|
1643
1781
|
left: a / 2,
|
|
1644
1782
|
top: r / 2
|
|
@@ -1673,7 +1811,7 @@ class Mt {
|
|
|
1673
1811
|
}
|
|
1674
1812
|
setCanvasBackstoreWidth(e) {
|
|
1675
1813
|
if (!(!e || typeof e != "number")) {
|
|
1676
|
-
var t = Math.max(Math.min(e,
|
|
1814
|
+
var t = Math.max(Math.min(e, N), B);
|
|
1677
1815
|
this.editor.canvas.setDimensions({
|
|
1678
1816
|
width: t
|
|
1679
1817
|
}, {
|
|
@@ -1683,7 +1821,7 @@ class Mt {
|
|
|
1683
1821
|
}
|
|
1684
1822
|
setCanvasBackstoreHeight(e) {
|
|
1685
1823
|
if (!(!e || typeof e != "number")) {
|
|
1686
|
-
var t = Math.max(Math.min(e,
|
|
1824
|
+
var t = Math.max(Math.min(e, L), Z);
|
|
1687
1825
|
this.editor.canvas.setDimensions({
|
|
1688
1826
|
height: t
|
|
1689
1827
|
}, {
|
|
@@ -1694,7 +1832,7 @@ class Mt {
|
|
|
1694
1832
|
adaptCanvasToContainer() {
|
|
1695
1833
|
var {
|
|
1696
1834
|
canvas: e
|
|
1697
|
-
} = this.editor, t = e.editorContainer, a = t.clientWidth, r = t.clientHeight, n = Math.max(Math.min(a,
|
|
1835
|
+
} = this.editor, t = e.editorContainer, a = t.clientWidth, r = t.clientHeight, n = Math.max(Math.min(a, N), B), i = Math.max(Math.min(r, L), Z);
|
|
1698
1836
|
console.log("adaptCanvasToContainer newWidth", n), console.log("adaptCanvasToContainer newHeight", i), e.setDimensions({
|
|
1699
1837
|
width: n,
|
|
1700
1838
|
height: i
|
|
@@ -1702,6 +1840,29 @@ class Mt {
|
|
|
1702
1840
|
backstoreOnly: !0
|
|
1703
1841
|
});
|
|
1704
1842
|
}
|
|
1843
|
+
/**
|
|
1844
|
+
* Заготовка.
|
|
1845
|
+
* Обновляет CSS-размеры канваса в зависимости от текущего зума, чтобы можно было скроллить вниз-вверх, влево-вправо.
|
|
1846
|
+
*
|
|
1847
|
+
* TODO: Сейчас изображение обрезается при зуме.
|
|
1848
|
+
* Нужно сделать зум по курсору мыши внутри монтажной области, и возможность перетаскивать канвас с зажатым пробелом.
|
|
1849
|
+
*
|
|
1850
|
+
* Метод нужно вызывать после zoomToPoint.
|
|
1851
|
+
*
|
|
1852
|
+
* @param {Number} zoom — текущее значение zoom (например, 1, 1.2, 2 и т.д.)
|
|
1853
|
+
*/
|
|
1854
|
+
updateCssDimensionsForZoom(e) {
|
|
1855
|
+
var {
|
|
1856
|
+
canvas: t,
|
|
1857
|
+
montageArea: a
|
|
1858
|
+
} = this.editor, r = a.width * e, n = a.height * e, i = t.wrapperEl.parentNode, s = r <= i.clientWidth ? "100%" : r, c = n <= i.clientHeight ? "100%" : n;
|
|
1859
|
+
t.setDimensions({
|
|
1860
|
+
width: s,
|
|
1861
|
+
height: c
|
|
1862
|
+
}, {
|
|
1863
|
+
cssOnly: !0
|
|
1864
|
+
});
|
|
1865
|
+
}
|
|
1705
1866
|
/**
|
|
1706
1867
|
* Устанавливаем CSS ширину канваса для отображения
|
|
1707
1868
|
* @param {string|number} width
|
|
@@ -1855,29 +2016,29 @@ class Mt {
|
|
|
1855
2016
|
width: l,
|
|
1856
2017
|
height: d
|
|
1857
2018
|
} = u;
|
|
1858
|
-
if (l <
|
|
1859
|
-
var h = "Размер изображения меньше минимального размера канваса, поэтому оно будет растянуто до минимальных размеров: ".concat(
|
|
2019
|
+
if (l < B || d < Z) {
|
|
2020
|
+
var h = "Размер изображения меньше минимального размера канваса, поэтому оно будет растянуто до минимальных размеров: ".concat(B, "x").concat(Z);
|
|
1860
2021
|
console.warn("scaleMontageAreaToImage. ".concat(h)), r.fire("editor:warning", {
|
|
1861
2022
|
message: h
|
|
1862
2023
|
});
|
|
1863
2024
|
}
|
|
1864
|
-
var
|
|
2025
|
+
var v = Math.min(l, N), m = Math.min(d, L);
|
|
1865
2026
|
if (t) {
|
|
1866
2027
|
var {
|
|
1867
2028
|
width: f,
|
|
1868
|
-
height:
|
|
1869
|
-
} = n,
|
|
1870
|
-
|
|
2029
|
+
height: M
|
|
2030
|
+
} = n, g = l / f, C = d / M, y = Math.max(g, C);
|
|
2031
|
+
v = f * y, m = M * y;
|
|
1871
2032
|
}
|
|
1872
|
-
this.setResolutionWidth(
|
|
2033
|
+
this.setResolutionWidth(v, {
|
|
1873
2034
|
withoutSave: !0
|
|
1874
|
-
}), this.setResolutionHeight(
|
|
2035
|
+
}), this.setResolutionHeight(m, {
|
|
1875
2036
|
withoutSave: !0
|
|
1876
2037
|
}), (l > s || d > c) && i.calculateAndApplyDefaultZoom(s, c), i.resetObject(u, {
|
|
1877
2038
|
withoutSave: !0
|
|
1878
2039
|
}), r.centerObject(u), r.renderAll(), a || this.editor.historyManager.saveState(), r.fire("editor:canvas-scaled", {
|
|
1879
|
-
width:
|
|
1880
|
-
height:
|
|
2040
|
+
width: v,
|
|
2041
|
+
height: m
|
|
1881
2042
|
});
|
|
1882
2043
|
}
|
|
1883
2044
|
}
|
|
@@ -1932,7 +2093,7 @@ class Mt {
|
|
|
1932
2093
|
return r.filter((n) => n.id !== t.id && n.id !== a.id);
|
|
1933
2094
|
}
|
|
1934
2095
|
}
|
|
1935
|
-
class
|
|
2096
|
+
class yt {
|
|
1936
2097
|
/**
|
|
1937
2098
|
* @param {object} options
|
|
1938
2099
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -1971,7 +2132,7 @@ class jt {
|
|
|
1971
2132
|
* Если передавать координаты курсора, то нужно быть аккуратнее, так как юзер может выйти за пределы рабочей области
|
|
1972
2133
|
*/
|
|
1973
2134
|
zoom() {
|
|
1974
|
-
var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] :
|
|
2135
|
+
var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : ft, t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
|
|
1975
2136
|
if (e) {
|
|
1976
2137
|
var {
|
|
1977
2138
|
canvas: a,
|
|
@@ -2043,7 +2204,7 @@ class jt {
|
|
|
2043
2204
|
* @fires editor:object-rotated
|
|
2044
2205
|
*/
|
|
2045
2206
|
rotate() {
|
|
2046
|
-
var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] :
|
|
2207
|
+
var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : Mt, {
|
|
2047
2208
|
withoutSave: t
|
|
2048
2209
|
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, {
|
|
2049
2210
|
canvas: a,
|
|
@@ -2130,13 +2291,13 @@ class jt {
|
|
|
2130
2291
|
if (["activeselection"].includes(c.type) && !r) {
|
|
2131
2292
|
var u = c.getObjects();
|
|
2132
2293
|
n.discardActiveObject(), u.forEach((h) => {
|
|
2133
|
-
var
|
|
2294
|
+
var v = i.calculateScaleFactor({
|
|
2134
2295
|
imageObject: h,
|
|
2135
2296
|
scaleType: t
|
|
2136
2297
|
});
|
|
2137
|
-
h.scale(
|
|
2298
|
+
h.scale(v), n.centerObject(h);
|
|
2138
2299
|
});
|
|
2139
|
-
var l = new
|
|
2300
|
+
var l = new P(u, {
|
|
2140
2301
|
canvas: n
|
|
2141
2302
|
});
|
|
2142
2303
|
n.setActiveObject(l);
|
|
@@ -2198,12 +2359,12 @@ class jt {
|
|
|
2198
2359
|
height: d
|
|
2199
2360
|
} = n, {
|
|
2200
2361
|
width: h,
|
|
2201
|
-
height:
|
|
2202
|
-
} = u,
|
|
2362
|
+
height: v
|
|
2363
|
+
} = u, m = i.calculateScaleFactor({
|
|
2203
2364
|
imageObject: u,
|
|
2204
2365
|
scaleType: c
|
|
2205
2366
|
});
|
|
2206
|
-
c === "contain" &&
|
|
2367
|
+
c === "contain" && m < 1 || c === "cover" && (h > l || v > d) ? this.fitObject({
|
|
2207
2368
|
object: u,
|
|
2208
2369
|
withoutSave: !0
|
|
2209
2370
|
}) : u.set({
|
|
@@ -2219,7 +2380,7 @@ class jt {
|
|
|
2219
2380
|
}
|
|
2220
2381
|
}
|
|
2221
2382
|
}
|
|
2222
|
-
class
|
|
2383
|
+
class pt {
|
|
2223
2384
|
/**
|
|
2224
2385
|
* @param {object} options
|
|
2225
2386
|
* @param {ImageEditor} options.editor – экземпляр редактора
|
|
@@ -2319,7 +2480,7 @@ class yt {
|
|
|
2319
2480
|
}
|
|
2320
2481
|
}
|
|
2321
2482
|
}
|
|
2322
|
-
class
|
|
2483
|
+
class W {
|
|
2323
2484
|
/**
|
|
2324
2485
|
* @param {object} options
|
|
2325
2486
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -2366,7 +2527,7 @@ class H {
|
|
|
2366
2527
|
} = this.editor;
|
|
2367
2528
|
r.suspendHistory();
|
|
2368
2529
|
var n = e || a.getActiveObject();
|
|
2369
|
-
n && (n.type === "activeselection" ?
|
|
2530
|
+
n && (n.type === "activeselection" ? W._moveSelectionForward(a, n) : a.bringObjectForward(n), a.renderAll(), r.resumeHistory(), t || r.saveState(), a.fire("editor:object-bring-forward"));
|
|
2370
2531
|
}
|
|
2371
2532
|
/**
|
|
2372
2533
|
* Отправить объект на задний план по оси Z
|
|
@@ -2416,7 +2577,7 @@ class H {
|
|
|
2416
2577
|
} = this.editor;
|
|
2417
2578
|
n.suspendHistory();
|
|
2418
2579
|
var s = e || a.getActiveObject();
|
|
2419
|
-
s && (s.type === "activeselection" ?
|
|
2580
|
+
s && (s.type === "activeselection" ? W._moveSelectionBackwards(a, s) : a.sendObjectBackwards(s), a.sendObjectToBack(r), a.sendObjectToBack(i), a.renderAll(), n.resumeHistory(), t || n.saveState(), a.fire("editor:object-send-backwards"));
|
|
2420
2581
|
}
|
|
2421
2582
|
/**
|
|
2422
2583
|
* Сдвигает выделенные объекты на один уровень вверх относительно ближайшего верхнего объекта
|
|
@@ -2428,7 +2589,7 @@ class H {
|
|
|
2428
2589
|
static _moveSelectionForward(e, t) {
|
|
2429
2590
|
for (var a = e.getObjects(), r = t.getObjects(), n = r.map((l) => a.indexOf(l)), i = -1, s = function(d) {
|
|
2430
2591
|
var h = a[d];
|
|
2431
|
-
if (!r.includes(h) && n.some((
|
|
2592
|
+
if (!r.includes(h) && n.some((v) => d > v))
|
|
2432
2593
|
return i = d, 1;
|
|
2433
2594
|
}, c = 0; c < a.length && !s(c); c += 1)
|
|
2434
2595
|
;
|
|
@@ -2455,8 +2616,8 @@ class H {
|
|
|
2455
2616
|
e.moveObjectTo(r[i], n - 1);
|
|
2456
2617
|
}
|
|
2457
2618
|
}
|
|
2458
|
-
var
|
|
2459
|
-
function
|
|
2619
|
+
var bt = ["id", "left", "top", "width", "height", "fill"], It = ["id", "left", "top", "radius", "fill"], St = ["id", "left", "top", "width", "height", "fill"];
|
|
2620
|
+
function ye(o, e) {
|
|
2460
2621
|
var t = Object.keys(o);
|
|
2461
2622
|
if (Object.getOwnPropertySymbols) {
|
|
2462
2623
|
var a = Object.getOwnPropertySymbols(o);
|
|
@@ -2466,25 +2627,25 @@ function je(o, e) {
|
|
|
2466
2627
|
}
|
|
2467
2628
|
return t;
|
|
2468
2629
|
}
|
|
2469
|
-
function
|
|
2630
|
+
function Q(o) {
|
|
2470
2631
|
for (var e = 1; e < arguments.length; e++) {
|
|
2471
2632
|
var t = arguments[e] != null ? arguments[e] : {};
|
|
2472
|
-
e % 2 ?
|
|
2473
|
-
|
|
2474
|
-
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(o, Object.getOwnPropertyDescriptors(t)) :
|
|
2633
|
+
e % 2 ? ye(Object(t), !0).forEach(function(a) {
|
|
2634
|
+
At(o, a, t[a]);
|
|
2635
|
+
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(o, Object.getOwnPropertyDescriptors(t)) : ye(Object(t)).forEach(function(a) {
|
|
2475
2636
|
Object.defineProperty(o, a, Object.getOwnPropertyDescriptor(t, a));
|
|
2476
2637
|
});
|
|
2477
2638
|
}
|
|
2478
2639
|
return o;
|
|
2479
2640
|
}
|
|
2480
|
-
function
|
|
2481
|
-
return (e =
|
|
2641
|
+
function At(o, e, t) {
|
|
2642
|
+
return (e = wt(e)) in o ? Object.defineProperty(o, e, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : o[e] = t, o;
|
|
2482
2643
|
}
|
|
2483
|
-
function
|
|
2484
|
-
var e =
|
|
2644
|
+
function wt(o) {
|
|
2645
|
+
var e = Ct(o, "string");
|
|
2485
2646
|
return typeof e == "symbol" ? e : e + "";
|
|
2486
2647
|
}
|
|
2487
|
-
function
|
|
2648
|
+
function Ct(o, e) {
|
|
2488
2649
|
if (typeof o != "object" || !o) return o;
|
|
2489
2650
|
var t = o[Symbol.toPrimitive];
|
|
2490
2651
|
if (t !== void 0) {
|
|
@@ -2494,16 +2655,16 @@ function wt(o, e) {
|
|
|
2494
2655
|
}
|
|
2495
2656
|
return (e === "string" ? String : Number)(o);
|
|
2496
2657
|
}
|
|
2497
|
-
function
|
|
2658
|
+
function J(o, e) {
|
|
2498
2659
|
if (o == null) return {};
|
|
2499
|
-
var t, a, r =
|
|
2660
|
+
var t, a, r = Dt(o, e);
|
|
2500
2661
|
if (Object.getOwnPropertySymbols) {
|
|
2501
2662
|
var n = Object.getOwnPropertySymbols(o);
|
|
2502
2663
|
for (a = 0; a < n.length; a++) t = n[a], e.indexOf(t) === -1 && {}.propertyIsEnumerable.call(o, t) && (r[t] = o[t]);
|
|
2503
2664
|
}
|
|
2504
2665
|
return r;
|
|
2505
2666
|
}
|
|
2506
|
-
function
|
|
2667
|
+
function Dt(o, e) {
|
|
2507
2668
|
if (o == null) return {};
|
|
2508
2669
|
var t = {};
|
|
2509
2670
|
for (var a in o) if ({}.hasOwnProperty.call(o, a)) {
|
|
@@ -2512,7 +2673,7 @@ function Ct(o, e) {
|
|
|
2512
2673
|
}
|
|
2513
2674
|
return t;
|
|
2514
2675
|
}
|
|
2515
|
-
class
|
|
2676
|
+
class Nt {
|
|
2516
2677
|
/**
|
|
2517
2678
|
* @param {object} options
|
|
2518
2679
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -2540,18 +2701,18 @@ class Dt {
|
|
|
2540
2701
|
*/
|
|
2541
2702
|
addRectangle() {
|
|
2542
2703
|
var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, {
|
|
2543
|
-
id: t = "rect-".concat(
|
|
2704
|
+
id: t = "rect-".concat(w()),
|
|
2544
2705
|
left: a,
|
|
2545
2706
|
top: r,
|
|
2546
2707
|
width: n = 100,
|
|
2547
2708
|
height: i = 100,
|
|
2548
2709
|
fill: s = "blue"
|
|
2549
|
-
} = e, c =
|
|
2710
|
+
} = e, c = J(e, bt), {
|
|
2550
2711
|
withoutSelection: u,
|
|
2551
2712
|
withoutAdding: l
|
|
2552
2713
|
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, {
|
|
2553
2714
|
canvas: d
|
|
2554
|
-
} = this.editor, h = new
|
|
2715
|
+
} = this.editor, h = new Be(Q({
|
|
2555
2716
|
id: t,
|
|
2556
2717
|
left: a,
|
|
2557
2718
|
top: r,
|
|
@@ -2577,17 +2738,17 @@ class Dt {
|
|
|
2577
2738
|
*/
|
|
2578
2739
|
addCircle() {
|
|
2579
2740
|
var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, {
|
|
2580
|
-
id: t = "circle-".concat(
|
|
2741
|
+
id: t = "circle-".concat(w()),
|
|
2581
2742
|
left: a,
|
|
2582
2743
|
top: r,
|
|
2583
2744
|
radius: n = 50,
|
|
2584
2745
|
fill: i = "green"
|
|
2585
|
-
} = e, s =
|
|
2746
|
+
} = e, s = J(e, It), {
|
|
2586
2747
|
withoutSelection: c,
|
|
2587
2748
|
withoutAdding: u
|
|
2588
2749
|
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, {
|
|
2589
2750
|
canvas: l
|
|
2590
|
-
} = this.editor, d = new
|
|
2751
|
+
} = this.editor, d = new Ze(Q({
|
|
2591
2752
|
id: t,
|
|
2592
2753
|
left: a,
|
|
2593
2754
|
top: r,
|
|
@@ -2613,18 +2774,18 @@ class Dt {
|
|
|
2613
2774
|
*/
|
|
2614
2775
|
addTriangle() {
|
|
2615
2776
|
var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, {
|
|
2616
|
-
id: t = "triangle-".concat(
|
|
2777
|
+
id: t = "triangle-".concat(w()),
|
|
2617
2778
|
left: a,
|
|
2618
2779
|
top: r,
|
|
2619
2780
|
width: n = 100,
|
|
2620
2781
|
height: i = 100,
|
|
2621
2782
|
fill: s = "yellow"
|
|
2622
|
-
} = e, c =
|
|
2783
|
+
} = e, c = J(e, St), {
|
|
2623
2784
|
withoutSelection: u,
|
|
2624
2785
|
withoutAdding: l
|
|
2625
2786
|
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, {
|
|
2626
2787
|
canvas: d
|
|
2627
|
-
} = this.editor, h = new
|
|
2788
|
+
} = this.editor, h = new ze(Q({
|
|
2628
2789
|
id: t,
|
|
2629
2790
|
left: a,
|
|
2630
2791
|
top: r,
|
|
@@ -2635,7 +2796,7 @@ class Dt {
|
|
|
2635
2796
|
return !a && !r && d.centerObject(h), l || (d.add(h), u || d.setActiveObject(h), d.renderAll()), h;
|
|
2636
2797
|
}
|
|
2637
2798
|
}
|
|
2638
|
-
function
|
|
2799
|
+
function pe(o, e, t, a, r, n, i) {
|
|
2639
2800
|
try {
|
|
2640
2801
|
var s = o[n](i), c = s.value;
|
|
2641
2802
|
} catch (u) {
|
|
@@ -2643,22 +2804,22 @@ function ye(o, e, t, a, r, n, i) {
|
|
|
2643
2804
|
}
|
|
2644
2805
|
s.done ? e(c) : Promise.resolve(c).then(a, r);
|
|
2645
2806
|
}
|
|
2646
|
-
function
|
|
2807
|
+
function be(o) {
|
|
2647
2808
|
return function() {
|
|
2648
2809
|
var e = this, t = arguments;
|
|
2649
2810
|
return new Promise(function(a, r) {
|
|
2650
2811
|
var n = o.apply(e, t);
|
|
2651
2812
|
function i(c) {
|
|
2652
|
-
|
|
2813
|
+
pe(n, a, r, i, s, "next", c);
|
|
2653
2814
|
}
|
|
2654
2815
|
function s(c) {
|
|
2655
|
-
|
|
2816
|
+
pe(n, a, r, i, s, "throw", c);
|
|
2656
2817
|
}
|
|
2657
2818
|
i(void 0);
|
|
2658
2819
|
});
|
|
2659
2820
|
};
|
|
2660
2821
|
}
|
|
2661
|
-
class
|
|
2822
|
+
class Lt {
|
|
2662
2823
|
/**
|
|
2663
2824
|
* @param {object} options
|
|
2664
2825
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -2675,7 +2836,7 @@ class Nt {
|
|
|
2675
2836
|
*/
|
|
2676
2837
|
copy() {
|
|
2677
2838
|
var e = this;
|
|
2678
|
-
return
|
|
2839
|
+
return be(function* () {
|
|
2679
2840
|
var {
|
|
2680
2841
|
canvas: t
|
|
2681
2842
|
} = e.editor, a = t.getActiveObject();
|
|
@@ -2719,18 +2880,18 @@ class Nt {
|
|
|
2719
2880
|
*/
|
|
2720
2881
|
paste() {
|
|
2721
2882
|
var e = this;
|
|
2722
|
-
return
|
|
2883
|
+
return be(function* () {
|
|
2723
2884
|
var {
|
|
2724
2885
|
canvas: t
|
|
2725
2886
|
} = e.editor;
|
|
2726
2887
|
if (e.clipboard) {
|
|
2727
2888
|
var a = yield e.clipboard.clone(["format"]);
|
|
2728
2889
|
t.discardActiveObject(), a.set({
|
|
2729
|
-
id: "".concat(a.type, "-").concat(
|
|
2890
|
+
id: "".concat(a.type, "-").concat(w()),
|
|
2730
2891
|
left: a.left + 10,
|
|
2731
2892
|
top: a.top + 10,
|
|
2732
2893
|
evented: !0
|
|
2733
|
-
}), a instanceof
|
|
2894
|
+
}), a instanceof P ? (a.canvas = t, a.forEachObject((r) => {
|
|
2734
2895
|
t.add(r);
|
|
2735
2896
|
})) : t.add(a), t.setActiveObject(a), t.requestRenderAll(), t.fire("editor:object-pasted", {
|
|
2736
2897
|
object: a
|
|
@@ -2739,7 +2900,7 @@ class Nt {
|
|
|
2739
2900
|
})();
|
|
2740
2901
|
}
|
|
2741
2902
|
}
|
|
2742
|
-
class
|
|
2903
|
+
class Et {
|
|
2743
2904
|
/**
|
|
2744
2905
|
* @param {object} options
|
|
2745
2906
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -2851,8 +3012,8 @@ class Ot {
|
|
|
2851
3012
|
r.suspendHistory();
|
|
2852
3013
|
var n = e || a.getActiveObject();
|
|
2853
3014
|
if (n && n.type === "activeselection") {
|
|
2854
|
-
var i = n.getObjects(), s = new
|
|
2855
|
-
i.forEach((c) => a.remove(c)), s.set("id", "".concat(s.type, "-").concat(
|
|
3015
|
+
var i = n.getObjects(), s = new Pe(i);
|
|
3016
|
+
i.forEach((c) => a.remove(c)), s.set("id", "".concat(s.type, "-").concat(w())), a.add(s), a.setActiveObject(s), a.renderAll(), r.resumeHistory(), t || r.saveState(), a.fire("editor:objects-grouped");
|
|
2856
3017
|
}
|
|
2857
3018
|
}
|
|
2858
3019
|
/**
|
|
@@ -2875,7 +3036,7 @@ class Ot {
|
|
|
2875
3036
|
if (!(!n || n.type !== "group")) {
|
|
2876
3037
|
var i = n.removeAll();
|
|
2877
3038
|
a.remove(n), i.forEach((c) => a.add(c));
|
|
2878
|
-
var s = new
|
|
3039
|
+
var s = new P(i, {
|
|
2879
3040
|
canvas: a
|
|
2880
3041
|
});
|
|
2881
3042
|
a.setActiveObject(s), a.renderAll(), r.resumeHistory(), t || r.saveState(), a.fire("editor:objects-ungrouped");
|
|
@@ -2904,7 +3065,7 @@ class Tt {
|
|
|
2904
3065
|
objectLockManager: a
|
|
2905
3066
|
} = this.editor;
|
|
2906
3067
|
e.discardActiveObject();
|
|
2907
|
-
var r = t.getObjects(), n = r.some((s) => s.locked), i = r.length > 1 ? new
|
|
3068
|
+
var r = t.getObjects(), n = r.some((s) => s.locked), i = r.length > 1 ? new P(t.getObjects(), {
|
|
2908
3069
|
canvas: e
|
|
2909
3070
|
}) : r[0];
|
|
2910
3071
|
n && a.lockObject({
|
|
@@ -2916,7 +3077,7 @@ class Tt {
|
|
|
2916
3077
|
});
|
|
2917
3078
|
}
|
|
2918
3079
|
}
|
|
2919
|
-
class
|
|
3080
|
+
class kt {
|
|
2920
3081
|
/**
|
|
2921
3082
|
* @param {object} options
|
|
2922
3083
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -2951,7 +3112,118 @@ class Et {
|
|
|
2951
3112
|
}), a.discardActiveObject(), a.renderAll(), r.resumeHistory(), t || r.saveState(), a.fire("editor:objects-deleted"));
|
|
2952
3113
|
}
|
|
2953
3114
|
}
|
|
2954
|
-
|
|
3115
|
+
var xt = {
|
|
3116
|
+
IMAGE_MANAGER: {
|
|
3117
|
+
/**
|
|
3118
|
+
* Некорректный Content-Type изображения
|
|
3119
|
+
*/
|
|
3120
|
+
INVALID_CONTENT_TYPE: "INVALID_CONTENT_TYPE",
|
|
3121
|
+
/**
|
|
3122
|
+
* Некорректный тип источника изображения
|
|
3123
|
+
*/
|
|
3124
|
+
INVALID_SOURCE_TYPE: "INVALID_SOURCE_TYPE",
|
|
3125
|
+
/**
|
|
3126
|
+
* Ошибка при загрузке изображения
|
|
3127
|
+
*/
|
|
3128
|
+
IMPORT_FAILED: "IMPORT_FAILED",
|
|
3129
|
+
/**
|
|
3130
|
+
* Предупреждение, что изображение слишком большое, и оно будет уменьшено
|
|
3131
|
+
*/
|
|
3132
|
+
IMAGE_RESIZE_WARNING: "IMAGE_RESIZE_WARNING",
|
|
3133
|
+
/**
|
|
3134
|
+
* Не выбран объект для экспорта
|
|
3135
|
+
*/
|
|
3136
|
+
NO_OBJECT_SELECTED: "NO_OBJECT_SELECTED",
|
|
3137
|
+
/**
|
|
3138
|
+
* Ошибка при экспорте изображения
|
|
3139
|
+
*/
|
|
3140
|
+
IMAGE_EXPORT_FAILED: "IMAGE_EXPORT_FAILED"
|
|
3141
|
+
}
|
|
3142
|
+
};
|
|
3143
|
+
class F {
|
|
3144
|
+
constructor(e) {
|
|
3145
|
+
var {
|
|
3146
|
+
editor: t
|
|
3147
|
+
} = e;
|
|
3148
|
+
this.editor = t;
|
|
3149
|
+
}
|
|
3150
|
+
/**
|
|
3151
|
+
* Эмитит событие ошибки через fabricjs
|
|
3152
|
+
* @param {object} options
|
|
3153
|
+
* @param {string} [origin='ImageEditor'] — источник ошибки (по умолчанию 'ImageEditor')
|
|
3154
|
+
* @param {string} [method='Unknown Method'] — метод, вызвавший ошибку (по умолчанию 'Unknown Method')
|
|
3155
|
+
* @param {string} code — код ошибки (из errorCodes)
|
|
3156
|
+
* @param {object} [data] — доп. данные (опционально)
|
|
3157
|
+
* @param {string} [message] — текст ошибки (опционально, если не передан, то используется код ошибки)
|
|
3158
|
+
* @fires editor:error
|
|
3159
|
+
*/
|
|
3160
|
+
emitError(e) {
|
|
3161
|
+
var {
|
|
3162
|
+
origin: t = "ImageEditor",
|
|
3163
|
+
method: a = "Unknown Method",
|
|
3164
|
+
code: r,
|
|
3165
|
+
data: n,
|
|
3166
|
+
message: i
|
|
3167
|
+
} = e;
|
|
3168
|
+
if (!F.isValidErrorCode(r)) {
|
|
3169
|
+
console.warn("Неизвестный код ошибки: ", {
|
|
3170
|
+
code: r,
|
|
3171
|
+
origin: t,
|
|
3172
|
+
method: a
|
|
3173
|
+
});
|
|
3174
|
+
return;
|
|
3175
|
+
}
|
|
3176
|
+
if (r) {
|
|
3177
|
+
var s = i || r;
|
|
3178
|
+
console.error("".concat(t, ". ").concat(a, ". ").concat(r, ". ").concat(s), n), this.editor.canvas.fire("editor:error", {
|
|
3179
|
+
code: r,
|
|
3180
|
+
origin: t,
|
|
3181
|
+
method: a,
|
|
3182
|
+
message: s,
|
|
3183
|
+
data: n
|
|
3184
|
+
});
|
|
3185
|
+
}
|
|
3186
|
+
}
|
|
3187
|
+
/**
|
|
3188
|
+
* Эмитит предупреждение через fabricjs
|
|
3189
|
+
* @param {object} options
|
|
3190
|
+
* @param {string} [origin='ImageEditor'] — источник предупреждения (по умолчанию 'ImageEditor')
|
|
3191
|
+
* @param {string} [method='Unknown Method'] — метод, вызвавший предупреждение (по умолчанию 'Unknown Method')
|
|
3192
|
+
* @param {string} code — код предупреждения (из errorCodes)
|
|
3193
|
+
* @param {object} [data] — доп. данные (опционально)
|
|
3194
|
+
* @param {string} [message] — текст предупреждения (опционально, если не передан, то используется код предупреждения)
|
|
3195
|
+
* @fires editor:warning
|
|
3196
|
+
*/
|
|
3197
|
+
emitWarning(e) {
|
|
3198
|
+
var {
|
|
3199
|
+
origin: t = "ImageEditor",
|
|
3200
|
+
method: a = "Unknown Method",
|
|
3201
|
+
code: r,
|
|
3202
|
+
message: n,
|
|
3203
|
+
data: i
|
|
3204
|
+
} = e;
|
|
3205
|
+
if (!F.isValidErrorCode(r)) {
|
|
3206
|
+
console.warn("Неизвестный код ошибки: ", {
|
|
3207
|
+
code: r,
|
|
3208
|
+
origin: t,
|
|
3209
|
+
method: a
|
|
3210
|
+
});
|
|
3211
|
+
return;
|
|
3212
|
+
}
|
|
3213
|
+
var s = n || r;
|
|
3214
|
+
console.warn("".concat(t, ". ").concat(a, ". ").concat(r, ". ").concat(s), i), this.editor.canvas.fire("editor:warning", {
|
|
3215
|
+
code: r,
|
|
3216
|
+
origin: t,
|
|
3217
|
+
method: a,
|
|
3218
|
+
message: n,
|
|
3219
|
+
data: i
|
|
3220
|
+
});
|
|
3221
|
+
}
|
|
3222
|
+
static isValidErrorCode(e) {
|
|
3223
|
+
return e ? Object.values(xt).some((t) => Object.values(t).includes(e)) : !1;
|
|
3224
|
+
}
|
|
3225
|
+
}
|
|
3226
|
+
function Ie(o, e, t, a, r, n, i) {
|
|
2955
3227
|
try {
|
|
2956
3228
|
var s = o[n](i), c = s.value;
|
|
2957
3229
|
} catch (u) {
|
|
@@ -2959,22 +3231,22 @@ function be(o, e, t, a, r, n, i) {
|
|
|
2959
3231
|
}
|
|
2960
3232
|
s.done ? e(c) : Promise.resolve(c).then(a, r);
|
|
2961
3233
|
}
|
|
2962
|
-
function
|
|
3234
|
+
function Bt(o) {
|
|
2963
3235
|
return function() {
|
|
2964
3236
|
var e = this, t = arguments;
|
|
2965
3237
|
return new Promise(function(a, r) {
|
|
2966
3238
|
var n = o.apply(e, t);
|
|
2967
3239
|
function i(c) {
|
|
2968
|
-
|
|
3240
|
+
Ie(n, a, r, i, s, "next", c);
|
|
2969
3241
|
}
|
|
2970
3242
|
function s(c) {
|
|
2971
|
-
|
|
3243
|
+
Ie(n, a, r, i, s, "throw", c);
|
|
2972
3244
|
}
|
|
2973
3245
|
i(void 0);
|
|
2974
3246
|
});
|
|
2975
3247
|
};
|
|
2976
3248
|
}
|
|
2977
|
-
class
|
|
3249
|
+
class ie {
|
|
2978
3250
|
constructor(e) {
|
|
2979
3251
|
var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
|
|
2980
3252
|
this.options = t;
|
|
@@ -2983,11 +3255,11 @@ class ae {
|
|
|
2983
3255
|
minZoom: r,
|
|
2984
3256
|
maxZoom: n
|
|
2985
3257
|
} = t;
|
|
2986
|
-
this.containerId = e, this.editorId = "".concat(e, "-").concat(
|
|
3258
|
+
this.containerId = e, this.editorId = "".concat(e, "-").concat(w()), this.clipboard = null, this.defaultZoom = a, this.minZoom = r || vt, this.maxZoom = n || mt, this.init();
|
|
2987
3259
|
}
|
|
2988
3260
|
init() {
|
|
2989
3261
|
var e = this;
|
|
2990
|
-
return
|
|
3262
|
+
return Bt(function* () {
|
|
2991
3263
|
var {
|
|
2992
3264
|
editorContainerWidth: t,
|
|
2993
3265
|
editorContainerHeight: a,
|
|
@@ -3000,45 +3272,47 @@ class ae {
|
|
|
3000
3272
|
scaleType: l,
|
|
3001
3273
|
_onReadyCallback: d
|
|
3002
3274
|
} = e.options;
|
|
3003
|
-
if (
|
|
3275
|
+
if (qe.apply(), e.canvas = new Ye(e.containerId, e.options), e.moduleLoader = new We(), e.workerManager = new Fe(), e.errorManager = new F({
|
|
3276
|
+
editor: e
|
|
3277
|
+
}), e.historyManager = new gt({
|
|
3004
3278
|
editor: e
|
|
3005
|
-
}), e.toolbar = new
|
|
3279
|
+
}), e.toolbar = new ht({
|
|
3006
3280
|
editor: e
|
|
3007
|
-
}), e.transformManager = new
|
|
3281
|
+
}), e.transformManager = new yt({
|
|
3008
3282
|
editor: e
|
|
3009
|
-
}), e.canvasManager = new
|
|
3283
|
+
}), e.canvasManager = new jt({
|
|
3010
3284
|
editor: e
|
|
3011
|
-
}), e.imageManager = new
|
|
3285
|
+
}), e.imageManager = new A({
|
|
3012
3286
|
editor: e
|
|
3013
|
-
}), e.layerManager = new
|
|
3287
|
+
}), e.layerManager = new W({
|
|
3014
3288
|
editor: e
|
|
3015
|
-
}), e.shapeManager = new
|
|
3289
|
+
}), e.shapeManager = new Nt({
|
|
3016
3290
|
editor: e
|
|
3017
|
-
}), e.interactionBlocker = new
|
|
3291
|
+
}), e.interactionBlocker = new pt({
|
|
3018
3292
|
editor: e
|
|
3019
|
-
}), e.clipboardManager = new
|
|
3293
|
+
}), e.clipboardManager = new Lt({
|
|
3020
3294
|
editor: e
|
|
3021
|
-
}), e.objectLockManager = new
|
|
3295
|
+
}), e.objectLockManager = new Et({
|
|
3022
3296
|
editor: e
|
|
3023
3297
|
}), e.groupingManager = new Ot({
|
|
3024
3298
|
editor: e
|
|
3025
3299
|
}), e.selectionManager = new Tt({
|
|
3026
3300
|
editor: e
|
|
3027
|
-
}), e.deletionManager = new
|
|
3301
|
+
}), e.deletionManager = new kt({
|
|
3028
3302
|
editor: e
|
|
3029
|
-
}), e._createMonageArea(), e._createClippingArea(), e.listeners = new
|
|
3303
|
+
}), e._createMonageArea(), e._createClippingArea(), e.listeners = new z({
|
|
3030
3304
|
editor: e,
|
|
3031
3305
|
options: e.options
|
|
3032
3306
|
}), e.canvasManager.setEditorContainerWidth(t), e.canvasManager.setEditorContainerHeight(a), e.canvasManager.setCanvasWrapperWidth(r), e.canvasManager.setCanvasWrapperHeight(n), e.canvasManager.setCanvasCSSWidth(i), e.canvasManager.setCanvasCSSHeight(s), c != null && c.source) {
|
|
3033
3307
|
var {
|
|
3034
3308
|
source: h,
|
|
3035
|
-
scale:
|
|
3036
|
-
withoutSave:
|
|
3309
|
+
scale: v = "image-".concat(l),
|
|
3310
|
+
withoutSave: m = !0
|
|
3037
3311
|
} = c;
|
|
3038
3312
|
yield e.imageManager.importImage({
|
|
3039
3313
|
source: h,
|
|
3040
|
-
scale:
|
|
3041
|
-
withoutSave:
|
|
3314
|
+
scale: v,
|
|
3315
|
+
withoutSave: m
|
|
3042
3316
|
});
|
|
3043
3317
|
} else
|
|
3044
3318
|
e.canvasManager.setDefaultScale({
|
|
@@ -3060,7 +3334,7 @@ class ae {
|
|
|
3060
3334
|
this.montageArea = this.shapeManager.addRectangle({
|
|
3061
3335
|
width: e,
|
|
3062
3336
|
height: t,
|
|
3063
|
-
fill:
|
|
3337
|
+
fill: ie._createMosaicPattern(),
|
|
3064
3338
|
stroke: null,
|
|
3065
3339
|
strokeWidth: 0,
|
|
3066
3340
|
selectable: !1,
|
|
@@ -3124,7 +3398,7 @@ class ae {
|
|
|
3124
3398
|
});
|
|
3125
3399
|
}
|
|
3126
3400
|
}
|
|
3127
|
-
const
|
|
3401
|
+
const Zt = {
|
|
3128
3402
|
// Cохраняют ли объекты свой текущий порядок (z-index) при выделении
|
|
3129
3403
|
preserveObjectStacking: !0,
|
|
3130
3404
|
// Возможность взаимодействия с объектом за пределами монтажной области
|
|
@@ -3235,7 +3509,7 @@ const xt = {
|
|
|
3235
3509
|
// Сброс параметров объекта по двойному клику
|
|
3236
3510
|
resetObjectFitByDoubleClick: !0
|
|
3237
3511
|
};
|
|
3238
|
-
function
|
|
3512
|
+
function Se(o, e) {
|
|
3239
3513
|
var t = Object.keys(o);
|
|
3240
3514
|
if (Object.getOwnPropertySymbols) {
|
|
3241
3515
|
var a = Object.getOwnPropertySymbols(o);
|
|
@@ -3245,25 +3519,25 @@ function Ie(o, e) {
|
|
|
3245
3519
|
}
|
|
3246
3520
|
return t;
|
|
3247
3521
|
}
|
|
3248
|
-
function
|
|
3522
|
+
function Ae(o) {
|
|
3249
3523
|
for (var e = 1; e < arguments.length; e++) {
|
|
3250
3524
|
var t = arguments[e] != null ? arguments[e] : {};
|
|
3251
|
-
e % 2 ?
|
|
3252
|
-
|
|
3253
|
-
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(o, Object.getOwnPropertyDescriptors(t)) :
|
|
3525
|
+
e % 2 ? Se(Object(t), !0).forEach(function(a) {
|
|
3526
|
+
zt(o, a, t[a]);
|
|
3527
|
+
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(o, Object.getOwnPropertyDescriptors(t)) : Se(Object(t)).forEach(function(a) {
|
|
3254
3528
|
Object.defineProperty(o, a, Object.getOwnPropertyDescriptor(t, a));
|
|
3255
3529
|
});
|
|
3256
3530
|
}
|
|
3257
3531
|
return o;
|
|
3258
3532
|
}
|
|
3259
|
-
function
|
|
3260
|
-
return (e =
|
|
3533
|
+
function zt(o, e, t) {
|
|
3534
|
+
return (e = Pt(e)) in o ? Object.defineProperty(o, e, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : o[e] = t, o;
|
|
3261
3535
|
}
|
|
3262
|
-
function
|
|
3263
|
-
var e =
|
|
3536
|
+
function Pt(o) {
|
|
3537
|
+
var e = Ut(o, "string");
|
|
3264
3538
|
return typeof e == "symbol" ? e : e + "";
|
|
3265
3539
|
}
|
|
3266
|
-
function
|
|
3540
|
+
function Ut(o, e) {
|
|
3267
3541
|
if (typeof o != "object" || !o) return o;
|
|
3268
3542
|
var t = o[Symbol.toPrimitive];
|
|
3269
3543
|
if (t !== void 0) {
|
|
@@ -3273,18 +3547,18 @@ function zt(o, e) {
|
|
|
3273
3547
|
}
|
|
3274
3548
|
return (e === "string" ? String : Number)(o);
|
|
3275
3549
|
}
|
|
3276
|
-
function
|
|
3277
|
-
var e = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, t =
|
|
3550
|
+
function _t(o) {
|
|
3551
|
+
var e = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, t = Ae(Ae({}, Zt), e), a = document.getElementById(o);
|
|
3278
3552
|
if (!a)
|
|
3279
3553
|
return Promise.reject(new Error('Контейнер с ID "'.concat(o, '" не найден.')));
|
|
3280
3554
|
var r = document.createElement("canvas");
|
|
3281
3555
|
return r.id = "".concat(o, "-canvas"), a.appendChild(r), t.editorContainer = a, new Promise((n) => {
|
|
3282
3556
|
t._onReadyCallback = n;
|
|
3283
|
-
var i = new
|
|
3557
|
+
var i = new ie(r.id, t);
|
|
3284
3558
|
window[o] = i;
|
|
3285
3559
|
});
|
|
3286
3560
|
}
|
|
3287
3561
|
export {
|
|
3288
|
-
|
|
3562
|
+
_t as default
|
|
3289
3563
|
};
|
|
3290
3564
|
//# sourceMappingURL=main.js.map
|