@anu3ev/fabric-image-editor 0.1.37 → 0.1.39
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 +448 -409
- package/package.json +1 -1
package/dist/main.js
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
1
|
+
var Le = Object.defineProperty;
|
|
2
|
+
var X = Object.getOwnPropertySymbols;
|
|
3
3
|
var Me = Object.prototype.hasOwnProperty, fe = Object.prototype.propertyIsEnumerable;
|
|
4
|
-
var me = (o, e, t) => e in o ?
|
|
4
|
+
var me = (o, e, t) => e in o ? Le(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
|
Me.call(e, t) && me(o, t, e[t]);
|
|
7
|
-
if (
|
|
8
|
-
for (var t of
|
|
7
|
+
if (X)
|
|
8
|
+
for (var t of X(e))
|
|
9
9
|
fe.call(e, t) && me(o, t, e[t]);
|
|
10
10
|
return o;
|
|
11
11
|
};
|
|
12
|
-
var
|
|
12
|
+
var Q = (o, e) => {
|
|
13
13
|
var t = {};
|
|
14
14
|
for (var a in o)
|
|
15
15
|
Me.call(o, a) && e.indexOf(a) < 0 && (t[a] = o[a]);
|
|
16
|
-
if (o != null &&
|
|
17
|
-
for (var a of
|
|
16
|
+
if (o != null && X)
|
|
17
|
+
for (var a of X(o))
|
|
18
18
|
e.indexOf(a) < 0 && fe.call(o, a) && (t[a] = o[a]);
|
|
19
19
|
return t;
|
|
20
20
|
};
|
|
21
|
-
var
|
|
21
|
+
var H = (o, e, t) => new Promise((a, r) => {
|
|
22
22
|
var i = (c) => {
|
|
23
23
|
try {
|
|
24
24
|
s(t.next(c));
|
|
@@ -34,14 +34,14 @@ var $ = (o, e, t) => new Promise((a, r) => {
|
|
|
34
34
|
}, s = (c) => c.done ? a(c.value) : Promise.resolve(c.value).then(i, n);
|
|
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 W, util as _, controlsUtils as Ee, InteractiveFabricObject as Oe, loadSVGFromURL as Te, FabricImage as q, Point as ke, Rect as xe, Circle as Be, Triangle as Ze, Group as ze, Canvas as Ue, Pattern as Ye } from "fabric";
|
|
38
|
+
import { create as He } from "jsondiffpatch";
|
|
39
|
+
var Pe = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict", S = 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 += Pe[a[e] & 63];
|
|
42
42
|
return t;
|
|
43
43
|
};
|
|
44
|
-
class
|
|
44
|
+
class R {
|
|
45
45
|
/**
|
|
46
46
|
* Конструктор принимает редактор и опции.
|
|
47
47
|
* @param {Object} params
|
|
@@ -58,14 +58,14 @@ class P {
|
|
|
58
58
|
* @param {Boolean} [params.options.resetObjectFitByDoubleClick] — сброс фита объекта по двойному клику
|
|
59
59
|
*/
|
|
60
60
|
constructor({ editor: e, options: t = {} }) {
|
|
61
|
-
this.isDragging = !1, this.lastMouseX = 0, this.lastMouseY = 0, this.isUndoRedoKeyPressed = !1, this.isSpacePressed = !1, this.canvasDragging = !1, this.mouseWheelZooming = !1, this.bringToFrontOnSelection = !1, this.resetObjectFitByDoubleClick = !1, this.copyObjectsByHotkey = !1, this.pasteImageFromClipboard = !1, this.undoRedoByHotKeys = !1, this.selectAllByHotkey = !1, this.deleteObjectsByHotkey = !1, this.
|
|
61
|
+
this.isDragging = !1, this.lastMouseX = 0, this.lastMouseY = 0, this.isUndoRedoKeyPressed = !1, this.isSpacePressed = !1, this.canvasDragging = !1, this.mouseWheelZooming = !1, this.bringToFrontOnSelection = !1, this.resetObjectFitByDoubleClick = !1, this.copyObjectsByHotkey = !1, this.pasteImageFromClipboard = !1, this.undoRedoByHotKeys = !1, this.selectAllByHotkey = !1, this.deleteObjectsByHotkey = !1, this.adaptCanvasToContainerOnResize = !1, this.editor = e, this.canvas = e.canvas, this.options = t, this.handleContainerResizeBound = R.debounce(this.handleContainerResize.bind(this), 500), this.handleCopyEventBound = this.handleCopyEvent.bind(this), this.handlePasteEventBound = this.handlePasteEvent.bind(this), this.handleUndoRedoEventBound = this.handleUndoRedoEvent.bind(this), this.handleUndoRedoKeyUpBound = this.handleUndoRedoKeyUp.bind(this), this.handleSelectAllEventBound = this.handleSelectAllEvent.bind(this), this.handleDeleteObjectsEventBound = this.handleDeleteObjectsEvent.bind(this), this.handleSpaceKeyDownBound = this.handleSpaceKeyDown.bind(this), this.handleSpaceKeyUpBound = this.handleSpaceKeyUp.bind(this), this.handleObjectModifiedHistoryBound = R.debounce(this.handleObjectModifiedHistory.bind(this), 300), this.handleObjectRotatingHistoryBound = R.debounce(this.handleObjectRotatingHistory.bind(this), 300), this.handleObjectAddedHistoryBound = this.handleObjectAddedHistory.bind(this), this.handleObjectRemovedHistoryBound = this.handleObjectRemovedHistory.bind(this), this.handleOverlayUpdateBound = this.handleOverlayUpdate.bind(this), this.handleCanvasDragStartBound = this.handleCanvasDragStart.bind(this), this.handleCanvasDraggingBound = this.handleCanvasDragging.bind(this), this.handleCanvasDragEndBound = this.handleCanvasDragEnd.bind(this), this.handleMouseWheelZoomBound = this.handleMouseWheelZoom.bind(this), this.handleBringToFrontBound = this.handleBringToFront.bind(this), this.handleResetObjectFitBound = this.handleResetObjectFit.bind(this), this.handleLockedSelectionBound = this._filterLockedSelection.bind(this), this.init();
|
|
62
62
|
}
|
|
63
63
|
/**
|
|
64
64
|
* Инициализация всех обработчиков согласно опциям.
|
|
65
65
|
*/
|
|
66
66
|
init() {
|
|
67
67
|
const {
|
|
68
|
-
|
|
68
|
+
adaptCanvasToContainerOnResize: e,
|
|
69
69
|
canvasDragging: t,
|
|
70
70
|
mouseWheelZooming: a,
|
|
71
71
|
bringToFrontOnSelection: r,
|
|
@@ -74,9 +74,9 @@ class P {
|
|
|
74
74
|
undoRedoByHotKeys: s,
|
|
75
75
|
selectAllByHotkey: c,
|
|
76
76
|
deleteObjectsByHotkey: u,
|
|
77
|
-
resetObjectFitByDoubleClick:
|
|
77
|
+
resetObjectFitByDoubleClick: d
|
|
78
78
|
} = this.options;
|
|
79
|
-
t && (this.canvas.on("mouse:down", this.handleCanvasDragStartBound), this.canvas.on("mouse:move", this.handleCanvasDraggingBound), this.canvas.on("mouse:up", this.handleCanvasDragEndBound), document.addEventListener("keydown", this.handleSpaceKeyDownBound, { capture: !0 }), document.addEventListener("keyup", this.handleSpaceKeyUpBound, { capture: !0 })), a && this.canvas.on("mouse:wheel", this.handleMouseWheelZoomBound), r && (this.canvas.on("selection:created", this.handleBringToFrontBound), this.canvas.on("selection:updated", this.handleBringToFrontBound)),
|
|
79
|
+
t && (this.canvas.on("mouse:down", this.handleCanvasDragStartBound), this.canvas.on("mouse:move", this.handleCanvasDraggingBound), this.canvas.on("mouse:up", this.handleCanvasDragEndBound), document.addEventListener("keydown", this.handleSpaceKeyDownBound, { capture: !0 }), document.addEventListener("keyup", this.handleSpaceKeyUpBound, { capture: !0 })), a && this.canvas.on("mouse:wheel", this.handleMouseWheelZoomBound), r && (this.canvas.on("selection:created", this.handleBringToFrontBound), this.canvas.on("selection:updated", this.handleBringToFrontBound)), d && this.canvas.on("mouse:dblclick", this.handleResetObjectFitBound), e && window.addEventListener("resize", this.handleContainerResizeBound, { capture: !0 }), i && document.addEventListener("keydown", this.handleCopyEventBound, { capture: !0 }), n && 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
|
* При массовом выделении объектов удаляем из него залоченные.
|
|
@@ -95,7 +95,7 @@ class P {
|
|
|
95
95
|
this.canvas.setActiveObject(r[0]);
|
|
96
96
|
return;
|
|
97
97
|
}
|
|
98
|
-
const i = new
|
|
98
|
+
const i = new W(r, {
|
|
99
99
|
canvas: this.canvas
|
|
100
100
|
});
|
|
101
101
|
this.canvas.setActiveObject(i), this.canvas.requestRenderAll();
|
|
@@ -128,9 +128,8 @@ class P {
|
|
|
128
128
|
* Обработчик изменения размеров окна браузера.
|
|
129
129
|
* Адаптирует канвас к размерам контейнера.
|
|
130
130
|
*/
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
this.editor.canvasManager.setResolutionWidth(e, { adaptCanvasToContainer: !0, withoutSave: !0 }), this.editor.canvasManager.setResolutionHeight(t, { adaptCanvasToContainer: !0, withoutSave: !0 }), this.editor.canvasManager.centerMontageArea(), this.editor.selectionManager.selectAll(), this.editor.transformManager.fitObject({ fitAsOneObject: !0, withoutSave: !0 });
|
|
131
|
+
handleContainerResize() {
|
|
132
|
+
this.editor.canvasManager.updateCanvasAndFitObjects();
|
|
134
133
|
}
|
|
135
134
|
/**
|
|
136
135
|
* Обработчик для Ctrl+C (копирование).
|
|
@@ -145,34 +144,10 @@ class P {
|
|
|
145
144
|
}
|
|
146
145
|
/**
|
|
147
146
|
* Обработчик вставки объекта или изображения из буфера обмена.
|
|
148
|
-
* @param {
|
|
149
|
-
* @param {Object} event.clipboardData — данные из буфера обмена
|
|
150
|
-
* @param {Array} event.clipboardData.items — элементы буфера обмена
|
|
151
|
-
*
|
|
152
|
-
* TODO: Попробовать вынести методы в классы-менеджеры.
|
|
147
|
+
* @param {ClipboardEvent} event — объект события
|
|
153
148
|
*/
|
|
154
|
-
handlePasteEvent(
|
|
155
|
-
|
|
156
|
-
if (!((n = e == null ? void 0 : e.items) != null && n.length)) return;
|
|
157
|
-
const { imageManager: t } = this.editor, { items: a } = e, r = a[a.length - 1];
|
|
158
|
-
if (r.type.indexOf("image") !== -1) {
|
|
159
|
-
const s = r.getAsFile();
|
|
160
|
-
if (!s) return;
|
|
161
|
-
const c = new FileReader();
|
|
162
|
-
c.onload = (u) => {
|
|
163
|
-
u.target && this.editor.imageManager.importImage({ source: u.target.result });
|
|
164
|
-
}, c.readAsDataURL(s);
|
|
165
|
-
return;
|
|
166
|
-
}
|
|
167
|
-
const i = e.getData("text/html");
|
|
168
|
-
if (i) {
|
|
169
|
-
const u = new DOMParser().parseFromString(i, "text/html").querySelector("img");
|
|
170
|
-
if (u != null && u.src) {
|
|
171
|
-
t.importImage({ source: u.src });
|
|
172
|
-
return;
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
this.editor.clipboardManager.paste();
|
|
149
|
+
handlePasteEvent(e) {
|
|
150
|
+
this.editor.clipboardManager.handlePasteEvent(e);
|
|
176
151
|
}
|
|
177
152
|
/**
|
|
178
153
|
* Обработчик для отмены/повтора (Ctrl+Z/Ctrl+Y).
|
|
@@ -182,7 +157,7 @@ class P {
|
|
|
182
157
|
* @param {String} event.code — код клавиши
|
|
183
158
|
*/
|
|
184
159
|
handleUndoRedoEvent(e) {
|
|
185
|
-
return
|
|
160
|
+
return H(this, null, function* () {
|
|
186
161
|
const { ctrlKey: t, metaKey: a, code: r, repeat: i } = e;
|
|
187
162
|
!t && !a || i || this.isUndoRedoKeyPressed || (r === "KeyZ" ? (e.preventDefault(), this.isUndoRedoKeyPressed = !0, yield this.editor.historyManager.undo()) : r === "KeyY" && (e.preventDefault(), this.isUndoRedoKeyPressed = !0, yield this.editor.historyManager.redo()));
|
|
188
163
|
});
|
|
@@ -311,7 +286,7 @@ class P {
|
|
|
311
286
|
* Метод для удаления всех слушателей
|
|
312
287
|
*/
|
|
313
288
|
destroy() {
|
|
314
|
-
window.removeEventListener("resize", this.
|
|
289
|
+
window.removeEventListener("resize", this.handleContainerResizeBound, { capture: !0 }), document.removeEventListener("keydown", this.handleCopyEventBound, { capture: !0 }), document.removeEventListener("paste", this.handlePasteEventBound, { capture: !0 }), document.removeEventListener("keydown", this.handleUndoRedoEventBound, { capture: !0 }), document.removeEventListener("keyup", this.handleUndoRedoKeyUpBound, { capture: !0 }), document.removeEventListener("keydown", this.handleSelectAllEventBound, { capture: !0 }), document.removeEventListener("keydown", this.handleDeleteObjectsEventBound, { capture: !0 }), this.options.canvasDragging && (this.canvas.off("mouse:down", this.handleCanvasDragStartBound), this.canvas.off("mouse:move", this.handleCanvasDraggingBound), this.canvas.off("mouse:up", this.handleCanvasDragEndBound), document.removeEventListener("keydown", this.handleSpaceKeyDownBound, { capture: !0 }), document.removeEventListener("keyup", this.handleSpaceKeyUpBound, { capture: !0 })), this.options.mouseWheelZooming && this.canvas.off("mouse:wheel", this.handleMouseWheelZoomBound), this.options.bringToFrontOnSelection && (this.canvas.off("selection:created", this.handleBringToFrontBound), this.canvas.off("selection:updated", this.handleBringToFrontBound)), this.options.resetObjectFitByDoubleClick && this.canvas.off("mouse:dblclick", this.handleResetObjectFitBound), this.canvas.off("object:modified", this.handleObjectModifiedHistoryBound), this.canvas.off("object:rotating", this.handleObjectRotatingHistoryBound), this.canvas.off("object:added", this.handleObjectAddedHistoryBound), this.canvas.off("object:removed", this.handleObjectRemovedHistoryBound), this.canvas.off("object:added", this.handleOverlayUpdateBound), this.canvas.off("selection:created", this.handleOverlayUpdateBound), this.canvas.off("selection:created", this.handleLockedSelectionBound), this.canvas.off("selection:updated", this.handleLockedSelectionBound);
|
|
315
290
|
}
|
|
316
291
|
/**
|
|
317
292
|
* Дебаунс для снижения частоты вызова функции.
|
|
@@ -329,7 +304,7 @@ class P {
|
|
|
329
304
|
};
|
|
330
305
|
}
|
|
331
306
|
}
|
|
332
|
-
class
|
|
307
|
+
class Re {
|
|
333
308
|
/**
|
|
334
309
|
* @description Класс для динамической загрузки внешних модулей.
|
|
335
310
|
*/
|
|
@@ -347,7 +322,7 @@ class We {
|
|
|
347
322
|
return this.loaders[e] ? (this.cache.has(e) || this.cache.set(e, this.loaders[e]()), this.cache.get(e)) : Promise.reject(new Error('Unknown module "'.concat(e, '"')));
|
|
348
323
|
}
|
|
349
324
|
}
|
|
350
|
-
class
|
|
325
|
+
class We {
|
|
351
326
|
/**
|
|
352
327
|
* @param {string|URL} [scriptUrl] — URL скрипта воркера.
|
|
353
328
|
* По-умолчанию использует файл рядом с этим модулем
|
|
@@ -387,7 +362,7 @@ class Fe {
|
|
|
387
362
|
* @returns {Promise<any>}
|
|
388
363
|
*/
|
|
389
364
|
post(e, t) {
|
|
390
|
-
var a = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : [], r = "".concat(e, ":").concat(
|
|
365
|
+
var a = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : [], r = "".concat(e, ":").concat(S(8));
|
|
391
366
|
return new Promise((i, n) => {
|
|
392
367
|
this._callbacks.set(r, {
|
|
393
368
|
resolve: i,
|
|
@@ -406,50 +381,50 @@ class Fe {
|
|
|
406
381
|
this.worker.terminate();
|
|
407
382
|
}
|
|
408
383
|
}
|
|
409
|
-
var I = 12,
|
|
410
|
-
function
|
|
411
|
-
var i = I, n =
|
|
412
|
-
o.save(), o.translate(e, t), o.rotate(
|
|
384
|
+
var I = 12, _e = 2, te = 8, ae = 20, Fe = 100, re = 20, ie = 8, Ve = 100, ne = 32, se = 1, Ge = "#2B2D33", oe = "#3D8BF4", ce = "#FFFFFF";
|
|
385
|
+
function J(o, e, t, a, r) {
|
|
386
|
+
var i = I, n = _e;
|
|
387
|
+
o.save(), o.translate(e, t), o.rotate(_.degreesToRadians(r.angle)), o.fillStyle = ce, o.strokeStyle = oe, o.lineWidth = se, o.beginPath(), o.roundRect(-12 / 2, -12 / 2, i, i, n), o.fill(), o.stroke(), o.restore();
|
|
413
388
|
}
|
|
414
389
|
function je(o, e, t, a, r) {
|
|
415
|
-
var i = te, n = ae, s =
|
|
416
|
-
o.save(), o.translate(e, t), o.rotate(
|
|
390
|
+
var i = te, n = ae, s = Fe;
|
|
391
|
+
o.save(), o.translate(e, t), o.rotate(_.degreesToRadians(r.angle)), o.fillStyle = ce, o.strokeStyle = oe, o.lineWidth = se, o.beginPath(), o.roundRect(-8 / 2, -20 / 2, i, n, s), o.fill(), o.stroke(), o.restore();
|
|
417
392
|
}
|
|
418
393
|
function ye(o, e, t, a, r) {
|
|
419
|
-
var i = re, n = ie, s =
|
|
420
|
-
o.save(), o.translate(e, t), o.rotate(
|
|
394
|
+
var i = re, n = ie, s = Ve;
|
|
395
|
+
o.save(), o.translate(e, t), o.rotate(_.degreesToRadians(r.angle)), o.fillStyle = ce, o.strokeStyle = oe, o.lineWidth = se, o.beginPath(), o.roundRect(-20 / 2, -8 / 2, i, n, s), o.fill(), o.stroke(), o.restore();
|
|
421
396
|
}
|
|
422
|
-
var
|
|
423
|
-
|
|
424
|
-
function
|
|
397
|
+
var Xe = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTE4Ljc1IDQuMzc1djMuNzVhLjYyNS42MjUgMCAwIDEtLjYyNS42MjVoLTMuNzVhLjYyNS42MjUgMCAwIDEgMC0xLjI1aDIuMTRsLTIuMDc3LTEuOTAzLS4wMi0uMDE5YTYuMjUgNi4yNSAwIDEgMC0uMTMgOC45NjcuNjI2LjYyNiAwIDAgMSAuODYuOTA5QTcuNDU2IDcuNDU2IDAgMCAxIDEwIDE3LjVoLS4xMDNhNy41IDcuNSAwIDEgMSA1LjM5Ni0xMi44MTJMMTcuNSA2LjcwM1Y0LjM3NWEuNjI1LjYyNSAwIDAgMSAxLjI1IDBaIi8+PC9zdmc+", Ae = new Image();
|
|
398
|
+
Ae.src = Xe;
|
|
399
|
+
function Qe(o, e, t, a, r) {
|
|
425
400
|
var i = ne, n = i / 2;
|
|
426
|
-
o.save(), o.translate(e, t), o.rotate(
|
|
401
|
+
o.save(), o.translate(e, t), o.rotate(_.degreesToRadians(r.angle)), o.fillStyle = Ge, o.beginPath(), o.arc(0, 0, n, 0, 2 * Math.PI), o.fill(), o.drawImage(Ae, -16 / 2, -16 / 2, n, n), o.restore();
|
|
427
402
|
}
|
|
428
|
-
var
|
|
403
|
+
var Je = {
|
|
429
404
|
// Угловые точки
|
|
430
405
|
tl: {
|
|
431
|
-
render:
|
|
406
|
+
render: J,
|
|
432
407
|
sizeX: I,
|
|
433
408
|
sizeY: I,
|
|
434
409
|
offsetX: 0,
|
|
435
410
|
offsetY: 0
|
|
436
411
|
},
|
|
437
412
|
tr: {
|
|
438
|
-
render:
|
|
413
|
+
render: J,
|
|
439
414
|
sizeX: I,
|
|
440
415
|
sizeY: I,
|
|
441
416
|
offsetX: 0,
|
|
442
417
|
offsetY: 0
|
|
443
418
|
},
|
|
444
419
|
bl: {
|
|
445
|
-
render:
|
|
420
|
+
render: J,
|
|
446
421
|
sizeX: I,
|
|
447
422
|
sizeY: I,
|
|
448
423
|
offsetX: 0,
|
|
449
424
|
offsetY: 0
|
|
450
425
|
},
|
|
451
426
|
br: {
|
|
452
|
-
render:
|
|
427
|
+
render: J,
|
|
453
428
|
sizeX: I,
|
|
454
429
|
sizeY: I,
|
|
455
430
|
offsetX: 0,
|
|
@@ -487,17 +462,17 @@ var $e = {
|
|
|
487
462
|
},
|
|
488
463
|
// Специальный «rotate» контрол
|
|
489
464
|
mtr: {
|
|
490
|
-
render:
|
|
465
|
+
render: Qe,
|
|
491
466
|
sizeX: ne,
|
|
492
467
|
sizeY: ne,
|
|
493
468
|
offsetX: 0,
|
|
494
469
|
offsetY: -32
|
|
495
470
|
}
|
|
496
471
|
};
|
|
497
|
-
class
|
|
472
|
+
class Ke {
|
|
498
473
|
static apply() {
|
|
499
|
-
var e =
|
|
500
|
-
Object.entries(
|
|
474
|
+
var e = Ee.createObjectDefaultControls();
|
|
475
|
+
Object.entries(Je).forEach((t) => {
|
|
501
476
|
var [a, r] = t;
|
|
502
477
|
Object.assign(e[a], {
|
|
503
478
|
render: r.render,
|
|
@@ -509,10 +484,10 @@ class qe {
|
|
|
509
484
|
var u = n.target;
|
|
510
485
|
u.canvas.setCursor("grabbing");
|
|
511
486
|
});
|
|
512
|
-
}),
|
|
487
|
+
}), Oe.ownDefaults.controls = e;
|
|
513
488
|
}
|
|
514
489
|
}
|
|
515
|
-
var
|
|
490
|
+
var $e = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNi44NzUgMi41YS42MjUuNjI1IDAgMCAwLS42MjUuNjI0VjYuMjVIMy4xMjVhLjYyNS42MjUgMCAwIDAtLjYyNS42MjV2MTBjMCAuMzQ1LjI4LjYyNS42MjUuNjI1aDEwYy4zNDUgMCAuNjI1LS4yOC42MjUtLjYyNXYtMy4xMjZoMy4xMjVjLjM0NSAwIC42MjUtLjI4LjYyNS0uNjI1di0xMGEuNjI1LjYyNSAwIDAgMC0uNjI1LS42MjVoLTEwWm02Ljg3NSAxMGgyLjVWMy43NUg3LjV2Mi41aDUuNjI1Yy4zNDUgMCAuNjI1LjI4LjYyNS42MjV2NS42MjRabS0xMCAzLjc1VjcuNWg4Ljc1djguNzVIMy43NVoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==", qe = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMi41IDcuNWMwLS42OS41Ni0xLjI1IDEuMjUtMS4yNWgxMi41Yy42OSAwIDEuMjUuNTYgMS4yNSAxLjI1djguNzVjMCAuNjktLjU2IDEuMjUtMS4yNSAxLjI1SDMuNzVjLS42OSAwLTEuMjUtLjU2LTEuMjUtMS4yNVY3LjVabTEzLjc1IDBIMy43NXY4Ljc1aDEyLjVWNy41WiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTAgMS44NzVhMi4xODggMi4xODggMCAwIDAtMi4xODggMi4xODh2Mi44MTJhLjYyNS42MjUgMCAxIDEtMS4yNSAwVjQuMDYyYTMuNDM3IDMuNDM3IDAgMSAxIDYuODc1IDB2Mi44MTNhLjYyNS42MjUgMCAxIDEtMS4yNSAwVjQuMDYyQTIuMTg4IDIuMTg4IDAgMCAwIDEwIDEuODc2WiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTEwIDEyLjgxM2EuOTM3LjkzNyAwIDEgMCAwLTEuODc1LjkzNy45MzcgMCAwIDAgMCAxLjg3NFoiLz48L3N2Zz4=", et = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTE2LjI1IDYuMjVINy41VjQuMzc1YTIuNSAyLjUgMCAwIDEgMi41LTIuNWMxLjIgMCAyLjI4MS44NiAyLjUxMiAyYS42MjUuNjI1IDAgMCAwIDEuMjI2LS4yNWMtLjM1NC0xLjczOC0xLjkyNS0zLTMuNzM4LTNhMy43NTQgMy43NTQgMCAwIDAtMy43NSAzLjc1VjYuMjVoLTIuNUExLjI1IDEuMjUgMCAwIDAgMi41IDcuNXY4Ljc1YTEuMjUgMS4yNSAwIDAgMCAxLjI1IDEuMjVoMTIuNWExLjI1IDEuMjUgMCAwIDAgMS4yNS0xLjI1VjcuNWExLjI1IDEuMjUgMCAwIDAtMS4yNS0xLjI1Wm0wIDEwSDMuNzVWNy41aDEyLjV2OC43NVptLTUuMzEzLTQuMzc1YS45MzcuOTM3IDAgMSAxLTEuODc0IDAgLjkzNy45MzcgMCAwIDEgMS44NzQgMFoiLz48L3N2Zz4K", tt = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTIuNSA4LjEyNSAxMCAxMi41bDcuNS00LjM3NUwxMCAzLjc1IDIuNSA4LjEyNVoiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik05LjY4NSAzLjIxYS42MjUuNjI1IDAgMCAxIC42MyAwbDcuNSA0LjM3NWEuNjI1LjYyNSAwIDAgMSAwIDEuMDhsLTcuNSA0LjM3NWEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtNy41LTQuMzc1YS42MjUuNjI1IDAgMCAxIDAtMS4wOGw3LjUtNC4zNzVaTTMuNzQgOC4xMjUgMTAgMTEuNzc2bDYuMjYtMy42NTFMMTAgNC40NzQgMy43NCA4LjEyNVoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTUuNCA5LjQ2YS42MjUuNjI1IDAgMCAxIC42MyAwTDEwIDExLjc3NmwzLjk3LTIuMzE2YS42MjUuNjI1IDAgMCAxIC42MyAwbDMuMjE1IDEuODc1YS42MjUuNjI1IDAgMCAxIDAgMS4wOGwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEgMC0xLjA4TDUuNCA5LjQ2Wm0tMS42NiAyLjQxNUwxMCAxNS41MjZsNi4yNi0zLjY1MS0xLjk3NC0xLjE1MS0zLjk3MSAyLjMxNmEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtMy45Ny0yLjMxNi0xLjk3NSAxLjE1MVoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==", at = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNOS42ODUgMy4yMWEuNjI1LjYyNSAwIDAgMSAuNjMgMGw3LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEgMCAxLjA4bC03LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEtLjYzIDBsLTcuNS00LjM3NWEuNjI1LjYyNSAwIDAgMSAwLTEuMDhsNy41LTQuMzc1Wk0zLjc0IDguMTI1IDEwIDExLjc3Nmw2LjI2LTMuNjUxTDEwIDQuNDc0IDMuNzQgOC4xMjVaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01LjcxNCAxMCAxMCAxMi41bDQuMjg2LTIuNSAzLjIxNCAxLjg3NUwxMCAxNi4yNWwtNy41LTQuMzc1TDUuNzE0IDEwWiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNS40IDkuNDZhLjYyNS42MjUgMCAwIDEgLjYzIDBMMTAgMTEuNzc2bDMuOTctMi4zMTZhLjYyNS42MjUgMCAwIDEgLjYzIDBsMy4yMTUgMS44NzVhLjYyNS42MjUgMCAwIDEgMCAxLjA4bC03LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEtLjYzIDBsLTcuNS00LjM3NWEuNjI1LjYyNSAwIDAgMSAwLTEuMDhMNS40IDkuNDZabS0xLjY2IDIuNDE1TDEwIDE1LjUyNmw2LjI2LTMuNjUxLTEuOTc0LTEuMTUxLTMuOTcxIDIuMzE2YS42MjUuNjI1IDAgMCAxLS42MyAwbC0zLjk3LTIuMzE2LTEuOTc1IDEuMTUxWiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+", rt = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTIuNSA2LjI1IDcuNSA0LjM3NSA3LjUtNC4zNzVMMTAgMS44NzUgMi41IDYuMjVaIi8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNOS42ODUgMS4zMzVhLjYyNS42MjUgMCAwIDEgLjYzIDBsNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxIDAgMS4wOGwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEgMC0xLjA4bDcuNS00LjM3NVpNMy43NCA2LjI1IDEwIDkuOTAxbDYuMjYtMy42NTFMMTAgMi41OTkgMy43NCA2LjI1WiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNS40IDExLjMzNWEuNjI1LjYyNSAwIDAgMSAuNjMgMEwxMCAxMy42NTFsMy45Ny0yLjMxNmEuNjI1LjYyNSAwIDAgMSAuNjMgMGwzLjIxNSAxLjg3NWEuNjI1LjYyNSAwIDAgMSAwIDEuMDhsLTcuNSA0LjM3NWEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtNy41LTQuMzc1YS42MjUuNjI1IDAgMCAxIDAtMS4wOEw1LjQgMTEuMzM1Wk0zLjc0IDEzLjc1IDEwIDE3LjQwMWw2LjI2LTMuNjUxLTEuOTc0LTEuMTUxLTMuOTcxIDIuMzE2YS42MjUuNjI1IDAgMCAxLS42MyAwbC0zLjk3LTIuMzE2TDMuNzQgMTMuNzVaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01LjQgNy41ODVhLjYyNS42MjUgMCAwIDEgLjYzIDBMMTAgOS45MDFsMy45Ny0yLjMxNmEuNjI1LjYyNSAwIDAgMSAuNjMgMGwzLjIxNSAxLjg3NWEuNjI1LjYyNSAwIDAgMSAwIDEuMDhsLTcuNSA0LjM3NWEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtNy41LTQuMzc1YS42MjUuNjI1IDAgMCAxIDAtMS4wOEw1LjQgNy41ODVaTTMuNzQgMTAgMTAgMTMuNjUxIDE2LjI2IDEwbC0xLjk3NC0xLjE1MS0zLjk3MSAyLjMxNmEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtMy45Ny0yLjMxNkwzLjc0IDEwWiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+", it = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMS45NiAxMy40MzVhLjYyNS42MjUgMCAwIDEgLjg1NS0uMjI1TDEwIDE3LjQwMWw3LjE4NS00LjE5YS42MjUuNjI1IDAgMCAxIC42MyAxLjA3OWwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEtLjIyNS0uODU1Wk05LjY4NSAxLjMzNWEuNjI1LjYyNSAwIDAgMSAuNjMgMGw3LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEgMCAxLjA4bC03LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEtLjYzIDBsLTcuNS00LjM3NWEuNjI1LjYyNSAwIDAgMSAwLTEuMDhsNy41LTQuMzc1Wk0zLjc0IDYuMjUgMTAgOS45MDFsNi4yNi0zLjY1MUwxMCAyLjU5OSAzLjc0IDYuMjVaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Im01LjcxNCAxMS44NzUgNC4yODYgMi41IDQuMjg2LTIuNUwxNy41IDEzLjc1IDEwIDE4LjEyNSAyLjUgMTMuNzVsMy4yMTQtMS44NzVaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01LjQgMTEuMzM1YS42MjUuNjI1IDAgMCAxIC42MyAwTDEwIDEzLjY1MWwzLjk3LTIuMzE2YS42MjUuNjI1IDAgMCAxIC42MyAwbDMuMjE1IDEuODc1YS42MjUuNjI1IDAgMCAxIDAgMS4wOGwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEgMC0xLjA4TDUuNCAxMS4zMzVaTTMuNzQgMTMuNzUgMTAgMTcuNDAxbDYuMjYtMy42NTEtMS45NzQtMS4xNTEtMy45NzEgMi4zMTZhLjYyNS42MjUgMCAwIDEtLjYzIDBsLTMuOTctMi4zMTZMMy43NCAxMy43NVoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTUuNCA3LjU4NWEuNjI1LjYyNSAwIDAgMSAuNjMgMEwxMCA5LjkwMWwzLjk3LTIuMzE2YS42MjUuNjI1IDAgMCAxIC42MyAwbDMuMjE1IDEuODc1YS42MjUuNjI1IDAgMCAxIDAgMS4wOGwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEgMC0xLjA4TDUuNCA3LjU4NVpNMy43NCAxMCAxMCAxMy42NTEgMTYuMjYgMTBsLTEuOTc0LTEuMTUxLTMuOTcxIDIuMzE2YS42MjUuNjI1IDAgMCAxLS42MyAwbC0zLjk3LTIuMzE2TDMuNzQgMTBaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=", nt = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI0VDNEU0MCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNOC4xMjUgMS4yNUExLjg3NSAxLjg3NSAwIDAgMCA2LjI1IDMuMTI1di42MjVIMy4xMjVhLjYyNS42MjUgMCAwIDAgMCAxLjI1aC42MjV2MTEuMjVBMS4yNSAxLjI1IDAgMCAwIDUgMTcuNWgxMGExLjI1IDEuMjUgMCAwIDAgMS4yNS0xLjI1VjVoLjYyNWEuNjI1LjYyNSAwIDAgMCAwLTEuMjVIMTMuNzV2LS42MjVhMS44NzUgMS44NzUgMCAwIDAtMS44NzUtMS44NzVoLTMuNzVabTQuMzc1IDIuNXYtLjYyNWEuNjI1LjYyNSAwIDAgMC0uNjI1LS42MjVoLTMuNzVhLjYyNS42MjUgMCAwIDAtLjYyNS42MjV2LjYyNWg1Wk01IDE2LjI1VjVoMTB2MTEuMjVINVpNOC4xMjUgNy41Yy4zNDUgMCAuNjI1LjI4LjYyNS42MjV2NWEuNjI1LjYyNSAwIDEgMS0xLjI1IDB2LTVjMC0uMzQ1LjI4LS42MjUuNjI1LS42MjVabTQuMzc1IDUuNjI1di01YS42MjUuNjI1IDAgMCAwLTEuMjUgMHY1YS42MjUuNjI1IDAgMSAwIDEuMjUgMFoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==";
|
|
516
491
|
function pe(o, e, t, a, r, i, n) {
|
|
517
492
|
try {
|
|
518
493
|
var s = o[i](n), c = s.value;
|
|
@@ -521,7 +496,7 @@ function pe(o, e, t, a, r, i, n) {
|
|
|
521
496
|
}
|
|
522
497
|
s.done ? e(c) : Promise.resolve(c).then(a, r);
|
|
523
498
|
}
|
|
524
|
-
function
|
|
499
|
+
function st(o) {
|
|
525
500
|
return function() {
|
|
526
501
|
var e = this, t = arguments;
|
|
527
502
|
return new Promise(function(a, r) {
|
|
@@ -536,7 +511,7 @@ function ct(o) {
|
|
|
536
511
|
});
|
|
537
512
|
};
|
|
538
513
|
}
|
|
539
|
-
const
|
|
514
|
+
const P = {
|
|
540
515
|
style: {
|
|
541
516
|
position: "absolute",
|
|
542
517
|
display: "none",
|
|
@@ -595,18 +570,18 @@ const H = {
|
|
|
595
570
|
}],
|
|
596
571
|
offsetTop: 50,
|
|
597
572
|
icons: {
|
|
598
|
-
copyPaste:
|
|
599
|
-
delete:
|
|
600
|
-
lock:
|
|
601
|
-
unlock:
|
|
602
|
-
bringToFront:
|
|
603
|
-
sendToBack:
|
|
604
|
-
bringForward:
|
|
605
|
-
sendBackwards:
|
|
573
|
+
copyPaste: $e,
|
|
574
|
+
delete: nt,
|
|
575
|
+
lock: qe,
|
|
576
|
+
unlock: et,
|
|
577
|
+
bringToFront: rt,
|
|
578
|
+
sendToBack: it,
|
|
579
|
+
bringForward: tt,
|
|
580
|
+
sendBackwards: at
|
|
606
581
|
},
|
|
607
582
|
handlers: {
|
|
608
583
|
copyPaste: function() {
|
|
609
|
-
var o =
|
|
584
|
+
var o = st(function* (t) {
|
|
610
585
|
yield t.clipboardManager.copy(), yield t.clipboardManager.paste();
|
|
611
586
|
});
|
|
612
587
|
function e(t) {
|
|
@@ -651,21 +626,21 @@ function j(o) {
|
|
|
651
626
|
for (var e = 1; e < arguments.length; e++) {
|
|
652
627
|
var t = arguments[e] != null ? arguments[e] : {};
|
|
653
628
|
e % 2 ? be(Object(t), !0).forEach(function(a) {
|
|
654
|
-
|
|
629
|
+
ot(o, a, t[a]);
|
|
655
630
|
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(o, Object.getOwnPropertyDescriptors(t)) : be(Object(t)).forEach(function(a) {
|
|
656
631
|
Object.defineProperty(o, a, Object.getOwnPropertyDescriptor(t, a));
|
|
657
632
|
});
|
|
658
633
|
}
|
|
659
634
|
return o;
|
|
660
635
|
}
|
|
661
|
-
function
|
|
662
|
-
return (e =
|
|
636
|
+
function ot(o, e, t) {
|
|
637
|
+
return (e = ct(e)) in o ? Object.defineProperty(o, e, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : o[e] = t, o;
|
|
663
638
|
}
|
|
664
|
-
function
|
|
665
|
-
var e =
|
|
639
|
+
function ct(o) {
|
|
640
|
+
var e = ut(o, "string");
|
|
666
641
|
return typeof e == "symbol" ? e : e + "";
|
|
667
642
|
}
|
|
668
|
-
function
|
|
643
|
+
function ut(o, e) {
|
|
669
644
|
if (typeof o != "object" || !o) return o;
|
|
670
645
|
var t = o[Symbol.toPrimitive];
|
|
671
646
|
if (t !== void 0) {
|
|
@@ -675,7 +650,7 @@ function lt(o, e) {
|
|
|
675
650
|
}
|
|
676
651
|
return (e === "string" ? String : Number)(o);
|
|
677
652
|
}
|
|
678
|
-
class
|
|
653
|
+
class dt {
|
|
679
654
|
/**
|
|
680
655
|
* @param {object} options
|
|
681
656
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -687,11 +662,11 @@ class ht {
|
|
|
687
662
|
if (this.options = t.options, !!this.options.showToolbar) {
|
|
688
663
|
this.editor = t, this.canvas = t.canvas;
|
|
689
664
|
var a = this.options.toolbar || {};
|
|
690
|
-
this.config = j(j(j({},
|
|
691
|
-
style: j(j({},
|
|
692
|
-
btnStyle: j(j({},
|
|
693
|
-
icons: j(j({},
|
|
694
|
-
handlers: j(j({},
|
|
665
|
+
this.config = j(j(j({}, P), a), {}, {
|
|
666
|
+
style: j(j({}, P.style), a.style || {}),
|
|
667
|
+
btnStyle: j(j({}, P.btnStyle), a.btnStyle || {}),
|
|
668
|
+
icons: j(j({}, P.icons), a.icons || {}),
|
|
669
|
+
handlers: j(j({}, P.handlers), a.handlers || {})
|
|
695
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 = () => {
|
|
696
671
|
this.el.style.display = "none";
|
|
697
672
|
}, this._createDOM(), this._bindEvents();
|
|
@@ -730,12 +705,12 @@ class ht {
|
|
|
730
705
|
} = r, {
|
|
731
706
|
icons: c,
|
|
732
707
|
btnStyle: u,
|
|
733
|
-
handlers:
|
|
734
|
-
} = t.config,
|
|
735
|
-
|
|
708
|
+
handlers: d
|
|
709
|
+
} = t.config, l = document.createElement("button");
|
|
710
|
+
l.innerHTML = c[s] ? '<img src="'.concat(c[s], '" title="').concat(n, '" />') : n, Object.assign(l.style, u), l.onclick = () => {
|
|
736
711
|
var h;
|
|
737
|
-
return (h =
|
|
738
|
-
}, t.el.appendChild(
|
|
712
|
+
return (h = d[s]) === null || h === void 0 ? void 0 : h.call(d, t.editor);
|
|
713
|
+
}, t.el.appendChild(l);
|
|
739
714
|
};
|
|
740
715
|
for (var r of e)
|
|
741
716
|
a();
|
|
@@ -811,8 +786,8 @@ class ht {
|
|
|
811
786
|
x: c
|
|
812
787
|
} = e.getCenterPoint(), {
|
|
813
788
|
top: u,
|
|
814
|
-
height:
|
|
815
|
-
} = e.getBoundingRect(!1, !0),
|
|
789
|
+
height: d
|
|
790
|
+
} = e.getBoundingRect(!1, !0), l = c * i + n, h = l - t.offsetWidth / 2, g = (u + d) * i + s + a.offsetTop;
|
|
816
791
|
Object.assign(t.style, {
|
|
817
792
|
left: "".concat(h, "px"),
|
|
818
793
|
top: "".concat(g, "px"),
|
|
@@ -850,7 +825,7 @@ function ee(o) {
|
|
|
850
825
|
});
|
|
851
826
|
};
|
|
852
827
|
}
|
|
853
|
-
class
|
|
828
|
+
class lt {
|
|
854
829
|
/**
|
|
855
830
|
* @param {object} options
|
|
856
831
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -865,8 +840,11 @@ class gt {
|
|
|
865
840
|
get skipHistory() {
|
|
866
841
|
return this._historySuspendCount > 0;
|
|
867
842
|
}
|
|
843
|
+
get lastPatch() {
|
|
844
|
+
return this.patches[this.currentIndex - 1] || null;
|
|
845
|
+
}
|
|
868
846
|
_createDiffPatcher() {
|
|
869
|
-
this.diffPatcher =
|
|
847
|
+
this.diffPatcher = He({
|
|
870
848
|
objectHash(e) {
|
|
871
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("-");
|
|
872
850
|
},
|
|
@@ -910,7 +888,7 @@ class gt {
|
|
|
910
888
|
currentIndex: t,
|
|
911
889
|
patches: a
|
|
912
890
|
} = this, r = JSON.parse(JSON.stringify(e)), i = 0; i < t; i += 1)
|
|
913
|
-
r = this.diffPatcher.patch(r, a[i]);
|
|
891
|
+
r = this.diffPatcher.patch(r, a[i].diff);
|
|
914
892
|
return console.log("getFullState state", r), r;
|
|
915
893
|
}
|
|
916
894
|
/**
|
|
@@ -929,7 +907,10 @@ class gt {
|
|
|
929
907
|
console.log("Нет изменений для сохранения.");
|
|
930
908
|
return;
|
|
931
909
|
}
|
|
932
|
-
console.log("baseState", this.baseState), this.currentIndex < this.patches.length && this.patches.splice(this.currentIndex), console.log("diff", a), this.totalChangesCount += 1, this.patches.push(
|
|
910
|
+
console.log("baseState", this.baseState), this.currentIndex < this.patches.length && this.patches.splice(this.currentIndex), console.log("diff", a), this.totalChangesCount += 1, this.patches.push({
|
|
911
|
+
id: S(),
|
|
912
|
+
diff: a
|
|
913
|
+
}), this.currentIndex += 1, this.patches.length > this.maxHistoryLength && (this.baseState = this.diffPatcher.patch(this.baseState, this.patches[0].diff), this.patches.shift(), this.currentIndex -= 1, this.baseStateChangesCount += 1), console.log("Состояние сохранено. Текущий индекс истории:", this.currentIndex);
|
|
933
914
|
}
|
|
934
915
|
}
|
|
935
916
|
/**
|
|
@@ -941,11 +922,27 @@ class gt {
|
|
|
941
922
|
var t = this;
|
|
942
923
|
return ee(function* () {
|
|
943
924
|
if (e) {
|
|
944
|
-
console.log("loadStateFromFullState fullState", e)
|
|
945
|
-
var
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
925
|
+
console.log("loadStateFromFullState fullState", e);
|
|
926
|
+
var {
|
|
927
|
+
canvas: a,
|
|
928
|
+
canvasManager: r,
|
|
929
|
+
interactionBlocker: i
|
|
930
|
+
} = t.editor, {
|
|
931
|
+
width: n,
|
|
932
|
+
height: s
|
|
933
|
+
} = a;
|
|
934
|
+
yield a.loadFromJSON(e);
|
|
935
|
+
var c = a.getObjects().find((d) => d.id === "montage-area");
|
|
936
|
+
c && (t.editor.montageArea = c, (n !== e.width || s !== e.height) && r.updateCanvasAndFitObjects());
|
|
937
|
+
var u = a.getObjects().find((d) => d.id === "overlay-mask");
|
|
938
|
+
u && (i.overlayMask = u, i.overlayMask.visible = !1), a.renderAll(), a.fire("editor:history-state-loaded", {
|
|
939
|
+
fullState: e,
|
|
940
|
+
currentIndex: t.currentIndex,
|
|
941
|
+
totalChangesCount: t.totalChangesCount,
|
|
942
|
+
baseStateChangesCount: t.baseStateChangesCount,
|
|
943
|
+
patchesCount: t.patches.length,
|
|
944
|
+
patches: t.patches
|
|
945
|
+
});
|
|
949
946
|
}
|
|
950
947
|
})();
|
|
951
948
|
}
|
|
@@ -1004,7 +1001,7 @@ class gt {
|
|
|
1004
1001
|
})();
|
|
1005
1002
|
}
|
|
1006
1003
|
}
|
|
1007
|
-
const
|
|
1004
|
+
const ht = 0.1, gt = 2, vt = 0.1, mt = 90, k = 16, x = 16, E = 4096, O = 4096;
|
|
1008
1005
|
function Se(o, e, t, a, r, i, n) {
|
|
1009
1006
|
try {
|
|
1010
1007
|
var s = o[i](n), c = s.value;
|
|
@@ -1013,7 +1010,7 @@ function Se(o, e, t, a, r, i, n) {
|
|
|
1013
1010
|
}
|
|
1014
1011
|
s.done ? e(c) : Promise.resolve(c).then(a, r);
|
|
1015
1012
|
}
|
|
1016
|
-
function
|
|
1013
|
+
function T(o) {
|
|
1017
1014
|
return function() {
|
|
1018
1015
|
var e = this, t = arguments;
|
|
1019
1016
|
return new Promise(function(a, r) {
|
|
@@ -1028,7 +1025,7 @@ function O(o) {
|
|
|
1028
1025
|
});
|
|
1029
1026
|
};
|
|
1030
1027
|
}
|
|
1031
|
-
class
|
|
1028
|
+
class w {
|
|
1032
1029
|
/**
|
|
1033
1030
|
* @param {object} options
|
|
1034
1031
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -1053,7 +1050,7 @@ class C {
|
|
|
1053
1050
|
*/
|
|
1054
1051
|
importImage(e) {
|
|
1055
1052
|
var t = this;
|
|
1056
|
-
return
|
|
1053
|
+
return T(function* () {
|
|
1057
1054
|
var {
|
|
1058
1055
|
source: a,
|
|
1059
1056
|
scale: r = "image-".concat(t.options.scaleType),
|
|
@@ -1065,24 +1062,24 @@ class C {
|
|
|
1065
1062
|
montageArea: s,
|
|
1066
1063
|
transformManager: c,
|
|
1067
1064
|
historyManager: u,
|
|
1068
|
-
errorManager:
|
|
1069
|
-
} = t.editor,
|
|
1065
|
+
errorManager: d
|
|
1066
|
+
} = t.editor, l = yield t.getContentType(a), h = w.getFormatFromContentType(l), {
|
|
1070
1067
|
acceptContentTypes: g,
|
|
1071
|
-
acceptFormats:
|
|
1068
|
+
acceptFormats: M
|
|
1072
1069
|
} = t;
|
|
1073
|
-
if (!t.isAllowedContentType(
|
|
1074
|
-
var
|
|
1075
|
-
return
|
|
1070
|
+
if (!t.isAllowedContentType(l)) {
|
|
1071
|
+
var m = "Неверный contentType для изображения: ".concat(l, ". Ожидается один из: ").concat(t.acceptContentTypes.join(", "), ".");
|
|
1072
|
+
return d.emitError({
|
|
1076
1073
|
origin: "ImageManager",
|
|
1077
1074
|
method: "importImage",
|
|
1078
1075
|
code: "INVALID_CONTENT_TYPE",
|
|
1079
|
-
message:
|
|
1076
|
+
message: m,
|
|
1080
1077
|
data: {
|
|
1081
1078
|
source: a,
|
|
1082
1079
|
format: h,
|
|
1083
|
-
contentType:
|
|
1080
|
+
contentType: l,
|
|
1084
1081
|
acceptContentTypes: g,
|
|
1085
|
-
acceptFormats:
|
|
1082
|
+
acceptFormats: M
|
|
1086
1083
|
}
|
|
1087
1084
|
}), null;
|
|
1088
1085
|
}
|
|
@@ -1092,15 +1089,15 @@ class C {
|
|
|
1092
1089
|
if (a instanceof File)
|
|
1093
1090
|
f = URL.createObjectURL(a);
|
|
1094
1091
|
else if (typeof a == "string") {
|
|
1095
|
-
var
|
|
1092
|
+
var A = yield fetch(a, {
|
|
1096
1093
|
mode: "cors"
|
|
1097
|
-
}),
|
|
1098
|
-
type:
|
|
1094
|
+
}), D = yield A.blob({
|
|
1095
|
+
type: l,
|
|
1099
1096
|
quality: 1
|
|
1100
1097
|
});
|
|
1101
|
-
f = URL.createObjectURL(
|
|
1098
|
+
f = URL.createObjectURL(D);
|
|
1102
1099
|
} else
|
|
1103
|
-
return
|
|
1100
|
+
return d.emitError({
|
|
1104
1101
|
origin: "ImageManager",
|
|
1105
1102
|
method: "importImage",
|
|
1106
1103
|
code: "INVALID_SOURCE_TYPE",
|
|
@@ -1108,14 +1105,14 @@ class C {
|
|
|
1108
1105
|
data: {
|
|
1109
1106
|
source: a,
|
|
1110
1107
|
format: h,
|
|
1111
|
-
contentType:
|
|
1108
|
+
contentType: l,
|
|
1112
1109
|
acceptContentTypes: g,
|
|
1113
|
-
acceptFormats:
|
|
1110
|
+
acceptFormats: M
|
|
1114
1111
|
}
|
|
1115
1112
|
}), null;
|
|
1116
1113
|
if (t._createdBlobUrls.push(f), h === "svg") {
|
|
1117
|
-
var
|
|
1118
|
-
v =
|
|
1114
|
+
var N = yield Te(f);
|
|
1115
|
+
v = _.groupSVGElements(N.objects, N.options);
|
|
1119
1116
|
} else
|
|
1120
1117
|
v = yield q.fromURL(f, {
|
|
1121
1118
|
crossOrigin: "anonymous"
|
|
@@ -1124,25 +1121,25 @@ class C {
|
|
|
1124
1121
|
width: L,
|
|
1125
1122
|
height: y
|
|
1126
1123
|
} = v;
|
|
1127
|
-
if (y >
|
|
1124
|
+
if (y > O || L > E) {
|
|
1128
1125
|
var p = yield t.resizeImageToBoundaries(v._element.src, "max"), B = URL.createObjectURL(p);
|
|
1129
1126
|
t._createdBlobUrls.push(B), v = yield q.fromURL(B, {
|
|
1130
1127
|
crossOrigin: "anonymous"
|
|
1131
1128
|
});
|
|
1132
1129
|
} else if (y < x || L < k) {
|
|
1133
|
-
var
|
|
1130
|
+
var F = yield t.resizeImageToBoundaries(v._element.src, "min"), Z = URL.createObjectURL(F);
|
|
1134
1131
|
t._createdBlobUrls.push(Z), v = yield q.fromURL(Z, {
|
|
1135
1132
|
crossOrigin: "anonymous"
|
|
1136
1133
|
});
|
|
1137
1134
|
}
|
|
1138
|
-
if (v.set("id", "".concat(v.type, "-").concat(
|
|
1135
|
+
if (v.set("id", "".concat(v.type, "-").concat(S())), v.set("format", h), r === "scale-montage")
|
|
1139
1136
|
t.editor.canvasManager.scaleMontageAreaToImage({
|
|
1140
1137
|
object: v,
|
|
1141
1138
|
withoutSave: !0
|
|
1142
1139
|
});
|
|
1143
1140
|
else {
|
|
1144
1141
|
var {
|
|
1145
|
-
width:
|
|
1142
|
+
width: V,
|
|
1146
1143
|
height: z
|
|
1147
1144
|
} = s, U = t.calculateScaleFactor({
|
|
1148
1145
|
imageObject: v,
|
|
@@ -1152,24 +1149,24 @@ class C {
|
|
|
1152
1149
|
object: v,
|
|
1153
1150
|
type: "contain",
|
|
1154
1151
|
withoutSave: !0
|
|
1155
|
-
}) : r === "image-cover" && (L >
|
|
1152
|
+
}) : r === "image-cover" && (L > V || y > z) && c.fitObject({
|
|
1156
1153
|
object: v,
|
|
1157
1154
|
type: "cover",
|
|
1158
1155
|
withoutSave: !0
|
|
1159
1156
|
});
|
|
1160
1157
|
}
|
|
1161
1158
|
n.add(v), n.centerObject(v), n.setActiveObject(v), n.renderAll(), u.resumeHistory(), i || u.saveState();
|
|
1162
|
-
var
|
|
1159
|
+
var G = {
|
|
1163
1160
|
image: v,
|
|
1164
1161
|
format: h,
|
|
1165
|
-
contentType:
|
|
1162
|
+
contentType: l,
|
|
1166
1163
|
scale: r,
|
|
1167
1164
|
withoutSave: i,
|
|
1168
1165
|
source: a
|
|
1169
1166
|
};
|
|
1170
|
-
return n.fire("editor:image-imported",
|
|
1167
|
+
return n.fire("editor:image-imported", G), G;
|
|
1171
1168
|
} catch (Y) {
|
|
1172
|
-
return
|
|
1169
|
+
return d.emitError({
|
|
1173
1170
|
origin: "ImageManager",
|
|
1174
1171
|
method: "importImage",
|
|
1175
1172
|
code: "IMPORT_FAILED",
|
|
@@ -1177,7 +1174,7 @@ class C {
|
|
|
1177
1174
|
data: {
|
|
1178
1175
|
source: a,
|
|
1179
1176
|
format: h,
|
|
1180
|
-
contentType:
|
|
1177
|
+
contentType: l,
|
|
1181
1178
|
scale: r,
|
|
1182
1179
|
withoutSave: i
|
|
1183
1180
|
}
|
|
@@ -1195,14 +1192,14 @@ class C {
|
|
|
1195
1192
|
*/
|
|
1196
1193
|
resizeImageToBoundaries(e) {
|
|
1197
1194
|
var t = arguments, a = this;
|
|
1198
|
-
return
|
|
1199
|
-
var r = t.length > 1 && t[1] !== void 0 ? t[1] : "max", i = "Размер изображения больше максимального размера канваса, поэтому оно будет уменьшено до максимальных размеров c сохранением пропорций: ".concat(E, "x").concat(
|
|
1195
|
+
return T(function* () {
|
|
1196
|
+
var r = t.length > 1 && t[1] !== void 0 ? t[1] : "max", i = "Размер изображения больше максимального размера канваса, поэтому оно будет уменьшено до максимальных размеров c сохранением пропорций: ".concat(E, "x").concat(O);
|
|
1200
1197
|
r === "min" && (i = "Размер изображения меньше минимального размера канваса, поэтому оно будет увеличено до минимальных размеров c сохранением пропорций: ".concat(k, "x").concat(x));
|
|
1201
1198
|
var n = {
|
|
1202
1199
|
dataURL: e,
|
|
1203
1200
|
sizeType: r,
|
|
1204
1201
|
maxWidth: E,
|
|
1205
|
-
maxHeight:
|
|
1202
|
+
maxHeight: O,
|
|
1206
1203
|
minWidth: k,
|
|
1207
1204
|
minHeight: x
|
|
1208
1205
|
};
|
|
@@ -1228,7 +1225,7 @@ class C {
|
|
|
1228
1225
|
*/
|
|
1229
1226
|
exportCanvasAsImageFile() {
|
|
1230
1227
|
var e = arguments, t = this;
|
|
1231
|
-
return
|
|
1228
|
+
return T(function* () {
|
|
1232
1229
|
var {
|
|
1233
1230
|
fileName: a = "image.png",
|
|
1234
1231
|
contentType: r = "image/png",
|
|
@@ -1240,27 +1237,27 @@ class C {
|
|
|
1240
1237
|
workerManager: u
|
|
1241
1238
|
} = t.editor;
|
|
1242
1239
|
try {
|
|
1243
|
-
var
|
|
1240
|
+
var d = r === "application/pdf", l = d ? "image/jpg" : r, h = w.getFormatFromContentType(l);
|
|
1244
1241
|
c.setCoords();
|
|
1245
1242
|
var {
|
|
1246
1243
|
left: g,
|
|
1247
|
-
top:
|
|
1248
|
-
width:
|
|
1244
|
+
top: M,
|
|
1245
|
+
width: m,
|
|
1249
1246
|
height: f
|
|
1250
1247
|
} = c.getBoundingRect(), v = yield s.clone(["id", "format", "locked"]);
|
|
1251
|
-
["image/jpg", "image/jpeg"].includes(
|
|
1252
|
-
var
|
|
1253
|
-
|
|
1254
|
-
width:
|
|
1248
|
+
["image/jpg", "image/jpeg"].includes(l) && (v.backgroundColor = "#ffffff");
|
|
1249
|
+
var A = v.getObjects().find((b) => b.id === c.id);
|
|
1250
|
+
A.visible = !1, v.viewportTransform = [1, 0, 0, 1, -g, -M], v.setDimensions({
|
|
1251
|
+
width: m,
|
|
1255
1252
|
height: f
|
|
1256
1253
|
}, {
|
|
1257
1254
|
backstoreOnly: !0
|
|
1258
1255
|
}), v.renderAll();
|
|
1259
|
-
var
|
|
1260
|
-
if (h === "svg" &&
|
|
1261
|
-
var
|
|
1256
|
+
var D = v.getObjects().filter((b) => b.format).every((b) => b.format === "svg");
|
|
1257
|
+
if (h === "svg" && D) {
|
|
1258
|
+
var N = v.toSVG();
|
|
1262
1259
|
v.dispose();
|
|
1263
|
-
var L =
|
|
1260
|
+
var L = w._exportSVGStringAsFile(N, {
|
|
1264
1261
|
exportAsBase64: i,
|
|
1265
1262
|
exportAsBlob: n,
|
|
1266
1263
|
fileName: a
|
|
@@ -1279,35 +1276,35 @@ class C {
|
|
|
1279
1276
|
var B = {
|
|
1280
1277
|
image: p,
|
|
1281
1278
|
format: h,
|
|
1282
|
-
contentType:
|
|
1279
|
+
contentType: l,
|
|
1283
1280
|
fileName: a
|
|
1284
1281
|
};
|
|
1285
1282
|
return s.fire("editor:canvas-exported", B), B;
|
|
1286
1283
|
}
|
|
1287
|
-
var
|
|
1284
|
+
var F = yield createImageBitmap(p), Z = yield u.post("toDataURL", {
|
|
1288
1285
|
format: h,
|
|
1289
1286
|
quality: 1,
|
|
1290
|
-
bitmap:
|
|
1291
|
-
}, [
|
|
1292
|
-
if (
|
|
1293
|
-
var
|
|
1287
|
+
bitmap: F
|
|
1288
|
+
}, [F]);
|
|
1289
|
+
if (d) {
|
|
1290
|
+
var V = 0.264583, z = m * V, U = f * V, G = (yield t.editor.moduleLoader.loadModule("jspdf")).jsPDF, Y = new G({
|
|
1294
1291
|
orientation: z > U ? "landscape" : "portrait",
|
|
1295
1292
|
unit: "mm",
|
|
1296
1293
|
format: [z, U]
|
|
1297
1294
|
});
|
|
1298
1295
|
if (Y.addImage(Z, "JPG", 0, 0, z, U), i) {
|
|
1299
|
-
var
|
|
1300
|
-
image:
|
|
1296
|
+
var Ce = Y.output("datauristring"), de = {
|
|
1297
|
+
image: Ce,
|
|
1301
1298
|
format: "pdf",
|
|
1302
1299
|
contentType: "application/pdf",
|
|
1303
1300
|
fileName: a
|
|
1304
1301
|
};
|
|
1305
1302
|
return s.fire("editor:canvas-exported", de), de;
|
|
1306
1303
|
}
|
|
1307
|
-
var we = Y.output("blob"),
|
|
1304
|
+
var we = Y.output("blob"), De = new File([we], a, {
|
|
1308
1305
|
type: "application/pdf"
|
|
1309
1306
|
}), le = {
|
|
1310
|
-
image:
|
|
1307
|
+
image: De,
|
|
1311
1308
|
format: "pdf",
|
|
1312
1309
|
contentType: "application/pdf",
|
|
1313
1310
|
fileName: a
|
|
@@ -1318,17 +1315,17 @@ class C {
|
|
|
1318
1315
|
var he = {
|
|
1319
1316
|
image: Z,
|
|
1320
1317
|
format: h,
|
|
1321
|
-
contentType:
|
|
1318
|
+
contentType: l,
|
|
1322
1319
|
fileName: a
|
|
1323
1320
|
};
|
|
1324
1321
|
return s.fire("editor:canvas-exported", he), he;
|
|
1325
1322
|
}
|
|
1326
|
-
var ge = h === "svg" && !
|
|
1327
|
-
type:
|
|
1323
|
+
var ge = h === "svg" && !D ? a.replace(/\.[^/.]+$/, ".png") : a, Ne = new File([p], ge, {
|
|
1324
|
+
type: l
|
|
1328
1325
|
}), ve = {
|
|
1329
|
-
image:
|
|
1326
|
+
image: Ne,
|
|
1330
1327
|
format: h,
|
|
1331
|
-
contentType:
|
|
1328
|
+
contentType: l,
|
|
1332
1329
|
fileName: ge
|
|
1333
1330
|
};
|
|
1334
1331
|
return s.fire("editor:canvas-exported", ve), ve;
|
|
@@ -1361,7 +1358,7 @@ class C {
|
|
|
1361
1358
|
*/
|
|
1362
1359
|
exportObjectAsImageFile() {
|
|
1363
1360
|
var e = arguments, t = this;
|
|
1364
|
-
return
|
|
1361
|
+
return T(function* () {
|
|
1365
1362
|
var {
|
|
1366
1363
|
object: a,
|
|
1367
1364
|
fileName: r = "image.png",
|
|
@@ -1371,8 +1368,8 @@ class C {
|
|
|
1371
1368
|
} = e.length > 0 && e[0] !== void 0 ? e[0] : {}, {
|
|
1372
1369
|
canvas: c,
|
|
1373
1370
|
workerManager: u
|
|
1374
|
-
} = t.editor,
|
|
1375
|
-
if (!
|
|
1371
|
+
} = t.editor, d = a || c.getActiveObject();
|
|
1372
|
+
if (!d)
|
|
1376
1373
|
return t.editor.errorManager.emitError({
|
|
1377
1374
|
origin: "ImageManager",
|
|
1378
1375
|
method: "exportObjectAsImageFile",
|
|
@@ -1386,50 +1383,50 @@ class C {
|
|
|
1386
1383
|
}
|
|
1387
1384
|
}), "";
|
|
1388
1385
|
try {
|
|
1389
|
-
var
|
|
1390
|
-
if (
|
|
1391
|
-
var h =
|
|
1386
|
+
var l = w.getFormatFromContentType(i);
|
|
1387
|
+
if (l === "svg") {
|
|
1388
|
+
var h = d.toSVG(), g = t._exportSVGStringAsFile(h, {
|
|
1392
1389
|
exportAsBase64: n,
|
|
1393
1390
|
exportAsBlob: s,
|
|
1394
1391
|
fileName: r
|
|
1395
|
-
}),
|
|
1392
|
+
}), M = {
|
|
1396
1393
|
image: g,
|
|
1397
|
-
format:
|
|
1394
|
+
format: l,
|
|
1398
1395
|
contentType: "image/svg+xml",
|
|
1399
1396
|
fileName: r.replace(/\.[^/.]+$/, ".svg")
|
|
1400
1397
|
};
|
|
1401
|
-
return c.fire("editor:object-exported",
|
|
1398
|
+
return c.fire("editor:object-exported", M), M;
|
|
1402
1399
|
}
|
|
1403
1400
|
if (n) {
|
|
1404
|
-
var
|
|
1405
|
-
format:
|
|
1401
|
+
var m = yield createImageBitmap(d._element), f = yield u.post("toDataURL", {
|
|
1402
|
+
format: l,
|
|
1406
1403
|
quality: 1,
|
|
1407
|
-
bitmap:
|
|
1408
|
-
}, [
|
|
1404
|
+
bitmap: m
|
|
1405
|
+
}, [m]), v = {
|
|
1409
1406
|
image: f,
|
|
1410
|
-
format:
|
|
1407
|
+
format: l,
|
|
1411
1408
|
contentType: i,
|
|
1412
1409
|
fileName: r
|
|
1413
1410
|
};
|
|
1414
1411
|
return c.fire("editor:object-exported", v), v;
|
|
1415
1412
|
}
|
|
1416
|
-
var
|
|
1417
|
-
|
|
1413
|
+
var A = d.toCanvasElement(), D = yield new Promise((p) => {
|
|
1414
|
+
A.toBlob(p);
|
|
1418
1415
|
});
|
|
1419
1416
|
if (s) {
|
|
1420
|
-
var
|
|
1421
|
-
image:
|
|
1422
|
-
format:
|
|
1417
|
+
var N = {
|
|
1418
|
+
image: D,
|
|
1419
|
+
format: l,
|
|
1423
1420
|
contentType: i,
|
|
1424
1421
|
fileName: r
|
|
1425
1422
|
};
|
|
1426
|
-
return c.fire("editor:object-exported",
|
|
1423
|
+
return c.fire("editor:object-exported", N), N;
|
|
1427
1424
|
}
|
|
1428
|
-
var L = new File([
|
|
1425
|
+
var L = new File([D], r, {
|
|
1429
1426
|
type: i
|
|
1430
1427
|
}), y = {
|
|
1431
1428
|
image: L,
|
|
1432
|
-
format:
|
|
1429
|
+
format: l,
|
|
1433
1430
|
contentType: i,
|
|
1434
1431
|
fileName: r
|
|
1435
1432
|
};
|
|
@@ -1485,7 +1482,7 @@ class C {
|
|
|
1485
1482
|
* @returns {string[]} - массив допустимых форматов изображений
|
|
1486
1483
|
*/
|
|
1487
1484
|
getAllowedFormatsFromContentTypes() {
|
|
1488
|
-
return this.acceptContentTypes.map((e) =>
|
|
1485
|
+
return this.acceptContentTypes.map((e) => w.getFormatFromContentType(e)).filter((e) => e);
|
|
1489
1486
|
}
|
|
1490
1487
|
/**
|
|
1491
1488
|
* Извлекает чистый формат (subtype) из contentType,
|
|
@@ -1515,7 +1512,7 @@ class C {
|
|
|
1515
1512
|
*/
|
|
1516
1513
|
getContentType(e) {
|
|
1517
1514
|
var t = this;
|
|
1518
|
-
return
|
|
1515
|
+
return T(function* () {
|
|
1519
1516
|
return typeof e == "string" ? t.getContentTypeFromUrl(e) : e.type || "application/octet-stream";
|
|
1520
1517
|
})();
|
|
1521
1518
|
}
|
|
@@ -1527,7 +1524,7 @@ class C {
|
|
|
1527
1524
|
*/
|
|
1528
1525
|
getContentTypeFromUrl(e) {
|
|
1529
1526
|
var t = this;
|
|
1530
|
-
return
|
|
1527
|
+
return T(function* () {
|
|
1531
1528
|
if (e.startsWith("data:")) {
|
|
1532
1529
|
var a = e.match(/^data:([^;]+)/);
|
|
1533
1530
|
return a ? a[1] : "application/octet-stream";
|
|
@@ -1554,7 +1551,7 @@ class C {
|
|
|
1554
1551
|
try {
|
|
1555
1552
|
var t, a = new URL(e), r = (t = a.pathname.split(".").pop()) === null || t === void 0 ? void 0 : t.toLowerCase(), i = {};
|
|
1556
1553
|
return this.acceptContentTypes.forEach((n) => {
|
|
1557
|
-
var s =
|
|
1554
|
+
var s = w.getFormatFromContentType(n);
|
|
1558
1555
|
s && (i[s] = n);
|
|
1559
1556
|
}), i[r] || "application/octet-stream";
|
|
1560
1557
|
} catch (n) {
|
|
@@ -1582,7 +1579,7 @@ class C {
|
|
|
1582
1579
|
return a === "contain" || a === "image-contain" ? Math.min(i / s, n / c) : a === "cover" || a === "image-cover" ? Math.max(i / s, n / c) : 1;
|
|
1583
1580
|
}
|
|
1584
1581
|
}
|
|
1585
|
-
class
|
|
1582
|
+
class Mt {
|
|
1586
1583
|
/**
|
|
1587
1584
|
* @param {object} options
|
|
1588
1585
|
* @param {ImageEditor} options.editor – экземпляр редактора
|
|
@@ -1618,21 +1615,21 @@ class jt {
|
|
|
1618
1615
|
} = this.editor, {
|
|
1619
1616
|
width: c,
|
|
1620
1617
|
height: u
|
|
1621
|
-
} = n,
|
|
1622
|
-
if (!s || s === "auto" || r ? this.adaptCanvasToContainer() : s ? this.setCanvasBackstoreWidth(s) : this.setCanvasBackstoreWidth(
|
|
1623
|
-
width:
|
|
1618
|
+
} = n, d = Number(Math.max(Math.min(e, E), k));
|
|
1619
|
+
if (!s || s === "auto" || r ? this.adaptCanvasToContainer() : s ? this.setCanvasBackstoreWidth(s) : this.setCanvasBackstoreWidth(d), n.set({
|
|
1620
|
+
width: d
|
|
1624
1621
|
}), i.clipPath.set({
|
|
1625
|
-
width:
|
|
1622
|
+
width: d
|
|
1626
1623
|
}), t) {
|
|
1627
|
-
var
|
|
1624
|
+
var l = d / c, h = u * l;
|
|
1628
1625
|
this.setResolutionHeight(h);
|
|
1629
1626
|
return;
|
|
1630
1627
|
}
|
|
1631
1628
|
var {
|
|
1632
1629
|
left: g,
|
|
1633
|
-
top:
|
|
1634
|
-
} = this.getObjectDefaultCoords(n),
|
|
1635
|
-
i.setViewportTransform([
|
|
1630
|
+
top: M
|
|
1631
|
+
} = this.getObjectDefaultCoords(n), m = i.getZoom();
|
|
1632
|
+
i.setViewportTransform([m, 0, 0, m, g, M]), this.centerMontageArea(), a || this.editor.historyManager.saveState(), i == null || i.fire("editor:resolution-width-changed", {
|
|
1636
1633
|
width: e
|
|
1637
1634
|
});
|
|
1638
1635
|
}
|
|
@@ -1662,21 +1659,21 @@ class jt {
|
|
|
1662
1659
|
} = this.editor, {
|
|
1663
1660
|
width: c,
|
|
1664
1661
|
height: u
|
|
1665
|
-
} = n,
|
|
1666
|
-
if (!s || s === "auto" || r ? this.adaptCanvasToContainer() : s ? this.setCanvasBackstoreHeight(s) : this.setCanvasBackstoreHeight(
|
|
1667
|
-
height:
|
|
1662
|
+
} = n, d = Number(Math.max(Math.min(e, O), x));
|
|
1663
|
+
if (!s || s === "auto" || r ? this.adaptCanvasToContainer() : s ? this.setCanvasBackstoreHeight(s) : this.setCanvasBackstoreHeight(d), n.set({
|
|
1664
|
+
height: d
|
|
1668
1665
|
}), i.clipPath.set({
|
|
1669
|
-
height:
|
|
1666
|
+
height: d
|
|
1670
1667
|
}), t) {
|
|
1671
|
-
var
|
|
1668
|
+
var l = d / u, h = c * l;
|
|
1672
1669
|
this.setResolutionWidth(h);
|
|
1673
1670
|
return;
|
|
1674
1671
|
}
|
|
1675
1672
|
var {
|
|
1676
1673
|
left: g,
|
|
1677
|
-
top:
|
|
1678
|
-
} = this.getObjectDefaultCoords(n),
|
|
1679
|
-
i.setViewportTransform([
|
|
1674
|
+
top: M
|
|
1675
|
+
} = this.getObjectDefaultCoords(n), m = i.getZoom();
|
|
1676
|
+
i.setViewportTransform([m, 0, 0, m, g, M]), this.centerMontageArea(), a || this.editor.historyManager.saveState(), i == null || i.fire("editor:resolution-height-changed", {
|
|
1680
1677
|
height: e
|
|
1681
1678
|
});
|
|
1682
1679
|
}
|
|
@@ -1689,7 +1686,7 @@ class jt {
|
|
|
1689
1686
|
var {
|
|
1690
1687
|
canvas: e,
|
|
1691
1688
|
montageArea: t
|
|
1692
|
-
} = this.editor, a = e.getWidth(), r = e.getHeight(), i = e.getZoom(), n = new
|
|
1689
|
+
} = this.editor, a = e.getWidth(), r = e.getHeight(), i = e.getZoom(), n = new ke(a / 2, r / 2);
|
|
1693
1690
|
t.set({
|
|
1694
1691
|
left: a / 2,
|
|
1695
1692
|
top: r / 2
|
|
@@ -1734,7 +1731,7 @@ class jt {
|
|
|
1734
1731
|
}
|
|
1735
1732
|
setCanvasBackstoreHeight(e) {
|
|
1736
1733
|
if (!(!e || typeof e != "number")) {
|
|
1737
|
-
var t = Math.max(Math.min(e,
|
|
1734
|
+
var t = Math.max(Math.min(e, O), x);
|
|
1738
1735
|
this.editor.canvas.setDimensions({
|
|
1739
1736
|
height: t
|
|
1740
1737
|
}, {
|
|
@@ -1745,7 +1742,7 @@ class jt {
|
|
|
1745
1742
|
adaptCanvasToContainer() {
|
|
1746
1743
|
var {
|
|
1747
1744
|
canvas: e
|
|
1748
|
-
} = this.editor, t = e.editorContainer, a = t.clientWidth, r = t.clientHeight, i = Math.max(Math.min(a, E), k), n = Math.max(Math.min(r,
|
|
1745
|
+
} = this.editor, t = e.editorContainer, a = t.clientWidth, r = t.clientHeight, i = Math.max(Math.min(a, E), k), n = Math.max(Math.min(r, O), x);
|
|
1749
1746
|
console.log("adaptCanvasToContainer newWidth", i), console.log("adaptCanvasToContainer newHeight", n), e.setDimensions({
|
|
1750
1747
|
width: i,
|
|
1751
1748
|
height: n
|
|
@@ -1753,6 +1750,35 @@ class jt {
|
|
|
1753
1750
|
backstoreOnly: !0
|
|
1754
1751
|
});
|
|
1755
1752
|
}
|
|
1753
|
+
/**
|
|
1754
|
+
* Обновляет размеры канваса и вписывает объекты в монтажную область.
|
|
1755
|
+
* Вызывается при изменении размеров контейнера редактора.
|
|
1756
|
+
* @fires editor:canvas-updated
|
|
1757
|
+
*/
|
|
1758
|
+
updateCanvasAndFitObjects() {
|
|
1759
|
+
var {
|
|
1760
|
+
canvas: e,
|
|
1761
|
+
selectionManager: t,
|
|
1762
|
+
transformManager: a,
|
|
1763
|
+
montageArea: {
|
|
1764
|
+
width: r,
|
|
1765
|
+
height: i
|
|
1766
|
+
}
|
|
1767
|
+
} = this.editor;
|
|
1768
|
+
this.setResolutionWidth(r, {
|
|
1769
|
+
adaptCanvasToContainer: !0,
|
|
1770
|
+
withoutSave: !0
|
|
1771
|
+
}), this.setResolutionHeight(i, {
|
|
1772
|
+
adaptCanvasToContainer: !0,
|
|
1773
|
+
withoutSave: !0
|
|
1774
|
+
}), this.centerMontageArea(), t.selectAll(), a.fitObject({
|
|
1775
|
+
fitAsOneObject: !0,
|
|
1776
|
+
withoutSave: !0
|
|
1777
|
+
}), e.fire("editor:canvas-updated", {
|
|
1778
|
+
width: r,
|
|
1779
|
+
height: i
|
|
1780
|
+
});
|
|
1781
|
+
}
|
|
1756
1782
|
/**
|
|
1757
1783
|
* Заготовка.
|
|
1758
1784
|
* Обновляет CSS-размеры канваса в зависимости от текущего зума, чтобы можно было скроллить вниз-вверх, влево-вправо.
|
|
@@ -1885,16 +1911,16 @@ class jt {
|
|
|
1885
1911
|
}
|
|
1886
1912
|
var s = t === "width" ? "width" : "height";
|
|
1887
1913
|
if (typeof a == "string") {
|
|
1888
|
-
n.forEach((
|
|
1889
|
-
|
|
1914
|
+
n.forEach((d) => {
|
|
1915
|
+
d.style[s] = a;
|
|
1890
1916
|
});
|
|
1891
1917
|
return;
|
|
1892
1918
|
}
|
|
1893
1919
|
var c = parseFloat(a);
|
|
1894
1920
|
if (!isNaN(c)) {
|
|
1895
1921
|
var u = "".concat(c, "px");
|
|
1896
|
-
n.forEach((
|
|
1897
|
-
|
|
1922
|
+
n.forEach((d) => {
|
|
1923
|
+
d.style[s] = u;
|
|
1898
1924
|
}), r.fire("editor:display-".concat(e, "-").concat(s, "-changed"), {
|
|
1899
1925
|
element: e,
|
|
1900
1926
|
value: a
|
|
@@ -1908,7 +1934,7 @@ class jt {
|
|
|
1908
1934
|
* @param {fabric.Object} [options.object] - Объект с изображением, которое нужно масштабировать
|
|
1909
1935
|
* @param {Boolean} [options.withoutSave] - Не сохранять состояние
|
|
1910
1936
|
* @param {Boolean} [options.preserveAspectRatio] - Сохранять изначальные пропорции монтажной области
|
|
1911
|
-
* @fires editor:
|
|
1937
|
+
* @fires editor:montage-area-scaled-to-image
|
|
1912
1938
|
*/
|
|
1913
1939
|
scaleMontageAreaToImage() {
|
|
1914
1940
|
var {
|
|
@@ -1926,25 +1952,28 @@ class jt {
|
|
|
1926
1952
|
} = this.editor, u = e || r.getActiveObject();
|
|
1927
1953
|
if (!(!u || u.type !== "image" && u.format !== "svg")) {
|
|
1928
1954
|
var {
|
|
1929
|
-
width:
|
|
1930
|
-
height:
|
|
1931
|
-
} = u, h = Math.min(
|
|
1955
|
+
width: d,
|
|
1956
|
+
height: l
|
|
1957
|
+
} = u, h = Math.min(d, E), g = Math.min(l, O);
|
|
1932
1958
|
if (t) {
|
|
1933
1959
|
var {
|
|
1934
|
-
width:
|
|
1935
|
-
height:
|
|
1936
|
-
} = i, f =
|
|
1937
|
-
h =
|
|
1960
|
+
width: M,
|
|
1961
|
+
height: m
|
|
1962
|
+
} = i, f = d / M, v = l / m, A = Math.max(f, v);
|
|
1963
|
+
h = M * A, g = m * A;
|
|
1938
1964
|
}
|
|
1939
1965
|
this.setResolutionWidth(h, {
|
|
1940
1966
|
withoutSave: !0
|
|
1941
1967
|
}), this.setResolutionHeight(g, {
|
|
1942
1968
|
withoutSave: !0
|
|
1943
|
-
}), (
|
|
1969
|
+
}), (d > s || l > c) && n.calculateAndApplyDefaultZoom(), n.resetObject(u, {
|
|
1944
1970
|
withoutSave: !0
|
|
1945
|
-
}), r.centerObject(u), r.renderAll(), a || this.editor.historyManager.saveState(), r.fire("editor:
|
|
1971
|
+
}), r.centerObject(u), r.renderAll(), a || this.editor.historyManager.saveState(), r.fire("editor:montage-area-scaled-to-image", {
|
|
1972
|
+
object: u,
|
|
1946
1973
|
width: h,
|
|
1947
|
-
height: g
|
|
1974
|
+
height: g,
|
|
1975
|
+
preserveAspectRatio: t,
|
|
1976
|
+
withoutSave: a
|
|
1948
1977
|
});
|
|
1949
1978
|
}
|
|
1950
1979
|
}
|
|
@@ -1999,7 +2028,7 @@ class jt {
|
|
|
1999
2028
|
return r.filter((i) => i.id !== t.id && i.id !== a.id);
|
|
2000
2029
|
}
|
|
2001
2030
|
}
|
|
2002
|
-
class
|
|
2031
|
+
class ft {
|
|
2003
2032
|
/**
|
|
2004
2033
|
* @param {object} options
|
|
2005
2034
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -2011,22 +2040,24 @@ class yt {
|
|
|
2011
2040
|
this.editor = t, this.options = t.options;
|
|
2012
2041
|
}
|
|
2013
2042
|
/**
|
|
2014
|
-
* Метод рассчитывает
|
|
2015
|
-
*
|
|
2016
|
-
*
|
|
2017
|
-
*
|
|
2018
|
-
* @param {
|
|
2043
|
+
* Метод рассчитывает и применяет зум по умолчанию для монтажной области редактора.
|
|
2044
|
+
* Зум рассчитывается исходя из размеров контейнера редактора и текущих размеров монтажной области.
|
|
2045
|
+
* Расчёт происходит таким образом, чтобы монтажная область визуально целиком помещалась в контейнер редактора.
|
|
2046
|
+
* Если scale не передан, то используется значение из options.defaultScale.
|
|
2047
|
+
* @param {Number} [scale] - Желаемый масштаб относительно размеров контейнера редактора.
|
|
2019
2048
|
*/
|
|
2020
2049
|
calculateAndApplyDefaultZoom() {
|
|
2021
|
-
var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : this.options.
|
|
2022
|
-
|
|
2023
|
-
|
|
2024
|
-
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
|
|
2050
|
+
var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : this.options.defaultScale, {
|
|
2051
|
+
canvas: t
|
|
2052
|
+
} = this.editor, a = t.editorContainer, r = a.clientWidth, i = a.clientHeight, {
|
|
2053
|
+
width: n,
|
|
2054
|
+
height: s
|
|
2055
|
+
} = this.editor.montageArea, c = r / n * e, u = i / s * e, d = Math.min(c, u), {
|
|
2056
|
+
minZoom: l,
|
|
2057
|
+
maxZoom: h,
|
|
2058
|
+
maxZoomFactor: g
|
|
2028
2059
|
} = this.options;
|
|
2029
|
-
this.minZoom = Math.min(
|
|
2060
|
+
this.minZoom = Math.min(d / g, l), this.maxZoom = Math.max(d * g, h), this.defaultZoom = d, this.setZoom(d);
|
|
2030
2061
|
}
|
|
2031
2062
|
/**
|
|
2032
2063
|
* Увеличение/уменьшение масштаба
|
|
@@ -2038,7 +2069,7 @@ class yt {
|
|
|
2038
2069
|
* Если передавать координаты курсора, то нужно быть аккуратнее, так как юзер может выйти за пределы рабочей области
|
|
2039
2070
|
*/
|
|
2040
2071
|
zoom() {
|
|
2041
|
-
var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] :
|
|
2072
|
+
var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : vt, t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
|
|
2042
2073
|
if (e) {
|
|
2043
2074
|
var {
|
|
2044
2075
|
canvas: a,
|
|
@@ -2110,7 +2141,7 @@ class yt {
|
|
|
2110
2141
|
* @fires editor:object-rotated
|
|
2111
2142
|
*/
|
|
2112
2143
|
rotate() {
|
|
2113
|
-
var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] :
|
|
2144
|
+
var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : mt, {
|
|
2114
2145
|
withoutSave: t
|
|
2115
2146
|
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, {
|
|
2116
2147
|
canvas: a,
|
|
@@ -2172,7 +2203,7 @@ class yt {
|
|
|
2172
2203
|
}) : n.set("opacity", t), r.renderAll(), a || i.saveState(), r.fire("editor:object-opacity-changed", t));
|
|
2173
2204
|
}
|
|
2174
2205
|
/**
|
|
2175
|
-
* Масштабирование
|
|
2206
|
+
* Масштабирование объекта
|
|
2176
2207
|
* @param {Object} options
|
|
2177
2208
|
* @param {fabric.Object} [options.object] - Объект с изображением, которое нужно масштабировать
|
|
2178
2209
|
* @param {String} [options.type] - Тип масштабирования
|
|
@@ -2203,19 +2234,22 @@ class yt {
|
|
|
2203
2234
|
});
|
|
2204
2235
|
h.scale(g), i.centerObject(h);
|
|
2205
2236
|
});
|
|
2206
|
-
var
|
|
2237
|
+
var d = new W(u, {
|
|
2207
2238
|
canvas: i
|
|
2208
2239
|
});
|
|
2209
|
-
i.setActiveObject(
|
|
2240
|
+
i.setActiveObject(d);
|
|
2210
2241
|
} else {
|
|
2211
|
-
var
|
|
2242
|
+
var l = n.calculateScaleFactor({
|
|
2212
2243
|
imageObject: c,
|
|
2213
2244
|
scaleType: t
|
|
2214
2245
|
});
|
|
2215
|
-
c.scale(
|
|
2246
|
+
c.scale(l), i.centerObject(c);
|
|
2216
2247
|
}
|
|
2217
|
-
i.renderAll(), a || s.saveState(), i.fire("editor:
|
|
2218
|
-
|
|
2248
|
+
i.renderAll(), a || s.saveState(), i.fire("editor:object-fitted", {
|
|
2249
|
+
object: c,
|
|
2250
|
+
type: t,
|
|
2251
|
+
withoutSave: a,
|
|
2252
|
+
fitAsOneObject: r
|
|
2219
2253
|
});
|
|
2220
2254
|
}
|
|
2221
2255
|
}
|
|
@@ -2230,7 +2264,9 @@ class yt {
|
|
|
2230
2264
|
/**
|
|
2231
2265
|
* Сброс масштаба объекта до дефолтного
|
|
2232
2266
|
* @param {fabric.Object} object
|
|
2233
|
-
* @param {
|
|
2267
|
+
* @param {Object} options
|
|
2268
|
+
* @param {Boolean} [options.withoutSave] - Не сохранять состояние
|
|
2269
|
+
* @param {Boolean} [options.alwaysFitObject] - вписывать объект в рабочую область даже если он меньше рабочей области
|
|
2234
2270
|
* @returns
|
|
2235
2271
|
* @fires editor:object-reset
|
|
2236
2272
|
*/
|
|
@@ -2248,31 +2284,35 @@ class yt {
|
|
|
2248
2284
|
}
|
|
2249
2285
|
} = this.editor, u = e || r.getActiveObject();
|
|
2250
2286
|
if (!(!u || u.locked)) {
|
|
2251
|
-
|
|
2287
|
+
s.suspendHistory();
|
|
2288
|
+
var d = u.type === "image" || u.format === "svg";
|
|
2289
|
+
if (d || u.set({
|
|
2252
2290
|
scaleX: 1,
|
|
2253
2291
|
scaleY: 1,
|
|
2254
2292
|
flipX: !1,
|
|
2255
2293
|
flipY: !1,
|
|
2256
2294
|
angle: 0
|
|
2257
|
-
}),
|
|
2295
|
+
}), t)
|
|
2258
2296
|
this.fitObject({
|
|
2259
2297
|
object: u,
|
|
2260
|
-
withoutSave: !0
|
|
2298
|
+
withoutSave: !0,
|
|
2299
|
+
fitAsOneObject: !0
|
|
2261
2300
|
});
|
|
2262
2301
|
else {
|
|
2263
2302
|
var {
|
|
2264
2303
|
width: l,
|
|
2265
|
-
height:
|
|
2304
|
+
height: h
|
|
2266
2305
|
} = i, {
|
|
2267
|
-
width:
|
|
2268
|
-
height:
|
|
2306
|
+
width: g,
|
|
2307
|
+
height: M
|
|
2269
2308
|
} = u, m = n.calculateScaleFactor({
|
|
2270
2309
|
imageObject: u,
|
|
2271
2310
|
scaleType: c
|
|
2272
|
-
});
|
|
2273
|
-
|
|
2311
|
+
}), f = c === "contain" && m < 1 || c === "cover" && (g > l || M > h);
|
|
2312
|
+
f ? this.fitObject({
|
|
2274
2313
|
object: u,
|
|
2275
|
-
withoutSave: !0
|
|
2314
|
+
withoutSave: !0,
|
|
2315
|
+
fitAsOneObject: !0
|
|
2276
2316
|
}) : u.set({
|
|
2277
2317
|
scaleX: 1,
|
|
2278
2318
|
scaleY: 1
|
|
@@ -2286,7 +2326,7 @@ class yt {
|
|
|
2286
2326
|
}
|
|
2287
2327
|
}
|
|
2288
2328
|
}
|
|
2289
|
-
class
|
|
2329
|
+
class jt {
|
|
2290
2330
|
/**
|
|
2291
2331
|
* @param {object} options
|
|
2292
2332
|
* @param {ImageEditor} options.editor – экземпляр редактора
|
|
@@ -2386,7 +2426,7 @@ class pt {
|
|
|
2386
2426
|
}
|
|
2387
2427
|
}
|
|
2388
2428
|
}
|
|
2389
|
-
class
|
|
2429
|
+
class K {
|
|
2390
2430
|
/**
|
|
2391
2431
|
* @param {object} options
|
|
2392
2432
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -2433,7 +2473,7 @@ class J {
|
|
|
2433
2473
|
} = this.editor;
|
|
2434
2474
|
r.suspendHistory();
|
|
2435
2475
|
var i = e || a.getActiveObject();
|
|
2436
|
-
i && (i.type === "activeselection" ?
|
|
2476
|
+
i && (i.type === "activeselection" ? K._moveSelectionForward(a, i) : a.bringObjectForward(i), a.renderAll(), r.resumeHistory(), t || r.saveState(), a.fire("editor:object-bring-forward"));
|
|
2437
2477
|
}
|
|
2438
2478
|
/**
|
|
2439
2479
|
* Отправить объект на задний план по оси Z
|
|
@@ -2483,7 +2523,7 @@ class J {
|
|
|
2483
2523
|
} = this.editor;
|
|
2484
2524
|
i.suspendHistory();
|
|
2485
2525
|
var s = e || a.getActiveObject();
|
|
2486
|
-
s && (s.type === "activeselection" ?
|
|
2526
|
+
s && (s.type === "activeselection" ? K._moveSelectionBackwards(a, s) : a.sendObjectBackwards(s), a.sendObjectToBack(r), a.sendObjectToBack(n), a.renderAll(), i.resumeHistory(), t || i.saveState(), a.fire("editor:object-send-backwards"));
|
|
2487
2527
|
}
|
|
2488
2528
|
/**
|
|
2489
2529
|
* Сдвигает выделенные объекты на один уровень вверх относительно ближайшего верхнего объекта
|
|
@@ -2493,20 +2533,20 @@ class J {
|
|
|
2493
2533
|
* @private
|
|
2494
2534
|
*/
|
|
2495
2535
|
static _moveSelectionForward(e, t) {
|
|
2496
|
-
for (var a = e.getObjects(), r = t.getObjects(), i = r.map((
|
|
2497
|
-
var h = a[
|
|
2498
|
-
if (!r.includes(h) && i.some((g) =>
|
|
2499
|
-
return n =
|
|
2536
|
+
for (var a = e.getObjects(), r = t.getObjects(), i = r.map((d) => a.indexOf(d)), n = -1, s = function(l) {
|
|
2537
|
+
var h = a[l];
|
|
2538
|
+
if (!r.includes(h) && i.some((g) => l > g))
|
|
2539
|
+
return n = l, 1;
|
|
2500
2540
|
}, c = 0; c < a.length && !s(c); c += 1)
|
|
2501
2541
|
;
|
|
2502
2542
|
if (n !== -1) {
|
|
2503
|
-
var u = r.map((
|
|
2504
|
-
obj:
|
|
2505
|
-
index: a.indexOf(
|
|
2506
|
-
})).sort((
|
|
2507
|
-
u.forEach((
|
|
2508
|
-
var
|
|
2509
|
-
|
|
2543
|
+
var u = r.map((d) => ({
|
|
2544
|
+
obj: d,
|
|
2545
|
+
index: a.indexOf(d)
|
|
2546
|
+
})).sort((d, l) => l.index - d.index);
|
|
2547
|
+
u.forEach((d) => {
|
|
2548
|
+
var l = a.indexOf(d.obj);
|
|
2549
|
+
l < n && (e.moveObjectTo(d.obj, n), n = l);
|
|
2510
2550
|
});
|
|
2511
2551
|
}
|
|
2512
2552
|
}
|
|
@@ -2522,7 +2562,7 @@ class J {
|
|
|
2522
2562
|
e.moveObjectTo(r[n], i - 1);
|
|
2523
2563
|
}
|
|
2524
2564
|
}
|
|
2525
|
-
class
|
|
2565
|
+
class yt {
|
|
2526
2566
|
/**
|
|
2527
2567
|
* Менеджер фигур для редактора.
|
|
2528
2568
|
* @param {Object} options - Опции и настройки менеджера фигур.
|
|
@@ -2546,15 +2586,15 @@ class bt {
|
|
|
2546
2586
|
* @param {Object} flags.withoutSelection - Не выделять объект
|
|
2547
2587
|
* @param {Object} flags.withoutAdding - Не добавлять объект в canvas
|
|
2548
2588
|
*/
|
|
2549
|
-
addRectangle(
|
|
2550
|
-
var
|
|
2551
|
-
id: e = `rect-${
|
|
2589
|
+
addRectangle(d = {}, { withoutSelection: c, withoutAdding: u } = {}) {
|
|
2590
|
+
var l = d, {
|
|
2591
|
+
id: e = `rect-${S()}`,
|
|
2552
2592
|
left: t,
|
|
2553
2593
|
top: a,
|
|
2554
2594
|
width: r = 100,
|
|
2555
2595
|
height: i = 100,
|
|
2556
2596
|
fill: n = "blue"
|
|
2557
|
-
} =
|
|
2597
|
+
} = l, s = Q(l, [
|
|
2558
2598
|
"id",
|
|
2559
2599
|
"left",
|
|
2560
2600
|
"top",
|
|
@@ -2562,7 +2602,7 @@ class bt {
|
|
|
2562
2602
|
"height",
|
|
2563
2603
|
"fill"
|
|
2564
2604
|
]);
|
|
2565
|
-
const { canvas: h } = this.editor, g = new
|
|
2605
|
+
const { canvas: h } = this.editor, g = new xe(C({
|
|
2566
2606
|
id: e,
|
|
2567
2607
|
left: t,
|
|
2568
2608
|
top: a,
|
|
@@ -2589,27 +2629,27 @@ class bt {
|
|
|
2589
2629
|
* @param {Object} flags.withoutAdding - Не добавлять объект в canvas
|
|
2590
2630
|
*/
|
|
2591
2631
|
addCircle(u = {}, { withoutSelection: s, withoutAdding: c } = {}) {
|
|
2592
|
-
var
|
|
2593
|
-
id: e = `circle-${
|
|
2632
|
+
var d = u, {
|
|
2633
|
+
id: e = `circle-${S()}`,
|
|
2594
2634
|
left: t,
|
|
2595
2635
|
top: a,
|
|
2596
2636
|
radius: r = 50,
|
|
2597
2637
|
fill: i = "green"
|
|
2598
|
-
} =
|
|
2638
|
+
} = d, n = Q(d, [
|
|
2599
2639
|
"id",
|
|
2600
2640
|
"left",
|
|
2601
2641
|
"top",
|
|
2602
2642
|
"radius",
|
|
2603
2643
|
"fill"
|
|
2604
2644
|
]);
|
|
2605
|
-
const { canvas:
|
|
2645
|
+
const { canvas: l } = this.editor, h = new Be(C({
|
|
2606
2646
|
id: e,
|
|
2607
2647
|
left: t,
|
|
2608
2648
|
top: a,
|
|
2609
2649
|
fill: i,
|
|
2610
2650
|
radius: r
|
|
2611
2651
|
}, n));
|
|
2612
|
-
return !t && !a &&
|
|
2652
|
+
return !t && !a && l.centerObject(h), c || (l.add(h), s || l.setActiveObject(h), l.renderAll()), h;
|
|
2613
2653
|
}
|
|
2614
2654
|
/**
|
|
2615
2655
|
* Добавление треугольника
|
|
@@ -2628,15 +2668,15 @@ class bt {
|
|
|
2628
2668
|
* @param {Object} flags.withoutSelection - Не выделять объект
|
|
2629
2669
|
* @param {Object} flags.withoutAdding - Не добавлять объект в canvas
|
|
2630
2670
|
*/
|
|
2631
|
-
addTriangle(
|
|
2632
|
-
var
|
|
2633
|
-
id: e = `triangle-${
|
|
2671
|
+
addTriangle(d = {}, { withoutSelection: c, withoutAdding: u } = {}) {
|
|
2672
|
+
var l = d, {
|
|
2673
|
+
id: e = `triangle-${S()}`,
|
|
2634
2674
|
left: t,
|
|
2635
2675
|
top: a,
|
|
2636
2676
|
width: r = 100,
|
|
2637
2677
|
height: i = 100,
|
|
2638
2678
|
fill: n = "yellow"
|
|
2639
|
-
} =
|
|
2679
|
+
} = l, s = Q(l, [
|
|
2640
2680
|
"id",
|
|
2641
2681
|
"left",
|
|
2642
2682
|
"top",
|
|
@@ -2644,7 +2684,7 @@ class bt {
|
|
|
2644
2684
|
"height",
|
|
2645
2685
|
"fill"
|
|
2646
2686
|
]);
|
|
2647
|
-
const { canvas: h } = this.editor, g = new
|
|
2687
|
+
const { canvas: h } = this.editor, g = new Ze(C({
|
|
2648
2688
|
id: e,
|
|
2649
2689
|
left: t,
|
|
2650
2690
|
top: a,
|
|
@@ -2655,111 +2695,100 @@ class bt {
|
|
|
2655
2695
|
return !t && !a && h.centerObject(g), u || (h.add(g), c || h.setActiveObject(g), h.renderAll()), g;
|
|
2656
2696
|
}
|
|
2657
2697
|
}
|
|
2658
|
-
|
|
2659
|
-
try {
|
|
2660
|
-
var s = o[i](n), c = s.value;
|
|
2661
|
-
} catch (u) {
|
|
2662
|
-
return void t(u);
|
|
2663
|
-
}
|
|
2664
|
-
s.done ? e(c) : Promise.resolve(c).then(a, r);
|
|
2665
|
-
}
|
|
2666
|
-
function Ce(o) {
|
|
2667
|
-
return function() {
|
|
2668
|
-
var e = this, t = arguments;
|
|
2669
|
-
return new Promise(function(a, r) {
|
|
2670
|
-
var i = o.apply(e, t);
|
|
2671
|
-
function n(c) {
|
|
2672
|
-
Ae(i, a, r, n, s, "next", c);
|
|
2673
|
-
}
|
|
2674
|
-
function s(c) {
|
|
2675
|
-
Ae(i, a, r, n, s, "throw", c);
|
|
2676
|
-
}
|
|
2677
|
-
n(void 0);
|
|
2678
|
-
});
|
|
2679
|
-
};
|
|
2680
|
-
}
|
|
2681
|
-
class It {
|
|
2698
|
+
class pt {
|
|
2682
2699
|
/**
|
|
2683
2700
|
* @param {object} options
|
|
2684
2701
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
2685
2702
|
*/
|
|
2686
|
-
constructor(e) {
|
|
2687
|
-
|
|
2688
|
-
editor: t
|
|
2689
|
-
} = e;
|
|
2690
|
-
this.editor = t, this.clipboard = null;
|
|
2703
|
+
constructor({ editor: e }) {
|
|
2704
|
+
this.editor = e, this.clipboard = null;
|
|
2691
2705
|
}
|
|
2692
2706
|
/**
|
|
2693
2707
|
* Копирование объекта
|
|
2694
2708
|
* @fires editor:object-copied
|
|
2695
2709
|
*/
|
|
2696
2710
|
copy() {
|
|
2697
|
-
|
|
2698
|
-
|
|
2699
|
-
|
|
2700
|
-
canvas: t
|
|
2701
|
-
} = e.editor, a = t.getActiveObject();
|
|
2702
|
-
if (a)
|
|
2711
|
+
return H(this, null, function* () {
|
|
2712
|
+
const { canvas: e } = this.editor, t = e.getActiveObject();
|
|
2713
|
+
if (t)
|
|
2703
2714
|
try {
|
|
2704
|
-
|
|
2705
|
-
if (
|
|
2715
|
+
const a = yield t.clone(["format"]);
|
|
2716
|
+
if (this.clipboard = a, typeof ClipboardItem == "undefined" || !navigator.clipboard) {
|
|
2706
2717
|
console.warn(
|
|
2707
2718
|
// eslint-disable-next-line max-len
|
|
2708
2719
|
"ClipboardManager. navigator.clipboard не поддерживается в этом браузере или отсутствует соединение по HTTPS-протоколу."
|
|
2709
|
-
),
|
|
2710
|
-
object: r
|
|
2711
|
-
});
|
|
2720
|
+
), e.fire("editor:object-copied", { object: a });
|
|
2712
2721
|
return;
|
|
2713
2722
|
}
|
|
2714
|
-
if (
|
|
2715
|
-
yield navigator.clipboard.writeText(
|
|
2716
|
-
object: r
|
|
2717
|
-
});
|
|
2723
|
+
if (this.clipboard.type !== "image") {
|
|
2724
|
+
yield navigator.clipboard.writeText(`application/image-editor:${JSON.stringify(a)}`), e.fire("editor:object-copied", { object: a });
|
|
2718
2725
|
return;
|
|
2719
2726
|
}
|
|
2720
|
-
|
|
2721
|
-
|
|
2722
|
-
}), s = new ClipboardItem({
|
|
2723
|
-
[n.type]: n
|
|
2724
|
-
});
|
|
2725
|
-
yield navigator.clipboard.write([s]), t.fire("editor:object-copied", {
|
|
2726
|
-
object: r
|
|
2727
|
+
const r = a.toCanvasElement(), i = yield new Promise((s) => {
|
|
2728
|
+
r.toBlob(s);
|
|
2727
2729
|
});
|
|
2728
|
-
|
|
2729
|
-
|
|
2730
|
-
|
|
2731
|
-
|
|
2730
|
+
if (!i) return;
|
|
2731
|
+
const n = new ClipboardItem({ [i.type]: i });
|
|
2732
|
+
yield navigator.clipboard.write([n]), e.fire("editor:object-copied", { object: a });
|
|
2733
|
+
} catch (a) {
|
|
2734
|
+
if (!(a instanceof Error)) return;
|
|
2735
|
+
const r = "ClipboardManager. Ошибка записи в системный буфер обмена:";
|
|
2736
|
+
console.error(r, a), e.fire("editor:error", {
|
|
2737
|
+
message: `${r} ${a.message}`
|
|
2732
2738
|
});
|
|
2733
2739
|
}
|
|
2734
|
-
})
|
|
2740
|
+
});
|
|
2741
|
+
}
|
|
2742
|
+
/**
|
|
2743
|
+
* Обработчик вставки объекта или изображения из буфера обмена.
|
|
2744
|
+
* @param {Object} event — объект события
|
|
2745
|
+
* @param {Object} event.clipboardData — данные из буфера обмена
|
|
2746
|
+
* @param {Array} event.clipboardData.items — элементы буфера обмена
|
|
2747
|
+
*/
|
|
2748
|
+
handlePasteEvent({ clipboardData: e }) {
|
|
2749
|
+
var n;
|
|
2750
|
+
if (!((n = e == null ? void 0 : e.items) != null && n.length)) return;
|
|
2751
|
+
const { imageManager: t } = this.editor, { items: a } = e, r = a[a.length - 1];
|
|
2752
|
+
if (console.log("handlePasteEvent clipboardData", e), console.log("handlePasteEvent lastItem", r), r.type !== "text/html") {
|
|
2753
|
+
const s = r.getAsFile();
|
|
2754
|
+
if (!s) return;
|
|
2755
|
+
const c = new FileReader();
|
|
2756
|
+
c.onload = (u) => {
|
|
2757
|
+
u.target && this.editor.imageManager.importImage({ source: u.target.result });
|
|
2758
|
+
}, c.readAsDataURL(s);
|
|
2759
|
+
return;
|
|
2760
|
+
}
|
|
2761
|
+
const i = e.getData("text/html");
|
|
2762
|
+
if (i) {
|
|
2763
|
+
const u = new DOMParser().parseFromString(i, "text/html").querySelector("img");
|
|
2764
|
+
if (u != null && u.src) {
|
|
2765
|
+
t.importImage({ source: u.src });
|
|
2766
|
+
return;
|
|
2767
|
+
}
|
|
2768
|
+
}
|
|
2769
|
+
this.paste();
|
|
2735
2770
|
}
|
|
2736
2771
|
/**
|
|
2737
2772
|
* Вставка объекта
|
|
2738
2773
|
* @fires editor:object-pasted
|
|
2739
2774
|
*/
|
|
2740
2775
|
paste() {
|
|
2741
|
-
|
|
2742
|
-
|
|
2743
|
-
|
|
2744
|
-
|
|
2745
|
-
|
|
2746
|
-
|
|
2747
|
-
|
|
2748
|
-
t.
|
|
2749
|
-
|
|
2750
|
-
|
|
2751
|
-
|
|
2752
|
-
|
|
2753
|
-
|
|
2754
|
-
t.add(r);
|
|
2755
|
-
})) : t.add(a), t.setActiveObject(a), t.requestRenderAll(), t.fire("editor:object-pasted", {
|
|
2756
|
-
object: a
|
|
2757
|
-
});
|
|
2758
|
-
}
|
|
2759
|
-
})();
|
|
2776
|
+
return H(this, null, function* () {
|
|
2777
|
+
const { canvas: e } = this.editor;
|
|
2778
|
+
if (!this.clipboard) return;
|
|
2779
|
+
const t = yield this.clipboard.clone(["format"]);
|
|
2780
|
+
e.discardActiveObject(), t.set({
|
|
2781
|
+
id: `${t.type}-${S()}`,
|
|
2782
|
+
left: t.left + 10,
|
|
2783
|
+
top: t.top + 10,
|
|
2784
|
+
evented: !0
|
|
2785
|
+
}), t instanceof W ? (t.canvas = e, t.forEachObject((a) => {
|
|
2786
|
+
e.add(a);
|
|
2787
|
+
})) : e.add(t), e.setActiveObject(t), e.requestRenderAll(), e.fire("editor:object-pasted", { object: t });
|
|
2788
|
+
});
|
|
2760
2789
|
}
|
|
2761
2790
|
}
|
|
2762
|
-
class
|
|
2791
|
+
class bt {
|
|
2763
2792
|
/**
|
|
2764
2793
|
* @param {object} options
|
|
2765
2794
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -2842,7 +2871,7 @@ class St {
|
|
|
2842
2871
|
}
|
|
2843
2872
|
}
|
|
2844
2873
|
}
|
|
2845
|
-
class
|
|
2874
|
+
class It {
|
|
2846
2875
|
/**
|
|
2847
2876
|
* @param {object} options
|
|
2848
2877
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -2871,8 +2900,12 @@ class At {
|
|
|
2871
2900
|
r.suspendHistory();
|
|
2872
2901
|
var i = e || a.getActiveObject();
|
|
2873
2902
|
if (i && i.type === "activeselection") {
|
|
2874
|
-
var n = i.getObjects(), s = new
|
|
2875
|
-
n.forEach((c) => a.remove(c)), s.set("id", "".concat(s.type, "-").concat(
|
|
2903
|
+
var n = i.getObjects(), s = new ze(n);
|
|
2904
|
+
n.forEach((c) => a.remove(c)), s.set("id", "".concat(s.type, "-").concat(S())), a.add(s), a.setActiveObject(s), a.renderAll(), r.resumeHistory(), t || r.saveState(), a.fire("editor:objects-grouped", {
|
|
2905
|
+
object: i,
|
|
2906
|
+
group: s,
|
|
2907
|
+
withoutSave: t
|
|
2908
|
+
});
|
|
2876
2909
|
}
|
|
2877
2910
|
}
|
|
2878
2911
|
/**
|
|
@@ -2895,14 +2928,18 @@ class At {
|
|
|
2895
2928
|
if (!(!i || i.type !== "group")) {
|
|
2896
2929
|
var n = i.removeAll();
|
|
2897
2930
|
a.remove(i), n.forEach((c) => a.add(c));
|
|
2898
|
-
var s = new
|
|
2931
|
+
var s = new W(n, {
|
|
2899
2932
|
canvas: a
|
|
2900
2933
|
});
|
|
2901
|
-
a.setActiveObject(s), a.renderAll(), r.resumeHistory(), t || r.saveState(), a.fire("editor:objects-ungrouped"
|
|
2934
|
+
a.setActiveObject(s), a.renderAll(), r.resumeHistory(), t || r.saveState(), a.fire("editor:objects-ungrouped", {
|
|
2935
|
+
object: i,
|
|
2936
|
+
selection: s,
|
|
2937
|
+
withoutSave: t
|
|
2938
|
+
});
|
|
2902
2939
|
}
|
|
2903
2940
|
}
|
|
2904
2941
|
}
|
|
2905
|
-
class
|
|
2942
|
+
class St {
|
|
2906
2943
|
/**
|
|
2907
2944
|
* @param {object} options
|
|
2908
2945
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -2924,7 +2961,7 @@ class Ct {
|
|
|
2924
2961
|
objectLockManager: a
|
|
2925
2962
|
} = this.editor;
|
|
2926
2963
|
e.discardActiveObject();
|
|
2927
|
-
var r = t.getObjects(), i = r.some((s) => s.locked), n = r.length > 1 ? new
|
|
2964
|
+
var r = t.getObjects(), i = r.some((s) => s.locked), n = r.length > 1 ? new W(t.getObjects(), {
|
|
2928
2965
|
canvas: e
|
|
2929
2966
|
}) : r[0];
|
|
2930
2967
|
i && a.lockObject({
|
|
@@ -2936,7 +2973,7 @@ class Ct {
|
|
|
2936
2973
|
});
|
|
2937
2974
|
}
|
|
2938
2975
|
}
|
|
2939
|
-
class
|
|
2976
|
+
class At {
|
|
2940
2977
|
/**
|
|
2941
2978
|
* @param {object} options
|
|
2942
2979
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -2969,10 +3006,13 @@ class Dt {
|
|
|
2969
3006
|
return;
|
|
2970
3007
|
}
|
|
2971
3008
|
a.remove(s);
|
|
2972
|
-
}), a.discardActiveObject(), a.renderAll(), r.resumeHistory(), t || r.saveState(), a.fire("editor:objects-deleted"
|
|
3009
|
+
}), a.discardActiveObject(), a.renderAll(), r.resumeHistory(), t || r.saveState(), a.fire("editor:objects-deleted", {
|
|
3010
|
+
objects: n,
|
|
3011
|
+
withoutSave: t
|
|
3012
|
+
}));
|
|
2973
3013
|
}
|
|
2974
3014
|
}
|
|
2975
|
-
var
|
|
3015
|
+
var Ct = {
|
|
2976
3016
|
IMAGE_MANAGER: {
|
|
2977
3017
|
/**
|
|
2978
3018
|
* Некорректный Content-Type изображения
|
|
@@ -3000,7 +3040,7 @@ var Nt = {
|
|
|
3000
3040
|
IMAGE_EXPORT_FAILED: "IMAGE_EXPORT_FAILED"
|
|
3001
3041
|
}
|
|
3002
3042
|
};
|
|
3003
|
-
class
|
|
3043
|
+
class $ {
|
|
3004
3044
|
constructor({ editor: e }) {
|
|
3005
3045
|
this._buffer = [], this.editor = e;
|
|
3006
3046
|
}
|
|
@@ -3021,7 +3061,7 @@ class K {
|
|
|
3021
3061
|
* @fires editor:error
|
|
3022
3062
|
*/
|
|
3023
3063
|
emitError({ origin: e = "ImageEditor", method: t = "Unknown Method", code: a, data: r, message: i }) {
|
|
3024
|
-
if (
|
|
3064
|
+
if (!$.isValidErrorCode(a)) {
|
|
3025
3065
|
console.warn("Неизвестный код ошибки: ", { code: a, origin: e, method: t });
|
|
3026
3066
|
return;
|
|
3027
3067
|
}
|
|
@@ -3035,7 +3075,7 @@ class K {
|
|
|
3035
3075
|
message: n,
|
|
3036
3076
|
data: r
|
|
3037
3077
|
};
|
|
3038
|
-
this._buffer.push(
|
|
3078
|
+
this._buffer.push(C({
|
|
3039
3079
|
type: "editor:error"
|
|
3040
3080
|
}, s)), this.editor.canvas.fire("editor:error", s);
|
|
3041
3081
|
}
|
|
@@ -3050,7 +3090,7 @@ class K {
|
|
|
3050
3090
|
* @fires editor:warning
|
|
3051
3091
|
*/
|
|
3052
3092
|
emitWarning({ origin: e = "ImageEditor", method: t = "Unknown Method", code: a, message: r, data: i }) {
|
|
3053
|
-
if (
|
|
3093
|
+
if (!$.isValidErrorCode(a)) {
|
|
3054
3094
|
console.warn("Неизвестный код предупреждения: ", { code: a, origin: e, method: t });
|
|
3055
3095
|
return;
|
|
3056
3096
|
}
|
|
@@ -3063,12 +3103,12 @@ class K {
|
|
|
3063
3103
|
message: n,
|
|
3064
3104
|
data: i
|
|
3065
3105
|
};
|
|
3066
|
-
this._buffer.push(
|
|
3106
|
+
this._buffer.push(C({
|
|
3067
3107
|
type: "editor:warning"
|
|
3068
3108
|
}, s)), this.editor.canvas.fire("editor:warning", s);
|
|
3069
3109
|
}
|
|
3070
3110
|
static isValidErrorCode(e) {
|
|
3071
|
-
return e ? Object.values(
|
|
3111
|
+
return e ? Object.values(Ct).some((t) => Object.values(t).includes(e)) : !1;
|
|
3072
3112
|
}
|
|
3073
3113
|
}
|
|
3074
3114
|
class ue {
|
|
@@ -3080,10 +3120,10 @@ class ue {
|
|
|
3080
3120
|
constructor(e, t) {
|
|
3081
3121
|
this.options = t;
|
|
3082
3122
|
const { defaultScale: a, minZoom: r, maxZoom: i } = t;
|
|
3083
|
-
this.containerId = e, this.editorId = `${e}-${
|
|
3123
|
+
this.containerId = e, this.editorId = `${e}-${S()}`, this.clipboard = null, this.defaultZoom = a, this.minZoom = r || ht, this.maxZoom = i || gt, this.init();
|
|
3084
3124
|
}
|
|
3085
3125
|
init() {
|
|
3086
|
-
return
|
|
3126
|
+
return H(this, null, function* () {
|
|
3087
3127
|
const {
|
|
3088
3128
|
editorContainerWidth: e,
|
|
3089
3129
|
editorContainerHeight: t,
|
|
@@ -3094,18 +3134,18 @@ class ue {
|
|
|
3094
3134
|
initialImage: s,
|
|
3095
3135
|
initialStateJSON: c,
|
|
3096
3136
|
scaleType: u,
|
|
3097
|
-
_onReadyCallback:
|
|
3137
|
+
_onReadyCallback: d
|
|
3098
3138
|
} = this.options;
|
|
3099
|
-
if (
|
|
3139
|
+
if (Ke.apply(), this.canvas = new Ue(this.containerId, this.options), this.moduleLoader = new Re(), this.workerManager = new We(), this.errorManager = new $({ 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 w({ editor: this }), this.layerManager = new K({ editor: this }), this.shapeManager = new yt({ editor: this }), this.interactionBlocker = new jt({ editor: this }), this.clipboardManager = new pt({ editor: this }), this.objectLockManager = new bt({ editor: this }), this.groupingManager = new It({ editor: this }), this.selectionManager = new St({ editor: this }), this.deletionManager = new At({ 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(r), this.canvasManager.setCanvasCSSWidth(i), this.canvasManager.setCanvasCSSHeight(n), s != null && s.source) {
|
|
3100
3140
|
const {
|
|
3101
|
-
source:
|
|
3141
|
+
source: l,
|
|
3102
3142
|
scale: h = `image-${u}`,
|
|
3103
3143
|
withoutSave: g = !0
|
|
3104
3144
|
} = s;
|
|
3105
|
-
yield this.imageManager.importImage({ source:
|
|
3145
|
+
yield this.imageManager.importImage({ source: l, scale: h, withoutSave: g });
|
|
3106
3146
|
} else
|
|
3107
3147
|
this.canvasManager.setDefaultScale({ withoutSave: !0 });
|
|
3108
|
-
c && this.historyManager.loadStateFromFullState(c), this.historyManager.saveState(), console.log("editor:ready"), this.canvas.fire("editor:ready", this), typeof
|
|
3148
|
+
c && this.historyManager.loadStateFromFullState(c), this.historyManager.saveState(), console.log("editor:ready"), this.canvas.fire("editor:ready", this), typeof d == "function" && d(this);
|
|
3109
3149
|
});
|
|
3110
3150
|
}
|
|
3111
3151
|
_createMontageArea() {
|
|
@@ -3160,7 +3200,7 @@ class ue {
|
|
|
3160
3200
|
const e = document.createElement("canvas");
|
|
3161
3201
|
e.width = 20, e.height = 20;
|
|
3162
3202
|
const t = e.getContext("2d");
|
|
3163
|
-
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
|
|
3203
|
+
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 Ye({
|
|
3164
3204
|
source: e,
|
|
3165
3205
|
repeat: "repeat"
|
|
3166
3206
|
});
|
|
@@ -3172,7 +3212,6 @@ const wt = {
|
|
|
3172
3212
|
*/
|
|
3173
3213
|
preserveObjectStacking: !0,
|
|
3174
3214
|
controlsAboveOverlay: !0,
|
|
3175
|
-
centeredScaling: !0,
|
|
3176
3215
|
centeredRotation: !0,
|
|
3177
3216
|
/*
|
|
3178
3217
|
* Кастомные опции
|
|
@@ -3235,7 +3274,7 @@ const wt = {
|
|
|
3235
3274
|
},
|
|
3236
3275
|
initialStateJSON: null,
|
|
3237
3276
|
initialImage: null,
|
|
3238
|
-
defaultScale:
|
|
3277
|
+
defaultScale: 0.5,
|
|
3239
3278
|
minZoom: 0.1,
|
|
3240
3279
|
maxZoom: 2,
|
|
3241
3280
|
maxZoomFactor: 2,
|
|
@@ -3244,7 +3283,7 @@ const wt = {
|
|
|
3244
3283
|
/*
|
|
3245
3284
|
* Настройки слушателей событий
|
|
3246
3285
|
*/
|
|
3247
|
-
|
|
3286
|
+
adaptCanvasToContainerOnResize: !0,
|
|
3248
3287
|
bringToFrontOnSelection: !1,
|
|
3249
3288
|
mouseWheelZooming: !0,
|
|
3250
3289
|
canvasDragging: !0,
|
|
@@ -3255,8 +3294,8 @@ const wt = {
|
|
|
3255
3294
|
deleteObjectsByHotkey: !0,
|
|
3256
3295
|
resetObjectFitByDoubleClick: !0
|
|
3257
3296
|
};
|
|
3258
|
-
function
|
|
3259
|
-
const t =
|
|
3297
|
+
function Et(o, e = {}) {
|
|
3298
|
+
const t = C(C({}, wt), e), a = document.getElementById(o);
|
|
3260
3299
|
if (!a)
|
|
3261
3300
|
return Promise.reject(new Error(`Контейнер с ID "${o}" не найден.`));
|
|
3262
3301
|
const r = document.createElement("canvas");
|
|
@@ -3267,6 +3306,6 @@ function Ot(o, e = {}) {
|
|
|
3267
3306
|
});
|
|
3268
3307
|
}
|
|
3269
3308
|
export {
|
|
3270
|
-
|
|
3309
|
+
Et as default
|
|
3271
3310
|
};
|
|
3272
3311
|
//# sourceMappingURL=main.js.map
|