@anu3ev/fabric-image-editor 0.1.42 → 0.1.44
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 +722 -807
- package/package.json +4 -2
package/dist/main.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
var
|
|
1
|
+
var we = Object.defineProperty;
|
|
2
2
|
var G = Object.getOwnPropertySymbols;
|
|
3
3
|
var fe = Object.prototype.hasOwnProperty, je = Object.prototype.propertyIsEnumerable;
|
|
4
|
-
var
|
|
4
|
+
var me = (o, e, t) => e in o ? we(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
|
-
fe.call(e, t) &&
|
|
6
|
+
fe.call(e, t) && me(o, t, e[t]);
|
|
7
7
|
if (G)
|
|
8
8
|
for (var t of G(e))
|
|
9
|
-
je.call(e, t) &&
|
|
9
|
+
je.call(e, t) && me(o, t, e[t]);
|
|
10
10
|
return o;
|
|
11
11
|
};
|
|
12
12
|
var X = (o, e) => {
|
|
@@ -18,30 +18,30 @@ var X = (o, e) => {
|
|
|
18
18
|
e.indexOf(a) < 0 && je.call(o, a) && (t[a] = o[a]);
|
|
19
19
|
return t;
|
|
20
20
|
};
|
|
21
|
-
var Q = (o, e, t) => new Promise((a,
|
|
22
|
-
var
|
|
21
|
+
var Q = (o, e, t) => new Promise((a, n) => {
|
|
22
|
+
var i = (c) => {
|
|
23
23
|
try {
|
|
24
|
-
|
|
24
|
+
r(t.next(c));
|
|
25
25
|
} catch (u) {
|
|
26
|
-
|
|
26
|
+
n(u);
|
|
27
27
|
}
|
|
28
|
-
},
|
|
28
|
+
}, s = (c) => {
|
|
29
29
|
try {
|
|
30
|
-
|
|
30
|
+
r(t.throw(c));
|
|
31
31
|
} catch (u) {
|
|
32
|
-
|
|
32
|
+
n(u);
|
|
33
33
|
}
|
|
34
|
-
},
|
|
35
|
-
|
|
34
|
+
}, r = (c) => c.done ? a(c.value) : Promise.resolve(c.value).then(i, s);
|
|
35
|
+
r((t = t.apply(o, e)).next());
|
|
36
36
|
});
|
|
37
|
-
import { ActiveSelection as
|
|
38
|
-
import { create as
|
|
39
|
-
var
|
|
37
|
+
import { ActiveSelection as T, 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 _e } from "fabric";
|
|
38
|
+
import { create as He } from "jsondiffpatch";
|
|
39
|
+
var Ye = "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 += Ye[a[e] & 63];
|
|
42
42
|
return t;
|
|
43
43
|
};
|
|
44
|
-
class
|
|
44
|
+
class R {
|
|
45
45
|
/**
|
|
46
46
|
* Конструктор принимает редактор и опции.
|
|
47
47
|
* @param {Object} params
|
|
@@ -58,7 +58,7 @@ class H {
|
|
|
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 = R.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 = R.debounce(this.handleObjectModifiedHistory.bind(this), 300), this.handleObjectRotatingHistoryBound = R.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
|
* Инициализация всех обработчиков согласно опциям.
|
|
@@ -68,15 +68,15 @@ class H {
|
|
|
68
68
|
adaptCanvasToContainerOnResize: e,
|
|
69
69
|
canvasDragging: t,
|
|
70
70
|
mouseWheelZooming: a,
|
|
71
|
-
bringToFrontOnSelection:
|
|
72
|
-
copyObjectsByHotkey:
|
|
73
|
-
pasteImageFromClipboard:
|
|
74
|
-
undoRedoByHotKeys:
|
|
71
|
+
bringToFrontOnSelection: n,
|
|
72
|
+
copyObjectsByHotkey: i,
|
|
73
|
+
pasteImageFromClipboard: s,
|
|
74
|
+
undoRedoByHotKeys: r,
|
|
75
75
|
selectAllByHotkey: c,
|
|
76
76
|
deleteObjectsByHotkey: u,
|
|
77
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),
|
|
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), n && (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 }), i && document.addEventListener("keydown", this.handleCopyEventBound, { capture: !0 }), s && document.addEventListener("paste", this.handlePasteEventBound, { capture: !0 }), r && (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,20 +85,20 @@ class H {
|
|
|
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
|
|
90
|
-
if (
|
|
88
|
+
if (!(e != null && e.length) || !(t instanceof MouseEvent) || e.length === 1 || !e.some((s) => s.locked)) return;
|
|
89
|
+
const n = e.filter((s) => !s.locked);
|
|
90
|
+
if (n.length === 0) {
|
|
91
91
|
this.canvas.discardActiveObject();
|
|
92
92
|
return;
|
|
93
93
|
}
|
|
94
|
-
if (
|
|
95
|
-
this.canvas.setActiveObject(
|
|
94
|
+
if (n.length === 1) {
|
|
95
|
+
this.canvas.setActiveObject(n[0]);
|
|
96
96
|
return;
|
|
97
97
|
}
|
|
98
|
-
const
|
|
98
|
+
const i = new T(n, {
|
|
99
99
|
canvas: this.canvas
|
|
100
100
|
});
|
|
101
|
-
this.canvas.setActiveObject(
|
|
101
|
+
this.canvas.setActiveObject(i), this.canvas.requestRenderAll();
|
|
102
102
|
}
|
|
103
103
|
/**
|
|
104
104
|
* Обработчики для сохранения состояния редактора в истории.
|
|
@@ -139,8 +139,8 @@ class H {
|
|
|
139
139
|
* @param {String} event.code — код клавиши
|
|
140
140
|
*/
|
|
141
141
|
handleCopyEvent(e) {
|
|
142
|
-
const { ctrlKey: t, metaKey: a, code:
|
|
143
|
-
!t && !a ||
|
|
142
|
+
const { ctrlKey: t, metaKey: a, code: n } = e;
|
|
143
|
+
!t && !a || n !== "KeyC" || (e.preventDefault(), this.editor.clipboardManager.copy());
|
|
144
144
|
}
|
|
145
145
|
/**
|
|
146
146
|
* Обработчик вставки объекта или изображения из буфера обмена.
|
|
@@ -158,8 +158,8 @@ class H {
|
|
|
158
158
|
*/
|
|
159
159
|
handleUndoRedoEvent(e) {
|
|
160
160
|
return Q(this, null, function* () {
|
|
161
|
-
const { ctrlKey: t, metaKey: a, code:
|
|
162
|
-
!t && !a ||
|
|
161
|
+
const { ctrlKey: t, metaKey: a, code: n, repeat: i } = e;
|
|
162
|
+
!t && !a || i || !/Mac/i.test(navigator.userAgent) && this.isUndoRedoKeyPressed || (n === "KeyZ" ? (e.preventDefault(), this.isUndoRedoKeyPressed = !0, yield this.editor.historyManager.undo()) : n === "KeyY" && (e.preventDefault(), this.isUndoRedoKeyPressed = !0, yield this.editor.historyManager.redo()));
|
|
163
163
|
});
|
|
164
164
|
}
|
|
165
165
|
/**
|
|
@@ -178,8 +178,8 @@ class H {
|
|
|
178
178
|
* @param {String} event.code — код клавиши
|
|
179
179
|
*/
|
|
180
180
|
handleSelectAllEvent(e) {
|
|
181
|
-
const { ctrlKey: t, metaKey: a, code:
|
|
182
|
-
!t && !a ||
|
|
181
|
+
const { ctrlKey: t, metaKey: a, code: n } = e;
|
|
182
|
+
!t && !a || n !== "KeyA" || (e.preventDefault(), this.editor.selectionManager.selectAll());
|
|
183
183
|
}
|
|
184
184
|
/**
|
|
185
185
|
* Обработчик для удаления объектов (Delete).
|
|
@@ -197,12 +197,12 @@ class H {
|
|
|
197
197
|
*/
|
|
198
198
|
handleSpaceKeyDown(e) {
|
|
199
199
|
if (e.code !== "Space") return;
|
|
200
|
-
const { canvas: t, editor: a, isSpacePressed:
|
|
201
|
-
|
|
200
|
+
const { canvas: t, editor: a, isSpacePressed: n, isDragging: i } = this;
|
|
201
|
+
n || i || (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((s) => {
|
|
205
|
+
s.set({
|
|
206
206
|
selectable: !1,
|
|
207
207
|
evented: !1
|
|
208
208
|
});
|
|
@@ -296,10 +296,9 @@ class H {
|
|
|
296
296
|
*/
|
|
297
297
|
static debounce(e, t) {
|
|
298
298
|
let a = null;
|
|
299
|
-
return function(...
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
e.apply(n, r);
|
|
299
|
+
return function(...n) {
|
|
300
|
+
a !== null && clearTimeout(a), a = setTimeout(() => {
|
|
301
|
+
e.apply(this, n);
|
|
303
302
|
}, t);
|
|
304
303
|
};
|
|
305
304
|
}
|
|
@@ -348,11 +347,11 @@ class Pe {
|
|
|
348
347
|
data: t
|
|
349
348
|
} = e, {
|
|
350
349
|
requestId: a,
|
|
351
|
-
success:
|
|
352
|
-
data:
|
|
353
|
-
error:
|
|
354
|
-
} = t,
|
|
355
|
-
|
|
350
|
+
success: n,
|
|
351
|
+
data: i,
|
|
352
|
+
error: s
|
|
353
|
+
} = t, r = this._callbacks.get(a);
|
|
354
|
+
r && (n ? r.resolve(i) : r.reject(new Error(s)), this._callbacks.delete(a));
|
|
356
355
|
}
|
|
357
356
|
/**
|
|
358
357
|
* Универсальный метод отправки команды в воркер
|
|
@@ -362,15 +361,15 @@ class Pe {
|
|
|
362
361
|
* @returns {Promise<any>}
|
|
363
362
|
*/
|
|
364
363
|
post(e, t) {
|
|
365
|
-
var a = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : [],
|
|
366
|
-
return new Promise((
|
|
367
|
-
this._callbacks.set(
|
|
368
|
-
resolve:
|
|
369
|
-
reject:
|
|
364
|
+
var a = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : [], n = "".concat(e, ":").concat(A(8));
|
|
365
|
+
return new Promise((i, s) => {
|
|
366
|
+
this._callbacks.set(n, {
|
|
367
|
+
resolve: i,
|
|
368
|
+
reject: s
|
|
370
369
|
}), this.worker.postMessage({
|
|
371
370
|
action: e,
|
|
372
371
|
payload: t,
|
|
373
|
-
requestId:
|
|
372
|
+
requestId: n
|
|
374
373
|
}, a);
|
|
375
374
|
});
|
|
376
375
|
}
|
|
@@ -381,26 +380,26 @@ class Pe {
|
|
|
381
380
|
this.worker.terminate();
|
|
382
381
|
}
|
|
383
382
|
}
|
|
384
|
-
|
|
385
|
-
function J(o, e, t, a,
|
|
386
|
-
|
|
387
|
-
o.save(), o.translate(e, t), o.rotate(P.degreesToRadians(
|
|
383
|
+
const I = 12, We = 2, ae = 8, ne = 20, Fe = 100, ie = 20, se = 8, Ve = 100, re = 32, oe = 1, Ge = "#2B2D33", ce = "#3D8BF4", ue = "#FFFFFF";
|
|
384
|
+
function J(o, e, t, a, n) {
|
|
385
|
+
const i = I, s = We;
|
|
386
|
+
o.save(), o.translate(e, t), o.rotate(P.degreesToRadians(n.angle)), o.fillStyle = ue, o.strokeStyle = ce, o.lineWidth = oe, o.beginPath(), o.roundRect(-12 / 2, -12 / 2, i, i, s), o.fill(), o.stroke(), o.restore();
|
|
388
387
|
}
|
|
389
|
-
function ye(o, e, t, a,
|
|
390
|
-
|
|
391
|
-
o.save(), o.translate(e, t), o.rotate(P.degreesToRadians(
|
|
388
|
+
function ye(o, e, t, a, n) {
|
|
389
|
+
const i = ae, s = ne, r = Fe;
|
|
390
|
+
o.save(), o.translate(e, t), o.rotate(P.degreesToRadians(n.angle)), o.fillStyle = ue, o.strokeStyle = ce, o.lineWidth = oe, o.beginPath(), o.roundRect(-8 / 2, -20 / 2, i, s, r), o.fill(), o.stroke(), o.restore();
|
|
392
391
|
}
|
|
393
|
-
function
|
|
394
|
-
|
|
395
|
-
o.save(), o.translate(e, t), o.rotate(P.degreesToRadians(
|
|
392
|
+
function be(o, e, t, a, n) {
|
|
393
|
+
const i = ie, s = se, r = Ve;
|
|
394
|
+
o.save(), o.translate(e, t), o.rotate(P.degreesToRadians(n.angle)), o.fillStyle = ue, o.strokeStyle = ce, o.lineWidth = oe, o.beginPath(), o.roundRect(-20 / 2, -8 / 2, i, s, r), o.fill(), o.stroke(), o.restore();
|
|
396
395
|
}
|
|
397
|
-
|
|
396
|
+
const Xe = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTE4Ljc1IDQuMzc1djMuNzVhLjYyNS42MjUgMCAwIDEtLjYyNS42MjVoLTMuNzVhLjYyNS42MjUgMCAwIDEgMC0xLjI1aDIuMTRsLTIuMDc3LTEuOTAzLS4wMi0uMDE5YTYuMjUgNi4yNSAwIDEgMC0uMTMgOC45NjcuNjI2LjYyNiAwIDAgMSAuODYuOTA5QTcuNDU2IDcuNDU2IDAgMCAxIDEwIDE3LjVoLS4xMDNhNy41IDcuNSAwIDEgMSA1LjM5Ni0xMi44MTJMMTcuNSA2LjcwM1Y0LjM3NWEuNjI1LjYyNSAwIDAgMSAxLjI1IDBaIi8+PC9zdmc+", Ce = new Image();
|
|
398
397
|
Ce.src = Xe;
|
|
399
|
-
function Qe(o, e, t, a,
|
|
400
|
-
|
|
401
|
-
o.save(), o.translate(e, t), o.rotate(P.degreesToRadians(
|
|
398
|
+
function Qe(o, e, t, a, n) {
|
|
399
|
+
const s = re / 2;
|
|
400
|
+
o.save(), o.translate(e, t), o.rotate(P.degreesToRadians(n.angle)), o.fillStyle = Ge, o.beginPath(), o.arc(0, 0, s, 0, 2 * Math.PI), o.fill(), o.drawImage(Ce, -16 / 2, -16 / 2, s, s), o.restore();
|
|
402
401
|
}
|
|
403
|
-
|
|
402
|
+
const Je = {
|
|
404
403
|
// Угловые точки
|
|
405
404
|
tl: {
|
|
406
405
|
render: J,
|
|
@@ -434,84 +433,83 @@ var Je = {
|
|
|
434
433
|
ml: {
|
|
435
434
|
render: ye,
|
|
436
435
|
sizeX: ae,
|
|
437
|
-
sizeY:
|
|
436
|
+
sizeY: ne,
|
|
438
437
|
offsetX: 0,
|
|
439
438
|
offsetY: 0
|
|
440
439
|
},
|
|
441
440
|
mr: {
|
|
442
441
|
render: ye,
|
|
443
442
|
sizeX: ae,
|
|
444
|
-
sizeY:
|
|
443
|
+
sizeY: ne,
|
|
445
444
|
offsetX: 0,
|
|
446
445
|
offsetY: 0
|
|
447
446
|
},
|
|
448
447
|
// Середина горизонталей
|
|
449
448
|
mt: {
|
|
450
|
-
render:
|
|
451
|
-
sizeX:
|
|
452
|
-
sizeY:
|
|
449
|
+
render: be,
|
|
450
|
+
sizeX: ie,
|
|
451
|
+
sizeY: se,
|
|
453
452
|
offsetX: 0,
|
|
454
453
|
offsetY: 0
|
|
455
454
|
},
|
|
456
455
|
mb: {
|
|
457
|
-
render:
|
|
458
|
-
sizeX:
|
|
459
|
-
sizeY:
|
|
456
|
+
render: be,
|
|
457
|
+
sizeX: ie,
|
|
458
|
+
sizeY: se,
|
|
460
459
|
offsetX: 0,
|
|
461
460
|
offsetY: 0
|
|
462
461
|
},
|
|
463
462
|
// Специальный «rotate» контрол
|
|
464
463
|
mtr: {
|
|
465
464
|
render: Qe,
|
|
466
|
-
sizeX:
|
|
467
|
-
sizeY:
|
|
465
|
+
sizeX: re,
|
|
466
|
+
sizeY: re,
|
|
468
467
|
offsetX: 0,
|
|
469
468
|
offsetY: -32
|
|
470
469
|
}
|
|
471
470
|
};
|
|
472
471
|
class Ke {
|
|
473
472
|
static apply() {
|
|
474
|
-
|
|
475
|
-
Object.entries(Je).forEach((t) => {
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
u.canvas.setCursor("grabbing");
|
|
473
|
+
const e = Oe.createObjectDefaultControls();
|
|
474
|
+
Object.entries(Je).forEach(([t, a]) => {
|
|
475
|
+
Object.assign(e[t], {
|
|
476
|
+
render: a.render,
|
|
477
|
+
sizeX: a.sizeX,
|
|
478
|
+
sizeY: a.sizeY,
|
|
479
|
+
offsetX: a.offsetX,
|
|
480
|
+
offsetY: a.offsetY
|
|
481
|
+
}), t === "mtr" && (e[t].cursorStyle = "grab", e[t].mouseDownHandler = (i, s, r, c) => {
|
|
482
|
+
var l;
|
|
483
|
+
(l = s.target.canvas) == null || l.setCursor("grabbing");
|
|
486
484
|
});
|
|
487
485
|
}), Te.ownDefaults.controls = e;
|
|
488
486
|
}
|
|
489
487
|
}
|
|
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+",
|
|
491
|
-
function
|
|
488
|
+
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+", nt = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTIuNSA2LjI1IDcuNSA0LjM3NSA3LjUtNC4zNzVMMTAgMS44NzUgMi41IDYuMjVaIi8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNOS42ODUgMS4zMzVhLjYyNS42MjUgMCAwIDEgLjYzIDBsNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxIDAgMS4wOGwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEgMC0xLjA4bDcuNS00LjM3NVpNMy43NCA2LjI1IDEwIDkuOTAxbDYuMjYtMy42NTFMMTAgMi41OTkgMy43NCA2LjI1WiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNS40IDExLjMzNWEuNjI1LjYyNSAwIDAgMSAuNjMgMEwxMCAxMy42NTFsMy45Ny0yLjMxNmEuNjI1LjYyNSAwIDAgMSAuNjMgMGwzLjIxNSAxLjg3NWEuNjI1LjYyNSAwIDAgMSAwIDEuMDhsLTcuNSA0LjM3NWEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtNy41LTQuMzc1YS42MjUuNjI1IDAgMCAxIDAtMS4wOEw1LjQgMTEuMzM1Wk0zLjc0IDEzLjc1IDEwIDE3LjQwMWw2LjI2LTMuNjUxLTEuOTc0LTEuMTUxLTMuOTcxIDIuMzE2YS42MjUuNjI1IDAgMCAxLS42MyAwbC0zLjk3LTIuMzE2TDMuNzQgMTMuNzVaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01LjQgNy41ODVhLjYyNS42MjUgMCAwIDEgLjYzIDBMMTAgOS45MDFsMy45Ny0yLjMxNmEuNjI1LjYyNSAwIDAgMSAuNjMgMGwzLjIxNSAxLjg3NWEuNjI1LjYyNSAwIDAgMSAwIDEuMDhsLTcuNSA0LjM3NWEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtNy41LTQuMzc1YS42MjUuNjI1IDAgMCAxIDAtMS4wOEw1LjQgNy41ODVaTTMuNzQgMTAgMTAgMTMuNjUxIDE2LjI2IDEwbC0xLjk3NC0xLjE1MS0zLjk3MSAyLjMxNmEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtMy45Ny0yLjMxNkwzLjc0IDEwWiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+", it = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMS45NiAxMy40MzVhLjYyNS42MjUgMCAwIDEgLjg1NS0uMjI1TDEwIDE3LjQwMWw3LjE4NS00LjE5YS42MjUuNjI1IDAgMCAxIC42MyAxLjA3OWwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEtLjIyNS0uODU1Wk05LjY4NSAxLjMzNWEuNjI1LjYyNSAwIDAgMSAuNjMgMGw3LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEgMCAxLjA4bC03LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEtLjYzIDBsLTcuNS00LjM3NWEuNjI1LjYyNSAwIDAgMSAwLTEuMDhsNy41LTQuMzc1Wk0zLjc0IDYuMjUgMTAgOS45MDFsNi4yNi0zLjY1MUwxMCAyLjU5OSAzLjc0IDYuMjVaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Im01LjcxNCAxMS44NzUgNC4yODYgMi41IDQuMjg2LTIuNUwxNy41IDEzLjc1IDEwIDE4LjEyNSAyLjUgMTMuNzVsMy4yMTQtMS44NzVaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01LjQgMTEuMzM1YS42MjUuNjI1IDAgMCAxIC42MyAwTDEwIDEzLjY1MWwzLjk3LTIuMzE2YS42MjUuNjI1IDAgMCAxIC42MyAwbDMuMjE1IDEuODc1YS42MjUuNjI1IDAgMCAxIDAgMS4wOGwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEgMC0xLjA4TDUuNCAxMS4zMzVaTTMuNzQgMTMuNzUgMTAgMTcuNDAxbDYuMjYtMy42NTEtMS45NzQtMS4xNTEtMy45NzEgMi4zMTZhLjYyNS42MjUgMCAwIDEtLjYzIDBsLTMuOTctMi4zMTZMMy43NCAxMy43NVoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTUuNCA3LjU4NWEuNjI1LjYyNSAwIDAgMSAuNjMgMEwxMCA5LjkwMWwzLjk3LTIuMzE2YS42MjUuNjI1IDAgMCAxIC42MyAwbDMuMjE1IDEuODc1YS42MjUuNjI1IDAgMCAxIDAgMS4wOGwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEgMC0xLjA4TDUuNCA3LjU4NVpNMy43NCAxMCAxMCAxMy42NTEgMTYuMjYgMTBsLTEuOTc0LTEuMTUxLTMuOTcxIDIuMzE2YS42MjUuNjI1IDAgMCAxLS42MyAwbC0zLjk3LTIuMzE2TDMuNzQgMTBaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=", st = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI0VDNEU0MCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNOC4xMjUgMS4yNUExLjg3NSAxLjg3NSAwIDAgMCA2LjI1IDMuMTI1di42MjVIMy4xMjVhLjYyNS42MjUgMCAwIDAgMCAxLjI1aC42MjV2MTEuMjVBMS4yNSAxLjI1IDAgMCAwIDUgMTcuNWgxMGExLjI1IDEuMjUgMCAwIDAgMS4yNS0xLjI1VjVoLjYyNWEuNjI1LjYyNSAwIDAgMCAwLTEuMjVIMTMuNzV2LS42MjVhMS44NzUgMS44NzUgMCAwIDAtMS44NzUtMS44NzVoLTMuNzVabTQuMzc1IDIuNXYtLjYyNWEuNjI1LjYyNSAwIDAgMC0uNjI1LS42MjVoLTMuNzVhLjYyNS42MjUgMCAwIDAtLjYyNS42MjV2LjYyNWg1Wk01IDE2LjI1VjVoMTB2MTEuMjVINVpNOC4xMjUgNy41Yy4zNDUgMCAuNjI1LjI4LjYyNS42MjV2NWEuNjI1LjYyNSAwIDEgMS0xLjI1IDB2LTVjMC0uMzQ1LjI4LS42MjUuNjI1LS42MjVabTQuMzc1IDUuNjI1di01YS42MjUuNjI1IDAgMCAwLTEuMjUgMHY1YS42MjUuNjI1IDAgMSAwIDEuMjUgMFoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==";
|
|
489
|
+
function pe(o, e, t, a, n, i, s) {
|
|
492
490
|
try {
|
|
493
|
-
var
|
|
491
|
+
var r = o[i](s), c = r.value;
|
|
494
492
|
} catch (u) {
|
|
495
493
|
return void t(u);
|
|
496
494
|
}
|
|
497
|
-
|
|
495
|
+
r.done ? e(c) : Promise.resolve(c).then(a, n);
|
|
498
496
|
}
|
|
499
|
-
function
|
|
497
|
+
function rt(o) {
|
|
500
498
|
return function() {
|
|
501
499
|
var e = this, t = arguments;
|
|
502
|
-
return new Promise(function(a,
|
|
503
|
-
var
|
|
504
|
-
function i(c) {
|
|
505
|
-
be(n, a, r, i, s, "next", c);
|
|
506
|
-
}
|
|
500
|
+
return new Promise(function(a, n) {
|
|
501
|
+
var i = o.apply(e, t);
|
|
507
502
|
function s(c) {
|
|
508
|
-
|
|
503
|
+
pe(i, a, n, s, r, "next", c);
|
|
504
|
+
}
|
|
505
|
+
function r(c) {
|
|
506
|
+
pe(i, a, n, s, r, "throw", c);
|
|
509
507
|
}
|
|
510
|
-
|
|
508
|
+
s(void 0);
|
|
511
509
|
});
|
|
512
510
|
};
|
|
513
511
|
}
|
|
514
|
-
const
|
|
512
|
+
const Y = {
|
|
515
513
|
style: {
|
|
516
514
|
position: "absolute",
|
|
517
515
|
display: "none",
|
|
@@ -571,17 +569,17 @@ const _ = {
|
|
|
571
569
|
offsetTop: 50,
|
|
572
570
|
icons: {
|
|
573
571
|
copyPaste: $e,
|
|
574
|
-
delete:
|
|
572
|
+
delete: st,
|
|
575
573
|
lock: qe,
|
|
576
574
|
unlock: et,
|
|
577
|
-
bringToFront:
|
|
578
|
-
sendToBack:
|
|
575
|
+
bringToFront: nt,
|
|
576
|
+
sendToBack: it,
|
|
579
577
|
bringForward: tt,
|
|
580
578
|
sendBackwards: at
|
|
581
579
|
},
|
|
582
580
|
handlers: {
|
|
583
581
|
copyPaste: function() {
|
|
584
|
-
var o =
|
|
582
|
+
var o = rt(function* (t) {
|
|
585
583
|
yield t.clipboardManager.copy(), yield t.clipboardManager.paste();
|
|
586
584
|
});
|
|
587
585
|
function e(t) {
|
|
@@ -616,8 +614,8 @@ function Ie(o, e) {
|
|
|
616
614
|
var t = Object.keys(o);
|
|
617
615
|
if (Object.getOwnPropertySymbols) {
|
|
618
616
|
var a = Object.getOwnPropertySymbols(o);
|
|
619
|
-
e && (a = a.filter(function(
|
|
620
|
-
return Object.getOwnPropertyDescriptor(o,
|
|
617
|
+
e && (a = a.filter(function(n) {
|
|
618
|
+
return Object.getOwnPropertyDescriptor(o, n).enumerable;
|
|
621
619
|
})), t.push.apply(t, a);
|
|
622
620
|
}
|
|
623
621
|
return t;
|
|
@@ -662,11 +660,11 @@ class dt {
|
|
|
662
660
|
if (this.options = t.options, !!this.options.showToolbar) {
|
|
663
661
|
this.editor = t, this.canvas = t.canvas;
|
|
664
662
|
var a = this.options.toolbar || {};
|
|
665
|
-
this.config = j(j(j({},
|
|
666
|
-
style: j(j({},
|
|
667
|
-
btnStyle: j(j({},
|
|
668
|
-
icons: j(j({},
|
|
669
|
-
handlers: j(j({},
|
|
663
|
+
this.config = j(j(j({}, Y), a), {}, {
|
|
664
|
+
style: j(j({}, Y.style), a.style || {}),
|
|
665
|
+
btnStyle: j(j({}, Y.btnStyle), a.btnStyle || {}),
|
|
666
|
+
icons: j(j({}, Y.icons), a.icons || {}),
|
|
667
|
+
handlers: j(j({}, Y.handlers), a.handlers || {})
|
|
670
668
|
}), this.currentTarget = null, this.currentLocked = null, this.isTransforming = !1, this._onMouseDown = this._handleMouseDown.bind(this), this._onObjectMoving = this._startTransform.bind(this), this._onObjectScaling = this._startTransform.bind(this), this._onObjectRotating = this._startTransform.bind(this), this._onMouseUp = this._endTransform.bind(this), this._onObjectModified = this._endTransform.bind(this), this._onSelectionChange = this._updateToolbar.bind(this), this._onSelectionClear = () => {
|
|
671
669
|
this.el.style.display = "none";
|
|
672
670
|
}, this._createDOM(), this._bindEvents();
|
|
@@ -700,19 +698,19 @@ class dt {
|
|
|
700
698
|
this.el.innerHTML = "";
|
|
701
699
|
var a = function() {
|
|
702
700
|
var {
|
|
703
|
-
name:
|
|
704
|
-
handle:
|
|
705
|
-
} =
|
|
701
|
+
name: s,
|
|
702
|
+
handle: r
|
|
703
|
+
} = n, {
|
|
706
704
|
icons: c,
|
|
707
705
|
btnStyle: u,
|
|
708
706
|
handlers: l
|
|
709
707
|
} = t.config, d = document.createElement("button");
|
|
710
|
-
d.innerHTML = c[
|
|
708
|
+
d.innerHTML = c[r] ? '<img src="'.concat(c[r], '" title="').concat(s, '" />') : s, Object.assign(d.style, u), d.onclick = () => {
|
|
711
709
|
var h;
|
|
712
|
-
return (h = l[
|
|
710
|
+
return (h = l[r]) === null || h === void 0 ? void 0 : h.call(l, t.editor);
|
|
713
711
|
}, t.el.appendChild(d);
|
|
714
712
|
};
|
|
715
|
-
for (var
|
|
713
|
+
for (var n of e)
|
|
716
714
|
a();
|
|
717
715
|
}
|
|
718
716
|
/**
|
|
@@ -779,15 +777,15 @@ class dt {
|
|
|
779
777
|
var {
|
|
780
778
|
el: t,
|
|
781
779
|
config: a,
|
|
782
|
-
canvas:
|
|
780
|
+
canvas: n
|
|
783
781
|
} = this;
|
|
784
782
|
e.setCoords();
|
|
785
|
-
var
|
|
783
|
+
var i = n.getZoom(), [, , , , s, r] = n.viewportTransform, {
|
|
786
784
|
x: c
|
|
787
785
|
} = e.getCenterPoint(), {
|
|
788
786
|
top: u,
|
|
789
787
|
height: l
|
|
790
|
-
} = e.getBoundingRect(!1, !0), d = c *
|
|
788
|
+
} = e.getBoundingRect(!1, !0), d = c * i + s, h = d - t.offsetWidth / 2, g = (u + l) * i + r + a.offsetTop;
|
|
791
789
|
Object.assign(t.style, {
|
|
792
790
|
left: "".concat(h, "px"),
|
|
793
791
|
top: "".concat(g, "px"),
|
|
@@ -802,26 +800,26 @@ class dt {
|
|
|
802
800
|
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
801
|
}
|
|
804
802
|
}
|
|
805
|
-
function Ae(o, e, t, a,
|
|
803
|
+
function Ae(o, e, t, a, n, i, s) {
|
|
806
804
|
try {
|
|
807
|
-
var
|
|
805
|
+
var r = o[i](s), c = r.value;
|
|
808
806
|
} catch (u) {
|
|
809
807
|
return void t(u);
|
|
810
808
|
}
|
|
811
|
-
|
|
809
|
+
r.done ? e(c) : Promise.resolve(c).then(a, n);
|
|
812
810
|
}
|
|
813
811
|
function te(o) {
|
|
814
812
|
return function() {
|
|
815
813
|
var e = this, t = arguments;
|
|
816
|
-
return new Promise(function(a,
|
|
817
|
-
var
|
|
818
|
-
function i(c) {
|
|
819
|
-
Ae(n, a, r, i, s, "next", c);
|
|
820
|
-
}
|
|
814
|
+
return new Promise(function(a, n) {
|
|
815
|
+
var i = o.apply(e, t);
|
|
821
816
|
function s(c) {
|
|
822
|
-
Ae(
|
|
817
|
+
Ae(i, a, n, s, r, "next", c);
|
|
818
|
+
}
|
|
819
|
+
function r(c) {
|
|
820
|
+
Ae(i, a, n, s, r, "throw", c);
|
|
823
821
|
}
|
|
824
|
-
|
|
822
|
+
s(void 0);
|
|
825
823
|
});
|
|
826
824
|
};
|
|
827
825
|
}
|
|
@@ -844,7 +842,7 @@ class lt {
|
|
|
844
842
|
return this.patches[this.currentIndex - 1] || null;
|
|
845
843
|
}
|
|
846
844
|
_createDiffPatcher() {
|
|
847
|
-
this.diffPatcher =
|
|
845
|
+
this.diffPatcher = He({
|
|
848
846
|
objectHash(e) {
|
|
849
847
|
return [e.id, e.format, e.locked, e.left, e.top, e.width, e.height, e.flipX, e.flipY, e.scaleX, e.scaleY, e.angle, e.opacity].join("-");
|
|
850
848
|
},
|
|
@@ -887,9 +885,9 @@ class lt {
|
|
|
887
885
|
baseState: e,
|
|
888
886
|
currentIndex: t,
|
|
889
887
|
patches: a
|
|
890
|
-
} = this,
|
|
891
|
-
|
|
892
|
-
return console.log("getFullState state",
|
|
888
|
+
} = this, n = JSON.parse(JSON.stringify(e)), i = 0; i < t; i += 1)
|
|
889
|
+
n = this.diffPatcher.patch(n, a[i].diff);
|
|
890
|
+
return console.log("getFullState state", n), n;
|
|
893
891
|
}
|
|
894
892
|
/**
|
|
895
893
|
* Сохраняем текущее состояние в виде диффа от последнего сохранённого полного состояния.
|
|
@@ -925,17 +923,17 @@ class lt {
|
|
|
925
923
|
console.log("loadStateFromFullState fullState", e);
|
|
926
924
|
var {
|
|
927
925
|
canvas: a,
|
|
928
|
-
canvasManager:
|
|
929
|
-
interactionBlocker:
|
|
926
|
+
canvasManager: n,
|
|
927
|
+
interactionBlocker: i
|
|
930
928
|
} = t.editor, {
|
|
931
|
-
width:
|
|
932
|
-
height:
|
|
929
|
+
width: s,
|
|
930
|
+
height: r
|
|
933
931
|
} = a;
|
|
934
932
|
yield a.loadFromJSON(e);
|
|
935
933
|
var c = a.getObjects().find((l) => l.id === "montage-area");
|
|
936
|
-
c && (t.editor.montageArea = c, (
|
|
934
|
+
c && (t.editor.montageArea = c, (s !== e.width || r !== e.height) && n.updateCanvasAndFitObjects());
|
|
937
935
|
var u = a.getObjects().find((l) => l.id === "overlay-mask");
|
|
938
|
-
u && (
|
|
936
|
+
u && (i.overlayMask = u, i.overlayMask.visible = !1), a.renderAll(), a.fire("editor:history-state-loaded", {
|
|
939
937
|
fullState: e,
|
|
940
938
|
currentIndex: t.currentIndex,
|
|
941
939
|
totalChangesCount: t.totalChangesCount,
|
|
@@ -1015,27 +1013,27 @@ class lt {
|
|
|
1015
1013
|
})();
|
|
1016
1014
|
}
|
|
1017
1015
|
}
|
|
1018
|
-
const ht = 0.1, gt = 2,
|
|
1019
|
-
function Se(o, e, t, a,
|
|
1016
|
+
const ht = 0.1, gt = 2, Mt = 0.1, vt = 90, x = 16, B = 16, w = 4096, O = 4096;
|
|
1017
|
+
function Se(o, e, t, a, n, i, s) {
|
|
1020
1018
|
try {
|
|
1021
|
-
var
|
|
1019
|
+
var r = o[i](s), c = r.value;
|
|
1022
1020
|
} catch (u) {
|
|
1023
1021
|
return void t(u);
|
|
1024
1022
|
}
|
|
1025
|
-
|
|
1023
|
+
r.done ? e(c) : Promise.resolve(c).then(a, n);
|
|
1026
1024
|
}
|
|
1027
|
-
function
|
|
1025
|
+
function k(o) {
|
|
1028
1026
|
return function() {
|
|
1029
1027
|
var e = this, t = arguments;
|
|
1030
|
-
return new Promise(function(a,
|
|
1031
|
-
var
|
|
1032
|
-
function i(c) {
|
|
1033
|
-
Se(n, a, r, i, s, "next", c);
|
|
1034
|
-
}
|
|
1028
|
+
return new Promise(function(a, n) {
|
|
1029
|
+
var i = o.apply(e, t);
|
|
1035
1030
|
function s(c) {
|
|
1036
|
-
Se(
|
|
1031
|
+
Se(i, a, n, s, r, "next", c);
|
|
1032
|
+
}
|
|
1033
|
+
function r(c) {
|
|
1034
|
+
Se(i, a, n, s, r, "throw", c);
|
|
1037
1035
|
}
|
|
1038
|
-
|
|
1036
|
+
s(void 0);
|
|
1039
1037
|
});
|
|
1040
1038
|
};
|
|
1041
1039
|
}
|
|
@@ -1064,44 +1062,44 @@ class D {
|
|
|
1064
1062
|
*/
|
|
1065
1063
|
importImage(e) {
|
|
1066
1064
|
var t = this;
|
|
1067
|
-
return
|
|
1065
|
+
return k(function* () {
|
|
1068
1066
|
var {
|
|
1069
1067
|
source: a,
|
|
1070
|
-
scale:
|
|
1071
|
-
withoutSave:
|
|
1068
|
+
scale: n = "image-".concat(t.options.scaleType),
|
|
1069
|
+
withoutSave: i = !1
|
|
1072
1070
|
} = e;
|
|
1073
1071
|
if (!a) return null;
|
|
1074
1072
|
var {
|
|
1075
|
-
canvas:
|
|
1076
|
-
montageArea:
|
|
1073
|
+
canvas: s,
|
|
1074
|
+
montageArea: r,
|
|
1077
1075
|
transformManager: c,
|
|
1078
1076
|
historyManager: u,
|
|
1079
1077
|
errorManager: l
|
|
1080
1078
|
} = t.editor, d = yield t.getContentType(a), h = D.getFormatFromContentType(d), {
|
|
1081
1079
|
acceptContentTypes: g,
|
|
1082
|
-
acceptFormats:
|
|
1080
|
+
acceptFormats: v
|
|
1083
1081
|
} = t;
|
|
1084
1082
|
if (!t.isAllowedContentType(d)) {
|
|
1085
|
-
var
|
|
1083
|
+
var f = "Неверный contentType для изображения: ".concat(d, ". Ожидается один из: ").concat(t.acceptContentTypes.join(", "), ".");
|
|
1086
1084
|
return l.emitError({
|
|
1087
1085
|
origin: "ImageManager",
|
|
1088
1086
|
method: "importImage",
|
|
1089
1087
|
code: "INVALID_CONTENT_TYPE",
|
|
1090
|
-
message:
|
|
1088
|
+
message: f,
|
|
1091
1089
|
data: {
|
|
1092
1090
|
source: a,
|
|
1093
1091
|
format: h,
|
|
1094
1092
|
contentType: d,
|
|
1095
1093
|
acceptContentTypes: g,
|
|
1096
|
-
acceptFormats:
|
|
1094
|
+
acceptFormats: v
|
|
1097
1095
|
}
|
|
1098
1096
|
}), null;
|
|
1099
1097
|
}
|
|
1100
1098
|
u.suspendHistory();
|
|
1101
1099
|
try {
|
|
1102
|
-
var
|
|
1100
|
+
var m, M;
|
|
1103
1101
|
if (a instanceof File)
|
|
1104
|
-
|
|
1102
|
+
m = URL.createObjectURL(a);
|
|
1105
1103
|
else if (typeof a == "string") {
|
|
1106
1104
|
var S = yield fetch(a, {
|
|
1107
1105
|
mode: "cors"
|
|
@@ -1109,7 +1107,7 @@ class D {
|
|
|
1109
1107
|
type: d,
|
|
1110
1108
|
quality: 1
|
|
1111
1109
|
});
|
|
1112
|
-
|
|
1110
|
+
m = URL.createObjectURL(N);
|
|
1113
1111
|
} else
|
|
1114
1112
|
return l.emitError({
|
|
1115
1113
|
origin: "ImageManager",
|
|
@@ -1121,76 +1119,76 @@ class D {
|
|
|
1121
1119
|
format: h,
|
|
1122
1120
|
contentType: d,
|
|
1123
1121
|
acceptContentTypes: g,
|
|
1124
|
-
acceptFormats:
|
|
1122
|
+
acceptFormats: v
|
|
1125
1123
|
}
|
|
1126
1124
|
}), null;
|
|
1127
|
-
if (t._createdBlobUrls.push(
|
|
1128
|
-
var
|
|
1129
|
-
|
|
1125
|
+
if (t._createdBlobUrls.push(m), h === "svg") {
|
|
1126
|
+
var E = yield ke(m);
|
|
1127
|
+
M = P.groupSVGElements(E.objects, E.options);
|
|
1130
1128
|
} else
|
|
1131
|
-
|
|
1129
|
+
M = yield ee.fromURL(m, {
|
|
1132
1130
|
crossOrigin: "anonymous"
|
|
1133
1131
|
});
|
|
1134
1132
|
var {
|
|
1135
|
-
width:
|
|
1133
|
+
width: L,
|
|
1136
1134
|
height: y
|
|
1137
|
-
} =
|
|
1138
|
-
if (y > O ||
|
|
1139
|
-
var
|
|
1140
|
-
t._createdBlobUrls.push(
|
|
1135
|
+
} = M;
|
|
1136
|
+
if (y > O || L > w) {
|
|
1137
|
+
var b = yield t.resizeImageToBoundaries(M._element.src, "max"), Z = URL.createObjectURL(b);
|
|
1138
|
+
t._createdBlobUrls.push(Z), M = yield ee.fromURL(Z, {
|
|
1141
1139
|
crossOrigin: "anonymous"
|
|
1142
1140
|
});
|
|
1143
|
-
} else if (y <
|
|
1144
|
-
var
|
|
1145
|
-
t._createdBlobUrls.push(
|
|
1141
|
+
} else if (y < B || L < x) {
|
|
1142
|
+
var W = yield t.resizeImageToBoundaries(M._element.src, "min"), z = URL.createObjectURL(W);
|
|
1143
|
+
t._createdBlobUrls.push(z), M = yield ee.fromURL(z, {
|
|
1146
1144
|
crossOrigin: "anonymous"
|
|
1147
1145
|
});
|
|
1148
1146
|
}
|
|
1149
|
-
if (
|
|
1147
|
+
if (M.set("id", "".concat(M.type, "-").concat(A())), M.set("format", h), n === "scale-montage")
|
|
1150
1148
|
t.editor.canvasManager.scaleMontageAreaToImage({
|
|
1151
|
-
object:
|
|
1149
|
+
object: M,
|
|
1152
1150
|
withoutSave: !0
|
|
1153
1151
|
});
|
|
1154
1152
|
else {
|
|
1155
1153
|
var {
|
|
1156
|
-
width:
|
|
1157
|
-
height:
|
|
1158
|
-
} =
|
|
1159
|
-
imageObject:
|
|
1160
|
-
scaleType:
|
|
1154
|
+
width: F,
|
|
1155
|
+
height: U
|
|
1156
|
+
} = r, _ = t.calculateScaleFactor({
|
|
1157
|
+
imageObject: M,
|
|
1158
|
+
scaleType: n
|
|
1161
1159
|
});
|
|
1162
|
-
|
|
1163
|
-
object:
|
|
1160
|
+
n === "image-contain" && _ < 1 ? c.fitObject({
|
|
1161
|
+
object: M,
|
|
1164
1162
|
type: "contain",
|
|
1165
1163
|
withoutSave: !0
|
|
1166
|
-
}) :
|
|
1167
|
-
object:
|
|
1164
|
+
}) : n === "image-cover" && (L > F || y > U) && c.fitObject({
|
|
1165
|
+
object: M,
|
|
1168
1166
|
type: "cover",
|
|
1169
1167
|
withoutSave: !0
|
|
1170
1168
|
});
|
|
1171
1169
|
}
|
|
1172
|
-
|
|
1170
|
+
s.add(M), s.centerObject(M), s.setActiveObject(M), s.renderAll(), u.resumeHistory(), i || u.saveState();
|
|
1173
1171
|
var V = {
|
|
1174
|
-
image:
|
|
1172
|
+
image: M,
|
|
1175
1173
|
format: h,
|
|
1176
1174
|
contentType: d,
|
|
1177
|
-
scale:
|
|
1178
|
-
withoutSave:
|
|
1175
|
+
scale: n,
|
|
1176
|
+
withoutSave: i,
|
|
1179
1177
|
source: a
|
|
1180
1178
|
};
|
|
1181
|
-
return
|
|
1182
|
-
} catch (
|
|
1179
|
+
return s.fire("editor:image-imported", V), V;
|
|
1180
|
+
} catch (H) {
|
|
1183
1181
|
return l.emitError({
|
|
1184
1182
|
origin: "ImageManager",
|
|
1185
1183
|
method: "importImage",
|
|
1186
1184
|
code: "IMPORT_FAILED",
|
|
1187
|
-
message: "Ошибка импорта изображения: ".concat(
|
|
1185
|
+
message: "Ошибка импорта изображения: ".concat(H.message),
|
|
1188
1186
|
data: {
|
|
1189
1187
|
source: a,
|
|
1190
1188
|
format: h,
|
|
1191
1189
|
contentType: d,
|
|
1192
|
-
scale:
|
|
1193
|
-
withoutSave:
|
|
1190
|
+
scale: n,
|
|
1191
|
+
withoutSave: i
|
|
1194
1192
|
}
|
|
1195
1193
|
}), u.resumeHistory(), null;
|
|
1196
1194
|
}
|
|
@@ -1206,24 +1204,24 @@ class D {
|
|
|
1206
1204
|
*/
|
|
1207
1205
|
resizeImageToBoundaries(e) {
|
|
1208
1206
|
var t = arguments, a = this;
|
|
1209
|
-
return
|
|
1210
|
-
var
|
|
1211
|
-
|
|
1212
|
-
var
|
|
1207
|
+
return k(function* () {
|
|
1208
|
+
var n = t.length > 1 && t[1] !== void 0 ? t[1] : "max", i = "Размер изображения больше максимального размера канваса, поэтому оно будет уменьшено до максимальных размеров c сохранением пропорций: ".concat(w, "x").concat(O);
|
|
1209
|
+
n === "min" && (i = "Размер изображения меньше минимального размера канваса, поэтому оно будет увеличено до минимальных размеров c сохранением пропорций: ".concat(x, "x").concat(B));
|
|
1210
|
+
var s = {
|
|
1213
1211
|
dataURL: e,
|
|
1214
|
-
sizeType:
|
|
1215
|
-
maxWidth:
|
|
1212
|
+
sizeType: n,
|
|
1213
|
+
maxWidth: w,
|
|
1216
1214
|
maxHeight: O,
|
|
1217
|
-
minWidth:
|
|
1218
|
-
minHeight:
|
|
1215
|
+
minWidth: x,
|
|
1216
|
+
minHeight: B
|
|
1219
1217
|
};
|
|
1220
1218
|
return a.editor.errorManager.emitWarning({
|
|
1221
1219
|
origin: "ImageManager",
|
|
1222
1220
|
method: "resizeImageToBoundaries",
|
|
1223
1221
|
code: "IMAGE_RESIZE_WARNING",
|
|
1224
|
-
message:
|
|
1225
|
-
data:
|
|
1226
|
-
}), a.editor.workerManager.post("resizeImage",
|
|
1222
|
+
message: i,
|
|
1223
|
+
data: s
|
|
1224
|
+
}), a.editor.workerManager.post("resizeImage", s);
|
|
1227
1225
|
})();
|
|
1228
1226
|
}
|
|
1229
1227
|
/**
|
|
@@ -1239,121 +1237,121 @@ class D {
|
|
|
1239
1237
|
*/
|
|
1240
1238
|
exportCanvasAsImageFile() {
|
|
1241
1239
|
var e = arguments, t = this;
|
|
1242
|
-
return
|
|
1240
|
+
return k(function* () {
|
|
1243
1241
|
var {
|
|
1244
1242
|
fileName: a = "image.png",
|
|
1245
|
-
contentType:
|
|
1246
|
-
exportAsBase64:
|
|
1247
|
-
exportAsBlob:
|
|
1243
|
+
contentType: n = "image/png",
|
|
1244
|
+
exportAsBase64: i = !1,
|
|
1245
|
+
exportAsBlob: s = !1
|
|
1248
1246
|
} = e.length > 0 && e[0] !== void 0 ? e[0] : {}, {
|
|
1249
|
-
canvas:
|
|
1247
|
+
canvas: r,
|
|
1250
1248
|
montageArea: c,
|
|
1251
1249
|
workerManager: u
|
|
1252
1250
|
} = t.editor;
|
|
1253
1251
|
try {
|
|
1254
|
-
var l =
|
|
1252
|
+
var l = n === "application/pdf", d = l ? "image/jpg" : n, h = D.getFormatFromContentType(d);
|
|
1255
1253
|
c.setCoords();
|
|
1256
1254
|
var {
|
|
1257
1255
|
left: g,
|
|
1258
|
-
top:
|
|
1259
|
-
width:
|
|
1260
|
-
height:
|
|
1261
|
-
} = c.getBoundingRect(),
|
|
1262
|
-
["image/jpg", "image/jpeg"].includes(d) && (
|
|
1263
|
-
var S =
|
|
1264
|
-
S.visible = !1,
|
|
1265
|
-
width:
|
|
1266
|
-
height:
|
|
1256
|
+
top: v,
|
|
1257
|
+
width: f,
|
|
1258
|
+
height: m
|
|
1259
|
+
} = c.getBoundingRect(), M = yield r.clone(["id", "format", "locked"]);
|
|
1260
|
+
["image/jpg", "image/jpeg"].includes(d) && (M.backgroundColor = "#ffffff");
|
|
1261
|
+
var S = M.getObjects().find((p) => p.id === c.id);
|
|
1262
|
+
S.visible = !1, M.viewportTransform = [1, 0, 0, 1, -g, -v], M.setDimensions({
|
|
1263
|
+
width: f,
|
|
1264
|
+
height: m
|
|
1267
1265
|
}, {
|
|
1268
1266
|
backstoreOnly: !0
|
|
1269
|
-
}),
|
|
1270
|
-
var N =
|
|
1267
|
+
}), M.renderAll();
|
|
1268
|
+
var N = M.getObjects().filter((p) => p.format).every((p) => p.format === "svg");
|
|
1271
1269
|
if (h === "svg" && N) {
|
|
1272
|
-
var
|
|
1273
|
-
|
|
1274
|
-
var
|
|
1275
|
-
exportAsBase64:
|
|
1276
|
-
exportAsBlob:
|
|
1270
|
+
var E = M.toSVG();
|
|
1271
|
+
M.dispose();
|
|
1272
|
+
var L = D._exportSVGStringAsFile(E, {
|
|
1273
|
+
exportAsBase64: i,
|
|
1274
|
+
exportAsBlob: s,
|
|
1277
1275
|
fileName: a
|
|
1278
1276
|
}), y = {
|
|
1279
|
-
image:
|
|
1277
|
+
image: L,
|
|
1280
1278
|
format: "svg",
|
|
1281
1279
|
contentType: "image/svg+xml",
|
|
1282
1280
|
fileName: a.replace(/\.[^/.]+$/, ".svg")
|
|
1283
1281
|
};
|
|
1284
|
-
return
|
|
1282
|
+
return r.fire("editor:canvas-exported", y), y;
|
|
1285
1283
|
}
|
|
1286
|
-
var
|
|
1287
|
-
|
|
1284
|
+
var b = yield new Promise((p) => {
|
|
1285
|
+
M.getElement().toBlob(p);
|
|
1288
1286
|
});
|
|
1289
|
-
if (
|
|
1290
|
-
var
|
|
1291
|
-
image:
|
|
1287
|
+
if (M.dispose(), s) {
|
|
1288
|
+
var Z = {
|
|
1289
|
+
image: b,
|
|
1292
1290
|
format: h,
|
|
1293
1291
|
contentType: d,
|
|
1294
1292
|
fileName: a
|
|
1295
1293
|
};
|
|
1296
|
-
return
|
|
1294
|
+
return r.fire("editor:canvas-exported", Z), Z;
|
|
1297
1295
|
}
|
|
1298
|
-
var
|
|
1296
|
+
var W = yield createImageBitmap(b), z = yield u.post("toDataURL", {
|
|
1299
1297
|
format: h,
|
|
1300
1298
|
quality: 1,
|
|
1301
|
-
bitmap:
|
|
1302
|
-
}, [
|
|
1299
|
+
bitmap: W
|
|
1300
|
+
}, [W]);
|
|
1303
1301
|
if (l) {
|
|
1304
|
-
var
|
|
1305
|
-
orientation:
|
|
1302
|
+
var F = 0.264583, U = f * F, _ = m * F, V = (yield t.editor.moduleLoader.loadModule("jspdf")).jsPDF, H = new V({
|
|
1303
|
+
orientation: U > _ ? "landscape" : "portrait",
|
|
1306
1304
|
unit: "mm",
|
|
1307
|
-
format: [
|
|
1305
|
+
format: [U, _]
|
|
1308
1306
|
});
|
|
1309
|
-
if (
|
|
1310
|
-
var De =
|
|
1307
|
+
if (H.addImage(z, "JPG", 0, 0, U, _), i) {
|
|
1308
|
+
var De = H.output("datauristring"), le = {
|
|
1311
1309
|
image: De,
|
|
1312
1310
|
format: "pdf",
|
|
1313
1311
|
contentType: "application/pdf",
|
|
1314
1312
|
fileName: a
|
|
1315
1313
|
};
|
|
1316
|
-
return
|
|
1314
|
+
return r.fire("editor:canvas-exported", le), le;
|
|
1317
1315
|
}
|
|
1318
|
-
var Ne =
|
|
1316
|
+
var Ne = H.output("blob"), Ee = new File([Ne], a, {
|
|
1319
1317
|
type: "application/pdf"
|
|
1320
1318
|
}), he = {
|
|
1321
|
-
image:
|
|
1319
|
+
image: Ee,
|
|
1322
1320
|
format: "pdf",
|
|
1323
1321
|
contentType: "application/pdf",
|
|
1324
1322
|
fileName: a
|
|
1325
1323
|
};
|
|
1326
|
-
return
|
|
1324
|
+
return r.fire("editor:canvas-exported", he), he;
|
|
1327
1325
|
}
|
|
1328
|
-
if (
|
|
1326
|
+
if (i) {
|
|
1329
1327
|
var ge = {
|
|
1330
|
-
image:
|
|
1328
|
+
image: z,
|
|
1331
1329
|
format: h,
|
|
1332
1330
|
contentType: d,
|
|
1333
1331
|
fileName: a
|
|
1334
1332
|
};
|
|
1335
|
-
return
|
|
1333
|
+
return r.fire("editor:canvas-exported", ge), ge;
|
|
1336
1334
|
}
|
|
1337
|
-
var
|
|
1335
|
+
var Me = h === "svg" && !N ? a.replace(/\.[^/.]+$/, ".png") : a, Le = new File([b], Me, {
|
|
1338
1336
|
type: d
|
|
1339
|
-
}),
|
|
1340
|
-
image:
|
|
1337
|
+
}), ve = {
|
|
1338
|
+
image: Le,
|
|
1341
1339
|
format: h,
|
|
1342
1340
|
contentType: d,
|
|
1343
|
-
fileName:
|
|
1341
|
+
fileName: Me
|
|
1344
1342
|
};
|
|
1345
|
-
return
|
|
1346
|
-
} catch (
|
|
1343
|
+
return r.fire("editor:canvas-exported", ve), ve;
|
|
1344
|
+
} catch (p) {
|
|
1347
1345
|
return t.editor.errorManager.emitError({
|
|
1348
1346
|
origin: "ImageManager",
|
|
1349
1347
|
method: "exportCanvasAsImageFile",
|
|
1350
1348
|
code: "IMAGE_EXPORT_FAILED",
|
|
1351
|
-
message: "Ошибка экспорта изображения: ".concat(
|
|
1349
|
+
message: "Ошибка экспорта изображения: ".concat(p.message),
|
|
1352
1350
|
data: {
|
|
1353
|
-
contentType:
|
|
1351
|
+
contentType: n,
|
|
1354
1352
|
fileName: a,
|
|
1355
|
-
exportAsBase64:
|
|
1356
|
-
exportAsBlob:
|
|
1353
|
+
exportAsBase64: i,
|
|
1354
|
+
exportAsBlob: s
|
|
1357
1355
|
}
|
|
1358
1356
|
}), "";
|
|
1359
1357
|
}
|
|
@@ -1372,13 +1370,13 @@ class D {
|
|
|
1372
1370
|
*/
|
|
1373
1371
|
exportObjectAsImageFile() {
|
|
1374
1372
|
var e = arguments, t = this;
|
|
1375
|
-
return
|
|
1373
|
+
return k(function* () {
|
|
1376
1374
|
var {
|
|
1377
1375
|
object: a,
|
|
1378
|
-
fileName:
|
|
1379
|
-
contentType:
|
|
1380
|
-
exportAsBase64:
|
|
1381
|
-
exportAsBlob:
|
|
1376
|
+
fileName: n = "image.png",
|
|
1377
|
+
contentType: i = "image/png",
|
|
1378
|
+
exportAsBase64: s = !1,
|
|
1379
|
+
exportAsBlob: r = !1
|
|
1382
1380
|
} = e.length > 0 && e[0] !== void 0 ? e[0] : {}, {
|
|
1383
1381
|
canvas: c,
|
|
1384
1382
|
workerManager: u
|
|
@@ -1390,72 +1388,72 @@ class D {
|
|
|
1390
1388
|
code: "NO_OBJECT_SELECTED",
|
|
1391
1389
|
message: "Не выбран объект для экспорта",
|
|
1392
1390
|
data: {
|
|
1393
|
-
contentType:
|
|
1394
|
-
fileName:
|
|
1395
|
-
exportAsBase64:
|
|
1396
|
-
exportAsBlob:
|
|
1391
|
+
contentType: i,
|
|
1392
|
+
fileName: n,
|
|
1393
|
+
exportAsBase64: s,
|
|
1394
|
+
exportAsBlob: r
|
|
1397
1395
|
}
|
|
1398
1396
|
}), "";
|
|
1399
1397
|
try {
|
|
1400
|
-
var d = D.getFormatFromContentType(
|
|
1398
|
+
var d = D.getFormatFromContentType(i);
|
|
1401
1399
|
if (d === "svg") {
|
|
1402
1400
|
var h = l.toSVG(), g = t._exportSVGStringAsFile(h, {
|
|
1403
|
-
exportAsBase64:
|
|
1404
|
-
exportAsBlob:
|
|
1405
|
-
fileName:
|
|
1406
|
-
}),
|
|
1401
|
+
exportAsBase64: s,
|
|
1402
|
+
exportAsBlob: r,
|
|
1403
|
+
fileName: n
|
|
1404
|
+
}), v = {
|
|
1407
1405
|
image: g,
|
|
1408
1406
|
format: d,
|
|
1409
1407
|
contentType: "image/svg+xml",
|
|
1410
|
-
fileName:
|
|
1408
|
+
fileName: n.replace(/\.[^/.]+$/, ".svg")
|
|
1411
1409
|
};
|
|
1412
|
-
return c.fire("editor:object-exported",
|
|
1410
|
+
return c.fire("editor:object-exported", v), v;
|
|
1413
1411
|
}
|
|
1414
|
-
if (
|
|
1415
|
-
var
|
|
1412
|
+
if (s) {
|
|
1413
|
+
var f = yield createImageBitmap(l._element), m = yield u.post("toDataURL", {
|
|
1416
1414
|
format: d,
|
|
1417
1415
|
quality: 1,
|
|
1418
|
-
bitmap:
|
|
1419
|
-
}, [
|
|
1420
|
-
image:
|
|
1416
|
+
bitmap: f
|
|
1417
|
+
}, [f]), M = {
|
|
1418
|
+
image: m,
|
|
1421
1419
|
format: d,
|
|
1422
|
-
contentType:
|
|
1423
|
-
fileName:
|
|
1420
|
+
contentType: i,
|
|
1421
|
+
fileName: n
|
|
1424
1422
|
};
|
|
1425
|
-
return c.fire("editor:object-exported",
|
|
1423
|
+
return c.fire("editor:object-exported", M), M;
|
|
1426
1424
|
}
|
|
1427
|
-
var S = l.toCanvasElement(), N = yield new Promise((
|
|
1428
|
-
S.toBlob(
|
|
1425
|
+
var S = l.toCanvasElement(), N = yield new Promise((b) => {
|
|
1426
|
+
S.toBlob(b);
|
|
1429
1427
|
});
|
|
1430
|
-
if (
|
|
1431
|
-
var
|
|
1428
|
+
if (r) {
|
|
1429
|
+
var E = {
|
|
1432
1430
|
image: N,
|
|
1433
1431
|
format: d,
|
|
1434
|
-
contentType:
|
|
1435
|
-
fileName:
|
|
1432
|
+
contentType: i,
|
|
1433
|
+
fileName: n
|
|
1436
1434
|
};
|
|
1437
|
-
return c.fire("editor:object-exported",
|
|
1435
|
+
return c.fire("editor:object-exported", E), E;
|
|
1438
1436
|
}
|
|
1439
|
-
var
|
|
1440
|
-
type:
|
|
1437
|
+
var L = new File([N], n, {
|
|
1438
|
+
type: i
|
|
1441
1439
|
}), y = {
|
|
1442
|
-
image:
|
|
1440
|
+
image: L,
|
|
1443
1441
|
format: d,
|
|
1444
|
-
contentType:
|
|
1445
|
-
fileName:
|
|
1442
|
+
contentType: i,
|
|
1443
|
+
fileName: n
|
|
1446
1444
|
};
|
|
1447
1445
|
return c.fire("editor:object-exported", y), y;
|
|
1448
|
-
} catch (
|
|
1446
|
+
} catch (b) {
|
|
1449
1447
|
return t.editor.errorManager.emitError({
|
|
1450
1448
|
origin: "ImageManager",
|
|
1451
1449
|
method: "exportObjectAsImageFile",
|
|
1452
1450
|
code: "IMAGE_EXPORT_FAILED",
|
|
1453
|
-
message: "Ошибка экспорта объекта: ".concat(
|
|
1451
|
+
message: "Ошибка экспорта объекта: ".concat(b.message),
|
|
1454
1452
|
data: {
|
|
1455
|
-
contentType:
|
|
1456
|
-
fileName:
|
|
1457
|
-
exportAsBase64:
|
|
1458
|
-
exportAsBlob:
|
|
1453
|
+
contentType: i,
|
|
1454
|
+
fileName: n,
|
|
1455
|
+
exportAsBase64: s,
|
|
1456
|
+
exportAsBlob: r
|
|
1459
1457
|
}
|
|
1460
1458
|
}), "";
|
|
1461
1459
|
}
|
|
@@ -1483,11 +1481,11 @@ class D {
|
|
|
1483
1481
|
var {
|
|
1484
1482
|
exportAsBase64: t,
|
|
1485
1483
|
exportAsBlob: a,
|
|
1486
|
-
fileName:
|
|
1484
|
+
fileName: n
|
|
1487
1485
|
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
|
|
1488
1486
|
return a ? new Blob([e], {
|
|
1489
1487
|
type: "image/svg+xml"
|
|
1490
|
-
}) : t ? "data:image/svg+xml;base64,".concat(btoa(e)) : new File([e],
|
|
1488
|
+
}) : t ? "data:image/svg+xml;base64,".concat(btoa(e)) : new File([e], n.replace(/\.[^/.]+$/, ".svg"), {
|
|
1491
1489
|
type: "image/svg+xml"
|
|
1492
1490
|
});
|
|
1493
1491
|
}
|
|
@@ -1526,7 +1524,7 @@ class D {
|
|
|
1526
1524
|
*/
|
|
1527
1525
|
getContentType(e) {
|
|
1528
1526
|
var t = this;
|
|
1529
|
-
return
|
|
1527
|
+
return k(function* () {
|
|
1530
1528
|
return typeof e == "string" ? t.getContentTypeFromUrl(e) : e.type || "application/octet-stream";
|
|
1531
1529
|
})();
|
|
1532
1530
|
}
|
|
@@ -1538,19 +1536,19 @@ class D {
|
|
|
1538
1536
|
*/
|
|
1539
1537
|
getContentTypeFromUrl(e) {
|
|
1540
1538
|
var t = this;
|
|
1541
|
-
return
|
|
1539
|
+
return k(function* () {
|
|
1542
1540
|
if (e.startsWith("data:")) {
|
|
1543
1541
|
var a = e.match(/^data:([^;]+)/);
|
|
1544
1542
|
return a ? a[1] : "application/octet-stream";
|
|
1545
1543
|
}
|
|
1546
1544
|
try {
|
|
1547
|
-
var
|
|
1545
|
+
var n = yield fetch(e, {
|
|
1548
1546
|
method: "HEAD"
|
|
1549
|
-
}),
|
|
1550
|
-
if (
|
|
1551
|
-
return
|
|
1552
|
-
} catch (
|
|
1553
|
-
console.warn("HEAD запрос неудачен, определяем тип по расширению:",
|
|
1547
|
+
}), i = n.headers.get("content-type");
|
|
1548
|
+
if (i && i.startsWith("image/"))
|
|
1549
|
+
return i.split(";")[0];
|
|
1550
|
+
} catch (s) {
|
|
1551
|
+
console.warn("HEAD запрос неудачен, определяем тип по расширению:", s);
|
|
1554
1552
|
}
|
|
1555
1553
|
return t.getContentTypeFromExtension(e);
|
|
1556
1554
|
})();
|
|
@@ -1563,13 +1561,13 @@ class D {
|
|
|
1563
1561
|
*/
|
|
1564
1562
|
getContentTypeFromExtension(e) {
|
|
1565
1563
|
try {
|
|
1566
|
-
var t, a = new URL(e),
|
|
1567
|
-
return this.acceptContentTypes.forEach((
|
|
1568
|
-
var
|
|
1569
|
-
|
|
1570
|
-
}), n
|
|
1571
|
-
} catch (
|
|
1572
|
-
return console.warn("Не удалось определить расширение из URL:", e,
|
|
1564
|
+
var t, a = new URL(e), n = (t = a.pathname.split(".").pop()) === null || t === void 0 ? void 0 : t.toLowerCase(), i = {};
|
|
1565
|
+
return this.acceptContentTypes.forEach((s) => {
|
|
1566
|
+
var r = D.getFormatFromContentType(s);
|
|
1567
|
+
r && (i[r] = s);
|
|
1568
|
+
}), i[n] || "application/octet-stream";
|
|
1569
|
+
} catch (s) {
|
|
1570
|
+
return console.warn("Не удалось определить расширение из URL:", e, s), "application/octet-stream";
|
|
1573
1571
|
}
|
|
1574
1572
|
}
|
|
1575
1573
|
/**
|
|
@@ -1583,26 +1581,23 @@ class D {
|
|
|
1583
1581
|
imageObject: t,
|
|
1584
1582
|
scaleType: a = "contain"
|
|
1585
1583
|
} = e, {
|
|
1586
|
-
montageArea:
|
|
1584
|
+
montageArea: n
|
|
1587
1585
|
} = this.editor;
|
|
1588
|
-
if (!
|
|
1589
|
-
var
|
|
1590
|
-
width:
|
|
1586
|
+
if (!n || !t) return 1;
|
|
1587
|
+
var i = n.width, s = n.height, {
|
|
1588
|
+
width: r,
|
|
1591
1589
|
height: c
|
|
1592
1590
|
} = t;
|
|
1593
|
-
return a === "contain" || a === "image-contain" ? Math.min(
|
|
1591
|
+
return a === "contain" || a === "image-contain" ? Math.min(i / r, s / c) : a === "cover" || a === "image-cover" ? Math.max(i / r, s / c) : 1;
|
|
1594
1592
|
}
|
|
1595
1593
|
}
|
|
1596
|
-
class
|
|
1594
|
+
class mt {
|
|
1597
1595
|
/**
|
|
1598
1596
|
* @param {object} options
|
|
1599
1597
|
* @param {ImageEditor} options.editor – экземпляр редактора
|
|
1600
1598
|
*/
|
|
1601
|
-
constructor(e) {
|
|
1602
|
-
|
|
1603
|
-
editor: t
|
|
1604
|
-
} = e;
|
|
1605
|
-
this.editor = t;
|
|
1599
|
+
constructor({ editor: e }) {
|
|
1600
|
+
this.editor = e;
|
|
1606
1601
|
}
|
|
1607
1602
|
/**
|
|
1608
1603
|
* Устанавливаем внутреннюю ширину канваса (для экспорта)
|
|
@@ -1613,40 +1608,26 @@ class Mt {
|
|
|
1613
1608
|
* @param {Boolean} [options.adaptCanvasToContainer] - Адаптировать канвас к контейнеру
|
|
1614
1609
|
* @fires editor:resolution-width-changed
|
|
1615
1610
|
*/
|
|
1616
|
-
setResolutionWidth(e) {
|
|
1617
|
-
var
|
|
1611
|
+
setResolutionWidth(e, { preserveProportional: t, withoutSave: a, adaptCanvasToContainer: n } = {}) {
|
|
1612
|
+
var v;
|
|
1613
|
+
if (!e) return;
|
|
1614
|
+
const {
|
|
1615
|
+
canvas: i,
|
|
1616
|
+
montageArea: s,
|
|
1617
|
+
options: { canvasBackstoreWidth: r }
|
|
1618
|
+
} = this.editor, { width: c, height: u } = s, l = Math.max(Math.min(Number(e), w), x);
|
|
1619
|
+
if (!r || r === "auto" || n ? this.adaptCanvasToContainer() : r ? this.setCanvasBackstoreWidth(Number(r)) : this.setCanvasBackstoreWidth(l), s.set({ width: l }), (v = i.clipPath) == null || v.set({ width: l }), t) {
|
|
1620
|
+
const f = l / c, m = u * f;
|
|
1621
|
+
this.setResolutionHeight(m);
|
|
1622
|
+
return;
|
|
1623
|
+
}
|
|
1624
|
+
const { left: d, top: h } = this.getObjectDefaultCoords(s), g = i.getZoom();
|
|
1625
|
+
i.setViewportTransform([g, 0, 0, g, d, h]), this.centerMontageArea(), a || this.editor.historyManager.saveState(), i.fire("editor:resolution-width-changed", {
|
|
1626
|
+
width: l,
|
|
1618
1627
|
preserveProportional: t,
|
|
1619
1628
|
withoutSave: a,
|
|
1620
|
-
adaptCanvasToContainer:
|
|
1621
|
-
}
|
|
1622
|
-
if (e) {
|
|
1623
|
-
var {
|
|
1624
|
-
canvas: n,
|
|
1625
|
-
montageArea: i,
|
|
1626
|
-
options: {
|
|
1627
|
-
canvasBackstoreWidth: s
|
|
1628
|
-
}
|
|
1629
|
-
} = this.editor, {
|
|
1630
|
-
width: c,
|
|
1631
|
-
height: u
|
|
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
|
|
1637
|
-
}), t) {
|
|
1638
|
-
var d = l / c, h = u * d;
|
|
1639
|
-
this.setResolutionHeight(h);
|
|
1640
|
-
return;
|
|
1641
|
-
}
|
|
1642
|
-
var {
|
|
1643
|
-
left: g,
|
|
1644
|
-
top: M
|
|
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", {
|
|
1647
|
-
width: e
|
|
1648
|
-
});
|
|
1649
|
-
}
|
|
1629
|
+
adaptCanvasToContainer: n
|
|
1630
|
+
});
|
|
1650
1631
|
}
|
|
1651
1632
|
/**
|
|
1652
1633
|
* Устанавливаем внутреннюю высоту канваса (для экспорта)
|
|
@@ -1657,59 +1638,43 @@ class Mt {
|
|
|
1657
1638
|
* @param {Boolean} [options.adaptCanvasToContainer] - Адаптировать канвас к контейнеру
|
|
1658
1639
|
* @fires editor:resolution-height-changed
|
|
1659
1640
|
*/
|
|
1660
|
-
setResolutionHeight(e) {
|
|
1661
|
-
var
|
|
1641
|
+
setResolutionHeight(e, { preserveProportional: t, withoutSave: a, adaptCanvasToContainer: n } = {}) {
|
|
1642
|
+
var v;
|
|
1643
|
+
if (!e) return;
|
|
1644
|
+
const {
|
|
1645
|
+
canvas: i,
|
|
1646
|
+
montageArea: s,
|
|
1647
|
+
options: { canvasBackstoreHeight: r }
|
|
1648
|
+
} = this.editor, { width: c, height: u } = s, l = Math.max(Math.min(Number(e), O), B);
|
|
1649
|
+
if (!r || r === "auto" || n ? this.adaptCanvasToContainer() : r ? this.setCanvasBackstoreHeight(Number(r)) : this.setCanvasBackstoreHeight(l), s.set({ height: l }), (v = i.clipPath) == null || v.set({ height: l }), t) {
|
|
1650
|
+
const f = l / u, m = c * f;
|
|
1651
|
+
this.setResolutionWidth(m);
|
|
1652
|
+
return;
|
|
1653
|
+
}
|
|
1654
|
+
const { left: d, top: h } = this.getObjectDefaultCoords(s), g = i.getZoom();
|
|
1655
|
+
i.setViewportTransform([g, 0, 0, g, d, h]), this.centerMontageArea(), a || this.editor.historyManager.saveState(), i.fire("editor:resolution-height-changed", {
|
|
1656
|
+
height: l,
|
|
1662
1657
|
preserveProportional: t,
|
|
1663
1658
|
withoutSave: a,
|
|
1664
|
-
adaptCanvasToContainer:
|
|
1665
|
-
}
|
|
1666
|
-
if (e) {
|
|
1667
|
-
var {
|
|
1668
|
-
canvas: n,
|
|
1669
|
-
montageArea: i,
|
|
1670
|
-
options: {
|
|
1671
|
-
canvasBackstoreHeight: s
|
|
1672
|
-
}
|
|
1673
|
-
} = this.editor, {
|
|
1674
|
-
width: c,
|
|
1675
|
-
height: u
|
|
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
|
|
1681
|
-
}), t) {
|
|
1682
|
-
var d = l / u, h = c * d;
|
|
1683
|
-
this.setResolutionWidth(h);
|
|
1684
|
-
return;
|
|
1685
|
-
}
|
|
1686
|
-
var {
|
|
1687
|
-
left: g,
|
|
1688
|
-
top: M
|
|
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", {
|
|
1691
|
-
height: e
|
|
1692
|
-
});
|
|
1693
|
-
}
|
|
1659
|
+
adaptCanvasToContainer: n
|
|
1660
|
+
});
|
|
1694
1661
|
}
|
|
1695
1662
|
/**
|
|
1696
1663
|
* Центрирует монтажную область и ClipPath точно по центру канваса
|
|
1697
1664
|
* и устанавливает правильный viewportTransform.
|
|
1698
1665
|
*/
|
|
1699
1666
|
centerMontageArea() {
|
|
1700
|
-
var
|
|
1701
|
-
|
|
1702
|
-
montageArea: t
|
|
1703
|
-
} = this.editor, a = e.getWidth(), r = e.getHeight(), n = e.getZoom(), i = new K(a / 2, r / 2);
|
|
1667
|
+
var c;
|
|
1668
|
+
const { canvas: e, montageArea: t } = this.editor, a = e.getWidth(), n = e.getHeight(), i = e.getZoom(), s = new K(a / 2, n / 2);
|
|
1704
1669
|
t.set({
|
|
1705
1670
|
left: a / 2,
|
|
1706
|
-
top:
|
|
1707
|
-
}), e.clipPath.set({
|
|
1671
|
+
top: n / 2
|
|
1672
|
+
}), (c = e.clipPath) == null || c.set({
|
|
1708
1673
|
left: a / 2,
|
|
1709
|
-
top:
|
|
1674
|
+
top: n / 2
|
|
1710
1675
|
}), e.renderAll();
|
|
1711
|
-
|
|
1712
|
-
|
|
1676
|
+
const r = e.viewportTransform;
|
|
1677
|
+
r[4] = a / 2 - s.x * i, r[5] = n / 2 - s.y * i, e.setViewportTransform(r), e.renderAll();
|
|
1713
1678
|
}
|
|
1714
1679
|
/**
|
|
1715
1680
|
* Метод для получения координат объекта с учетом текущего зума
|
|
@@ -1717,52 +1682,43 @@ class Mt {
|
|
|
1717
1682
|
* @returns {Object} координаты объекта
|
|
1718
1683
|
*/
|
|
1719
1684
|
getObjectDefaultCoords(e) {
|
|
1720
|
-
|
|
1721
|
-
canvas: t
|
|
1722
|
-
} = this.editor, a = e || t.getActiveObject();
|
|
1685
|
+
const { canvas: t } = this.editor, a = e || t.getActiveObject();
|
|
1723
1686
|
if (!a)
|
|
1724
|
-
return
|
|
1687
|
+
return this.editor.errorManager.emitError({
|
|
1688
|
+
origin: "CanvasManager",
|
|
1689
|
+
method: "getObjectDefaultCoords",
|
|
1690
|
+
code: "NO_ACTIVE_OBJECT",
|
|
1725
1691
|
message: "Не выбран объект для получения координат"
|
|
1726
|
-
}), {};
|
|
1727
|
-
|
|
1728
|
-
|
|
1729
|
-
height: n
|
|
1730
|
-
} = a, i = t.getZoom(), s = (r - r * i) / 2, c = (n - n * i) / 2;
|
|
1731
|
-
return {
|
|
1732
|
-
left: s,
|
|
1733
|
-
top: c
|
|
1734
|
-
};
|
|
1692
|
+
}), { left: 0, top: 0 };
|
|
1693
|
+
const { width: n, height: i } = a, s = t.getZoom(), r = (n - n * s) / 2, c = (i - i * s) / 2;
|
|
1694
|
+
return { left: r, top: c };
|
|
1735
1695
|
}
|
|
1696
|
+
/**
|
|
1697
|
+
* Устанавливаем ширину канваса в backstore (для экспорта)
|
|
1698
|
+
* @param {Number} width
|
|
1699
|
+
*/
|
|
1736
1700
|
setCanvasBackstoreWidth(e) {
|
|
1737
|
-
if (!
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
width: t
|
|
1741
|
-
}, {
|
|
1742
|
-
backstoreOnly: !0
|
|
1743
|
-
});
|
|
1744
|
-
}
|
|
1701
|
+
if (!e || typeof e != "number") return;
|
|
1702
|
+
const t = Math.max(Math.min(e, w), x);
|
|
1703
|
+
this.editor.canvas.setDimensions({ width: t }, { backstoreOnly: !0 });
|
|
1745
1704
|
}
|
|
1705
|
+
/**
|
|
1706
|
+
* Устанавливаем высоту канваса в backstore (для экспорта)
|
|
1707
|
+
* @param {Number} height
|
|
1708
|
+
*/
|
|
1746
1709
|
setCanvasBackstoreHeight(e) {
|
|
1747
|
-
if (!
|
|
1748
|
-
|
|
1749
|
-
|
|
1750
|
-
height: t
|
|
1751
|
-
}, {
|
|
1752
|
-
backstoreOnly: !0
|
|
1753
|
-
});
|
|
1754
|
-
}
|
|
1710
|
+
if (!e || typeof e != "number") return;
|
|
1711
|
+
const t = Math.max(Math.min(e, O), B);
|
|
1712
|
+
this.editor.canvas.setDimensions({ height: t }, { backstoreOnly: !0 });
|
|
1755
1713
|
}
|
|
1714
|
+
/**
|
|
1715
|
+
* Адаптирует размеры канваса к размерам контейнера редактора.
|
|
1716
|
+
* Устанавливает ширину и высоту канваса в зависимости от размеров контейнера
|
|
1717
|
+
* с учётом минимальных и максимальных значений.
|
|
1718
|
+
*/
|
|
1756
1719
|
adaptCanvasToContainer() {
|
|
1757
|
-
|
|
1758
|
-
|
|
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
|
|
1763
|
-
}, {
|
|
1764
|
-
backstoreOnly: !0
|
|
1765
|
-
});
|
|
1720
|
+
const { canvas: e } = this.editor, t = e.editorContainer, a = t.clientWidth, n = t.clientHeight, i = Math.max(Math.min(a, w), x), s = Math.max(Math.min(n, O), B);
|
|
1721
|
+
console.log("adaptCanvasToContainer newWidth", i), console.log("adaptCanvasToContainer newHeight", s), e.setDimensions({ width: i, height: s }, { backstoreOnly: !0 });
|
|
1766
1722
|
}
|
|
1767
1723
|
/**
|
|
1768
1724
|
* Обновляет размеры канваса и вписывает объекты в монтажную область.
|
|
@@ -1770,27 +1726,18 @@ class Mt {
|
|
|
1770
1726
|
* @fires editor:canvas-updated
|
|
1771
1727
|
*/
|
|
1772
1728
|
updateCanvasAndFitObjects() {
|
|
1773
|
-
|
|
1729
|
+
const {
|
|
1774
1730
|
canvas: e,
|
|
1775
1731
|
selectionManager: t,
|
|
1776
1732
|
transformManager: a,
|
|
1777
1733
|
montageArea: {
|
|
1778
|
-
width:
|
|
1779
|
-
height:
|
|
1734
|
+
width: n,
|
|
1735
|
+
height: i
|
|
1780
1736
|
}
|
|
1781
1737
|
} = this.editor;
|
|
1782
|
-
this.setResolutionWidth(
|
|
1783
|
-
|
|
1784
|
-
|
|
1785
|
-
}), this.setResolutionHeight(n, {
|
|
1786
|
-
adaptCanvasToContainer: !0,
|
|
1787
|
-
withoutSave: !0
|
|
1788
|
-
}), this.centerMontageArea(), t.selectAll(), a.fitObject({
|
|
1789
|
-
fitAsOneObject: !0,
|
|
1790
|
-
withoutSave: !0
|
|
1791
|
-
}), e.fire("editor:canvas-updated", {
|
|
1792
|
-
width: r,
|
|
1793
|
-
height: n
|
|
1738
|
+
this.setResolutionWidth(n, { adaptCanvasToContainer: !0, withoutSave: !0 }), this.setResolutionHeight(i, { adaptCanvasToContainer: !0, withoutSave: !0 }), this.centerMontageArea(), t.selectAll(), a.fitObject({ fitAsOneObject: !0, withoutSave: !0 }), e.fire("editor:canvas-updated", {
|
|
1739
|
+
width: n,
|
|
1740
|
+
height: i
|
|
1794
1741
|
});
|
|
1795
1742
|
}
|
|
1796
1743
|
/**
|
|
@@ -1805,16 +1752,13 @@ class Mt {
|
|
|
1805
1752
|
* @param {Number} zoom — текущее значение zoom (например, 1, 1.2, 2 и т.д.)
|
|
1806
1753
|
*/
|
|
1807
1754
|
updateCssDimensionsForZoom(e) {
|
|
1808
|
-
|
|
1809
|
-
|
|
1810
|
-
|
|
1811
|
-
|
|
1812
|
-
|
|
1813
|
-
|
|
1814
|
-
|
|
1815
|
-
}, {
|
|
1816
|
-
cssOnly: !0
|
|
1817
|
-
});
|
|
1755
|
+
const { canvas: t, montageArea: a } = this.editor, n = a.width * e, i = a.height * e, s = t.wrapperEl.parentNode;
|
|
1756
|
+
if (!(s instanceof HTMLElement)) return;
|
|
1757
|
+
const r = n <= s.clientWidth ? "100%" : n, c = i <= s.clientHeight ? "100%" : i;
|
|
1758
|
+
t.setDimensions(
|
|
1759
|
+
{ width: r, height: c },
|
|
1760
|
+
{ cssOnly: !0 }
|
|
1761
|
+
);
|
|
1818
1762
|
}
|
|
1819
1763
|
/**
|
|
1820
1764
|
* Устанавливаем CSS ширину канваса для отображения
|
|
@@ -1897,50 +1841,37 @@ class Mt {
|
|
|
1897
1841
|
* @param {string|number} [options.value]
|
|
1898
1842
|
* @fires editor:display-{element}-{dimension}-changed
|
|
1899
1843
|
*/
|
|
1900
|
-
setDisplayDimension() {
|
|
1901
|
-
|
|
1844
|
+
setDisplayDimension({ element: e = "canvas", dimension: t, value: a } = {}) {
|
|
1845
|
+
if (!a) return;
|
|
1846
|
+
const { canvas: n, options: { editorContainer: i } } = this.editor, s = [];
|
|
1847
|
+
switch (e) {
|
|
1848
|
+
case "canvas":
|
|
1849
|
+
s.push(n.lowerCanvasEl, n.upperCanvasEl);
|
|
1850
|
+
break;
|
|
1851
|
+
case "wrapper":
|
|
1852
|
+
s.push(n.wrapperEl);
|
|
1853
|
+
break;
|
|
1854
|
+
case "container":
|
|
1855
|
+
s.push(i);
|
|
1856
|
+
break;
|
|
1857
|
+
default:
|
|
1858
|
+
s.push(n.lowerCanvasEl, n.upperCanvasEl);
|
|
1859
|
+
}
|
|
1860
|
+
const r = t === "width" ? "width" : "height";
|
|
1861
|
+
if (typeof a == "string") {
|
|
1862
|
+
s.forEach((u) => {
|
|
1863
|
+
u.style[r] = a;
|
|
1864
|
+
});
|
|
1865
|
+
return;
|
|
1866
|
+
}
|
|
1867
|
+
if (isNaN(a)) return;
|
|
1868
|
+
const c = `${a}px`;
|
|
1869
|
+
s.forEach((u) => {
|
|
1870
|
+
u.style[r] = c;
|
|
1871
|
+
}), n.fire(`editor:display-${e}-${r}-changed`, {
|
|
1902
1872
|
element: e,
|
|
1903
|
-
dimension: t,
|
|
1904
1873
|
value: a
|
|
1905
|
-
}
|
|
1906
|
-
if (a) {
|
|
1907
|
-
var {
|
|
1908
|
-
canvas: r,
|
|
1909
|
-
options: {
|
|
1910
|
-
editorContainer: n
|
|
1911
|
-
}
|
|
1912
|
-
} = this.editor, i = [];
|
|
1913
|
-
switch (e) {
|
|
1914
|
-
case "canvas":
|
|
1915
|
-
i.push(r.lowerCanvasEl, r.upperCanvasEl);
|
|
1916
|
-
break;
|
|
1917
|
-
case "wrapper":
|
|
1918
|
-
i.push(r.wrapperEl);
|
|
1919
|
-
break;
|
|
1920
|
-
case "container":
|
|
1921
|
-
i.push(n);
|
|
1922
|
-
break;
|
|
1923
|
-
default:
|
|
1924
|
-
i.push(r.lowerCanvasEl, r.upperCanvasEl);
|
|
1925
|
-
}
|
|
1926
|
-
var s = t === "width" ? "width" : "height";
|
|
1927
|
-
if (typeof a == "string") {
|
|
1928
|
-
i.forEach((l) => {
|
|
1929
|
-
l.style[s] = a;
|
|
1930
|
-
});
|
|
1931
|
-
return;
|
|
1932
|
-
}
|
|
1933
|
-
var c = parseFloat(a);
|
|
1934
|
-
if (!isNaN(c)) {
|
|
1935
|
-
var u = "".concat(c, "px");
|
|
1936
|
-
i.forEach((l) => {
|
|
1937
|
-
l.style[s] = u;
|
|
1938
|
-
}), r.fire("editor:display-".concat(e, "-").concat(s, "-changed"), {
|
|
1939
|
-
element: e,
|
|
1940
|
-
value: a
|
|
1941
|
-
});
|
|
1942
|
-
}
|
|
1943
|
-
}
|
|
1874
|
+
});
|
|
1944
1875
|
}
|
|
1945
1876
|
/**
|
|
1946
1877
|
* Если изображение вписывается в допустимые значения, то масштабируем под него канвас
|
|
@@ -1950,57 +1881,40 @@ class Mt {
|
|
|
1950
1881
|
* @param {Boolean} [options.preserveAspectRatio] - Сохранять изначальные пропорции монтажной области
|
|
1951
1882
|
* @fires editor:montage-area-scaled-to-image
|
|
1952
1883
|
*/
|
|
1953
|
-
scaleMontageAreaToImage() {
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
|
|
1957
|
-
|
|
1958
|
-
} = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, {
|
|
1959
|
-
canvas: r,
|
|
1960
|
-
montageArea: n,
|
|
1961
|
-
transformManager: i,
|
|
1884
|
+
scaleMontageAreaToImage({ object: e, preserveAspectRatio: t, withoutSave: a } = {}) {
|
|
1885
|
+
const {
|
|
1886
|
+
canvas: n,
|
|
1887
|
+
montageArea: i,
|
|
1888
|
+
transformManager: s,
|
|
1962
1889
|
options: {
|
|
1963
|
-
montageAreaWidth:
|
|
1890
|
+
montageAreaWidth: r,
|
|
1964
1891
|
montageAreaHeight: c
|
|
1965
1892
|
}
|
|
1966
|
-
} = this.editor, u = e ||
|
|
1967
|
-
if (!
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1972
|
-
|
|
1973
|
-
|
|
1974
|
-
|
|
1975
|
-
|
|
1976
|
-
} = n, f = l / M, v = d / m, S = Math.max(f, v);
|
|
1977
|
-
h = M * S, g = m * S;
|
|
1978
|
-
}
|
|
1979
|
-
this.setResolutionWidth(h, {
|
|
1980
|
-
withoutSave: !0
|
|
1981
|
-
}), this.setResolutionHeight(g, {
|
|
1982
|
-
withoutSave: !0
|
|
1983
|
-
}), (l > s || d > c) && i.calculateAndApplyDefaultZoom(), i.resetObject(u, {
|
|
1984
|
-
withoutSave: !0
|
|
1985
|
-
}), r.centerObject(u), r.renderAll(), a || this.editor.historyManager.saveState(), r.fire("editor:montage-area-scaled-to-image", {
|
|
1986
|
-
object: u,
|
|
1987
|
-
width: h,
|
|
1988
|
-
height: g,
|
|
1989
|
-
preserveAspectRatio: t,
|
|
1990
|
-
withoutSave: a
|
|
1991
|
-
});
|
|
1893
|
+
} = this.editor, u = e || n.getActiveObject();
|
|
1894
|
+
if (!u || u.type !== "image" && u.format !== "svg") return;
|
|
1895
|
+
const { width: l, height: d } = u;
|
|
1896
|
+
let h = Math.min(l, w), g = Math.min(d, O);
|
|
1897
|
+
if (t) {
|
|
1898
|
+
const {
|
|
1899
|
+
width: v,
|
|
1900
|
+
height: f
|
|
1901
|
+
} = i, m = l / v, M = d / f, S = Math.max(m, M);
|
|
1902
|
+
h = v * S, g = f * S;
|
|
1992
1903
|
}
|
|
1904
|
+
this.setResolutionWidth(h, { withoutSave: !0 }), this.setResolutionHeight(g, { withoutSave: !0 }), (l > r || d > c) && s.calculateAndApplyDefaultZoom(), s.resetObject(u, { withoutSave: !0 }), n.centerObject(u), n.renderAll(), a || this.editor.historyManager.saveState(), n.fire("editor:montage-area-scaled-to-image", {
|
|
1905
|
+
object: u,
|
|
1906
|
+
width: h,
|
|
1907
|
+
height: g,
|
|
1908
|
+
preserveAspectRatio: t,
|
|
1909
|
+
withoutSave: a
|
|
1910
|
+
});
|
|
1993
1911
|
}
|
|
1994
1912
|
/**
|
|
1995
1913
|
* Очистка холста
|
|
1996
1914
|
* @fires editor:cleared
|
|
1997
1915
|
*/
|
|
1998
1916
|
clearCanvas() {
|
|
1999
|
-
|
|
2000
|
-
canvas: e,
|
|
2001
|
-
montageArea: t,
|
|
2002
|
-
historyManager: a
|
|
2003
|
-
} = this.editor;
|
|
1917
|
+
const { canvas: e, montageArea: t, historyManager: a } = this.editor;
|
|
2004
1918
|
a.suspendHistory(), e.clear(), e.add(t), e.renderAll(), a.resumeHistory(), a.saveState(), e == null || e.fire("editor:cleared");
|
|
2005
1919
|
}
|
|
2006
1920
|
/**
|
|
@@ -2009,37 +1923,25 @@ class Mt {
|
|
|
2009
1923
|
* @param {Boolean} options.withoutSave - Не сохранять состояние
|
|
2010
1924
|
* @fires editor:default-scale-set
|
|
2011
1925
|
*/
|
|
2012
|
-
setDefaultScale() {
|
|
2013
|
-
|
|
2014
|
-
withoutSave: e
|
|
2015
|
-
} = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, {
|
|
1926
|
+
setDefaultScale({ withoutSave: e } = {}) {
|
|
1927
|
+
const {
|
|
2016
1928
|
canvas: t,
|
|
2017
1929
|
transformManager: a,
|
|
2018
|
-
historyManager:
|
|
1930
|
+
historyManager: n,
|
|
2019
1931
|
options: {
|
|
2020
|
-
montageAreaWidth:
|
|
2021
|
-
montageAreaHeight:
|
|
1932
|
+
montageAreaWidth: i,
|
|
1933
|
+
montageAreaHeight: s
|
|
2022
1934
|
}
|
|
2023
1935
|
} = this.editor;
|
|
2024
|
-
a.resetZoom(), this.setResolutionWidth(n,
|
|
2025
|
-
withoutSave: !0
|
|
2026
|
-
}), this.setResolutionHeight(i, {
|
|
2027
|
-
withoutSave: !0
|
|
2028
|
-
}), t.renderAll(), a.resetObjects(), e || r.saveState(), t.fire("editor:default-scale-set");
|
|
1936
|
+
a.resetZoom(), this.setResolutionWidth(i, { withoutSave: !0 }), this.setResolutionHeight(s, { withoutSave: !0 }), t.renderAll(), a.resetObjects(), e || n.saveState(), t.fire("editor:default-scale-set");
|
|
2029
1937
|
}
|
|
2030
1938
|
/**
|
|
2031
1939
|
* Получение всех объектов внутри монтажной области редактора
|
|
2032
1940
|
* @returns {Array} массив объектов
|
|
2033
1941
|
*/
|
|
2034
1942
|
getObjects() {
|
|
2035
|
-
|
|
2036
|
-
|
|
2037
|
-
montageArea: t,
|
|
2038
|
-
interactionBlocker: {
|
|
2039
|
-
overlayMask: a
|
|
2040
|
-
}
|
|
2041
|
-
} = this.editor, r = e.getObjects();
|
|
2042
|
-
return r.filter((n) => n.id !== t.id && n.id !== a.id);
|
|
1943
|
+
const { canvas: e, montageArea: t, interactionBlocker: { overlayMask: a } } = this.editor;
|
|
1944
|
+
return e.getObjects().filter((i) => i.id !== t.id && i.id !== a.id);
|
|
2043
1945
|
}
|
|
2044
1946
|
}
|
|
2045
1947
|
class ft {
|
|
@@ -2054,7 +1956,7 @@ class ft {
|
|
|
2054
1956
|
* @param {Number} [scale] - Желаемый масштаб относительно размеров контейнера редактора.
|
|
2055
1957
|
*/
|
|
2056
1958
|
calculateAndApplyDefaultZoom(e = this.options.defaultScale) {
|
|
2057
|
-
const { canvas: t } = this.editor, a = t.editorContainer,
|
|
1959
|
+
const { canvas: t } = this.editor, a = t.editorContainer, n = a.clientWidth, i = a.clientHeight, { width: s, height: r } = this.editor.montageArea, c = n / s * e, u = i / r * e;
|
|
2058
1960
|
this.defaultZoom = Math.min(c, u);
|
|
2059
1961
|
const { defaultZoom: l, maxZoomFactor: d, minZoom: h, maxZoom: g } = this;
|
|
2060
1962
|
this.minZoom = Math.min(l / d, h), this.maxZoom = Math.max(l * d, g), this.setZoom();
|
|
@@ -2068,17 +1970,17 @@ class ft {
|
|
|
2068
1970
|
* @fires editor:zoom-changed
|
|
2069
1971
|
* Если передавать координаты курсора, то нужно быть аккуратнее, так как юзер может выйти за пределы рабочей области
|
|
2070
1972
|
*/
|
|
2071
|
-
zoom(e =
|
|
1973
|
+
zoom(e = Mt, t = {}) {
|
|
2072
1974
|
var h, g;
|
|
2073
1975
|
if (!e) return;
|
|
2074
|
-
const { minZoom: a, maxZoom:
|
|
2075
|
-
let d = Number((
|
|
2076
|
-
d >
|
|
2077
|
-
currentZoom:
|
|
1976
|
+
const { minZoom: a, maxZoom: n } = this, { canvas: i } = this.editor, s = i.getZoom(), r = i.getCenterPoint(), c = (h = t.pointX) != null ? h : r.x, u = (g = t.pointY) != null ? g : r.y, l = new K(c, u);
|
|
1977
|
+
let d = Number((s + Number(e)).toFixed(2));
|
|
1978
|
+
d > n && (d = n), d < a && (d = a), i.zoomToPoint(l, d), console.log({
|
|
1979
|
+
currentZoom: s,
|
|
2078
1980
|
zoom: d,
|
|
2079
1981
|
point: l
|
|
2080
|
-
}),
|
|
2081
|
-
currentZoom:
|
|
1982
|
+
}), i.fire("editor:zoom-changed", {
|
|
1983
|
+
currentZoom: i.getZoom(),
|
|
2082
1984
|
zoom: d,
|
|
2083
1985
|
point: l
|
|
2084
1986
|
});
|
|
@@ -2089,12 +1991,12 @@ class ft {
|
|
|
2089
1991
|
* @fires editor:zoom-changed
|
|
2090
1992
|
*/
|
|
2091
1993
|
setZoom(e = this.defaultZoom) {
|
|
2092
|
-
const { minZoom: t, maxZoom: a } = this, { canvas:
|
|
2093
|
-
let
|
|
2094
|
-
e > a && (
|
|
2095
|
-
currentZoom:
|
|
2096
|
-
zoom:
|
|
2097
|
-
point:
|
|
1994
|
+
const { minZoom: t, maxZoom: a } = this, { canvas: n } = this.editor, i = new K(n.getCenterPoint());
|
|
1995
|
+
let s = e;
|
|
1996
|
+
e > a && (s = a), e < t && (s = t), n.zoomToPoint(i, s), n.fire("editor:zoom-changed", {
|
|
1997
|
+
currentZoom: n.getZoom(),
|
|
1998
|
+
zoom: s,
|
|
1999
|
+
point: i
|
|
2098
2000
|
});
|
|
2099
2001
|
}
|
|
2100
2002
|
/**
|
|
@@ -2115,14 +2017,14 @@ class ft {
|
|
|
2115
2017
|
* @param {Boolean} options.withoutSave - Не сохранять состояние
|
|
2116
2018
|
* @fires editor:object-rotated
|
|
2117
2019
|
*/
|
|
2118
|
-
rotate(e =
|
|
2119
|
-
const { canvas: a, historyManager:
|
|
2120
|
-
if (!
|
|
2121
|
-
const
|
|
2122
|
-
|
|
2123
|
-
object:
|
|
2020
|
+
rotate(e = vt, { withoutSave: t } = {}) {
|
|
2021
|
+
const { canvas: a, historyManager: n } = this.editor, i = a.getActiveObject();
|
|
2022
|
+
if (!i) return;
|
|
2023
|
+
const s = i.angle + e;
|
|
2024
|
+
i.rotate(s), i.setCoords(), a.renderAll(), t || n.saveState(), a.fire("editor:object-rotated", {
|
|
2025
|
+
object: i,
|
|
2124
2026
|
withoutSave: t,
|
|
2125
|
-
angle:
|
|
2027
|
+
angle: s
|
|
2126
2028
|
});
|
|
2127
2029
|
}
|
|
2128
2030
|
/**
|
|
@@ -2132,9 +2034,9 @@ class ft {
|
|
|
2132
2034
|
* @fires editor:object-flipped-x
|
|
2133
2035
|
*/
|
|
2134
2036
|
flipX({ withoutSave: e } = {}) {
|
|
2135
|
-
const { canvas: t, historyManager: a } = this.editor,
|
|
2136
|
-
|
|
2137
|
-
object:
|
|
2037
|
+
const { canvas: t, historyManager: a } = this.editor, n = t.getActiveObject();
|
|
2038
|
+
n && (n.flipX = !n.flipX, t.renderAll(), e || a.saveState(), t.fire("editor:object-flipped-x", {
|
|
2039
|
+
object: n,
|
|
2138
2040
|
withoutSave: e
|
|
2139
2041
|
}));
|
|
2140
2042
|
}
|
|
@@ -2145,9 +2047,9 @@ class ft {
|
|
|
2145
2047
|
* @fires editor:object-flipped-y
|
|
2146
2048
|
*/
|
|
2147
2049
|
flipY({ withoutSave: e } = {}) {
|
|
2148
|
-
const { canvas: t, historyManager: a } = this.editor,
|
|
2149
|
-
|
|
2150
|
-
object:
|
|
2050
|
+
const { canvas: t, historyManager: a } = this.editor, n = t.getActiveObject();
|
|
2051
|
+
n && (n.flipY = !n.flipY, t.renderAll(), e || a.saveState(), t.fire("editor:object-flipped-y", {
|
|
2052
|
+
object: n,
|
|
2151
2053
|
withoutSave: e
|
|
2152
2054
|
}));
|
|
2153
2055
|
}
|
|
@@ -2161,11 +2063,11 @@ class ft {
|
|
|
2161
2063
|
opacity: t = 1,
|
|
2162
2064
|
withoutSave: a
|
|
2163
2065
|
} = {}) {
|
|
2164
|
-
const { canvas:
|
|
2165
|
-
|
|
2166
|
-
|
|
2167
|
-
}) :
|
|
2168
|
-
object:
|
|
2066
|
+
const { canvas: n, historyManager: i } = this.editor, s = e || n.getActiveObject();
|
|
2067
|
+
s && (s instanceof T ? s.getObjects().forEach((r) => {
|
|
2068
|
+
r.set("opacity", t);
|
|
2069
|
+
}) : s.set("opacity", t), n.renderAll(), a || i.saveState(), n.fire("editor:object-opacity-changed", {
|
|
2070
|
+
object: s,
|
|
2169
2071
|
opacity: t,
|
|
2170
2072
|
withoutSave: a
|
|
2171
2073
|
}));
|
|
@@ -2185,30 +2087,30 @@ class ft {
|
|
|
2185
2087
|
object: e,
|
|
2186
2088
|
type: t = this.options.scaleType,
|
|
2187
2089
|
withoutSave: a,
|
|
2188
|
-
fitAsOneObject:
|
|
2090
|
+
fitAsOneObject: n
|
|
2189
2091
|
} = {}) {
|
|
2190
|
-
const { canvas:
|
|
2092
|
+
const { canvas: i, imageManager: s, historyManager: r } = this.editor, c = e || i.getActiveObject();
|
|
2191
2093
|
if (c) {
|
|
2192
|
-
if (c.set("angle", 0),
|
|
2094
|
+
if (c.set("angle", 0), c instanceof T && !n) {
|
|
2193
2095
|
const u = c.getObjects();
|
|
2194
|
-
|
|
2195
|
-
const h =
|
|
2196
|
-
d.scale(h),
|
|
2096
|
+
i.discardActiveObject(), u.forEach((d) => {
|
|
2097
|
+
const h = s.calculateScaleFactor({ imageObject: d, scaleType: t });
|
|
2098
|
+
d.scale(h), i.centerObject(d);
|
|
2197
2099
|
});
|
|
2198
|
-
const l = new
|
|
2199
|
-
|
|
2100
|
+
const l = new T(u, { canvas: i });
|
|
2101
|
+
i.setActiveObject(l);
|
|
2200
2102
|
} else {
|
|
2201
|
-
const u =
|
|
2103
|
+
const u = s.calculateScaleFactor({
|
|
2202
2104
|
imageObject: c,
|
|
2203
2105
|
scaleType: t
|
|
2204
2106
|
});
|
|
2205
|
-
c.scale(u),
|
|
2107
|
+
c.scale(u), i.centerObject(c);
|
|
2206
2108
|
}
|
|
2207
|
-
|
|
2109
|
+
i.renderAll(), a || r.saveState(), i.fire("editor:object-fitted", {
|
|
2208
2110
|
object: c,
|
|
2209
2111
|
type: t,
|
|
2210
2112
|
withoutSave: a,
|
|
2211
|
-
fitAsOneObject:
|
|
2113
|
+
fitAsOneObject: n
|
|
2212
2114
|
});
|
|
2213
2115
|
}
|
|
2214
2116
|
}
|
|
@@ -2231,14 +2133,14 @@ class ft {
|
|
|
2231
2133
|
*/
|
|
2232
2134
|
resetObject(e, { alwaysFitObject: t = !1, withoutSave: a = !1 } = {}) {
|
|
2233
2135
|
const {
|
|
2234
|
-
canvas:
|
|
2235
|
-
montageArea:
|
|
2236
|
-
imageManager:
|
|
2237
|
-
historyManager:
|
|
2136
|
+
canvas: n,
|
|
2137
|
+
montageArea: i,
|
|
2138
|
+
imageManager: s,
|
|
2139
|
+
historyManager: r,
|
|
2238
2140
|
options: { scaleType: c }
|
|
2239
|
-
} = this.editor, u = e ||
|
|
2141
|
+
} = this.editor, u = e || n.getActiveObject();
|
|
2240
2142
|
if (!u || u.locked) return;
|
|
2241
|
-
if (
|
|
2143
|
+
if (r.suspendHistory(), u.type === "image" || u.format === "svg" || u.set({
|
|
2242
2144
|
scaleX: 1,
|
|
2243
2145
|
scaleY: 1,
|
|
2244
2146
|
flipX: !1,
|
|
@@ -2247,13 +2149,13 @@ class ft {
|
|
|
2247
2149
|
}), t)
|
|
2248
2150
|
this.fitObject({ object: u, withoutSave: !0, fitAsOneObject: !0 });
|
|
2249
2151
|
else {
|
|
2250
|
-
const { width: d, height: h } =
|
|
2152
|
+
const { width: d, height: h } = i, { width: g, height: v } = u, f = s.calculateScaleFactor({
|
|
2251
2153
|
imageObject: u,
|
|
2252
2154
|
scaleType: c
|
|
2253
2155
|
});
|
|
2254
|
-
c === "contain" &&
|
|
2156
|
+
c === "contain" && f < 1 || c === "cover" && (g > d || v > h) ? this.fitObject({ object: u, withoutSave: !0, fitAsOneObject: !0 }) : u.set({ scaleX: 1, scaleY: 1 });
|
|
2255
2157
|
}
|
|
2256
|
-
u.set({ flipX: !1, flipY: !1, angle: 0 }),
|
|
2158
|
+
u.set({ flipX: !1, flipY: !1, angle: 0 }), n.centerObject(u), n.renderAll(), r.resumeHistory(), a || r.saveState(), n.fire("editor:object-reset", {
|
|
2257
2159
|
object: u,
|
|
2258
2160
|
withoutSave: a,
|
|
2259
2161
|
alwaysFitObject: t
|
|
@@ -2309,16 +2211,16 @@ class jt {
|
|
|
2309
2211
|
if (!(!t || !this.overlayMask)) {
|
|
2310
2212
|
a.suspendHistory(), t.setCoords();
|
|
2311
2213
|
var {
|
|
2312
|
-
left:
|
|
2313
|
-
top:
|
|
2314
|
-
width:
|
|
2315
|
-
height:
|
|
2214
|
+
left: n,
|
|
2215
|
+
top: i,
|
|
2216
|
+
width: s,
|
|
2217
|
+
height: r
|
|
2316
2218
|
} = t.getBoundingRect();
|
|
2317
2219
|
this.overlayMask.set({
|
|
2318
|
-
left:
|
|
2319
|
-
top:
|
|
2320
|
-
width:
|
|
2321
|
-
height:
|
|
2220
|
+
left: n,
|
|
2221
|
+
top: i,
|
|
2222
|
+
width: s,
|
|
2223
|
+
height: r
|
|
2322
2224
|
}), e.discardActiveObject(), this.editor.layerManager.bringToFront(this.overlayMask, {
|
|
2323
2225
|
withoutSave: !0
|
|
2324
2226
|
}), a.resumeHistory();
|
|
@@ -2338,8 +2240,8 @@ class jt {
|
|
|
2338
2240
|
canvasManager: t,
|
|
2339
2241
|
historyManager: a
|
|
2340
2242
|
} = this.editor;
|
|
2341
|
-
a.suspendHistory(), this.isBlocked = !0, e.discardActiveObject(), e.selection = !1, e.skipTargetFind = !0, t.getObjects().forEach((
|
|
2342
|
-
|
|
2243
|
+
a.suspendHistory(), this.isBlocked = !0, e.discardActiveObject(), e.selection = !1, e.skipTargetFind = !0, t.getObjects().forEach((n) => {
|
|
2244
|
+
n.evented = !1, n.selectable = !1;
|
|
2343
2245
|
}), e.upperCanvasEl.style.pointerEvents = "none", e.lowerCanvasEl.style.pointerEvents = "none", this.overlayMask.visible = !0, this.refresh(), e.fire("editor:disabled"), a.resumeHistory();
|
|
2344
2246
|
}
|
|
2345
2247
|
}
|
|
@@ -2354,8 +2256,8 @@ class jt {
|
|
|
2354
2256
|
canvasManager: t,
|
|
2355
2257
|
historyManager: a
|
|
2356
2258
|
} = this.editor;
|
|
2357
|
-
a.suspendHistory(), this.isBlocked = !1, e.selection = !0, e.skipTargetFind = !1, t.getObjects().forEach((
|
|
2358
|
-
|
|
2259
|
+
a.suspendHistory(), this.isBlocked = !1, e.selection = !0, e.skipTargetFind = !1, t.getObjects().forEach((n) => {
|
|
2260
|
+
n.evented = !0, n.selectable = !0;
|
|
2359
2261
|
}), e.upperCanvasEl.style.pointerEvents = "", e.lowerCanvasEl.style.pointerEvents = "", this.overlayMask.visible = !1, e.requestRenderAll(), e.fire("editor:enabled"), a.resumeHistory();
|
|
2360
2262
|
}
|
|
2361
2263
|
}
|
|
@@ -2383,14 +2285,14 @@ class $ {
|
|
|
2383
2285
|
withoutSave: t
|
|
2384
2286
|
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, {
|
|
2385
2287
|
canvas: a,
|
|
2386
|
-
historyManager:
|
|
2288
|
+
historyManager: n
|
|
2387
2289
|
} = this.editor;
|
|
2388
|
-
|
|
2389
|
-
var
|
|
2390
|
-
|
|
2391
|
-
a.bringObjectToFront(
|
|
2392
|
-
}) : a.bringObjectToFront(
|
|
2393
|
-
object:
|
|
2290
|
+
n.suspendHistory();
|
|
2291
|
+
var i = e || a.getActiveObject();
|
|
2292
|
+
i && (i.type === "activeselection" ? i.getObjects().forEach((s) => {
|
|
2293
|
+
a.bringObjectToFront(s);
|
|
2294
|
+
}) : a.bringObjectToFront(i), a.renderAll(), n.resumeHistory(), t || n.saveState(), a.fire("editor:object-bring-to-front", {
|
|
2295
|
+
object: i,
|
|
2394
2296
|
withoutSave: t
|
|
2395
2297
|
}));
|
|
2396
2298
|
}
|
|
@@ -2406,12 +2308,12 @@ class $ {
|
|
|
2406
2308
|
withoutSave: t
|
|
2407
2309
|
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, {
|
|
2408
2310
|
canvas: a,
|
|
2409
|
-
historyManager:
|
|
2311
|
+
historyManager: n
|
|
2410
2312
|
} = this.editor;
|
|
2411
|
-
|
|
2412
|
-
var
|
|
2413
|
-
|
|
2414
|
-
object:
|
|
2313
|
+
n.suspendHistory();
|
|
2314
|
+
var i = e || a.getActiveObject();
|
|
2315
|
+
i && (i.type === "activeselection" ? $._moveSelectionForward(a, i) : a.bringObjectForward(i), a.renderAll(), n.resumeHistory(), t || n.saveState(), a.fire("editor:object-bring-forward", {
|
|
2316
|
+
object: i,
|
|
2415
2317
|
withoutSave: t
|
|
2416
2318
|
}));
|
|
2417
2319
|
}
|
|
@@ -2427,22 +2329,22 @@ class $ {
|
|
|
2427
2329
|
withoutSave: t
|
|
2428
2330
|
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, {
|
|
2429
2331
|
canvas: a,
|
|
2430
|
-
montageArea:
|
|
2431
|
-
historyManager:
|
|
2332
|
+
montageArea: n,
|
|
2333
|
+
historyManager: i,
|
|
2432
2334
|
interactionBlocker: {
|
|
2433
|
-
overlayMask:
|
|
2335
|
+
overlayMask: s
|
|
2434
2336
|
}
|
|
2435
2337
|
} = this.editor;
|
|
2436
|
-
|
|
2437
|
-
var
|
|
2438
|
-
if (
|
|
2439
|
-
if (
|
|
2440
|
-
for (var c =
|
|
2338
|
+
i.suspendHistory();
|
|
2339
|
+
var r = e || a.getActiveObject();
|
|
2340
|
+
if (r) {
|
|
2341
|
+
if (r.type === "activeselection")
|
|
2342
|
+
for (var c = r.getObjects(), u = c.length - 1; u >= 0; u -= 1)
|
|
2441
2343
|
a.sendObjectToBack(c[u]);
|
|
2442
2344
|
else
|
|
2443
|
-
a.sendObjectToBack(
|
|
2444
|
-
a.sendObjectToBack(
|
|
2445
|
-
object:
|
|
2345
|
+
a.sendObjectToBack(r);
|
|
2346
|
+
a.sendObjectToBack(n), a.sendObjectToBack(s), a.renderAll(), i.resumeHistory(), t || i.saveState(), a.fire("editor:object-send-to-back", {
|
|
2347
|
+
object: r,
|
|
2446
2348
|
withoutSave: t
|
|
2447
2349
|
});
|
|
2448
2350
|
}
|
|
@@ -2458,16 +2360,16 @@ class $ {
|
|
|
2458
2360
|
withoutSave: t
|
|
2459
2361
|
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, {
|
|
2460
2362
|
canvas: a,
|
|
2461
|
-
montageArea:
|
|
2462
|
-
historyManager:
|
|
2363
|
+
montageArea: n,
|
|
2364
|
+
historyManager: i,
|
|
2463
2365
|
interactionBlocker: {
|
|
2464
|
-
overlayMask:
|
|
2366
|
+
overlayMask: s
|
|
2465
2367
|
}
|
|
2466
2368
|
} = this.editor;
|
|
2467
|
-
|
|
2468
|
-
var
|
|
2469
|
-
|
|
2470
|
-
object:
|
|
2369
|
+
i.suspendHistory();
|
|
2370
|
+
var r = e || a.getActiveObject();
|
|
2371
|
+
r && (r.type === "activeselection" ? $._moveSelectionBackwards(a, r) : a.sendObjectBackwards(r), a.sendObjectToBack(n), a.sendObjectToBack(s), a.renderAll(), i.resumeHistory(), t || i.saveState(), a.fire("editor:object-send-backwards", {
|
|
2372
|
+
object: r,
|
|
2471
2373
|
withoutSave: t
|
|
2472
2374
|
}));
|
|
2473
2375
|
}
|
|
@@ -2479,20 +2381,20 @@ class $ {
|
|
|
2479
2381
|
* @private
|
|
2480
2382
|
*/
|
|
2481
2383
|
static _moveSelectionForward(e, t) {
|
|
2482
|
-
for (var a = e.getObjects(),
|
|
2384
|
+
for (var a = e.getObjects(), n = t.getObjects(), i = n.map((l) => a.indexOf(l)), s = -1, r = function(d) {
|
|
2483
2385
|
var h = a[d];
|
|
2484
|
-
if (!
|
|
2485
|
-
return
|
|
2486
|
-
}, c = 0; c < a.length && !
|
|
2386
|
+
if (!n.includes(h) && i.some((g) => d > g))
|
|
2387
|
+
return s = d, 1;
|
|
2388
|
+
}, c = 0; c < a.length && !r(c); c += 1)
|
|
2487
2389
|
;
|
|
2488
|
-
if (
|
|
2489
|
-
var u =
|
|
2390
|
+
if (s !== -1) {
|
|
2391
|
+
var u = n.map((l) => ({
|
|
2490
2392
|
obj: l,
|
|
2491
2393
|
index: a.indexOf(l)
|
|
2492
2394
|
})).sort((l, d) => d.index - l.index);
|
|
2493
2395
|
u.forEach((l) => {
|
|
2494
2396
|
var d = a.indexOf(l.obj);
|
|
2495
|
-
d <
|
|
2397
|
+
d < s && (e.moveObjectTo(l.obj, s), s = d);
|
|
2496
2398
|
});
|
|
2497
2399
|
}
|
|
2498
2400
|
}
|
|
@@ -2504,8 +2406,8 @@ class $ {
|
|
|
2504
2406
|
* @private
|
|
2505
2407
|
*/
|
|
2506
2408
|
static _moveSelectionBackwards(e, t) {
|
|
2507
|
-
for (var a = e.getObjects(),
|
|
2508
|
-
e.moveObjectTo(
|
|
2409
|
+
for (var a = e.getObjects(), n = t.getObjects(), i = Math.min(...n.map((r) => a.indexOf(r))), s = n.length - 1; s >= 0; s -= 1)
|
|
2410
|
+
e.moveObjectTo(n[s], i - 1);
|
|
2509
2411
|
}
|
|
2510
2412
|
}
|
|
2511
2413
|
class yt {
|
|
@@ -2537,10 +2439,10 @@ class yt {
|
|
|
2537
2439
|
id: e = `rect-${A()}`,
|
|
2538
2440
|
left: t,
|
|
2539
2441
|
top: a,
|
|
2540
|
-
width:
|
|
2541
|
-
height:
|
|
2542
|
-
fill:
|
|
2543
|
-
} = d,
|
|
2442
|
+
width: n = 100,
|
|
2443
|
+
height: i = 100,
|
|
2444
|
+
fill: s = "blue"
|
|
2445
|
+
} = d, r = X(d, [
|
|
2544
2446
|
"id",
|
|
2545
2447
|
"left",
|
|
2546
2448
|
"top",
|
|
@@ -2552,10 +2454,10 @@ class yt {
|
|
|
2552
2454
|
id: e,
|
|
2553
2455
|
left: t,
|
|
2554
2456
|
top: a,
|
|
2555
|
-
width:
|
|
2556
|
-
height:
|
|
2557
|
-
fill:
|
|
2558
|
-
},
|
|
2457
|
+
width: n,
|
|
2458
|
+
height: i,
|
|
2459
|
+
fill: s
|
|
2460
|
+
}, r));
|
|
2559
2461
|
return !t && !a && h.centerObject(g), u || (h.add(g), c || h.setActiveObject(g), h.renderAll()), g;
|
|
2560
2462
|
}
|
|
2561
2463
|
/**
|
|
@@ -2574,14 +2476,14 @@ class yt {
|
|
|
2574
2476
|
* @param {Object} flags.withoutSelection - Не выделять объект
|
|
2575
2477
|
* @param {Object} flags.withoutAdding - Не добавлять объект в canvas
|
|
2576
2478
|
*/
|
|
2577
|
-
addCircle(u = {}, { withoutSelection:
|
|
2479
|
+
addCircle(u = {}, { withoutSelection: r, withoutAdding: c } = {}) {
|
|
2578
2480
|
var l = u, {
|
|
2579
2481
|
id: e = `circle-${A()}`,
|
|
2580
2482
|
left: t,
|
|
2581
2483
|
top: a,
|
|
2582
|
-
radius:
|
|
2583
|
-
fill:
|
|
2584
|
-
} = l,
|
|
2484
|
+
radius: n = 50,
|
|
2485
|
+
fill: i = "green"
|
|
2486
|
+
} = l, s = X(l, [
|
|
2585
2487
|
"id",
|
|
2586
2488
|
"left",
|
|
2587
2489
|
"top",
|
|
@@ -2592,10 +2494,10 @@ class yt {
|
|
|
2592
2494
|
id: e,
|
|
2593
2495
|
left: t,
|
|
2594
2496
|
top: a,
|
|
2595
|
-
fill:
|
|
2596
|
-
radius:
|
|
2597
|
-
},
|
|
2598
|
-
return !t && !a && d.centerObject(h), c || (d.add(h),
|
|
2497
|
+
fill: i,
|
|
2498
|
+
radius: n
|
|
2499
|
+
}, s));
|
|
2500
|
+
return !t && !a && d.centerObject(h), c || (d.add(h), r || d.setActiveObject(h), d.renderAll()), h;
|
|
2599
2501
|
}
|
|
2600
2502
|
/**
|
|
2601
2503
|
* Добавление треугольника
|
|
@@ -2619,10 +2521,10 @@ class yt {
|
|
|
2619
2521
|
id: e = `triangle-${A()}`,
|
|
2620
2522
|
left: t,
|
|
2621
2523
|
top: a,
|
|
2622
|
-
width:
|
|
2623
|
-
height:
|
|
2624
|
-
fill:
|
|
2625
|
-
} = d,
|
|
2524
|
+
width: n = 100,
|
|
2525
|
+
height: i = 100,
|
|
2526
|
+
fill: s = "yellow"
|
|
2527
|
+
} = d, r = X(d, [
|
|
2626
2528
|
"id",
|
|
2627
2529
|
"left",
|
|
2628
2530
|
"top",
|
|
@@ -2634,14 +2536,14 @@ class yt {
|
|
|
2634
2536
|
id: e,
|
|
2635
2537
|
left: t,
|
|
2636
2538
|
top: a,
|
|
2637
|
-
fill:
|
|
2638
|
-
width:
|
|
2639
|
-
height:
|
|
2640
|
-
},
|
|
2539
|
+
fill: s,
|
|
2540
|
+
width: n,
|
|
2541
|
+
height: i
|
|
2542
|
+
}, r));
|
|
2641
2543
|
return !t && !a && h.centerObject(g), u || (h.add(g), c || h.setActiveObject(g), h.renderAll()), g;
|
|
2642
2544
|
}
|
|
2643
2545
|
}
|
|
2644
|
-
class
|
|
2546
|
+
class bt {
|
|
2645
2547
|
/**
|
|
2646
2548
|
* @param {object} options
|
|
2647
2549
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -2656,16 +2558,19 @@ class pt {
|
|
|
2656
2558
|
copy() {
|
|
2657
2559
|
const { canvas: e, errorManager: t } = this.editor, a = e.getActiveObject();
|
|
2658
2560
|
if (!a) return;
|
|
2659
|
-
if (typeof ClipboardItem == "undefined" || !navigator.clipboard)
|
|
2660
|
-
|
|
2561
|
+
if (typeof ClipboardItem == "undefined" || !navigator.clipboard) {
|
|
2562
|
+
t.emitWarning({
|
|
2661
2563
|
origin: "ClipboardManager",
|
|
2662
2564
|
method: "copy",
|
|
2663
2565
|
code: "CLIPBOARD_NOT_SUPPORTED",
|
|
2566
|
+
// eslint-disable-next-line max-len
|
|
2664
2567
|
message: "ClipboardManager. navigator.clipboard не поддерживается в этом браузере или отсутствует соединение по HTTPS-протоколу."
|
|
2665
2568
|
}), this._cloneAndFire(e, a);
|
|
2569
|
+
return;
|
|
2570
|
+
}
|
|
2666
2571
|
if (a.type !== "image") {
|
|
2667
2572
|
const h = `application/image-editor:${JSON.stringify(a.toObject(["format"]))}`;
|
|
2668
|
-
|
|
2573
|
+
navigator.clipboard.writeText(h).catch((g) => {
|
|
2669
2574
|
t.emitWarning({
|
|
2670
2575
|
origin: "ClipboardManager",
|
|
2671
2576
|
method: "copy",
|
|
@@ -2674,11 +2579,12 @@ class pt {
|
|
|
2674
2579
|
data: g
|
|
2675
2580
|
});
|
|
2676
2581
|
}), this._cloneAndFire(e, a);
|
|
2582
|
+
return;
|
|
2677
2583
|
}
|
|
2678
|
-
const
|
|
2679
|
-
for (let h = 0; h < c.length; h
|
|
2584
|
+
const i = a.toCanvasElement().toDataURL(), s = i.slice(5).split(";")[0], r = i.split(",")[1], c = atob(r), u = new Uint8Array(c.length);
|
|
2585
|
+
for (let h = 0; h < c.length; h += 1)
|
|
2680
2586
|
u[h] = c.charCodeAt(h);
|
|
2681
|
-
const l = new Blob([u.buffer], { type:
|
|
2587
|
+
const l = new Blob([u.buffer], { type: s }), d = new ClipboardItem({ [s]: l });
|
|
2682
2588
|
navigator.clipboard.write([d]).catch((h) => {
|
|
2683
2589
|
t.emitWarning({
|
|
2684
2590
|
origin: "ClipboardManager",
|
|
@@ -2713,21 +2619,21 @@ class pt {
|
|
|
2713
2619
|
* @param {Array} event.clipboardData.items — элементы буфера обмена
|
|
2714
2620
|
*/
|
|
2715
2621
|
handlePasteEvent({ clipboardData: e }) {
|
|
2716
|
-
var
|
|
2717
|
-
if (!((
|
|
2718
|
-
const { imageManager: t } = this.editor, { items: a } = e,
|
|
2719
|
-
if (
|
|
2720
|
-
const
|
|
2721
|
-
if (!
|
|
2622
|
+
var s;
|
|
2623
|
+
if (!((s = e == null ? void 0 : e.items) != null && s.length)) return;
|
|
2624
|
+
const { imageManager: t } = this.editor, { items: a } = e, n = a[a.length - 1];
|
|
2625
|
+
if (n.type !== "text/html") {
|
|
2626
|
+
const r = n.getAsFile();
|
|
2627
|
+
if (!r) return;
|
|
2722
2628
|
const c = new FileReader();
|
|
2723
2629
|
c.onload = (u) => {
|
|
2724
2630
|
u.target && this.editor.imageManager.importImage({ source: u.target.result });
|
|
2725
|
-
}, c.readAsDataURL(
|
|
2631
|
+
}, c.readAsDataURL(r);
|
|
2726
2632
|
return;
|
|
2727
2633
|
}
|
|
2728
|
-
const
|
|
2729
|
-
if (
|
|
2730
|
-
const u = new DOMParser().parseFromString(
|
|
2634
|
+
const i = e.getData("text/html");
|
|
2635
|
+
if (i) {
|
|
2636
|
+
const u = new DOMParser().parseFromString(i, "text/html").querySelector("img");
|
|
2731
2637
|
if (u != null && u.src) {
|
|
2732
2638
|
t.importImage({ source: u.src });
|
|
2733
2639
|
return;
|
|
@@ -2749,13 +2655,13 @@ class pt {
|
|
|
2749
2655
|
left: t.left + 10,
|
|
2750
2656
|
top: t.top + 10,
|
|
2751
2657
|
evented: !0
|
|
2752
|
-
}), t instanceof
|
|
2658
|
+
}), t instanceof T ? (t.canvas = e, t.forEachObject((a) => {
|
|
2753
2659
|
e.add(a);
|
|
2754
2660
|
})) : e.add(t), e.setActiveObject(t), e.requestRenderAll(), e.fire("editor:object-pasted", { object: t });
|
|
2755
2661
|
});
|
|
2756
2662
|
}
|
|
2757
2663
|
}
|
|
2758
|
-
class
|
|
2664
|
+
class pt {
|
|
2759
2665
|
/**
|
|
2760
2666
|
* @param {object} options
|
|
2761
2667
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -2780,11 +2686,11 @@ class bt {
|
|
|
2780
2686
|
skipInnerObjects: t,
|
|
2781
2687
|
withoutSave: a
|
|
2782
2688
|
} = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, {
|
|
2783
|
-
canvas:
|
|
2784
|
-
historyManager:
|
|
2785
|
-
} = this.editor,
|
|
2786
|
-
if (!(!
|
|
2787
|
-
var
|
|
2689
|
+
canvas: n,
|
|
2690
|
+
historyManager: i
|
|
2691
|
+
} = this.editor, s = e || n.getActiveObject();
|
|
2692
|
+
if (!(!s || s.locked)) {
|
|
2693
|
+
var r = {
|
|
2788
2694
|
lockMovementX: !0,
|
|
2789
2695
|
lockMovementY: !0,
|
|
2790
2696
|
lockRotation: !0,
|
|
@@ -2794,12 +2700,12 @@ class bt {
|
|
|
2794
2700
|
lockSkewingY: !0,
|
|
2795
2701
|
locked: !0
|
|
2796
2702
|
};
|
|
2797
|
-
|
|
2798
|
-
var c = !t && ["activeselection", "group"].includes(
|
|
2799
|
-
c &&
|
|
2800
|
-
u.set(
|
|
2801
|
-
}),
|
|
2802
|
-
object:
|
|
2703
|
+
s.set(r);
|
|
2704
|
+
var c = !t && ["activeselection", "group"].includes(s.type);
|
|
2705
|
+
c && s.getObjects().forEach((u) => {
|
|
2706
|
+
u.set(r);
|
|
2707
|
+
}), n.renderAll(), a || i.saveState(), n.fire("editor:object-locked", {
|
|
2708
|
+
object: s,
|
|
2803
2709
|
skipInnerObjects: t,
|
|
2804
2710
|
withoutSave: a
|
|
2805
2711
|
});
|
|
@@ -2819,10 +2725,10 @@ class bt {
|
|
|
2819
2725
|
withoutSave: t
|
|
2820
2726
|
} = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, {
|
|
2821
2727
|
canvas: a,
|
|
2822
|
-
historyManager:
|
|
2823
|
-
} = this.editor,
|
|
2824
|
-
if (
|
|
2825
|
-
var
|
|
2728
|
+
historyManager: n
|
|
2729
|
+
} = this.editor, i = e || a.getActiveObject();
|
|
2730
|
+
if (i) {
|
|
2731
|
+
var s = {
|
|
2826
2732
|
lockMovementX: !1,
|
|
2827
2733
|
lockMovementY: !1,
|
|
2828
2734
|
lockRotation: !1,
|
|
@@ -2832,10 +2738,10 @@ class bt {
|
|
|
2832
2738
|
lockSkewingY: !1,
|
|
2833
2739
|
locked: !1
|
|
2834
2740
|
};
|
|
2835
|
-
|
|
2836
|
-
|
|
2837
|
-
}), a.renderAll(), t ||
|
|
2838
|
-
object:
|
|
2741
|
+
i.set(s), ["activeselection", "group"].includes(i.type) && i.getObjects().forEach((r) => {
|
|
2742
|
+
r.set(s);
|
|
2743
|
+
}), a.renderAll(), t || n.saveState(), a.fire("editor:object-unlocked", {
|
|
2744
|
+
object: i,
|
|
2839
2745
|
withoutSave: t
|
|
2840
2746
|
});
|
|
2841
2747
|
}
|
|
@@ -2865,15 +2771,15 @@ class It {
|
|
|
2865
2771
|
withoutSave: t
|
|
2866
2772
|
} = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, {
|
|
2867
2773
|
canvas: a,
|
|
2868
|
-
historyManager:
|
|
2774
|
+
historyManager: n
|
|
2869
2775
|
} = this.editor;
|
|
2870
|
-
|
|
2871
|
-
var
|
|
2872
|
-
if (
|
|
2873
|
-
var
|
|
2874
|
-
|
|
2875
|
-
object:
|
|
2876
|
-
group:
|
|
2776
|
+
n.suspendHistory();
|
|
2777
|
+
var i = e || a.getActiveObject();
|
|
2778
|
+
if (i && i.type === "activeselection") {
|
|
2779
|
+
var s = i.getObjects(), r = new ze(s);
|
|
2780
|
+
s.forEach((c) => a.remove(c)), r.set("id", "".concat(r.type, "-").concat(A())), a.add(r), a.setActiveObject(r), a.renderAll(), n.resumeHistory(), t || n.saveState(), a.fire("editor:objects-grouped", {
|
|
2781
|
+
object: i,
|
|
2782
|
+
group: r,
|
|
2877
2783
|
withoutSave: t
|
|
2878
2784
|
});
|
|
2879
2785
|
}
|
|
@@ -2891,19 +2797,19 @@ class It {
|
|
|
2891
2797
|
withoutSave: t
|
|
2892
2798
|
} = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, {
|
|
2893
2799
|
canvas: a,
|
|
2894
|
-
historyManager:
|
|
2800
|
+
historyManager: n
|
|
2895
2801
|
} = this.editor;
|
|
2896
|
-
|
|
2897
|
-
var
|
|
2898
|
-
if (!(!
|
|
2899
|
-
var
|
|
2900
|
-
a.remove(
|
|
2901
|
-
var
|
|
2802
|
+
n.suspendHistory();
|
|
2803
|
+
var i = e || a.getActiveObject();
|
|
2804
|
+
if (!(!i || i.type !== "group")) {
|
|
2805
|
+
var s = i.removeAll();
|
|
2806
|
+
a.remove(i), s.forEach((c) => a.add(c));
|
|
2807
|
+
var r = new T(s, {
|
|
2902
2808
|
canvas: a
|
|
2903
2809
|
});
|
|
2904
|
-
a.setActiveObject(
|
|
2905
|
-
object:
|
|
2906
|
-
selection:
|
|
2810
|
+
a.setActiveObject(r), a.renderAll(), n.resumeHistory(), t || n.saveState(), a.fire("editor:objects-ungrouped", {
|
|
2811
|
+
object: i,
|
|
2812
|
+
selection: r,
|
|
2907
2813
|
withoutSave: t
|
|
2908
2814
|
});
|
|
2909
2815
|
}
|
|
@@ -2931,15 +2837,15 @@ class At {
|
|
|
2931
2837
|
objectLockManager: a
|
|
2932
2838
|
} = this.editor;
|
|
2933
2839
|
e.discardActiveObject();
|
|
2934
|
-
var
|
|
2840
|
+
var n = t.getObjects(), i = n.some((r) => r.locked), s = n.length > 1 ? new T(t.getObjects(), {
|
|
2935
2841
|
canvas: e
|
|
2936
|
-
}) :
|
|
2937
|
-
|
|
2938
|
-
object:
|
|
2842
|
+
}) : n[0];
|
|
2843
|
+
i && a.lockObject({
|
|
2844
|
+
object: s,
|
|
2939
2845
|
skipInnerObjects: !0,
|
|
2940
2846
|
withoutSave: !0
|
|
2941
|
-
}), e.setActiveObject(
|
|
2942
|
-
selected:
|
|
2847
|
+
}), e.setActiveObject(s), e.requestRenderAll(), e.fire("editor:all-objects-selected", {
|
|
2848
|
+
selected: s
|
|
2943
2849
|
});
|
|
2944
2850
|
}
|
|
2945
2851
|
}
|
|
@@ -2967,22 +2873,22 @@ class St {
|
|
|
2967
2873
|
withoutSave: t
|
|
2968
2874
|
} = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, {
|
|
2969
2875
|
canvas: a,
|
|
2970
|
-
historyManager:
|
|
2971
|
-
groupingManager:
|
|
2972
|
-
} = this.editor,
|
|
2973
|
-
|
|
2974
|
-
if (
|
|
2975
|
-
|
|
2876
|
+
historyManager: n,
|
|
2877
|
+
groupingManager: i
|
|
2878
|
+
} = this.editor, s = (e || a.getActiveObjects()).filter((r) => !r.locked);
|
|
2879
|
+
s != null && s.length && (n.suspendHistory(), s.forEach((r) => {
|
|
2880
|
+
if (r.type === "group" && r.format !== "svg") {
|
|
2881
|
+
i.ungroup(r), this.deleteSelectedObjects();
|
|
2976
2882
|
return;
|
|
2977
2883
|
}
|
|
2978
|
-
a.remove(
|
|
2979
|
-
}), a.discardActiveObject(), a.renderAll(),
|
|
2980
|
-
objects:
|
|
2884
|
+
a.remove(r);
|
|
2885
|
+
}), a.discardActiveObject(), a.renderAll(), n.resumeHistory(), t || n.saveState(), a.fire("editor:objects-deleted", {
|
|
2886
|
+
objects: s,
|
|
2981
2887
|
withoutSave: t
|
|
2982
2888
|
}));
|
|
2983
2889
|
}
|
|
2984
2890
|
}
|
|
2985
|
-
|
|
2891
|
+
const Ct = {
|
|
2986
2892
|
IMAGE_MANAGER: {
|
|
2987
2893
|
/**
|
|
2988
2894
|
* Некорректный Content-Type изображения
|
|
@@ -3012,7 +2918,7 @@ var Ct = {
|
|
|
3012
2918
|
/**
|
|
3013
2919
|
* Коды ошибок и предупреждений для ClipboardManager.
|
|
3014
2920
|
*/
|
|
3015
|
-
|
|
2921
|
+
CLIPBOARD_MANAGER: {
|
|
3016
2922
|
/**
|
|
3017
2923
|
* Буфер обмена не поддерживается в браузере или отсутствует HTTPS-соединение.
|
|
3018
2924
|
*/
|
|
@@ -3029,6 +2935,15 @@ var Ct = {
|
|
|
3029
2935
|
* Ошибка клонирования объекта.
|
|
3030
2936
|
*/
|
|
3031
2937
|
CLONE_FAILED: "CLONE_FAILED"
|
|
2938
|
+
},
|
|
2939
|
+
/**
|
|
2940
|
+
* Коды ошибок и предупреждений для CanvasManager.
|
|
2941
|
+
*/
|
|
2942
|
+
CANVAS_MANAGER: {
|
|
2943
|
+
/**
|
|
2944
|
+
* Ошибка при получении активного объекта.
|
|
2945
|
+
*/
|
|
2946
|
+
NO_ACTIVE_OBJECT: "NO_ACTIVE_OBJECT"
|
|
3032
2947
|
}
|
|
3033
2948
|
};
|
|
3034
2949
|
class q {
|
|
@@ -3051,24 +2966,24 @@ class q {
|
|
|
3051
2966
|
* @param {string} [options.message] — текст ошибки (опционально, если не передан, то используется код ошибки)
|
|
3052
2967
|
* @fires editor:error
|
|
3053
2968
|
*/
|
|
3054
|
-
emitError({ origin: e = "ImageEditor", method: t = "Unknown Method", code: a, data:
|
|
2969
|
+
emitError({ origin: e = "ImageEditor", method: t = "Unknown Method", code: a, data: n, message: i }) {
|
|
3055
2970
|
if (!q.isValidErrorCode(a)) {
|
|
3056
2971
|
console.warn("Неизвестный код ошибки: ", { code: a, origin: e, method: t });
|
|
3057
2972
|
return;
|
|
3058
2973
|
}
|
|
3059
2974
|
if (!a) return;
|
|
3060
|
-
const
|
|
3061
|
-
console.error(`${e}. ${t}. ${a}. ${
|
|
3062
|
-
const
|
|
2975
|
+
const s = i || a;
|
|
2976
|
+
console.error(`${e}. ${t}. ${a}. ${s}`, n);
|
|
2977
|
+
const r = {
|
|
3063
2978
|
code: a,
|
|
3064
2979
|
origin: e,
|
|
3065
2980
|
method: t,
|
|
3066
|
-
message:
|
|
3067
|
-
data:
|
|
2981
|
+
message: s,
|
|
2982
|
+
data: n
|
|
3068
2983
|
};
|
|
3069
2984
|
this._buffer.push(C({
|
|
3070
2985
|
type: "editor:error"
|
|
3071
|
-
},
|
|
2986
|
+
}, r)), this.editor.canvas.fire("editor:error", r);
|
|
3072
2987
|
}
|
|
3073
2988
|
/**
|
|
3074
2989
|
* Эмитит предупреждение через fabricjs
|
|
@@ -3080,23 +2995,23 @@ class q {
|
|
|
3080
2995
|
* @param {string} [options.message] — текст предупреждения (опционально, если не передан, то используется код предупреждения)
|
|
3081
2996
|
* @fires editor:warning
|
|
3082
2997
|
*/
|
|
3083
|
-
emitWarning({ origin: e = "ImageEditor", method: t = "Unknown Method", code: a, message:
|
|
2998
|
+
emitWarning({ origin: e = "ImageEditor", method: t = "Unknown Method", code: a, message: n, data: i }) {
|
|
3084
2999
|
if (!q.isValidErrorCode(a)) {
|
|
3085
3000
|
console.warn("Неизвестный код предупреждения: ", { code: a, origin: e, method: t });
|
|
3086
3001
|
return;
|
|
3087
3002
|
}
|
|
3088
|
-
const
|
|
3089
|
-
console.warn(`${e}. ${t}. ${a}. ${
|
|
3090
|
-
const
|
|
3003
|
+
const s = n || a;
|
|
3004
|
+
console.warn(`${e}. ${t}. ${a}. ${s}`, i);
|
|
3005
|
+
const r = {
|
|
3091
3006
|
code: a,
|
|
3092
3007
|
origin: e,
|
|
3093
3008
|
method: t,
|
|
3094
|
-
message:
|
|
3095
|
-
data:
|
|
3009
|
+
message: s,
|
|
3010
|
+
data: i
|
|
3096
3011
|
};
|
|
3097
3012
|
this._buffer.push(C({
|
|
3098
3013
|
type: "editor:warning"
|
|
3099
|
-
},
|
|
3014
|
+
}, r)), this.editor.canvas.fire("editor:warning", r);
|
|
3100
3015
|
}
|
|
3101
3016
|
static isValidErrorCode(e) {
|
|
3102
3017
|
return e ? Object.values(Ct).some((t) => Object.values(t).includes(e)) : !1;
|
|
@@ -3117,20 +3032,20 @@ class de {
|
|
|
3117
3032
|
editorContainerWidth: e,
|
|
3118
3033
|
editorContainerHeight: t,
|
|
3119
3034
|
canvasWrapperWidth: a,
|
|
3120
|
-
canvasWrapperHeight:
|
|
3121
|
-
canvasCSSWidth:
|
|
3122
|
-
canvasCSSHeight:
|
|
3123
|
-
initialImage:
|
|
3035
|
+
canvasWrapperHeight: n,
|
|
3036
|
+
canvasCSSWidth: i,
|
|
3037
|
+
canvasCSSHeight: s,
|
|
3038
|
+
initialImage: r,
|
|
3124
3039
|
initialStateJSON: c,
|
|
3125
3040
|
scaleType: u,
|
|
3126
3041
|
_onReadyCallback: l
|
|
3127
3042
|
} = this.options;
|
|
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
|
|
3043
|
+
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 bt({ editor: this }), this.objectLockManager = new pt({ 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 R({ editor: this, options: this.options }), this.canvasManager.setEditorContainerWidth(e), this.canvasManager.setEditorContainerHeight(t), this.canvasManager.setCanvasWrapperWidth(a), this.canvasManager.setCanvasWrapperHeight(n), this.canvasManager.setCanvasCSSWidth(i), this.canvasManager.setCanvasCSSHeight(s), r != null && r.source) {
|
|
3129
3044
|
const {
|
|
3130
3045
|
source: d,
|
|
3131
3046
|
scale: h = `image-${u}`,
|
|
3132
3047
|
withoutSave: g = !0
|
|
3133
|
-
} =
|
|
3048
|
+
} = r;
|
|
3134
3049
|
yield this.imageManager.importImage({ source: d, scale: h, withoutSave: g });
|
|
3135
3050
|
} else
|
|
3136
3051
|
this.canvasManager.setDefaultScale({ withoutSave: !0 });
|
|
@@ -3189,7 +3104,7 @@ class de {
|
|
|
3189
3104
|
const e = document.createElement("canvas");
|
|
3190
3105
|
e.width = 20, e.height = 20;
|
|
3191
3106
|
const t = e.getContext("2d");
|
|
3192
|
-
return t.fillStyle = "#ddd", t.fillRect(0, 0, 40, 40), t.fillStyle = "#ccc", t.fillRect(0, 0, 10, 10), t.fillRect(10, 10, 10, 10), new
|
|
3107
|
+
return t.fillStyle = "#ddd", t.fillRect(0, 0, 40, 40), t.fillStyle = "#ccc", t.fillRect(0, 0, 10, 10), t.fillRect(10, 10, 10, 10), new _e({
|
|
3193
3108
|
source: e,
|
|
3194
3109
|
repeat: "repeat"
|
|
3195
3110
|
});
|
|
@@ -3283,18 +3198,18 @@ const Dt = {
|
|
|
3283
3198
|
deleteObjectsByHotkey: !0,
|
|
3284
3199
|
resetObjectFitByDoubleClick: !0
|
|
3285
3200
|
};
|
|
3286
|
-
function
|
|
3201
|
+
function wt(o, e = {}) {
|
|
3287
3202
|
const t = C(C({}, Dt), e), a = document.getElementById(o);
|
|
3288
3203
|
if (!a)
|
|
3289
3204
|
return Promise.reject(new Error(`Контейнер с ID "${o}" не найден.`));
|
|
3290
|
-
const
|
|
3291
|
-
return
|
|
3292
|
-
t._onReadyCallback =
|
|
3293
|
-
const
|
|
3294
|
-
window[o] =
|
|
3205
|
+
const n = document.createElement("canvas");
|
|
3206
|
+
return n.id = `${o}-canvas`, a.appendChild(n), t.editorContainer = a, new Promise((i) => {
|
|
3207
|
+
t._onReadyCallback = i;
|
|
3208
|
+
const s = new de(n.id, t);
|
|
3209
|
+
window[o] = s;
|
|
3295
3210
|
});
|
|
3296
3211
|
}
|
|
3297
3212
|
export {
|
|
3298
|
-
|
|
3213
|
+
wt as default
|
|
3299
3214
|
};
|
|
3300
3215
|
//# sourceMappingURL=main.js.map
|