@anu3ev/fabric-image-editor 0.1.41 → 0.1.43
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 +759 -951
- package/package.json +1 -1
package/dist/main.js
CHANGED
|
@@ -1,44 +1,44 @@
|
|
|
1
|
-
var
|
|
1
|
+
var we = Object.defineProperty;
|
|
2
2
|
var G = Object.getOwnPropertySymbols;
|
|
3
|
-
var
|
|
4
|
-
var me = (o, e, t) => e in o ?
|
|
3
|
+
var fe = Object.prototype.hasOwnProperty, je = Object.prototype.propertyIsEnumerable;
|
|
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
|
-
|
|
6
|
+
fe.call(e, t) && me(o, t, e[t]);
|
|
7
7
|
if (G)
|
|
8
8
|
for (var t of G(e))
|
|
9
|
-
|
|
9
|
+
je.call(e, t) && me(o, t, e[t]);
|
|
10
10
|
return o;
|
|
11
11
|
};
|
|
12
12
|
var X = (o, e) => {
|
|
13
13
|
var t = {};
|
|
14
14
|
for (var a in o)
|
|
15
|
-
|
|
15
|
+
fe.call(o, a) && e.indexOf(a) < 0 && (t[a] = o[a]);
|
|
16
16
|
if (o != null && G)
|
|
17
17
|
for (var a of G(o))
|
|
18
|
-
e.indexOf(a) < 0 &&
|
|
18
|
+
e.indexOf(a) < 0 && je.call(o, a) && (t[a] = o[a]);
|
|
19
19
|
return t;
|
|
20
20
|
};
|
|
21
|
-
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
|
s(t.next(c));
|
|
25
25
|
} catch (u) {
|
|
26
|
-
|
|
26
|
+
n(u);
|
|
27
27
|
}
|
|
28
|
-
},
|
|
28
|
+
}, r = (c) => {
|
|
29
29
|
try {
|
|
30
30
|
s(t.throw(c));
|
|
31
31
|
} catch (u) {
|
|
32
|
-
|
|
32
|
+
n(u);
|
|
33
33
|
}
|
|
34
|
-
}, s = (c) => c.done ? a(c.value) : Promise.resolve(c.value).then(
|
|
34
|
+
}, s = (c) => c.done ? a(c.value) : Promise.resolve(c.value).then(i, r);
|
|
35
35
|
s((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
44
|
class R {
|
|
@@ -68,15 +68,15 @@ class R {
|
|
|
68
68
|
adaptCanvasToContainerOnResize: e,
|
|
69
69
|
canvasDragging: t,
|
|
70
70
|
mouseWheelZooming: a,
|
|
71
|
-
bringToFrontOnSelection:
|
|
72
|
-
copyObjectsByHotkey:
|
|
73
|
-
pasteImageFromClipboard:
|
|
71
|
+
bringToFrontOnSelection: n,
|
|
72
|
+
copyObjectsByHotkey: i,
|
|
73
|
+
pasteImageFromClipboard: r,
|
|
74
74
|
undoRedoByHotKeys: s,
|
|
75
75
|
selectAllByHotkey: c,
|
|
76
76
|
deleteObjectsByHotkey: u,
|
|
77
|
-
resetObjectFitByDoubleClick:
|
|
77
|
+
resetObjectFitByDoubleClick: l
|
|
78
78
|
} = this.options;
|
|
79
|
-
t && (this.canvas.on("mouse:down", this.handleCanvasDragStartBound), this.canvas.on("mouse:move", this.handleCanvasDraggingBound), this.canvas.on("mouse:up", this.handleCanvasDragEndBound), document.addEventListener("keydown", this.handleSpaceKeyDownBound, { capture: !0 }), document.addEventListener("keyup", this.handleSpaceKeyUpBound, { capture: !0 })), a && this.canvas.on("mouse:wheel", this.handleMouseWheelZoomBound),
|
|
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 }), r && document.addEventListener("paste", this.handlePasteEventBound, { capture: !0 }), s && (document.addEventListener("keydown", this.handleUndoRedoEventBound, { capture: !0 }), document.addEventListener("keyup", this.handleUndoRedoKeyUpBound, { capture: !0 })), c && document.addEventListener("keydown", this.handleSelectAllEventBound, { capture: !0 }), u && document.addEventListener("keydown", this.handleDeleteObjectsEventBound, { capture: !0 }), this.canvas.on("object:modified", this.handleObjectModifiedHistoryBound), this.canvas.on("object:rotating", this.handleObjectRotatingHistoryBound), this.canvas.on("object:added", this.handleObjectAddedHistoryBound), this.canvas.on("object:removed", this.handleObjectRemovedHistoryBound), this.canvas.on("object:added", this.handleOverlayUpdateBound), this.canvas.on("selection:created", this.handleOverlayUpdateBound), this.canvas.on("selection:created", this.handleLockedSelectionBound), this.canvas.on("selection:updated", this.handleLockedSelectionBound);
|
|
80
80
|
}
|
|
81
81
|
/**
|
|
82
82
|
* При массовом выделении объектов удаляем из него залоченные.
|
|
@@ -85,20 +85,20 @@ class R {
|
|
|
85
85
|
* @param {TPointerEvent} [params.e] - событие указателя (опционально)
|
|
86
86
|
*/
|
|
87
87
|
_filterLockedSelection({ selected: e, e: t }) {
|
|
88
|
-
if (!(e != null && e.length) || !(t instanceof MouseEvent) || e.length === 1 || !e.some((
|
|
89
|
-
const
|
|
90
|
-
if (
|
|
88
|
+
if (!(e != null && e.length) || !(t instanceof MouseEvent) || e.length === 1 || !e.some((r) => r.locked)) return;
|
|
89
|
+
const n = e.filter((r) => !r.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 R {
|
|
|
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 R {
|
|
|
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 R {
|
|
|
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 R {
|
|
|
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((r) => {
|
|
205
|
+
r.set({
|
|
206
206
|
selectable: !1,
|
|
207
207
|
evented: !1
|
|
208
208
|
});
|
|
@@ -296,15 +296,15 @@ class R {
|
|
|
296
296
|
*/
|
|
297
297
|
static debounce(e, t) {
|
|
298
298
|
let a = null;
|
|
299
|
-
return function(...
|
|
300
|
-
const
|
|
299
|
+
return function(...n) {
|
|
300
|
+
const i = this;
|
|
301
301
|
a && clearTimeout(a), a = setTimeout(() => {
|
|
302
|
-
e.apply(
|
|
302
|
+
e.apply(i, n);
|
|
303
303
|
}, t);
|
|
304
304
|
};
|
|
305
305
|
}
|
|
306
306
|
}
|
|
307
|
-
class
|
|
307
|
+
class Re {
|
|
308
308
|
/**
|
|
309
309
|
* @description Класс для динамической загрузки внешних модулей.
|
|
310
310
|
*/
|
|
@@ -348,11 +348,11 @@ class Pe {
|
|
|
348
348
|
data: t
|
|
349
349
|
} = e, {
|
|
350
350
|
requestId: a,
|
|
351
|
-
success:
|
|
352
|
-
data:
|
|
353
|
-
error:
|
|
351
|
+
success: n,
|
|
352
|
+
data: i,
|
|
353
|
+
error: r
|
|
354
354
|
} = t, s = this._callbacks.get(a);
|
|
355
|
-
s && (
|
|
355
|
+
s && (n ? s.resolve(i) : s.reject(new Error(r)), this._callbacks.delete(a));
|
|
356
356
|
}
|
|
357
357
|
/**
|
|
358
358
|
* Универсальный метод отправки команды в воркер
|
|
@@ -362,15 +362,15 @@ class Pe {
|
|
|
362
362
|
* @returns {Promise<any>}
|
|
363
363
|
*/
|
|
364
364
|
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:
|
|
365
|
+
var a = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : [], n = "".concat(e, ":").concat(A(8));
|
|
366
|
+
return new Promise((i, r) => {
|
|
367
|
+
this._callbacks.set(n, {
|
|
368
|
+
resolve: i,
|
|
369
|
+
reject: r
|
|
370
370
|
}), this.worker.postMessage({
|
|
371
371
|
action: e,
|
|
372
372
|
payload: t,
|
|
373
|
-
requestId:
|
|
373
|
+
requestId: n
|
|
374
374
|
}, a);
|
|
375
375
|
});
|
|
376
376
|
}
|
|
@@ -381,24 +381,24 @@ class Pe {
|
|
|
381
381
|
this.worker.terminate();
|
|
382
382
|
}
|
|
383
383
|
}
|
|
384
|
-
var I = 12, We = 2,
|
|
385
|
-
function J(o, e, t, a,
|
|
386
|
-
var
|
|
387
|
-
o.save(), o.translate(e, t), o.rotate(P.degreesToRadians(
|
|
384
|
+
var I = 12, We = 2, ae = 8, ne = 20, Fe = 100, ie = 20, re = 8, Ve = 100, se = 32, oe = 1, Ge = "#2B2D33", ce = "#3D8BF4", ue = "#FFFFFF";
|
|
385
|
+
function J(o, e, t, a, n) {
|
|
386
|
+
var i = I, r = We;
|
|
387
|
+
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, r), o.fill(), o.stroke(), o.restore();
|
|
388
388
|
}
|
|
389
|
-
function
|
|
390
|
-
var
|
|
391
|
-
o.save(), o.translate(e, t), o.rotate(P.degreesToRadians(
|
|
389
|
+
function ye(o, e, t, a, n) {
|
|
390
|
+
var i = ae, r = ne, s = Fe;
|
|
391
|
+
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, r, s), o.fill(), o.stroke(), o.restore();
|
|
392
392
|
}
|
|
393
|
-
function
|
|
394
|
-
var
|
|
395
|
-
o.save(), o.translate(e, t), o.rotate(P.degreesToRadians(
|
|
393
|
+
function be(o, e, t, a, n) {
|
|
394
|
+
var i = ie, r = re, s = Ve;
|
|
395
|
+
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, r, s), o.fill(), o.stroke(), o.restore();
|
|
396
396
|
}
|
|
397
|
-
var Xe = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTE4Ljc1IDQuMzc1djMuNzVhLjYyNS42MjUgMCAwIDEtLjYyNS42MjVoLTMuNzVhLjYyNS42MjUgMCAwIDEgMC0xLjI1aDIuMTRsLTIuMDc3LTEuOTAzLS4wMi0uMDE5YTYuMjUgNi4yNSAwIDEgMC0uMTMgOC45NjcuNjI2LjYyNiAwIDAgMSAuODYuOTA5QTcuNDU2IDcuNDU2IDAgMCAxIDEwIDE3LjVoLS4xMDNhNy41IDcuNSAwIDEgMSA1LjM5Ni0xMi44MTJMMTcuNSA2LjcwM1Y0LjM3NWEuNjI1LjYyNSAwIDAgMSAxLjI1IDBaIi8+PC9zdmc+",
|
|
398
|
-
|
|
399
|
-
function Qe(o, e, t, a,
|
|
400
|
-
var
|
|
401
|
-
o.save(), o.translate(e, t), o.rotate(P.degreesToRadians(
|
|
397
|
+
var Xe = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTE4Ljc1IDQuMzc1djMuNzVhLjYyNS42MjUgMCAwIDEtLjYyNS42MjVoLTMuNzVhLjYyNS42MjUgMCAwIDEgMC0xLjI1aDIuMTRsLTIuMDc3LTEuOTAzLS4wMi0uMDE5YTYuMjUgNi4yNSAwIDEgMC0uMTMgOC45NjcuNjI2LjYyNiAwIDAgMSAuODYuOTA5QTcuNDU2IDcuNDU2IDAgMCAxIDEwIDE3LjVoLS4xMDNhNy41IDcuNSAwIDEgMSA1LjM5Ni0xMi44MTJMMTcuNSA2LjcwM1Y0LjM3NWEuNjI1LjYyNSAwIDAgMSAxLjI1IDBaIi8+PC9zdmc+", Ce = new Image();
|
|
398
|
+
Ce.src = Xe;
|
|
399
|
+
function Qe(o, e, t, a, n) {
|
|
400
|
+
var i = se, r = i / 2;
|
|
401
|
+
o.save(), o.translate(e, t), o.rotate(P.degreesToRadians(n.angle)), o.fillStyle = Ge, o.beginPath(), o.arc(0, 0, r, 0, 2 * Math.PI), o.fill(), o.drawImage(Ce, -16 / 2, -16 / 2, r, r), o.restore();
|
|
402
402
|
}
|
|
403
403
|
var Je = {
|
|
404
404
|
// Угловые точки
|
|
@@ -432,86 +432,86 @@ var Je = {
|
|
|
432
432
|
},
|
|
433
433
|
// Середина вертикалей
|
|
434
434
|
ml: {
|
|
435
|
-
render:
|
|
436
|
-
sizeX:
|
|
437
|
-
sizeY:
|
|
435
|
+
render: ye,
|
|
436
|
+
sizeX: ae,
|
|
437
|
+
sizeY: ne,
|
|
438
438
|
offsetX: 0,
|
|
439
439
|
offsetY: 0
|
|
440
440
|
},
|
|
441
441
|
mr: {
|
|
442
|
-
render:
|
|
443
|
-
sizeX:
|
|
444
|
-
sizeY:
|
|
442
|
+
render: ye,
|
|
443
|
+
sizeX: ae,
|
|
444
|
+
sizeY: ne,
|
|
445
445
|
offsetX: 0,
|
|
446
446
|
offsetY: 0
|
|
447
447
|
},
|
|
448
448
|
// Середина горизонталей
|
|
449
449
|
mt: {
|
|
450
|
-
render:
|
|
451
|
-
sizeX:
|
|
452
|
-
sizeY:
|
|
450
|
+
render: be,
|
|
451
|
+
sizeX: ie,
|
|
452
|
+
sizeY: re,
|
|
453
453
|
offsetX: 0,
|
|
454
454
|
offsetY: 0
|
|
455
455
|
},
|
|
456
456
|
mb: {
|
|
457
|
-
render:
|
|
458
|
-
sizeX:
|
|
459
|
-
sizeY:
|
|
457
|
+
render: be,
|
|
458
|
+
sizeX: ie,
|
|
459
|
+
sizeY: re,
|
|
460
460
|
offsetX: 0,
|
|
461
461
|
offsetY: 0
|
|
462
462
|
},
|
|
463
463
|
// Специальный «rotate» контрол
|
|
464
464
|
mtr: {
|
|
465
465
|
render: Qe,
|
|
466
|
-
sizeX:
|
|
467
|
-
sizeY:
|
|
466
|
+
sizeX: se,
|
|
467
|
+
sizeY: se,
|
|
468
468
|
offsetX: 0,
|
|
469
469
|
offsetY: -32
|
|
470
470
|
}
|
|
471
471
|
};
|
|
472
472
|
class Ke {
|
|
473
473
|
static apply() {
|
|
474
|
-
var e =
|
|
474
|
+
var e = Oe.createObjectDefaultControls();
|
|
475
475
|
Object.entries(Je).forEach((t) => {
|
|
476
|
-
var [a,
|
|
476
|
+
var [a, n] = t;
|
|
477
477
|
Object.assign(e[a], {
|
|
478
|
-
render:
|
|
479
|
-
sizeX:
|
|
480
|
-
sizeY:
|
|
481
|
-
offsetX:
|
|
482
|
-
offsetY:
|
|
483
|
-
}), a === "mtr" && (e[a].cursorStyle = "grab", e[a].mouseDownHandler = (
|
|
484
|
-
var u =
|
|
478
|
+
render: n.render,
|
|
479
|
+
sizeX: n.sizeX,
|
|
480
|
+
sizeY: n.sizeY,
|
|
481
|
+
offsetX: n.offsetX,
|
|
482
|
+
offsetY: n.offsetY
|
|
483
|
+
}), a === "mtr" && (e[a].cursorStyle = "grab", e[a].mouseDownHandler = (i, r, s, c) => {
|
|
484
|
+
var u = r.target;
|
|
485
485
|
u.canvas.setCursor("grabbing");
|
|
486
486
|
});
|
|
487
|
-
}),
|
|
487
|
+
}), Te.ownDefaults.controls = e;
|
|
488
488
|
}
|
|
489
489
|
}
|
|
490
|
-
var $e = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNi44NzUgMi41YS42MjUuNjI1IDAgMCAwLS42MjUuNjI0VjYuMjVIMy4xMjVhLjYyNS42MjUgMCAwIDAtLjYyNS42MjV2MTBjMCAuMzQ1LjI4LjYyNS42MjUuNjI1aDEwYy4zNDUgMCAuNjI1LS4yOC42MjUtLjYyNXYtMy4xMjZoMy4xMjVjLjM0NSAwIC42MjUtLjI4LjYyNS0uNjI1di0xMGEuNjI1LjYyNSAwIDAgMC0uNjI1LS42MjVoLTEwWm02Ljg3NSAxMGgyLjVWMy43NUg3LjV2Mi41aDUuNjI1Yy4zNDUgMCAuNjI1LjI4LjYyNS42MjV2NS42MjRabS0xMCAzLjc1VjcuNWg4Ljc1djguNzVIMy43NVoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==", qe = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMi41IDcuNWMwLS42OS41Ni0xLjI1IDEuMjUtMS4yNWgxMi41Yy42OSAwIDEuMjUuNTYgMS4yNSAxLjI1djguNzVjMCAuNjktLjU2IDEuMjUtMS4yNSAxLjI1SDMuNzVjLS42OSAwLTEuMjUtLjU2LTEuMjUtMS4yNVY3LjVabTEzLjc1IDBIMy43NXY4Ljc1aDEyLjVWNy41WiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTAgMS44NzVhMi4xODggMi4xODggMCAwIDAtMi4xODggMi4xODh2Mi44MTJhLjYyNS42MjUgMCAxIDEtMS4yNSAwVjQuMDYyYTMuNDM3IDMuNDM3IDAgMSAxIDYuODc1IDB2Mi44MTNhLjYyNS42MjUgMCAxIDEtMS4yNSAwVjQuMDYyQTIuMTg4IDIuMTg4IDAgMCAwIDEwIDEuODc2WiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTEwIDEyLjgxM2EuOTM3LjkzNyAwIDEgMCAwLTEuODc1LjkzNy45MzcgMCAwIDAgMCAxLjg3NFoiLz48L3N2Zz4=", et = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTE2LjI1IDYuMjVINy41VjQuMzc1YTIuNSAyLjUgMCAwIDEgMi41LTIuNWMxLjIgMCAyLjI4MS44NiAyLjUxMiAyYS42MjUuNjI1IDAgMCAwIDEuMjI2LS4yNWMtLjM1NC0xLjczOC0xLjkyNS0zLTMuNzM4LTNhMy43NTQgMy43NTQgMCAwIDAtMy43NSAzLjc1VjYuMjVoLTIuNUExLjI1IDEuMjUgMCAwIDAgMi41IDcuNXY4Ljc1YTEuMjUgMS4yNSAwIDAgMCAxLjI1IDEuMjVoMTIuNWExLjI1IDEuMjUgMCAwIDAgMS4yNS0xLjI1VjcuNWExLjI1IDEuMjUgMCAwIDAtMS4yNS0xLjI1Wm0wIDEwSDMuNzVWNy41aDEyLjV2OC43NVptLTUuMzEzLTQuMzc1YS45MzcuOTM3IDAgMSAxLTEuODc0IDAgLjkzNy45MzcgMCAwIDEgMS44NzQgMFoiLz48L3N2Zz4K", tt = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTIuNSA4LjEyNSAxMCAxMi41bDcuNS00LjM3NUwxMCAzLjc1IDIuNSA4LjEyNVoiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik05LjY4NSAzLjIxYS42MjUuNjI1IDAgMCAxIC42MyAwbDcuNSA0LjM3NWEuNjI1LjYyNSAwIDAgMSAwIDEuMDhsLTcuNSA0LjM3NWEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtNy41LTQuMzc1YS42MjUuNjI1IDAgMCAxIDAtMS4wOGw3LjUtNC4zNzVaTTMuNzQgOC4xMjUgMTAgMTEuNzc2bDYuMjYtMy42NTFMMTAgNC40NzQgMy43NCA4LjEyNVoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTUuNCA5LjQ2YS42MjUuNjI1IDAgMCAxIC42MyAwTDEwIDExLjc3NmwzLjk3LTIuMzE2YS42MjUuNjI1IDAgMCAxIC42MyAwbDMuMjE1IDEuODc1YS42MjUuNjI1IDAgMCAxIDAgMS4wOGwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEgMC0xLjA4TDUuNCA5LjQ2Wm0tMS42NiAyLjQxNUwxMCAxNS41MjZsNi4yNi0zLjY1MS0xLjk3NC0xLjE1MS0zLjk3MSAyLjMxNmEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtMy45Ny0yLjMxNi0xLjk3NSAxLjE1MVoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==", at = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNOS42ODUgMy4yMWEuNjI1LjYyNSAwIDAgMSAuNjMgMGw3LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEgMCAxLjA4bC03LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEtLjYzIDBsLTcuNS00LjM3NWEuNjI1LjYyNSAwIDAgMSAwLTEuMDhsNy41LTQuMzc1Wk0zLjc0IDguMTI1IDEwIDExLjc3Nmw2LjI2LTMuNjUxTDEwIDQuNDc0IDMuNzQgOC4xMjVaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01LjcxNCAxMCAxMCAxMi41bDQuMjg2LTIuNSAzLjIxNCAxLjg3NUwxMCAxNi4yNWwtNy41LTQuMzc1TDUuNzE0IDEwWiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNS40IDkuNDZhLjYyNS42MjUgMCAwIDEgLjYzIDBMMTAgMTEuNzc2bDMuOTctMi4zMTZhLjYyNS42MjUgMCAwIDEgLjYzIDBsMy4yMTUgMS44NzVhLjYyNS42MjUgMCAwIDEgMCAxLjA4bC03LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEtLjYzIDBsLTcuNS00LjM3NWEuNjI1LjYyNSAwIDAgMSAwLTEuMDhMNS40IDkuNDZabS0xLjY2IDIuNDE1TDEwIDE1LjUyNmw2LjI2LTMuNjUxLTEuOTc0LTEuMTUxLTMuOTcxIDIuMzE2YS42MjUuNjI1IDAgMCAxLS42MyAwbC0zLjk3LTIuMzE2LTEuOTc1IDEuMTUxWiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+",
|
|
491
|
-
function pe(o, e, t, a,
|
|
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+", nt = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTIuNSA2LjI1IDcuNSA0LjM3NSA3LjUtNC4zNzVMMTAgMS44NzUgMi41IDYuMjVaIi8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNOS42ODUgMS4zMzVhLjYyNS42MjUgMCAwIDEgLjYzIDBsNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxIDAgMS4wOGwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEgMC0xLjA4bDcuNS00LjM3NVpNMy43NCA2LjI1IDEwIDkuOTAxbDYuMjYtMy42NTFMMTAgMi41OTkgMy43NCA2LjI1WiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNS40IDExLjMzNWEuNjI1LjYyNSAwIDAgMSAuNjMgMEwxMCAxMy42NTFsMy45Ny0yLjMxNmEuNjI1LjYyNSAwIDAgMSAuNjMgMGwzLjIxNSAxLjg3NWEuNjI1LjYyNSAwIDAgMSAwIDEuMDhsLTcuNSA0LjM3NWEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtNy41LTQuMzc1YS42MjUuNjI1IDAgMCAxIDAtMS4wOEw1LjQgMTEuMzM1Wk0zLjc0IDEzLjc1IDEwIDE3LjQwMWw2LjI2LTMuNjUxLTEuOTc0LTEuMTUxLTMuOTcxIDIuMzE2YS42MjUuNjI1IDAgMCAxLS42MyAwbC0zLjk3LTIuMzE2TDMuNzQgMTMuNzVaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01LjQgNy41ODVhLjYyNS42MjUgMCAwIDEgLjYzIDBMMTAgOS45MDFsMy45Ny0yLjMxNmEuNjI1LjYyNSAwIDAgMSAuNjMgMGwzLjIxNSAxLjg3NWEuNjI1LjYyNSAwIDAgMSAwIDEuMDhsLTcuNSA0LjM3NWEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtNy41LTQuMzc1YS42MjUuNjI1IDAgMCAxIDAtMS4wOEw1LjQgNy41ODVaTTMuNzQgMTAgMTAgMTMuNjUxIDE2LjI2IDEwbC0xLjk3NC0xLjE1MS0zLjk3MSAyLjMxNmEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtMy45Ny0yLjMxNkwzLjc0IDEwWiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+", it = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMS45NiAxMy40MzVhLjYyNS42MjUgMCAwIDEgLjg1NS0uMjI1TDEwIDE3LjQwMWw3LjE4NS00LjE5YS42MjUuNjI1IDAgMCAxIC42MyAxLjA3OWwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEtLjIyNS0uODU1Wk05LjY4NSAxLjMzNWEuNjI1LjYyNSAwIDAgMSAuNjMgMGw3LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEgMCAxLjA4bC03LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEtLjYzIDBsLTcuNS00LjM3NWEuNjI1LjYyNSAwIDAgMSAwLTEuMDhsNy41LTQuMzc1Wk0zLjc0IDYuMjUgMTAgOS45MDFsNi4yNi0zLjY1MUwxMCAyLjU5OSAzLjc0IDYuMjVaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Im01LjcxNCAxMS44NzUgNC4yODYgMi41IDQuMjg2LTIuNUwxNy41IDEzLjc1IDEwIDE4LjEyNSAyLjUgMTMuNzVsMy4yMTQtMS44NzVaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01LjQgMTEuMzM1YS42MjUuNjI1IDAgMCAxIC42MyAwTDEwIDEzLjY1MWwzLjk3LTIuMzE2YS42MjUuNjI1IDAgMCAxIC42MyAwbDMuMjE1IDEuODc1YS42MjUuNjI1IDAgMCAxIDAgMS4wOGwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEgMC0xLjA4TDUuNCAxMS4zMzVaTTMuNzQgMTMuNzUgMTAgMTcuNDAxbDYuMjYtMy42NTEtMS45NzQtMS4xNTEtMy45NzEgMi4zMTZhLjYyNS42MjUgMCAwIDEtLjYzIDBsLTMuOTctMi4zMTZMMy43NCAxMy43NVoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTUuNCA3LjU4NWEuNjI1LjYyNSAwIDAgMSAuNjMgMEwxMCA5LjkwMWwzLjk3LTIuMzE2YS42MjUuNjI1IDAgMCAxIC42MyAwbDMuMjE1IDEuODc1YS42MjUuNjI1IDAgMCAxIDAgMS4wOGwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEgMC0xLjA4TDUuNCA3LjU4NVpNMy43NCAxMCAxMCAxMy42NTEgMTYuMjYgMTBsLTEuOTc0LTEuMTUxLTMuOTcxIDIuMzE2YS42MjUuNjI1IDAgMCAxLS42MyAwbC0zLjk3LTIuMzE2TDMuNzQgMTBaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=", rt = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI0VDNEU0MCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNOC4xMjUgMS4yNUExLjg3NSAxLjg3NSAwIDAgMCA2LjI1IDMuMTI1di42MjVIMy4xMjVhLjYyNS42MjUgMCAwIDAgMCAxLjI1aC42MjV2MTEuMjVBMS4yNSAxLjI1IDAgMCAwIDUgMTcuNWgxMGExLjI1IDEuMjUgMCAwIDAgMS4yNS0xLjI1VjVoLjYyNWEuNjI1LjYyNSAwIDAgMCAwLTEuMjVIMTMuNzV2LS42MjVhMS44NzUgMS44NzUgMCAwIDAtMS44NzUtMS44NzVoLTMuNzVabTQuMzc1IDIuNXYtLjYyNWEuNjI1LjYyNSAwIDAgMC0uNjI1LS42MjVoLTMuNzVhLjYyNS42MjUgMCAwIDAtLjYyNS42MjV2LjYyNWg1Wk01IDE2LjI1VjVoMTB2MTEuMjVINVpNOC4xMjUgNy41Yy4zNDUgMCAuNjI1LjI4LjYyNS42MjV2NWEuNjI1LjYyNSAwIDEgMS0xLjI1IDB2LTVjMC0uMzQ1LjI4LS42MjUuNjI1LS42MjVabTQuMzc1IDUuNjI1di01YS42MjUuNjI1IDAgMCAwLTEuMjUgMHY1YS42MjUuNjI1IDAgMSAwIDEuMjUgMFoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==";
|
|
491
|
+
function pe(o, e, t, a, n, i, r) {
|
|
492
492
|
try {
|
|
493
|
-
var s = o[
|
|
493
|
+
var s = o[i](r), c = s.value;
|
|
494
494
|
} catch (u) {
|
|
495
495
|
return void t(u);
|
|
496
496
|
}
|
|
497
|
-
s.done ? e(c) : Promise.resolve(c).then(a,
|
|
497
|
+
s.done ? e(c) : Promise.resolve(c).then(a, n);
|
|
498
498
|
}
|
|
499
499
|
function st(o) {
|
|
500
500
|
return function() {
|
|
501
501
|
var e = this, t = arguments;
|
|
502
|
-
return new Promise(function(a,
|
|
503
|
-
var
|
|
504
|
-
function
|
|
505
|
-
pe(
|
|
502
|
+
return new Promise(function(a, n) {
|
|
503
|
+
var i = o.apply(e, t);
|
|
504
|
+
function r(c) {
|
|
505
|
+
pe(i, a, n, r, s, "next", c);
|
|
506
506
|
}
|
|
507
507
|
function s(c) {
|
|
508
|
-
pe(
|
|
508
|
+
pe(i, a, n, r, s, "throw", c);
|
|
509
509
|
}
|
|
510
|
-
|
|
510
|
+
r(void 0);
|
|
511
511
|
});
|
|
512
512
|
};
|
|
513
513
|
}
|
|
514
|
-
const
|
|
514
|
+
const Y = {
|
|
515
515
|
style: {
|
|
516
516
|
position: "absolute",
|
|
517
517
|
display: "none",
|
|
@@ -571,11 +571,11 @@ const _ = {
|
|
|
571
571
|
offsetTop: 50,
|
|
572
572
|
icons: {
|
|
573
573
|
copyPaste: $e,
|
|
574
|
-
delete:
|
|
574
|
+
delete: rt,
|
|
575
575
|
lock: qe,
|
|
576
576
|
unlock: et,
|
|
577
|
-
bringToFront:
|
|
578
|
-
sendToBack:
|
|
577
|
+
bringToFront: nt,
|
|
578
|
+
sendToBack: it,
|
|
579
579
|
bringForward: tt,
|
|
580
580
|
sendBackwards: at
|
|
581
581
|
},
|
|
@@ -612,12 +612,12 @@ const _ = {
|
|
|
612
612
|
}
|
|
613
613
|
}
|
|
614
614
|
};
|
|
615
|
-
function
|
|
615
|
+
function Ie(o, e) {
|
|
616
616
|
var t = Object.keys(o);
|
|
617
617
|
if (Object.getOwnPropertySymbols) {
|
|
618
618
|
var a = Object.getOwnPropertySymbols(o);
|
|
619
|
-
e && (a = a.filter(function(
|
|
620
|
-
return Object.getOwnPropertyDescriptor(o,
|
|
619
|
+
e && (a = a.filter(function(n) {
|
|
620
|
+
return Object.getOwnPropertyDescriptor(o, n).enumerable;
|
|
621
621
|
})), t.push.apply(t, a);
|
|
622
622
|
}
|
|
623
623
|
return t;
|
|
@@ -625,9 +625,9 @@ function be(o, e) {
|
|
|
625
625
|
function j(o) {
|
|
626
626
|
for (var e = 1; e < arguments.length; e++) {
|
|
627
627
|
var t = arguments[e] != null ? arguments[e] : {};
|
|
628
|
-
e % 2 ?
|
|
628
|
+
e % 2 ? Ie(Object(t), !0).forEach(function(a) {
|
|
629
629
|
ot(o, a, t[a]);
|
|
630
|
-
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(o, Object.getOwnPropertyDescriptors(t)) :
|
|
630
|
+
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(o, Object.getOwnPropertyDescriptors(t)) : Ie(Object(t)).forEach(function(a) {
|
|
631
631
|
Object.defineProperty(o, a, Object.getOwnPropertyDescriptor(t, a));
|
|
632
632
|
});
|
|
633
633
|
}
|
|
@@ -662,11 +662,11 @@ class dt {
|
|
|
662
662
|
if (this.options = t.options, !!this.options.showToolbar) {
|
|
663
663
|
this.editor = t, this.canvas = t.canvas;
|
|
664
664
|
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({},
|
|
665
|
+
this.config = j(j(j({}, Y), a), {}, {
|
|
666
|
+
style: j(j({}, Y.style), a.style || {}),
|
|
667
|
+
btnStyle: j(j({}, Y.btnStyle), a.btnStyle || {}),
|
|
668
|
+
icons: j(j({}, Y.icons), a.icons || {}),
|
|
669
|
+
handlers: j(j({}, Y.handlers), a.handlers || {})
|
|
670
670
|
}), 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
671
|
this.el.style.display = "none";
|
|
672
672
|
}, this._createDOM(), this._bindEvents();
|
|
@@ -700,19 +700,19 @@ class dt {
|
|
|
700
700
|
this.el.innerHTML = "";
|
|
701
701
|
var a = function() {
|
|
702
702
|
var {
|
|
703
|
-
name:
|
|
703
|
+
name: r,
|
|
704
704
|
handle: s
|
|
705
|
-
} =
|
|
705
|
+
} = n, {
|
|
706
706
|
icons: c,
|
|
707
707
|
btnStyle: u,
|
|
708
|
-
handlers:
|
|
709
|
-
} = t.config,
|
|
710
|
-
|
|
708
|
+
handlers: l
|
|
709
|
+
} = t.config, d = document.createElement("button");
|
|
710
|
+
d.innerHTML = c[s] ? '<img src="'.concat(c[s], '" title="').concat(r, '" />') : r, Object.assign(d.style, u), d.onclick = () => {
|
|
711
711
|
var h;
|
|
712
|
-
return (h =
|
|
713
|
-
}, t.el.appendChild(
|
|
712
|
+
return (h = l[s]) === null || h === void 0 ? void 0 : h.call(l, t.editor);
|
|
713
|
+
}, t.el.appendChild(d);
|
|
714
714
|
};
|
|
715
|
-
for (var
|
|
715
|
+
for (var n of e)
|
|
716
716
|
a();
|
|
717
717
|
}
|
|
718
718
|
/**
|
|
@@ -779,15 +779,15 @@ class dt {
|
|
|
779
779
|
var {
|
|
780
780
|
el: t,
|
|
781
781
|
config: a,
|
|
782
|
-
canvas:
|
|
782
|
+
canvas: n
|
|
783
783
|
} = this;
|
|
784
784
|
e.setCoords();
|
|
785
|
-
var
|
|
785
|
+
var i = n.getZoom(), [, , , , r, s] = n.viewportTransform, {
|
|
786
786
|
x: c
|
|
787
787
|
} = e.getCenterPoint(), {
|
|
788
788
|
top: u,
|
|
789
|
-
height:
|
|
790
|
-
} = e.getBoundingRect(!1, !0),
|
|
789
|
+
height: l
|
|
790
|
+
} = e.getBoundingRect(!1, !0), d = c * i + r, h = d - t.offsetWidth / 2, g = (u + l) * i + s + a.offsetTop;
|
|
791
791
|
Object.assign(t.style, {
|
|
792
792
|
left: "".concat(h, "px"),
|
|
793
793
|
top: "".concat(g, "px"),
|
|
@@ -802,26 +802,26 @@ class dt {
|
|
|
802
802
|
this.el.removeEventListener("mouseover", this._onBtnOver), this.el.removeEventListener("mouseout", this._onBtnOut), this.canvas.off("mouse:down", this._onMouseDown), this.canvas.off("object:moving", this._onObjectMoving), this.canvas.off("object:scaling", this._onObjectScaling), this.canvas.off("object:rotating", this._onObjectRotating), this.canvas.off("mouse:up", this._onMouseUp), this.canvas.off("object:modified", this._onObjectModified), this.canvas.off("selection:created", this._onSelectionChange), this.canvas.off("selection:updated", this._onSelectionChange), this.canvas.off("selection:changed", this._onSelectionChange), this.canvas.off("after:render", this._onSelectionChange), this.canvas.off("selection:cleared", this._onSelectionClear), this.el.remove();
|
|
803
803
|
}
|
|
804
804
|
}
|
|
805
|
-
function
|
|
805
|
+
function Ae(o, e, t, a, n, i, r) {
|
|
806
806
|
try {
|
|
807
|
-
var s = o[
|
|
807
|
+
var s = o[i](r), c = s.value;
|
|
808
808
|
} catch (u) {
|
|
809
809
|
return void t(u);
|
|
810
810
|
}
|
|
811
|
-
s.done ? e(c) : Promise.resolve(c).then(a,
|
|
811
|
+
s.done ? e(c) : Promise.resolve(c).then(a, n);
|
|
812
812
|
}
|
|
813
|
-
function
|
|
813
|
+
function te(o) {
|
|
814
814
|
return function() {
|
|
815
815
|
var e = this, t = arguments;
|
|
816
|
-
return new Promise(function(a,
|
|
817
|
-
var
|
|
818
|
-
function
|
|
819
|
-
|
|
816
|
+
return new Promise(function(a, n) {
|
|
817
|
+
var i = o.apply(e, t);
|
|
818
|
+
function r(c) {
|
|
819
|
+
Ae(i, a, n, r, s, "next", c);
|
|
820
820
|
}
|
|
821
821
|
function s(c) {
|
|
822
|
-
|
|
822
|
+
Ae(i, a, n, r, s, "throw", c);
|
|
823
823
|
}
|
|
824
|
-
|
|
824
|
+
r(void 0);
|
|
825
825
|
});
|
|
826
826
|
};
|
|
827
827
|
}
|
|
@@ -844,7 +844,7 @@ class lt {
|
|
|
844
844
|
return this.patches[this.currentIndex - 1] || null;
|
|
845
845
|
}
|
|
846
846
|
_createDiffPatcher() {
|
|
847
|
-
this.diffPatcher =
|
|
847
|
+
this.diffPatcher = He({
|
|
848
848
|
objectHash(e) {
|
|
849
849
|
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
850
|
},
|
|
@@ -887,9 +887,9 @@ class lt {
|
|
|
887
887
|
baseState: e,
|
|
888
888
|
currentIndex: t,
|
|
889
889
|
patches: a
|
|
890
|
-
} = this,
|
|
891
|
-
|
|
892
|
-
return console.log("getFullState state",
|
|
890
|
+
} = this, n = JSON.parse(JSON.stringify(e)), i = 0; i < t; i += 1)
|
|
891
|
+
n = this.diffPatcher.patch(n, a[i].diff);
|
|
892
|
+
return console.log("getFullState state", n), n;
|
|
893
893
|
}
|
|
894
894
|
/**
|
|
895
895
|
* Сохраняем текущее состояние в виде диффа от последнего сохранённого полного состояния.
|
|
@@ -920,22 +920,22 @@ class lt {
|
|
|
920
920
|
*/
|
|
921
921
|
loadStateFromFullState(e) {
|
|
922
922
|
var t = this;
|
|
923
|
-
return
|
|
923
|
+
return te(function* () {
|
|
924
924
|
if (e) {
|
|
925
925
|
console.log("loadStateFromFullState fullState", e);
|
|
926
926
|
var {
|
|
927
927
|
canvas: a,
|
|
928
|
-
canvasManager:
|
|
929
|
-
interactionBlocker:
|
|
928
|
+
canvasManager: n,
|
|
929
|
+
interactionBlocker: i
|
|
930
930
|
} = t.editor, {
|
|
931
|
-
width:
|
|
931
|
+
width: r,
|
|
932
932
|
height: s
|
|
933
933
|
} = a;
|
|
934
934
|
yield a.loadFromJSON(e);
|
|
935
|
-
var c = a.getObjects().find((
|
|
936
|
-
c && (t.editor.montageArea = c, (
|
|
937
|
-
var u = a.getObjects().find((
|
|
938
|
-
u && (
|
|
935
|
+
var c = a.getObjects().find((l) => l.id === "montage-area");
|
|
936
|
+
c && (t.editor.montageArea = c, (r !== e.width || s !== e.height) && n.updateCanvasAndFitObjects());
|
|
937
|
+
var u = a.getObjects().find((l) => l.id === "overlay-mask");
|
|
938
|
+
u && (i.overlayMask = u, i.overlayMask.visible = !1), a.renderAll(), a.fire("editor:history-state-loaded", {
|
|
939
939
|
fullState: e,
|
|
940
940
|
currentIndex: t.currentIndex,
|
|
941
941
|
totalChangesCount: t.totalChangesCount,
|
|
@@ -952,7 +952,7 @@ class lt {
|
|
|
952
952
|
*/
|
|
953
953
|
undo() {
|
|
954
954
|
var e = this;
|
|
955
|
-
return
|
|
955
|
+
return te(function* () {
|
|
956
956
|
if (!e.skipHistory) {
|
|
957
957
|
if (e.currentIndex <= 0) {
|
|
958
958
|
console.log("Нет предыдущих состояний для отмены.");
|
|
@@ -986,7 +986,7 @@ class lt {
|
|
|
986
986
|
*/
|
|
987
987
|
redo() {
|
|
988
988
|
var e = this;
|
|
989
|
-
return
|
|
989
|
+
return te(function* () {
|
|
990
990
|
if (!e.skipHistory) {
|
|
991
991
|
if (e.currentIndex >= e.patches.length) {
|
|
992
992
|
console.log("Нет состояний для повтора.");
|
|
@@ -1015,27 +1015,27 @@ class lt {
|
|
|
1015
1015
|
})();
|
|
1016
1016
|
}
|
|
1017
1017
|
}
|
|
1018
|
-
const ht = 0.1, gt = 2, vt = 0.1,
|
|
1019
|
-
function
|
|
1018
|
+
const ht = 0.1, gt = 2, vt = 0.1, Mt = 90, x = 16, B = 16, w = 4096, O = 4096;
|
|
1019
|
+
function Se(o, e, t, a, n, i, r) {
|
|
1020
1020
|
try {
|
|
1021
|
-
var s = o[
|
|
1021
|
+
var s = o[i](r), c = s.value;
|
|
1022
1022
|
} catch (u) {
|
|
1023
1023
|
return void t(u);
|
|
1024
1024
|
}
|
|
1025
|
-
s.done ? e(c) : Promise.resolve(c).then(a,
|
|
1025
|
+
s.done ? e(c) : Promise.resolve(c).then(a, n);
|
|
1026
1026
|
}
|
|
1027
|
-
function
|
|
1027
|
+
function k(o) {
|
|
1028
1028
|
return function() {
|
|
1029
1029
|
var e = this, t = arguments;
|
|
1030
|
-
return new Promise(function(a,
|
|
1031
|
-
var
|
|
1032
|
-
function
|
|
1033
|
-
|
|
1030
|
+
return new Promise(function(a, n) {
|
|
1031
|
+
var i = o.apply(e, t);
|
|
1032
|
+
function r(c) {
|
|
1033
|
+
Se(i, a, n, r, s, "next", c);
|
|
1034
1034
|
}
|
|
1035
1035
|
function s(c) {
|
|
1036
|
-
|
|
1036
|
+
Se(i, a, n, r, s, "throw", c);
|
|
1037
1037
|
}
|
|
1038
|
-
|
|
1038
|
+
r(void 0);
|
|
1039
1039
|
});
|
|
1040
1040
|
};
|
|
1041
1041
|
}
|
|
@@ -1064,34 +1064,34 @@ class D {
|
|
|
1064
1064
|
*/
|
|
1065
1065
|
importImage(e) {
|
|
1066
1066
|
var t = this;
|
|
1067
|
-
return
|
|
1067
|
+
return k(function* () {
|
|
1068
1068
|
var {
|
|
1069
1069
|
source: a,
|
|
1070
|
-
scale:
|
|
1071
|
-
withoutSave:
|
|
1070
|
+
scale: n = "image-".concat(t.options.scaleType),
|
|
1071
|
+
withoutSave: i = !1
|
|
1072
1072
|
} = e;
|
|
1073
1073
|
if (!a) return null;
|
|
1074
1074
|
var {
|
|
1075
|
-
canvas:
|
|
1075
|
+
canvas: r,
|
|
1076
1076
|
montageArea: s,
|
|
1077
1077
|
transformManager: c,
|
|
1078
1078
|
historyManager: u,
|
|
1079
|
-
errorManager:
|
|
1080
|
-
} = t.editor,
|
|
1079
|
+
errorManager: l
|
|
1080
|
+
} = t.editor, d = yield t.getContentType(a), h = D.getFormatFromContentType(d), {
|
|
1081
1081
|
acceptContentTypes: g,
|
|
1082
1082
|
acceptFormats: M
|
|
1083
1083
|
} = t;
|
|
1084
|
-
if (!t.isAllowedContentType(
|
|
1085
|
-
var
|
|
1086
|
-
return
|
|
1084
|
+
if (!t.isAllowedContentType(d)) {
|
|
1085
|
+
var f = "Неверный contentType для изображения: ".concat(d, ". Ожидается один из: ").concat(t.acceptContentTypes.join(", "), ".");
|
|
1086
|
+
return l.emitError({
|
|
1087
1087
|
origin: "ImageManager",
|
|
1088
1088
|
method: "importImage",
|
|
1089
1089
|
code: "INVALID_CONTENT_TYPE",
|
|
1090
|
-
message:
|
|
1090
|
+
message: f,
|
|
1091
1091
|
data: {
|
|
1092
1092
|
source: a,
|
|
1093
1093
|
format: h,
|
|
1094
|
-
contentType:
|
|
1094
|
+
contentType: d,
|
|
1095
1095
|
acceptContentTypes: g,
|
|
1096
1096
|
acceptFormats: M
|
|
1097
1097
|
}
|
|
@@ -1099,19 +1099,19 @@ class D {
|
|
|
1099
1099
|
}
|
|
1100
1100
|
u.suspendHistory();
|
|
1101
1101
|
try {
|
|
1102
|
-
var
|
|
1102
|
+
var m, v;
|
|
1103
1103
|
if (a instanceof File)
|
|
1104
|
-
|
|
1104
|
+
m = URL.createObjectURL(a);
|
|
1105
1105
|
else if (typeof a == "string") {
|
|
1106
1106
|
var S = yield fetch(a, {
|
|
1107
1107
|
mode: "cors"
|
|
1108
1108
|
}), N = yield S.blob({
|
|
1109
|
-
type:
|
|
1109
|
+
type: d,
|
|
1110
1110
|
quality: 1
|
|
1111
1111
|
});
|
|
1112
|
-
|
|
1112
|
+
m = URL.createObjectURL(N);
|
|
1113
1113
|
} else
|
|
1114
|
-
return
|
|
1114
|
+
return l.emitError({
|
|
1115
1115
|
origin: "ImageManager",
|
|
1116
1116
|
method: "importImage",
|
|
1117
1117
|
code: "INVALID_SOURCE_TYPE",
|
|
@@ -1119,34 +1119,34 @@ class D {
|
|
|
1119
1119
|
data: {
|
|
1120
1120
|
source: a,
|
|
1121
1121
|
format: h,
|
|
1122
|
-
contentType:
|
|
1122
|
+
contentType: d,
|
|
1123
1123
|
acceptContentTypes: g,
|
|
1124
1124
|
acceptFormats: M
|
|
1125
1125
|
}
|
|
1126
1126
|
}), null;
|
|
1127
|
-
if (t._createdBlobUrls.push(
|
|
1128
|
-
var
|
|
1129
|
-
v = P.groupSVGElements(
|
|
1127
|
+
if (t._createdBlobUrls.push(m), h === "svg") {
|
|
1128
|
+
var E = yield ke(m);
|
|
1129
|
+
v = P.groupSVGElements(E.objects, E.options);
|
|
1130
1130
|
} else
|
|
1131
|
-
v = yield
|
|
1131
|
+
v = yield ee.fromURL(m, {
|
|
1132
1132
|
crossOrigin: "anonymous"
|
|
1133
1133
|
});
|
|
1134
1134
|
var {
|
|
1135
1135
|
width: L,
|
|
1136
1136
|
height: y
|
|
1137
1137
|
} = v;
|
|
1138
|
-
if (y > O || L >
|
|
1139
|
-
var
|
|
1140
|
-
t._createdBlobUrls.push(
|
|
1138
|
+
if (y > O || L > w) {
|
|
1139
|
+
var b = yield t.resizeImageToBoundaries(v._element.src, "max"), Z = URL.createObjectURL(b);
|
|
1140
|
+
t._createdBlobUrls.push(Z), v = yield ee.fromURL(Z, {
|
|
1141
1141
|
crossOrigin: "anonymous"
|
|
1142
1142
|
});
|
|
1143
|
-
} else if (y <
|
|
1144
|
-
var W = yield t.resizeImageToBoundaries(v._element.src, "min"),
|
|
1145
|
-
t._createdBlobUrls.push(
|
|
1143
|
+
} else if (y < B || L < x) {
|
|
1144
|
+
var W = yield t.resizeImageToBoundaries(v._element.src, "min"), z = URL.createObjectURL(W);
|
|
1145
|
+
t._createdBlobUrls.push(z), v = yield ee.fromURL(z, {
|
|
1146
1146
|
crossOrigin: "anonymous"
|
|
1147
1147
|
});
|
|
1148
1148
|
}
|
|
1149
|
-
if (v.set("id", "".concat(v.type, "-").concat(A())), v.set("format", h),
|
|
1149
|
+
if (v.set("id", "".concat(v.type, "-").concat(A())), v.set("format", h), n === "scale-montage")
|
|
1150
1150
|
t.editor.canvasManager.scaleMontageAreaToImage({
|
|
1151
1151
|
object: v,
|
|
1152
1152
|
withoutSave: !0
|
|
@@ -1154,43 +1154,43 @@ class D {
|
|
|
1154
1154
|
else {
|
|
1155
1155
|
var {
|
|
1156
1156
|
width: F,
|
|
1157
|
-
height:
|
|
1158
|
-
} = s,
|
|
1157
|
+
height: U
|
|
1158
|
+
} = s, _ = t.calculateScaleFactor({
|
|
1159
1159
|
imageObject: v,
|
|
1160
|
-
scaleType:
|
|
1160
|
+
scaleType: n
|
|
1161
1161
|
});
|
|
1162
|
-
|
|
1162
|
+
n === "image-contain" && _ < 1 ? c.fitObject({
|
|
1163
1163
|
object: v,
|
|
1164
1164
|
type: "contain",
|
|
1165
1165
|
withoutSave: !0
|
|
1166
|
-
}) :
|
|
1166
|
+
}) : n === "image-cover" && (L > F || y > U) && c.fitObject({
|
|
1167
1167
|
object: v,
|
|
1168
1168
|
type: "cover",
|
|
1169
1169
|
withoutSave: !0
|
|
1170
1170
|
});
|
|
1171
1171
|
}
|
|
1172
|
-
|
|
1172
|
+
r.add(v), r.centerObject(v), r.setActiveObject(v), r.renderAll(), u.resumeHistory(), i || u.saveState();
|
|
1173
1173
|
var V = {
|
|
1174
1174
|
image: v,
|
|
1175
1175
|
format: h,
|
|
1176
|
-
contentType:
|
|
1177
|
-
scale:
|
|
1178
|
-
withoutSave:
|
|
1176
|
+
contentType: d,
|
|
1177
|
+
scale: n,
|
|
1178
|
+
withoutSave: i,
|
|
1179
1179
|
source: a
|
|
1180
1180
|
};
|
|
1181
|
-
return
|
|
1182
|
-
} catch (
|
|
1183
|
-
return
|
|
1181
|
+
return r.fire("editor:image-imported", V), V;
|
|
1182
|
+
} catch (H) {
|
|
1183
|
+
return l.emitError({
|
|
1184
1184
|
origin: "ImageManager",
|
|
1185
1185
|
method: "importImage",
|
|
1186
1186
|
code: "IMPORT_FAILED",
|
|
1187
|
-
message: "Ошибка импорта изображения: ".concat(
|
|
1187
|
+
message: "Ошибка импорта изображения: ".concat(H.message),
|
|
1188
1188
|
data: {
|
|
1189
1189
|
source: a,
|
|
1190
1190
|
format: h,
|
|
1191
|
-
contentType:
|
|
1192
|
-
scale:
|
|
1193
|
-
withoutSave:
|
|
1191
|
+
contentType: d,
|
|
1192
|
+
scale: n,
|
|
1193
|
+
withoutSave: i
|
|
1194
1194
|
}
|
|
1195
1195
|
}), u.resumeHistory(), null;
|
|
1196
1196
|
}
|
|
@@ -1206,24 +1206,24 @@ class D {
|
|
|
1206
1206
|
*/
|
|
1207
1207
|
resizeImageToBoundaries(e) {
|
|
1208
1208
|
var t = arguments, a = this;
|
|
1209
|
-
return
|
|
1210
|
-
var
|
|
1211
|
-
|
|
1212
|
-
var
|
|
1209
|
+
return k(function* () {
|
|
1210
|
+
var n = t.length > 1 && t[1] !== void 0 ? t[1] : "max", i = "Размер изображения больше максимального размера канваса, поэтому оно будет уменьшено до максимальных размеров c сохранением пропорций: ".concat(w, "x").concat(O);
|
|
1211
|
+
n === "min" && (i = "Размер изображения меньше минимального размера канваса, поэтому оно будет увеличено до минимальных размеров c сохранением пропорций: ".concat(x, "x").concat(B));
|
|
1212
|
+
var r = {
|
|
1213
1213
|
dataURL: e,
|
|
1214
|
-
sizeType:
|
|
1215
|
-
maxWidth:
|
|
1214
|
+
sizeType: n,
|
|
1215
|
+
maxWidth: w,
|
|
1216
1216
|
maxHeight: O,
|
|
1217
|
-
minWidth:
|
|
1218
|
-
minHeight:
|
|
1217
|
+
minWidth: x,
|
|
1218
|
+
minHeight: B
|
|
1219
1219
|
};
|
|
1220
1220
|
return a.editor.errorManager.emitWarning({
|
|
1221
1221
|
origin: "ImageManager",
|
|
1222
1222
|
method: "resizeImageToBoundaries",
|
|
1223
1223
|
code: "IMAGE_RESIZE_WARNING",
|
|
1224
|
-
message:
|
|
1225
|
-
data:
|
|
1226
|
-
}), a.editor.workerManager.post("resizeImage",
|
|
1224
|
+
message: i,
|
|
1225
|
+
data: r
|
|
1226
|
+
}), a.editor.workerManager.post("resizeImage", r);
|
|
1227
1227
|
})();
|
|
1228
1228
|
}
|
|
1229
1229
|
/**
|
|
@@ -1239,41 +1239,41 @@ class D {
|
|
|
1239
1239
|
*/
|
|
1240
1240
|
exportCanvasAsImageFile() {
|
|
1241
1241
|
var e = arguments, t = this;
|
|
1242
|
-
return
|
|
1242
|
+
return k(function* () {
|
|
1243
1243
|
var {
|
|
1244
1244
|
fileName: a = "image.png",
|
|
1245
|
-
contentType:
|
|
1246
|
-
exportAsBase64:
|
|
1247
|
-
exportAsBlob:
|
|
1245
|
+
contentType: n = "image/png",
|
|
1246
|
+
exportAsBase64: i = !1,
|
|
1247
|
+
exportAsBlob: r = !1
|
|
1248
1248
|
} = e.length > 0 && e[0] !== void 0 ? e[0] : {}, {
|
|
1249
1249
|
canvas: s,
|
|
1250
1250
|
montageArea: c,
|
|
1251
1251
|
workerManager: u
|
|
1252
1252
|
} = t.editor;
|
|
1253
1253
|
try {
|
|
1254
|
-
var
|
|
1254
|
+
var l = n === "application/pdf", d = l ? "image/jpg" : n, h = D.getFormatFromContentType(d);
|
|
1255
1255
|
c.setCoords();
|
|
1256
1256
|
var {
|
|
1257
1257
|
left: g,
|
|
1258
1258
|
top: M,
|
|
1259
|
-
width:
|
|
1260
|
-
height:
|
|
1259
|
+
width: f,
|
|
1260
|
+
height: m
|
|
1261
1261
|
} = c.getBoundingRect(), v = yield s.clone(["id", "format", "locked"]);
|
|
1262
|
-
["image/jpg", "image/jpeg"].includes(
|
|
1263
|
-
var S = v.getObjects().find((
|
|
1262
|
+
["image/jpg", "image/jpeg"].includes(d) && (v.backgroundColor = "#ffffff");
|
|
1263
|
+
var S = v.getObjects().find((p) => p.id === c.id);
|
|
1264
1264
|
S.visible = !1, v.viewportTransform = [1, 0, 0, 1, -g, -M], v.setDimensions({
|
|
1265
|
-
width:
|
|
1266
|
-
height:
|
|
1265
|
+
width: f,
|
|
1266
|
+
height: m
|
|
1267
1267
|
}, {
|
|
1268
1268
|
backstoreOnly: !0
|
|
1269
1269
|
}), v.renderAll();
|
|
1270
|
-
var N = v.getObjects().filter((
|
|
1270
|
+
var N = v.getObjects().filter((p) => p.format).every((p) => p.format === "svg");
|
|
1271
1271
|
if (h === "svg" && N) {
|
|
1272
|
-
var
|
|
1272
|
+
var E = v.toSVG();
|
|
1273
1273
|
v.dispose();
|
|
1274
|
-
var L = D._exportSVGStringAsFile(
|
|
1275
|
-
exportAsBase64:
|
|
1276
|
-
exportAsBlob:
|
|
1274
|
+
var L = D._exportSVGStringAsFile(E, {
|
|
1275
|
+
exportAsBase64: i,
|
|
1276
|
+
exportAsBlob: r,
|
|
1277
1277
|
fileName: a
|
|
1278
1278
|
}), y = {
|
|
1279
1279
|
image: L,
|
|
@@ -1283,77 +1283,77 @@ class D {
|
|
|
1283
1283
|
};
|
|
1284
1284
|
return s.fire("editor:canvas-exported", y), y;
|
|
1285
1285
|
}
|
|
1286
|
-
var
|
|
1287
|
-
v.getElement().toBlob(
|
|
1286
|
+
var b = yield new Promise((p) => {
|
|
1287
|
+
v.getElement().toBlob(p);
|
|
1288
1288
|
});
|
|
1289
|
-
if (v.dispose(),
|
|
1290
|
-
var
|
|
1291
|
-
image:
|
|
1289
|
+
if (v.dispose(), r) {
|
|
1290
|
+
var Z = {
|
|
1291
|
+
image: b,
|
|
1292
1292
|
format: h,
|
|
1293
|
-
contentType:
|
|
1293
|
+
contentType: d,
|
|
1294
1294
|
fileName: a
|
|
1295
1295
|
};
|
|
1296
|
-
return s.fire("editor:canvas-exported",
|
|
1296
|
+
return s.fire("editor:canvas-exported", Z), Z;
|
|
1297
1297
|
}
|
|
1298
|
-
var W = yield createImageBitmap(
|
|
1298
|
+
var W = yield createImageBitmap(b), z = yield u.post("toDataURL", {
|
|
1299
1299
|
format: h,
|
|
1300
1300
|
quality: 1,
|
|
1301
1301
|
bitmap: W
|
|
1302
1302
|
}, [W]);
|
|
1303
|
-
if (
|
|
1304
|
-
var F = 0.264583,
|
|
1305
|
-
orientation:
|
|
1303
|
+
if (l) {
|
|
1304
|
+
var F = 0.264583, U = f * F, _ = m * F, V = (yield t.editor.moduleLoader.loadModule("jspdf")).jsPDF, H = new V({
|
|
1305
|
+
orientation: U > _ ? "landscape" : "portrait",
|
|
1306
1306
|
unit: "mm",
|
|
1307
|
-
format: [
|
|
1307
|
+
format: [U, _]
|
|
1308
1308
|
});
|
|
1309
|
-
if (
|
|
1310
|
-
var
|
|
1311
|
-
image:
|
|
1309
|
+
if (H.addImage(z, "JPG", 0, 0, U, _), i) {
|
|
1310
|
+
var De = H.output("datauristring"), le = {
|
|
1311
|
+
image: De,
|
|
1312
1312
|
format: "pdf",
|
|
1313
1313
|
contentType: "application/pdf",
|
|
1314
1314
|
fileName: a
|
|
1315
1315
|
};
|
|
1316
|
-
return s.fire("editor:canvas-exported",
|
|
1316
|
+
return s.fire("editor:canvas-exported", le), le;
|
|
1317
1317
|
}
|
|
1318
|
-
var
|
|
1318
|
+
var Ne = H.output("blob"), Ee = new File([Ne], a, {
|
|
1319
1319
|
type: "application/pdf"
|
|
1320
|
-
}),
|
|
1321
|
-
image:
|
|
1320
|
+
}), he = {
|
|
1321
|
+
image: Ee,
|
|
1322
1322
|
format: "pdf",
|
|
1323
1323
|
contentType: "application/pdf",
|
|
1324
1324
|
fileName: a
|
|
1325
1325
|
};
|
|
1326
|
-
return s.fire("editor:canvas-exported",
|
|
1326
|
+
return s.fire("editor:canvas-exported", he), he;
|
|
1327
1327
|
}
|
|
1328
|
-
if (
|
|
1329
|
-
var
|
|
1330
|
-
image:
|
|
1328
|
+
if (i) {
|
|
1329
|
+
var ge = {
|
|
1330
|
+
image: z,
|
|
1331
1331
|
format: h,
|
|
1332
|
-
contentType:
|
|
1332
|
+
contentType: d,
|
|
1333
1333
|
fileName: a
|
|
1334
1334
|
};
|
|
1335
|
-
return s.fire("editor:canvas-exported",
|
|
1335
|
+
return s.fire("editor:canvas-exported", ge), ge;
|
|
1336
1336
|
}
|
|
1337
|
-
var
|
|
1338
|
-
type:
|
|
1339
|
-
}),
|
|
1340
|
-
image:
|
|
1337
|
+
var ve = h === "svg" && !N ? a.replace(/\.[^/.]+$/, ".png") : a, Le = new File([b], ve, {
|
|
1338
|
+
type: d
|
|
1339
|
+
}), Me = {
|
|
1340
|
+
image: Le,
|
|
1341
1341
|
format: h,
|
|
1342
|
-
contentType:
|
|
1343
|
-
fileName:
|
|
1342
|
+
contentType: d,
|
|
1343
|
+
fileName: ve
|
|
1344
1344
|
};
|
|
1345
|
-
return s.fire("editor:canvas-exported",
|
|
1346
|
-
} catch (
|
|
1345
|
+
return s.fire("editor:canvas-exported", Me), Me;
|
|
1346
|
+
} catch (p) {
|
|
1347
1347
|
return t.editor.errorManager.emitError({
|
|
1348
1348
|
origin: "ImageManager",
|
|
1349
1349
|
method: "exportCanvasAsImageFile",
|
|
1350
1350
|
code: "IMAGE_EXPORT_FAILED",
|
|
1351
|
-
message: "Ошибка экспорта изображения: ".concat(
|
|
1351
|
+
message: "Ошибка экспорта изображения: ".concat(p.message),
|
|
1352
1352
|
data: {
|
|
1353
|
-
contentType:
|
|
1353
|
+
contentType: n,
|
|
1354
1354
|
fileName: a,
|
|
1355
|
-
exportAsBase64:
|
|
1356
|
-
exportAsBlob:
|
|
1355
|
+
exportAsBase64: i,
|
|
1356
|
+
exportAsBlob: r
|
|
1357
1357
|
}
|
|
1358
1358
|
}), "";
|
|
1359
1359
|
}
|
|
@@ -1372,89 +1372,89 @@ class D {
|
|
|
1372
1372
|
*/
|
|
1373
1373
|
exportObjectAsImageFile() {
|
|
1374
1374
|
var e = arguments, t = this;
|
|
1375
|
-
return
|
|
1375
|
+
return k(function* () {
|
|
1376
1376
|
var {
|
|
1377
1377
|
object: a,
|
|
1378
|
-
fileName:
|
|
1379
|
-
contentType:
|
|
1380
|
-
exportAsBase64:
|
|
1378
|
+
fileName: n = "image.png",
|
|
1379
|
+
contentType: i = "image/png",
|
|
1380
|
+
exportAsBase64: r = !1,
|
|
1381
1381
|
exportAsBlob: s = !1
|
|
1382
1382
|
} = e.length > 0 && e[0] !== void 0 ? e[0] : {}, {
|
|
1383
1383
|
canvas: c,
|
|
1384
1384
|
workerManager: u
|
|
1385
|
-
} = t.editor,
|
|
1386
|
-
if (!
|
|
1385
|
+
} = t.editor, l = a || c.getActiveObject();
|
|
1386
|
+
if (!l)
|
|
1387
1387
|
return t.editor.errorManager.emitError({
|
|
1388
1388
|
origin: "ImageManager",
|
|
1389
1389
|
method: "exportObjectAsImageFile",
|
|
1390
1390
|
code: "NO_OBJECT_SELECTED",
|
|
1391
1391
|
message: "Не выбран объект для экспорта",
|
|
1392
1392
|
data: {
|
|
1393
|
-
contentType:
|
|
1394
|
-
fileName:
|
|
1395
|
-
exportAsBase64:
|
|
1393
|
+
contentType: i,
|
|
1394
|
+
fileName: n,
|
|
1395
|
+
exportAsBase64: r,
|
|
1396
1396
|
exportAsBlob: s
|
|
1397
1397
|
}
|
|
1398
1398
|
}), "";
|
|
1399
1399
|
try {
|
|
1400
|
-
var
|
|
1401
|
-
if (
|
|
1402
|
-
var h =
|
|
1403
|
-
exportAsBase64:
|
|
1400
|
+
var d = D.getFormatFromContentType(i);
|
|
1401
|
+
if (d === "svg") {
|
|
1402
|
+
var h = l.toSVG(), g = t._exportSVGStringAsFile(h, {
|
|
1403
|
+
exportAsBase64: r,
|
|
1404
1404
|
exportAsBlob: s,
|
|
1405
|
-
fileName:
|
|
1405
|
+
fileName: n
|
|
1406
1406
|
}), M = {
|
|
1407
1407
|
image: g,
|
|
1408
|
-
format:
|
|
1408
|
+
format: d,
|
|
1409
1409
|
contentType: "image/svg+xml",
|
|
1410
|
-
fileName:
|
|
1410
|
+
fileName: n.replace(/\.[^/.]+$/, ".svg")
|
|
1411
1411
|
};
|
|
1412
1412
|
return c.fire("editor:object-exported", M), M;
|
|
1413
1413
|
}
|
|
1414
|
-
if (
|
|
1415
|
-
var
|
|
1416
|
-
format:
|
|
1414
|
+
if (r) {
|
|
1415
|
+
var f = yield createImageBitmap(l._element), m = yield u.post("toDataURL", {
|
|
1416
|
+
format: d,
|
|
1417
1417
|
quality: 1,
|
|
1418
|
-
bitmap:
|
|
1419
|
-
}, [
|
|
1420
|
-
image:
|
|
1421
|
-
format:
|
|
1422
|
-
contentType:
|
|
1423
|
-
fileName:
|
|
1418
|
+
bitmap: f
|
|
1419
|
+
}, [f]), v = {
|
|
1420
|
+
image: m,
|
|
1421
|
+
format: d,
|
|
1422
|
+
contentType: i,
|
|
1423
|
+
fileName: n
|
|
1424
1424
|
};
|
|
1425
1425
|
return c.fire("editor:object-exported", v), v;
|
|
1426
1426
|
}
|
|
1427
|
-
var S =
|
|
1428
|
-
S.toBlob(
|
|
1427
|
+
var S = l.toCanvasElement(), N = yield new Promise((b) => {
|
|
1428
|
+
S.toBlob(b);
|
|
1429
1429
|
});
|
|
1430
1430
|
if (s) {
|
|
1431
|
-
var
|
|
1431
|
+
var E = {
|
|
1432
1432
|
image: N,
|
|
1433
|
-
format:
|
|
1434
|
-
contentType:
|
|
1435
|
-
fileName:
|
|
1433
|
+
format: d,
|
|
1434
|
+
contentType: i,
|
|
1435
|
+
fileName: n
|
|
1436
1436
|
};
|
|
1437
|
-
return c.fire("editor:object-exported",
|
|
1437
|
+
return c.fire("editor:object-exported", E), E;
|
|
1438
1438
|
}
|
|
1439
|
-
var L = new File([N],
|
|
1440
|
-
type:
|
|
1439
|
+
var L = new File([N], n, {
|
|
1440
|
+
type: i
|
|
1441
1441
|
}), y = {
|
|
1442
1442
|
image: L,
|
|
1443
|
-
format:
|
|
1444
|
-
contentType:
|
|
1445
|
-
fileName:
|
|
1443
|
+
format: d,
|
|
1444
|
+
contentType: i,
|
|
1445
|
+
fileName: n
|
|
1446
1446
|
};
|
|
1447
1447
|
return c.fire("editor:object-exported", y), y;
|
|
1448
|
-
} catch (
|
|
1448
|
+
} catch (b) {
|
|
1449
1449
|
return t.editor.errorManager.emitError({
|
|
1450
1450
|
origin: "ImageManager",
|
|
1451
1451
|
method: "exportObjectAsImageFile",
|
|
1452
1452
|
code: "IMAGE_EXPORT_FAILED",
|
|
1453
|
-
message: "Ошибка экспорта объекта: ".concat(
|
|
1453
|
+
message: "Ошибка экспорта объекта: ".concat(b.message),
|
|
1454
1454
|
data: {
|
|
1455
|
-
contentType:
|
|
1456
|
-
fileName:
|
|
1457
|
-
exportAsBase64:
|
|
1455
|
+
contentType: i,
|
|
1456
|
+
fileName: n,
|
|
1457
|
+
exportAsBase64: r,
|
|
1458
1458
|
exportAsBlob: s
|
|
1459
1459
|
}
|
|
1460
1460
|
}), "";
|
|
@@ -1483,11 +1483,11 @@ class D {
|
|
|
1483
1483
|
var {
|
|
1484
1484
|
exportAsBase64: t,
|
|
1485
1485
|
exportAsBlob: a,
|
|
1486
|
-
fileName:
|
|
1486
|
+
fileName: n
|
|
1487
1487
|
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
|
|
1488
1488
|
return a ? new Blob([e], {
|
|
1489
1489
|
type: "image/svg+xml"
|
|
1490
|
-
}) : t ? "data:image/svg+xml;base64,".concat(btoa(e)) : new File([e],
|
|
1490
|
+
}) : t ? "data:image/svg+xml;base64,".concat(btoa(e)) : new File([e], n.replace(/\.[^/.]+$/, ".svg"), {
|
|
1491
1491
|
type: "image/svg+xml"
|
|
1492
1492
|
});
|
|
1493
1493
|
}
|
|
@@ -1526,7 +1526,7 @@ class D {
|
|
|
1526
1526
|
*/
|
|
1527
1527
|
getContentType(e) {
|
|
1528
1528
|
var t = this;
|
|
1529
|
-
return
|
|
1529
|
+
return k(function* () {
|
|
1530
1530
|
return typeof e == "string" ? t.getContentTypeFromUrl(e) : e.type || "application/octet-stream";
|
|
1531
1531
|
})();
|
|
1532
1532
|
}
|
|
@@ -1538,19 +1538,19 @@ class D {
|
|
|
1538
1538
|
*/
|
|
1539
1539
|
getContentTypeFromUrl(e) {
|
|
1540
1540
|
var t = this;
|
|
1541
|
-
return
|
|
1541
|
+
return k(function* () {
|
|
1542
1542
|
if (e.startsWith("data:")) {
|
|
1543
1543
|
var a = e.match(/^data:([^;]+)/);
|
|
1544
1544
|
return a ? a[1] : "application/octet-stream";
|
|
1545
1545
|
}
|
|
1546
1546
|
try {
|
|
1547
|
-
var
|
|
1547
|
+
var n = yield fetch(e, {
|
|
1548
1548
|
method: "HEAD"
|
|
1549
|
-
}),
|
|
1550
|
-
if (
|
|
1551
|
-
return
|
|
1552
|
-
} catch (
|
|
1553
|
-
console.warn("HEAD запрос неудачен, определяем тип по расширению:",
|
|
1549
|
+
}), i = n.headers.get("content-type");
|
|
1550
|
+
if (i && i.startsWith("image/"))
|
|
1551
|
+
return i.split(";")[0];
|
|
1552
|
+
} catch (r) {
|
|
1553
|
+
console.warn("HEAD запрос неудачен, определяем тип по расширению:", r);
|
|
1554
1554
|
}
|
|
1555
1555
|
return t.getContentTypeFromExtension(e);
|
|
1556
1556
|
})();
|
|
@@ -1563,13 +1563,13 @@ class D {
|
|
|
1563
1563
|
*/
|
|
1564
1564
|
getContentTypeFromExtension(e) {
|
|
1565
1565
|
try {
|
|
1566
|
-
var t, a = new URL(e),
|
|
1567
|
-
return this.acceptContentTypes.forEach((
|
|
1568
|
-
var s = D.getFormatFromContentType(
|
|
1569
|
-
s && (
|
|
1570
|
-
}), n
|
|
1571
|
-
} catch (
|
|
1572
|
-
return console.warn("Не удалось определить расширение из URL:", e,
|
|
1566
|
+
var t, a = new URL(e), n = (t = a.pathname.split(".").pop()) === null || t === void 0 ? void 0 : t.toLowerCase(), i = {};
|
|
1567
|
+
return this.acceptContentTypes.forEach((r) => {
|
|
1568
|
+
var s = D.getFormatFromContentType(r);
|
|
1569
|
+
s && (i[s] = r);
|
|
1570
|
+
}), i[n] || "application/octet-stream";
|
|
1571
|
+
} catch (r) {
|
|
1572
|
+
return console.warn("Не удалось определить расширение из URL:", e, r), "application/octet-stream";
|
|
1573
1573
|
}
|
|
1574
1574
|
}
|
|
1575
1575
|
/**
|
|
@@ -1583,26 +1583,23 @@ class D {
|
|
|
1583
1583
|
imageObject: t,
|
|
1584
1584
|
scaleType: a = "contain"
|
|
1585
1585
|
} = e, {
|
|
1586
|
-
montageArea:
|
|
1586
|
+
montageArea: n
|
|
1587
1587
|
} = this.editor;
|
|
1588
|
-
if (!
|
|
1589
|
-
var
|
|
1588
|
+
if (!n || !t) return 1;
|
|
1589
|
+
var i = n.width, r = n.height, {
|
|
1590
1590
|
width: s,
|
|
1591
1591
|
height: c
|
|
1592
1592
|
} = t;
|
|
1593
|
-
return a === "contain" || a === "image-contain" ? Math.min(
|
|
1593
|
+
return a === "contain" || a === "image-contain" ? Math.min(i / s, r / c) : a === "cover" || a === "image-cover" ? Math.max(i / s, r / c) : 1;
|
|
1594
1594
|
}
|
|
1595
1595
|
}
|
|
1596
|
-
class
|
|
1596
|
+
class mt {
|
|
1597
1597
|
/**
|
|
1598
1598
|
* @param {object} options
|
|
1599
1599
|
* @param {ImageEditor} options.editor – экземпляр редактора
|
|
1600
1600
|
*/
|
|
1601
|
-
constructor(e) {
|
|
1602
|
-
|
|
1603
|
-
editor: t
|
|
1604
|
-
} = e;
|
|
1605
|
-
this.editor = t;
|
|
1601
|
+
constructor({ editor: e }) {
|
|
1602
|
+
this.editor = e;
|
|
1606
1603
|
}
|
|
1607
1604
|
/**
|
|
1608
1605
|
* Устанавливаем внутреннюю ширину канваса (для экспорта)
|
|
@@ -1613,40 +1610,26 @@ class Mt {
|
|
|
1613
1610
|
* @param {Boolean} [options.adaptCanvasToContainer] - Адаптировать канвас к контейнеру
|
|
1614
1611
|
* @fires editor:resolution-width-changed
|
|
1615
1612
|
*/
|
|
1616
|
-
setResolutionWidth(e) {
|
|
1617
|
-
var
|
|
1613
|
+
setResolutionWidth(e, { preserveProportional: t, withoutSave: a, adaptCanvasToContainer: n } = {}) {
|
|
1614
|
+
var M;
|
|
1615
|
+
if (!e) return;
|
|
1616
|
+
const {
|
|
1617
|
+
canvas: i,
|
|
1618
|
+
montageArea: r,
|
|
1619
|
+
options: { canvasBackstoreWidth: s }
|
|
1620
|
+
} = this.editor, { width: c, height: u } = r, l = Math.max(Math.min(Number(e), w), x);
|
|
1621
|
+
if (!s || s === "auto" || n ? this.adaptCanvasToContainer() : s ? this.setCanvasBackstoreWidth(Number(s)) : this.setCanvasBackstoreWidth(l), r.set({ width: l }), (M = i.clipPath) == null || M.set({ width: l }), t) {
|
|
1622
|
+
const f = l / c, m = u * f;
|
|
1623
|
+
this.setResolutionHeight(m);
|
|
1624
|
+
return;
|
|
1625
|
+
}
|
|
1626
|
+
const { left: d, top: h } = this.getObjectDefaultCoords(r), g = i.getZoom();
|
|
1627
|
+
i.setViewportTransform([g, 0, 0, g, d, h]), this.centerMontageArea(), a || this.editor.historyManager.saveState(), i.fire("editor:resolution-width-changed", {
|
|
1628
|
+
width: l,
|
|
1618
1629
|
preserveProportional: t,
|
|
1619
1630
|
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, d = Number(Math.max(Math.min(e, E), k));
|
|
1633
|
-
if (!s || s === "auto" || r ? this.adaptCanvasToContainer() : s ? this.setCanvasBackstoreWidth(s) : this.setCanvasBackstoreWidth(d), i.set({
|
|
1634
|
-
width: d
|
|
1635
|
-
}), n.clipPath.set({
|
|
1636
|
-
width: d
|
|
1637
|
-
}), t) {
|
|
1638
|
-
var l = d / c, h = u * l;
|
|
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
|
-
}
|
|
1631
|
+
adaptCanvasToContainer: n
|
|
1632
|
+
});
|
|
1650
1633
|
}
|
|
1651
1634
|
/**
|
|
1652
1635
|
* Устанавливаем внутреннюю высоту канваса (для экспорта)
|
|
@@ -1657,59 +1640,43 @@ class Mt {
|
|
|
1657
1640
|
* @param {Boolean} [options.adaptCanvasToContainer] - Адаптировать канвас к контейнеру
|
|
1658
1641
|
* @fires editor:resolution-height-changed
|
|
1659
1642
|
*/
|
|
1660
|
-
setResolutionHeight(e) {
|
|
1661
|
-
var
|
|
1643
|
+
setResolutionHeight(e, { preserveProportional: t, withoutSave: a, adaptCanvasToContainer: n } = {}) {
|
|
1644
|
+
var M;
|
|
1645
|
+
if (!e) return;
|
|
1646
|
+
const {
|
|
1647
|
+
canvas: i,
|
|
1648
|
+
montageArea: r,
|
|
1649
|
+
options: { canvasBackstoreHeight: s }
|
|
1650
|
+
} = this.editor, { width: c, height: u } = r, l = Math.max(Math.min(Number(e), O), B);
|
|
1651
|
+
if (!s || s === "auto" || n ? this.adaptCanvasToContainer() : s ? this.setCanvasBackstoreHeight(Number(s)) : this.setCanvasBackstoreHeight(l), r.set({ height: l }), (M = i.clipPath) == null || M.set({ height: l }), t) {
|
|
1652
|
+
const f = l / u, m = c * f;
|
|
1653
|
+
this.setResolutionWidth(m);
|
|
1654
|
+
return;
|
|
1655
|
+
}
|
|
1656
|
+
const { left: d, top: h } = this.getObjectDefaultCoords(r), g = i.getZoom();
|
|
1657
|
+
i.setViewportTransform([g, 0, 0, g, d, h]), this.centerMontageArea(), a || this.editor.historyManager.saveState(), i.fire("editor:resolution-height-changed", {
|
|
1658
|
+
height: l,
|
|
1662
1659
|
preserveProportional: t,
|
|
1663
1660
|
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, d = Number(Math.max(Math.min(e, O), x));
|
|
1677
|
-
if (!s || s === "auto" || r ? this.adaptCanvasToContainer() : s ? this.setCanvasBackstoreHeight(s) : this.setCanvasBackstoreHeight(d), i.set({
|
|
1678
|
-
height: d
|
|
1679
|
-
}), n.clipPath.set({
|
|
1680
|
-
height: d
|
|
1681
|
-
}), t) {
|
|
1682
|
-
var l = d / u, h = c * l;
|
|
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
|
-
}
|
|
1661
|
+
adaptCanvasToContainer: n
|
|
1662
|
+
});
|
|
1694
1663
|
}
|
|
1695
1664
|
/**
|
|
1696
1665
|
* Центрирует монтажную область и ClipPath точно по центру канваса
|
|
1697
1666
|
* и устанавливает правильный viewportTransform.
|
|
1698
1667
|
*/
|
|
1699
1668
|
centerMontageArea() {
|
|
1700
|
-
var
|
|
1701
|
-
|
|
1702
|
-
montageArea: t
|
|
1703
|
-
} = this.editor, a = e.getWidth(), r = e.getHeight(), n = e.getZoom(), i = new ke(a / 2, r / 2);
|
|
1669
|
+
var c;
|
|
1670
|
+
const { canvas: e, montageArea: t } = this.editor, a = e.getWidth(), n = e.getHeight(), i = e.getZoom(), r = new K(a / 2, n / 2);
|
|
1704
1671
|
t.set({
|
|
1705
1672
|
left: a / 2,
|
|
1706
|
-
top:
|
|
1707
|
-
}), e.clipPath.set({
|
|
1673
|
+
top: n / 2
|
|
1674
|
+
}), (c = e.clipPath) == null || c.set({
|
|
1708
1675
|
left: a / 2,
|
|
1709
|
-
top:
|
|
1676
|
+
top: n / 2
|
|
1710
1677
|
}), e.renderAll();
|
|
1711
|
-
|
|
1712
|
-
s[4] = a / 2 -
|
|
1678
|
+
const s = e.viewportTransform;
|
|
1679
|
+
s[4] = a / 2 - r.x * i, s[5] = n / 2 - r.y * i, e.setViewportTransform(s), e.renderAll();
|
|
1713
1680
|
}
|
|
1714
1681
|
/**
|
|
1715
1682
|
* Метод для получения координат объекта с учетом текущего зума
|
|
@@ -1717,52 +1684,43 @@ class Mt {
|
|
|
1717
1684
|
* @returns {Object} координаты объекта
|
|
1718
1685
|
*/
|
|
1719
1686
|
getObjectDefaultCoords(e) {
|
|
1720
|
-
|
|
1721
|
-
canvas: t
|
|
1722
|
-
} = this.editor, a = e || t.getActiveObject();
|
|
1687
|
+
const { canvas: t } = this.editor, a = e || t.getActiveObject();
|
|
1723
1688
|
if (!a)
|
|
1724
|
-
return
|
|
1689
|
+
return this.editor.errorManager.emitError({
|
|
1690
|
+
origin: "CanvasManager",
|
|
1691
|
+
method: "getObjectDefaultCoords",
|
|
1692
|
+
code: "NO_ACTIVE_OBJECT",
|
|
1725
1693
|
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
|
-
};
|
|
1694
|
+
}), { left: 0, top: 0 };
|
|
1695
|
+
const { width: n, height: i } = a, r = t.getZoom(), s = (n - n * r) / 2, c = (i - i * r) / 2;
|
|
1696
|
+
return { left: s, top: c };
|
|
1735
1697
|
}
|
|
1698
|
+
/**
|
|
1699
|
+
* Устанавливаем ширину канваса в backstore (для экспорта)
|
|
1700
|
+
* @param {Number} width
|
|
1701
|
+
*/
|
|
1736
1702
|
setCanvasBackstoreWidth(e) {
|
|
1737
|
-
if (!
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
width: t
|
|
1741
|
-
}, {
|
|
1742
|
-
backstoreOnly: !0
|
|
1743
|
-
});
|
|
1744
|
-
}
|
|
1703
|
+
if (!e || typeof e != "number") return;
|
|
1704
|
+
const t = Math.max(Math.min(e, w), x);
|
|
1705
|
+
this.editor.canvas.setDimensions({ width: t }, { backstoreOnly: !0 });
|
|
1745
1706
|
}
|
|
1707
|
+
/**
|
|
1708
|
+
* Устанавливаем высоту канваса в backstore (для экспорта)
|
|
1709
|
+
* @param {Number} height
|
|
1710
|
+
*/
|
|
1746
1711
|
setCanvasBackstoreHeight(e) {
|
|
1747
|
-
if (!
|
|
1748
|
-
|
|
1749
|
-
|
|
1750
|
-
height: t
|
|
1751
|
-
}, {
|
|
1752
|
-
backstoreOnly: !0
|
|
1753
|
-
});
|
|
1754
|
-
}
|
|
1712
|
+
if (!e || typeof e != "number") return;
|
|
1713
|
+
const t = Math.max(Math.min(e, O), B);
|
|
1714
|
+
this.editor.canvas.setDimensions({ height: t }, { backstoreOnly: !0 });
|
|
1755
1715
|
}
|
|
1716
|
+
/**
|
|
1717
|
+
* Адаптирует размеры канваса к размерам контейнера редактора.
|
|
1718
|
+
* Устанавливает ширину и высоту канваса в зависимости от размеров контейнера
|
|
1719
|
+
* с учётом минимальных и максимальных значений.
|
|
1720
|
+
*/
|
|
1756
1721
|
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
|
-
});
|
|
1722
|
+
const { canvas: e } = this.editor, t = e.editorContainer, a = t.clientWidth, n = t.clientHeight, i = Math.max(Math.min(a, w), x), r = Math.max(Math.min(n, O), B);
|
|
1723
|
+
console.log("adaptCanvasToContainer newWidth", i), console.log("adaptCanvasToContainer newHeight", r), e.setDimensions({ width: i, height: r }, { backstoreOnly: !0 });
|
|
1766
1724
|
}
|
|
1767
1725
|
/**
|
|
1768
1726
|
* Обновляет размеры канваса и вписывает объекты в монтажную область.
|
|
@@ -1770,27 +1728,18 @@ class Mt {
|
|
|
1770
1728
|
* @fires editor:canvas-updated
|
|
1771
1729
|
*/
|
|
1772
1730
|
updateCanvasAndFitObjects() {
|
|
1773
|
-
|
|
1731
|
+
const {
|
|
1774
1732
|
canvas: e,
|
|
1775
1733
|
selectionManager: t,
|
|
1776
1734
|
transformManager: a,
|
|
1777
1735
|
montageArea: {
|
|
1778
|
-
width:
|
|
1779
|
-
height:
|
|
1736
|
+
width: n,
|
|
1737
|
+
height: i
|
|
1780
1738
|
}
|
|
1781
1739
|
} = 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
|
|
1740
|
+
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", {
|
|
1741
|
+
width: n,
|
|
1742
|
+
height: i
|
|
1794
1743
|
});
|
|
1795
1744
|
}
|
|
1796
1745
|
/**
|
|
@@ -1805,16 +1754,13 @@ class Mt {
|
|
|
1805
1754
|
* @param {Number} zoom — текущее значение zoom (например, 1, 1.2, 2 и т.д.)
|
|
1806
1755
|
*/
|
|
1807
1756
|
updateCssDimensionsForZoom(e) {
|
|
1808
|
-
|
|
1809
|
-
|
|
1810
|
-
|
|
1811
|
-
|
|
1812
|
-
|
|
1813
|
-
|
|
1814
|
-
|
|
1815
|
-
}, {
|
|
1816
|
-
cssOnly: !0
|
|
1817
|
-
});
|
|
1757
|
+
const { canvas: t, montageArea: a } = this.editor, n = a.width * e, i = a.height * e, r = t.wrapperEl.parentNode;
|
|
1758
|
+
if (!(r instanceof HTMLElement)) return;
|
|
1759
|
+
const s = n <= r.clientWidth ? "100%" : n, c = i <= r.clientHeight ? "100%" : i;
|
|
1760
|
+
t.setDimensions(
|
|
1761
|
+
{ width: s, height: c },
|
|
1762
|
+
{ cssOnly: !0 }
|
|
1763
|
+
);
|
|
1818
1764
|
}
|
|
1819
1765
|
/**
|
|
1820
1766
|
* Устанавливаем CSS ширину канваса для отображения
|
|
@@ -1897,50 +1843,37 @@ class Mt {
|
|
|
1897
1843
|
* @param {string|number} [options.value]
|
|
1898
1844
|
* @fires editor:display-{element}-{dimension}-changed
|
|
1899
1845
|
*/
|
|
1900
|
-
setDisplayDimension() {
|
|
1901
|
-
|
|
1846
|
+
setDisplayDimension({ element: e = "canvas", dimension: t, value: a } = {}) {
|
|
1847
|
+
if (!a) return;
|
|
1848
|
+
const { canvas: n, options: { editorContainer: i } } = this.editor, r = [];
|
|
1849
|
+
switch (e) {
|
|
1850
|
+
case "canvas":
|
|
1851
|
+
r.push(n.lowerCanvasEl, n.upperCanvasEl);
|
|
1852
|
+
break;
|
|
1853
|
+
case "wrapper":
|
|
1854
|
+
r.push(n.wrapperEl);
|
|
1855
|
+
break;
|
|
1856
|
+
case "container":
|
|
1857
|
+
r.push(i);
|
|
1858
|
+
break;
|
|
1859
|
+
default:
|
|
1860
|
+
r.push(n.lowerCanvasEl, n.upperCanvasEl);
|
|
1861
|
+
}
|
|
1862
|
+
const s = t === "width" ? "width" : "height";
|
|
1863
|
+
if (typeof a == "string") {
|
|
1864
|
+
r.forEach((u) => {
|
|
1865
|
+
u.style[s] = a;
|
|
1866
|
+
});
|
|
1867
|
+
return;
|
|
1868
|
+
}
|
|
1869
|
+
if (isNaN(a)) return;
|
|
1870
|
+
const c = `${a}px`;
|
|
1871
|
+
r.forEach((u) => {
|
|
1872
|
+
u.style[s] = c;
|
|
1873
|
+
}), n.fire(`editor:display-${e}-${s}-changed`, {
|
|
1902
1874
|
element: e,
|
|
1903
|
-
dimension: t,
|
|
1904
1875
|
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((d) => {
|
|
1929
|
-
d.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((d) => {
|
|
1937
|
-
d.style[s] = u;
|
|
1938
|
-
}), r.fire("editor:display-".concat(e, "-").concat(s, "-changed"), {
|
|
1939
|
-
element: e,
|
|
1940
|
-
value: a
|
|
1941
|
-
});
|
|
1942
|
-
}
|
|
1943
|
-
}
|
|
1876
|
+
});
|
|
1944
1877
|
}
|
|
1945
1878
|
/**
|
|
1946
1879
|
* Если изображение вписывается в допустимые значения, то масштабируем под него канвас
|
|
@@ -1950,57 +1883,40 @@ class Mt {
|
|
|
1950
1883
|
* @param {Boolean} [options.preserveAspectRatio] - Сохранять изначальные пропорции монтажной области
|
|
1951
1884
|
* @fires editor:montage-area-scaled-to-image
|
|
1952
1885
|
*/
|
|
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,
|
|
1886
|
+
scaleMontageAreaToImage({ object: e, preserveAspectRatio: t, withoutSave: a } = {}) {
|
|
1887
|
+
const {
|
|
1888
|
+
canvas: n,
|
|
1889
|
+
montageArea: i,
|
|
1890
|
+
transformManager: r,
|
|
1962
1891
|
options: {
|
|
1963
1892
|
montageAreaWidth: s,
|
|
1964
1893
|
montageAreaHeight: c
|
|
1965
1894
|
}
|
|
1966
|
-
} = this.editor, u = e ||
|
|
1967
|
-
if (!
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1972
|
-
|
|
1973
|
-
|
|
1974
|
-
|
|
1975
|
-
|
|
1976
|
-
} = n, f = d / M, v = l / 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
|
-
}), (d > s || l > 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
|
-
});
|
|
1895
|
+
} = this.editor, u = e || n.getActiveObject();
|
|
1896
|
+
if (!u || u.type !== "image" && u.format !== "svg") return;
|
|
1897
|
+
const { width: l, height: d } = u;
|
|
1898
|
+
let h = Math.min(l, w), g = Math.min(d, O);
|
|
1899
|
+
if (t) {
|
|
1900
|
+
const {
|
|
1901
|
+
width: M,
|
|
1902
|
+
height: f
|
|
1903
|
+
} = i, m = l / M, v = d / f, S = Math.max(m, v);
|
|
1904
|
+
h = M * S, g = f * S;
|
|
1992
1905
|
}
|
|
1906
|
+
this.setResolutionWidth(h, { withoutSave: !0 }), this.setResolutionHeight(g, { withoutSave: !0 }), (l > s || d > c) && r.calculateAndApplyDefaultZoom(), r.resetObject(u, { withoutSave: !0 }), n.centerObject(u), n.renderAll(), a || this.editor.historyManager.saveState(), n.fire("editor:montage-area-scaled-to-image", {
|
|
1907
|
+
object: u,
|
|
1908
|
+
width: h,
|
|
1909
|
+
height: g,
|
|
1910
|
+
preserveAspectRatio: t,
|
|
1911
|
+
withoutSave: a
|
|
1912
|
+
});
|
|
1993
1913
|
}
|
|
1994
1914
|
/**
|
|
1995
1915
|
* Очистка холста
|
|
1996
1916
|
* @fires editor:cleared
|
|
1997
1917
|
*/
|
|
1998
1918
|
clearCanvas() {
|
|
1999
|
-
|
|
2000
|
-
canvas: e,
|
|
2001
|
-
montageArea: t,
|
|
2002
|
-
historyManager: a
|
|
2003
|
-
} = this.editor;
|
|
1919
|
+
const { canvas: e, montageArea: t, historyManager: a } = this.editor;
|
|
2004
1920
|
a.suspendHistory(), e.clear(), e.add(t), e.renderAll(), a.resumeHistory(), a.saveState(), e == null || e.fire("editor:cleared");
|
|
2005
1921
|
}
|
|
2006
1922
|
/**
|
|
@@ -2009,49 +1925,30 @@ class Mt {
|
|
|
2009
1925
|
* @param {Boolean} options.withoutSave - Не сохранять состояние
|
|
2010
1926
|
* @fires editor:default-scale-set
|
|
2011
1927
|
*/
|
|
2012
|
-
setDefaultScale() {
|
|
2013
|
-
|
|
2014
|
-
withoutSave: e
|
|
2015
|
-
} = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, {
|
|
1928
|
+
setDefaultScale({ withoutSave: e } = {}) {
|
|
1929
|
+
const {
|
|
2016
1930
|
canvas: t,
|
|
2017
1931
|
transformManager: a,
|
|
2018
|
-
historyManager:
|
|
1932
|
+
historyManager: n,
|
|
2019
1933
|
options: {
|
|
2020
|
-
montageAreaWidth:
|
|
2021
|
-
montageAreaHeight:
|
|
1934
|
+
montageAreaWidth: i,
|
|
1935
|
+
montageAreaHeight: r
|
|
2022
1936
|
}
|
|
2023
1937
|
} = 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");
|
|
1938
|
+
a.resetZoom(), this.setResolutionWidth(i, { withoutSave: !0 }), this.setResolutionHeight(r, { withoutSave: !0 }), t.renderAll(), a.resetObjects(), e || n.saveState(), t.fire("editor:default-scale-set");
|
|
2029
1939
|
}
|
|
2030
1940
|
/**
|
|
2031
1941
|
* Получение всех объектов внутри монтажной области редактора
|
|
2032
1942
|
* @returns {Array} массив объектов
|
|
2033
1943
|
*/
|
|
2034
1944
|
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);
|
|
1945
|
+
const { canvas: e, montageArea: t, interactionBlocker: { overlayMask: a } } = this.editor;
|
|
1946
|
+
return e.getObjects().filter((i) => i.id !== t.id && i.id !== a.id);
|
|
2043
1947
|
}
|
|
2044
1948
|
}
|
|
2045
1949
|
class ft {
|
|
2046
|
-
|
|
2047
|
-
|
|
2048
|
-
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
2049
|
-
*/
|
|
2050
|
-
constructor(e) {
|
|
2051
|
-
var {
|
|
2052
|
-
editor: t
|
|
2053
|
-
} = e;
|
|
2054
|
-
this.editor = t, this.options = t.options;
|
|
1950
|
+
constructor({ editor: e }) {
|
|
1951
|
+
this.editor = e, this.options = e.options, this.minZoom = this.options.minZoom || ht, this.maxZoom = this.options.maxZoom || gt, this.defaultZoom = this.options.defaultScale, this.maxZoomFactor = this.options.maxZoomFactor;
|
|
2055
1952
|
}
|
|
2056
1953
|
/**
|
|
2057
1954
|
* Метод рассчитывает и применяет зум по умолчанию для монтажной области редактора.
|
|
@@ -2060,18 +1957,11 @@ class ft {
|
|
|
2060
1957
|
* Если scale не передан, то используется значение из options.defaultScale.
|
|
2061
1958
|
* @param {Number} [scale] - Желаемый масштаб относительно размеров контейнера редактора.
|
|
2062
1959
|
*/
|
|
2063
|
-
calculateAndApplyDefaultZoom() {
|
|
2064
|
-
|
|
2065
|
-
|
|
2066
|
-
|
|
2067
|
-
|
|
2068
|
-
height: s
|
|
2069
|
-
} = this.editor.montageArea, c = r / i * e, u = n / s * e, d = Math.min(c, u), {
|
|
2070
|
-
minZoom: l,
|
|
2071
|
-
maxZoom: h,
|
|
2072
|
-
maxZoomFactor: g
|
|
2073
|
-
} = this.options;
|
|
2074
|
-
this.minZoom = Math.min(d / g, l), this.maxZoom = Math.max(d * g, h), this.defaultZoom = d, this.setZoom(d);
|
|
1960
|
+
calculateAndApplyDefaultZoom(e = this.options.defaultScale) {
|
|
1961
|
+
const { canvas: t } = this.editor, a = t.editorContainer, n = a.clientWidth, i = a.clientHeight, { width: r, height: s } = this.editor.montageArea, c = n / r * e, u = i / s * e;
|
|
1962
|
+
this.defaultZoom = Math.min(c, u);
|
|
1963
|
+
const { defaultZoom: l, maxZoomFactor: d, minZoom: h, maxZoom: g } = this;
|
|
1964
|
+
this.minZoom = Math.min(l / d, h), this.maxZoom = Math.max(l * d, g), this.setZoom();
|
|
2075
1965
|
}
|
|
2076
1966
|
/**
|
|
2077
1967
|
* Увеличение/уменьшение масштаба
|
|
@@ -2082,55 +1972,33 @@ class ft {
|
|
|
2082
1972
|
* @fires editor:zoom-changed
|
|
2083
1973
|
* Если передавать координаты курсора, то нужно быть аккуратнее, так как юзер может выйти за пределы рабочей области
|
|
2084
1974
|
*/
|
|
2085
|
-
zoom() {
|
|
2086
|
-
var
|
|
2087
|
-
if (e)
|
|
2088
|
-
|
|
2089
|
-
|
|
2090
|
-
|
|
2091
|
-
|
|
2092
|
-
|
|
2093
|
-
|
|
2094
|
-
|
|
2095
|
-
|
|
2096
|
-
|
|
2097
|
-
|
|
2098
|
-
|
|
2099
|
-
}, u), console.log({
|
|
2100
|
-
currentZoom: i,
|
|
2101
|
-
zoom: u,
|
|
2102
|
-
pointX: s,
|
|
2103
|
-
pointY: c
|
|
2104
|
-
}), a.fire("editor:zoom-changed", {
|
|
2105
|
-
currentZoom: a.getZoom(),
|
|
2106
|
-
zoom: u,
|
|
2107
|
-
pointX: s,
|
|
2108
|
-
pointY: c
|
|
2109
|
-
});
|
|
2110
|
-
}
|
|
1975
|
+
zoom(e = vt, t = {}) {
|
|
1976
|
+
var h, g;
|
|
1977
|
+
if (!e) return;
|
|
1978
|
+
const { minZoom: a, maxZoom: n } = this, { canvas: i } = this.editor, r = i.getZoom(), s = i.getCenterPoint(), c = (h = t.pointX) != null ? h : s.x, u = (g = t.pointY) != null ? g : s.y, l = new K(c, u);
|
|
1979
|
+
let d = Number((r + Number(e)).toFixed(2));
|
|
1980
|
+
d > n && (d = n), d < a && (d = a), i.zoomToPoint(l, d), console.log({
|
|
1981
|
+
currentZoom: r,
|
|
1982
|
+
zoom: d,
|
|
1983
|
+
point: l
|
|
1984
|
+
}), i.fire("editor:zoom-changed", {
|
|
1985
|
+
currentZoom: i.getZoom(),
|
|
1986
|
+
zoom: d,
|
|
1987
|
+
point: l
|
|
1988
|
+
});
|
|
2111
1989
|
}
|
|
2112
1990
|
/**
|
|
2113
1991
|
* Установка зума
|
|
2114
1992
|
* @param {Number} zoom - Зум
|
|
2115
1993
|
* @fires editor:zoom-changed
|
|
2116
1994
|
*/
|
|
2117
|
-
setZoom() {
|
|
2118
|
-
|
|
2119
|
-
|
|
2120
|
-
|
|
2121
|
-
|
|
2122
|
-
|
|
2123
|
-
|
|
2124
|
-
y: i
|
|
2125
|
-
} = t.getCenterPoint(), s = e;
|
|
2126
|
-
e > r && (s = r), e < a && (s = a), t.zoomToPoint({
|
|
2127
|
-
x: Number(n),
|
|
2128
|
-
y: Number(i)
|
|
2129
|
-
}, s), t.fire("editor:zoom-changed", {
|
|
2130
|
-
currentZoom: t.getZoom(),
|
|
2131
|
-
zoom: s,
|
|
2132
|
-
pointX: n,
|
|
2133
|
-
pointY: i
|
|
1995
|
+
setZoom(e = this.defaultZoom) {
|
|
1996
|
+
const { minZoom: t, maxZoom: a } = this, { canvas: n } = this.editor, i = new K(n.getCenterPoint());
|
|
1997
|
+
let r = e;
|
|
1998
|
+
e > a && (r = a), e < t && (r = t), n.zoomToPoint(i, r), n.fire("editor:zoom-changed", {
|
|
1999
|
+
currentZoom: n.getZoom(),
|
|
2000
|
+
zoom: r,
|
|
2001
|
+
point: i
|
|
2134
2002
|
});
|
|
2135
2003
|
}
|
|
2136
2004
|
/**
|
|
@@ -2138,20 +2006,10 @@ class ft {
|
|
|
2138
2006
|
* @fires editor:zoom-changed
|
|
2139
2007
|
*/
|
|
2140
2008
|
resetZoom() {
|
|
2141
|
-
|
|
2142
|
-
|
|
2143
|
-
defaultZoom: t
|
|
2144
|
-
} = this.editor, {
|
|
2145
|
-
x: a,
|
|
2146
|
-
y: r
|
|
2147
|
-
} = e.getCenterPoint();
|
|
2148
|
-
e.zoomToPoint({
|
|
2149
|
-
x: Number(a),
|
|
2150
|
-
y: Number(r)
|
|
2151
|
-
}, t), this.editor.canvas.fire("editor:zoom-changed", {
|
|
2009
|
+
const { canvas: e } = this.editor, t = new K(e.getCenterPoint());
|
|
2010
|
+
e.zoomToPoint(t, this.defaultZoom), this.editor.canvas.fire("editor:zoom-changed", {
|
|
2152
2011
|
currentZoom: e.getZoom(),
|
|
2153
|
-
|
|
2154
|
-
pointY: r
|
|
2012
|
+
point: t
|
|
2155
2013
|
});
|
|
2156
2014
|
}
|
|
2157
2015
|
/**
|
|
@@ -2161,21 +2019,15 @@ class ft {
|
|
|
2161
2019
|
* @param {Boolean} options.withoutSave - Не сохранять состояние
|
|
2162
2020
|
* @fires editor:object-rotated
|
|
2163
2021
|
*/
|
|
2164
|
-
rotate() {
|
|
2165
|
-
|
|
2166
|
-
|
|
2167
|
-
|
|
2168
|
-
|
|
2169
|
-
|
|
2170
|
-
|
|
2171
|
-
|
|
2172
|
-
|
|
2173
|
-
n.rotate(i), n.setCoords(), a.renderAll(), t || r.saveState(), a.fire("editor:object-rotated", {
|
|
2174
|
-
object: n,
|
|
2175
|
-
withoutSave: t,
|
|
2176
|
-
angle: i
|
|
2177
|
-
});
|
|
2178
|
-
}
|
|
2022
|
+
rotate(e = Mt, { withoutSave: t } = {}) {
|
|
2023
|
+
const { canvas: a, historyManager: n } = this.editor, i = a.getActiveObject();
|
|
2024
|
+
if (!i) return;
|
|
2025
|
+
const r = i.angle + e;
|
|
2026
|
+
i.rotate(r), i.setCoords(), a.renderAll(), t || n.saveState(), a.fire("editor:object-rotated", {
|
|
2027
|
+
object: i,
|
|
2028
|
+
withoutSave: t,
|
|
2029
|
+
angle: r
|
|
2030
|
+
});
|
|
2179
2031
|
}
|
|
2180
2032
|
/**
|
|
2181
2033
|
* Отразить по горизонтали
|
|
@@ -2183,15 +2035,10 @@ class ft {
|
|
|
2183
2035
|
* @param {Boolean} options.withoutSave - Не сохранять состояние
|
|
2184
2036
|
* @fires editor:object-flipped-x
|
|
2185
2037
|
*/
|
|
2186
|
-
flipX() {
|
|
2187
|
-
|
|
2188
|
-
|
|
2189
|
-
|
|
2190
|
-
canvas: t,
|
|
2191
|
-
historyManager: a
|
|
2192
|
-
} = this.editor, r = t.getActiveObject();
|
|
2193
|
-
r && (r.flipX = !r.flipX, t.renderAll(), e || a.saveState(), t.fire("editor:object-flipped-x", {
|
|
2194
|
-
object: r,
|
|
2038
|
+
flipX({ withoutSave: e } = {}) {
|
|
2039
|
+
const { canvas: t, historyManager: a } = this.editor, n = t.getActiveObject();
|
|
2040
|
+
n && (n.flipX = !n.flipX, t.renderAll(), e || a.saveState(), t.fire("editor:object-flipped-x", {
|
|
2041
|
+
object: n,
|
|
2195
2042
|
withoutSave: e
|
|
2196
2043
|
}));
|
|
2197
2044
|
}
|
|
@@ -2201,15 +2048,10 @@ class ft {
|
|
|
2201
2048
|
* @param {Boolean} options.withoutSave - Не сохранять состояние
|
|
2202
2049
|
* @fires editor:object-flipped-y
|
|
2203
2050
|
*/
|
|
2204
|
-
flipY() {
|
|
2205
|
-
|
|
2206
|
-
|
|
2207
|
-
|
|
2208
|
-
canvas: t,
|
|
2209
|
-
historyManager: a
|
|
2210
|
-
} = this.editor, r = t.getActiveObject();
|
|
2211
|
-
r && (r.flipY = !r.flipY, t.renderAll(), e || a.saveState(), t.fire("editor:object-flipped-y", {
|
|
2212
|
-
object: r,
|
|
2051
|
+
flipY({ withoutSave: e } = {}) {
|
|
2052
|
+
const { canvas: t, historyManager: a } = this.editor, n = t.getActiveObject();
|
|
2053
|
+
n && (n.flipY = !n.flipY, t.renderAll(), e || a.saveState(), t.fire("editor:object-flipped-y", {
|
|
2054
|
+
object: n,
|
|
2213
2055
|
withoutSave: e
|
|
2214
2056
|
}));
|
|
2215
2057
|
}
|
|
@@ -2218,19 +2060,16 @@ class ft {
|
|
|
2218
2060
|
* @param {Number} opacity - Прозрачность от 0 до 1
|
|
2219
2061
|
* @fires editor:object-opacity-changed
|
|
2220
2062
|
*/
|
|
2221
|
-
setActiveObjectOpacity(
|
|
2222
|
-
|
|
2223
|
-
|
|
2224
|
-
|
|
2225
|
-
|
|
2226
|
-
|
|
2227
|
-
|
|
2228
|
-
historyManager: n
|
|
2229
|
-
} = this.editor, i = e || r.getActiveObject();
|
|
2230
|
-
i && (i.type === "activeselection" ? i.getObjects().forEach((s) => {
|
|
2063
|
+
setActiveObjectOpacity({
|
|
2064
|
+
object: e,
|
|
2065
|
+
opacity: t = 1,
|
|
2066
|
+
withoutSave: a
|
|
2067
|
+
} = {}) {
|
|
2068
|
+
const { canvas: n, historyManager: i } = this.editor, r = e || n.getActiveObject();
|
|
2069
|
+
r && (r instanceof T ? r.getObjects().forEach((s) => {
|
|
2231
2070
|
s.set("opacity", t);
|
|
2232
|
-
}) :
|
|
2233
|
-
object:
|
|
2071
|
+
}) : r.set("opacity", t), n.renderAll(), a || i.saveState(), n.fire("editor:object-opacity-changed", {
|
|
2072
|
+
object: r,
|
|
2234
2073
|
opacity: t,
|
|
2235
2074
|
withoutSave: a
|
|
2236
2075
|
}));
|
|
@@ -2246,43 +2085,34 @@ class ft {
|
|
|
2246
2085
|
* @param {Boolean} [options.fitAsOneObject] - Масштабировать все объекты в активной группе как один объект
|
|
2247
2086
|
* @fires editor:image-fitted
|
|
2248
2087
|
*/
|
|
2249
|
-
fitObject(
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
|
|
2255
|
-
|
|
2256
|
-
canvas: n,
|
|
2257
|
-
imageManager: i,
|
|
2258
|
-
historyManager: s
|
|
2259
|
-
} = this.editor, c = e || n.getActiveObject();
|
|
2088
|
+
fitObject({
|
|
2089
|
+
object: e,
|
|
2090
|
+
type: t = this.options.scaleType,
|
|
2091
|
+
withoutSave: a,
|
|
2092
|
+
fitAsOneObject: n
|
|
2093
|
+
} = {}) {
|
|
2094
|
+
const { canvas: i, imageManager: r, historyManager: s } = this.editor, c = e || i.getActiveObject();
|
|
2260
2095
|
if (c) {
|
|
2261
|
-
if (c.set("angle", 0),
|
|
2262
|
-
|
|
2263
|
-
|
|
2264
|
-
|
|
2265
|
-
|
|
2266
|
-
scaleType: t
|
|
2267
|
-
});
|
|
2268
|
-
h.scale(g), n.centerObject(h);
|
|
2269
|
-
});
|
|
2270
|
-
var d = new H(u, {
|
|
2271
|
-
canvas: n
|
|
2096
|
+
if (c.set("angle", 0), c instanceof T && !n) {
|
|
2097
|
+
const u = c.getObjects();
|
|
2098
|
+
i.discardActiveObject(), u.forEach((d) => {
|
|
2099
|
+
const h = r.calculateScaleFactor({ imageObject: d, scaleType: t });
|
|
2100
|
+
d.scale(h), i.centerObject(d);
|
|
2272
2101
|
});
|
|
2273
|
-
|
|
2102
|
+
const l = new T(u, { canvas: i });
|
|
2103
|
+
i.setActiveObject(l);
|
|
2274
2104
|
} else {
|
|
2275
|
-
|
|
2105
|
+
const u = r.calculateScaleFactor({
|
|
2276
2106
|
imageObject: c,
|
|
2277
2107
|
scaleType: t
|
|
2278
2108
|
});
|
|
2279
|
-
c.scale(
|
|
2109
|
+
c.scale(u), i.centerObject(c);
|
|
2280
2110
|
}
|
|
2281
|
-
|
|
2111
|
+
i.renderAll(), a || s.saveState(), i.fire("editor:object-fitted", {
|
|
2282
2112
|
object: c,
|
|
2283
2113
|
type: t,
|
|
2284
2114
|
withoutSave: a,
|
|
2285
|
-
fitAsOneObject:
|
|
2115
|
+
fitAsOneObject: n
|
|
2286
2116
|
});
|
|
2287
2117
|
}
|
|
2288
2118
|
}
|
|
@@ -2303,64 +2133,35 @@ class ft {
|
|
|
2303
2133
|
* @returns
|
|
2304
2134
|
* @fires editor:object-reset
|
|
2305
2135
|
*/
|
|
2306
|
-
resetObject(e) {
|
|
2307
|
-
|
|
2308
|
-
|
|
2309
|
-
|
|
2310
|
-
|
|
2311
|
-
canvas: r,
|
|
2312
|
-
montageArea: n,
|
|
2313
|
-
imageManager: i,
|
|
2136
|
+
resetObject(e, { alwaysFitObject: t = !1, withoutSave: a = !1 } = {}) {
|
|
2137
|
+
const {
|
|
2138
|
+
canvas: n,
|
|
2139
|
+
montageArea: i,
|
|
2140
|
+
imageManager: r,
|
|
2314
2141
|
historyManager: s,
|
|
2315
|
-
options: {
|
|
2142
|
+
options: { scaleType: c }
|
|
2143
|
+
} = this.editor, u = e || n.getActiveObject();
|
|
2144
|
+
if (!u || u.locked) return;
|
|
2145
|
+
if (s.suspendHistory(), u.type === "image" || u.format === "svg" || u.set({
|
|
2146
|
+
scaleX: 1,
|
|
2147
|
+
scaleY: 1,
|
|
2148
|
+
flipX: !1,
|
|
2149
|
+
flipY: !1,
|
|
2150
|
+
angle: 0
|
|
2151
|
+
}), t)
|
|
2152
|
+
this.fitObject({ object: u, withoutSave: !0, fitAsOneObject: !0 });
|
|
2153
|
+
else {
|
|
2154
|
+
const { width: d, height: h } = i, { width: g, height: M } = u, f = r.calculateScaleFactor({
|
|
2155
|
+
imageObject: u,
|
|
2316
2156
|
scaleType: c
|
|
2317
|
-
}
|
|
2318
|
-
} = this.editor, u = e || r.getActiveObject();
|
|
2319
|
-
if (!(!u || u.locked)) {
|
|
2320
|
-
s.suspendHistory();
|
|
2321
|
-
var d = u.type === "image" || u.format === "svg";
|
|
2322
|
-
if (d || u.set({
|
|
2323
|
-
scaleX: 1,
|
|
2324
|
-
scaleY: 1,
|
|
2325
|
-
flipX: !1,
|
|
2326
|
-
flipY: !1,
|
|
2327
|
-
angle: 0
|
|
2328
|
-
}), t)
|
|
2329
|
-
this.fitObject({
|
|
2330
|
-
object: u,
|
|
2331
|
-
withoutSave: !0,
|
|
2332
|
-
fitAsOneObject: !0
|
|
2333
|
-
});
|
|
2334
|
-
else {
|
|
2335
|
-
var {
|
|
2336
|
-
width: l,
|
|
2337
|
-
height: h
|
|
2338
|
-
} = n, {
|
|
2339
|
-
width: g,
|
|
2340
|
-
height: M
|
|
2341
|
-
} = u, m = i.calculateScaleFactor({
|
|
2342
|
-
imageObject: u,
|
|
2343
|
-
scaleType: c
|
|
2344
|
-
}), f = c === "contain" && m < 1 || c === "cover" && (g > l || M > h);
|
|
2345
|
-
f ? this.fitObject({
|
|
2346
|
-
object: u,
|
|
2347
|
-
withoutSave: !0,
|
|
2348
|
-
fitAsOneObject: !0
|
|
2349
|
-
}) : u.set({
|
|
2350
|
-
scaleX: 1,
|
|
2351
|
-
scaleY: 1
|
|
2352
|
-
});
|
|
2353
|
-
}
|
|
2354
|
-
u.set({
|
|
2355
|
-
flipX: !1,
|
|
2356
|
-
flipY: !1,
|
|
2357
|
-
angle: 0
|
|
2358
|
-
}), r.centerObject(u), r.renderAll(), s.resumeHistory(), a || s.saveState(), r.fire("editor:object-reset", {
|
|
2359
|
-
object: u,
|
|
2360
|
-
withoutSave: a,
|
|
2361
|
-
alwaysFitObject: t
|
|
2362
2157
|
});
|
|
2158
|
+
c === "contain" && f < 1 || c === "cover" && (g > d || M > h) ? this.fitObject({ object: u, withoutSave: !0, fitAsOneObject: !0 }) : u.set({ scaleX: 1, scaleY: 1 });
|
|
2363
2159
|
}
|
|
2160
|
+
u.set({ flipX: !1, flipY: !1, angle: 0 }), n.centerObject(u), n.renderAll(), s.resumeHistory(), a || s.saveState(), n.fire("editor:object-reset", {
|
|
2161
|
+
object: u,
|
|
2162
|
+
withoutSave: a,
|
|
2163
|
+
alwaysFitObject: t
|
|
2164
|
+
});
|
|
2364
2165
|
}
|
|
2365
2166
|
}
|
|
2366
2167
|
class jt {
|
|
@@ -2412,15 +2213,15 @@ class jt {
|
|
|
2412
2213
|
if (!(!t || !this.overlayMask)) {
|
|
2413
2214
|
a.suspendHistory(), t.setCoords();
|
|
2414
2215
|
var {
|
|
2415
|
-
left:
|
|
2416
|
-
top:
|
|
2417
|
-
width:
|
|
2216
|
+
left: n,
|
|
2217
|
+
top: i,
|
|
2218
|
+
width: r,
|
|
2418
2219
|
height: s
|
|
2419
2220
|
} = t.getBoundingRect();
|
|
2420
2221
|
this.overlayMask.set({
|
|
2421
|
-
left:
|
|
2422
|
-
top:
|
|
2423
|
-
width:
|
|
2222
|
+
left: n,
|
|
2223
|
+
top: i,
|
|
2224
|
+
width: r,
|
|
2424
2225
|
height: s
|
|
2425
2226
|
}), e.discardActiveObject(), this.editor.layerManager.bringToFront(this.overlayMask, {
|
|
2426
2227
|
withoutSave: !0
|
|
@@ -2441,8 +2242,8 @@ class jt {
|
|
|
2441
2242
|
canvasManager: t,
|
|
2442
2243
|
historyManager: a
|
|
2443
2244
|
} = this.editor;
|
|
2444
|
-
a.suspendHistory(), this.isBlocked = !0, e.discardActiveObject(), e.selection = !1, e.skipTargetFind = !0, t.getObjects().forEach((
|
|
2445
|
-
|
|
2245
|
+
a.suspendHistory(), this.isBlocked = !0, e.discardActiveObject(), e.selection = !1, e.skipTargetFind = !0, t.getObjects().forEach((n) => {
|
|
2246
|
+
n.evented = !1, n.selectable = !1;
|
|
2446
2247
|
}), e.upperCanvasEl.style.pointerEvents = "none", e.lowerCanvasEl.style.pointerEvents = "none", this.overlayMask.visible = !0, this.refresh(), e.fire("editor:disabled"), a.resumeHistory();
|
|
2447
2248
|
}
|
|
2448
2249
|
}
|
|
@@ -2457,13 +2258,13 @@ class jt {
|
|
|
2457
2258
|
canvasManager: t,
|
|
2458
2259
|
historyManager: a
|
|
2459
2260
|
} = this.editor;
|
|
2460
|
-
a.suspendHistory(), this.isBlocked = !1, e.selection = !0, e.skipTargetFind = !1, t.getObjects().forEach((
|
|
2461
|
-
|
|
2261
|
+
a.suspendHistory(), this.isBlocked = !1, e.selection = !0, e.skipTargetFind = !1, t.getObjects().forEach((n) => {
|
|
2262
|
+
n.evented = !0, n.selectable = !0;
|
|
2462
2263
|
}), e.upperCanvasEl.style.pointerEvents = "", e.lowerCanvasEl.style.pointerEvents = "", this.overlayMask.visible = !1, e.requestRenderAll(), e.fire("editor:enabled"), a.resumeHistory();
|
|
2463
2264
|
}
|
|
2464
2265
|
}
|
|
2465
2266
|
}
|
|
2466
|
-
class
|
|
2267
|
+
class $ {
|
|
2467
2268
|
/**
|
|
2468
2269
|
* @param {object} options
|
|
2469
2270
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -2486,14 +2287,14 @@ class K {
|
|
|
2486
2287
|
withoutSave: t
|
|
2487
2288
|
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, {
|
|
2488
2289
|
canvas: a,
|
|
2489
|
-
historyManager:
|
|
2290
|
+
historyManager: n
|
|
2490
2291
|
} = this.editor;
|
|
2491
|
-
|
|
2492
|
-
var
|
|
2493
|
-
|
|
2494
|
-
a.bringObjectToFront(
|
|
2495
|
-
}) : a.bringObjectToFront(
|
|
2496
|
-
object:
|
|
2292
|
+
n.suspendHistory();
|
|
2293
|
+
var i = e || a.getActiveObject();
|
|
2294
|
+
i && (i.type === "activeselection" ? i.getObjects().forEach((r) => {
|
|
2295
|
+
a.bringObjectToFront(r);
|
|
2296
|
+
}) : a.bringObjectToFront(i), a.renderAll(), n.resumeHistory(), t || n.saveState(), a.fire("editor:object-bring-to-front", {
|
|
2297
|
+
object: i,
|
|
2497
2298
|
withoutSave: t
|
|
2498
2299
|
}));
|
|
2499
2300
|
}
|
|
@@ -2509,12 +2310,12 @@ class K {
|
|
|
2509
2310
|
withoutSave: t
|
|
2510
2311
|
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, {
|
|
2511
2312
|
canvas: a,
|
|
2512
|
-
historyManager:
|
|
2313
|
+
historyManager: n
|
|
2513
2314
|
} = this.editor;
|
|
2514
|
-
|
|
2515
|
-
var
|
|
2516
|
-
|
|
2517
|
-
object:
|
|
2315
|
+
n.suspendHistory();
|
|
2316
|
+
var i = e || a.getActiveObject();
|
|
2317
|
+
i && (i.type === "activeselection" ? $._moveSelectionForward(a, i) : a.bringObjectForward(i), a.renderAll(), n.resumeHistory(), t || n.saveState(), a.fire("editor:object-bring-forward", {
|
|
2318
|
+
object: i,
|
|
2518
2319
|
withoutSave: t
|
|
2519
2320
|
}));
|
|
2520
2321
|
}
|
|
@@ -2530,13 +2331,13 @@ class K {
|
|
|
2530
2331
|
withoutSave: t
|
|
2531
2332
|
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, {
|
|
2532
2333
|
canvas: a,
|
|
2533
|
-
montageArea:
|
|
2534
|
-
historyManager:
|
|
2334
|
+
montageArea: n,
|
|
2335
|
+
historyManager: i,
|
|
2535
2336
|
interactionBlocker: {
|
|
2536
|
-
overlayMask:
|
|
2337
|
+
overlayMask: r
|
|
2537
2338
|
}
|
|
2538
2339
|
} = this.editor;
|
|
2539
|
-
|
|
2340
|
+
i.suspendHistory();
|
|
2540
2341
|
var s = e || a.getActiveObject();
|
|
2541
2342
|
if (s) {
|
|
2542
2343
|
if (s.type === "activeselection")
|
|
@@ -2544,7 +2345,7 @@ class K {
|
|
|
2544
2345
|
a.sendObjectToBack(c[u]);
|
|
2545
2346
|
else
|
|
2546
2347
|
a.sendObjectToBack(s);
|
|
2547
|
-
a.sendObjectToBack(
|
|
2348
|
+
a.sendObjectToBack(n), a.sendObjectToBack(r), a.renderAll(), i.resumeHistory(), t || i.saveState(), a.fire("editor:object-send-to-back", {
|
|
2548
2349
|
object: s,
|
|
2549
2350
|
withoutSave: t
|
|
2550
2351
|
});
|
|
@@ -2561,15 +2362,15 @@ class K {
|
|
|
2561
2362
|
withoutSave: t
|
|
2562
2363
|
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, {
|
|
2563
2364
|
canvas: a,
|
|
2564
|
-
montageArea:
|
|
2565
|
-
historyManager:
|
|
2365
|
+
montageArea: n,
|
|
2366
|
+
historyManager: i,
|
|
2566
2367
|
interactionBlocker: {
|
|
2567
|
-
overlayMask:
|
|
2368
|
+
overlayMask: r
|
|
2568
2369
|
}
|
|
2569
2370
|
} = this.editor;
|
|
2570
|
-
|
|
2371
|
+
i.suspendHistory();
|
|
2571
2372
|
var s = e || a.getActiveObject();
|
|
2572
|
-
s && (s.type === "activeselection" ?
|
|
2373
|
+
s && (s.type === "activeselection" ? $._moveSelectionBackwards(a, s) : a.sendObjectBackwards(s), a.sendObjectToBack(n), a.sendObjectToBack(r), a.renderAll(), i.resumeHistory(), t || i.saveState(), a.fire("editor:object-send-backwards", {
|
|
2573
2374
|
object: s,
|
|
2574
2375
|
withoutSave: t
|
|
2575
2376
|
}));
|
|
@@ -2582,20 +2383,20 @@ class K {
|
|
|
2582
2383
|
* @private
|
|
2583
2384
|
*/
|
|
2584
2385
|
static _moveSelectionForward(e, t) {
|
|
2585
|
-
for (var a = e.getObjects(),
|
|
2586
|
-
var h = a[
|
|
2587
|
-
if (!
|
|
2588
|
-
return
|
|
2386
|
+
for (var a = e.getObjects(), n = t.getObjects(), i = n.map((l) => a.indexOf(l)), r = -1, s = function(d) {
|
|
2387
|
+
var h = a[d];
|
|
2388
|
+
if (!n.includes(h) && i.some((g) => d > g))
|
|
2389
|
+
return r = d, 1;
|
|
2589
2390
|
}, c = 0; c < a.length && !s(c); c += 1)
|
|
2590
2391
|
;
|
|
2591
|
-
if (
|
|
2592
|
-
var u =
|
|
2593
|
-
obj:
|
|
2594
|
-
index: a.indexOf(
|
|
2595
|
-
})).sort((
|
|
2596
|
-
u.forEach((
|
|
2597
|
-
var
|
|
2598
|
-
|
|
2392
|
+
if (r !== -1) {
|
|
2393
|
+
var u = n.map((l) => ({
|
|
2394
|
+
obj: l,
|
|
2395
|
+
index: a.indexOf(l)
|
|
2396
|
+
})).sort((l, d) => d.index - l.index);
|
|
2397
|
+
u.forEach((l) => {
|
|
2398
|
+
var d = a.indexOf(l.obj);
|
|
2399
|
+
d < r && (e.moveObjectTo(l.obj, r), r = d);
|
|
2599
2400
|
});
|
|
2600
2401
|
}
|
|
2601
2402
|
}
|
|
@@ -2607,8 +2408,8 @@ class K {
|
|
|
2607
2408
|
* @private
|
|
2608
2409
|
*/
|
|
2609
2410
|
static _moveSelectionBackwards(e, t) {
|
|
2610
|
-
for (var a = e.getObjects(),
|
|
2611
|
-
e.moveObjectTo(r
|
|
2411
|
+
for (var a = e.getObjects(), n = t.getObjects(), i = Math.min(...n.map((s) => a.indexOf(s))), r = n.length - 1; r >= 0; r -= 1)
|
|
2412
|
+
e.moveObjectTo(n[r], i - 1);
|
|
2612
2413
|
}
|
|
2613
2414
|
}
|
|
2614
2415
|
class yt {
|
|
@@ -2635,15 +2436,15 @@ class yt {
|
|
|
2635
2436
|
* @param {Object} flags.withoutSelection - Не выделять объект
|
|
2636
2437
|
* @param {Object} flags.withoutAdding - Не добавлять объект в canvas
|
|
2637
2438
|
*/
|
|
2638
|
-
addRectangle(
|
|
2639
|
-
var
|
|
2439
|
+
addRectangle(l = {}, { withoutSelection: c, withoutAdding: u } = {}) {
|
|
2440
|
+
var d = l, {
|
|
2640
2441
|
id: e = `rect-${A()}`,
|
|
2641
2442
|
left: t,
|
|
2642
2443
|
top: a,
|
|
2643
|
-
width:
|
|
2644
|
-
height:
|
|
2645
|
-
fill:
|
|
2646
|
-
} =
|
|
2444
|
+
width: n = 100,
|
|
2445
|
+
height: i = 100,
|
|
2446
|
+
fill: r = "blue"
|
|
2447
|
+
} = d, s = X(d, [
|
|
2647
2448
|
"id",
|
|
2648
2449
|
"left",
|
|
2649
2450
|
"top",
|
|
@@ -2655,9 +2456,9 @@ class yt {
|
|
|
2655
2456
|
id: e,
|
|
2656
2457
|
left: t,
|
|
2657
2458
|
top: a,
|
|
2658
|
-
width:
|
|
2659
|
-
height:
|
|
2660
|
-
fill:
|
|
2459
|
+
width: n,
|
|
2460
|
+
height: i,
|
|
2461
|
+
fill: r
|
|
2661
2462
|
}, s));
|
|
2662
2463
|
return !t && !a && h.centerObject(g), u || (h.add(g), c || h.setActiveObject(g), h.renderAll()), g;
|
|
2663
2464
|
}
|
|
@@ -2678,27 +2479,27 @@ class yt {
|
|
|
2678
2479
|
* @param {Object} flags.withoutAdding - Не добавлять объект в canvas
|
|
2679
2480
|
*/
|
|
2680
2481
|
addCircle(u = {}, { withoutSelection: s, withoutAdding: c } = {}) {
|
|
2681
|
-
var
|
|
2482
|
+
var l = u, {
|
|
2682
2483
|
id: e = `circle-${A()}`,
|
|
2683
2484
|
left: t,
|
|
2684
2485
|
top: a,
|
|
2685
|
-
radius:
|
|
2686
|
-
fill:
|
|
2687
|
-
} =
|
|
2486
|
+
radius: n = 50,
|
|
2487
|
+
fill: i = "green"
|
|
2488
|
+
} = l, r = X(l, [
|
|
2688
2489
|
"id",
|
|
2689
2490
|
"left",
|
|
2690
2491
|
"top",
|
|
2691
2492
|
"radius",
|
|
2692
2493
|
"fill"
|
|
2693
2494
|
]);
|
|
2694
|
-
const { canvas:
|
|
2495
|
+
const { canvas: d } = this.editor, h = new Be(C({
|
|
2695
2496
|
id: e,
|
|
2696
2497
|
left: t,
|
|
2697
2498
|
top: a,
|
|
2698
|
-
fill:
|
|
2699
|
-
radius:
|
|
2700
|
-
},
|
|
2701
|
-
return !t && !a &&
|
|
2499
|
+
fill: i,
|
|
2500
|
+
radius: n
|
|
2501
|
+
}, r));
|
|
2502
|
+
return !t && !a && d.centerObject(h), c || (d.add(h), s || d.setActiveObject(h), d.renderAll()), h;
|
|
2702
2503
|
}
|
|
2703
2504
|
/**
|
|
2704
2505
|
* Добавление треугольника
|
|
@@ -2717,15 +2518,15 @@ class yt {
|
|
|
2717
2518
|
* @param {Object} flags.withoutSelection - Не выделять объект
|
|
2718
2519
|
* @param {Object} flags.withoutAdding - Не добавлять объект в canvas
|
|
2719
2520
|
*/
|
|
2720
|
-
addTriangle(
|
|
2721
|
-
var
|
|
2521
|
+
addTriangle(l = {}, { withoutSelection: c, withoutAdding: u } = {}) {
|
|
2522
|
+
var d = l, {
|
|
2722
2523
|
id: e = `triangle-${A()}`,
|
|
2723
2524
|
left: t,
|
|
2724
2525
|
top: a,
|
|
2725
|
-
width:
|
|
2726
|
-
height:
|
|
2727
|
-
fill:
|
|
2728
|
-
} =
|
|
2526
|
+
width: n = 100,
|
|
2527
|
+
height: i = 100,
|
|
2528
|
+
fill: r = "yellow"
|
|
2529
|
+
} = d, s = X(d, [
|
|
2729
2530
|
"id",
|
|
2730
2531
|
"left",
|
|
2731
2532
|
"top",
|
|
@@ -2737,14 +2538,14 @@ class yt {
|
|
|
2737
2538
|
id: e,
|
|
2738
2539
|
left: t,
|
|
2739
2540
|
top: a,
|
|
2740
|
-
fill:
|
|
2741
|
-
width:
|
|
2742
|
-
height:
|
|
2541
|
+
fill: r,
|
|
2542
|
+
width: n,
|
|
2543
|
+
height: i
|
|
2743
2544
|
}, s));
|
|
2744
2545
|
return !t && !a && h.centerObject(g), u || (h.add(g), c || h.setActiveObject(g), h.renderAll()), g;
|
|
2745
2546
|
}
|
|
2746
2547
|
}
|
|
2747
|
-
class
|
|
2548
|
+
class bt {
|
|
2748
2549
|
/**
|
|
2749
2550
|
* @param {object} options
|
|
2750
2551
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -2778,11 +2579,11 @@ class pt {
|
|
|
2778
2579
|
});
|
|
2779
2580
|
}), this._cloneAndFire(e, a);
|
|
2780
2581
|
}
|
|
2781
|
-
const
|
|
2582
|
+
const i = a.toCanvasElement().toDataURL(), r = i.slice(5).split(";")[0], s = i.split(",")[1], c = atob(s), u = new Uint8Array(c.length);
|
|
2782
2583
|
for (let h = 0; h < c.length; h++)
|
|
2783
2584
|
u[h] = c.charCodeAt(h);
|
|
2784
|
-
const
|
|
2785
|
-
navigator.clipboard.write([
|
|
2585
|
+
const l = new Blob([u.buffer], { type: r }), d = new ClipboardItem({ [r]: l });
|
|
2586
|
+
navigator.clipboard.write([d]).catch((h) => {
|
|
2786
2587
|
t.emitWarning({
|
|
2787
2588
|
origin: "ClipboardManager",
|
|
2788
2589
|
method: "copy",
|
|
@@ -2816,11 +2617,11 @@ class pt {
|
|
|
2816
2617
|
* @param {Array} event.clipboardData.items — элементы буфера обмена
|
|
2817
2618
|
*/
|
|
2818
2619
|
handlePasteEvent({ clipboardData: e }) {
|
|
2819
|
-
var
|
|
2820
|
-
if (!((
|
|
2821
|
-
const { imageManager: t } = this.editor, { items: a } = e,
|
|
2822
|
-
if (
|
|
2823
|
-
const s =
|
|
2620
|
+
var r;
|
|
2621
|
+
if (!((r = e == null ? void 0 : e.items) != null && r.length)) return;
|
|
2622
|
+
const { imageManager: t } = this.editor, { items: a } = e, n = a[a.length - 1];
|
|
2623
|
+
if (n.type !== "text/html") {
|
|
2624
|
+
const s = n.getAsFile();
|
|
2824
2625
|
if (!s) return;
|
|
2825
2626
|
const c = new FileReader();
|
|
2826
2627
|
c.onload = (u) => {
|
|
@@ -2828,9 +2629,9 @@ class pt {
|
|
|
2828
2629
|
}, c.readAsDataURL(s);
|
|
2829
2630
|
return;
|
|
2830
2631
|
}
|
|
2831
|
-
const
|
|
2832
|
-
if (
|
|
2833
|
-
const u = new DOMParser().parseFromString(
|
|
2632
|
+
const i = e.getData("text/html");
|
|
2633
|
+
if (i) {
|
|
2634
|
+
const u = new DOMParser().parseFromString(i, "text/html").querySelector("img");
|
|
2834
2635
|
if (u != null && u.src) {
|
|
2835
2636
|
t.importImage({ source: u.src });
|
|
2836
2637
|
return;
|
|
@@ -2852,13 +2653,13 @@ class pt {
|
|
|
2852
2653
|
left: t.left + 10,
|
|
2853
2654
|
top: t.top + 10,
|
|
2854
2655
|
evented: !0
|
|
2855
|
-
}), t instanceof
|
|
2656
|
+
}), t instanceof T ? (t.canvas = e, t.forEachObject((a) => {
|
|
2856
2657
|
e.add(a);
|
|
2857
2658
|
})) : e.add(t), e.setActiveObject(t), e.requestRenderAll(), e.fire("editor:object-pasted", { object: t });
|
|
2858
2659
|
});
|
|
2859
2660
|
}
|
|
2860
2661
|
}
|
|
2861
|
-
class
|
|
2662
|
+
class pt {
|
|
2862
2663
|
/**
|
|
2863
2664
|
* @param {object} options
|
|
2864
2665
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -2883,10 +2684,10 @@ class bt {
|
|
|
2883
2684
|
skipInnerObjects: t,
|
|
2884
2685
|
withoutSave: a
|
|
2885
2686
|
} = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, {
|
|
2886
|
-
canvas:
|
|
2887
|
-
historyManager:
|
|
2888
|
-
} = this.editor,
|
|
2889
|
-
if (!(!
|
|
2687
|
+
canvas: n,
|
|
2688
|
+
historyManager: i
|
|
2689
|
+
} = this.editor, r = e || n.getActiveObject();
|
|
2690
|
+
if (!(!r || r.locked)) {
|
|
2890
2691
|
var s = {
|
|
2891
2692
|
lockMovementX: !0,
|
|
2892
2693
|
lockMovementY: !0,
|
|
@@ -2897,12 +2698,12 @@ class bt {
|
|
|
2897
2698
|
lockSkewingY: !0,
|
|
2898
2699
|
locked: !0
|
|
2899
2700
|
};
|
|
2900
|
-
|
|
2901
|
-
var c = !t && ["activeselection", "group"].includes(
|
|
2902
|
-
c &&
|
|
2701
|
+
r.set(s);
|
|
2702
|
+
var c = !t && ["activeselection", "group"].includes(r.type);
|
|
2703
|
+
c && r.getObjects().forEach((u) => {
|
|
2903
2704
|
u.set(s);
|
|
2904
|
-
}),
|
|
2905
|
-
object:
|
|
2705
|
+
}), n.renderAll(), a || i.saveState(), n.fire("editor:object-locked", {
|
|
2706
|
+
object: r,
|
|
2906
2707
|
skipInnerObjects: t,
|
|
2907
2708
|
withoutSave: a
|
|
2908
2709
|
});
|
|
@@ -2922,10 +2723,10 @@ class bt {
|
|
|
2922
2723
|
withoutSave: t
|
|
2923
2724
|
} = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, {
|
|
2924
2725
|
canvas: a,
|
|
2925
|
-
historyManager:
|
|
2926
|
-
} = this.editor,
|
|
2927
|
-
if (
|
|
2928
|
-
var
|
|
2726
|
+
historyManager: n
|
|
2727
|
+
} = this.editor, i = e || a.getActiveObject();
|
|
2728
|
+
if (i) {
|
|
2729
|
+
var r = {
|
|
2929
2730
|
lockMovementX: !1,
|
|
2930
2731
|
lockMovementY: !1,
|
|
2931
2732
|
lockRotation: !1,
|
|
@@ -2935,10 +2736,10 @@ class bt {
|
|
|
2935
2736
|
lockSkewingY: !1,
|
|
2936
2737
|
locked: !1
|
|
2937
2738
|
};
|
|
2938
|
-
|
|
2939
|
-
s.set(
|
|
2940
|
-
}), a.renderAll(), t ||
|
|
2941
|
-
object:
|
|
2739
|
+
i.set(r), ["activeselection", "group"].includes(i.type) && i.getObjects().forEach((s) => {
|
|
2740
|
+
s.set(r);
|
|
2741
|
+
}), a.renderAll(), t || n.saveState(), a.fire("editor:object-unlocked", {
|
|
2742
|
+
object: i,
|
|
2942
2743
|
withoutSave: t
|
|
2943
2744
|
});
|
|
2944
2745
|
}
|
|
@@ -2968,14 +2769,14 @@ class It {
|
|
|
2968
2769
|
withoutSave: t
|
|
2969
2770
|
} = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, {
|
|
2970
2771
|
canvas: a,
|
|
2971
|
-
historyManager:
|
|
2772
|
+
historyManager: n
|
|
2972
2773
|
} = this.editor;
|
|
2973
|
-
|
|
2974
|
-
var
|
|
2975
|
-
if (
|
|
2976
|
-
var
|
|
2977
|
-
|
|
2978
|
-
object:
|
|
2774
|
+
n.suspendHistory();
|
|
2775
|
+
var i = e || a.getActiveObject();
|
|
2776
|
+
if (i && i.type === "activeselection") {
|
|
2777
|
+
var r = i.getObjects(), s = new ze(r);
|
|
2778
|
+
r.forEach((c) => a.remove(c)), s.set("id", "".concat(s.type, "-").concat(A())), a.add(s), a.setActiveObject(s), a.renderAll(), n.resumeHistory(), t || n.saveState(), a.fire("editor:objects-grouped", {
|
|
2779
|
+
object: i,
|
|
2979
2780
|
group: s,
|
|
2980
2781
|
withoutSave: t
|
|
2981
2782
|
});
|
|
@@ -2994,18 +2795,18 @@ class It {
|
|
|
2994
2795
|
withoutSave: t
|
|
2995
2796
|
} = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, {
|
|
2996
2797
|
canvas: a,
|
|
2997
|
-
historyManager:
|
|
2798
|
+
historyManager: n
|
|
2998
2799
|
} = this.editor;
|
|
2999
|
-
|
|
3000
|
-
var
|
|
3001
|
-
if (!(!
|
|
3002
|
-
var
|
|
3003
|
-
a.remove(
|
|
3004
|
-
var s = new
|
|
2800
|
+
n.suspendHistory();
|
|
2801
|
+
var i = e || a.getActiveObject();
|
|
2802
|
+
if (!(!i || i.type !== "group")) {
|
|
2803
|
+
var r = i.removeAll();
|
|
2804
|
+
a.remove(i), r.forEach((c) => a.add(c));
|
|
2805
|
+
var s = new T(r, {
|
|
3005
2806
|
canvas: a
|
|
3006
2807
|
});
|
|
3007
|
-
a.setActiveObject(s), a.renderAll(),
|
|
3008
|
-
object:
|
|
2808
|
+
a.setActiveObject(s), a.renderAll(), n.resumeHistory(), t || n.saveState(), a.fire("editor:objects-ungrouped", {
|
|
2809
|
+
object: i,
|
|
3009
2810
|
selection: s,
|
|
3010
2811
|
withoutSave: t
|
|
3011
2812
|
});
|
|
@@ -3034,15 +2835,15 @@ class At {
|
|
|
3034
2835
|
objectLockManager: a
|
|
3035
2836
|
} = this.editor;
|
|
3036
2837
|
e.discardActiveObject();
|
|
3037
|
-
var
|
|
2838
|
+
var n = t.getObjects(), i = n.some((s) => s.locked), r = n.length > 1 ? new T(t.getObjects(), {
|
|
3038
2839
|
canvas: e
|
|
3039
|
-
}) :
|
|
3040
|
-
|
|
3041
|
-
object:
|
|
2840
|
+
}) : n[0];
|
|
2841
|
+
i && a.lockObject({
|
|
2842
|
+
object: r,
|
|
3042
2843
|
skipInnerObjects: !0,
|
|
3043
2844
|
withoutSave: !0
|
|
3044
|
-
}), e.setActiveObject(
|
|
3045
|
-
selected:
|
|
2845
|
+
}), e.setActiveObject(r), e.requestRenderAll(), e.fire("editor:all-objects-selected", {
|
|
2846
|
+
selected: r
|
|
3046
2847
|
});
|
|
3047
2848
|
}
|
|
3048
2849
|
}
|
|
@@ -3070,22 +2871,22 @@ class St {
|
|
|
3070
2871
|
withoutSave: t
|
|
3071
2872
|
} = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, {
|
|
3072
2873
|
canvas: a,
|
|
3073
|
-
historyManager:
|
|
3074
|
-
groupingManager:
|
|
3075
|
-
} = this.editor,
|
|
3076
|
-
|
|
2874
|
+
historyManager: n,
|
|
2875
|
+
groupingManager: i
|
|
2876
|
+
} = this.editor, r = (e || a.getActiveObjects()).filter((s) => !s.locked);
|
|
2877
|
+
r != null && r.length && (n.suspendHistory(), r.forEach((s) => {
|
|
3077
2878
|
if (s.type === "group" && s.format !== "svg") {
|
|
3078
|
-
|
|
2879
|
+
i.ungroup(s), this.deleteSelectedObjects();
|
|
3079
2880
|
return;
|
|
3080
2881
|
}
|
|
3081
2882
|
a.remove(s);
|
|
3082
|
-
}), a.discardActiveObject(), a.renderAll(),
|
|
3083
|
-
objects:
|
|
2883
|
+
}), a.discardActiveObject(), a.renderAll(), n.resumeHistory(), t || n.saveState(), a.fire("editor:objects-deleted", {
|
|
2884
|
+
objects: r,
|
|
3084
2885
|
withoutSave: t
|
|
3085
2886
|
}));
|
|
3086
2887
|
}
|
|
3087
2888
|
}
|
|
3088
|
-
|
|
2889
|
+
const Ct = {
|
|
3089
2890
|
IMAGE_MANAGER: {
|
|
3090
2891
|
/**
|
|
3091
2892
|
* Некорректный Content-Type изображения
|
|
@@ -3115,7 +2916,7 @@ var Ct = {
|
|
|
3115
2916
|
/**
|
|
3116
2917
|
* Коды ошибок и предупреждений для ClipboardManager.
|
|
3117
2918
|
*/
|
|
3118
|
-
|
|
2919
|
+
CLIPBOARD_MANAGER: {
|
|
3119
2920
|
/**
|
|
3120
2921
|
* Буфер обмена не поддерживается в браузере или отсутствует HTTPS-соединение.
|
|
3121
2922
|
*/
|
|
@@ -3132,9 +2933,18 @@ var Ct = {
|
|
|
3132
2933
|
* Ошибка клонирования объекта.
|
|
3133
2934
|
*/
|
|
3134
2935
|
CLONE_FAILED: "CLONE_FAILED"
|
|
2936
|
+
},
|
|
2937
|
+
/**
|
|
2938
|
+
* Коды ошибок и предупреждений для CanvasManager.
|
|
2939
|
+
*/
|
|
2940
|
+
CANVAS_MANAGER: {
|
|
2941
|
+
/**
|
|
2942
|
+
* Ошибка при получении активного объекта.
|
|
2943
|
+
*/
|
|
2944
|
+
NO_ACTIVE_OBJECT: "NO_ACTIVE_OBJECT"
|
|
3135
2945
|
}
|
|
3136
2946
|
};
|
|
3137
|
-
class
|
|
2947
|
+
class q {
|
|
3138
2948
|
constructor({ editor: e }) {
|
|
3139
2949
|
this._buffer = [], this.editor = e;
|
|
3140
2950
|
}
|
|
@@ -3154,20 +2964,20 @@ class $ {
|
|
|
3154
2964
|
* @param {string} [options.message] — текст ошибки (опционально, если не передан, то используется код ошибки)
|
|
3155
2965
|
* @fires editor:error
|
|
3156
2966
|
*/
|
|
3157
|
-
emitError({ origin: e = "ImageEditor", method: t = "Unknown Method", code: a, data:
|
|
3158
|
-
if (
|
|
2967
|
+
emitError({ origin: e = "ImageEditor", method: t = "Unknown Method", code: a, data: n, message: i }) {
|
|
2968
|
+
if (!q.isValidErrorCode(a)) {
|
|
3159
2969
|
console.warn("Неизвестный код ошибки: ", { code: a, origin: e, method: t });
|
|
3160
2970
|
return;
|
|
3161
2971
|
}
|
|
3162
2972
|
if (!a) return;
|
|
3163
|
-
const
|
|
3164
|
-
console.error(`${e}. ${t}. ${a}. ${
|
|
2973
|
+
const r = i || a;
|
|
2974
|
+
console.error(`${e}. ${t}. ${a}. ${r}`, n);
|
|
3165
2975
|
const s = {
|
|
3166
2976
|
code: a,
|
|
3167
2977
|
origin: e,
|
|
3168
2978
|
method: t,
|
|
3169
|
-
message:
|
|
3170
|
-
data:
|
|
2979
|
+
message: r,
|
|
2980
|
+
data: n
|
|
3171
2981
|
};
|
|
3172
2982
|
this._buffer.push(C({
|
|
3173
2983
|
type: "editor:error"
|
|
@@ -3183,19 +2993,19 @@ class $ {
|
|
|
3183
2993
|
* @param {string} [options.message] — текст предупреждения (опционально, если не передан, то используется код предупреждения)
|
|
3184
2994
|
* @fires editor:warning
|
|
3185
2995
|
*/
|
|
3186
|
-
emitWarning({ origin: e = "ImageEditor", method: t = "Unknown Method", code: a, message:
|
|
3187
|
-
if (
|
|
2996
|
+
emitWarning({ origin: e = "ImageEditor", method: t = "Unknown Method", code: a, message: n, data: i }) {
|
|
2997
|
+
if (!q.isValidErrorCode(a)) {
|
|
3188
2998
|
console.warn("Неизвестный код предупреждения: ", { code: a, origin: e, method: t });
|
|
3189
2999
|
return;
|
|
3190
3000
|
}
|
|
3191
|
-
const
|
|
3192
|
-
console.warn(`${e}. ${t}. ${a}. ${
|
|
3001
|
+
const r = n || a;
|
|
3002
|
+
console.warn(`${e}. ${t}. ${a}. ${r}`, i);
|
|
3193
3003
|
const s = {
|
|
3194
3004
|
code: a,
|
|
3195
3005
|
origin: e,
|
|
3196
3006
|
method: t,
|
|
3197
|
-
message:
|
|
3198
|
-
data:
|
|
3007
|
+
message: r,
|
|
3008
|
+
data: i
|
|
3199
3009
|
};
|
|
3200
3010
|
this._buffer.push(C({
|
|
3201
3011
|
type: "editor:warning"
|
|
@@ -3205,16 +3015,14 @@ class $ {
|
|
|
3205
3015
|
return e ? Object.values(Ct).some((t) => Object.values(t).includes(e)) : !1;
|
|
3206
3016
|
}
|
|
3207
3017
|
}
|
|
3208
|
-
class
|
|
3018
|
+
class de {
|
|
3209
3019
|
/**
|
|
3210
3020
|
* Конструктор класса ImageEditor.
|
|
3211
3021
|
* @param {string} canvasId - идентификатор канваса, в котором будет создан редактор
|
|
3212
3022
|
* @param {CanvasOptions} options - опции и настройки редактора
|
|
3213
3023
|
*/
|
|
3214
3024
|
constructor(e, t) {
|
|
3215
|
-
this.options = t;
|
|
3216
|
-
const { defaultScale: a, minZoom: r, maxZoom: n } = t;
|
|
3217
|
-
this.containerId = e, this.editorId = `${e}-${A()}`, this.clipboard = null, this.defaultZoom = a, this.minZoom = r || ht, this.maxZoom = n || gt, this.init();
|
|
3025
|
+
this.options = t, this.containerId = e, this.editorId = `${e}-${A()}`, this.clipboard = null, this.init();
|
|
3218
3026
|
}
|
|
3219
3027
|
init() {
|
|
3220
3028
|
return Q(this, null, function* () {
|
|
@@ -3222,24 +3030,24 @@ class ue {
|
|
|
3222
3030
|
editorContainerWidth: e,
|
|
3223
3031
|
editorContainerHeight: t,
|
|
3224
3032
|
canvasWrapperWidth: a,
|
|
3225
|
-
canvasWrapperHeight:
|
|
3226
|
-
canvasCSSWidth:
|
|
3227
|
-
canvasCSSHeight:
|
|
3033
|
+
canvasWrapperHeight: n,
|
|
3034
|
+
canvasCSSWidth: i,
|
|
3035
|
+
canvasCSSHeight: r,
|
|
3228
3036
|
initialImage: s,
|
|
3229
3037
|
initialStateJSON: c,
|
|
3230
3038
|
scaleType: u,
|
|
3231
|
-
_onReadyCallback:
|
|
3039
|
+
_onReadyCallback: l
|
|
3232
3040
|
} = this.options;
|
|
3233
|
-
if (Ke.apply(), this.canvas = new Ue(this.containerId, this.options), this.moduleLoader = new
|
|
3041
|
+
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(r), s != null && s.source) {
|
|
3234
3042
|
const {
|
|
3235
|
-
source:
|
|
3043
|
+
source: d,
|
|
3236
3044
|
scale: h = `image-${u}`,
|
|
3237
3045
|
withoutSave: g = !0
|
|
3238
3046
|
} = s;
|
|
3239
|
-
yield this.imageManager.importImage({ source:
|
|
3047
|
+
yield this.imageManager.importImage({ source: d, scale: h, withoutSave: g });
|
|
3240
3048
|
} else
|
|
3241
3049
|
this.canvasManager.setDefaultScale({ withoutSave: !0 });
|
|
3242
|
-
c && this.historyManager.loadStateFromFullState(c), this.historyManager.saveState(), console.log("editor:ready"), this.canvas.fire("editor:ready", this), typeof
|
|
3050
|
+
c && this.historyManager.loadStateFromFullState(c), this.historyManager.saveState(), console.log("editor:ready"), this.canvas.fire("editor:ready", this), typeof l == "function" && l(this);
|
|
3243
3051
|
});
|
|
3244
3052
|
}
|
|
3245
3053
|
_createMontageArea() {
|
|
@@ -3250,7 +3058,7 @@ class ue {
|
|
|
3250
3058
|
this.montageArea = this.shapeManager.addRectangle({
|
|
3251
3059
|
width: e,
|
|
3252
3060
|
height: t,
|
|
3253
|
-
fill:
|
|
3061
|
+
fill: de._createMosaicPattern(),
|
|
3254
3062
|
stroke: null,
|
|
3255
3063
|
strokeWidth: 0,
|
|
3256
3064
|
selectable: !1,
|
|
@@ -3294,7 +3102,7 @@ class ue {
|
|
|
3294
3102
|
const e = document.createElement("canvas");
|
|
3295
3103
|
e.width = 20, e.height = 20;
|
|
3296
3104
|
const t = e.getContext("2d");
|
|
3297
|
-
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
|
|
3105
|
+
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({
|
|
3298
3106
|
source: e,
|
|
3299
3107
|
repeat: "repeat"
|
|
3300
3108
|
});
|
|
@@ -3388,18 +3196,18 @@ const Dt = {
|
|
|
3388
3196
|
deleteObjectsByHotkey: !0,
|
|
3389
3197
|
resetObjectFitByDoubleClick: !0
|
|
3390
3198
|
};
|
|
3391
|
-
function
|
|
3199
|
+
function wt(o, e = {}) {
|
|
3392
3200
|
const t = C(C({}, Dt), e), a = document.getElementById(o);
|
|
3393
3201
|
if (!a)
|
|
3394
3202
|
return Promise.reject(new Error(`Контейнер с ID "${o}" не найден.`));
|
|
3395
|
-
const
|
|
3396
|
-
return
|
|
3397
|
-
t._onReadyCallback =
|
|
3398
|
-
const
|
|
3399
|
-
window[o] =
|
|
3203
|
+
const n = document.createElement("canvas");
|
|
3204
|
+
return n.id = `${o}-canvas`, a.appendChild(n), t.editorContainer = a, new Promise((i) => {
|
|
3205
|
+
t._onReadyCallback = i;
|
|
3206
|
+
const r = new de(n.id, t);
|
|
3207
|
+
window[o] = r;
|
|
3400
3208
|
});
|
|
3401
3209
|
}
|
|
3402
3210
|
export {
|
|
3403
|
-
|
|
3211
|
+
wt as default
|
|
3404
3212
|
};
|
|
3405
3213
|
//# sourceMappingURL=main.js.map
|