@anu3ev/fabric-image-editor 0.1.40 → 0.1.42
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 +542 -595
- package/package.json +1 -1
package/dist/main.js
CHANGED
|
@@ -1,47 +1,47 @@
|
|
|
1
|
-
var
|
|
1
|
+
var Ee = Object.defineProperty;
|
|
2
2
|
var G = Object.getOwnPropertySymbols;
|
|
3
|
-
var
|
|
4
|
-
var
|
|
3
|
+
var fe = Object.prototype.hasOwnProperty, je = Object.prototype.propertyIsEnumerable;
|
|
4
|
+
var Me = (o, e, t) => e in o ? Ee(o, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : o[e] = t, C = (o, e) => {
|
|
5
5
|
for (var t in e || (e = {}))
|
|
6
|
-
|
|
6
|
+
fe.call(e, t) && Me(o, t, e[t]);
|
|
7
7
|
if (G)
|
|
8
8
|
for (var t of G(e))
|
|
9
|
-
|
|
9
|
+
je.call(e, t) && Me(o, t, e[t]);
|
|
10
10
|
return o;
|
|
11
11
|
};
|
|
12
12
|
var X = (o, e) => {
|
|
13
13
|
var t = {};
|
|
14
14
|
for (var a in o)
|
|
15
|
-
|
|
15
|
+
fe.call(o, a) && e.indexOf(a) < 0 && (t[a] = o[a]);
|
|
16
16
|
if (o != null && G)
|
|
17
17
|
for (var a of G(o))
|
|
18
|
-
e.indexOf(a) < 0 &&
|
|
18
|
+
e.indexOf(a) < 0 && je.call(o, a) && (t[a] = o[a]);
|
|
19
19
|
return t;
|
|
20
20
|
};
|
|
21
21
|
var Q = (o, e, t) => new Promise((a, r) => {
|
|
22
|
-
var
|
|
22
|
+
var n = (c) => {
|
|
23
23
|
try {
|
|
24
24
|
s(t.next(c));
|
|
25
25
|
} catch (u) {
|
|
26
26
|
r(u);
|
|
27
27
|
}
|
|
28
|
-
},
|
|
28
|
+
}, i = (c) => {
|
|
29
29
|
try {
|
|
30
30
|
s(t.throw(c));
|
|
31
31
|
} catch (u) {
|
|
32
32
|
r(u);
|
|
33
33
|
}
|
|
34
|
-
}, s = (c) => c.done ? a(c.value) : Promise.resolve(c.value).then(
|
|
34
|
+
}, s = (c) => c.done ? a(c.value) : Promise.resolve(c.value).then(n, i);
|
|
35
35
|
s((t = t.apply(o, e)).next());
|
|
36
36
|
});
|
|
37
|
-
import { ActiveSelection as
|
|
37
|
+
import { ActiveSelection as R, util as P, controlsUtils as Oe, InteractiveFabricObject as Te, loadSVGFromURL as ke, FabricImage as ee, Point as K, Rect as xe, Circle as Be, Triangle as Ze, Group as ze, Canvas as Ue, Pattern as Ye } from "fabric";
|
|
38
38
|
import { create as _e } from "jsondiffpatch";
|
|
39
|
-
var
|
|
39
|
+
var He = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict", A = function() {
|
|
40
40
|
for (var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 21, t = "", a = crypto.getRandomValues(new Uint8Array(e |= 0)); e--; )
|
|
41
|
-
t +=
|
|
41
|
+
t += He[a[e] & 63];
|
|
42
42
|
return t;
|
|
43
43
|
};
|
|
44
|
-
class
|
|
44
|
+
class H {
|
|
45
45
|
/**
|
|
46
46
|
* Конструктор принимает редактор и опции.
|
|
47
47
|
* @param {Object} params
|
|
@@ -58,7 +58,7 @@ class R {
|
|
|
58
58
|
* @param {Boolean} [params.options.resetObjectFitByDoubleClick] — сброс фита объекта по двойному клику
|
|
59
59
|
*/
|
|
60
60
|
constructor({ editor: e, options: t = {} }) {
|
|
61
|
-
this.isDragging = !1, this.lastMouseX = 0, this.lastMouseY = 0, this.isUndoRedoKeyPressed = !1, this.isSpacePressed = !1, this.canvasDragging = !1, this.mouseWheelZooming = !1, this.bringToFrontOnSelection = !1, this.resetObjectFitByDoubleClick = !1, this.copyObjectsByHotkey = !1, this.pasteImageFromClipboard = !1, this.undoRedoByHotKeys = !1, this.selectAllByHotkey = !1, this.deleteObjectsByHotkey = !1, this.adaptCanvasToContainerOnResize = !1, this.editor = e, this.canvas = e.canvas, this.options = t, this.handleContainerResizeBound =
|
|
61
|
+
this.isDragging = !1, this.lastMouseX = 0, this.lastMouseY = 0, this.isUndoRedoKeyPressed = !1, this.isSpacePressed = !1, this.canvasDragging = !1, this.mouseWheelZooming = !1, this.bringToFrontOnSelection = !1, this.resetObjectFitByDoubleClick = !1, this.copyObjectsByHotkey = !1, this.pasteImageFromClipboard = !1, this.undoRedoByHotKeys = !1, this.selectAllByHotkey = !1, this.deleteObjectsByHotkey = !1, this.adaptCanvasToContainerOnResize = !1, this.editor = e, this.canvas = e.canvas, this.options = t, this.handleContainerResizeBound = H.debounce(this.handleContainerResize.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 = H.debounce(this.handleObjectModifiedHistory.bind(this), 300), this.handleObjectRotatingHistoryBound = H.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();
|
|
62
62
|
}
|
|
63
63
|
/**
|
|
64
64
|
* Инициализация всех обработчиков согласно опциям.
|
|
@@ -69,14 +69,14 @@ class R {
|
|
|
69
69
|
canvasDragging: t,
|
|
70
70
|
mouseWheelZooming: a,
|
|
71
71
|
bringToFrontOnSelection: r,
|
|
72
|
-
copyObjectsByHotkey:
|
|
73
|
-
pasteImageFromClipboard:
|
|
72
|
+
copyObjectsByHotkey: n,
|
|
73
|
+
pasteImageFromClipboard: i,
|
|
74
74
|
undoRedoByHotKeys: s,
|
|
75
75
|
selectAllByHotkey: c,
|
|
76
76
|
deleteObjectsByHotkey: u,
|
|
77
|
-
resetObjectFitByDoubleClick:
|
|
77
|
+
resetObjectFitByDoubleClick: l
|
|
78
78
|
} = this.options;
|
|
79
|
-
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, { capture: !0 }), document.addEventListener("keyup", this.handleSpaceKeyUpBound, { capture: !0 })), a && this.canvas.on("mouse:wheel", this.handleMouseWheelZoomBound), r && (this.canvas.on("selection:created", this.handleBringToFrontBound), this.canvas.on("selection:updated", this.handleBringToFrontBound)),
|
|
79
|
+
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, { capture: !0 }), document.addEventListener("keyup", this.handleSpaceKeyUpBound, { capture: !0 })), 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.handleContainerResizeBound, { capture: !0 }), n && document.addEventListener("keydown", this.handleCopyEventBound, { capture: !0 }), i && document.addEventListener("paste", this.handlePasteEventBound, { capture: !0 }), s && (document.addEventListener("keydown", this.handleUndoRedoEventBound, { capture: !0 }), document.addEventListener("keyup", this.handleUndoRedoKeyUpBound, { capture: !0 })), c && document.addEventListener("keydown", this.handleSelectAllEventBound, { capture: !0 }), u && document.addEventListener("keydown", this.handleDeleteObjectsEventBound, { capture: !0 }), this.canvas.on("object:modified", this.handleObjectModifiedHistoryBound), this.canvas.on("object:rotating", this.handleObjectRotatingHistoryBound), this.canvas.on("object:added", this.handleObjectAddedHistoryBound), this.canvas.on("object:removed", this.handleObjectRemovedHistoryBound), this.canvas.on("object:added", this.handleOverlayUpdateBound), this.canvas.on("selection:created", this.handleOverlayUpdateBound), this.canvas.on("selection:created", this.handleLockedSelectionBound), this.canvas.on("selection:updated", this.handleLockedSelectionBound);
|
|
80
80
|
}
|
|
81
81
|
/**
|
|
82
82
|
* При массовом выделении объектов удаляем из него залоченные.
|
|
@@ -85,8 +85,8 @@ class R {
|
|
|
85
85
|
* @param {TPointerEvent} [params.e] - событие указателя (опционально)
|
|
86
86
|
*/
|
|
87
87
|
_filterLockedSelection({ selected: e, e: t }) {
|
|
88
|
-
if (!(e != null && e.length) || !(t instanceof MouseEvent) || e.length === 1 || !e.some((
|
|
89
|
-
const r = e.filter((
|
|
88
|
+
if (!(e != null && e.length) || !(t instanceof MouseEvent) || e.length === 1 || !e.some((i) => i.locked)) return;
|
|
89
|
+
const r = e.filter((i) => !i.locked);
|
|
90
90
|
if (r.length === 0) {
|
|
91
91
|
this.canvas.discardActiveObject();
|
|
92
92
|
return;
|
|
@@ -95,10 +95,10 @@ class R {
|
|
|
95
95
|
this.canvas.setActiveObject(r[0]);
|
|
96
96
|
return;
|
|
97
97
|
}
|
|
98
|
-
const
|
|
98
|
+
const n = new R(r, {
|
|
99
99
|
canvas: this.canvas
|
|
100
100
|
});
|
|
101
|
-
this.canvas.setActiveObject(
|
|
101
|
+
this.canvas.setActiveObject(n), this.canvas.requestRenderAll();
|
|
102
102
|
}
|
|
103
103
|
/**
|
|
104
104
|
* Обработчики для сохранения состояния редактора в истории.
|
|
@@ -158,8 +158,8 @@ class R {
|
|
|
158
158
|
*/
|
|
159
159
|
handleUndoRedoEvent(e) {
|
|
160
160
|
return Q(this, null, function* () {
|
|
161
|
-
const { ctrlKey: t, metaKey: a, code: r, repeat:
|
|
162
|
-
!t && !a ||
|
|
161
|
+
const { ctrlKey: t, metaKey: a, code: r, repeat: n } = e;
|
|
162
|
+
!t && !a || n || !/Mac/i.test(navigator.userAgent) && this.isUndoRedoKeyPressed || (r === "KeyZ" ? (e.preventDefault(), this.isUndoRedoKeyPressed = !0, yield this.editor.historyManager.undo()) : r === "KeyY" && (e.preventDefault(), this.isUndoRedoKeyPressed = !0, yield this.editor.historyManager.redo()));
|
|
163
163
|
});
|
|
164
164
|
}
|
|
165
165
|
/**
|
|
@@ -197,12 +197,12 @@ class R {
|
|
|
197
197
|
*/
|
|
198
198
|
handleSpaceKeyDown(e) {
|
|
199
199
|
if (e.code !== "Space") return;
|
|
200
|
-
const { canvas: t, editor: a, isSpacePressed: r, isDragging:
|
|
201
|
-
r ||
|
|
200
|
+
const { canvas: t, editor: a, isSpacePressed: r, isDragging: n } = this;
|
|
201
|
+
r || n || (this.isSpacePressed = !0, e.preventDefault(), t.set({
|
|
202
202
|
selection: !1,
|
|
203
203
|
defaultCursor: "grab"
|
|
204
|
-
}), t.setCursor("grab"), a.canvasManager.getObjects().forEach((
|
|
205
|
-
|
|
204
|
+
}), t.setCursor("grab"), a.canvasManager.getObjects().forEach((i) => {
|
|
205
|
+
i.set({
|
|
206
206
|
selectable: !1,
|
|
207
207
|
evented: !1
|
|
208
208
|
});
|
|
@@ -297,14 +297,14 @@ class R {
|
|
|
297
297
|
static debounce(e, t) {
|
|
298
298
|
let a = null;
|
|
299
299
|
return function(...r) {
|
|
300
|
-
const
|
|
300
|
+
const n = this;
|
|
301
301
|
a && clearTimeout(a), a = setTimeout(() => {
|
|
302
|
-
e.apply(
|
|
302
|
+
e.apply(n, r);
|
|
303
303
|
}, t);
|
|
304
304
|
};
|
|
305
305
|
}
|
|
306
306
|
}
|
|
307
|
-
class
|
|
307
|
+
class Re {
|
|
308
308
|
/**
|
|
309
309
|
* @description Класс для динамической загрузки внешних модулей.
|
|
310
310
|
*/
|
|
@@ -349,10 +349,10 @@ class Pe {
|
|
|
349
349
|
} = e, {
|
|
350
350
|
requestId: a,
|
|
351
351
|
success: r,
|
|
352
|
-
data:
|
|
353
|
-
error:
|
|
352
|
+
data: n,
|
|
353
|
+
error: i
|
|
354
354
|
} = t, s = this._callbacks.get(a);
|
|
355
|
-
s && (r ? s.resolve(
|
|
355
|
+
s && (r ? s.resolve(n) : s.reject(new Error(i)), this._callbacks.delete(a));
|
|
356
356
|
}
|
|
357
357
|
/**
|
|
358
358
|
* Универсальный метод отправки команды в воркер
|
|
@@ -363,10 +363,10 @@ class Pe {
|
|
|
363
363
|
*/
|
|
364
364
|
post(e, t) {
|
|
365
365
|
var a = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : [], r = "".concat(e, ":").concat(A(8));
|
|
366
|
-
return new Promise((
|
|
366
|
+
return new Promise((n, i) => {
|
|
367
367
|
this._callbacks.set(r, {
|
|
368
|
-
resolve:
|
|
369
|
-
reject:
|
|
368
|
+
resolve: n,
|
|
369
|
+
reject: i
|
|
370
370
|
}), this.worker.postMessage({
|
|
371
371
|
action: e,
|
|
372
372
|
payload: t,
|
|
@@ -381,24 +381,24 @@ class Pe {
|
|
|
381
381
|
this.worker.terminate();
|
|
382
382
|
}
|
|
383
383
|
}
|
|
384
|
-
var I = 12,
|
|
384
|
+
var I = 12, Fe = 2, ae = 8, re = 20, We = 100, ne = 20, ie = 8, Ve = 100, se = 32, oe = 1, Ge = "#2B2D33", ce = "#3D8BF4", ue = "#FFFFFF";
|
|
385
385
|
function J(o, e, t, a, r) {
|
|
386
|
-
var
|
|
387
|
-
o.save(), o.translate(e, t), o.rotate(P.degreesToRadians(r.angle)), o.fillStyle =
|
|
388
|
-
}
|
|
389
|
-
function je(o, e, t, a, r) {
|
|
390
|
-
var i = te, n = ae, s = Fe;
|
|
391
|
-
o.save(), o.translate(e, t), o.rotate(P.degreesToRadians(r.angle)), o.fillStyle = ce, o.strokeStyle = oe, o.lineWidth = se, o.beginPath(), o.roundRect(-8 / 2, -20 / 2, i, n, s), o.fill(), o.stroke(), o.restore();
|
|
386
|
+
var n = I, i = Fe;
|
|
387
|
+
o.save(), o.translate(e, t), o.rotate(P.degreesToRadians(r.angle)), o.fillStyle = ue, o.strokeStyle = ce, o.lineWidth = oe, o.beginPath(), o.roundRect(-12 / 2, -12 / 2, n, n, i), o.fill(), o.stroke(), o.restore();
|
|
392
388
|
}
|
|
393
389
|
function ye(o, e, t, a, r) {
|
|
394
|
-
var
|
|
395
|
-
o.save(), o.translate(e, t), o.rotate(P.degreesToRadians(r.angle)), o.fillStyle =
|
|
390
|
+
var n = ae, i = re, s = We;
|
|
391
|
+
o.save(), o.translate(e, t), o.rotate(P.degreesToRadians(r.angle)), o.fillStyle = ue, o.strokeStyle = ce, o.lineWidth = oe, o.beginPath(), o.roundRect(-8 / 2, -20 / 2, n, i, s), o.fill(), o.stroke(), o.restore();
|
|
392
|
+
}
|
|
393
|
+
function pe(o, e, t, a, r) {
|
|
394
|
+
var n = ne, i = ie, s = Ve;
|
|
395
|
+
o.save(), o.translate(e, t), o.rotate(P.degreesToRadians(r.angle)), o.fillStyle = ue, o.strokeStyle = ce, o.lineWidth = oe, o.beginPath(), o.roundRect(-20 / 2, -8 / 2, n, i, s), o.fill(), o.stroke(), o.restore();
|
|
396
396
|
}
|
|
397
|
-
var Xe = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTE4Ljc1IDQuMzc1djMuNzVhLjYyNS42MjUgMCAwIDEtLjYyNS42MjVoLTMuNzVhLjYyNS42MjUgMCAwIDEgMC0xLjI1aDIuMTRsLTIuMDc3LTEuOTAzLS4wMi0uMDE5YTYuMjUgNi4yNSAwIDEgMC0uMTMgOC45NjcuNjI2LjYyNiAwIDAgMSAuODYuOTA5QTcuNDU2IDcuNDU2IDAgMCAxIDEwIDE3LjVoLS4xMDNhNy41IDcuNSAwIDEgMSA1LjM5Ni0xMi44MTJMMTcuNSA2LjcwM1Y0LjM3NWEuNjI1LjYyNSAwIDAgMSAxLjI1IDBaIi8+PC9zdmc+",
|
|
398
|
-
|
|
397
|
+
var Xe = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTE4Ljc1IDQuMzc1djMuNzVhLjYyNS42MjUgMCAwIDEtLjYyNS42MjVoLTMuNzVhLjYyNS42MjUgMCAwIDEgMC0xLjI1aDIuMTRsLTIuMDc3LTEuOTAzLS4wMi0uMDE5YTYuMjUgNi4yNSAwIDEgMC0uMTMgOC45NjcuNjI2LjYyNiAwIDAgMSAuODYuOTA5QTcuNDU2IDcuNDU2IDAgMCAxIDEwIDE3LjVoLS4xMDNhNy41IDcuNSAwIDEgMSA1LjM5Ni0xMi44MTJMMTcuNSA2LjcwM1Y0LjM3NWEuNjI1LjYyNSAwIDAgMSAxLjI1IDBaIi8+PC9zdmc+", Ce = new Image();
|
|
398
|
+
Ce.src = Xe;
|
|
399
399
|
function Qe(o, e, t, a, r) {
|
|
400
|
-
var
|
|
401
|
-
o.save(), o.translate(e, t), o.rotate(P.degreesToRadians(r.angle)), o.fillStyle = Ge, o.beginPath(), o.arc(0, 0,
|
|
400
|
+
var n = se, i = n / 2;
|
|
401
|
+
o.save(), o.translate(e, t), o.rotate(P.degreesToRadians(r.angle)), o.fillStyle = Ge, o.beginPath(), o.arc(0, 0, i, 0, 2 * Math.PI), o.fill(), o.drawImage(Ce, -16 / 2, -16 / 2, i, i), o.restore();
|
|
402
402
|
}
|
|
403
403
|
var Je = {
|
|
404
404
|
// Угловые точки
|
|
@@ -432,30 +432,30 @@ var Je = {
|
|
|
432
432
|
},
|
|
433
433
|
// Середина вертикалей
|
|
434
434
|
ml: {
|
|
435
|
-
render:
|
|
436
|
-
sizeX:
|
|
437
|
-
sizeY:
|
|
435
|
+
render: ye,
|
|
436
|
+
sizeX: ae,
|
|
437
|
+
sizeY: re,
|
|
438
438
|
offsetX: 0,
|
|
439
439
|
offsetY: 0
|
|
440
440
|
},
|
|
441
441
|
mr: {
|
|
442
|
-
render:
|
|
443
|
-
sizeX:
|
|
444
|
-
sizeY:
|
|
442
|
+
render: ye,
|
|
443
|
+
sizeX: ae,
|
|
444
|
+
sizeY: re,
|
|
445
445
|
offsetX: 0,
|
|
446
446
|
offsetY: 0
|
|
447
447
|
},
|
|
448
448
|
// Середина горизонталей
|
|
449
449
|
mt: {
|
|
450
|
-
render:
|
|
451
|
-
sizeX:
|
|
450
|
+
render: pe,
|
|
451
|
+
sizeX: ne,
|
|
452
452
|
sizeY: ie,
|
|
453
453
|
offsetX: 0,
|
|
454
454
|
offsetY: 0
|
|
455
455
|
},
|
|
456
456
|
mb: {
|
|
457
|
-
render:
|
|
458
|
-
sizeX:
|
|
457
|
+
render: pe,
|
|
458
|
+
sizeX: ne,
|
|
459
459
|
sizeY: ie,
|
|
460
460
|
offsetX: 0,
|
|
461
461
|
offsetY: 0
|
|
@@ -463,15 +463,15 @@ var Je = {
|
|
|
463
463
|
// Специальный «rotate» контрол
|
|
464
464
|
mtr: {
|
|
465
465
|
render: Qe,
|
|
466
|
-
sizeX:
|
|
467
|
-
sizeY:
|
|
466
|
+
sizeX: se,
|
|
467
|
+
sizeY: se,
|
|
468
468
|
offsetX: 0,
|
|
469
469
|
offsetY: -32
|
|
470
470
|
}
|
|
471
471
|
};
|
|
472
472
|
class Ke {
|
|
473
473
|
static apply() {
|
|
474
|
-
var e =
|
|
474
|
+
var e = Oe.createObjectDefaultControls();
|
|
475
475
|
Object.entries(Je).forEach((t) => {
|
|
476
476
|
var [a, r] = t;
|
|
477
477
|
Object.assign(e[a], {
|
|
@@ -480,17 +480,17 @@ class Ke {
|
|
|
480
480
|
sizeY: r.sizeY,
|
|
481
481
|
offsetX: r.offsetX,
|
|
482
482
|
offsetY: r.offsetY
|
|
483
|
-
}), a === "mtr" && (e[a].cursorStyle = "grab", e[a].mouseDownHandler = (
|
|
484
|
-
var u =
|
|
483
|
+
}), a === "mtr" && (e[a].cursorStyle = "grab", e[a].mouseDownHandler = (n, i, s, c) => {
|
|
484
|
+
var u = i.target;
|
|
485
485
|
u.canvas.setCursor("grabbing");
|
|
486
486
|
});
|
|
487
|
-
}),
|
|
487
|
+
}), Te.ownDefaults.controls = e;
|
|
488
488
|
}
|
|
489
489
|
}
|
|
490
|
-
var $e = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNi44NzUgMi41YS42MjUuNjI1IDAgMCAwLS42MjUuNjI0VjYuMjVIMy4xMjVhLjYyNS42MjUgMCAwIDAtLjYyNS42MjV2MTBjMCAuMzQ1LjI4LjYyNS42MjUuNjI1aDEwYy4zNDUgMCAuNjI1LS4yOC42MjUtLjYyNXYtMy4xMjZoMy4xMjVjLjM0NSAwIC42MjUtLjI4LjYyNS0uNjI1di0xMGEuNjI1LjYyNSAwIDAgMC0uNjI1LS42MjVoLTEwWm02Ljg3NSAxMGgyLjVWMy43NUg3LjV2Mi41aDUuNjI1Yy4zNDUgMCAuNjI1LjI4LjYyNS42MjV2NS42MjRabS0xMCAzLjc1VjcuNWg4Ljc1djguNzVIMy43NVoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==", qe = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMi41IDcuNWMwLS42OS41Ni0xLjI1IDEuMjUtMS4yNWgxMi41Yy42OSAwIDEuMjUuNTYgMS4yNSAxLjI1djguNzVjMCAuNjktLjU2IDEuMjUtMS4yNSAxLjI1SDMuNzVjLS42OSAwLTEuMjUtLjU2LTEuMjUtMS4yNVY3LjVabTEzLjc1IDBIMy43NXY4Ljc1aDEyLjVWNy41WiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTAgMS44NzVhMi4xODggMi4xODggMCAwIDAtMi4xODggMi4xODh2Mi44MTJhLjYyNS42MjUgMCAxIDEtMS4yNSAwVjQuMDYyYTMuNDM3IDMuNDM3IDAgMSAxIDYuODc1IDB2Mi44MTNhLjYyNS42MjUgMCAxIDEtMS4yNSAwVjQuMDYyQTIuMTg4IDIuMTg4IDAgMCAwIDEwIDEuODc2WiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTEwIDEyLjgxM2EuOTM3LjkzNyAwIDEgMCAwLTEuODc1LjkzNy45MzcgMCAwIDAgMCAxLjg3NFoiLz48L3N2Zz4=", et = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTE2LjI1IDYuMjVINy41VjQuMzc1YTIuNSAyLjUgMCAwIDEgMi41LTIuNWMxLjIgMCAyLjI4MS44NiAyLjUxMiAyYS42MjUuNjI1IDAgMCAwIDEuMjI2LS4yNWMtLjM1NC0xLjczOC0xLjkyNS0zLTMuNzM4LTNhMy43NTQgMy43NTQgMCAwIDAtMy43NSAzLjc1VjYuMjVoLTIuNUExLjI1IDEuMjUgMCAwIDAgMi41IDcuNXY4Ljc1YTEuMjUgMS4yNSAwIDAgMCAxLjI1IDEuMjVoMTIuNWExLjI1IDEuMjUgMCAwIDAgMS4yNS0xLjI1VjcuNWExLjI1IDEuMjUgMCAwIDAtMS4yNS0xLjI1Wm0wIDEwSDMuNzVWNy41aDEyLjV2OC43NVptLTUuMzEzLTQuMzc1YS45MzcuOTM3IDAgMSAxLTEuODc0IDAgLjkzNy45MzcgMCAwIDEgMS44NzQgMFoiLz48L3N2Zz4K", tt = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTIuNSA4LjEyNSAxMCAxMi41bDcuNS00LjM3NUwxMCAzLjc1IDIuNSA4LjEyNVoiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik05LjY4NSAzLjIxYS42MjUuNjI1IDAgMCAxIC42MyAwbDcuNSA0LjM3NWEuNjI1LjYyNSAwIDAgMSAwIDEuMDhsLTcuNSA0LjM3NWEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtNy41LTQuMzc1YS42MjUuNjI1IDAgMCAxIDAtMS4wOGw3LjUtNC4zNzVaTTMuNzQgOC4xMjUgMTAgMTEuNzc2bDYuMjYtMy42NTFMMTAgNC40NzQgMy43NCA4LjEyNVoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTUuNCA5LjQ2YS42MjUuNjI1IDAgMCAxIC42MyAwTDEwIDExLjc3NmwzLjk3LTIuMzE2YS42MjUuNjI1IDAgMCAxIC42MyAwbDMuMjE1IDEuODc1YS42MjUuNjI1IDAgMCAxIDAgMS4wOGwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEgMC0xLjA4TDUuNCA5LjQ2Wm0tMS42NiAyLjQxNUwxMCAxNS41MjZsNi4yNi0zLjY1MS0xLjk3NC0xLjE1MS0zLjk3MSAyLjMxNmEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtMy45Ny0yLjMxNi0xLjk3NSAxLjE1MVoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==", at = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNOS42ODUgMy4yMWEuNjI1LjYyNSAwIDAgMSAuNjMgMGw3LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEgMCAxLjA4bC03LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEtLjYzIDBsLTcuNS00LjM3NWEuNjI1LjYyNSAwIDAgMSAwLTEuMDhsNy41LTQuMzc1Wk0zLjc0IDguMTI1IDEwIDExLjc3Nmw2LjI2LTMuNjUxTDEwIDQuNDc0IDMuNzQgOC4xMjVaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01LjcxNCAxMCAxMCAxMi41bDQuMjg2LTIuNSAzLjIxNCAxLjg3NUwxMCAxNi4yNWwtNy41LTQuMzc1TDUuNzE0IDEwWiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNS40IDkuNDZhLjYyNS42MjUgMCAwIDEgLjYzIDBMMTAgMTEuNzc2bDMuOTctMi4zMTZhLjYyNS42MjUgMCAwIDEgLjYzIDBsMy4yMTUgMS44NzVhLjYyNS42MjUgMCAwIDEgMCAxLjA4bC03LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEtLjYzIDBsLTcuNS00LjM3NWEuNjI1LjYyNSAwIDAgMSAwLTEuMDhMNS40IDkuNDZabS0xLjY2IDIuNDE1TDEwIDE1LjUyNmw2LjI2LTMuNjUxLTEuOTc0LTEuMTUxLTMuOTcxIDIuMzE2YS42MjUuNjI1IDAgMCAxLS42MyAwbC0zLjk3LTIuMzE2LTEuOTc1IDEuMTUxWiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+", rt = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTIuNSA2LjI1IDcuNSA0LjM3NSA3LjUtNC4zNzVMMTAgMS44NzUgMi41IDYuMjVaIi8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNOS42ODUgMS4zMzVhLjYyNS42MjUgMCAwIDEgLjYzIDBsNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxIDAgMS4wOGwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEgMC0xLjA4bDcuNS00LjM3NVpNMy43NCA2LjI1IDEwIDkuOTAxbDYuMjYtMy42NTFMMTAgMi41OTkgMy43NCA2LjI1WiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNS40IDExLjMzNWEuNjI1LjYyNSAwIDAgMSAuNjMgMEwxMCAxMy42NTFsMy45Ny0yLjMxNmEuNjI1LjYyNSAwIDAgMSAuNjMgMGwzLjIxNSAxLjg3NWEuNjI1LjYyNSAwIDAgMSAwIDEuMDhsLTcuNSA0LjM3NWEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtNy41LTQuMzc1YS42MjUuNjI1IDAgMCAxIDAtMS4wOEw1LjQgMTEuMzM1Wk0zLjc0IDEzLjc1IDEwIDE3LjQwMWw2LjI2LTMuNjUxLTEuOTc0LTEuMTUxLTMuOTcxIDIuMzE2YS42MjUuNjI1IDAgMCAxLS42MyAwbC0zLjk3LTIuMzE2TDMuNzQgMTMuNzVaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01LjQgNy41ODVhLjYyNS42MjUgMCAwIDEgLjYzIDBMMTAgOS45MDFsMy45Ny0yLjMxNmEuNjI1LjYyNSAwIDAgMSAuNjMgMGwzLjIxNSAxLjg3NWEuNjI1LjYyNSAwIDAgMSAwIDEuMDhsLTcuNSA0LjM3NWEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtNy41LTQuMzc1YS42MjUuNjI1IDAgMCAxIDAtMS4wOEw1LjQgNy41ODVaTTMuNzQgMTAgMTAgMTMuNjUxIDE2LjI2IDEwbC0xLjk3NC0xLjE1MS0zLjk3MSAyLjMxNmEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtMy45Ny0yLjMxNkwzLjc0IDEwWiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+",
|
|
491
|
-
function
|
|
490
|
+
var $e = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNi44NzUgMi41YS42MjUuNjI1IDAgMCAwLS42MjUuNjI0VjYuMjVIMy4xMjVhLjYyNS42MjUgMCAwIDAtLjYyNS42MjV2MTBjMCAuMzQ1LjI4LjYyNS42MjUuNjI1aDEwYy4zNDUgMCAuNjI1LS4yOC42MjUtLjYyNXYtMy4xMjZoMy4xMjVjLjM0NSAwIC42MjUtLjI4LjYyNS0uNjI1di0xMGEuNjI1LjYyNSAwIDAgMC0uNjI1LS42MjVoLTEwWm02Ljg3NSAxMGgyLjVWMy43NUg3LjV2Mi41aDUuNjI1Yy4zNDUgMCAuNjI1LjI4LjYyNS42MjV2NS42MjRabS0xMCAzLjc1VjcuNWg4Ljc1djguNzVIMy43NVoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==", qe = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMi41IDcuNWMwLS42OS41Ni0xLjI1IDEuMjUtMS4yNWgxMi41Yy42OSAwIDEuMjUuNTYgMS4yNSAxLjI1djguNzVjMCAuNjktLjU2IDEuMjUtMS4yNSAxLjI1SDMuNzVjLS42OSAwLTEuMjUtLjU2LTEuMjUtMS4yNVY3LjVabTEzLjc1IDBIMy43NXY4Ljc1aDEyLjVWNy41WiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTAgMS44NzVhMi4xODggMi4xODggMCAwIDAtMi4xODggMi4xODh2Mi44MTJhLjYyNS42MjUgMCAxIDEtMS4yNSAwVjQuMDYyYTMuNDM3IDMuNDM3IDAgMSAxIDYuODc1IDB2Mi44MTNhLjYyNS42MjUgMCAxIDEtMS4yNSAwVjQuMDYyQTIuMTg4IDIuMTg4IDAgMCAwIDEwIDEuODc2WiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTEwIDEyLjgxM2EuOTM3LjkzNyAwIDEgMCAwLTEuODc1LjkzNy45MzcgMCAwIDAgMCAxLjg3NFoiLz48L3N2Zz4=", et = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTE2LjI1IDYuMjVINy41VjQuMzc1YTIuNSAyLjUgMCAwIDEgMi41LTIuNWMxLjIgMCAyLjI4MS44NiAyLjUxMiAyYS42MjUuNjI1IDAgMCAwIDEuMjI2LS4yNWMtLjM1NC0xLjczOC0xLjkyNS0zLTMuNzM4LTNhMy43NTQgMy43NTQgMCAwIDAtMy43NSAzLjc1VjYuMjVoLTIuNUExLjI1IDEuMjUgMCAwIDAgMi41IDcuNXY4Ljc1YTEuMjUgMS4yNSAwIDAgMCAxLjI1IDEuMjVoMTIuNWExLjI1IDEuMjUgMCAwIDAgMS4yNS0xLjI1VjcuNWExLjI1IDEuMjUgMCAwIDAtMS4yNS0xLjI1Wm0wIDEwSDMuNzVWNy41aDEyLjV2OC43NVptLTUuMzEzLTQuMzc1YS45MzcuOTM3IDAgMSAxLTEuODc0IDAgLjkzNy45MzcgMCAwIDEgMS44NzQgMFoiLz48L3N2Zz4K", tt = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTIuNSA4LjEyNSAxMCAxMi41bDcuNS00LjM3NUwxMCAzLjc1IDIuNSA4LjEyNVoiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik05LjY4NSAzLjIxYS42MjUuNjI1IDAgMCAxIC42MyAwbDcuNSA0LjM3NWEuNjI1LjYyNSAwIDAgMSAwIDEuMDhsLTcuNSA0LjM3NWEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtNy41LTQuMzc1YS42MjUuNjI1IDAgMCAxIDAtMS4wOGw3LjUtNC4zNzVaTTMuNzQgOC4xMjUgMTAgMTEuNzc2bDYuMjYtMy42NTFMMTAgNC40NzQgMy43NCA4LjEyNVoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTUuNCA5LjQ2YS42MjUuNjI1IDAgMCAxIC42MyAwTDEwIDExLjc3NmwzLjk3LTIuMzE2YS42MjUuNjI1IDAgMCAxIC42MyAwbDMuMjE1IDEuODc1YS42MjUuNjI1IDAgMCAxIDAgMS4wOGwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEgMC0xLjA4TDUuNCA5LjQ2Wm0tMS42NiAyLjQxNUwxMCAxNS41MjZsNi4yNi0zLjY1MS0xLjk3NC0xLjE1MS0zLjk3MSAyLjMxNmEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtMy45Ny0yLjMxNi0xLjk3NSAxLjE1MVoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==", at = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNOS42ODUgMy4yMWEuNjI1LjYyNSAwIDAgMSAuNjMgMGw3LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEgMCAxLjA4bC03LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEtLjYzIDBsLTcuNS00LjM3NWEuNjI1LjYyNSAwIDAgMSAwLTEuMDhsNy41LTQuMzc1Wk0zLjc0IDguMTI1IDEwIDExLjc3Nmw2LjI2LTMuNjUxTDEwIDQuNDc0IDMuNzQgOC4xMjVaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01LjcxNCAxMCAxMCAxMi41bDQuMjg2LTIuNSAzLjIxNCAxLjg3NUwxMCAxNi4yNWwtNy41LTQuMzc1TDUuNzE0IDEwWiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNS40IDkuNDZhLjYyNS42MjUgMCAwIDEgLjYzIDBMMTAgMTEuNzc2bDMuOTctMi4zMTZhLjYyNS42MjUgMCAwIDEgLjYzIDBsMy4yMTUgMS44NzVhLjYyNS42MjUgMCAwIDEgMCAxLjA4bC03LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEtLjYzIDBsLTcuNS00LjM3NWEuNjI1LjYyNSAwIDAgMSAwLTEuMDhMNS40IDkuNDZabS0xLjY2IDIuNDE1TDEwIDE1LjUyNmw2LjI2LTMuNjUxLTEuOTc0LTEuMTUxLTMuOTcxIDIuMzE2YS42MjUuNjI1IDAgMCAxLS42MyAwbC0zLjk3LTIuMzE2LTEuOTc1IDEuMTUxWiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+", rt = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTIuNSA2LjI1IDcuNSA0LjM3NSA3LjUtNC4zNzVMMTAgMS44NzUgMi41IDYuMjVaIi8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNOS42ODUgMS4zMzVhLjYyNS42MjUgMCAwIDEgLjYzIDBsNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxIDAgMS4wOGwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEgMC0xLjA4bDcuNS00LjM3NVpNMy43NCA2LjI1IDEwIDkuOTAxbDYuMjYtMy42NTFMMTAgMi41OTkgMy43NCA2LjI1WiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNS40IDExLjMzNWEuNjI1LjYyNSAwIDAgMSAuNjMgMEwxMCAxMy42NTFsMy45Ny0yLjMxNmEuNjI1LjYyNSAwIDAgMSAuNjMgMGwzLjIxNSAxLjg3NWEuNjI1LjYyNSAwIDAgMSAwIDEuMDhsLTcuNSA0LjM3NWEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtNy41LTQuMzc1YS42MjUuNjI1IDAgMCAxIDAtMS4wOEw1LjQgMTEuMzM1Wk0zLjc0IDEzLjc1IDEwIDE3LjQwMWw2LjI2LTMuNjUxLTEuOTc0LTEuMTUxLTMuOTcxIDIuMzE2YS42MjUuNjI1IDAgMCAxLS42MyAwbC0zLjk3LTIuMzE2TDMuNzQgMTMuNzVaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01LjQgNy41ODVhLjYyNS42MjUgMCAwIDEgLjYzIDBMMTAgOS45MDFsMy45Ny0yLjMxNmEuNjI1LjYyNSAwIDAgMSAuNjMgMGwzLjIxNSAxLjg3NWEuNjI1LjYyNSAwIDAgMSAwIDEuMDhsLTcuNSA0LjM3NWEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtNy41LTQuMzc1YS42MjUuNjI1IDAgMCAxIDAtMS4wOEw1LjQgNy41ODVaTTMuNzQgMTAgMTAgMTMuNjUxIDE2LjI2IDEwbC0xLjk3NC0xLjE1MS0zLjk3MSAyLjMxNmEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtMy45Ny0yLjMxNkwzLjc0IDEwWiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+", nt = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMS45NiAxMy40MzVhLjYyNS42MjUgMCAwIDEgLjg1NS0uMjI1TDEwIDE3LjQwMWw3LjE4NS00LjE5YS42MjUuNjI1IDAgMCAxIC42MyAxLjA3OWwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEtLjIyNS0uODU1Wk05LjY4NSAxLjMzNWEuNjI1LjYyNSAwIDAgMSAuNjMgMGw3LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEgMCAxLjA4bC03LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEtLjYzIDBsLTcuNS00LjM3NWEuNjI1LjYyNSAwIDAgMSAwLTEuMDhsNy41LTQuMzc1Wk0zLjc0IDYuMjUgMTAgOS45MDFsNi4yNi0zLjY1MUwxMCAyLjU5OSAzLjc0IDYuMjVaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Im01LjcxNCAxMS44NzUgNC4yODYgMi41IDQuMjg2LTIuNUwxNy41IDEzLjc1IDEwIDE4LjEyNSAyLjUgMTMuNzVsMy4yMTQtMS44NzVaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01LjQgMTEuMzM1YS42MjUuNjI1IDAgMCAxIC42MyAwTDEwIDEzLjY1MWwzLjk3LTIuMzE2YS42MjUuNjI1IDAgMCAxIC42MyAwbDMuMjE1IDEuODc1YS42MjUuNjI1IDAgMCAxIDAgMS4wOGwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEgMC0xLjA4TDUuNCAxMS4zMzVaTTMuNzQgMTMuNzUgMTAgMTcuNDAxbDYuMjYtMy42NTEtMS45NzQtMS4xNTEtMy45NzEgMi4zMTZhLjYyNS42MjUgMCAwIDEtLjYzIDBsLTMuOTctMi4zMTZMMy43NCAxMy43NVoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTUuNCA3LjU4NWEuNjI1LjYyNSAwIDAgMSAuNjMgMEwxMCA5LjkwMWwzLjk3LTIuMzE2YS42MjUuNjI1IDAgMCAxIC42MyAwbDMuMjE1IDEuODc1YS42MjUuNjI1IDAgMCAxIDAgMS4wOGwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEgMC0xLjA4TDUuNCA3LjU4NVpNMy43NCAxMCAxMCAxMy42NTEgMTYuMjYgMTBsLTEuOTc0LTEuMTUxLTMuOTcxIDIuMzE2YS42MjUuNjI1IDAgMCAxLS42MyAwbC0zLjk3LTIuMzE2TDMuNzQgMTBaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=", it = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI0VDNEU0MCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNOC4xMjUgMS4yNUExLjg3NSAxLjg3NSAwIDAgMCA2LjI1IDMuMTI1di42MjVIMy4xMjVhLjYyNS42MjUgMCAwIDAgMCAxLjI1aC42MjV2MTEuMjVBMS4yNSAxLjI1IDAgMCAwIDUgMTcuNWgxMGExLjI1IDEuMjUgMCAwIDAgMS4yNS0xLjI1VjVoLjYyNWEuNjI1LjYyNSAwIDAgMCAwLTEuMjVIMTMuNzV2LS42MjVhMS44NzUgMS44NzUgMCAwIDAtMS44NzUtMS44NzVoLTMuNzVabTQuMzc1IDIuNXYtLjYyNWEuNjI1LjYyNSAwIDAgMC0uNjI1LS42MjVoLTMuNzVhLjYyNS42MjUgMCAwIDAtLjYyNS42MjV2LjYyNWg1Wk01IDE2LjI1VjVoMTB2MTEuMjVINVpNOC4xMjUgNy41Yy4zNDUgMCAuNjI1LjI4LjYyNS42MjV2NWEuNjI1LjYyNSAwIDEgMS0xLjI1IDB2LTVjMC0uMzQ1LjI4LS42MjUuNjI1LS42MjVabTQuMzc1IDUuNjI1di01YS42MjUuNjI1IDAgMCAwLTEuMjUgMHY1YS42MjUuNjI1IDAgMSAwIDEuMjUgMFoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==";
|
|
491
|
+
function be(o, e, t, a, r, n, i) {
|
|
492
492
|
try {
|
|
493
|
-
var s = o[
|
|
493
|
+
var s = o[n](i), c = s.value;
|
|
494
494
|
} catch (u) {
|
|
495
495
|
return void t(u);
|
|
496
496
|
}
|
|
@@ -500,14 +500,14 @@ function st(o) {
|
|
|
500
500
|
return function() {
|
|
501
501
|
var e = this, t = arguments;
|
|
502
502
|
return new Promise(function(a, r) {
|
|
503
|
-
var
|
|
504
|
-
function
|
|
505
|
-
|
|
503
|
+
var n = o.apply(e, t);
|
|
504
|
+
function i(c) {
|
|
505
|
+
be(n, a, r, i, s, "next", c);
|
|
506
506
|
}
|
|
507
507
|
function s(c) {
|
|
508
|
-
|
|
508
|
+
be(n, a, r, i, s, "throw", c);
|
|
509
509
|
}
|
|
510
|
-
|
|
510
|
+
i(void 0);
|
|
511
511
|
});
|
|
512
512
|
};
|
|
513
513
|
}
|
|
@@ -571,11 +571,11 @@ const _ = {
|
|
|
571
571
|
offsetTop: 50,
|
|
572
572
|
icons: {
|
|
573
573
|
copyPaste: $e,
|
|
574
|
-
delete:
|
|
574
|
+
delete: it,
|
|
575
575
|
lock: qe,
|
|
576
576
|
unlock: et,
|
|
577
577
|
bringToFront: rt,
|
|
578
|
-
sendToBack:
|
|
578
|
+
sendToBack: nt,
|
|
579
579
|
bringForward: tt,
|
|
580
580
|
sendBackwards: at
|
|
581
581
|
},
|
|
@@ -612,7 +612,7 @@ const _ = {
|
|
|
612
612
|
}
|
|
613
613
|
}
|
|
614
614
|
};
|
|
615
|
-
function
|
|
615
|
+
function Ie(o, e) {
|
|
616
616
|
var t = Object.keys(o);
|
|
617
617
|
if (Object.getOwnPropertySymbols) {
|
|
618
618
|
var a = Object.getOwnPropertySymbols(o);
|
|
@@ -625,9 +625,9 @@ function be(o, e) {
|
|
|
625
625
|
function j(o) {
|
|
626
626
|
for (var e = 1; e < arguments.length; e++) {
|
|
627
627
|
var t = arguments[e] != null ? arguments[e] : {};
|
|
628
|
-
e % 2 ?
|
|
628
|
+
e % 2 ? Ie(Object(t), !0).forEach(function(a) {
|
|
629
629
|
ot(o, a, t[a]);
|
|
630
|
-
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(o, Object.getOwnPropertyDescriptors(t)) :
|
|
630
|
+
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(o, Object.getOwnPropertyDescriptors(t)) : Ie(Object(t)).forEach(function(a) {
|
|
631
631
|
Object.defineProperty(o, a, Object.getOwnPropertyDescriptor(t, a));
|
|
632
632
|
});
|
|
633
633
|
}
|
|
@@ -700,17 +700,17 @@ class dt {
|
|
|
700
700
|
this.el.innerHTML = "";
|
|
701
701
|
var a = function() {
|
|
702
702
|
var {
|
|
703
|
-
name:
|
|
703
|
+
name: i,
|
|
704
704
|
handle: s
|
|
705
705
|
} = r, {
|
|
706
706
|
icons: c,
|
|
707
707
|
btnStyle: u,
|
|
708
|
-
handlers:
|
|
709
|
-
} = t.config,
|
|
710
|
-
|
|
708
|
+
handlers: l
|
|
709
|
+
} = t.config, d = document.createElement("button");
|
|
710
|
+
d.innerHTML = c[s] ? '<img src="'.concat(c[s], '" title="').concat(i, '" />') : i, Object.assign(d.style, u), d.onclick = () => {
|
|
711
711
|
var h;
|
|
712
|
-
return (h =
|
|
713
|
-
}, t.el.appendChild(
|
|
712
|
+
return (h = l[s]) === null || h === void 0 ? void 0 : h.call(l, t.editor);
|
|
713
|
+
}, t.el.appendChild(d);
|
|
714
714
|
};
|
|
715
715
|
for (var r of e)
|
|
716
716
|
a();
|
|
@@ -782,12 +782,12 @@ class dt {
|
|
|
782
782
|
canvas: r
|
|
783
783
|
} = this;
|
|
784
784
|
e.setCoords();
|
|
785
|
-
var
|
|
785
|
+
var n = r.getZoom(), [, , , , i, s] = r.viewportTransform, {
|
|
786
786
|
x: c
|
|
787
787
|
} = e.getCenterPoint(), {
|
|
788
788
|
top: u,
|
|
789
|
-
height:
|
|
790
|
-
} = e.getBoundingRect(!1, !0),
|
|
789
|
+
height: l
|
|
790
|
+
} = e.getBoundingRect(!1, !0), d = c * n + i, h = d - t.offsetWidth / 2, g = (u + l) * n + s + a.offsetTop;
|
|
791
791
|
Object.assign(t.style, {
|
|
792
792
|
left: "".concat(h, "px"),
|
|
793
793
|
top: "".concat(g, "px"),
|
|
@@ -802,26 +802,26 @@ class dt {
|
|
|
802
802
|
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();
|
|
803
803
|
}
|
|
804
804
|
}
|
|
805
|
-
function
|
|
805
|
+
function Ae(o, e, t, a, r, n, i) {
|
|
806
806
|
try {
|
|
807
|
-
var s = o[
|
|
807
|
+
var s = o[n](i), c = s.value;
|
|
808
808
|
} catch (u) {
|
|
809
809
|
return void t(u);
|
|
810
810
|
}
|
|
811
811
|
s.done ? e(c) : Promise.resolve(c).then(a, r);
|
|
812
812
|
}
|
|
813
|
-
function
|
|
813
|
+
function te(o) {
|
|
814
814
|
return function() {
|
|
815
815
|
var e = this, t = arguments;
|
|
816
816
|
return new Promise(function(a, r) {
|
|
817
|
-
var
|
|
818
|
-
function
|
|
819
|
-
|
|
817
|
+
var n = o.apply(e, t);
|
|
818
|
+
function i(c) {
|
|
819
|
+
Ae(n, a, r, i, s, "next", c);
|
|
820
820
|
}
|
|
821
821
|
function s(c) {
|
|
822
|
-
|
|
822
|
+
Ae(n, a, r, i, s, "throw", c);
|
|
823
823
|
}
|
|
824
|
-
|
|
824
|
+
i(void 0);
|
|
825
825
|
});
|
|
826
826
|
};
|
|
827
827
|
}
|
|
@@ -887,8 +887,8 @@ class lt {
|
|
|
887
887
|
baseState: e,
|
|
888
888
|
currentIndex: t,
|
|
889
889
|
patches: a
|
|
890
|
-
} = this, r = JSON.parse(JSON.stringify(e)),
|
|
891
|
-
r = this.diffPatcher.patch(r, a[
|
|
890
|
+
} = this, r = JSON.parse(JSON.stringify(e)), n = 0; n < t; n += 1)
|
|
891
|
+
r = this.diffPatcher.patch(r, a[n].diff);
|
|
892
892
|
return console.log("getFullState state", r), r;
|
|
893
893
|
}
|
|
894
894
|
/**
|
|
@@ -920,22 +920,22 @@ class lt {
|
|
|
920
920
|
*/
|
|
921
921
|
loadStateFromFullState(e) {
|
|
922
922
|
var t = this;
|
|
923
|
-
return
|
|
923
|
+
return te(function* () {
|
|
924
924
|
if (e) {
|
|
925
925
|
console.log("loadStateFromFullState fullState", e);
|
|
926
926
|
var {
|
|
927
927
|
canvas: a,
|
|
928
928
|
canvasManager: r,
|
|
929
|
-
interactionBlocker:
|
|
929
|
+
interactionBlocker: n
|
|
930
930
|
} = t.editor, {
|
|
931
|
-
width:
|
|
931
|
+
width: i,
|
|
932
932
|
height: s
|
|
933
933
|
} = a;
|
|
934
934
|
yield a.loadFromJSON(e);
|
|
935
|
-
var c = a.getObjects().find((
|
|
936
|
-
c && (t.editor.montageArea = c, (
|
|
937
|
-
var u = a.getObjects().find((
|
|
938
|
-
u && (
|
|
935
|
+
var c = a.getObjects().find((l) => l.id === "montage-area");
|
|
936
|
+
c && (t.editor.montageArea = c, (i !== e.width || s !== e.height) && r.updateCanvasAndFitObjects());
|
|
937
|
+
var u = a.getObjects().find((l) => l.id === "overlay-mask");
|
|
938
|
+
u && (n.overlayMask = u, n.overlayMask.visible = !1), a.renderAll(), a.fire("editor:history-state-loaded", {
|
|
939
939
|
fullState: e,
|
|
940
940
|
currentIndex: t.currentIndex,
|
|
941
941
|
totalChangesCount: t.totalChangesCount,
|
|
@@ -952,7 +952,7 @@ class lt {
|
|
|
952
952
|
*/
|
|
953
953
|
undo() {
|
|
954
954
|
var e = this;
|
|
955
|
-
return
|
|
955
|
+
return te(function* () {
|
|
956
956
|
if (!e.skipHistory) {
|
|
957
957
|
if (e.currentIndex <= 0) {
|
|
958
958
|
console.log("Нет предыдущих состояний для отмены.");
|
|
@@ -962,7 +962,14 @@ class lt {
|
|
|
962
962
|
try {
|
|
963
963
|
e.currentIndex -= 1, e.totalChangesCount -= 1;
|
|
964
964
|
var t = e.getFullState();
|
|
965
|
-
yield e.loadStateFromFullState(t), console.log("Undo выполнен. Текущий индекс истории:", e.currentIndex), e.canvas.fire("editor:undo"
|
|
965
|
+
yield e.loadStateFromFullState(t), console.log("Undo выполнен. Текущий индекс истории:", e.currentIndex), e.canvas.fire("editor:undo", {
|
|
966
|
+
fullState: t,
|
|
967
|
+
currentIndex: e.currentIndex,
|
|
968
|
+
totalChangesCount: e.totalChangesCount,
|
|
969
|
+
baseStateChangesCount: e.baseStateChangesCount,
|
|
970
|
+
patchesCount: e.patches.length,
|
|
971
|
+
patches: e.patches
|
|
972
|
+
});
|
|
966
973
|
} catch (a) {
|
|
967
974
|
console.error("undo. Ошибка отмены действия: ", a), e.canvas.fire("editor:error", {
|
|
968
975
|
message: "Ошибка отмены действия: ".concat(a.message)
|
|
@@ -979,7 +986,7 @@ class lt {
|
|
|
979
986
|
*/
|
|
980
987
|
redo() {
|
|
981
988
|
var e = this;
|
|
982
|
-
return
|
|
989
|
+
return te(function* () {
|
|
983
990
|
if (!e.skipHistory) {
|
|
984
991
|
if (e.currentIndex >= e.patches.length) {
|
|
985
992
|
console.log("Нет состояний для повтора.");
|
|
@@ -989,7 +996,14 @@ class lt {
|
|
|
989
996
|
try {
|
|
990
997
|
e.currentIndex += 1, e.totalChangesCount += 1;
|
|
991
998
|
var t = e.getFullState();
|
|
992
|
-
console.log("fullState", t), yield e.loadStateFromFullState(t), console.log("Redo выполнен. Текущий индекс истории:", e.currentIndex), e.canvas.fire("editor:redo"
|
|
999
|
+
console.log("fullState", t), yield e.loadStateFromFullState(t), console.log("Redo выполнен. Текущий индекс истории:", e.currentIndex), e.canvas.fire("editor:redo", {
|
|
1000
|
+
fullState: t,
|
|
1001
|
+
currentIndex: e.currentIndex,
|
|
1002
|
+
totalChangesCount: e.totalChangesCount,
|
|
1003
|
+
baseStateChangesCount: e.baseStateChangesCount,
|
|
1004
|
+
patchesCount: e.patches.length,
|
|
1005
|
+
patches: e.patches
|
|
1006
|
+
});
|
|
993
1007
|
} catch (a) {
|
|
994
1008
|
console.error("redo. Ошибка повтора действия: ", a), e.canvas.fire("editor:error", {
|
|
995
1009
|
message: "Ошибка повтора действия: ".concat(a.message)
|
|
@@ -1002,9 +1016,9 @@ class lt {
|
|
|
1002
1016
|
}
|
|
1003
1017
|
}
|
|
1004
1018
|
const ht = 0.1, gt = 2, vt = 0.1, mt = 90, k = 16, x = 16, E = 4096, O = 4096;
|
|
1005
|
-
function
|
|
1019
|
+
function Se(o, e, t, a, r, n, i) {
|
|
1006
1020
|
try {
|
|
1007
|
-
var s = o[
|
|
1021
|
+
var s = o[n](i), c = s.value;
|
|
1008
1022
|
} catch (u) {
|
|
1009
1023
|
return void t(u);
|
|
1010
1024
|
}
|
|
@@ -1014,14 +1028,14 @@ function T(o) {
|
|
|
1014
1028
|
return function() {
|
|
1015
1029
|
var e = this, t = arguments;
|
|
1016
1030
|
return new Promise(function(a, r) {
|
|
1017
|
-
var
|
|
1018
|
-
function
|
|
1019
|
-
|
|
1031
|
+
var n = o.apply(e, t);
|
|
1032
|
+
function i(c) {
|
|
1033
|
+
Se(n, a, r, i, s, "next", c);
|
|
1020
1034
|
}
|
|
1021
1035
|
function s(c) {
|
|
1022
|
-
|
|
1036
|
+
Se(n, a, r, i, s, "throw", c);
|
|
1023
1037
|
}
|
|
1024
|
-
|
|
1038
|
+
i(void 0);
|
|
1025
1039
|
});
|
|
1026
1040
|
};
|
|
1027
1041
|
}
|
|
@@ -1054,22 +1068,22 @@ class D {
|
|
|
1054
1068
|
var {
|
|
1055
1069
|
source: a,
|
|
1056
1070
|
scale: r = "image-".concat(t.options.scaleType),
|
|
1057
|
-
withoutSave:
|
|
1071
|
+
withoutSave: n = !1
|
|
1058
1072
|
} = e;
|
|
1059
1073
|
if (!a) return null;
|
|
1060
1074
|
var {
|
|
1061
|
-
canvas:
|
|
1075
|
+
canvas: i,
|
|
1062
1076
|
montageArea: s,
|
|
1063
1077
|
transformManager: c,
|
|
1064
1078
|
historyManager: u,
|
|
1065
|
-
errorManager:
|
|
1066
|
-
} = t.editor,
|
|
1079
|
+
errorManager: l
|
|
1080
|
+
} = t.editor, d = yield t.getContentType(a), h = D.getFormatFromContentType(d), {
|
|
1067
1081
|
acceptContentTypes: g,
|
|
1068
1082
|
acceptFormats: M
|
|
1069
1083
|
} = t;
|
|
1070
|
-
if (!t.isAllowedContentType(
|
|
1071
|
-
var m = "Неверный contentType для изображения: ".concat(
|
|
1072
|
-
return
|
|
1084
|
+
if (!t.isAllowedContentType(d)) {
|
|
1085
|
+
var m = "Неверный contentType для изображения: ".concat(d, ". Ожидается один из: ").concat(t.acceptContentTypes.join(", "), ".");
|
|
1086
|
+
return l.emitError({
|
|
1073
1087
|
origin: "ImageManager",
|
|
1074
1088
|
method: "importImage",
|
|
1075
1089
|
code: "INVALID_CONTENT_TYPE",
|
|
@@ -1077,7 +1091,7 @@ class D {
|
|
|
1077
1091
|
data: {
|
|
1078
1092
|
source: a,
|
|
1079
1093
|
format: h,
|
|
1080
|
-
contentType:
|
|
1094
|
+
contentType: d,
|
|
1081
1095
|
acceptContentTypes: g,
|
|
1082
1096
|
acceptFormats: M
|
|
1083
1097
|
}
|
|
@@ -1092,12 +1106,12 @@ class D {
|
|
|
1092
1106
|
var S = yield fetch(a, {
|
|
1093
1107
|
mode: "cors"
|
|
1094
1108
|
}), N = yield S.blob({
|
|
1095
|
-
type:
|
|
1109
|
+
type: d,
|
|
1096
1110
|
quality: 1
|
|
1097
1111
|
});
|
|
1098
1112
|
f = URL.createObjectURL(N);
|
|
1099
1113
|
} else
|
|
1100
|
-
return
|
|
1114
|
+
return l.emitError({
|
|
1101
1115
|
origin: "ImageManager",
|
|
1102
1116
|
method: "importImage",
|
|
1103
1117
|
code: "INVALID_SOURCE_TYPE",
|
|
@@ -1105,30 +1119,30 @@ class D {
|
|
|
1105
1119
|
data: {
|
|
1106
1120
|
source: a,
|
|
1107
1121
|
format: h,
|
|
1108
|
-
contentType:
|
|
1122
|
+
contentType: d,
|
|
1109
1123
|
acceptContentTypes: g,
|
|
1110
1124
|
acceptFormats: M
|
|
1111
1125
|
}
|
|
1112
1126
|
}), null;
|
|
1113
1127
|
if (t._createdBlobUrls.push(f), h === "svg") {
|
|
1114
|
-
var
|
|
1115
|
-
v = P.groupSVGElements(
|
|
1128
|
+
var L = yield ke(f);
|
|
1129
|
+
v = P.groupSVGElements(L.objects, L.options);
|
|
1116
1130
|
} else
|
|
1117
|
-
v = yield
|
|
1131
|
+
v = yield ee.fromURL(f, {
|
|
1118
1132
|
crossOrigin: "anonymous"
|
|
1119
1133
|
});
|
|
1120
1134
|
var {
|
|
1121
|
-
width:
|
|
1135
|
+
width: w,
|
|
1122
1136
|
height: y
|
|
1123
1137
|
} = v;
|
|
1124
|
-
if (y > O ||
|
|
1138
|
+
if (y > O || w > E) {
|
|
1125
1139
|
var p = yield t.resizeImageToBoundaries(v._element.src, "max"), B = URL.createObjectURL(p);
|
|
1126
|
-
t._createdBlobUrls.push(B), v = yield
|
|
1140
|
+
t._createdBlobUrls.push(B), v = yield ee.fromURL(B, {
|
|
1127
1141
|
crossOrigin: "anonymous"
|
|
1128
1142
|
});
|
|
1129
|
-
} else if (y < x ||
|
|
1130
|
-
var
|
|
1131
|
-
t._createdBlobUrls.push(Z), v = yield
|
|
1143
|
+
} else if (y < x || w < k) {
|
|
1144
|
+
var F = yield t.resizeImageToBoundaries(v._element.src, "min"), Z = URL.createObjectURL(F);
|
|
1145
|
+
t._createdBlobUrls.push(Z), v = yield ee.fromURL(Z, {
|
|
1132
1146
|
crossOrigin: "anonymous"
|
|
1133
1147
|
});
|
|
1134
1148
|
}
|
|
@@ -1139,7 +1153,7 @@ class D {
|
|
|
1139
1153
|
});
|
|
1140
1154
|
else {
|
|
1141
1155
|
var {
|
|
1142
|
-
width:
|
|
1156
|
+
width: W,
|
|
1143
1157
|
height: z
|
|
1144
1158
|
} = s, U = t.calculateScaleFactor({
|
|
1145
1159
|
imageObject: v,
|
|
@@ -1149,24 +1163,24 @@ class D {
|
|
|
1149
1163
|
object: v,
|
|
1150
1164
|
type: "contain",
|
|
1151
1165
|
withoutSave: !0
|
|
1152
|
-
}) : r === "image-cover" && (
|
|
1166
|
+
}) : r === "image-cover" && (w > W || y > z) && c.fitObject({
|
|
1153
1167
|
object: v,
|
|
1154
1168
|
type: "cover",
|
|
1155
1169
|
withoutSave: !0
|
|
1156
1170
|
});
|
|
1157
1171
|
}
|
|
1158
|
-
|
|
1172
|
+
i.add(v), i.centerObject(v), i.setActiveObject(v), i.renderAll(), u.resumeHistory(), n || u.saveState();
|
|
1159
1173
|
var V = {
|
|
1160
1174
|
image: v,
|
|
1161
1175
|
format: h,
|
|
1162
|
-
contentType:
|
|
1176
|
+
contentType: d,
|
|
1163
1177
|
scale: r,
|
|
1164
|
-
withoutSave:
|
|
1178
|
+
withoutSave: n,
|
|
1165
1179
|
source: a
|
|
1166
1180
|
};
|
|
1167
|
-
return
|
|
1181
|
+
return i.fire("editor:image-imported", V), V;
|
|
1168
1182
|
} catch (Y) {
|
|
1169
|
-
return
|
|
1183
|
+
return l.emitError({
|
|
1170
1184
|
origin: "ImageManager",
|
|
1171
1185
|
method: "importImage",
|
|
1172
1186
|
code: "IMPORT_FAILED",
|
|
@@ -1174,9 +1188,9 @@ class D {
|
|
|
1174
1188
|
data: {
|
|
1175
1189
|
source: a,
|
|
1176
1190
|
format: h,
|
|
1177
|
-
contentType:
|
|
1191
|
+
contentType: d,
|
|
1178
1192
|
scale: r,
|
|
1179
|
-
withoutSave:
|
|
1193
|
+
withoutSave: n
|
|
1180
1194
|
}
|
|
1181
1195
|
}), u.resumeHistory(), null;
|
|
1182
1196
|
}
|
|
@@ -1193,9 +1207,9 @@ class D {
|
|
|
1193
1207
|
resizeImageToBoundaries(e) {
|
|
1194
1208
|
var t = arguments, a = this;
|
|
1195
1209
|
return T(function* () {
|
|
1196
|
-
var r = t.length > 1 && t[1] !== void 0 ? t[1] : "max",
|
|
1197
|
-
r === "min" && (
|
|
1198
|
-
var
|
|
1210
|
+
var r = t.length > 1 && t[1] !== void 0 ? t[1] : "max", n = "Размер изображения больше максимального размера канваса, поэтому оно будет уменьшено до максимальных размеров c сохранением пропорций: ".concat(E, "x").concat(O);
|
|
1211
|
+
r === "min" && (n = "Размер изображения меньше минимального размера канваса, поэтому оно будет увеличено до минимальных размеров c сохранением пропорций: ".concat(k, "x").concat(x));
|
|
1212
|
+
var i = {
|
|
1199
1213
|
dataURL: e,
|
|
1200
1214
|
sizeType: r,
|
|
1201
1215
|
maxWidth: E,
|
|
@@ -1207,9 +1221,9 @@ class D {
|
|
|
1207
1221
|
origin: "ImageManager",
|
|
1208
1222
|
method: "resizeImageToBoundaries",
|
|
1209
1223
|
code: "IMAGE_RESIZE_WARNING",
|
|
1210
|
-
message:
|
|
1211
|
-
data:
|
|
1212
|
-
}), a.editor.workerManager.post("resizeImage",
|
|
1224
|
+
message: n,
|
|
1225
|
+
data: i
|
|
1226
|
+
}), a.editor.workerManager.post("resizeImage", i);
|
|
1213
1227
|
})();
|
|
1214
1228
|
}
|
|
1215
1229
|
/**
|
|
@@ -1229,15 +1243,15 @@ class D {
|
|
|
1229
1243
|
var {
|
|
1230
1244
|
fileName: a = "image.png",
|
|
1231
1245
|
contentType: r = "image/png",
|
|
1232
|
-
exportAsBase64:
|
|
1233
|
-
exportAsBlob:
|
|
1246
|
+
exportAsBase64: n = !1,
|
|
1247
|
+
exportAsBlob: i = !1
|
|
1234
1248
|
} = e.length > 0 && e[0] !== void 0 ? e[0] : {}, {
|
|
1235
1249
|
canvas: s,
|
|
1236
1250
|
montageArea: c,
|
|
1237
1251
|
workerManager: u
|
|
1238
1252
|
} = t.editor;
|
|
1239
1253
|
try {
|
|
1240
|
-
var
|
|
1254
|
+
var l = r === "application/pdf", d = l ? "image/jpg" : r, h = D.getFormatFromContentType(d);
|
|
1241
1255
|
c.setCoords();
|
|
1242
1256
|
var {
|
|
1243
1257
|
left: g,
|
|
@@ -1245,7 +1259,7 @@ class D {
|
|
|
1245
1259
|
width: m,
|
|
1246
1260
|
height: f
|
|
1247
1261
|
} = c.getBoundingRect(), v = yield s.clone(["id", "format", "locked"]);
|
|
1248
|
-
["image/jpg", "image/jpeg"].includes(
|
|
1262
|
+
["image/jpg", "image/jpeg"].includes(d) && (v.backgroundColor = "#ffffff");
|
|
1249
1263
|
var S = v.getObjects().find((b) => b.id === c.id);
|
|
1250
1264
|
S.visible = !1, v.viewportTransform = [1, 0, 0, 1, -g, -M], v.setDimensions({
|
|
1251
1265
|
width: m,
|
|
@@ -1255,14 +1269,14 @@ class D {
|
|
|
1255
1269
|
}), v.renderAll();
|
|
1256
1270
|
var N = v.getObjects().filter((b) => b.format).every((b) => b.format === "svg");
|
|
1257
1271
|
if (h === "svg" && N) {
|
|
1258
|
-
var
|
|
1272
|
+
var L = v.toSVG();
|
|
1259
1273
|
v.dispose();
|
|
1260
|
-
var
|
|
1261
|
-
exportAsBase64:
|
|
1262
|
-
exportAsBlob:
|
|
1274
|
+
var w = D._exportSVGStringAsFile(L, {
|
|
1275
|
+
exportAsBase64: n,
|
|
1276
|
+
exportAsBlob: i,
|
|
1263
1277
|
fileName: a
|
|
1264
1278
|
}), y = {
|
|
1265
|
-
image:
|
|
1279
|
+
image: w,
|
|
1266
1280
|
format: "svg",
|
|
1267
1281
|
contentType: "image/svg+xml",
|
|
1268
1282
|
fileName: a.replace(/\.[^/.]+$/, ".svg")
|
|
@@ -1272,63 +1286,63 @@ class D {
|
|
|
1272
1286
|
var p = yield new Promise((b) => {
|
|
1273
1287
|
v.getElement().toBlob(b);
|
|
1274
1288
|
});
|
|
1275
|
-
if (v.dispose(),
|
|
1289
|
+
if (v.dispose(), i) {
|
|
1276
1290
|
var B = {
|
|
1277
1291
|
image: p,
|
|
1278
1292
|
format: h,
|
|
1279
|
-
contentType:
|
|
1293
|
+
contentType: d,
|
|
1280
1294
|
fileName: a
|
|
1281
1295
|
};
|
|
1282
1296
|
return s.fire("editor:canvas-exported", B), B;
|
|
1283
1297
|
}
|
|
1284
|
-
var
|
|
1298
|
+
var F = yield createImageBitmap(p), Z = yield u.post("toDataURL", {
|
|
1285
1299
|
format: h,
|
|
1286
1300
|
quality: 1,
|
|
1287
|
-
bitmap:
|
|
1288
|
-
}, [
|
|
1289
|
-
if (
|
|
1290
|
-
var
|
|
1301
|
+
bitmap: F
|
|
1302
|
+
}, [F]);
|
|
1303
|
+
if (l) {
|
|
1304
|
+
var W = 0.264583, z = m * W, U = f * W, V = (yield t.editor.moduleLoader.loadModule("jspdf")).jsPDF, Y = new V({
|
|
1291
1305
|
orientation: z > U ? "landscape" : "portrait",
|
|
1292
1306
|
unit: "mm",
|
|
1293
1307
|
format: [z, U]
|
|
1294
1308
|
});
|
|
1295
|
-
if (Y.addImage(Z, "JPG", 0, 0, z, U),
|
|
1296
|
-
var
|
|
1297
|
-
image:
|
|
1309
|
+
if (Y.addImage(Z, "JPG", 0, 0, z, U), n) {
|
|
1310
|
+
var De = Y.output("datauristring"), le = {
|
|
1311
|
+
image: De,
|
|
1298
1312
|
format: "pdf",
|
|
1299
1313
|
contentType: "application/pdf",
|
|
1300
1314
|
fileName: a
|
|
1301
1315
|
};
|
|
1302
|
-
return s.fire("editor:canvas-exported",
|
|
1316
|
+
return s.fire("editor:canvas-exported", le), le;
|
|
1303
1317
|
}
|
|
1304
|
-
var
|
|
1318
|
+
var Ne = Y.output("blob"), Le = new File([Ne], a, {
|
|
1305
1319
|
type: "application/pdf"
|
|
1306
|
-
}),
|
|
1307
|
-
image:
|
|
1320
|
+
}), he = {
|
|
1321
|
+
image: Le,
|
|
1308
1322
|
format: "pdf",
|
|
1309
1323
|
contentType: "application/pdf",
|
|
1310
1324
|
fileName: a
|
|
1311
1325
|
};
|
|
1312
|
-
return s.fire("editor:canvas-exported",
|
|
1326
|
+
return s.fire("editor:canvas-exported", he), he;
|
|
1313
1327
|
}
|
|
1314
|
-
if (
|
|
1315
|
-
var
|
|
1328
|
+
if (n) {
|
|
1329
|
+
var ge = {
|
|
1316
1330
|
image: Z,
|
|
1317
1331
|
format: h,
|
|
1318
|
-
contentType:
|
|
1332
|
+
contentType: d,
|
|
1319
1333
|
fileName: a
|
|
1320
1334
|
};
|
|
1321
|
-
return s.fire("editor:canvas-exported",
|
|
1335
|
+
return s.fire("editor:canvas-exported", ge), ge;
|
|
1322
1336
|
}
|
|
1323
|
-
var
|
|
1324
|
-
type:
|
|
1325
|
-
}),
|
|
1337
|
+
var ve = h === "svg" && !N ? a.replace(/\.[^/.]+$/, ".png") : a, we = new File([p], ve, {
|
|
1338
|
+
type: d
|
|
1339
|
+
}), me = {
|
|
1326
1340
|
image: we,
|
|
1327
1341
|
format: h,
|
|
1328
|
-
contentType:
|
|
1329
|
-
fileName:
|
|
1342
|
+
contentType: d,
|
|
1343
|
+
fileName: ve
|
|
1330
1344
|
};
|
|
1331
|
-
return s.fire("editor:canvas-exported",
|
|
1345
|
+
return s.fire("editor:canvas-exported", me), me;
|
|
1332
1346
|
} catch (b) {
|
|
1333
1347
|
return t.editor.errorManager.emitError({
|
|
1334
1348
|
origin: "ImageManager",
|
|
@@ -1338,8 +1352,8 @@ class D {
|
|
|
1338
1352
|
data: {
|
|
1339
1353
|
contentType: r,
|
|
1340
1354
|
fileName: a,
|
|
1341
|
-
exportAsBase64:
|
|
1342
|
-
exportAsBlob:
|
|
1355
|
+
exportAsBase64: n,
|
|
1356
|
+
exportAsBlob: i
|
|
1343
1357
|
}
|
|
1344
1358
|
}), "";
|
|
1345
1359
|
}
|
|
@@ -1362,72 +1376,72 @@ class D {
|
|
|
1362
1376
|
var {
|
|
1363
1377
|
object: a,
|
|
1364
1378
|
fileName: r = "image.png",
|
|
1365
|
-
contentType:
|
|
1366
|
-
exportAsBase64:
|
|
1379
|
+
contentType: n = "image/png",
|
|
1380
|
+
exportAsBase64: i = !1,
|
|
1367
1381
|
exportAsBlob: s = !1
|
|
1368
1382
|
} = e.length > 0 && e[0] !== void 0 ? e[0] : {}, {
|
|
1369
1383
|
canvas: c,
|
|
1370
1384
|
workerManager: u
|
|
1371
|
-
} = t.editor,
|
|
1372
|
-
if (!
|
|
1385
|
+
} = t.editor, l = a || c.getActiveObject();
|
|
1386
|
+
if (!l)
|
|
1373
1387
|
return t.editor.errorManager.emitError({
|
|
1374
1388
|
origin: "ImageManager",
|
|
1375
1389
|
method: "exportObjectAsImageFile",
|
|
1376
1390
|
code: "NO_OBJECT_SELECTED",
|
|
1377
1391
|
message: "Не выбран объект для экспорта",
|
|
1378
1392
|
data: {
|
|
1379
|
-
contentType:
|
|
1393
|
+
contentType: n,
|
|
1380
1394
|
fileName: r,
|
|
1381
|
-
exportAsBase64:
|
|
1395
|
+
exportAsBase64: i,
|
|
1382
1396
|
exportAsBlob: s
|
|
1383
1397
|
}
|
|
1384
1398
|
}), "";
|
|
1385
1399
|
try {
|
|
1386
|
-
var
|
|
1387
|
-
if (
|
|
1388
|
-
var h =
|
|
1389
|
-
exportAsBase64:
|
|
1400
|
+
var d = D.getFormatFromContentType(n);
|
|
1401
|
+
if (d === "svg") {
|
|
1402
|
+
var h = l.toSVG(), g = t._exportSVGStringAsFile(h, {
|
|
1403
|
+
exportAsBase64: i,
|
|
1390
1404
|
exportAsBlob: s,
|
|
1391
1405
|
fileName: r
|
|
1392
1406
|
}), M = {
|
|
1393
1407
|
image: g,
|
|
1394
|
-
format:
|
|
1408
|
+
format: d,
|
|
1395
1409
|
contentType: "image/svg+xml",
|
|
1396
1410
|
fileName: r.replace(/\.[^/.]+$/, ".svg")
|
|
1397
1411
|
};
|
|
1398
1412
|
return c.fire("editor:object-exported", M), M;
|
|
1399
1413
|
}
|
|
1400
|
-
if (
|
|
1401
|
-
var m = yield createImageBitmap(
|
|
1402
|
-
format:
|
|
1414
|
+
if (i) {
|
|
1415
|
+
var m = yield createImageBitmap(l._element), f = yield u.post("toDataURL", {
|
|
1416
|
+
format: d,
|
|
1403
1417
|
quality: 1,
|
|
1404
1418
|
bitmap: m
|
|
1405
1419
|
}, [m]), v = {
|
|
1406
1420
|
image: f,
|
|
1407
|
-
format:
|
|
1408
|
-
contentType:
|
|
1421
|
+
format: d,
|
|
1422
|
+
contentType: n,
|
|
1409
1423
|
fileName: r
|
|
1410
1424
|
};
|
|
1411
1425
|
return c.fire("editor:object-exported", v), v;
|
|
1412
1426
|
}
|
|
1413
|
-
var S =
|
|
1427
|
+
var S = l.toCanvasElement(), N = yield new Promise((p) => {
|
|
1414
1428
|
S.toBlob(p);
|
|
1415
1429
|
});
|
|
1416
1430
|
if (s) {
|
|
1417
|
-
var
|
|
1431
|
+
var L = {
|
|
1418
1432
|
image: N,
|
|
1419
|
-
format:
|
|
1420
|
-
contentType:
|
|
1433
|
+
format: d,
|
|
1434
|
+
contentType: n,
|
|
1421
1435
|
fileName: r
|
|
1422
1436
|
};
|
|
1423
|
-
return c.fire("editor:object-exported",
|
|
1437
|
+
return c.fire("editor:object-exported", L), L;
|
|
1424
1438
|
}
|
|
1425
|
-
var
|
|
1426
|
-
type:
|
|
1439
|
+
var w = new File([N], r, {
|
|
1440
|
+
type: n
|
|
1427
1441
|
}), y = {
|
|
1428
|
-
image:
|
|
1429
|
-
format:
|
|
1430
|
-
contentType:
|
|
1442
|
+
image: w,
|
|
1443
|
+
format: d,
|
|
1444
|
+
contentType: n,
|
|
1431
1445
|
fileName: r
|
|
1432
1446
|
};
|
|
1433
1447
|
return c.fire("editor:object-exported", y), y;
|
|
@@ -1438,9 +1452,9 @@ class D {
|
|
|
1438
1452
|
code: "IMAGE_EXPORT_FAILED",
|
|
1439
1453
|
message: "Ошибка экспорта объекта: ".concat(p.message),
|
|
1440
1454
|
data: {
|
|
1441
|
-
contentType:
|
|
1455
|
+
contentType: n,
|
|
1442
1456
|
fileName: r,
|
|
1443
|
-
exportAsBase64:
|
|
1457
|
+
exportAsBase64: i,
|
|
1444
1458
|
exportAsBlob: s
|
|
1445
1459
|
}
|
|
1446
1460
|
}), "";
|
|
@@ -1532,11 +1546,11 @@ class D {
|
|
|
1532
1546
|
try {
|
|
1533
1547
|
var r = yield fetch(e, {
|
|
1534
1548
|
method: "HEAD"
|
|
1535
|
-
}),
|
|
1536
|
-
if (
|
|
1537
|
-
return
|
|
1538
|
-
} catch (
|
|
1539
|
-
console.warn("HEAD запрос неудачен, определяем тип по расширению:",
|
|
1549
|
+
}), n = r.headers.get("content-type");
|
|
1550
|
+
if (n && n.startsWith("image/"))
|
|
1551
|
+
return n.split(";")[0];
|
|
1552
|
+
} catch (i) {
|
|
1553
|
+
console.warn("HEAD запрос неудачен, определяем тип по расширению:", i);
|
|
1540
1554
|
}
|
|
1541
1555
|
return t.getContentTypeFromExtension(e);
|
|
1542
1556
|
})();
|
|
@@ -1549,13 +1563,13 @@ class D {
|
|
|
1549
1563
|
*/
|
|
1550
1564
|
getContentTypeFromExtension(e) {
|
|
1551
1565
|
try {
|
|
1552
|
-
var t, a = new URL(e), r = (t = a.pathname.split(".").pop()) === null || t === void 0 ? void 0 : t.toLowerCase(),
|
|
1553
|
-
return this.acceptContentTypes.forEach((
|
|
1554
|
-
var s = D.getFormatFromContentType(
|
|
1555
|
-
s && (
|
|
1556
|
-
}),
|
|
1557
|
-
} catch (
|
|
1558
|
-
return console.warn("Не удалось определить расширение из URL:", e,
|
|
1566
|
+
var t, a = new URL(e), r = (t = a.pathname.split(".").pop()) === null || t === void 0 ? void 0 : t.toLowerCase(), n = {};
|
|
1567
|
+
return this.acceptContentTypes.forEach((i) => {
|
|
1568
|
+
var s = D.getFormatFromContentType(i);
|
|
1569
|
+
s && (n[s] = i);
|
|
1570
|
+
}), n[r] || "application/octet-stream";
|
|
1571
|
+
} catch (i) {
|
|
1572
|
+
return console.warn("Не удалось определить расширение из URL:", e, i), "application/octet-stream";
|
|
1559
1573
|
}
|
|
1560
1574
|
}
|
|
1561
1575
|
/**
|
|
@@ -1572,11 +1586,11 @@ class D {
|
|
|
1572
1586
|
montageArea: r
|
|
1573
1587
|
} = this.editor;
|
|
1574
1588
|
if (!r || !t) return 1;
|
|
1575
|
-
var
|
|
1589
|
+
var n = r.width, i = r.height, {
|
|
1576
1590
|
width: s,
|
|
1577
1591
|
height: c
|
|
1578
1592
|
} = t;
|
|
1579
|
-
return a === "contain" || a === "image-contain" ? Math.min(
|
|
1593
|
+
return a === "contain" || a === "image-contain" ? Math.min(n / s, i / c) : a === "cover" || a === "image-cover" ? Math.max(n / s, i / c) : 1;
|
|
1580
1594
|
}
|
|
1581
1595
|
}
|
|
1582
1596
|
class Mt {
|
|
@@ -1607,29 +1621,29 @@ class Mt {
|
|
|
1607
1621
|
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
|
|
1608
1622
|
if (e) {
|
|
1609
1623
|
var {
|
|
1610
|
-
canvas:
|
|
1611
|
-
montageArea:
|
|
1624
|
+
canvas: n,
|
|
1625
|
+
montageArea: i,
|
|
1612
1626
|
options: {
|
|
1613
1627
|
canvasBackstoreWidth: s
|
|
1614
1628
|
}
|
|
1615
1629
|
} = this.editor, {
|
|
1616
1630
|
width: c,
|
|
1617
1631
|
height: u
|
|
1618
|
-
} =
|
|
1619
|
-
if (!s || s === "auto" || r ? this.adaptCanvasToContainer() : s ? this.setCanvasBackstoreWidth(s) : this.setCanvasBackstoreWidth(
|
|
1620
|
-
width:
|
|
1621
|
-
}),
|
|
1622
|
-
width:
|
|
1632
|
+
} = i, l = Number(Math.max(Math.min(e, E), k));
|
|
1633
|
+
if (!s || s === "auto" || r ? this.adaptCanvasToContainer() : s ? this.setCanvasBackstoreWidth(s) : this.setCanvasBackstoreWidth(l), i.set({
|
|
1634
|
+
width: l
|
|
1635
|
+
}), n.clipPath.set({
|
|
1636
|
+
width: l
|
|
1623
1637
|
}), t) {
|
|
1624
|
-
var
|
|
1638
|
+
var d = l / c, h = u * d;
|
|
1625
1639
|
this.setResolutionHeight(h);
|
|
1626
1640
|
return;
|
|
1627
1641
|
}
|
|
1628
1642
|
var {
|
|
1629
1643
|
left: g,
|
|
1630
1644
|
top: M
|
|
1631
|
-
} = this.getObjectDefaultCoords(
|
|
1632
|
-
|
|
1645
|
+
} = this.getObjectDefaultCoords(i), m = n.getZoom();
|
|
1646
|
+
n.setViewportTransform([m, 0, 0, m, g, M]), this.centerMontageArea(), a || this.editor.historyManager.saveState(), n == null || n.fire("editor:resolution-width-changed", {
|
|
1633
1647
|
width: e
|
|
1634
1648
|
});
|
|
1635
1649
|
}
|
|
@@ -1651,29 +1665,29 @@ class Mt {
|
|
|
1651
1665
|
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
|
|
1652
1666
|
if (e) {
|
|
1653
1667
|
var {
|
|
1654
|
-
canvas:
|
|
1655
|
-
montageArea:
|
|
1668
|
+
canvas: n,
|
|
1669
|
+
montageArea: i,
|
|
1656
1670
|
options: {
|
|
1657
1671
|
canvasBackstoreHeight: s
|
|
1658
1672
|
}
|
|
1659
1673
|
} = this.editor, {
|
|
1660
1674
|
width: c,
|
|
1661
1675
|
height: u
|
|
1662
|
-
} =
|
|
1663
|
-
if (!s || s === "auto" || r ? this.adaptCanvasToContainer() : s ? this.setCanvasBackstoreHeight(s) : this.setCanvasBackstoreHeight(
|
|
1664
|
-
height:
|
|
1665
|
-
}),
|
|
1666
|
-
height:
|
|
1676
|
+
} = i, l = Number(Math.max(Math.min(e, O), x));
|
|
1677
|
+
if (!s || s === "auto" || r ? this.adaptCanvasToContainer() : s ? this.setCanvasBackstoreHeight(s) : this.setCanvasBackstoreHeight(l), i.set({
|
|
1678
|
+
height: l
|
|
1679
|
+
}), n.clipPath.set({
|
|
1680
|
+
height: l
|
|
1667
1681
|
}), t) {
|
|
1668
|
-
var
|
|
1682
|
+
var d = l / u, h = c * d;
|
|
1669
1683
|
this.setResolutionWidth(h);
|
|
1670
1684
|
return;
|
|
1671
1685
|
}
|
|
1672
1686
|
var {
|
|
1673
1687
|
left: g,
|
|
1674
1688
|
top: M
|
|
1675
|
-
} = this.getObjectDefaultCoords(
|
|
1676
|
-
|
|
1689
|
+
} = this.getObjectDefaultCoords(i), m = n.getZoom();
|
|
1690
|
+
n.setViewportTransform([m, 0, 0, m, g, M]), this.centerMontageArea(), a || this.editor.historyManager.saveState(), n == null || n.fire("editor:resolution-height-changed", {
|
|
1677
1691
|
height: e
|
|
1678
1692
|
});
|
|
1679
1693
|
}
|
|
@@ -1686,7 +1700,7 @@ class Mt {
|
|
|
1686
1700
|
var {
|
|
1687
1701
|
canvas: e,
|
|
1688
1702
|
montageArea: t
|
|
1689
|
-
} = this.editor, a = e.getWidth(), r = e.getHeight(),
|
|
1703
|
+
} = this.editor, a = e.getWidth(), r = e.getHeight(), n = e.getZoom(), i = new K(a / 2, r / 2);
|
|
1690
1704
|
t.set({
|
|
1691
1705
|
left: a / 2,
|
|
1692
1706
|
top: r / 2
|
|
@@ -1695,7 +1709,7 @@ class Mt {
|
|
|
1695
1709
|
top: r / 2
|
|
1696
1710
|
}), e.renderAll();
|
|
1697
1711
|
var s = e.viewportTransform;
|
|
1698
|
-
s[4] = a / 2 -
|
|
1712
|
+
s[4] = a / 2 - i.x * n, s[5] = r / 2 - i.y * n, e.setViewportTransform(s), e.renderAll();
|
|
1699
1713
|
}
|
|
1700
1714
|
/**
|
|
1701
1715
|
* Метод для получения координат объекта с учетом текущего зума
|
|
@@ -1712,8 +1726,8 @@ class Mt {
|
|
|
1712
1726
|
}), {};
|
|
1713
1727
|
var {
|
|
1714
1728
|
width: r,
|
|
1715
|
-
height:
|
|
1716
|
-
} = a,
|
|
1729
|
+
height: n
|
|
1730
|
+
} = a, i = t.getZoom(), s = (r - r * i) / 2, c = (n - n * i) / 2;
|
|
1717
1731
|
return {
|
|
1718
1732
|
left: s,
|
|
1719
1733
|
top: c
|
|
@@ -1742,10 +1756,10 @@ class Mt {
|
|
|
1742
1756
|
adaptCanvasToContainer() {
|
|
1743
1757
|
var {
|
|
1744
1758
|
canvas: e
|
|
1745
|
-
} = this.editor, t = e.editorContainer, a = t.clientWidth, r = t.clientHeight,
|
|
1746
|
-
console.log("adaptCanvasToContainer newWidth",
|
|
1747
|
-
width:
|
|
1748
|
-
height:
|
|
1759
|
+
} = this.editor, t = e.editorContainer, a = t.clientWidth, r = t.clientHeight, n = Math.max(Math.min(a, E), k), i = Math.max(Math.min(r, O), x);
|
|
1760
|
+
console.log("adaptCanvasToContainer newWidth", n), console.log("adaptCanvasToContainer newHeight", i), e.setDimensions({
|
|
1761
|
+
width: n,
|
|
1762
|
+
height: i
|
|
1749
1763
|
}, {
|
|
1750
1764
|
backstoreOnly: !0
|
|
1751
1765
|
});
|
|
@@ -1762,13 +1776,13 @@ class Mt {
|
|
|
1762
1776
|
transformManager: a,
|
|
1763
1777
|
montageArea: {
|
|
1764
1778
|
width: r,
|
|
1765
|
-
height:
|
|
1779
|
+
height: n
|
|
1766
1780
|
}
|
|
1767
1781
|
} = this.editor;
|
|
1768
1782
|
this.setResolutionWidth(r, {
|
|
1769
1783
|
adaptCanvasToContainer: !0,
|
|
1770
1784
|
withoutSave: !0
|
|
1771
|
-
}), this.setResolutionHeight(
|
|
1785
|
+
}), this.setResolutionHeight(n, {
|
|
1772
1786
|
adaptCanvasToContainer: !0,
|
|
1773
1787
|
withoutSave: !0
|
|
1774
1788
|
}), this.centerMontageArea(), t.selectAll(), a.fitObject({
|
|
@@ -1776,7 +1790,7 @@ class Mt {
|
|
|
1776
1790
|
withoutSave: !0
|
|
1777
1791
|
}), e.fire("editor:canvas-updated", {
|
|
1778
1792
|
width: r,
|
|
1779
|
-
height:
|
|
1793
|
+
height: n
|
|
1780
1794
|
});
|
|
1781
1795
|
}
|
|
1782
1796
|
/**
|
|
@@ -1794,7 +1808,7 @@ class Mt {
|
|
|
1794
1808
|
var {
|
|
1795
1809
|
canvas: t,
|
|
1796
1810
|
montageArea: a
|
|
1797
|
-
} = this.editor, r = a.width * e,
|
|
1811
|
+
} = 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;
|
|
1798
1812
|
t.setDimensions({
|
|
1799
1813
|
width: s,
|
|
1800
1814
|
height: c
|
|
@@ -1893,34 +1907,34 @@ class Mt {
|
|
|
1893
1907
|
var {
|
|
1894
1908
|
canvas: r,
|
|
1895
1909
|
options: {
|
|
1896
|
-
editorContainer:
|
|
1910
|
+
editorContainer: n
|
|
1897
1911
|
}
|
|
1898
|
-
} = this.editor,
|
|
1912
|
+
} = this.editor, i = [];
|
|
1899
1913
|
switch (e) {
|
|
1900
1914
|
case "canvas":
|
|
1901
|
-
|
|
1915
|
+
i.push(r.lowerCanvasEl, r.upperCanvasEl);
|
|
1902
1916
|
break;
|
|
1903
1917
|
case "wrapper":
|
|
1904
|
-
|
|
1918
|
+
i.push(r.wrapperEl);
|
|
1905
1919
|
break;
|
|
1906
1920
|
case "container":
|
|
1907
|
-
|
|
1921
|
+
i.push(n);
|
|
1908
1922
|
break;
|
|
1909
1923
|
default:
|
|
1910
|
-
|
|
1924
|
+
i.push(r.lowerCanvasEl, r.upperCanvasEl);
|
|
1911
1925
|
}
|
|
1912
1926
|
var s = t === "width" ? "width" : "height";
|
|
1913
1927
|
if (typeof a == "string") {
|
|
1914
|
-
|
|
1915
|
-
|
|
1928
|
+
i.forEach((l) => {
|
|
1929
|
+
l.style[s] = a;
|
|
1916
1930
|
});
|
|
1917
1931
|
return;
|
|
1918
1932
|
}
|
|
1919
1933
|
var c = parseFloat(a);
|
|
1920
1934
|
if (!isNaN(c)) {
|
|
1921
1935
|
var u = "".concat(c, "px");
|
|
1922
|
-
|
|
1923
|
-
|
|
1936
|
+
i.forEach((l) => {
|
|
1937
|
+
l.style[s] = u;
|
|
1924
1938
|
}), r.fire("editor:display-".concat(e, "-").concat(s, "-changed"), {
|
|
1925
1939
|
element: e,
|
|
1926
1940
|
value: a
|
|
@@ -1943,8 +1957,8 @@ class Mt {
|
|
|
1943
1957
|
withoutSave: a
|
|
1944
1958
|
} = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, {
|
|
1945
1959
|
canvas: r,
|
|
1946
|
-
montageArea:
|
|
1947
|
-
transformManager:
|
|
1960
|
+
montageArea: n,
|
|
1961
|
+
transformManager: i,
|
|
1948
1962
|
options: {
|
|
1949
1963
|
montageAreaWidth: s,
|
|
1950
1964
|
montageAreaHeight: c
|
|
@@ -1952,21 +1966,21 @@ class Mt {
|
|
|
1952
1966
|
} = this.editor, u = e || r.getActiveObject();
|
|
1953
1967
|
if (!(!u || u.type !== "image" && u.format !== "svg")) {
|
|
1954
1968
|
var {
|
|
1955
|
-
width:
|
|
1956
|
-
height:
|
|
1957
|
-
} = u, h = Math.min(
|
|
1969
|
+
width: l,
|
|
1970
|
+
height: d
|
|
1971
|
+
} = u, h = Math.min(l, E), g = Math.min(d, O);
|
|
1958
1972
|
if (t) {
|
|
1959
1973
|
var {
|
|
1960
1974
|
width: M,
|
|
1961
1975
|
height: m
|
|
1962
|
-
} =
|
|
1976
|
+
} = n, f = l / M, v = d / m, S = Math.max(f, v);
|
|
1963
1977
|
h = M * S, g = m * S;
|
|
1964
1978
|
}
|
|
1965
1979
|
this.setResolutionWidth(h, {
|
|
1966
1980
|
withoutSave: !0
|
|
1967
1981
|
}), this.setResolutionHeight(g, {
|
|
1968
1982
|
withoutSave: !0
|
|
1969
|
-
}), (
|
|
1983
|
+
}), (l > s || d > c) && i.calculateAndApplyDefaultZoom(), i.resetObject(u, {
|
|
1970
1984
|
withoutSave: !0
|
|
1971
1985
|
}), r.centerObject(u), r.renderAll(), a || this.editor.historyManager.saveState(), r.fire("editor:montage-area-scaled-to-image", {
|
|
1972
1986
|
object: u,
|
|
@@ -2003,13 +2017,13 @@ class Mt {
|
|
|
2003
2017
|
transformManager: a,
|
|
2004
2018
|
historyManager: r,
|
|
2005
2019
|
options: {
|
|
2006
|
-
montageAreaWidth:
|
|
2007
|
-
montageAreaHeight:
|
|
2020
|
+
montageAreaWidth: n,
|
|
2021
|
+
montageAreaHeight: i
|
|
2008
2022
|
}
|
|
2009
2023
|
} = this.editor;
|
|
2010
|
-
a.resetZoom(), this.setResolutionWidth(
|
|
2024
|
+
a.resetZoom(), this.setResolutionWidth(n, {
|
|
2011
2025
|
withoutSave: !0
|
|
2012
|
-
}), this.setResolutionHeight(
|
|
2026
|
+
}), this.setResolutionHeight(i, {
|
|
2013
2027
|
withoutSave: !0
|
|
2014
2028
|
}), t.renderAll(), a.resetObjects(), e || r.saveState(), t.fire("editor:default-scale-set");
|
|
2015
2029
|
}
|
|
@@ -2025,19 +2039,12 @@ class Mt {
|
|
|
2025
2039
|
overlayMask: a
|
|
2026
2040
|
}
|
|
2027
2041
|
} = this.editor, r = e.getObjects();
|
|
2028
|
-
return r.filter((
|
|
2042
|
+
return r.filter((n) => n.id !== t.id && n.id !== a.id);
|
|
2029
2043
|
}
|
|
2030
2044
|
}
|
|
2031
2045
|
class ft {
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
2035
|
-
*/
|
|
2036
|
-
constructor(e) {
|
|
2037
|
-
var {
|
|
2038
|
-
editor: t
|
|
2039
|
-
} = e;
|
|
2040
|
-
this.editor = t, this.options = t.options;
|
|
2046
|
+
constructor({ editor: e }) {
|
|
2047
|
+
this.editor = e, this.options = e.options, this.minZoom = this.options.minZoom || ht, this.maxZoom = this.options.maxZoom || gt, this.defaultZoom = this.options.defaultScale, this.maxZoomFactor = this.options.maxZoomFactor;
|
|
2041
2048
|
}
|
|
2042
2049
|
/**
|
|
2043
2050
|
* Метод рассчитывает и применяет зум по умолчанию для монтажной области редактора.
|
|
@@ -2046,18 +2053,11 @@ class ft {
|
|
|
2046
2053
|
* Если scale не передан, то используется значение из options.defaultScale.
|
|
2047
2054
|
* @param {Number} [scale] - Желаемый масштаб относительно размеров контейнера редактора.
|
|
2048
2055
|
*/
|
|
2049
|
-
calculateAndApplyDefaultZoom() {
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
|
|
2053
|
-
|
|
2054
|
-
height: s
|
|
2055
|
-
} = this.editor.montageArea, c = r / n * e, u = i / s * e, d = Math.min(c, u), {
|
|
2056
|
-
minZoom: l,
|
|
2057
|
-
maxZoom: h,
|
|
2058
|
-
maxZoomFactor: g
|
|
2059
|
-
} = this.options;
|
|
2060
|
-
this.minZoom = Math.min(d / g, l), this.maxZoom = Math.max(d * g, h), this.defaultZoom = d, this.setZoom(d);
|
|
2056
|
+
calculateAndApplyDefaultZoom(e = this.options.defaultScale) {
|
|
2057
|
+
const { canvas: t } = this.editor, a = t.editorContainer, r = a.clientWidth, n = a.clientHeight, { width: i, height: s } = this.editor.montageArea, c = r / i * e, u = n / s * e;
|
|
2058
|
+
this.defaultZoom = Math.min(c, u);
|
|
2059
|
+
const { defaultZoom: l, maxZoomFactor: d, minZoom: h, maxZoom: g } = this;
|
|
2060
|
+
this.minZoom = Math.min(l / d, h), this.maxZoom = Math.max(l * d, g), this.setZoom();
|
|
2061
2061
|
}
|
|
2062
2062
|
/**
|
|
2063
2063
|
* Увеличение/уменьшение масштаба
|
|
@@ -2068,50 +2068,33 @@ class ft {
|
|
|
2068
2068
|
* @fires editor:zoom-changed
|
|
2069
2069
|
* Если передавать координаты курсора, то нужно быть аккуратнее, так как юзер может выйти за пределы рабочей области
|
|
2070
2070
|
*/
|
|
2071
|
-
zoom() {
|
|
2072
|
-
var
|
|
2073
|
-
if (e)
|
|
2074
|
-
|
|
2075
|
-
|
|
2076
|
-
|
|
2077
|
-
|
|
2078
|
-
|
|
2079
|
-
|
|
2080
|
-
|
|
2081
|
-
|
|
2082
|
-
|
|
2083
|
-
|
|
2084
|
-
|
|
2085
|
-
}, u), a.fire("editor:zoom-changed", {
|
|
2086
|
-
currentZoom: a.getZoom(),
|
|
2087
|
-
zoom: u,
|
|
2088
|
-
pointX: s,
|
|
2089
|
-
pointY: c
|
|
2090
|
-
});
|
|
2091
|
-
}
|
|
2071
|
+
zoom(e = vt, t = {}) {
|
|
2072
|
+
var h, g;
|
|
2073
|
+
if (!e) return;
|
|
2074
|
+
const { minZoom: a, maxZoom: r } = this, { canvas: n } = this.editor, i = n.getZoom(), s = n.getCenterPoint(), c = (h = t.pointX) != null ? h : s.x, u = (g = t.pointY) != null ? g : s.y, l = new K(c, u);
|
|
2075
|
+
let d = Number((i + Number(e)).toFixed(2));
|
|
2076
|
+
d > r && (d = r), d < a && (d = a), n.zoomToPoint(l, d), console.log({
|
|
2077
|
+
currentZoom: i,
|
|
2078
|
+
zoom: d,
|
|
2079
|
+
point: l
|
|
2080
|
+
}), n.fire("editor:zoom-changed", {
|
|
2081
|
+
currentZoom: n.getZoom(),
|
|
2082
|
+
zoom: d,
|
|
2083
|
+
point: l
|
|
2084
|
+
});
|
|
2092
2085
|
}
|
|
2093
2086
|
/**
|
|
2094
2087
|
* Установка зума
|
|
2095
2088
|
* @param {Number} zoom - Зум
|
|
2096
2089
|
* @fires editor:zoom-changed
|
|
2097
2090
|
*/
|
|
2098
|
-
setZoom() {
|
|
2099
|
-
|
|
2100
|
-
|
|
2101
|
-
|
|
2102
|
-
|
|
2103
|
-
|
|
2104
|
-
|
|
2105
|
-
y: n
|
|
2106
|
-
} = t.getCenterPoint(), s = e;
|
|
2107
|
-
e > r && (s = r), e < a && (s = a), t.zoomToPoint({
|
|
2108
|
-
x: Number(i),
|
|
2109
|
-
y: Number(n)
|
|
2110
|
-
}, s), t.fire("editor:zoom-changed", {
|
|
2111
|
-
currentZoom: t.getZoom(),
|
|
2112
|
-
zoom: s,
|
|
2113
|
-
pointX: i,
|
|
2114
|
-
pointY: n
|
|
2091
|
+
setZoom(e = this.defaultZoom) {
|
|
2092
|
+
const { minZoom: t, maxZoom: a } = this, { canvas: r } = this.editor, n = new K(r.getCenterPoint());
|
|
2093
|
+
let i = e;
|
|
2094
|
+
e > a && (i = a), e < t && (i = t), r.zoomToPoint(n, i), r.fire("editor:zoom-changed", {
|
|
2095
|
+
currentZoom: r.getZoom(),
|
|
2096
|
+
zoom: i,
|
|
2097
|
+
point: n
|
|
2115
2098
|
});
|
|
2116
2099
|
}
|
|
2117
2100
|
/**
|
|
@@ -2119,18 +2102,10 @@ class ft {
|
|
|
2119
2102
|
* @fires editor:zoom-changed
|
|
2120
2103
|
*/
|
|
2121
2104
|
resetZoom() {
|
|
2122
|
-
|
|
2123
|
-
|
|
2124
|
-
|
|
2125
|
-
|
|
2126
|
-
x: a,
|
|
2127
|
-
y: r
|
|
2128
|
-
} = e.getCenterPoint();
|
|
2129
|
-
e.zoomToPoint({
|
|
2130
|
-
x: Number(a),
|
|
2131
|
-
y: Number(r)
|
|
2132
|
-
}, t), this.editor.canvas.fire("editor:zoom-changed", {
|
|
2133
|
-
currentZoom: e.getZoom()
|
|
2105
|
+
const { canvas: e } = this.editor, t = new K(e.getCenterPoint());
|
|
2106
|
+
e.zoomToPoint(t, this.defaultZoom), this.editor.canvas.fire("editor:zoom-changed", {
|
|
2107
|
+
currentZoom: e.getZoom(),
|
|
2108
|
+
point: t
|
|
2134
2109
|
});
|
|
2135
2110
|
}
|
|
2136
2111
|
/**
|
|
@@ -2140,19 +2115,15 @@ class ft {
|
|
|
2140
2115
|
* @param {Boolean} options.withoutSave - Не сохранять состояние
|
|
2141
2116
|
* @fires editor:object-rotated
|
|
2142
2117
|
*/
|
|
2143
|
-
rotate() {
|
|
2144
|
-
|
|
2145
|
-
|
|
2146
|
-
|
|
2147
|
-
|
|
2148
|
-
|
|
2149
|
-
|
|
2150
|
-
|
|
2151
|
-
|
|
2152
|
-
i.rotate(n), i.setCoords(), a.renderAll(), t || r.saveState(), a.fire("editor:object-rotated", {
|
|
2153
|
-
angle: n
|
|
2154
|
-
});
|
|
2155
|
-
}
|
|
2118
|
+
rotate(e = mt, { withoutSave: t } = {}) {
|
|
2119
|
+
const { canvas: a, historyManager: r } = this.editor, n = a.getActiveObject();
|
|
2120
|
+
if (!n) return;
|
|
2121
|
+
const i = n.angle + e;
|
|
2122
|
+
n.rotate(i), n.setCoords(), a.renderAll(), t || r.saveState(), a.fire("editor:object-rotated", {
|
|
2123
|
+
object: n,
|
|
2124
|
+
withoutSave: t,
|
|
2125
|
+
angle: i
|
|
2126
|
+
});
|
|
2156
2127
|
}
|
|
2157
2128
|
/**
|
|
2158
2129
|
* Отразить по горизонтали
|
|
@@ -2160,14 +2131,12 @@ class ft {
|
|
|
2160
2131
|
* @param {Boolean} options.withoutSave - Не сохранять состояние
|
|
2161
2132
|
* @fires editor:object-flipped-x
|
|
2162
2133
|
*/
|
|
2163
|
-
flipX() {
|
|
2164
|
-
|
|
2134
|
+
flipX({ withoutSave: e } = {}) {
|
|
2135
|
+
const { canvas: t, historyManager: a } = this.editor, r = t.getActiveObject();
|
|
2136
|
+
r && (r.flipX = !r.flipX, t.renderAll(), e || a.saveState(), t.fire("editor:object-flipped-x", {
|
|
2137
|
+
object: r,
|
|
2165
2138
|
withoutSave: e
|
|
2166
|
-
}
|
|
2167
|
-
canvas: t,
|
|
2168
|
-
historyManager: a
|
|
2169
|
-
} = this.editor, r = t.getActiveObject();
|
|
2170
|
-
r && (r.flipX = !r.flipX, t.renderAll(), e || a.saveState(), t.fire("editor:object-flipped-x"));
|
|
2139
|
+
}));
|
|
2171
2140
|
}
|
|
2172
2141
|
/**
|
|
2173
2142
|
* Отразить по вертикали
|
|
@@ -2175,32 +2144,31 @@ class ft {
|
|
|
2175
2144
|
* @param {Boolean} options.withoutSave - Не сохранять состояние
|
|
2176
2145
|
* @fires editor:object-flipped-y
|
|
2177
2146
|
*/
|
|
2178
|
-
flipY() {
|
|
2179
|
-
|
|
2147
|
+
flipY({ withoutSave: e } = {}) {
|
|
2148
|
+
const { canvas: t, historyManager: a } = this.editor, r = t.getActiveObject();
|
|
2149
|
+
r && (r.flipY = !r.flipY, t.renderAll(), e || a.saveState(), t.fire("editor:object-flipped-y", {
|
|
2150
|
+
object: r,
|
|
2180
2151
|
withoutSave: e
|
|
2181
|
-
}
|
|
2182
|
-
canvas: t,
|
|
2183
|
-
historyManager: a
|
|
2184
|
-
} = this.editor, r = t.getActiveObject();
|
|
2185
|
-
r && (r.flipY = !r.flipY, t.renderAll(), e || a.saveState(), t.fire("editor:object-flipped-y"));
|
|
2152
|
+
}));
|
|
2186
2153
|
}
|
|
2187
2154
|
/**
|
|
2188
2155
|
* Установка прозрачности объекта
|
|
2189
2156
|
* @param {Number} opacity - Прозрачность от 0 до 1
|
|
2190
2157
|
* @fires editor:object-opacity-changed
|
|
2191
2158
|
*/
|
|
2192
|
-
setActiveObjectOpacity(
|
|
2193
|
-
|
|
2194
|
-
|
|
2195
|
-
|
|
2196
|
-
|
|
2197
|
-
|
|
2198
|
-
|
|
2199
|
-
historyManager: i
|
|
2200
|
-
} = this.editor, n = e || r.getActiveObject();
|
|
2201
|
-
n && (n.type === "activeselection" ? n.getObjects().forEach((s) => {
|
|
2159
|
+
setActiveObjectOpacity({
|
|
2160
|
+
object: e,
|
|
2161
|
+
opacity: t = 1,
|
|
2162
|
+
withoutSave: a
|
|
2163
|
+
} = {}) {
|
|
2164
|
+
const { canvas: r, historyManager: n } = this.editor, i = e || r.getActiveObject();
|
|
2165
|
+
i && (i.type === "activeselection" ? i.getObjects().forEach((s) => {
|
|
2202
2166
|
s.set("opacity", t);
|
|
2203
|
-
}) :
|
|
2167
|
+
}) : i.set("opacity", t), r.renderAll(), a || n.saveState(), r.fire("editor:object-opacity-changed", {
|
|
2168
|
+
object: i,
|
|
2169
|
+
opacity: t,
|
|
2170
|
+
withoutSave: a
|
|
2171
|
+
}));
|
|
2204
2172
|
}
|
|
2205
2173
|
/**
|
|
2206
2174
|
* Масштабирование объекта
|
|
@@ -2213,39 +2181,30 @@ class ft {
|
|
|
2213
2181
|
* @param {Boolean} [options.fitAsOneObject] - Масштабировать все объекты в активной группе как один объект
|
|
2214
2182
|
* @fires editor:image-fitted
|
|
2215
2183
|
*/
|
|
2216
|
-
fitObject(
|
|
2217
|
-
|
|
2218
|
-
|
|
2219
|
-
|
|
2220
|
-
|
|
2221
|
-
|
|
2222
|
-
|
|
2223
|
-
canvas: i,
|
|
2224
|
-
imageManager: n,
|
|
2225
|
-
historyManager: s
|
|
2226
|
-
} = this.editor, c = e || i.getActiveObject();
|
|
2184
|
+
fitObject({
|
|
2185
|
+
object: e,
|
|
2186
|
+
type: t = this.options.scaleType,
|
|
2187
|
+
withoutSave: a,
|
|
2188
|
+
fitAsOneObject: r
|
|
2189
|
+
} = {}) {
|
|
2190
|
+
const { canvas: n, imageManager: i, historyManager: s } = this.editor, c = e || n.getActiveObject();
|
|
2227
2191
|
if (c) {
|
|
2228
2192
|
if (c.set("angle", 0), ["activeselection"].includes(c.type) && !r) {
|
|
2229
|
-
|
|
2230
|
-
|
|
2231
|
-
|
|
2232
|
-
|
|
2233
|
-
scaleType: t
|
|
2234
|
-
});
|
|
2235
|
-
h.scale(g), i.centerObject(h);
|
|
2236
|
-
});
|
|
2237
|
-
var d = new H(u, {
|
|
2238
|
-
canvas: i
|
|
2193
|
+
const u = c.getObjects();
|
|
2194
|
+
n.discardActiveObject(), u.forEach((d) => {
|
|
2195
|
+
const h = i.calculateScaleFactor({ imageObject: d, scaleType: t });
|
|
2196
|
+
d.scale(h), n.centerObject(d);
|
|
2239
2197
|
});
|
|
2240
|
-
|
|
2198
|
+
const l = new R(u, { canvas: n });
|
|
2199
|
+
n.setActiveObject(l);
|
|
2241
2200
|
} else {
|
|
2242
|
-
|
|
2201
|
+
const u = i.calculateScaleFactor({
|
|
2243
2202
|
imageObject: c,
|
|
2244
2203
|
scaleType: t
|
|
2245
2204
|
});
|
|
2246
|
-
c.scale(
|
|
2205
|
+
c.scale(u), n.centerObject(c);
|
|
2247
2206
|
}
|
|
2248
|
-
|
|
2207
|
+
n.renderAll(), a || s.saveState(), n.fire("editor:object-fitted", {
|
|
2249
2208
|
object: c,
|
|
2250
2209
|
type: t,
|
|
2251
2210
|
withoutSave: a,
|
|
@@ -2270,60 +2229,35 @@ class ft {
|
|
|
2270
2229
|
* @returns
|
|
2271
2230
|
* @fires editor:object-reset
|
|
2272
2231
|
*/
|
|
2273
|
-
resetObject(e) {
|
|
2274
|
-
|
|
2275
|
-
alwaysFitObject: t = !1,
|
|
2276
|
-
withoutSave: a = !1
|
|
2277
|
-
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, {
|
|
2232
|
+
resetObject(e, { alwaysFitObject: t = !1, withoutSave: a = !1 } = {}) {
|
|
2233
|
+
const {
|
|
2278
2234
|
canvas: r,
|
|
2279
|
-
montageArea:
|
|
2280
|
-
imageManager:
|
|
2235
|
+
montageArea: n,
|
|
2236
|
+
imageManager: i,
|
|
2281
2237
|
historyManager: s,
|
|
2282
|
-
options: {
|
|
2283
|
-
scaleType: c
|
|
2284
|
-
}
|
|
2238
|
+
options: { scaleType: c }
|
|
2285
2239
|
} = this.editor, u = e || r.getActiveObject();
|
|
2286
|
-
if (!
|
|
2287
|
-
|
|
2288
|
-
|
|
2289
|
-
|
|
2290
|
-
|
|
2291
|
-
|
|
2292
|
-
|
|
2293
|
-
|
|
2294
|
-
|
|
2295
|
-
|
|
2296
|
-
|
|
2297
|
-
|
|
2298
|
-
|
|
2299
|
-
|
|
2300
|
-
|
|
2301
|
-
else {
|
|
2302
|
-
var {
|
|
2303
|
-
width: l,
|
|
2304
|
-
height: h
|
|
2305
|
-
} = i, {
|
|
2306
|
-
width: g,
|
|
2307
|
-
height: M
|
|
2308
|
-
} = u, m = n.calculateScaleFactor({
|
|
2309
|
-
imageObject: u,
|
|
2310
|
-
scaleType: c
|
|
2311
|
-
}), f = c === "contain" && m < 1 || c === "cover" && (g > l || M > h);
|
|
2312
|
-
f ? this.fitObject({
|
|
2313
|
-
object: u,
|
|
2314
|
-
withoutSave: !0,
|
|
2315
|
-
fitAsOneObject: !0
|
|
2316
|
-
}) : u.set({
|
|
2317
|
-
scaleX: 1,
|
|
2318
|
-
scaleY: 1
|
|
2319
|
-
});
|
|
2320
|
-
}
|
|
2321
|
-
u.set({
|
|
2322
|
-
flipX: !1,
|
|
2323
|
-
flipY: !1,
|
|
2324
|
-
angle: 0
|
|
2325
|
-
}), r.centerObject(u), r.renderAll(), s.resumeHistory(), a || s.saveState(), r.fire("editor:object-reset");
|
|
2240
|
+
if (!u || u.locked) return;
|
|
2241
|
+
if (s.suspendHistory(), u.type === "image" || u.format === "svg" || u.set({
|
|
2242
|
+
scaleX: 1,
|
|
2243
|
+
scaleY: 1,
|
|
2244
|
+
flipX: !1,
|
|
2245
|
+
flipY: !1,
|
|
2246
|
+
angle: 0
|
|
2247
|
+
}), t)
|
|
2248
|
+
this.fitObject({ object: u, withoutSave: !0, fitAsOneObject: !0 });
|
|
2249
|
+
else {
|
|
2250
|
+
const { width: d, height: h } = n, { width: g, height: M } = u, m = i.calculateScaleFactor({
|
|
2251
|
+
imageObject: u,
|
|
2252
|
+
scaleType: c
|
|
2253
|
+
});
|
|
2254
|
+
c === "contain" && m < 1 || c === "cover" && (g > d || M > h) ? this.fitObject({ object: u, withoutSave: !0, fitAsOneObject: !0 }) : u.set({ scaleX: 1, scaleY: 1 });
|
|
2326
2255
|
}
|
|
2256
|
+
u.set({ flipX: !1, flipY: !1, angle: 0 }), r.centerObject(u), r.renderAll(), s.resumeHistory(), a || s.saveState(), r.fire("editor:object-reset", {
|
|
2257
|
+
object: u,
|
|
2258
|
+
withoutSave: a,
|
|
2259
|
+
alwaysFitObject: t
|
|
2260
|
+
});
|
|
2327
2261
|
}
|
|
2328
2262
|
}
|
|
2329
2263
|
class jt {
|
|
@@ -2376,14 +2310,14 @@ class jt {
|
|
|
2376
2310
|
a.suspendHistory(), t.setCoords();
|
|
2377
2311
|
var {
|
|
2378
2312
|
left: r,
|
|
2379
|
-
top:
|
|
2380
|
-
width:
|
|
2313
|
+
top: n,
|
|
2314
|
+
width: i,
|
|
2381
2315
|
height: s
|
|
2382
2316
|
} = t.getBoundingRect();
|
|
2383
2317
|
this.overlayMask.set({
|
|
2384
2318
|
left: r,
|
|
2385
|
-
top:
|
|
2386
|
-
width:
|
|
2319
|
+
top: n,
|
|
2320
|
+
width: i,
|
|
2387
2321
|
height: s
|
|
2388
2322
|
}), e.discardActiveObject(), this.editor.layerManager.bringToFront(this.overlayMask, {
|
|
2389
2323
|
withoutSave: !0
|
|
@@ -2426,7 +2360,7 @@ class jt {
|
|
|
2426
2360
|
}
|
|
2427
2361
|
}
|
|
2428
2362
|
}
|
|
2429
|
-
class
|
|
2363
|
+
class $ {
|
|
2430
2364
|
/**
|
|
2431
2365
|
* @param {object} options
|
|
2432
2366
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -2452,10 +2386,13 @@ class K {
|
|
|
2452
2386
|
historyManager: r
|
|
2453
2387
|
} = this.editor;
|
|
2454
2388
|
r.suspendHistory();
|
|
2455
|
-
var
|
|
2456
|
-
|
|
2457
|
-
a.bringObjectToFront(
|
|
2458
|
-
}) : a.bringObjectToFront(
|
|
2389
|
+
var n = e || a.getActiveObject();
|
|
2390
|
+
n && (n.type === "activeselection" ? n.getObjects().forEach((i) => {
|
|
2391
|
+
a.bringObjectToFront(i);
|
|
2392
|
+
}) : a.bringObjectToFront(n), a.renderAll(), r.resumeHistory(), t || r.saveState(), a.fire("editor:object-bring-to-front", {
|
|
2393
|
+
object: n,
|
|
2394
|
+
withoutSave: t
|
|
2395
|
+
}));
|
|
2459
2396
|
}
|
|
2460
2397
|
/**
|
|
2461
2398
|
* Поднять объект на один уровень вверх по оси Z
|
|
@@ -2472,8 +2409,11 @@ class K {
|
|
|
2472
2409
|
historyManager: r
|
|
2473
2410
|
} = this.editor;
|
|
2474
2411
|
r.suspendHistory();
|
|
2475
|
-
var
|
|
2476
|
-
|
|
2412
|
+
var n = e || a.getActiveObject();
|
|
2413
|
+
n && (n.type === "activeselection" ? $._moveSelectionForward(a, n) : a.bringObjectForward(n), a.renderAll(), r.resumeHistory(), t || r.saveState(), a.fire("editor:object-bring-forward", {
|
|
2414
|
+
object: n,
|
|
2415
|
+
withoutSave: t
|
|
2416
|
+
}));
|
|
2477
2417
|
}
|
|
2478
2418
|
/**
|
|
2479
2419
|
* Отправить объект на задний план по оси Z
|
|
@@ -2488,12 +2428,12 @@ class K {
|
|
|
2488
2428
|
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, {
|
|
2489
2429
|
canvas: a,
|
|
2490
2430
|
montageArea: r,
|
|
2491
|
-
historyManager:
|
|
2431
|
+
historyManager: n,
|
|
2492
2432
|
interactionBlocker: {
|
|
2493
|
-
overlayMask:
|
|
2433
|
+
overlayMask: i
|
|
2494
2434
|
}
|
|
2495
2435
|
} = this.editor;
|
|
2496
|
-
|
|
2436
|
+
n.suspendHistory();
|
|
2497
2437
|
var s = e || a.getActiveObject();
|
|
2498
2438
|
if (s) {
|
|
2499
2439
|
if (s.type === "activeselection")
|
|
@@ -2501,7 +2441,10 @@ class K {
|
|
|
2501
2441
|
a.sendObjectToBack(c[u]);
|
|
2502
2442
|
else
|
|
2503
2443
|
a.sendObjectToBack(s);
|
|
2504
|
-
a.sendObjectToBack(r), a.sendObjectToBack(
|
|
2444
|
+
a.sendObjectToBack(r), a.sendObjectToBack(i), a.renderAll(), n.resumeHistory(), t || n.saveState(), a.fire("editor:object-send-to-back", {
|
|
2445
|
+
object: s,
|
|
2446
|
+
withoutSave: t
|
|
2447
|
+
});
|
|
2505
2448
|
}
|
|
2506
2449
|
}
|
|
2507
2450
|
/**
|
|
@@ -2516,14 +2459,17 @@ class K {
|
|
|
2516
2459
|
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, {
|
|
2517
2460
|
canvas: a,
|
|
2518
2461
|
montageArea: r,
|
|
2519
|
-
historyManager:
|
|
2462
|
+
historyManager: n,
|
|
2520
2463
|
interactionBlocker: {
|
|
2521
|
-
overlayMask:
|
|
2464
|
+
overlayMask: i
|
|
2522
2465
|
}
|
|
2523
2466
|
} = this.editor;
|
|
2524
|
-
|
|
2467
|
+
n.suspendHistory();
|
|
2525
2468
|
var s = e || a.getActiveObject();
|
|
2526
|
-
s && (s.type === "activeselection" ?
|
|
2469
|
+
s && (s.type === "activeselection" ? $._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", {
|
|
2470
|
+
object: s,
|
|
2471
|
+
withoutSave: t
|
|
2472
|
+
}));
|
|
2527
2473
|
}
|
|
2528
2474
|
/**
|
|
2529
2475
|
* Сдвигает выделенные объекты на один уровень вверх относительно ближайшего верхнего объекта
|
|
@@ -2533,20 +2479,20 @@ class K {
|
|
|
2533
2479
|
* @private
|
|
2534
2480
|
*/
|
|
2535
2481
|
static _moveSelectionForward(e, t) {
|
|
2536
|
-
for (var a = e.getObjects(), r = t.getObjects(),
|
|
2537
|
-
var h = a[
|
|
2538
|
-
if (!r.includes(h) &&
|
|
2539
|
-
return
|
|
2482
|
+
for (var a = e.getObjects(), r = t.getObjects(), n = r.map((l) => a.indexOf(l)), i = -1, s = function(d) {
|
|
2483
|
+
var h = a[d];
|
|
2484
|
+
if (!r.includes(h) && n.some((g) => d > g))
|
|
2485
|
+
return i = d, 1;
|
|
2540
2486
|
}, c = 0; c < a.length && !s(c); c += 1)
|
|
2541
2487
|
;
|
|
2542
|
-
if (
|
|
2543
|
-
var u = r.map((
|
|
2544
|
-
obj:
|
|
2545
|
-
index: a.indexOf(
|
|
2546
|
-
})).sort((
|
|
2547
|
-
u.forEach((
|
|
2548
|
-
var
|
|
2549
|
-
|
|
2488
|
+
if (i !== -1) {
|
|
2489
|
+
var u = r.map((l) => ({
|
|
2490
|
+
obj: l,
|
|
2491
|
+
index: a.indexOf(l)
|
|
2492
|
+
})).sort((l, d) => d.index - l.index);
|
|
2493
|
+
u.forEach((l) => {
|
|
2494
|
+
var d = a.indexOf(l.obj);
|
|
2495
|
+
d < i && (e.moveObjectTo(l.obj, i), i = d);
|
|
2550
2496
|
});
|
|
2551
2497
|
}
|
|
2552
2498
|
}
|
|
@@ -2558,8 +2504,8 @@ class K {
|
|
|
2558
2504
|
* @private
|
|
2559
2505
|
*/
|
|
2560
2506
|
static _moveSelectionBackwards(e, t) {
|
|
2561
|
-
for (var a = e.getObjects(), r = t.getObjects(),
|
|
2562
|
-
e.moveObjectTo(r[
|
|
2507
|
+
for (var a = e.getObjects(), r = t.getObjects(), n = Math.min(...r.map((s) => a.indexOf(s))), i = r.length - 1; i >= 0; i -= 1)
|
|
2508
|
+
e.moveObjectTo(r[i], n - 1);
|
|
2563
2509
|
}
|
|
2564
2510
|
}
|
|
2565
2511
|
class yt {
|
|
@@ -2586,15 +2532,15 @@ class yt {
|
|
|
2586
2532
|
* @param {Object} flags.withoutSelection - Не выделять объект
|
|
2587
2533
|
* @param {Object} flags.withoutAdding - Не добавлять объект в canvas
|
|
2588
2534
|
*/
|
|
2589
|
-
addRectangle(
|
|
2590
|
-
var
|
|
2535
|
+
addRectangle(l = {}, { withoutSelection: c, withoutAdding: u } = {}) {
|
|
2536
|
+
var d = l, {
|
|
2591
2537
|
id: e = `rect-${A()}`,
|
|
2592
2538
|
left: t,
|
|
2593
2539
|
top: a,
|
|
2594
2540
|
width: r = 100,
|
|
2595
|
-
height:
|
|
2596
|
-
fill:
|
|
2597
|
-
} =
|
|
2541
|
+
height: n = 100,
|
|
2542
|
+
fill: i = "blue"
|
|
2543
|
+
} = d, s = X(d, [
|
|
2598
2544
|
"id",
|
|
2599
2545
|
"left",
|
|
2600
2546
|
"top",
|
|
@@ -2607,8 +2553,8 @@ class yt {
|
|
|
2607
2553
|
left: t,
|
|
2608
2554
|
top: a,
|
|
2609
2555
|
width: r,
|
|
2610
|
-
height:
|
|
2611
|
-
fill:
|
|
2556
|
+
height: n,
|
|
2557
|
+
fill: i
|
|
2612
2558
|
}, s));
|
|
2613
2559
|
return !t && !a && h.centerObject(g), u || (h.add(g), c || h.setActiveObject(g), h.renderAll()), g;
|
|
2614
2560
|
}
|
|
@@ -2629,27 +2575,27 @@ class yt {
|
|
|
2629
2575
|
* @param {Object} flags.withoutAdding - Не добавлять объект в canvas
|
|
2630
2576
|
*/
|
|
2631
2577
|
addCircle(u = {}, { withoutSelection: s, withoutAdding: c } = {}) {
|
|
2632
|
-
var
|
|
2578
|
+
var l = u, {
|
|
2633
2579
|
id: e = `circle-${A()}`,
|
|
2634
2580
|
left: t,
|
|
2635
2581
|
top: a,
|
|
2636
2582
|
radius: r = 50,
|
|
2637
|
-
fill:
|
|
2638
|
-
} =
|
|
2583
|
+
fill: n = "green"
|
|
2584
|
+
} = l, i = X(l, [
|
|
2639
2585
|
"id",
|
|
2640
2586
|
"left",
|
|
2641
2587
|
"top",
|
|
2642
2588
|
"radius",
|
|
2643
2589
|
"fill"
|
|
2644
2590
|
]);
|
|
2645
|
-
const { canvas:
|
|
2591
|
+
const { canvas: d } = this.editor, h = new Be(C({
|
|
2646
2592
|
id: e,
|
|
2647
2593
|
left: t,
|
|
2648
2594
|
top: a,
|
|
2649
|
-
fill:
|
|
2595
|
+
fill: n,
|
|
2650
2596
|
radius: r
|
|
2651
|
-
},
|
|
2652
|
-
return !t && !a &&
|
|
2597
|
+
}, i));
|
|
2598
|
+
return !t && !a && d.centerObject(h), c || (d.add(h), s || d.setActiveObject(h), d.renderAll()), h;
|
|
2653
2599
|
}
|
|
2654
2600
|
/**
|
|
2655
2601
|
* Добавление треугольника
|
|
@@ -2668,15 +2614,15 @@ class yt {
|
|
|
2668
2614
|
* @param {Object} flags.withoutSelection - Не выделять объект
|
|
2669
2615
|
* @param {Object} flags.withoutAdding - Не добавлять объект в canvas
|
|
2670
2616
|
*/
|
|
2671
|
-
addTriangle(
|
|
2672
|
-
var
|
|
2617
|
+
addTriangle(l = {}, { withoutSelection: c, withoutAdding: u } = {}) {
|
|
2618
|
+
var d = l, {
|
|
2673
2619
|
id: e = `triangle-${A()}`,
|
|
2674
2620
|
left: t,
|
|
2675
2621
|
top: a,
|
|
2676
2622
|
width: r = 100,
|
|
2677
|
-
height:
|
|
2678
|
-
fill:
|
|
2679
|
-
} =
|
|
2623
|
+
height: n = 100,
|
|
2624
|
+
fill: i = "yellow"
|
|
2625
|
+
} = d, s = X(d, [
|
|
2680
2626
|
"id",
|
|
2681
2627
|
"left",
|
|
2682
2628
|
"top",
|
|
@@ -2688,9 +2634,9 @@ class yt {
|
|
|
2688
2634
|
id: e,
|
|
2689
2635
|
left: t,
|
|
2690
2636
|
top: a,
|
|
2691
|
-
fill:
|
|
2637
|
+
fill: i,
|
|
2692
2638
|
width: r,
|
|
2693
|
-
height:
|
|
2639
|
+
height: n
|
|
2694
2640
|
}, s));
|
|
2695
2641
|
return !t && !a && h.centerObject(g), u || (h.add(g), c || h.setActiveObject(g), h.renderAll()), g;
|
|
2696
2642
|
}
|
|
@@ -2729,11 +2675,11 @@ class pt {
|
|
|
2729
2675
|
});
|
|
2730
2676
|
}), this._cloneAndFire(e, a);
|
|
2731
2677
|
}
|
|
2732
|
-
const
|
|
2678
|
+
const n = a.toCanvasElement().toDataURL(), i = n.slice(5).split(";")[0], s = n.split(",")[1], c = atob(s), u = new Uint8Array(c.length);
|
|
2733
2679
|
for (let h = 0; h < c.length; h++)
|
|
2734
2680
|
u[h] = c.charCodeAt(h);
|
|
2735
|
-
const
|
|
2736
|
-
navigator.clipboard.write([
|
|
2681
|
+
const l = new Blob([u.buffer], { type: i }), d = new ClipboardItem({ [i]: l });
|
|
2682
|
+
navigator.clipboard.write([d]).catch((h) => {
|
|
2737
2683
|
t.emitWarning({
|
|
2738
2684
|
origin: "ClipboardManager",
|
|
2739
2685
|
method: "copy",
|
|
@@ -2767,8 +2713,8 @@ class pt {
|
|
|
2767
2713
|
* @param {Array} event.clipboardData.items — элементы буфера обмена
|
|
2768
2714
|
*/
|
|
2769
2715
|
handlePasteEvent({ clipboardData: e }) {
|
|
2770
|
-
var
|
|
2771
|
-
if (!((
|
|
2716
|
+
var i;
|
|
2717
|
+
if (!((i = e == null ? void 0 : e.items) != null && i.length)) return;
|
|
2772
2718
|
const { imageManager: t } = this.editor, { items: a } = e, r = a[a.length - 1];
|
|
2773
2719
|
if (r.type !== "text/html") {
|
|
2774
2720
|
const s = r.getAsFile();
|
|
@@ -2779,9 +2725,9 @@ class pt {
|
|
|
2779
2725
|
}, c.readAsDataURL(s);
|
|
2780
2726
|
return;
|
|
2781
2727
|
}
|
|
2782
|
-
const
|
|
2783
|
-
if (
|
|
2784
|
-
const u = new DOMParser().parseFromString(
|
|
2728
|
+
const n = e.getData("text/html");
|
|
2729
|
+
if (n) {
|
|
2730
|
+
const u = new DOMParser().parseFromString(n, "text/html").querySelector("img");
|
|
2785
2731
|
if (u != null && u.src) {
|
|
2786
2732
|
t.importImage({ source: u.src });
|
|
2787
2733
|
return;
|
|
@@ -2803,7 +2749,7 @@ class pt {
|
|
|
2803
2749
|
left: t.left + 10,
|
|
2804
2750
|
top: t.top + 10,
|
|
2805
2751
|
evented: !0
|
|
2806
|
-
}), t instanceof
|
|
2752
|
+
}), t instanceof R ? (t.canvas = e, t.forEachObject((a) => {
|
|
2807
2753
|
e.add(a);
|
|
2808
2754
|
})) : e.add(t), e.setActiveObject(t), e.requestRenderAll(), e.fire("editor:object-pasted", { object: t });
|
|
2809
2755
|
});
|
|
@@ -2835,9 +2781,9 @@ class bt {
|
|
|
2835
2781
|
withoutSave: a
|
|
2836
2782
|
} = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, {
|
|
2837
2783
|
canvas: r,
|
|
2838
|
-
historyManager:
|
|
2839
|
-
} = this.editor,
|
|
2840
|
-
if (!(!
|
|
2784
|
+
historyManager: n
|
|
2785
|
+
} = this.editor, i = e || r.getActiveObject();
|
|
2786
|
+
if (!(!i || i.locked)) {
|
|
2841
2787
|
var s = {
|
|
2842
2788
|
lockMovementX: !0,
|
|
2843
2789
|
lockMovementY: !0,
|
|
@@ -2848,12 +2794,14 @@ class bt {
|
|
|
2848
2794
|
lockSkewingY: !0,
|
|
2849
2795
|
locked: !0
|
|
2850
2796
|
};
|
|
2851
|
-
|
|
2852
|
-
var c = !t && ["activeselection", "group"].includes(
|
|
2853
|
-
c &&
|
|
2797
|
+
i.set(s);
|
|
2798
|
+
var c = !t && ["activeselection", "group"].includes(i.type);
|
|
2799
|
+
c && i.getObjects().forEach((u) => {
|
|
2854
2800
|
u.set(s);
|
|
2855
|
-
}), r.renderAll(), a ||
|
|
2856
|
-
object:
|
|
2801
|
+
}), r.renderAll(), a || n.saveState(), r.fire("editor:object-locked", {
|
|
2802
|
+
object: i,
|
|
2803
|
+
skipInnerObjects: t,
|
|
2804
|
+
withoutSave: a
|
|
2857
2805
|
});
|
|
2858
2806
|
}
|
|
2859
2807
|
}
|
|
@@ -2872,9 +2820,9 @@ class bt {
|
|
|
2872
2820
|
} = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, {
|
|
2873
2821
|
canvas: a,
|
|
2874
2822
|
historyManager: r
|
|
2875
|
-
} = this.editor,
|
|
2876
|
-
if (
|
|
2877
|
-
var
|
|
2823
|
+
} = this.editor, n = e || a.getActiveObject();
|
|
2824
|
+
if (n) {
|
|
2825
|
+
var i = {
|
|
2878
2826
|
lockMovementX: !1,
|
|
2879
2827
|
lockMovementY: !1,
|
|
2880
2828
|
lockRotation: !1,
|
|
@@ -2884,10 +2832,11 @@ class bt {
|
|
|
2884
2832
|
lockSkewingY: !1,
|
|
2885
2833
|
locked: !1
|
|
2886
2834
|
};
|
|
2887
|
-
|
|
2888
|
-
s.set(
|
|
2835
|
+
n.set(i), ["activeselection", "group"].includes(n.type) && n.getObjects().forEach((s) => {
|
|
2836
|
+
s.set(i);
|
|
2889
2837
|
}), a.renderAll(), t || r.saveState(), a.fire("editor:object-unlocked", {
|
|
2890
|
-
object:
|
|
2838
|
+
object: n,
|
|
2839
|
+
withoutSave: t
|
|
2891
2840
|
});
|
|
2892
2841
|
}
|
|
2893
2842
|
}
|
|
@@ -2919,11 +2868,11 @@ class It {
|
|
|
2919
2868
|
historyManager: r
|
|
2920
2869
|
} = this.editor;
|
|
2921
2870
|
r.suspendHistory();
|
|
2922
|
-
var
|
|
2923
|
-
if (
|
|
2924
|
-
var
|
|
2925
|
-
|
|
2926
|
-
object:
|
|
2871
|
+
var n = e || a.getActiveObject();
|
|
2872
|
+
if (n && n.type === "activeselection") {
|
|
2873
|
+
var i = n.getObjects(), s = new ze(i);
|
|
2874
|
+
i.forEach((c) => a.remove(c)), s.set("id", "".concat(s.type, "-").concat(A())), a.add(s), a.setActiveObject(s), a.renderAll(), r.resumeHistory(), t || r.saveState(), a.fire("editor:objects-grouped", {
|
|
2875
|
+
object: n,
|
|
2927
2876
|
group: s,
|
|
2928
2877
|
withoutSave: t
|
|
2929
2878
|
});
|
|
@@ -2945,15 +2894,15 @@ class It {
|
|
|
2945
2894
|
historyManager: r
|
|
2946
2895
|
} = this.editor;
|
|
2947
2896
|
r.suspendHistory();
|
|
2948
|
-
var
|
|
2949
|
-
if (!(!
|
|
2950
|
-
var
|
|
2951
|
-
a.remove(
|
|
2952
|
-
var s = new
|
|
2897
|
+
var n = e || a.getActiveObject();
|
|
2898
|
+
if (!(!n || n.type !== "group")) {
|
|
2899
|
+
var i = n.removeAll();
|
|
2900
|
+
a.remove(n), i.forEach((c) => a.add(c));
|
|
2901
|
+
var s = new R(i, {
|
|
2953
2902
|
canvas: a
|
|
2954
2903
|
});
|
|
2955
2904
|
a.setActiveObject(s), a.renderAll(), r.resumeHistory(), t || r.saveState(), a.fire("editor:objects-ungrouped", {
|
|
2956
|
-
object:
|
|
2905
|
+
object: n,
|
|
2957
2906
|
selection: s,
|
|
2958
2907
|
withoutSave: t
|
|
2959
2908
|
});
|
|
@@ -2982,15 +2931,15 @@ class At {
|
|
|
2982
2931
|
objectLockManager: a
|
|
2983
2932
|
} = this.editor;
|
|
2984
2933
|
e.discardActiveObject();
|
|
2985
|
-
var r = t.getObjects(),
|
|
2934
|
+
var r = t.getObjects(), n = r.some((s) => s.locked), i = r.length > 1 ? new R(t.getObjects(), {
|
|
2986
2935
|
canvas: e
|
|
2987
2936
|
}) : r[0];
|
|
2988
|
-
|
|
2989
|
-
object:
|
|
2937
|
+
n && a.lockObject({
|
|
2938
|
+
object: i,
|
|
2990
2939
|
skipInnerObjects: !0,
|
|
2991
2940
|
withoutSave: !0
|
|
2992
|
-
}), e.setActiveObject(
|
|
2993
|
-
selected:
|
|
2941
|
+
}), e.setActiveObject(i), e.requestRenderAll(), e.fire("editor:all-objects-selected", {
|
|
2942
|
+
selected: i
|
|
2994
2943
|
});
|
|
2995
2944
|
}
|
|
2996
2945
|
}
|
|
@@ -3019,16 +2968,16 @@ class St {
|
|
|
3019
2968
|
} = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, {
|
|
3020
2969
|
canvas: a,
|
|
3021
2970
|
historyManager: r,
|
|
3022
|
-
groupingManager:
|
|
3023
|
-
} = this.editor,
|
|
3024
|
-
|
|
2971
|
+
groupingManager: n
|
|
2972
|
+
} = this.editor, i = (e || a.getActiveObjects()).filter((s) => !s.locked);
|
|
2973
|
+
i != null && i.length && (r.suspendHistory(), i.forEach((s) => {
|
|
3025
2974
|
if (s.type === "group" && s.format !== "svg") {
|
|
3026
|
-
|
|
2975
|
+
n.ungroup(s), this.deleteSelectedObjects();
|
|
3027
2976
|
return;
|
|
3028
2977
|
}
|
|
3029
2978
|
a.remove(s);
|
|
3030
2979
|
}), a.discardActiveObject(), a.renderAll(), r.resumeHistory(), t || r.saveState(), a.fire("editor:objects-deleted", {
|
|
3031
|
-
objects:
|
|
2980
|
+
objects: i,
|
|
3032
2981
|
withoutSave: t
|
|
3033
2982
|
}));
|
|
3034
2983
|
}
|
|
@@ -3082,7 +3031,7 @@ var Ct = {
|
|
|
3082
3031
|
CLONE_FAILED: "CLONE_FAILED"
|
|
3083
3032
|
}
|
|
3084
3033
|
};
|
|
3085
|
-
class
|
|
3034
|
+
class q {
|
|
3086
3035
|
constructor({ editor: e }) {
|
|
3087
3036
|
this._buffer = [], this.editor = e;
|
|
3088
3037
|
}
|
|
@@ -3102,19 +3051,19 @@ class $ {
|
|
|
3102
3051
|
* @param {string} [options.message] — текст ошибки (опционально, если не передан, то используется код ошибки)
|
|
3103
3052
|
* @fires editor:error
|
|
3104
3053
|
*/
|
|
3105
|
-
emitError({ origin: e = "ImageEditor", method: t = "Unknown Method", code: a, data: r, message:
|
|
3106
|
-
if (
|
|
3054
|
+
emitError({ origin: e = "ImageEditor", method: t = "Unknown Method", code: a, data: r, message: n }) {
|
|
3055
|
+
if (!q.isValidErrorCode(a)) {
|
|
3107
3056
|
console.warn("Неизвестный код ошибки: ", { code: a, origin: e, method: t });
|
|
3108
3057
|
return;
|
|
3109
3058
|
}
|
|
3110
3059
|
if (!a) return;
|
|
3111
|
-
const
|
|
3112
|
-
console.error(`${e}. ${t}. ${a}. ${
|
|
3060
|
+
const i = n || a;
|
|
3061
|
+
console.error(`${e}. ${t}. ${a}. ${i}`, r);
|
|
3113
3062
|
const s = {
|
|
3114
3063
|
code: a,
|
|
3115
3064
|
origin: e,
|
|
3116
3065
|
method: t,
|
|
3117
|
-
message:
|
|
3066
|
+
message: i,
|
|
3118
3067
|
data: r
|
|
3119
3068
|
};
|
|
3120
3069
|
this._buffer.push(C({
|
|
@@ -3131,19 +3080,19 @@ class $ {
|
|
|
3131
3080
|
* @param {string} [options.message] — текст предупреждения (опционально, если не передан, то используется код предупреждения)
|
|
3132
3081
|
* @fires editor:warning
|
|
3133
3082
|
*/
|
|
3134
|
-
emitWarning({ origin: e = "ImageEditor", method: t = "Unknown Method", code: a, message: r, data:
|
|
3135
|
-
if (
|
|
3083
|
+
emitWarning({ origin: e = "ImageEditor", method: t = "Unknown Method", code: a, message: r, data: n }) {
|
|
3084
|
+
if (!q.isValidErrorCode(a)) {
|
|
3136
3085
|
console.warn("Неизвестный код предупреждения: ", { code: a, origin: e, method: t });
|
|
3137
3086
|
return;
|
|
3138
3087
|
}
|
|
3139
|
-
const
|
|
3140
|
-
console.warn(`${e}. ${t}. ${a}. ${
|
|
3088
|
+
const i = r || a;
|
|
3089
|
+
console.warn(`${e}. ${t}. ${a}. ${i}`, n);
|
|
3141
3090
|
const s = {
|
|
3142
3091
|
code: a,
|
|
3143
3092
|
origin: e,
|
|
3144
3093
|
method: t,
|
|
3145
|
-
message:
|
|
3146
|
-
data:
|
|
3094
|
+
message: i,
|
|
3095
|
+
data: n
|
|
3147
3096
|
};
|
|
3148
3097
|
this._buffer.push(C({
|
|
3149
3098
|
type: "editor:warning"
|
|
@@ -3153,16 +3102,14 @@ class $ {
|
|
|
3153
3102
|
return e ? Object.values(Ct).some((t) => Object.values(t).includes(e)) : !1;
|
|
3154
3103
|
}
|
|
3155
3104
|
}
|
|
3156
|
-
class
|
|
3105
|
+
class de {
|
|
3157
3106
|
/**
|
|
3158
3107
|
* Конструктор класса ImageEditor.
|
|
3159
3108
|
* @param {string} canvasId - идентификатор канваса, в котором будет создан редактор
|
|
3160
|
-
* @param {
|
|
3109
|
+
* @param {CanvasOptions} options - опции и настройки редактора
|
|
3161
3110
|
*/
|
|
3162
3111
|
constructor(e, t) {
|
|
3163
|
-
this.options = t;
|
|
3164
|
-
const { defaultScale: a, minZoom: r, maxZoom: i } = t;
|
|
3165
|
-
this.containerId = e, this.editorId = `${e}-${A()}`, this.clipboard = null, this.defaultZoom = a, this.minZoom = r || ht, this.maxZoom = i || gt, this.init();
|
|
3112
|
+
this.options = t, this.containerId = e, this.editorId = `${e}-${A()}`, this.clipboard = null, this.init();
|
|
3166
3113
|
}
|
|
3167
3114
|
init() {
|
|
3168
3115
|
return Q(this, null, function* () {
|
|
@@ -3171,23 +3118,23 @@ class ue {
|
|
|
3171
3118
|
editorContainerHeight: t,
|
|
3172
3119
|
canvasWrapperWidth: a,
|
|
3173
3120
|
canvasWrapperHeight: r,
|
|
3174
|
-
canvasCSSWidth:
|
|
3175
|
-
canvasCSSHeight:
|
|
3121
|
+
canvasCSSWidth: n,
|
|
3122
|
+
canvasCSSHeight: i,
|
|
3176
3123
|
initialImage: s,
|
|
3177
3124
|
initialStateJSON: c,
|
|
3178
3125
|
scaleType: u,
|
|
3179
|
-
_onReadyCallback:
|
|
3126
|
+
_onReadyCallback: l
|
|
3180
3127
|
} = this.options;
|
|
3181
|
-
if (Ke.apply(), this.canvas = new Ue(this.containerId, this.options), this.moduleLoader = new
|
|
3128
|
+
if (Ke.apply(), this.canvas = new Ue(this.containerId, this.options), this.moduleLoader = new Re(), this.workerManager = new Pe(), this.errorManager = new q({ editor: this }), this.historyManager = new lt({ editor: this }), this.toolbar = new dt({ editor: this }), this.transformManager = new ft({ editor: this }), this.canvasManager = new Mt({ editor: this }), this.imageManager = new D({ editor: this }), this.layerManager = new $({ editor: this }), this.shapeManager = new yt({ editor: this }), this.interactionBlocker = new jt({ editor: this }), this.clipboardManager = new pt({ editor: this }), this.objectLockManager = new bt({ editor: this }), this.groupingManager = new It({ editor: this }), this.selectionManager = new At({ editor: this }), this.deletionManager = new St({ editor: this }), this._createMontageArea(), this._createClippingArea(), this.listeners = new H({ editor: this, options: this.options }), this.canvasManager.setEditorContainerWidth(e), this.canvasManager.setEditorContainerHeight(t), this.canvasManager.setCanvasWrapperWidth(a), this.canvasManager.setCanvasWrapperHeight(r), this.canvasManager.setCanvasCSSWidth(n), this.canvasManager.setCanvasCSSHeight(i), s != null && s.source) {
|
|
3182
3129
|
const {
|
|
3183
|
-
source:
|
|
3130
|
+
source: d,
|
|
3184
3131
|
scale: h = `image-${u}`,
|
|
3185
3132
|
withoutSave: g = !0
|
|
3186
3133
|
} = s;
|
|
3187
|
-
yield this.imageManager.importImage({ source:
|
|
3134
|
+
yield this.imageManager.importImage({ source: d, scale: h, withoutSave: g });
|
|
3188
3135
|
} else
|
|
3189
3136
|
this.canvasManager.setDefaultScale({ withoutSave: !0 });
|
|
3190
|
-
c && this.historyManager.loadStateFromFullState(c), this.historyManager.saveState(), console.log("editor:ready"), this.canvas.fire("editor:ready", this), typeof
|
|
3137
|
+
c && this.historyManager.loadStateFromFullState(c), this.historyManager.saveState(), console.log("editor:ready"), this.canvas.fire("editor:ready", this), typeof l == "function" && l(this);
|
|
3191
3138
|
});
|
|
3192
3139
|
}
|
|
3193
3140
|
_createMontageArea() {
|
|
@@ -3198,7 +3145,7 @@ class ue {
|
|
|
3198
3145
|
this.montageArea = this.shapeManager.addRectangle({
|
|
3199
3146
|
width: e,
|
|
3200
3147
|
height: t,
|
|
3201
|
-
fill:
|
|
3148
|
+
fill: de._createMosaicPattern(),
|
|
3202
3149
|
stroke: null,
|
|
3203
3150
|
strokeWidth: 0,
|
|
3204
3151
|
selectable: !1,
|
|
@@ -3341,10 +3288,10 @@ function Et(o, e = {}) {
|
|
|
3341
3288
|
if (!a)
|
|
3342
3289
|
return Promise.reject(new Error(`Контейнер с ID "${o}" не найден.`));
|
|
3343
3290
|
const r = document.createElement("canvas");
|
|
3344
|
-
return r.id = `${o}-canvas`, a.appendChild(r), t.editorContainer = a, new Promise((
|
|
3345
|
-
t._onReadyCallback =
|
|
3346
|
-
const
|
|
3347
|
-
window[o] =
|
|
3291
|
+
return r.id = `${o}-canvas`, a.appendChild(r), t.editorContainer = a, new Promise((n) => {
|
|
3292
|
+
t._onReadyCallback = n;
|
|
3293
|
+
const i = new de(r.id, t);
|
|
3294
|
+
window[o] = i;
|
|
3348
3295
|
});
|
|
3349
3296
|
}
|
|
3350
3297
|
export {
|