@anu3ev/fabric-image-editor 0.1.30 → 0.1.32
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 → main} +840 -1047
- package/dist/main.map +1 -0
- package/package.json +1 -1
package/dist/{main.js → main}
RENAMED
|
@@ -1,34 +1,38 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var
|
|
1
|
+
var Oe = Object.defineProperty;
|
|
2
|
+
var ge = Object.getOwnPropertySymbols;
|
|
3
|
+
var Te = Object.prototype.hasOwnProperty, ke = Object.prototype.propertyIsEnumerable;
|
|
4
|
+
var ve = (s, e, t) => e in s ? Oe(s, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : s[e] = t, X = (s, e) => {
|
|
5
|
+
for (var t in e || (e = {}))
|
|
6
|
+
Te.call(e, t) && ve(s, t, e[t]);
|
|
7
|
+
if (ge)
|
|
8
|
+
for (var t of ge(e))
|
|
9
|
+
ke.call(e, t) && ve(s, t, e[t]);
|
|
10
|
+
return s;
|
|
11
|
+
};
|
|
12
|
+
var Q = (s, e, t) => new Promise((a, r) => {
|
|
13
|
+
var i = (c) => {
|
|
14
|
+
try {
|
|
15
|
+
o(t.next(c));
|
|
16
|
+
} catch (u) {
|
|
17
|
+
r(u);
|
|
18
|
+
}
|
|
19
|
+
}, n = (c) => {
|
|
20
|
+
try {
|
|
21
|
+
o(t.throw(c));
|
|
22
|
+
} catch (u) {
|
|
23
|
+
r(u);
|
|
24
|
+
}
|
|
25
|
+
}, o = (c) => c.done ? a(c.value) : Promise.resolve(c.value).then(i, n);
|
|
26
|
+
o((t = t.apply(s, e)).next());
|
|
27
|
+
});
|
|
28
|
+
import { ActiveSelection as Y, util as P, controlsUtils as xe, InteractiveFabricObject as Be, loadSVGFromURL as Ze, FabricImage as me, Point as ze, Rect as Ue, Circle as Ye, Triangle as Pe, Group as He, Canvas as _e, Pattern as Re } from "fabric";
|
|
29
|
+
import { create as We } from "jsondiffpatch";
|
|
30
|
+
var Fe = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict", w = function() {
|
|
4
31
|
for (var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 21, t = "", a = crypto.getRandomValues(new Uint8Array(e |= 0)); e--; )
|
|
5
|
-
t +=
|
|
32
|
+
t += Fe[a[e] & 63];
|
|
6
33
|
return t;
|
|
7
34
|
};
|
|
8
|
-
|
|
9
|
-
try {
|
|
10
|
-
var s = o[n](i), c = s.value;
|
|
11
|
-
} catch (u) {
|
|
12
|
-
return void t(u);
|
|
13
|
-
}
|
|
14
|
-
s.done ? e(c) : Promise.resolve(c).then(a, r);
|
|
15
|
-
}
|
|
16
|
-
function Re(o) {
|
|
17
|
-
return function() {
|
|
18
|
-
var e = this, t = arguments;
|
|
19
|
-
return new Promise(function(a, r) {
|
|
20
|
-
var n = o.apply(e, t);
|
|
21
|
-
function i(c) {
|
|
22
|
-
he(n, a, r, i, s, "next", c);
|
|
23
|
-
}
|
|
24
|
-
function s(c) {
|
|
25
|
-
he(n, a, r, i, s, "throw", c);
|
|
26
|
-
}
|
|
27
|
-
i(void 0);
|
|
28
|
-
});
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
class z {
|
|
35
|
+
class U {
|
|
32
36
|
/**
|
|
33
37
|
* Конструктор принимает редактор и опции.
|
|
34
38
|
* @param {Object} params
|
|
@@ -44,75 +48,48 @@ class z {
|
|
|
44
48
|
* @param {Boolean} [params.options.deleteObjectsByHotkey] — удаление объектов по Delete
|
|
45
49
|
* @param {Boolean} [params.options.resetObjectFitByDoubleClick] — сброс фита объекта по двойному клику
|
|
46
50
|
*/
|
|
47
|
-
constructor(e) {
|
|
48
|
-
|
|
49
|
-
editor: t,
|
|
50
|
-
options: a = {}
|
|
51
|
-
} = e;
|
|
52
|
-
this.editor = t, this.canvas = t.canvas, this.options = a, this.isUndoRedoKeyPressed = !1, this.isSpacePressed = !1, this.handleAdaptCanvasToContainerBound = z.debounce(this.handleAdaptCanvasToContainer.bind(this), 500), this.handleCopyEventBound = this.handleCopyEvent.bind(this), this.handlePasteEventBound = this.handlePasteEvent.bind(this), this.handleUndoRedoEventBound = this.handleUndoRedoEvent.bind(this), this.handleUndoRedoKeyUpBound = this.handleUndoRedoKeyUp.bind(this), this.handleSelectAllEventBound = this.handleSelectAllEvent.bind(this), this.handleDeleteObjectsEventBound = this.handleDeleteObjectsEvent.bind(this), this.handleSpaceKeyDownBound = this.handleSpaceKeyDown.bind(this), this.handleSpaceKeyUpBound = this.handleSpaceKeyUp.bind(this), this.handleObjectModifiedHistoryBound = z.debounce(this.handleObjectModifiedHistory.bind(this), 300), this.handleObjectRotatingHistoryBound = z.debounce(this.handleObjectRotatingHistory.bind(this), 300), this.handleObjectAddedHistoryBound = this.handleObjectAddedHistory.bind(this), this.handleObjectRemovedHistoryBound = this.handleObjectRemovedHistory.bind(this), this.handleOverlayUpdateBound = this.handleOverlayUpdate.bind(this), this.handleCanvasDragStartBound = this.handleCanvasDragStart.bind(this), this.handleCanvasDraggingBound = this.handleCanvasDragging.bind(this), this.handleCanvasDragEndBound = this.handleCanvasDragEnd.bind(this), this.handleMouseWheelZoomBound = this.handleMouseWheelZoom.bind(this), this.handleBringToFrontBound = this.handleBringToFront.bind(this), this.handleResetObjectFitBound = this.handleResetObjectFit.bind(this), this.handleLockedSelectionBound = this._filterLockedSelection.bind(this), this.init();
|
|
51
|
+
constructor({ editor: e, options: t = {} }) {
|
|
52
|
+
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.adaptCanvasToContainer = !1, this.editor = e, this.canvas = e.canvas, this.options = t, this.handleAdaptCanvasToContainerBound = U.debounce(this.handleAdaptCanvasToContainer.bind(this), 500), this.handleCopyEventBound = this.handleCopyEvent.bind(this), this.handlePasteEventBound = this.handlePasteEvent.bind(this), this.handleUndoRedoEventBound = this.handleUndoRedoEvent.bind(this), this.handleUndoRedoKeyUpBound = this.handleUndoRedoKeyUp.bind(this), this.handleSelectAllEventBound = this.handleSelectAllEvent.bind(this), this.handleDeleteObjectsEventBound = this.handleDeleteObjectsEvent.bind(this), this.handleSpaceKeyDownBound = this.handleSpaceKeyDown.bind(this), this.handleSpaceKeyUpBound = this.handleSpaceKeyUp.bind(this), this.handleObjectModifiedHistoryBound = U.debounce(this.handleObjectModifiedHistory.bind(this), 300), this.handleObjectRotatingHistoryBound = U.debounce(this.handleObjectRotatingHistory.bind(this), 300), this.handleObjectAddedHistoryBound = this.handleObjectAddedHistory.bind(this), this.handleObjectRemovedHistoryBound = this.handleObjectRemovedHistory.bind(this), this.handleOverlayUpdateBound = this.handleOverlayUpdate.bind(this), this.handleCanvasDragStartBound = this.handleCanvasDragStart.bind(this), this.handleCanvasDraggingBound = this.handleCanvasDragging.bind(this), this.handleCanvasDragEndBound = this.handleCanvasDragEnd.bind(this), this.handleMouseWheelZoomBound = this.handleMouseWheelZoom.bind(this), this.handleBringToFrontBound = this.handleBringToFront.bind(this), this.handleResetObjectFitBound = this.handleResetObjectFit.bind(this), this.handleLockedSelectionBound = this._filterLockedSelection.bind(this), this.init();
|
|
53
53
|
}
|
|
54
54
|
/**
|
|
55
55
|
* Инициализация всех обработчиков согласно опциям.
|
|
56
56
|
*/
|
|
57
57
|
init() {
|
|
58
|
-
|
|
58
|
+
const {
|
|
59
59
|
adaptCanvasToContainer: e,
|
|
60
60
|
canvasDragging: t,
|
|
61
61
|
mouseWheelZooming: a,
|
|
62
62
|
bringToFrontOnSelection: r,
|
|
63
|
-
copyObjectsByHotkey:
|
|
64
|
-
pasteImageFromClipboard:
|
|
65
|
-
undoRedoByHotKeys:
|
|
63
|
+
copyObjectsByHotkey: i,
|
|
64
|
+
pasteImageFromClipboard: n,
|
|
65
|
+
undoRedoByHotKeys: o,
|
|
66
66
|
selectAllByHotkey: c,
|
|
67
67
|
deleteObjectsByHotkey: u,
|
|
68
68
|
resetObjectFitByDoubleClick: l
|
|
69
69
|
} = this.options;
|
|
70
|
-
t && (this.canvas.on("mouse:down", this.handleCanvasDragStartBound), this.canvas.on("mouse:move", this.handleCanvasDraggingBound), this.canvas.on("mouse:up", this.handleCanvasDragEndBound), document.addEventListener("keydown", this.handleSpaceKeyDownBound, {
|
|
71
|
-
capture: !0
|
|
72
|
-
}), document.addEventListener("keyup", this.handleSpaceKeyUpBound, {
|
|
73
|
-
capture: !0
|
|
74
|
-
})), a && this.canvas.on("mouse:wheel", this.handleMouseWheelZoomBound), r && (this.canvas.on("selection:created", this.handleBringToFrontBound), this.canvas.on("selection:updated", this.handleBringToFrontBound)), l && this.canvas.on("mouse:dblclick", this.handleResetObjectFitBound), e && window.addEventListener("resize", this.handleAdaptCanvasToContainerBound, {
|
|
75
|
-
capture: !0
|
|
76
|
-
}), n && document.addEventListener("keydown", this.handleCopyEventBound, {
|
|
77
|
-
capture: !0
|
|
78
|
-
}), i && document.addEventListener("paste", this.handlePasteEventBound, {
|
|
79
|
-
capture: !0
|
|
80
|
-
}), s && (document.addEventListener("keydown", this.handleUndoRedoEventBound, {
|
|
81
|
-
capture: !0
|
|
82
|
-
}), document.addEventListener("keyup", this.handleUndoRedoKeyUpBound, {
|
|
83
|
-
capture: !0
|
|
84
|
-
})), c && document.addEventListener("keydown", this.handleSelectAllEventBound, {
|
|
85
|
-
capture: !0
|
|
86
|
-
}), u && document.addEventListener("keydown", this.handleDeleteObjectsEventBound, {
|
|
87
|
-
capture: !0
|
|
88
|
-
}), 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.bind(this)), this.canvas.on("selection:updated", this.handleLockedSelectionBound.bind(this));
|
|
70
|
+
t && (this.canvas.on("mouse:down", this.handleCanvasDragStartBound), this.canvas.on("mouse:move", this.handleCanvasDraggingBound), this.canvas.on("mouse:up", this.handleCanvasDragEndBound), document.addEventListener("keydown", this.handleSpaceKeyDownBound, { capture: !0 }), document.addEventListener("keyup", this.handleSpaceKeyUpBound, { capture: !0 })), a && this.canvas.on("mouse:wheel", this.handleMouseWheelZoomBound), r && (this.canvas.on("selection:created", this.handleBringToFrontBound), this.canvas.on("selection:updated", this.handleBringToFrontBound)), l && this.canvas.on("mouse:dblclick", this.handleResetObjectFitBound), e && window.addEventListener("resize", this.handleAdaptCanvasToContainerBound, { capture: !0 }), i && document.addEventListener("keydown", this.handleCopyEventBound, { capture: !0 }), n && document.addEventListener("paste", this.handlePasteEventBound, { capture: !0 }), o && (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.bind(this)), this.canvas.on("selection:updated", this.handleLockedSelectionBound.bind(this));
|
|
89
71
|
}
|
|
90
72
|
/**
|
|
91
73
|
* При массовом выделении объектов удаляем из него залоченные.
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
if (n.length === 1) {
|
|
107
|
-
this.canvas.setActiveObject(n[0]);
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
|
-
var i = new P(n, {
|
|
111
|
-
canvas: this.canvas
|
|
112
|
-
});
|
|
113
|
-
this.canvas.setActiveObject(i), this.canvas.requestRenderAll();
|
|
114
|
-
}
|
|
74
|
+
* @param {{ selected: FabricObject[], e?: TPointerEvent }} params - параметры события
|
|
75
|
+
* @param {FabricObject[]} params.selected - массив выделенных объектов
|
|
76
|
+
* @param {TPointerEvent} [params.e] - событие указателя (опционально)
|
|
77
|
+
*/
|
|
78
|
+
_filterLockedSelection({ selected: e, e: t }) {
|
|
79
|
+
if (!(e != null && e.length) || !(t instanceof MouseEvent) || e.length === 1 || !e.some((n) => n.locked)) return;
|
|
80
|
+
const r = e.filter((n) => !n.locked);
|
|
81
|
+
if (r.length === 0) {
|
|
82
|
+
this.canvas.discardActiveObject();
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
if (r.length === 1) {
|
|
86
|
+
this.canvas.setActiveObject(r[0]);
|
|
87
|
+
return;
|
|
115
88
|
}
|
|
89
|
+
const i = new Y(r, {
|
|
90
|
+
canvas: this.canvas
|
|
91
|
+
});
|
|
92
|
+
this.canvas.setActiveObject(i), this.canvas.requestRenderAll();
|
|
116
93
|
}
|
|
117
94
|
/**
|
|
118
95
|
* Обработчики для сохранения состояния редактора в истории.
|
|
@@ -134,9 +111,7 @@ class z {
|
|
|
134
111
|
* Обновление overlayMask при добавлении объектов или выделении.
|
|
135
112
|
*/
|
|
136
113
|
handleOverlayUpdate() {
|
|
137
|
-
|
|
138
|
-
interactionBlocker: e
|
|
139
|
-
} = this.editor;
|
|
114
|
+
const { interactionBlocker: e } = this.editor;
|
|
140
115
|
!e.isBlocked || !e.overlayMask || this.editor.interactionBlocker.refresh();
|
|
141
116
|
}
|
|
142
117
|
// --- Глобальные DOM-обработчики ---
|
|
@@ -145,34 +120,18 @@ class z {
|
|
|
145
120
|
* Адаптирует канвас к размерам контейнера.
|
|
146
121
|
*/
|
|
147
122
|
handleAdaptCanvasToContainer() {
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
height: t
|
|
151
|
-
} = this.editor.montageArea;
|
|
152
|
-
this.editor.canvasManager.setResolutionWidth(e, {
|
|
153
|
-
adaptCanvasToContainer: !0,
|
|
154
|
-
withoutSave: !0
|
|
155
|
-
}), this.editor.canvasManager.setResolutionHeight(t, {
|
|
156
|
-
adaptCanvasToContainer: !0,
|
|
157
|
-
withoutSave: !0
|
|
158
|
-
}), this.editor.canvasManager.centerMontageArea(), this.editor.selectionManager.selectAll(), this.editor.transformManager.fitObject({
|
|
159
|
-
fitAsOneObject: !0,
|
|
160
|
-
withoutSave: !0
|
|
161
|
-
});
|
|
123
|
+
const { width: e, height: t } = this.editor.montageArea;
|
|
124
|
+
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 });
|
|
162
125
|
}
|
|
163
126
|
/**
|
|
164
127
|
* Обработчик для Ctrl+C (копирование).
|
|
165
|
-
* @param {
|
|
128
|
+
* @param {KeyboardEvent} event — объект события
|
|
166
129
|
* @param {Boolean} event.ctrlKey — зажата ли клавиша Ctrl
|
|
167
130
|
* @param {Boolean} event.metaKey — зажата ли клавиша Cmd (для Mac)
|
|
168
131
|
* @param {String} event.code — код клавиши
|
|
169
132
|
*/
|
|
170
133
|
handleCopyEvent(e) {
|
|
171
|
-
|
|
172
|
-
ctrlKey: t,
|
|
173
|
-
metaKey: a,
|
|
174
|
-
code: r
|
|
175
|
-
} = e;
|
|
134
|
+
const { ctrlKey: t, metaKey: a, code: r } = e;
|
|
176
135
|
!t && !a || r !== "KeyC" || (e.preventDefault(), this.editor.clipboardManager.copy());
|
|
177
136
|
}
|
|
178
137
|
/**
|
|
@@ -183,39 +142,28 @@ class z {
|
|
|
183
142
|
*
|
|
184
143
|
* TODO: Попробовать вынести методы в классы-менеджеры.
|
|
185
144
|
*/
|
|
186
|
-
handlePasteEvent(e) {
|
|
187
|
-
var
|
|
188
|
-
|
|
189
|
-
} = e;
|
|
190
|
-
if (
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
}, c.readAsDataURL(s);
|
|
145
|
+
handlePasteEvent({ clipboardData: e }) {
|
|
146
|
+
var n;
|
|
147
|
+
if (!((n = e == null ? void 0 : e.items) != null && n.length)) return;
|
|
148
|
+
const { imageManager: t } = this.editor, { items: a } = e, r = a[a.length - 1];
|
|
149
|
+
if (r.type.indexOf("image") !== -1) {
|
|
150
|
+
const o = r.getAsFile();
|
|
151
|
+
if (!o) return;
|
|
152
|
+
const c = new FileReader();
|
|
153
|
+
c.onload = (u) => {
|
|
154
|
+
u.target && this.editor.imageManager.importImage({ source: u.target.result });
|
|
155
|
+
}, c.readAsDataURL(o);
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
const i = e.getData("text/html");
|
|
159
|
+
if (i) {
|
|
160
|
+
const u = new DOMParser().parseFromString(i, "text/html").querySelector("img");
|
|
161
|
+
if (u != null && u.src) {
|
|
162
|
+
t.importImage({ source: u.src });
|
|
205
163
|
return;
|
|
206
164
|
}
|
|
207
|
-
var u = a.getData("text/html");
|
|
208
|
-
if (u) {
|
|
209
|
-
var l = new DOMParser(), d = l.parseFromString(u, "text/html"), h = d.querySelector("img");
|
|
210
|
-
if (h != null && h.src) {
|
|
211
|
-
r.importImage({
|
|
212
|
-
source: h.src
|
|
213
|
-
});
|
|
214
|
-
return;
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
this.editor.clipboardManager.paste();
|
|
218
165
|
}
|
|
166
|
+
this.editor.clipboardManager.paste();
|
|
219
167
|
}
|
|
220
168
|
/**
|
|
221
169
|
* Обработчик для отмены/повтора (Ctrl+Z/Ctrl+Y).
|
|
@@ -225,27 +173,18 @@ class z {
|
|
|
225
173
|
* @param {String} event.code — код клавиши
|
|
226
174
|
*/
|
|
227
175
|
handleUndoRedoEvent(e) {
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
metaKey: r,
|
|
233
|
-
code: n,
|
|
234
|
-
repeat: i
|
|
235
|
-
} = e;
|
|
236
|
-
!a && !r || i || t.isUndoRedoKeyPressed || (n === "KeyZ" ? (e.preventDefault(), t.isUndoRedoKeyPressed = !0, yield t.editor.historyManager.undo()) : n === "KeyY" && (e.preventDefault(), t.isUndoRedoKeyPressed = !0, yield t.editor.historyManager.redo()));
|
|
237
|
-
})();
|
|
176
|
+
return Q(this, null, function* () {
|
|
177
|
+
const { ctrlKey: t, metaKey: a, code: r, repeat: i } = e;
|
|
178
|
+
!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()));
|
|
179
|
+
});
|
|
238
180
|
}
|
|
239
181
|
/**
|
|
240
182
|
* Обработчик для отпускания клавиш Ctrl+Z/Ctrl+Y.
|
|
241
183
|
* @param {Object} event — объект события
|
|
242
184
|
* @param {String} event.code — код клавиши
|
|
243
185
|
*/
|
|
244
|
-
handleUndoRedoKeyUp(e) {
|
|
245
|
-
|
|
246
|
-
code: t
|
|
247
|
-
} = e;
|
|
248
|
-
(t === "KeyZ" || t === "KeyY") && (this.isUndoRedoKeyPressed = !1);
|
|
186
|
+
handleUndoRedoKeyUp({ code: e }) {
|
|
187
|
+
(e === "KeyZ" || e === "KeyY") && (this.isUndoRedoKeyPressed = !1);
|
|
249
188
|
}
|
|
250
189
|
/**
|
|
251
190
|
* Обработчик для выделения всех объектов (Ctrl+A).
|
|
@@ -255,11 +194,7 @@ class z {
|
|
|
255
194
|
* @param {String} event.code — код клавиши
|
|
256
195
|
*/
|
|
257
196
|
handleSelectAllEvent(e) {
|
|
258
|
-
|
|
259
|
-
ctrlKey: t,
|
|
260
|
-
metaKey: a,
|
|
261
|
-
code: r
|
|
262
|
-
} = e;
|
|
197
|
+
const { ctrlKey: t, metaKey: a, code: r } = e;
|
|
263
198
|
!t && !a || r !== "KeyA" || (e.preventDefault(), this.editor.selectionManager.selectAll());
|
|
264
199
|
}
|
|
265
200
|
/**
|
|
@@ -277,23 +212,17 @@ class z {
|
|
|
277
212
|
* @param {String} event.code — код клавиши
|
|
278
213
|
*/
|
|
279
214
|
handleSpaceKeyDown(e) {
|
|
280
|
-
if (e.code
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
i.set({
|
|
292
|
-
selectable: !1,
|
|
293
|
-
evented: !1
|
|
294
|
-
});
|
|
295
|
-
}));
|
|
296
|
-
}
|
|
215
|
+
if (e.code !== "Space") return;
|
|
216
|
+
const { canvas: t, editor: a, isSpacePressed: r, isDragging: i } = this;
|
|
217
|
+
r || i || (this.isSpacePressed = !0, e.preventDefault(), t.set({
|
|
218
|
+
selection: !1,
|
|
219
|
+
defaultCursor: "grab"
|
|
220
|
+
}), t.setCursor("grab"), a.canvasManager.getObjects().forEach((n) => {
|
|
221
|
+
n.set({
|
|
222
|
+
selectable: !1,
|
|
223
|
+
evented: !1
|
|
224
|
+
});
|
|
225
|
+
}));
|
|
297
226
|
}
|
|
298
227
|
/**
|
|
299
228
|
* Обработчик для отпускания пробела.
|
|
@@ -303,7 +232,7 @@ class z {
|
|
|
303
232
|
* @param {String} event.code — код клавиши
|
|
304
233
|
*/
|
|
305
234
|
handleSpaceKeyUp(e) {
|
|
306
|
-
e.code === "Space" && (this.isSpacePressed = !1, this.
|
|
235
|
+
e.code === "Space" && (this.isSpacePressed = !1, this.isDragging && this.handleCanvasDragEnd(), this.canvas.set({
|
|
307
236
|
defaultCursor: "default",
|
|
308
237
|
selection: !0
|
|
309
238
|
}), this.canvas.setCursor("default"), this.editor.canvasManager.getObjects().forEach((t) => {
|
|
@@ -316,115 +245,82 @@ class z {
|
|
|
316
245
|
// --- Обработчики для событий canvas (Fabric) ---
|
|
317
246
|
/**
|
|
318
247
|
* Начало перетаскивания канваса (срабатывает при mouse:down и зажатом пробеле).
|
|
319
|
-
* @param {
|
|
320
|
-
* @param {
|
|
248
|
+
* @param {TPointerEventInfo<TPointerEvent>} options - событие указателя
|
|
249
|
+
* @param {TPointerEvent} options.e — объект события (MouseEvent или TouchEvent)
|
|
321
250
|
*/
|
|
322
|
-
handleCanvasDragStart(e) {
|
|
323
|
-
|
|
324
|
-
e: t
|
|
325
|
-
} = e;
|
|
326
|
-
this.isSpacePressed && (this.canvas.set({
|
|
327
|
-
isDragging: !0,
|
|
328
|
-
defaultCursor: "grabbing"
|
|
329
|
-
}), this.canvas.setCursor("grabbing"), this.canvas.lastPosX = t.clientX, this.canvas.lastPosY = t.clientY);
|
|
251
|
+
handleCanvasDragStart({ e }) {
|
|
252
|
+
!this.isSpacePressed || !(e instanceof MouseEvent) || (this.isDragging = !0, this.lastMouseX = e.clientX, this.lastMouseY = e.clientY, this.canvas.setCursor("grabbing"));
|
|
330
253
|
}
|
|
331
254
|
/**
|
|
332
255
|
* Перетаскивание канваса (mouse:move).
|
|
333
|
-
* @param {
|
|
334
|
-
* @param {
|
|
256
|
+
* @param {TPointerEventInfo<TPointerEvent>} options
|
|
257
|
+
* @param {MouseEvent} options.e — объект события
|
|
335
258
|
*
|
|
336
259
|
* TODO: Надо как-то ограничить область перетаскивания, чтобы канвас не уходил сильно далеко за пределы экрана
|
|
337
260
|
*/
|
|
338
|
-
handleCanvasDragging(e) {
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
if (!(!this.canvas.isDragging || !this.isSpacePressed)) {
|
|
343
|
-
var a = this.canvas.viewportTransform;
|
|
344
|
-
a[4] += t.clientX - this.canvas.lastPosX, a[5] += t.clientY - this.canvas.lastPosY, this.canvas.requestRenderAll(), this.canvas.lastPosX = t.clientX, this.canvas.lastPosY = t.clientY;
|
|
345
|
-
}
|
|
261
|
+
handleCanvasDragging({ e }) {
|
|
262
|
+
if (!this.isDragging || !this.isSpacePressed || !(e instanceof MouseEvent)) return;
|
|
263
|
+
const t = this.canvas.viewportTransform;
|
|
264
|
+
t[4] += e.clientX - this.lastMouseX, t[5] += e.clientY - this.lastMouseY, this.canvas.requestRenderAll(), this.lastMouseX = e.clientX, this.lastMouseY = e.clientY;
|
|
346
265
|
}
|
|
347
266
|
/**
|
|
348
267
|
* Завершение перетаскивания канваса (mouse:up).
|
|
349
268
|
* Сохраняет новое положение канваса.
|
|
350
269
|
*/
|
|
351
270
|
handleCanvasDragEnd() {
|
|
352
|
-
this.
|
|
271
|
+
this.isDragging && (this.canvas.setViewportTransform(this.canvas.viewportTransform), this.isDragging = !1, this.isSpacePressed && (this.canvas.set("defaultCursor", "grab"), this.canvas.setCursor("grab")));
|
|
353
272
|
}
|
|
354
273
|
/**
|
|
355
274
|
* Обработчик зума колесиком мыши. Работает при зажатом Ctrl или Cmd.
|
|
356
|
-
* @param {
|
|
357
|
-
* @param {
|
|
275
|
+
* @param {TPointerEventInfo<WheelEvent>} options - правильно!
|
|
276
|
+
* @param {WheelEvent} options.e — объект события
|
|
358
277
|
*/
|
|
359
|
-
handleMouseWheelZoom(e) {
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
if (!(!t.ctrlKey && !t.metaKey)) {
|
|
364
|
-
var a = 1e-3, r = -t.deltaY * a;
|
|
365
|
-
this.editor.transformManager.zoom(r), t.preventDefault(), t.stopPropagation();
|
|
366
|
-
}
|
|
278
|
+
handleMouseWheelZoom({ e }) {
|
|
279
|
+
if (!e.ctrlKey && !e.metaKey) return;
|
|
280
|
+
const a = -e.deltaY * 1e-3;
|
|
281
|
+
this.editor.transformManager.zoom(a), e.preventDefault(), e.stopPropagation();
|
|
367
282
|
}
|
|
368
283
|
/**
|
|
369
284
|
* Обработчик, поднимающий выделенные объекты на передний план.
|
|
370
|
-
* @param {
|
|
371
|
-
* @param {
|
|
285
|
+
* @param {{ selected: FabricObject[] }} event - объект события выделения
|
|
286
|
+
* @param {FabricObject[]} event.selected - массив выбранных объектов
|
|
372
287
|
*/
|
|
373
|
-
handleBringToFront(e) {
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
} = e;
|
|
377
|
-
t != null && t.length && t.forEach((a) => {
|
|
378
|
-
this.editor.layerManager.bringToFront(a);
|
|
288
|
+
handleBringToFront({ selected: e }) {
|
|
289
|
+
e != null && e.length && e.forEach((t) => {
|
|
290
|
+
this.editor.layerManager.bringToFront(t);
|
|
379
291
|
});
|
|
380
292
|
}
|
|
381
293
|
/**
|
|
382
294
|
* Обработчик сброса объекта по двойному клику.
|
|
295
|
+
* @param {TPointerEventInfo<TPointerEvent>} options - объект события fabric
|
|
383
296
|
*/
|
|
384
297
|
handleResetObjectFit(e) {
|
|
385
|
-
|
|
386
|
-
target: t
|
|
387
|
-
} = e;
|
|
298
|
+
const t = e == null ? void 0 : e.target;
|
|
388
299
|
t && this.editor.transformManager.resetObject(t);
|
|
389
300
|
}
|
|
390
301
|
/**
|
|
391
302
|
* Метод для удаления всех слушателей
|
|
392
303
|
*/
|
|
393
304
|
destroy() {
|
|
394
|
-
window.removeEventListener("resize", this.handleAdaptCanvasToContainerBound, {
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
}), document.removeEventListener("keyup", this.handleUndoRedoKeyUpBound, {
|
|
403
|
-
capture: !0
|
|
404
|
-
}), document.removeEventListener("keydown", this.handleSelectAllEventBound, {
|
|
405
|
-
capture: !0
|
|
406
|
-
}), document.removeEventListener("keydown", this.handleDeleteObjectsEventBound, {
|
|
407
|
-
capture: !0
|
|
408
|
-
}), this.options.canvasDragging && (this.canvas.off("mouse:down", this.handleCanvasDragStartBound), this.canvas.off("mouse:move", this.handleCanvasDraggingBound), this.canvas.off("mouse:up", this.handleCanvasDragEndBound), document.removeEventListener("keydown", this.handleSpaceKeyDownBound, {
|
|
409
|
-
capture: !0
|
|
410
|
-
}), document.removeEventListener("keyup", this.handleSpaceKeyUpBound, {
|
|
411
|
-
capture: !0
|
|
412
|
-
})), this.options.mouseWheelZooming && this.canvas.off("mouse:wheel", this.handleMouseWheelZoomBound), this.options.bringToFrontOnSelection && (this.canvas.off("selection:created", this.handleBringToFrontBound), this.canvas.off("selection:updated", this.handleBringToFrontBound)), this.options.resetObjectFitByDoubleClick && this.canvas.off("mouse:dblclick", this.handleResetObjectFitBound), this.canvas.off("object:modified", this.handleObjectModifiedHistoryBound), this.canvas.off("object:rotating", this.handleObjectRotatingHistoryBound), this.canvas.off("object:added", this.handleObjectAddedHistoryBound), this.canvas.off("object:removed", this.handleObjectRemovedHistoryBound), this.canvas.off("object:added", this.handleOverlayUpdateBound), this.canvas.off("selection:created", this.handleOverlayUpdateBound), this.canvas.off("selection:created", this.handleLockedSelectionBound.bind(this)), this.canvas.off("selection:updated", this.handleLockedSelectionBound.bind(this));
|
|
413
|
-
}
|
|
414
|
-
// Дебаунс для снижения частоты сохранения состояния
|
|
305
|
+
window.removeEventListener("resize", this.handleAdaptCanvasToContainerBound, { 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.bind(this)), this.canvas.off("selection:updated", this.handleLockedSelectionBound.bind(this));
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Дебаунс для снижения частоты вызова функции.
|
|
309
|
+
* @param fn — функция-обработчик
|
|
310
|
+
* @param delay — задержка в миллисекундах
|
|
311
|
+
* @returns новую обёртку-обработчик
|
|
312
|
+
*/
|
|
415
313
|
static debounce(e, t) {
|
|
416
|
-
|
|
417
|
-
return function() {
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
clearTimeout(a), a = setTimeout(() => {
|
|
422
|
-
e.apply(s, n);
|
|
314
|
+
let a = null;
|
|
315
|
+
return function(...r) {
|
|
316
|
+
const i = this;
|
|
317
|
+
a && clearTimeout(a), a = setTimeout(() => {
|
|
318
|
+
e.apply(i, r);
|
|
423
319
|
}, t);
|
|
424
320
|
};
|
|
425
321
|
}
|
|
426
322
|
}
|
|
427
|
-
class
|
|
323
|
+
class Ve {
|
|
428
324
|
/**
|
|
429
325
|
* @description Класс для динамической загрузки внешних модулей.
|
|
430
326
|
*/
|
|
@@ -442,7 +338,7 @@ class We {
|
|
|
442
338
|
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, '"')));
|
|
443
339
|
}
|
|
444
340
|
}
|
|
445
|
-
class
|
|
341
|
+
class Ge {
|
|
446
342
|
/**
|
|
447
343
|
* @param {string|URL} [scriptUrl] — URL скрипта воркера.
|
|
448
344
|
* По-умолчанию использует файл рядом с этим модулем
|
|
@@ -469,10 +365,10 @@ class Fe {
|
|
|
469
365
|
} = e, {
|
|
470
366
|
requestId: a,
|
|
471
367
|
success: r,
|
|
472
|
-
data:
|
|
473
|
-
error:
|
|
474
|
-
} = t,
|
|
475
|
-
|
|
368
|
+
data: i,
|
|
369
|
+
error: n
|
|
370
|
+
} = t, o = this._callbacks.get(a);
|
|
371
|
+
o && (r ? o.resolve(i) : o.reject(new Error(n)), this._callbacks.delete(a));
|
|
476
372
|
}
|
|
477
373
|
/**
|
|
478
374
|
* Универсальный метод отправки команды в воркер
|
|
@@ -483,10 +379,10 @@ class Fe {
|
|
|
483
379
|
*/
|
|
484
380
|
post(e, t) {
|
|
485
381
|
var a = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : [], r = "".concat(e, ":").concat(w(8));
|
|
486
|
-
return new Promise((
|
|
382
|
+
return new Promise((i, n) => {
|
|
487
383
|
this._callbacks.set(r, {
|
|
488
|
-
resolve:
|
|
489
|
-
reject:
|
|
384
|
+
resolve: i,
|
|
385
|
+
reject: n
|
|
490
386
|
}), this.worker.postMessage({
|
|
491
387
|
action: e,
|
|
492
388
|
payload: t,
|
|
@@ -501,50 +397,50 @@ class Fe {
|
|
|
501
397
|
this.worker.terminate();
|
|
502
398
|
}
|
|
503
399
|
}
|
|
504
|
-
var I = 12,
|
|
505
|
-
function
|
|
506
|
-
var
|
|
507
|
-
|
|
400
|
+
var I = 12, Xe = 2, q = 8, ee = 20, Qe = 100, te = 20, ae = 8, Je = 100, re = 32, ie = 1, Ke = "#2B2D33", ne = "#3D8BF4", se = "#FFFFFF";
|
|
401
|
+
function W(s, e, t, a, r) {
|
|
402
|
+
var i = I, n = Xe;
|
|
403
|
+
s.save(), s.translate(e, t), s.rotate(P.degreesToRadians(r.angle)), s.fillStyle = se, s.strokeStyle = ne, s.lineWidth = ie, s.beginPath(), s.roundRect(-12 / 2, -12 / 2, i, i, n), s.fill(), s.stroke(), s.restore();
|
|
508
404
|
}
|
|
509
|
-
function
|
|
510
|
-
var
|
|
511
|
-
|
|
405
|
+
function fe(s, e, t, a, r) {
|
|
406
|
+
var i = q, n = ee, o = Qe;
|
|
407
|
+
s.save(), s.translate(e, t), s.rotate(P.degreesToRadians(r.angle)), s.fillStyle = se, s.strokeStyle = ne, s.lineWidth = ie, s.beginPath(), s.roundRect(-8 / 2, -20 / 2, i, n, o), s.fill(), s.stroke(), s.restore();
|
|
512
408
|
}
|
|
513
|
-
function
|
|
514
|
-
var
|
|
515
|
-
|
|
409
|
+
function Me(s, e, t, a, r) {
|
|
410
|
+
var i = te, n = ae, o = Je;
|
|
411
|
+
s.save(), s.translate(e, t), s.rotate(P.degreesToRadians(r.angle)), s.fillStyle = se, s.strokeStyle = ne, s.lineWidth = ie, s.beginPath(), s.roundRect(-20 / 2, -8 / 2, i, n, o), s.fill(), s.stroke(), s.restore();
|
|
516
412
|
}
|
|
517
|
-
var
|
|
518
|
-
we.src =
|
|
519
|
-
function
|
|
520
|
-
var
|
|
521
|
-
|
|
413
|
+
var $e = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTE4Ljc1IDQuMzc1djMuNzVhLjYyNS42MjUgMCAwIDEtLjYyNS42MjVoLTMuNzVhLjYyNS42MjUgMCAwIDEgMC0xLjI1aDIuMTRsLTIuMDc3LTEuOTAzLS4wMi0uMDE5YTYuMjUgNi4yNSAwIDEgMC0uMTMgOC45NjcuNjI2LjYyNiAwIDAgMSAuODYuOTA5QTcuNDU2IDcuNDU2IDAgMCAxIDEwIDE3LjVoLS4xMDNhNy41IDcuNSAwIDEgMSA1LjM5Ni0xMi44MTJMMTcuNSA2LjcwM1Y0LjM3NWEuNjI1LjYyNSAwIDAgMSAxLjI1IDBaIi8+PC9zdmc+", we = new Image();
|
|
414
|
+
we.src = $e;
|
|
415
|
+
function qe(s, e, t, a, r) {
|
|
416
|
+
var i = re, n = i / 2;
|
|
417
|
+
s.save(), s.translate(e, t), s.rotate(P.degreesToRadians(r.angle)), s.fillStyle = Ke, s.beginPath(), s.arc(0, 0, n, 0, 2 * Math.PI), s.fill(), s.drawImage(we, -16 / 2, -16 / 2, n, n), s.restore();
|
|
522
418
|
}
|
|
523
|
-
var
|
|
419
|
+
var et = {
|
|
524
420
|
// Угловые точки
|
|
525
421
|
tl: {
|
|
526
|
-
render:
|
|
422
|
+
render: W,
|
|
527
423
|
sizeX: I,
|
|
528
424
|
sizeY: I,
|
|
529
425
|
offsetX: 0,
|
|
530
426
|
offsetY: 0
|
|
531
427
|
},
|
|
532
428
|
tr: {
|
|
533
|
-
render:
|
|
429
|
+
render: W,
|
|
534
430
|
sizeX: I,
|
|
535
431
|
sizeY: I,
|
|
536
432
|
offsetX: 0,
|
|
537
433
|
offsetY: 0
|
|
538
434
|
},
|
|
539
435
|
bl: {
|
|
540
|
-
render:
|
|
436
|
+
render: W,
|
|
541
437
|
sizeX: I,
|
|
542
438
|
sizeY: I,
|
|
543
439
|
offsetX: 0,
|
|
544
440
|
offsetY: 0
|
|
545
441
|
},
|
|
546
442
|
br: {
|
|
547
|
-
render:
|
|
443
|
+
render: W,
|
|
548
444
|
sizeX: I,
|
|
549
445
|
sizeY: I,
|
|
550
446
|
offsetX: 0,
|
|
@@ -552,47 +448,47 @@ var $e = {
|
|
|
552
448
|
},
|
|
553
449
|
// Середина вертикалей
|
|
554
450
|
ml: {
|
|
555
|
-
render:
|
|
556
|
-
sizeX:
|
|
557
|
-
sizeY:
|
|
451
|
+
render: fe,
|
|
452
|
+
sizeX: q,
|
|
453
|
+
sizeY: ee,
|
|
558
454
|
offsetX: 0,
|
|
559
455
|
offsetY: 0
|
|
560
456
|
},
|
|
561
457
|
mr: {
|
|
562
|
-
render:
|
|
563
|
-
sizeX:
|
|
564
|
-
sizeY:
|
|
458
|
+
render: fe,
|
|
459
|
+
sizeX: q,
|
|
460
|
+
sizeY: ee,
|
|
565
461
|
offsetX: 0,
|
|
566
462
|
offsetY: 0
|
|
567
463
|
},
|
|
568
464
|
// Середина горизонталей
|
|
569
465
|
mt: {
|
|
570
|
-
render:
|
|
571
|
-
sizeX:
|
|
572
|
-
sizeY:
|
|
466
|
+
render: Me,
|
|
467
|
+
sizeX: te,
|
|
468
|
+
sizeY: ae,
|
|
573
469
|
offsetX: 0,
|
|
574
470
|
offsetY: 0
|
|
575
471
|
},
|
|
576
472
|
mb: {
|
|
577
|
-
render:
|
|
578
|
-
sizeX:
|
|
579
|
-
sizeY:
|
|
473
|
+
render: Me,
|
|
474
|
+
sizeX: te,
|
|
475
|
+
sizeY: ae,
|
|
580
476
|
offsetX: 0,
|
|
581
477
|
offsetY: 0
|
|
582
478
|
},
|
|
583
479
|
// Специальный «rotate» контрол
|
|
584
480
|
mtr: {
|
|
585
|
-
render:
|
|
586
|
-
sizeX:
|
|
587
|
-
sizeY:
|
|
481
|
+
render: qe,
|
|
482
|
+
sizeX: re,
|
|
483
|
+
sizeY: re,
|
|
588
484
|
offsetX: 0,
|
|
589
485
|
offsetY: -32
|
|
590
486
|
}
|
|
591
487
|
};
|
|
592
|
-
class
|
|
488
|
+
class tt {
|
|
593
489
|
static apply() {
|
|
594
|
-
var e =
|
|
595
|
-
Object.entries(
|
|
490
|
+
var e = xe.createObjectDefaultControls();
|
|
491
|
+
Object.entries(et).forEach((t) => {
|
|
596
492
|
var [a, r] = t;
|
|
597
493
|
Object.assign(e[a], {
|
|
598
494
|
render: r.render,
|
|
@@ -601,34 +497,34 @@ class qe {
|
|
|
601
497
|
offsetX: r.offsetX,
|
|
602
498
|
offsetY: r.offsetY
|
|
603
499
|
});
|
|
604
|
-
}),
|
|
500
|
+
}), Be.ownDefaults.controls = e;
|
|
605
501
|
}
|
|
606
502
|
}
|
|
607
|
-
var
|
|
608
|
-
function
|
|
503
|
+
var at = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNi44NzUgMi41YS42MjUuNjI1IDAgMCAwLS42MjUuNjI0VjYuMjVIMy4xMjVhLjYyNS42MjUgMCAwIDAtLjYyNS42MjV2MTBjMCAuMzQ1LjI4LjYyNS42MjUuNjI1aDEwYy4zNDUgMCAuNjI1LS4yOC42MjUtLjYyNXYtMy4xMjZoMy4xMjVjLjM0NSAwIC42MjUtLjI4LjYyNS0uNjI1di0xMGEuNjI1LjYyNSAwIDAgMC0uNjI1LS42MjVoLTEwWm02Ljg3NSAxMGgyLjVWMy43NUg3LjV2Mi41aDUuNjI1Yy4zNDUgMCAuNjI1LjI4LjYyNS42MjV2NS42MjRabS0xMCAzLjc1VjcuNWg4Ljc1djguNzVIMy43NVoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==", rt = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMi41IDcuNWMwLS42OS41Ni0xLjI1IDEuMjUtMS4yNWgxMi41Yy42OSAwIDEuMjUuNTYgMS4yNSAxLjI1djguNzVjMCAuNjktLjU2IDEuMjUtMS4yNSAxLjI1SDMuNzVjLS42OSAwLTEuMjUtLjU2LTEuMjUtMS4yNVY3LjVabTEzLjc1IDBIMy43NXY4Ljc1aDEyLjVWNy41WiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTAgMS44NzVhMi4xODggMi4xODggMCAwIDAtMi4xODggMi4xODh2Mi44MTJhLjYyNS42MjUgMCAxIDEtMS4yNSAwVjQuMDYyYTMuNDM3IDMuNDM3IDAgMSAxIDYuODc1IDB2Mi44MTNhLjYyNS42MjUgMCAxIDEtMS4yNSAwVjQuMDYyQTIuMTg4IDIuMTg4IDAgMCAwIDEwIDEuODc2WiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTEwIDEyLjgxM2EuOTM3LjkzNyAwIDEgMCAwLTEuODc1LjkzNy45MzcgMCAwIDAgMCAxLjg3NFoiLz48L3N2Zz4=", it = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTE2LjI1IDYuMjVINy41VjQuMzc1YTIuNSAyLjUgMCAwIDEgMi41LTIuNWMxLjIgMCAyLjI4MS44NiAyLjUxMiAyYS42MjUuNjI1IDAgMCAwIDEuMjI2LS4yNWMtLjM1NC0xLjczOC0xLjkyNS0zLTMuNzM4LTNhMy43NTQgMy43NTQgMCAwIDAtMy43NSAzLjc1VjYuMjVoLTIuNUExLjI1IDEuMjUgMCAwIDAgMi41IDcuNXY4Ljc1YTEuMjUgMS4yNSAwIDAgMCAxLjI1IDEuMjVoMTIuNWExLjI1IDEuMjUgMCAwIDAgMS4yNS0xLjI1VjcuNWExLjI1IDEuMjUgMCAwIDAtMS4yNS0xLjI1Wm0wIDEwSDMuNzVWNy41aDEyLjV2OC43NVptLTUuMzEzLTQuMzc1YS45MzcuOTM3IDAgMSAxLTEuODc0IDAgLjkzNy45MzcgMCAwIDEgMS44NzQgMFoiLz48L3N2Zz4K", nt = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTIuNSA4LjEyNSAxMCAxMi41bDcuNS00LjM3NUwxMCAzLjc1IDIuNSA4LjEyNVoiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik05LjY4NSAzLjIxYS42MjUuNjI1IDAgMCAxIC42MyAwbDcuNSA0LjM3NWEuNjI1LjYyNSAwIDAgMSAwIDEuMDhsLTcuNSA0LjM3NWEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtNy41LTQuMzc1YS42MjUuNjI1IDAgMCAxIDAtMS4wOGw3LjUtNC4zNzVaTTMuNzQgOC4xMjUgMTAgMTEuNzc2bDYuMjYtMy42NTFMMTAgNC40NzQgMy43NCA4LjEyNVoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTUuNCA5LjQ2YS42MjUuNjI1IDAgMCAxIC42MyAwTDEwIDExLjc3NmwzLjk3LTIuMzE2YS42MjUuNjI1IDAgMCAxIC42MyAwbDMuMjE1IDEuODc1YS42MjUuNjI1IDAgMCAxIDAgMS4wOGwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEgMC0xLjA4TDUuNCA5LjQ2Wm0tMS42NiAyLjQxNUwxMCAxNS41MjZsNi4yNi0zLjY1MS0xLjk3NC0xLjE1MS0zLjk3MSAyLjMxNmEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtMy45Ny0yLjMxNi0xLjk3NSAxLjE1MVoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==", st = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNOS42ODUgMy4yMWEuNjI1LjYyNSAwIDAgMSAuNjMgMGw3LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEgMCAxLjA4bC03LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEtLjYzIDBsLTcuNS00LjM3NWEuNjI1LjYyNSAwIDAgMSAwLTEuMDhsNy41LTQuMzc1Wk0zLjc0IDguMTI1IDEwIDExLjc3Nmw2LjI2LTMuNjUxTDEwIDQuNDc0IDMuNzQgOC4xMjVaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01LjcxNCAxMCAxMCAxMi41bDQuMjg2LTIuNSAzLjIxNCAxLjg3NUwxMCAxNi4yNWwtNy41LTQuMzc1TDUuNzE0IDEwWiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNS40IDkuNDZhLjYyNS42MjUgMCAwIDEgLjYzIDBMMTAgMTEuNzc2bDMuOTctMi4zMTZhLjYyNS42MjUgMCAwIDEgLjYzIDBsMy4yMTUgMS44NzVhLjYyNS42MjUgMCAwIDEgMCAxLjA4bC03LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEtLjYzIDBsLTcuNS00LjM3NWEuNjI1LjYyNSAwIDAgMSAwLTEuMDhMNS40IDkuNDZabS0xLjY2IDIuNDE1TDEwIDE1LjUyNmw2LjI2LTMuNjUxLTEuOTc0LTEuMTUxLTMuOTcxIDIuMzE2YS42MjUuNjI1IDAgMCAxLS42MyAwbC0zLjk3LTIuMzE2LTEuOTc1IDEuMTUxWiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+", ot = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTIuNSA2LjI1IDcuNSA0LjM3NSA3LjUtNC4zNzVMMTAgMS44NzUgMi41IDYuMjVaIi8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNOS42ODUgMS4zMzVhLjYyNS42MjUgMCAwIDEgLjYzIDBsNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxIDAgMS4wOGwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEgMC0xLjA4bDcuNS00LjM3NVpNMy43NCA2LjI1IDEwIDkuOTAxbDYuMjYtMy42NTFMMTAgMi41OTkgMy43NCA2LjI1WiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNS40IDExLjMzNWEuNjI1LjYyNSAwIDAgMSAuNjMgMEwxMCAxMy42NTFsMy45Ny0yLjMxNmEuNjI1LjYyNSAwIDAgMSAuNjMgMGwzLjIxNSAxLjg3NWEuNjI1LjYyNSAwIDAgMSAwIDEuMDhsLTcuNSA0LjM3NWEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtNy41LTQuMzc1YS42MjUuNjI1IDAgMCAxIDAtMS4wOEw1LjQgMTEuMzM1Wk0zLjc0IDEzLjc1IDEwIDE3LjQwMWw2LjI2LTMuNjUxLTEuOTc0LTEuMTUxLTMuOTcxIDIuMzE2YS42MjUuNjI1IDAgMCAxLS42MyAwbC0zLjk3LTIuMzE2TDMuNzQgMTMuNzVaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01LjQgNy41ODVhLjYyNS42MjUgMCAwIDEgLjYzIDBMMTAgOS45MDFsMy45Ny0yLjMxNmEuNjI1LjYyNSAwIDAgMSAuNjMgMGwzLjIxNSAxLjg3NWEuNjI1LjYyNSAwIDAgMSAwIDEuMDhsLTcuNSA0LjM3NWEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtNy41LTQuMzc1YS42MjUuNjI1IDAgMCAxIDAtMS4wOEw1LjQgNy41ODVaTTMuNzQgMTAgMTAgMTMuNjUxIDE2LjI2IDEwbC0xLjk3NC0xLjE1MS0zLjk3MSAyLjMxNmEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtMy45Ny0yLjMxNkwzLjc0IDEwWiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+", ct = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMS45NiAxMy40MzVhLjYyNS42MjUgMCAwIDEgLjg1NS0uMjI1TDEwIDE3LjQwMWw3LjE4NS00LjE5YS42MjUuNjI1IDAgMCAxIC42MyAxLjA3OWwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEtLjIyNS0uODU1Wk05LjY4NSAxLjMzNWEuNjI1LjYyNSAwIDAgMSAuNjMgMGw3LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEgMCAxLjA4bC03LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEtLjYzIDBsLTcuNS00LjM3NWEuNjI1LjYyNSAwIDAgMSAwLTEuMDhsNy41LTQuMzc1Wk0zLjc0IDYuMjUgMTAgOS45MDFsNi4yNi0zLjY1MUwxMCAyLjU5OSAzLjc0IDYuMjVaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Im01LjcxNCAxMS44NzUgNC4yODYgMi41IDQuMjg2LTIuNUwxNy41IDEzLjc1IDEwIDE4LjEyNSAyLjUgMTMuNzVsMy4yMTQtMS44NzVaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01LjQgMTEuMzM1YS42MjUuNjI1IDAgMCAxIC42MyAwTDEwIDEzLjY1MWwzLjk3LTIuMzE2YS42MjUuNjI1IDAgMCAxIC42MyAwbDMuMjE1IDEuODc1YS42MjUuNjI1IDAgMCAxIDAgMS4wOGwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEgMC0xLjA4TDUuNCAxMS4zMzVaTTMuNzQgMTMuNzUgMTAgMTcuNDAxbDYuMjYtMy42NTEtMS45NzQtMS4xNTEtMy45NzEgMi4zMTZhLjYyNS42MjUgMCAwIDEtLjYzIDBsLTMuOTctMi4zMTZMMy43NCAxMy43NVoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTUuNCA3LjU4NWEuNjI1LjYyNSAwIDAgMSAuNjMgMEwxMCA5LjkwMWwzLjk3LTIuMzE2YS42MjUuNjI1IDAgMCAxIC42MyAwbDMuMjE1IDEuODc1YS42MjUuNjI1IDAgMCAxIDAgMS4wOGwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEgMC0xLjA4TDUuNCA3LjU4NVpNMy43NCAxMCAxMCAxMy42NTEgMTYuMjYgMTBsLTEuOTc0LTEuMTUxLTMuOTcxIDIuMzE2YS42MjUuNjI1IDAgMCAxLS42MyAwbC0zLjk3LTIuMzE2TDMuNzQgMTBaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=", ut = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI0VDNEU0MCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNOC4xMjUgMS4yNUExLjg3NSAxLjg3NSAwIDAgMCA2LjI1IDMuMTI1di42MjVIMy4xMjVhLjYyNS42MjUgMCAwIDAgMCAxLjI1aC42MjV2MTEuMjVBMS4yNSAxLjI1IDAgMCAwIDUgMTcuNWgxMGExLjI1IDEuMjUgMCAwIDAgMS4yNS0xLjI1VjVoLjYyNWEuNjI1LjYyNSAwIDAgMCAwLTEuMjVIMTMuNzV2LS42MjVhMS44NzUgMS44NzUgMCAwIDAtMS44NzUtMS44NzVoLTMuNzVabTQuMzc1IDIuNXYtLjYyNWEuNjI1LjYyNSAwIDAgMC0uNjI1LS42MjVoLTMuNzVhLjYyNS42MjUgMCAwIDAtLjYyNS42MjV2LjYyNWg1Wk01IDE2LjI1VjVoMTB2MTEuMjVINVpNOC4xMjUgNy41Yy4zNDUgMCAuNjI1LjI4LjYyNS42MjV2NWEuNjI1LjYyNSAwIDEgMS0xLjI1IDB2LTVjMC0uMzQ1LjI4LS42MjUuNjI1LS42MjVabTQuMzc1IDUuNjI1di01YS42MjUuNjI1IDAgMCAwLTEuMjUgMHY1YS42MjUuNjI1IDAgMSAwIDEuMjUgMFoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==";
|
|
504
|
+
function je(s, e, t, a, r, i, n) {
|
|
609
505
|
try {
|
|
610
|
-
var
|
|
506
|
+
var o = s[i](n), c = o.value;
|
|
611
507
|
} catch (u) {
|
|
612
508
|
return void t(u);
|
|
613
509
|
}
|
|
614
|
-
|
|
510
|
+
o.done ? e(c) : Promise.resolve(c).then(a, r);
|
|
615
511
|
}
|
|
616
|
-
function
|
|
512
|
+
function dt(s) {
|
|
617
513
|
return function() {
|
|
618
514
|
var e = this, t = arguments;
|
|
619
515
|
return new Promise(function(a, r) {
|
|
620
|
-
var
|
|
621
|
-
function
|
|
622
|
-
|
|
516
|
+
var i = s.apply(e, t);
|
|
517
|
+
function n(c) {
|
|
518
|
+
je(i, a, r, n, o, "next", c);
|
|
623
519
|
}
|
|
624
|
-
function
|
|
625
|
-
|
|
520
|
+
function o(c) {
|
|
521
|
+
je(i, a, r, n, o, "throw", c);
|
|
626
522
|
}
|
|
627
|
-
|
|
523
|
+
n(void 0);
|
|
628
524
|
});
|
|
629
525
|
};
|
|
630
526
|
}
|
|
631
|
-
const
|
|
527
|
+
const B = {
|
|
632
528
|
style: {
|
|
633
529
|
position: "absolute",
|
|
634
530
|
display: "none",
|
|
@@ -687,87 +583,87 @@ const x = {
|
|
|
687
583
|
}],
|
|
688
584
|
offsetTop: 50,
|
|
689
585
|
icons: {
|
|
690
|
-
copyPaste:
|
|
691
|
-
delete:
|
|
692
|
-
lock:
|
|
693
|
-
unlock:
|
|
694
|
-
bringToFront:
|
|
695
|
-
sendToBack:
|
|
696
|
-
bringForward:
|
|
697
|
-
sendBackwards:
|
|
586
|
+
copyPaste: at,
|
|
587
|
+
delete: ut,
|
|
588
|
+
lock: rt,
|
|
589
|
+
unlock: it,
|
|
590
|
+
bringToFront: ot,
|
|
591
|
+
sendToBack: ct,
|
|
592
|
+
bringForward: nt,
|
|
593
|
+
sendBackwards: st
|
|
698
594
|
},
|
|
699
595
|
handlers: {
|
|
700
596
|
copyPaste: function() {
|
|
701
|
-
var
|
|
597
|
+
var s = dt(function* (t) {
|
|
702
598
|
yield t.clipboardManager.copy(), yield t.clipboardManager.paste();
|
|
703
599
|
});
|
|
704
600
|
function e(t) {
|
|
705
|
-
return
|
|
601
|
+
return s.apply(this, arguments);
|
|
706
602
|
}
|
|
707
603
|
return e;
|
|
708
604
|
}(),
|
|
709
|
-
delete: (
|
|
710
|
-
|
|
605
|
+
delete: (s) => {
|
|
606
|
+
s.deletionManager.deleteSelectedObjects();
|
|
711
607
|
},
|
|
712
|
-
lock: (
|
|
713
|
-
|
|
608
|
+
lock: (s) => {
|
|
609
|
+
s.objectLockManager.lockObject();
|
|
714
610
|
},
|
|
715
|
-
unlock: (
|
|
716
|
-
|
|
611
|
+
unlock: (s) => {
|
|
612
|
+
s.objectLockManager.unlockObject();
|
|
717
613
|
},
|
|
718
|
-
bringForward: (
|
|
719
|
-
|
|
614
|
+
bringForward: (s) => {
|
|
615
|
+
s.layerManager.bringForward();
|
|
720
616
|
},
|
|
721
|
-
bringToFront: (
|
|
722
|
-
|
|
617
|
+
bringToFront: (s) => {
|
|
618
|
+
s.layerManager.bringToFront();
|
|
723
619
|
},
|
|
724
|
-
sendToBack: (
|
|
725
|
-
|
|
620
|
+
sendToBack: (s) => {
|
|
621
|
+
s.layerManager.sendToBack();
|
|
726
622
|
},
|
|
727
|
-
sendBackwards: (
|
|
728
|
-
|
|
623
|
+
sendBackwards: (s) => {
|
|
624
|
+
s.layerManager.sendBackwards();
|
|
729
625
|
}
|
|
730
626
|
}
|
|
731
627
|
};
|
|
732
|
-
function
|
|
733
|
-
var t = Object.keys(
|
|
628
|
+
function ye(s, e) {
|
|
629
|
+
var t = Object.keys(s);
|
|
734
630
|
if (Object.getOwnPropertySymbols) {
|
|
735
|
-
var a = Object.getOwnPropertySymbols(
|
|
631
|
+
var a = Object.getOwnPropertySymbols(s);
|
|
736
632
|
e && (a = a.filter(function(r) {
|
|
737
|
-
return Object.getOwnPropertyDescriptor(
|
|
633
|
+
return Object.getOwnPropertyDescriptor(s, r).enumerable;
|
|
738
634
|
})), t.push.apply(t, a);
|
|
739
635
|
}
|
|
740
636
|
return t;
|
|
741
637
|
}
|
|
742
|
-
function j(
|
|
638
|
+
function j(s) {
|
|
743
639
|
for (var e = 1; e < arguments.length; e++) {
|
|
744
640
|
var t = arguments[e] != null ? arguments[e] : {};
|
|
745
|
-
e % 2 ?
|
|
746
|
-
|
|
747
|
-
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(
|
|
748
|
-
Object.defineProperty(
|
|
641
|
+
e % 2 ? ye(Object(t), !0).forEach(function(a) {
|
|
642
|
+
lt(s, a, t[a]);
|
|
643
|
+
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(s, Object.getOwnPropertyDescriptors(t)) : ye(Object(t)).forEach(function(a) {
|
|
644
|
+
Object.defineProperty(s, a, Object.getOwnPropertyDescriptor(t, a));
|
|
749
645
|
});
|
|
750
646
|
}
|
|
751
|
-
return
|
|
647
|
+
return s;
|
|
752
648
|
}
|
|
753
|
-
function
|
|
754
|
-
return (e =
|
|
649
|
+
function lt(s, e, t) {
|
|
650
|
+
return (e = ht(e)) in s ? Object.defineProperty(s, e, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : s[e] = t, s;
|
|
755
651
|
}
|
|
756
|
-
function
|
|
757
|
-
var e =
|
|
652
|
+
function ht(s) {
|
|
653
|
+
var e = gt(s, "string");
|
|
758
654
|
return typeof e == "symbol" ? e : e + "";
|
|
759
655
|
}
|
|
760
|
-
function
|
|
761
|
-
if (typeof
|
|
762
|
-
var t =
|
|
656
|
+
function gt(s, e) {
|
|
657
|
+
if (typeof s != "object" || !s) return s;
|
|
658
|
+
var t = s[Symbol.toPrimitive];
|
|
763
659
|
if (t !== void 0) {
|
|
764
|
-
var a = t.call(
|
|
660
|
+
var a = t.call(s, e);
|
|
765
661
|
if (typeof a != "object") return a;
|
|
766
662
|
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
767
663
|
}
|
|
768
|
-
return (e === "string" ? String : Number)(
|
|
664
|
+
return (e === "string" ? String : Number)(s);
|
|
769
665
|
}
|
|
770
|
-
class
|
|
666
|
+
class vt {
|
|
771
667
|
/**
|
|
772
668
|
* @param {object} options
|
|
773
669
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -779,11 +675,11 @@ class ht {
|
|
|
779
675
|
if (this.options = t.options, !!this.options.showToolbar) {
|
|
780
676
|
this.editor = t, this.canvas = t.canvas;
|
|
781
677
|
var a = this.options.toolbar || {};
|
|
782
|
-
this.config = j(j(j({},
|
|
783
|
-
style: j(j({},
|
|
784
|
-
btnStyle: j(j({},
|
|
785
|
-
icons: j(j({},
|
|
786
|
-
handlers: j(j({},
|
|
678
|
+
this.config = j(j(j({}, B), a), {}, {
|
|
679
|
+
style: j(j({}, B.style), a.style || {}),
|
|
680
|
+
btnStyle: j(j({}, B.btnStyle), a.btnStyle || {}),
|
|
681
|
+
icons: j(j({}, B.icons), a.icons || {}),
|
|
682
|
+
handlers: j(j({}, B.handlers), a.handlers || {})
|
|
787
683
|
}), 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 = () => {
|
|
788
684
|
this.el.style.display = "none";
|
|
789
685
|
}, this._createDOM(), this._bindEvents();
|
|
@@ -817,16 +713,16 @@ class ht {
|
|
|
817
713
|
this.el.innerHTML = "";
|
|
818
714
|
var a = function() {
|
|
819
715
|
var {
|
|
820
|
-
name:
|
|
821
|
-
handle:
|
|
716
|
+
name: n,
|
|
717
|
+
handle: o
|
|
822
718
|
} = r, {
|
|
823
719
|
icons: c,
|
|
824
720
|
btnStyle: u,
|
|
825
721
|
handlers: l
|
|
826
722
|
} = t.config, d = document.createElement("button");
|
|
827
|
-
d.innerHTML = c[
|
|
723
|
+
d.innerHTML = c[o] ? '<img src="'.concat(c[o], '" title="').concat(n, '" />') : n, Object.assign(d.style, u), d.onclick = () => {
|
|
828
724
|
var h;
|
|
829
|
-
return (h = l[
|
|
725
|
+
return (h = l[o]) === null || h === void 0 ? void 0 : h.call(l, t.editor);
|
|
830
726
|
}, t.el.appendChild(d);
|
|
831
727
|
};
|
|
832
728
|
for (var r of e)
|
|
@@ -899,12 +795,12 @@ class ht {
|
|
|
899
795
|
canvas: r
|
|
900
796
|
} = this;
|
|
901
797
|
e.setCoords();
|
|
902
|
-
var
|
|
798
|
+
var i = r.getZoom(), [, , , , n, o] = r.viewportTransform, {
|
|
903
799
|
x: c
|
|
904
800
|
} = e.getCenterPoint(), {
|
|
905
801
|
top: u,
|
|
906
802
|
height: l
|
|
907
|
-
} = e.getBoundingRect(!1, !0), d = c *
|
|
803
|
+
} = e.getBoundingRect(!1, !0), d = c * i + n, h = d - t.offsetWidth / 2, v = (u + l) * i + o + a.offsetTop;
|
|
908
804
|
Object.assign(t.style, {
|
|
909
805
|
left: "".concat(h, "px"),
|
|
910
806
|
top: "".concat(v, "px"),
|
|
@@ -919,30 +815,30 @@ class ht {
|
|
|
919
815
|
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();
|
|
920
816
|
}
|
|
921
817
|
}
|
|
922
|
-
function
|
|
818
|
+
function pe(s, e, t, a, r, i, n) {
|
|
923
819
|
try {
|
|
924
|
-
var
|
|
820
|
+
var o = s[i](n), c = o.value;
|
|
925
821
|
} catch (u) {
|
|
926
822
|
return void t(u);
|
|
927
823
|
}
|
|
928
|
-
|
|
824
|
+
o.done ? e(c) : Promise.resolve(c).then(a, r);
|
|
929
825
|
}
|
|
930
|
-
function
|
|
826
|
+
function J(s) {
|
|
931
827
|
return function() {
|
|
932
828
|
var e = this, t = arguments;
|
|
933
829
|
return new Promise(function(a, r) {
|
|
934
|
-
var
|
|
935
|
-
function
|
|
936
|
-
|
|
830
|
+
var i = s.apply(e, t);
|
|
831
|
+
function n(c) {
|
|
832
|
+
pe(i, a, r, n, o, "next", c);
|
|
937
833
|
}
|
|
938
|
-
function
|
|
939
|
-
|
|
834
|
+
function o(c) {
|
|
835
|
+
pe(i, a, r, n, o, "throw", c);
|
|
940
836
|
}
|
|
941
|
-
|
|
837
|
+
n(void 0);
|
|
942
838
|
});
|
|
943
839
|
};
|
|
944
840
|
}
|
|
945
|
-
class
|
|
841
|
+
class mt {
|
|
946
842
|
/**
|
|
947
843
|
* @param {object} options
|
|
948
844
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -958,7 +854,7 @@ class gt {
|
|
|
958
854
|
return this._historySuspendCount > 0;
|
|
959
855
|
}
|
|
960
856
|
_createDiffPatcher() {
|
|
961
|
-
this.diffPatcher =
|
|
857
|
+
this.diffPatcher = We({
|
|
962
858
|
objectHash(e) {
|
|
963
859
|
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("-");
|
|
964
860
|
},
|
|
@@ -1001,8 +897,8 @@ class gt {
|
|
|
1001
897
|
baseState: e,
|
|
1002
898
|
currentIndex: t,
|
|
1003
899
|
patches: a
|
|
1004
|
-
} = this, r = JSON.parse(JSON.stringify(e)),
|
|
1005
|
-
r = this.diffPatcher.patch(r, a[
|
|
900
|
+
} = this, r = JSON.parse(JSON.stringify(e)), i = 0; i < t; i += 1)
|
|
901
|
+
r = this.diffPatcher.patch(r, a[i]);
|
|
1006
902
|
return console.log("getFullState state", r), r;
|
|
1007
903
|
}
|
|
1008
904
|
/**
|
|
@@ -1031,12 +927,12 @@ class gt {
|
|
|
1031
927
|
*/
|
|
1032
928
|
loadStateFromFullState(e) {
|
|
1033
929
|
var t = this;
|
|
1034
|
-
return
|
|
930
|
+
return J(function* () {
|
|
1035
931
|
if (e) {
|
|
1036
932
|
console.log("loadStateFromFullState fullState", e), yield t.canvas.loadFromJSON(e);
|
|
1037
|
-
var a = t.canvas.getObjects().find((
|
|
933
|
+
var a = t.canvas.getObjects().find((i) => i.id === "montage-area");
|
|
1038
934
|
a && (t.editor.montageArea = a);
|
|
1039
|
-
var r = t.canvas.getObjects().find((
|
|
935
|
+
var r = t.canvas.getObjects().find((i) => i.id === "overlay-mask");
|
|
1040
936
|
r && (t.editor.interactionBlocker.overlayMask = r, t.editor.interactionBlocker.overlayMask.visible = !1), t.canvas.renderAll(), t.canvas.fire("editor:history-state-loaded");
|
|
1041
937
|
}
|
|
1042
938
|
})();
|
|
@@ -1047,7 +943,7 @@ class gt {
|
|
|
1047
943
|
*/
|
|
1048
944
|
undo() {
|
|
1049
945
|
var e = this;
|
|
1050
|
-
return
|
|
946
|
+
return J(function* () {
|
|
1051
947
|
if (!e.skipHistory) {
|
|
1052
948
|
if (e.currentIndex <= 0) {
|
|
1053
949
|
console.log("Нет предыдущих состояний для отмены.");
|
|
@@ -1074,7 +970,7 @@ class gt {
|
|
|
1074
970
|
*/
|
|
1075
971
|
redo() {
|
|
1076
972
|
var e = this;
|
|
1077
|
-
return
|
|
973
|
+
return J(function* () {
|
|
1078
974
|
if (!e.skipHistory) {
|
|
1079
975
|
if (e.currentIndex >= e.patches.length) {
|
|
1080
976
|
console.log("Нет состояний для повтора.");
|
|
@@ -1096,27 +992,27 @@ class gt {
|
|
|
1096
992
|
})();
|
|
1097
993
|
}
|
|
1098
994
|
}
|
|
1099
|
-
|
|
1100
|
-
function
|
|
995
|
+
const ft = 0.1, Mt = 2, jt = 0.1, yt = 90, Z = 16, z = 16, D = 4096, L = 4096;
|
|
996
|
+
function be(s, e, t, a, r, i, n) {
|
|
1101
997
|
try {
|
|
1102
|
-
var
|
|
998
|
+
var o = s[i](n), c = o.value;
|
|
1103
999
|
} catch (u) {
|
|
1104
1000
|
return void t(u);
|
|
1105
1001
|
}
|
|
1106
|
-
|
|
1002
|
+
o.done ? e(c) : Promise.resolve(c).then(a, r);
|
|
1107
1003
|
}
|
|
1108
|
-
function
|
|
1004
|
+
function T(s) {
|
|
1109
1005
|
return function() {
|
|
1110
1006
|
var e = this, t = arguments;
|
|
1111
1007
|
return new Promise(function(a, r) {
|
|
1112
|
-
var
|
|
1113
|
-
function
|
|
1114
|
-
|
|
1008
|
+
var i = s.apply(e, t);
|
|
1009
|
+
function n(c) {
|
|
1010
|
+
be(i, a, r, n, o, "next", c);
|
|
1115
1011
|
}
|
|
1116
|
-
function
|
|
1117
|
-
|
|
1012
|
+
function o(c) {
|
|
1013
|
+
be(i, a, r, n, o, "throw", c);
|
|
1118
1014
|
}
|
|
1119
|
-
|
|
1015
|
+
n(void 0);
|
|
1120
1016
|
});
|
|
1121
1017
|
};
|
|
1122
1018
|
}
|
|
@@ -1141,33 +1037,62 @@ class A {
|
|
|
1141
1037
|
* 'scale-montage' - Обновляет backstore-резолюцию монтажной области (масштабирует
|
|
1142
1038
|
* экспортный размер канваса под размер изображения)
|
|
1143
1039
|
* @param {Boolean} [options.withoutSave] - Не сохранять в историю изменений
|
|
1040
|
+
* @returns {Promise<Object|null>} - возвращает Promise с объектом изображения или null в случае ошибки
|
|
1144
1041
|
*/
|
|
1145
1042
|
importImage(e) {
|
|
1146
1043
|
var t = this;
|
|
1147
|
-
return
|
|
1044
|
+
return T(function* () {
|
|
1148
1045
|
var {
|
|
1149
1046
|
source: a,
|
|
1150
1047
|
scale: r = "image-".concat(t.options.scaleType),
|
|
1151
|
-
withoutSave:
|
|
1048
|
+
withoutSave: i = !1
|
|
1152
1049
|
} = e;
|
|
1153
|
-
if (a)
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1050
|
+
if (!a) return null;
|
|
1051
|
+
var {
|
|
1052
|
+
canvas: n,
|
|
1053
|
+
montageArea: o,
|
|
1054
|
+
transformManager: c,
|
|
1055
|
+
historyManager: u,
|
|
1056
|
+
errorManager: l
|
|
1057
|
+
} = t.editor, d = yield t.getContentType(a), h = A.getFormatFromContentType(d), {
|
|
1058
|
+
acceptContentTypes: v,
|
|
1059
|
+
acceptFormats: m
|
|
1060
|
+
} = t;
|
|
1061
|
+
if (!t.isAllowedContentType(d)) {
|
|
1062
|
+
var f = "Неверный contentType для изображения: ".concat(d, ". Ожидается один из: ").concat(t.acceptContentTypes.join(", "), ".");
|
|
1063
|
+
return l.emitError({
|
|
1064
|
+
origin: "ImageManager",
|
|
1065
|
+
method: "importImage",
|
|
1066
|
+
code: "INVALID_CONTENT_TYPE",
|
|
1067
|
+
message: f,
|
|
1068
|
+
data: {
|
|
1069
|
+
source: a,
|
|
1070
|
+
format: h,
|
|
1071
|
+
contentType: d,
|
|
1072
|
+
acceptContentTypes: v,
|
|
1073
|
+
acceptFormats: m
|
|
1074
|
+
}
|
|
1075
|
+
}), null;
|
|
1076
|
+
}
|
|
1077
|
+
u.suspendHistory();
|
|
1078
|
+
try {
|
|
1079
|
+
var M, g;
|
|
1080
|
+
if (a instanceof File)
|
|
1081
|
+
M = URL.createObjectURL(a);
|
|
1082
|
+
else if (typeof a == "string") {
|
|
1083
|
+
var C = yield fetch(a, {
|
|
1084
|
+
mode: "cors"
|
|
1085
|
+
}), y = yield C.blob({
|
|
1086
|
+
type: d,
|
|
1087
|
+
quality: 1
|
|
1088
|
+
});
|
|
1089
|
+
M = URL.createObjectURL(y);
|
|
1090
|
+
} else
|
|
1091
|
+
return l.emitError({
|
|
1167
1092
|
origin: "ImageManager",
|
|
1168
1093
|
method: "importImage",
|
|
1169
|
-
code: "
|
|
1170
|
-
message:
|
|
1094
|
+
code: "INVALID_SOURCE_TYPE",
|
|
1095
|
+
message: "Неверный тип источника изображения. Ожидается URL или объект File.",
|
|
1171
1096
|
data: {
|
|
1172
1097
|
source: a,
|
|
1173
1098
|
format: h,
|
|
@@ -1175,101 +1100,71 @@ class A {
|
|
|
1175
1100
|
acceptContentTypes: v,
|
|
1176
1101
|
acceptFormats: m
|
|
1177
1102
|
}
|
|
1103
|
+
}), null;
|
|
1104
|
+
if (t._createdBlobUrls.push(M), h === "svg") {
|
|
1105
|
+
var N = yield Ze(M);
|
|
1106
|
+
g = P.groupSVGElements(N.objects, N.options);
|
|
1107
|
+
} else
|
|
1108
|
+
g = yield me.fromURL(M, {
|
|
1109
|
+
crossOrigin: "anonymous"
|
|
1110
|
+
});
|
|
1111
|
+
var {
|
|
1112
|
+
width: E,
|
|
1113
|
+
height: S
|
|
1114
|
+
} = g;
|
|
1115
|
+
if (S > L || E > D) {
|
|
1116
|
+
var p = yield t.resizeImageToBoundaries(g._element.src, "max"), k = URL.createObjectURL(p);
|
|
1117
|
+
t._createdBlobUrls.push(k), g = yield me.fromURL(k, {
|
|
1118
|
+
crossOrigin: "anonymous"
|
|
1178
1119
|
});
|
|
1179
|
-
return;
|
|
1180
1120
|
}
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
var C = yield fetch(a, {
|
|
1188
|
-
mode: "cors"
|
|
1189
|
-
}), y = yield C.blob({
|
|
1190
|
-
type: d,
|
|
1191
|
-
quality: 1
|
|
1192
|
-
});
|
|
1193
|
-
M = URL.createObjectURL(y);
|
|
1194
|
-
} else {
|
|
1195
|
-
l.emitError({
|
|
1196
|
-
origin: "ImageManager",
|
|
1197
|
-
method: "importImage",
|
|
1198
|
-
code: "INVALID_SOURCE_TYPE",
|
|
1199
|
-
message: "Неверный тип источника изображения. Ожидается URL или объект File.",
|
|
1200
|
-
data: {
|
|
1201
|
-
source: a,
|
|
1202
|
-
format: h,
|
|
1203
|
-
contentType: d,
|
|
1204
|
-
acceptContentTypes: v,
|
|
1205
|
-
acceptFormats: m
|
|
1206
|
-
}
|
|
1207
|
-
});
|
|
1208
|
-
return;
|
|
1209
|
-
}
|
|
1210
|
-
if (t._createdBlobUrls.push(M), h === "svg") {
|
|
1211
|
-
var D = yield ke(M);
|
|
1212
|
-
g = U.groupSVGElements(D.objects, D.options);
|
|
1213
|
-
} else
|
|
1214
|
-
g = yield le.fromURL(M, {
|
|
1215
|
-
crossOrigin: "anonymous"
|
|
1216
|
-
});
|
|
1121
|
+
if (g.set("id", "".concat(g.type, "-").concat(w())), g.set("format", h), r === "scale-montage")
|
|
1122
|
+
t.editor.canvasManager.scaleMontageAreaToImage({
|
|
1123
|
+
object: g,
|
|
1124
|
+
withoutSave: !0
|
|
1125
|
+
});
|
|
1126
|
+
else {
|
|
1217
1127
|
var {
|
|
1218
|
-
width:
|
|
1219
|
-
height:
|
|
1220
|
-
} =
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1128
|
+
width: H,
|
|
1129
|
+
height: _
|
|
1130
|
+
} = o, R = t.calculateScaleFactor({
|
|
1131
|
+
imageObject: g,
|
|
1132
|
+
scaleType: r
|
|
1133
|
+
});
|
|
1134
|
+
r === "image-contain" && R < 1 ? c.fitObject({
|
|
1135
|
+
object: g,
|
|
1136
|
+
type: "contain",
|
|
1137
|
+
withoutSave: !0
|
|
1138
|
+
}) : r === "image-cover" && (E > H || S > _) && c.fitObject({
|
|
1139
|
+
object: g,
|
|
1140
|
+
type: "cover",
|
|
1141
|
+
withoutSave: !0
|
|
1142
|
+
});
|
|
1143
|
+
}
|
|
1144
|
+
n.add(g), n.centerObject(g), n.setActiveObject(g), n.renderAll(), u.resumeHistory(), i || u.saveState();
|
|
1145
|
+
var O = {
|
|
1146
|
+
image: g,
|
|
1147
|
+
format: h,
|
|
1148
|
+
contentType: d,
|
|
1149
|
+
scale: r,
|
|
1150
|
+
withoutSave: i,
|
|
1151
|
+
source: a
|
|
1152
|
+
};
|
|
1153
|
+
return n.fire("editor:image-imported", O), O;
|
|
1154
|
+
} catch (x) {
|
|
1155
|
+
return l.emitError({
|
|
1156
|
+
origin: "ImageManager",
|
|
1157
|
+
method: "importImage",
|
|
1158
|
+
code: "IMPORT_FAILED",
|
|
1159
|
+
message: "Ошибка импорта изображения: ".concat(x.message),
|
|
1160
|
+
data: {
|
|
1161
|
+
source: a,
|
|
1252
1162
|
format: h,
|
|
1253
1163
|
contentType: d,
|
|
1254
1164
|
scale: r,
|
|
1255
|
-
withoutSave:
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
} catch (k) {
|
|
1259
|
-
l.emitError({
|
|
1260
|
-
origin: "ImageManager",
|
|
1261
|
-
method: "importImage",
|
|
1262
|
-
code: "IMPORT_FAILED",
|
|
1263
|
-
message: "Ошибка импорта изображения: ".concat(k.message),
|
|
1264
|
-
data: {
|
|
1265
|
-
source: a,
|
|
1266
|
-
format: h,
|
|
1267
|
-
contentType: d,
|
|
1268
|
-
scale: r,
|
|
1269
|
-
withoutSave: n
|
|
1270
|
-
}
|
|
1271
|
-
}), u.resumeHistory();
|
|
1272
|
-
}
|
|
1165
|
+
withoutSave: i
|
|
1166
|
+
}
|
|
1167
|
+
}), u.resumeHistory(), null;
|
|
1273
1168
|
}
|
|
1274
1169
|
})();
|
|
1275
1170
|
}
|
|
@@ -1283,25 +1178,25 @@ class A {
|
|
|
1283
1178
|
*/
|
|
1284
1179
|
resizeImageToBoundaries(e) {
|
|
1285
1180
|
var t = arguments, a = this;
|
|
1286
|
-
return
|
|
1287
|
-
var r = t.length > 1 && t[1] !== void 0 ? t[1] : "max",
|
|
1181
|
+
return T(function* () {
|
|
1182
|
+
var r = t.length > 1 && t[1] !== void 0 ? t[1] : "max", i = "Размер изображения больше максимального размера канваса, поэтому оно будет уменьшено до максимальных размеров: ".concat(D, "x").concat(L);
|
|
1288
1183
|
a.editor.errorManager.emitWarning({
|
|
1289
1184
|
origin: "ImageManager",
|
|
1290
1185
|
method: "resizeImageToBoundaries",
|
|
1291
1186
|
code: "IMAGE_RESIZE_WARNING",
|
|
1292
|
-
message:
|
|
1187
|
+
message: i,
|
|
1293
1188
|
data: {
|
|
1294
1189
|
dataURL: e,
|
|
1295
1190
|
size: r
|
|
1296
1191
|
}
|
|
1297
1192
|
});
|
|
1298
|
-
var
|
|
1193
|
+
var n = yield a.editor.workerManager.post("resizeImage", {
|
|
1299
1194
|
dataURL: e,
|
|
1300
|
-
maxWidth:
|
|
1195
|
+
maxWidth: D,
|
|
1301
1196
|
maxHeight: L,
|
|
1302
1197
|
sizeType: r
|
|
1303
1198
|
});
|
|
1304
|
-
return
|
|
1199
|
+
return n;
|
|
1305
1200
|
})();
|
|
1306
1201
|
}
|
|
1307
1202
|
/**
|
|
@@ -1317,14 +1212,14 @@ class A {
|
|
|
1317
1212
|
*/
|
|
1318
1213
|
exportCanvasAsImageFile() {
|
|
1319
1214
|
var e = arguments, t = this;
|
|
1320
|
-
return
|
|
1215
|
+
return T(function* () {
|
|
1321
1216
|
var {
|
|
1322
1217
|
fileName: a = "image.png",
|
|
1323
1218
|
contentType: r = "image/png",
|
|
1324
|
-
exportAsBase64:
|
|
1325
|
-
exportAsBlob:
|
|
1219
|
+
exportAsBase64: i = !1,
|
|
1220
|
+
exportAsBlob: n = !1
|
|
1326
1221
|
} = e.length > 0 && e[0] !== void 0 ? e[0] : {}, {
|
|
1327
|
-
canvas:
|
|
1222
|
+
canvas: o,
|
|
1328
1223
|
montageArea: c,
|
|
1329
1224
|
workerManager: u
|
|
1330
1225
|
} = t.editor;
|
|
@@ -1336,7 +1231,7 @@ class A {
|
|
|
1336
1231
|
top: m,
|
|
1337
1232
|
width: f,
|
|
1338
1233
|
height: M
|
|
1339
|
-
} = c.getBoundingRect(), g = yield
|
|
1234
|
+
} = c.getBoundingRect(), g = yield o.clone(["id", "format", "locked"]);
|
|
1340
1235
|
["image/jpg", "image/jpeg"].includes(d) && (g.backgroundColor = "#ffffff");
|
|
1341
1236
|
var C = g.getObjects().find((b) => b.id === c.id);
|
|
1342
1237
|
C.visible = !1, g.viewportTransform = [1, 0, 0, 1, -v, -m], g.setDimensions({
|
|
@@ -1347,11 +1242,11 @@ class A {
|
|
|
1347
1242
|
}), g.renderAll();
|
|
1348
1243
|
var y = g.getObjects().filter((b) => b.format).every((b) => b.format === "svg");
|
|
1349
1244
|
if (h === "svg" && y) {
|
|
1350
|
-
var
|
|
1245
|
+
var N = g.toSVG();
|
|
1351
1246
|
g.dispose();
|
|
1352
|
-
var E = A._exportSVGStringAsFile(
|
|
1353
|
-
exportAsBase64:
|
|
1354
|
-
exportAsBlob:
|
|
1247
|
+
var E = A._exportSVGStringAsFile(N, {
|
|
1248
|
+
exportAsBase64: i,
|
|
1249
|
+
exportAsBlob: n,
|
|
1355
1250
|
fileName: a
|
|
1356
1251
|
}), S = {
|
|
1357
1252
|
image: E,
|
|
@@ -1359,68 +1254,68 @@ class A {
|
|
|
1359
1254
|
contentType: "image/svg+xml",
|
|
1360
1255
|
fileName: a.replace(/\.[^/.]+$/, ".svg")
|
|
1361
1256
|
};
|
|
1362
|
-
return
|
|
1257
|
+
return o.fire("editor:canvas-exported", S), S;
|
|
1363
1258
|
}
|
|
1364
1259
|
var p = yield new Promise((b) => {
|
|
1365
1260
|
g.getElement().toBlob(b);
|
|
1366
1261
|
});
|
|
1367
|
-
if (g.dispose(),
|
|
1368
|
-
var
|
|
1262
|
+
if (g.dispose(), n) {
|
|
1263
|
+
var k = {
|
|
1369
1264
|
image: p,
|
|
1370
1265
|
format: h,
|
|
1371
1266
|
contentType: d,
|
|
1372
1267
|
fileName: a
|
|
1373
1268
|
};
|
|
1374
|
-
return
|
|
1269
|
+
return o.fire("editor:canvas-exported", k), k;
|
|
1375
1270
|
}
|
|
1376
|
-
var
|
|
1271
|
+
var H = yield createImageBitmap(p), _ = yield u.post("toDataURL", {
|
|
1377
1272
|
format: h,
|
|
1378
1273
|
quality: 1,
|
|
1379
|
-
bitmap:
|
|
1380
|
-
}, [
|
|
1274
|
+
bitmap: H
|
|
1275
|
+
}, [H]);
|
|
1381
1276
|
if (l) {
|
|
1382
|
-
var
|
|
1383
|
-
orientation:
|
|
1277
|
+
var R = 0.264583, O = f * R, x = M * R, Ce = (yield t.editor.moduleLoader.loadModule("jspdf")).jsPDF, G = new Ce({
|
|
1278
|
+
orientation: O > x ? "landscape" : "portrait",
|
|
1384
1279
|
unit: "mm",
|
|
1385
|
-
format: [
|
|
1280
|
+
format: [O, x]
|
|
1386
1281
|
});
|
|
1387
|
-
if (G.addImage(
|
|
1388
|
-
var
|
|
1389
|
-
image:
|
|
1282
|
+
if (G.addImage(_, "JPG", 0, 0, O, x), i) {
|
|
1283
|
+
var Ne = G.output("datauristring"), ce = {
|
|
1284
|
+
image: Ne,
|
|
1390
1285
|
format: "pdf",
|
|
1391
1286
|
contentType: "application/pdf",
|
|
1392
1287
|
fileName: a
|
|
1393
1288
|
};
|
|
1394
|
-
return
|
|
1289
|
+
return o.fire("editor:canvas-exported", ce), ce;
|
|
1395
1290
|
}
|
|
1396
|
-
var
|
|
1291
|
+
var De = G.output("blob"), Le = new File([De], a, {
|
|
1397
1292
|
type: "application/pdf"
|
|
1398
|
-
}),
|
|
1293
|
+
}), ue = {
|
|
1399
1294
|
image: Le,
|
|
1400
1295
|
format: "pdf",
|
|
1401
1296
|
contentType: "application/pdf",
|
|
1402
1297
|
fileName: a
|
|
1403
1298
|
};
|
|
1404
|
-
return
|
|
1299
|
+
return o.fire("editor:canvas-exported", ue), ue;
|
|
1405
1300
|
}
|
|
1406
|
-
if (
|
|
1407
|
-
var
|
|
1408
|
-
image:
|
|
1301
|
+
if (i) {
|
|
1302
|
+
var de = {
|
|
1303
|
+
image: _,
|
|
1409
1304
|
format: h,
|
|
1410
1305
|
contentType: d,
|
|
1411
1306
|
fileName: a
|
|
1412
1307
|
};
|
|
1413
|
-
return
|
|
1308
|
+
return o.fire("editor:canvas-exported", de), de;
|
|
1414
1309
|
}
|
|
1415
|
-
var
|
|
1310
|
+
var le = h === "svg" && !y ? a.replace(/\.[^/.]+$/, ".png") : a, Ee = new File([p], le, {
|
|
1416
1311
|
type: d
|
|
1417
|
-
}),
|
|
1312
|
+
}), he = {
|
|
1418
1313
|
image: Ee,
|
|
1419
1314
|
format: h,
|
|
1420
1315
|
contentType: d,
|
|
1421
|
-
fileName:
|
|
1316
|
+
fileName: le
|
|
1422
1317
|
};
|
|
1423
|
-
return
|
|
1318
|
+
return o.fire("editor:canvas-exported", he), he;
|
|
1424
1319
|
} catch (b) {
|
|
1425
1320
|
return t.editor.errorManager.emitError({
|
|
1426
1321
|
origin: "ImageManager",
|
|
@@ -1430,8 +1325,8 @@ class A {
|
|
|
1430
1325
|
data: {
|
|
1431
1326
|
contentType: r,
|
|
1432
1327
|
fileName: a,
|
|
1433
|
-
exportAsBase64:
|
|
1434
|
-
exportAsBlob:
|
|
1328
|
+
exportAsBase64: i,
|
|
1329
|
+
exportAsBlob: n
|
|
1435
1330
|
}
|
|
1436
1331
|
}), "";
|
|
1437
1332
|
}
|
|
@@ -1450,13 +1345,13 @@ class A {
|
|
|
1450
1345
|
*/
|
|
1451
1346
|
exportObjectAsImageFile() {
|
|
1452
1347
|
var e = arguments, t = this;
|
|
1453
|
-
return
|
|
1348
|
+
return T(function* () {
|
|
1454
1349
|
var {
|
|
1455
1350
|
object: a,
|
|
1456
1351
|
fileName: r = "image.png",
|
|
1457
|
-
contentType:
|
|
1458
|
-
exportAsBase64:
|
|
1459
|
-
exportAsBlob:
|
|
1352
|
+
contentType: i = "image/png",
|
|
1353
|
+
exportAsBase64: n = !1,
|
|
1354
|
+
exportAsBlob: o = !1
|
|
1460
1355
|
} = e.length > 0 && e[0] !== void 0 ? e[0] : {}, {
|
|
1461
1356
|
canvas: c,
|
|
1462
1357
|
workerManager: u
|
|
@@ -1468,18 +1363,18 @@ class A {
|
|
|
1468
1363
|
code: "NO_OBJECT_SELECTED",
|
|
1469
1364
|
message: "Не выбран объект для экспорта",
|
|
1470
1365
|
data: {
|
|
1471
|
-
contentType:
|
|
1366
|
+
contentType: i,
|
|
1472
1367
|
fileName: r,
|
|
1473
|
-
exportAsBase64:
|
|
1474
|
-
exportAsBlob:
|
|
1368
|
+
exportAsBase64: n,
|
|
1369
|
+
exportAsBlob: o
|
|
1475
1370
|
}
|
|
1476
1371
|
}), "";
|
|
1477
1372
|
try {
|
|
1478
|
-
var d = A.getFormatFromContentType(
|
|
1373
|
+
var d = A.getFormatFromContentType(i);
|
|
1479
1374
|
if (d === "svg") {
|
|
1480
1375
|
var h = l.toSVG(), v = t._exportSVGStringAsFile(h, {
|
|
1481
|
-
exportAsBase64:
|
|
1482
|
-
exportAsBlob:
|
|
1376
|
+
exportAsBase64: n,
|
|
1377
|
+
exportAsBlob: o,
|
|
1483
1378
|
fileName: r
|
|
1484
1379
|
}), m = {
|
|
1485
1380
|
image: v,
|
|
@@ -1489,7 +1384,7 @@ class A {
|
|
|
1489
1384
|
};
|
|
1490
1385
|
return c.fire("editor:object-exported", m), m;
|
|
1491
1386
|
}
|
|
1492
|
-
if (
|
|
1387
|
+
if (n) {
|
|
1493
1388
|
var f = yield createImageBitmap(l._element), M = yield u.post("toDataURL", {
|
|
1494
1389
|
format: d,
|
|
1495
1390
|
quality: 1,
|
|
@@ -1497,7 +1392,7 @@ class A {
|
|
|
1497
1392
|
}, [f]), g = {
|
|
1498
1393
|
image: M,
|
|
1499
1394
|
format: d,
|
|
1500
|
-
contentType:
|
|
1395
|
+
contentType: i,
|
|
1501
1396
|
fileName: r
|
|
1502
1397
|
};
|
|
1503
1398
|
return c.fire("editor:object-exported", g), g;
|
|
@@ -1505,21 +1400,21 @@ class A {
|
|
|
1505
1400
|
var C = l.toCanvasElement(), y = yield new Promise((p) => {
|
|
1506
1401
|
C.toBlob(p);
|
|
1507
1402
|
});
|
|
1508
|
-
if (
|
|
1509
|
-
var
|
|
1403
|
+
if (o) {
|
|
1404
|
+
var N = {
|
|
1510
1405
|
image: y,
|
|
1511
1406
|
format: d,
|
|
1512
|
-
contentType:
|
|
1407
|
+
contentType: i,
|
|
1513
1408
|
fileName: r
|
|
1514
1409
|
};
|
|
1515
|
-
return c.fire("editor:object-exported",
|
|
1410
|
+
return c.fire("editor:object-exported", N), N;
|
|
1516
1411
|
}
|
|
1517
1412
|
var E = new File([y], r, {
|
|
1518
|
-
type:
|
|
1413
|
+
type: i
|
|
1519
1414
|
}), S = {
|
|
1520
1415
|
image: E,
|
|
1521
1416
|
format: d,
|
|
1522
|
-
contentType:
|
|
1417
|
+
contentType: i,
|
|
1523
1418
|
fileName: r
|
|
1524
1419
|
};
|
|
1525
1420
|
return c.fire("editor:object-exported", S), S;
|
|
@@ -1530,10 +1425,10 @@ class A {
|
|
|
1530
1425
|
code: "IMAGE_EXPORT_FAILED",
|
|
1531
1426
|
message: "Ошибка экспорта объекта: ".concat(p.message),
|
|
1532
1427
|
data: {
|
|
1533
|
-
contentType:
|
|
1428
|
+
contentType: i,
|
|
1534
1429
|
fileName: r,
|
|
1535
|
-
exportAsBase64:
|
|
1536
|
-
exportAsBlob:
|
|
1430
|
+
exportAsBase64: n,
|
|
1431
|
+
exportAsBlob: o
|
|
1537
1432
|
}
|
|
1538
1433
|
}), "";
|
|
1539
1434
|
}
|
|
@@ -1604,7 +1499,7 @@ class A {
|
|
|
1604
1499
|
*/
|
|
1605
1500
|
getContentType(e) {
|
|
1606
1501
|
var t = this;
|
|
1607
|
-
return
|
|
1502
|
+
return T(function* () {
|
|
1608
1503
|
return typeof e == "string" ? t.getContentTypeFromUrl(e) : e.type || "application/octet-stream";
|
|
1609
1504
|
})();
|
|
1610
1505
|
}
|
|
@@ -1616,7 +1511,7 @@ class A {
|
|
|
1616
1511
|
*/
|
|
1617
1512
|
getContentTypeFromUrl(e) {
|
|
1618
1513
|
var t = this;
|
|
1619
|
-
return
|
|
1514
|
+
return T(function* () {
|
|
1620
1515
|
if (e.startsWith("data:")) {
|
|
1621
1516
|
var a = e.match(/^data:([^;]+)/);
|
|
1622
1517
|
return a ? a[1] : "application/octet-stream";
|
|
@@ -1624,11 +1519,11 @@ class A {
|
|
|
1624
1519
|
try {
|
|
1625
1520
|
var r = yield fetch(e, {
|
|
1626
1521
|
method: "HEAD"
|
|
1627
|
-
}),
|
|
1628
|
-
if (
|
|
1629
|
-
return
|
|
1630
|
-
} catch (
|
|
1631
|
-
console.warn("HEAD запрос неудачен, определяем тип по расширению:",
|
|
1522
|
+
}), i = r.headers.get("content-type");
|
|
1523
|
+
if (i && i.startsWith("image/"))
|
|
1524
|
+
return i.split(";")[0];
|
|
1525
|
+
} catch (n) {
|
|
1526
|
+
console.warn("HEAD запрос неудачен, определяем тип по расширению:", n);
|
|
1632
1527
|
}
|
|
1633
1528
|
return t.getContentTypeFromExtension(e);
|
|
1634
1529
|
})();
|
|
@@ -1641,13 +1536,13 @@ class A {
|
|
|
1641
1536
|
*/
|
|
1642
1537
|
getContentTypeFromExtension(e) {
|
|
1643
1538
|
try {
|
|
1644
|
-
var t, a = new URL(e), r = (t = a.pathname.split(".").pop()) === null || t === void 0 ? void 0 : t.toLowerCase(),
|
|
1645
|
-
return this.acceptContentTypes.forEach((
|
|
1646
|
-
var
|
|
1647
|
-
|
|
1648
|
-
}),
|
|
1649
|
-
} catch (
|
|
1650
|
-
return console.warn("Не удалось определить расширение из URL:", e,
|
|
1539
|
+
var t, a = new URL(e), r = (t = a.pathname.split(".").pop()) === null || t === void 0 ? void 0 : t.toLowerCase(), i = {};
|
|
1540
|
+
return this.acceptContentTypes.forEach((n) => {
|
|
1541
|
+
var o = A.getFormatFromContentType(n);
|
|
1542
|
+
o && (i[o] = n);
|
|
1543
|
+
}), i[r] || "application/octet-stream";
|
|
1544
|
+
} catch (n) {
|
|
1545
|
+
return console.warn("Не удалось определить расширение из URL:", e, n), "application/octet-stream";
|
|
1651
1546
|
}
|
|
1652
1547
|
}
|
|
1653
1548
|
/**
|
|
@@ -1664,14 +1559,14 @@ class A {
|
|
|
1664
1559
|
montageArea: r
|
|
1665
1560
|
} = this.editor;
|
|
1666
1561
|
if (!r || !t) return 1;
|
|
1667
|
-
var
|
|
1668
|
-
width:
|
|
1562
|
+
var i = r.width, n = r.height, {
|
|
1563
|
+
width: o,
|
|
1669
1564
|
height: c
|
|
1670
1565
|
} = t;
|
|
1671
|
-
return a === "contain" || a === "image-contain" ? Math.min(
|
|
1566
|
+
return a === "contain" || a === "image-contain" ? Math.min(i / o, n / c) : a === "cover" || a === "image-cover" ? Math.max(i / o, n / c) : 1;
|
|
1672
1567
|
}
|
|
1673
1568
|
}
|
|
1674
|
-
class
|
|
1569
|
+
class pt {
|
|
1675
1570
|
/**
|
|
1676
1571
|
* @param {object} options
|
|
1677
1572
|
* @param {ImageEditor} options.editor – экземпляр редактора
|
|
@@ -1684,10 +1579,11 @@ class jt {
|
|
|
1684
1579
|
}
|
|
1685
1580
|
/**
|
|
1686
1581
|
* Устанавливаем внутреннюю ширину канваса (для экспорта)
|
|
1687
|
-
* @param {String} width
|
|
1688
|
-
* @param {Object} options
|
|
1689
|
-
* @param {Boolean} options.preserveProportional - Сохранить пропорции
|
|
1690
|
-
* @param {Boolean} options.withoutSave - Не сохранять состояние
|
|
1582
|
+
* @param {String|Number} width
|
|
1583
|
+
* @param {Object} [options={}]
|
|
1584
|
+
* @param {Boolean} [options.preserveProportional] - Сохранить пропорции
|
|
1585
|
+
* @param {Boolean} [options.withoutSave] - Не сохранять состояние
|
|
1586
|
+
* @param {Boolean} [options.adaptCanvasToContainer] - Адаптировать канвас к контейнеру
|
|
1691
1587
|
* @fires editor:resolution-width-changed
|
|
1692
1588
|
*/
|
|
1693
1589
|
setResolutionWidth(e) {
|
|
@@ -1698,18 +1594,18 @@ class jt {
|
|
|
1698
1594
|
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
|
|
1699
1595
|
if (e) {
|
|
1700
1596
|
var {
|
|
1701
|
-
canvas:
|
|
1702
|
-
montageArea:
|
|
1597
|
+
canvas: i,
|
|
1598
|
+
montageArea: n,
|
|
1703
1599
|
options: {
|
|
1704
|
-
canvasBackstoreWidth:
|
|
1600
|
+
canvasBackstoreWidth: o
|
|
1705
1601
|
}
|
|
1706
1602
|
} = this.editor, {
|
|
1707
1603
|
width: c,
|
|
1708
1604
|
height: u
|
|
1709
|
-
} =
|
|
1710
|
-
if (!
|
|
1605
|
+
} = n, l = Number(Math.max(Math.min(e, D), Z));
|
|
1606
|
+
if (!o || o === "auto" || r ? this.adaptCanvasToContainer() : o ? this.setCanvasBackstoreWidth(o) : this.setCanvasBackstoreWidth(l), n.set({
|
|
1711
1607
|
width: l
|
|
1712
|
-
}),
|
|
1608
|
+
}), i.clipPath.set({
|
|
1713
1609
|
width: l
|
|
1714
1610
|
}), t) {
|
|
1715
1611
|
var d = l / c, h = u * d;
|
|
@@ -1719,18 +1615,19 @@ class jt {
|
|
|
1719
1615
|
var {
|
|
1720
1616
|
left: v,
|
|
1721
1617
|
top: m
|
|
1722
|
-
} = this.getObjectDefaultCoords(
|
|
1723
|
-
|
|
1618
|
+
} = this.getObjectDefaultCoords(n), f = i.getZoom();
|
|
1619
|
+
i.setViewportTransform([f, 0, 0, f, v, m]), this.centerMontageArea(), a || this.editor.historyManager.saveState(), i == null || i.fire("editor:resolution-width-changed", {
|
|
1724
1620
|
width: e
|
|
1725
1621
|
});
|
|
1726
1622
|
}
|
|
1727
1623
|
}
|
|
1728
1624
|
/**
|
|
1729
1625
|
* Устанавливаем внутреннюю высоту канваса (для экспорта)
|
|
1730
|
-
* @param {String} height
|
|
1731
|
-
* @param {Object} options
|
|
1732
|
-
* @param {Boolean} options.preserveProportional - Сохранить пропорции
|
|
1733
|
-
* @param {Boolean} options.withoutSave - Не сохранять состояние
|
|
1626
|
+
* @param {String|Number} height
|
|
1627
|
+
* @param {Object} [options={}]
|
|
1628
|
+
* @param {Boolean} [options.preserveProportional] - Сохранить пропорции
|
|
1629
|
+
* @param {Boolean} [options.withoutSave] - Не сохранять состояние
|
|
1630
|
+
* @param {Boolean} [options.adaptCanvasToContainer] - Адаптировать канвас к контейнеру
|
|
1734
1631
|
* @fires editor:resolution-height-changed
|
|
1735
1632
|
*/
|
|
1736
1633
|
setResolutionHeight(e) {
|
|
@@ -1741,18 +1638,18 @@ class jt {
|
|
|
1741
1638
|
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
|
|
1742
1639
|
if (e) {
|
|
1743
1640
|
var {
|
|
1744
|
-
canvas:
|
|
1745
|
-
montageArea:
|
|
1641
|
+
canvas: i,
|
|
1642
|
+
montageArea: n,
|
|
1746
1643
|
options: {
|
|
1747
|
-
canvasBackstoreHeight:
|
|
1644
|
+
canvasBackstoreHeight: o
|
|
1748
1645
|
}
|
|
1749
1646
|
} = this.editor, {
|
|
1750
1647
|
width: c,
|
|
1751
1648
|
height: u
|
|
1752
|
-
} =
|
|
1753
|
-
if (!
|
|
1649
|
+
} = n, l = Number(Math.max(Math.min(e, L), z));
|
|
1650
|
+
if (!o || o === "auto" || r ? this.adaptCanvasToContainer() : o ? this.setCanvasBackstoreHeight(o) : this.setCanvasBackstoreHeight(l), n.set({
|
|
1754
1651
|
height: l
|
|
1755
|
-
}),
|
|
1652
|
+
}), i.clipPath.set({
|
|
1756
1653
|
height: l
|
|
1757
1654
|
}), t) {
|
|
1758
1655
|
var d = l / u, h = c * d;
|
|
@@ -1762,8 +1659,8 @@ class jt {
|
|
|
1762
1659
|
var {
|
|
1763
1660
|
left: v,
|
|
1764
1661
|
top: m
|
|
1765
|
-
} = this.getObjectDefaultCoords(
|
|
1766
|
-
|
|
1662
|
+
} = this.getObjectDefaultCoords(n), f = i.getZoom();
|
|
1663
|
+
i.setViewportTransform([f, 0, 0, f, v, m]), this.centerMontageArea(), a || this.editor.historyManager.saveState(), i == null || i.fire("editor:resolution-height-changed", {
|
|
1767
1664
|
height: e
|
|
1768
1665
|
});
|
|
1769
1666
|
}
|
|
@@ -1776,7 +1673,7 @@ class jt {
|
|
|
1776
1673
|
var {
|
|
1777
1674
|
canvas: e,
|
|
1778
1675
|
montageArea: t
|
|
1779
|
-
} = this.editor, a = e.getWidth(), r = e.getHeight(),
|
|
1676
|
+
} = this.editor, a = e.getWidth(), r = e.getHeight(), i = e.getZoom(), n = new ze(a / 2, r / 2);
|
|
1780
1677
|
t.set({
|
|
1781
1678
|
left: a / 2,
|
|
1782
1679
|
top: r / 2
|
|
@@ -1784,8 +1681,8 @@ class jt {
|
|
|
1784
1681
|
left: a / 2,
|
|
1785
1682
|
top: r / 2
|
|
1786
1683
|
}), e.renderAll();
|
|
1787
|
-
var
|
|
1788
|
-
|
|
1684
|
+
var o = e.viewportTransform;
|
|
1685
|
+
o[4] = a / 2 - n.x * i, o[5] = r / 2 - n.y * i, e.setViewportTransform(o), e.renderAll();
|
|
1789
1686
|
}
|
|
1790
1687
|
/**
|
|
1791
1688
|
* Метод для получения координат объекта с учетом текущего зума
|
|
@@ -1802,16 +1699,16 @@ class jt {
|
|
|
1802
1699
|
}), {};
|
|
1803
1700
|
var {
|
|
1804
1701
|
width: r,
|
|
1805
|
-
height:
|
|
1806
|
-
} = a,
|
|
1702
|
+
height: i
|
|
1703
|
+
} = a, n = t.getZoom(), o = (r - r * n) / 2, c = (i - i * n) / 2;
|
|
1807
1704
|
return {
|
|
1808
|
-
left:
|
|
1705
|
+
left: o,
|
|
1809
1706
|
top: c
|
|
1810
1707
|
};
|
|
1811
1708
|
}
|
|
1812
1709
|
setCanvasBackstoreWidth(e) {
|
|
1813
1710
|
if (!(!e || typeof e != "number")) {
|
|
1814
|
-
var t = Math.max(Math.min(e,
|
|
1711
|
+
var t = Math.max(Math.min(e, D), Z);
|
|
1815
1712
|
this.editor.canvas.setDimensions({
|
|
1816
1713
|
width: t
|
|
1817
1714
|
}, {
|
|
@@ -1821,7 +1718,7 @@ class jt {
|
|
|
1821
1718
|
}
|
|
1822
1719
|
setCanvasBackstoreHeight(e) {
|
|
1823
1720
|
if (!(!e || typeof e != "number")) {
|
|
1824
|
-
var t = Math.max(Math.min(e, L),
|
|
1721
|
+
var t = Math.max(Math.min(e, L), z);
|
|
1825
1722
|
this.editor.canvas.setDimensions({
|
|
1826
1723
|
height: t
|
|
1827
1724
|
}, {
|
|
@@ -1832,10 +1729,10 @@ class jt {
|
|
|
1832
1729
|
adaptCanvasToContainer() {
|
|
1833
1730
|
var {
|
|
1834
1731
|
canvas: e
|
|
1835
|
-
} = this.editor, t = e.editorContainer, a = t.clientWidth, r = t.clientHeight,
|
|
1836
|
-
console.log("adaptCanvasToContainer newWidth",
|
|
1837
|
-
width:
|
|
1838
|
-
height:
|
|
1732
|
+
} = this.editor, t = e.editorContainer, a = t.clientWidth, r = t.clientHeight, i = Math.max(Math.min(a, D), Z), n = Math.max(Math.min(r, L), z);
|
|
1733
|
+
console.log("adaptCanvasToContainer newWidth", i), console.log("adaptCanvasToContainer newHeight", n), e.setDimensions({
|
|
1734
|
+
width: i,
|
|
1735
|
+
height: n
|
|
1839
1736
|
}, {
|
|
1840
1737
|
backstoreOnly: !0
|
|
1841
1738
|
});
|
|
@@ -1855,9 +1752,9 @@ class jt {
|
|
|
1855
1752
|
var {
|
|
1856
1753
|
canvas: t,
|
|
1857
1754
|
montageArea: a
|
|
1858
|
-
} = this.editor, r = a.width * e,
|
|
1755
|
+
} = this.editor, r = a.width * e, i = a.height * e, n = t.wrapperEl.parentNode, o = r <= n.clientWidth ? "100%" : r, c = i <= n.clientHeight ? "100%" : i;
|
|
1859
1756
|
t.setDimensions({
|
|
1860
|
-
width:
|
|
1757
|
+
width: o,
|
|
1861
1758
|
height: c
|
|
1862
1759
|
}, {
|
|
1863
1760
|
cssOnly: !0
|
|
@@ -1954,35 +1851,35 @@ class jt {
|
|
|
1954
1851
|
var {
|
|
1955
1852
|
canvas: r,
|
|
1956
1853
|
options: {
|
|
1957
|
-
editorContainer:
|
|
1854
|
+
editorContainer: i
|
|
1958
1855
|
}
|
|
1959
|
-
} = this.editor,
|
|
1856
|
+
} = this.editor, n = [];
|
|
1960
1857
|
switch (e) {
|
|
1961
1858
|
case "canvas":
|
|
1962
|
-
|
|
1859
|
+
n.push(r.lowerCanvasEl, r.upperCanvasEl);
|
|
1963
1860
|
break;
|
|
1964
1861
|
case "wrapper":
|
|
1965
|
-
|
|
1862
|
+
n.push(r.wrapperEl);
|
|
1966
1863
|
break;
|
|
1967
1864
|
case "container":
|
|
1968
|
-
|
|
1865
|
+
n.push(i);
|
|
1969
1866
|
break;
|
|
1970
1867
|
default:
|
|
1971
|
-
|
|
1868
|
+
n.push(r.lowerCanvasEl, r.upperCanvasEl);
|
|
1972
1869
|
}
|
|
1973
|
-
var
|
|
1870
|
+
var o = t === "width" ? "width" : "height";
|
|
1974
1871
|
if (typeof a == "string") {
|
|
1975
|
-
|
|
1976
|
-
l.style[
|
|
1872
|
+
n.forEach((l) => {
|
|
1873
|
+
l.style[o] = a;
|
|
1977
1874
|
});
|
|
1978
1875
|
return;
|
|
1979
1876
|
}
|
|
1980
1877
|
var c = parseFloat(a);
|
|
1981
1878
|
if (!isNaN(c)) {
|
|
1982
1879
|
var u = "".concat(c, "px");
|
|
1983
|
-
|
|
1984
|
-
l.style[
|
|
1985
|
-
}), r.fire("editor:display-".concat(e, "-").concat(
|
|
1880
|
+
n.forEach((l) => {
|
|
1881
|
+
l.style[o] = u;
|
|
1882
|
+
}), r.fire("editor:display-".concat(e, "-").concat(o, "-changed"), {
|
|
1986
1883
|
element: e,
|
|
1987
1884
|
value: a
|
|
1988
1885
|
});
|
|
@@ -2004,10 +1901,10 @@ class jt {
|
|
|
2004
1901
|
withoutSave: a
|
|
2005
1902
|
} = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, {
|
|
2006
1903
|
canvas: r,
|
|
2007
|
-
montageArea:
|
|
2008
|
-
transformManager:
|
|
1904
|
+
montageArea: i,
|
|
1905
|
+
transformManager: n,
|
|
2009
1906
|
options: {
|
|
2010
|
-
montageAreaWidth:
|
|
1907
|
+
montageAreaWidth: o,
|
|
2011
1908
|
montageAreaHeight: c
|
|
2012
1909
|
}
|
|
2013
1910
|
} = this.editor, u = e || r.getActiveObject();
|
|
@@ -2016,25 +1913,25 @@ class jt {
|
|
|
2016
1913
|
width: l,
|
|
2017
1914
|
height: d
|
|
2018
1915
|
} = u;
|
|
2019
|
-
if (l <
|
|
2020
|
-
var h = "Размер изображения меньше минимального размера канваса, поэтому оно будет растянуто до минимальных размеров: ".concat(
|
|
1916
|
+
if (l < Z || d < z) {
|
|
1917
|
+
var h = "Размер изображения меньше минимального размера канваса, поэтому оно будет растянуто до минимальных размеров: ".concat(Z, "x").concat(z);
|
|
2021
1918
|
console.warn("scaleMontageAreaToImage. ".concat(h)), r.fire("editor:warning", {
|
|
2022
1919
|
message: h
|
|
2023
1920
|
});
|
|
2024
1921
|
}
|
|
2025
|
-
var v = Math.min(l,
|
|
1922
|
+
var v = Math.min(l, D), m = Math.min(d, L);
|
|
2026
1923
|
if (t) {
|
|
2027
1924
|
var {
|
|
2028
1925
|
width: f,
|
|
2029
1926
|
height: M
|
|
2030
|
-
} =
|
|
1927
|
+
} = i, g = l / f, C = d / M, y = Math.max(g, C);
|
|
2031
1928
|
v = f * y, m = M * y;
|
|
2032
1929
|
}
|
|
2033
1930
|
this.setResolutionWidth(v, {
|
|
2034
1931
|
withoutSave: !0
|
|
2035
1932
|
}), this.setResolutionHeight(m, {
|
|
2036
1933
|
withoutSave: !0
|
|
2037
|
-
}), (l >
|
|
1934
|
+
}), (l > o || d > c) && n.calculateAndApplyDefaultZoom(o, c), n.resetObject(u, {
|
|
2038
1935
|
withoutSave: !0
|
|
2039
1936
|
}), r.centerObject(u), r.renderAll(), a || this.editor.historyManager.saveState(), r.fire("editor:canvas-scaled", {
|
|
2040
1937
|
width: v,
|
|
@@ -2068,13 +1965,13 @@ class jt {
|
|
|
2068
1965
|
transformManager: a,
|
|
2069
1966
|
historyManager: r,
|
|
2070
1967
|
options: {
|
|
2071
|
-
montageAreaWidth:
|
|
2072
|
-
montageAreaHeight:
|
|
1968
|
+
montageAreaWidth: i,
|
|
1969
|
+
montageAreaHeight: n
|
|
2073
1970
|
}
|
|
2074
1971
|
} = this.editor;
|
|
2075
|
-
a.resetZoom(), this.setResolutionWidth(
|
|
1972
|
+
a.resetZoom(), this.setResolutionWidth(i, {
|
|
2076
1973
|
withoutSave: !0
|
|
2077
|
-
}), this.setResolutionHeight(
|
|
1974
|
+
}), this.setResolutionHeight(n, {
|
|
2078
1975
|
withoutSave: !0
|
|
2079
1976
|
}), t.renderAll(), a.resetObjects(), e || r.saveState(), t.fire("editor:default-scale-set");
|
|
2080
1977
|
}
|
|
@@ -2090,10 +1987,10 @@ class jt {
|
|
|
2090
1987
|
overlayMask: a
|
|
2091
1988
|
}
|
|
2092
1989
|
} = this.editor, r = e.getObjects();
|
|
2093
|
-
return r.filter((
|
|
1990
|
+
return r.filter((i) => i.id !== t.id && i.id !== a.id);
|
|
2094
1991
|
}
|
|
2095
1992
|
}
|
|
2096
|
-
class
|
|
1993
|
+
class bt {
|
|
2097
1994
|
/**
|
|
2098
1995
|
* @param {object} options
|
|
2099
1996
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -2115,12 +2012,12 @@ class yt {
|
|
|
2115
2012
|
var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : this.options.montageAreaWidth, t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : this.options.montageAreaHeight, {
|
|
2116
2013
|
width: a,
|
|
2117
2014
|
height: r
|
|
2118
|
-
} = this.editor.montageArea,
|
|
2015
|
+
} = this.editor.montageArea, i = e / a, n = t / r, o = Math.min(i, n), {
|
|
2119
2016
|
minZoom: c,
|
|
2120
2017
|
maxZoom: u,
|
|
2121
2018
|
maxZoomFactor: l
|
|
2122
2019
|
} = this.options;
|
|
2123
|
-
this.minZoom = Math.min(
|
|
2020
|
+
this.minZoom = Math.min(o / l, c), this.maxZoom = Math.max(o * l, u), this.defaultZoom = o, this.setZoom(o);
|
|
2124
2021
|
}
|
|
2125
2022
|
/**
|
|
2126
2023
|
* Увеличение/уменьшение масштаба
|
|
@@ -2132,23 +2029,23 @@ class yt {
|
|
|
2132
2029
|
* Если передавать координаты курсора, то нужно быть аккуратнее, так как юзер может выйти за пределы рабочей области
|
|
2133
2030
|
*/
|
|
2134
2031
|
zoom() {
|
|
2135
|
-
var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] :
|
|
2032
|
+
var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : jt, t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
|
|
2136
2033
|
if (e) {
|
|
2137
2034
|
var {
|
|
2138
2035
|
canvas: a,
|
|
2139
2036
|
minZoom: r,
|
|
2140
|
-
maxZoom:
|
|
2141
|
-
} = this.editor,
|
|
2142
|
-
x:
|
|
2037
|
+
maxZoom: i
|
|
2038
|
+
} = this.editor, n = a.getZoom(), {
|
|
2039
|
+
x: o = t.pointX,
|
|
2143
2040
|
y: c = t.pointY
|
|
2144
|
-
} = a.getCenterPoint(), u = Number((
|
|
2145
|
-
u >
|
|
2146
|
-
x: Number(
|
|
2041
|
+
} = a.getCenterPoint(), u = Number((n + Number(e)).toFixed(2));
|
|
2042
|
+
u > i && (u = i), u < r && (u = r), a.zoomToPoint({
|
|
2043
|
+
x: Number(o),
|
|
2147
2044
|
y: Number(c)
|
|
2148
2045
|
}, u), a.fire("editor:zoom-changed", {
|
|
2149
2046
|
currentZoom: a.getZoom(),
|
|
2150
2047
|
zoom: u,
|
|
2151
|
-
pointX:
|
|
2048
|
+
pointX: o,
|
|
2152
2049
|
pointY: c
|
|
2153
2050
|
});
|
|
2154
2051
|
}
|
|
@@ -2164,17 +2061,17 @@ class yt {
|
|
|
2164
2061
|
minZoom: a,
|
|
2165
2062
|
maxZoom: r
|
|
2166
2063
|
} = this.editor, {
|
|
2167
|
-
x:
|
|
2168
|
-
y:
|
|
2169
|
-
} = t.getCenterPoint(),
|
|
2170
|
-
e > r && (
|
|
2171
|
-
x: Number(
|
|
2172
|
-
y: Number(
|
|
2173
|
-
},
|
|
2064
|
+
x: i,
|
|
2065
|
+
y: n
|
|
2066
|
+
} = t.getCenterPoint(), o = e;
|
|
2067
|
+
e > r && (o = r), e < a && (o = a), t.zoomToPoint({
|
|
2068
|
+
x: Number(i),
|
|
2069
|
+
y: Number(n)
|
|
2070
|
+
}, o), t.fire("editor:zoom-changed", {
|
|
2174
2071
|
currentZoom: t.getZoom(),
|
|
2175
|
-
zoom:
|
|
2176
|
-
pointX:
|
|
2177
|
-
pointY:
|
|
2072
|
+
zoom: o,
|
|
2073
|
+
pointX: i,
|
|
2074
|
+
pointY: n
|
|
2178
2075
|
});
|
|
2179
2076
|
}
|
|
2180
2077
|
/**
|
|
@@ -2204,16 +2101,16 @@ class yt {
|
|
|
2204
2101
|
* @fires editor:object-rotated
|
|
2205
2102
|
*/
|
|
2206
2103
|
rotate() {
|
|
2207
|
-
var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] :
|
|
2104
|
+
var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : yt, {
|
|
2208
2105
|
withoutSave: t
|
|
2209
2106
|
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, {
|
|
2210
2107
|
canvas: a,
|
|
2211
2108
|
historyManager: r
|
|
2212
|
-
} = this.editor,
|
|
2213
|
-
if (
|
|
2214
|
-
var
|
|
2215
|
-
|
|
2216
|
-
angle:
|
|
2109
|
+
} = this.editor, i = a.getActiveObject();
|
|
2110
|
+
if (i) {
|
|
2111
|
+
var n = i.angle + e;
|
|
2112
|
+
i.rotate(n), i.setCoords(), a.renderAll(), t || r.saveState(), a.fire("editor:object-rotated", {
|
|
2113
|
+
angle: n
|
|
2217
2114
|
});
|
|
2218
2115
|
}
|
|
2219
2116
|
}
|
|
@@ -2259,11 +2156,11 @@ class yt {
|
|
|
2259
2156
|
withoutSave: a
|
|
2260
2157
|
} = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, {
|
|
2261
2158
|
canvas: r,
|
|
2262
|
-
historyManager:
|
|
2263
|
-
} = this.editor,
|
|
2264
|
-
|
|
2265
|
-
|
|
2266
|
-
}) :
|
|
2159
|
+
historyManager: i
|
|
2160
|
+
} = this.editor, n = e || r.getActiveObject();
|
|
2161
|
+
n && (n.type === "activeselection" ? n.getObjects().forEach((o) => {
|
|
2162
|
+
o.set("opacity", t);
|
|
2163
|
+
}) : n.set("opacity", t), r.renderAll(), a || i.saveState(), r.fire("editor:object-opacity-changed", t));
|
|
2267
2164
|
}
|
|
2268
2165
|
/**
|
|
2269
2166
|
* Масштабирование изображения
|
|
@@ -2283,32 +2180,32 @@ class yt {
|
|
|
2283
2180
|
withoutSave: a,
|
|
2284
2181
|
fitAsOneObject: r
|
|
2285
2182
|
} = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, {
|
|
2286
|
-
canvas:
|
|
2287
|
-
imageManager:
|
|
2288
|
-
historyManager:
|
|
2289
|
-
} = this.editor, c = e ||
|
|
2183
|
+
canvas: i,
|
|
2184
|
+
imageManager: n,
|
|
2185
|
+
historyManager: o
|
|
2186
|
+
} = this.editor, c = e || i.getActiveObject();
|
|
2290
2187
|
if (c) {
|
|
2291
2188
|
if (["activeselection"].includes(c.type) && !r) {
|
|
2292
2189
|
var u = c.getObjects();
|
|
2293
|
-
|
|
2294
|
-
var v =
|
|
2190
|
+
i.discardActiveObject(), u.forEach((h) => {
|
|
2191
|
+
var v = n.calculateScaleFactor({
|
|
2295
2192
|
imageObject: h,
|
|
2296
2193
|
scaleType: t
|
|
2297
2194
|
});
|
|
2298
|
-
h.scale(v),
|
|
2195
|
+
h.scale(v), i.centerObject(h);
|
|
2299
2196
|
});
|
|
2300
|
-
var l = new
|
|
2301
|
-
canvas:
|
|
2197
|
+
var l = new Y(u, {
|
|
2198
|
+
canvas: i
|
|
2302
2199
|
});
|
|
2303
|
-
|
|
2200
|
+
i.setActiveObject(l);
|
|
2304
2201
|
} else {
|
|
2305
|
-
var d =
|
|
2202
|
+
var d = n.calculateScaleFactor({
|
|
2306
2203
|
imageObject: c,
|
|
2307
2204
|
scaleType: t
|
|
2308
2205
|
});
|
|
2309
|
-
c.scale(d),
|
|
2206
|
+
c.scale(d), i.centerObject(c);
|
|
2310
2207
|
}
|
|
2311
|
-
|
|
2208
|
+
i.renderAll(), a || o.saveState(), i.fire("editor:image-fitted", {
|
|
2312
2209
|
type: t
|
|
2313
2210
|
});
|
|
2314
2211
|
}
|
|
@@ -2334,15 +2231,15 @@ class yt {
|
|
|
2334
2231
|
withoutSave: a = !1
|
|
2335
2232
|
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, {
|
|
2336
2233
|
canvas: r,
|
|
2337
|
-
montageArea:
|
|
2338
|
-
imageManager:
|
|
2339
|
-
historyManager:
|
|
2234
|
+
montageArea: i,
|
|
2235
|
+
imageManager: n,
|
|
2236
|
+
historyManager: o,
|
|
2340
2237
|
options: {
|
|
2341
2238
|
scaleType: c
|
|
2342
2239
|
}
|
|
2343
2240
|
} = this.editor, u = e || r.getActiveObject();
|
|
2344
2241
|
if (!(!u || u.locked)) {
|
|
2345
|
-
if (
|
|
2242
|
+
if (o.suspendHistory(), u.type !== "image" && u.format !== "svg" && (u.set({
|
|
2346
2243
|
scaleX: 1,
|
|
2347
2244
|
scaleY: 1,
|
|
2348
2245
|
flipX: !1,
|
|
@@ -2357,10 +2254,10 @@ class yt {
|
|
|
2357
2254
|
var {
|
|
2358
2255
|
width: l,
|
|
2359
2256
|
height: d
|
|
2360
|
-
} =
|
|
2257
|
+
} = i, {
|
|
2361
2258
|
width: h,
|
|
2362
2259
|
height: v
|
|
2363
|
-
} = u, m =
|
|
2260
|
+
} = u, m = n.calculateScaleFactor({
|
|
2364
2261
|
imageObject: u,
|
|
2365
2262
|
scaleType: c
|
|
2366
2263
|
});
|
|
@@ -2376,11 +2273,11 @@ class yt {
|
|
|
2376
2273
|
flipX: !1,
|
|
2377
2274
|
flipY: !1,
|
|
2378
2275
|
angle: 0
|
|
2379
|
-
}), r.centerObject(u), r.renderAll(),
|
|
2276
|
+
}), r.centerObject(u), r.renderAll(), o.resumeHistory(), a || o.saveState(), r.fire("editor:object-reset");
|
|
2380
2277
|
}
|
|
2381
2278
|
}
|
|
2382
2279
|
}
|
|
2383
|
-
class
|
|
2280
|
+
class It {
|
|
2384
2281
|
/**
|
|
2385
2282
|
* @param {object} options
|
|
2386
2283
|
* @param {ImageEditor} options.editor – экземпляр редактора
|
|
@@ -2430,15 +2327,15 @@ class pt {
|
|
|
2430
2327
|
a.suspendHistory(), t.setCoords();
|
|
2431
2328
|
var {
|
|
2432
2329
|
left: r,
|
|
2433
|
-
top:
|
|
2434
|
-
width:
|
|
2435
|
-
height:
|
|
2330
|
+
top: i,
|
|
2331
|
+
width: n,
|
|
2332
|
+
height: o
|
|
2436
2333
|
} = t.getBoundingRect();
|
|
2437
2334
|
this.overlayMask.set({
|
|
2438
2335
|
left: r,
|
|
2439
|
-
top:
|
|
2440
|
-
width:
|
|
2441
|
-
height:
|
|
2336
|
+
top: i,
|
|
2337
|
+
width: n,
|
|
2338
|
+
height: o
|
|
2442
2339
|
}), e.discardActiveObject(), this.editor.layerManager.bringToFront(this.overlayMask, {
|
|
2443
2340
|
withoutSave: !0
|
|
2444
2341
|
}), a.resumeHistory();
|
|
@@ -2480,7 +2377,7 @@ class pt {
|
|
|
2480
2377
|
}
|
|
2481
2378
|
}
|
|
2482
2379
|
}
|
|
2483
|
-
class
|
|
2380
|
+
class F {
|
|
2484
2381
|
/**
|
|
2485
2382
|
* @param {object} options
|
|
2486
2383
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -2506,10 +2403,10 @@ class W {
|
|
|
2506
2403
|
historyManager: r
|
|
2507
2404
|
} = this.editor;
|
|
2508
2405
|
r.suspendHistory();
|
|
2509
|
-
var
|
|
2510
|
-
|
|
2511
|
-
a.bringObjectToFront(
|
|
2512
|
-
}) : a.bringObjectToFront(
|
|
2406
|
+
var i = e || a.getActiveObject();
|
|
2407
|
+
i && (i.type === "activeselection" ? i.getObjects().forEach((n) => {
|
|
2408
|
+
a.bringObjectToFront(n);
|
|
2409
|
+
}) : a.bringObjectToFront(i), a.renderAll(), r.resumeHistory(), t || r.saveState(), a.fire("editor:object-bring-to-front"));
|
|
2513
2410
|
}
|
|
2514
2411
|
/**
|
|
2515
2412
|
* Поднять объект на один уровень вверх по оси Z
|
|
@@ -2526,8 +2423,8 @@ class W {
|
|
|
2526
2423
|
historyManager: r
|
|
2527
2424
|
} = this.editor;
|
|
2528
2425
|
r.suspendHistory();
|
|
2529
|
-
var
|
|
2530
|
-
|
|
2426
|
+
var i = e || a.getActiveObject();
|
|
2427
|
+
i && (i.type === "activeselection" ? F._moveSelectionForward(a, i) : a.bringObjectForward(i), a.renderAll(), r.resumeHistory(), t || r.saveState(), a.fire("editor:object-bring-forward"));
|
|
2531
2428
|
}
|
|
2532
2429
|
/**
|
|
2533
2430
|
* Отправить объект на задний план по оси Z
|
|
@@ -2542,20 +2439,20 @@ class W {
|
|
|
2542
2439
|
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, {
|
|
2543
2440
|
canvas: a,
|
|
2544
2441
|
montageArea: r,
|
|
2545
|
-
historyManager:
|
|
2442
|
+
historyManager: i,
|
|
2546
2443
|
interactionBlocker: {
|
|
2547
|
-
overlayMask:
|
|
2444
|
+
overlayMask: n
|
|
2548
2445
|
}
|
|
2549
2446
|
} = this.editor;
|
|
2550
|
-
|
|
2551
|
-
var
|
|
2552
|
-
if (
|
|
2553
|
-
if (
|
|
2554
|
-
for (var c =
|
|
2447
|
+
i.suspendHistory();
|
|
2448
|
+
var o = e || a.getActiveObject();
|
|
2449
|
+
if (o) {
|
|
2450
|
+
if (o.type === "activeselection")
|
|
2451
|
+
for (var c = o.getObjects(), u = c.length - 1; u >= 0; u -= 1)
|
|
2555
2452
|
a.sendObjectToBack(c[u]);
|
|
2556
2453
|
else
|
|
2557
|
-
a.sendObjectToBack(
|
|
2558
|
-
a.sendObjectToBack(r), a.sendObjectToBack(
|
|
2454
|
+
a.sendObjectToBack(o);
|
|
2455
|
+
a.sendObjectToBack(r), a.sendObjectToBack(n), a.renderAll(), i.resumeHistory(), t || i.saveState(), a.fire("editor:object-send-to-back");
|
|
2559
2456
|
}
|
|
2560
2457
|
}
|
|
2561
2458
|
/**
|
|
@@ -2570,14 +2467,14 @@ class W {
|
|
|
2570
2467
|
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, {
|
|
2571
2468
|
canvas: a,
|
|
2572
2469
|
montageArea: r,
|
|
2573
|
-
historyManager:
|
|
2470
|
+
historyManager: i,
|
|
2574
2471
|
interactionBlocker: {
|
|
2575
|
-
overlayMask:
|
|
2472
|
+
overlayMask: n
|
|
2576
2473
|
}
|
|
2577
2474
|
} = this.editor;
|
|
2578
|
-
|
|
2579
|
-
var
|
|
2580
|
-
|
|
2475
|
+
i.suspendHistory();
|
|
2476
|
+
var o = e || a.getActiveObject();
|
|
2477
|
+
o && (o.type === "activeselection" ? F._moveSelectionBackwards(a, o) : a.sendObjectBackwards(o), a.sendObjectToBack(r), a.sendObjectToBack(n), a.renderAll(), i.resumeHistory(), t || i.saveState(), a.fire("editor:object-send-backwards"));
|
|
2581
2478
|
}
|
|
2582
2479
|
/**
|
|
2583
2480
|
* Сдвигает выделенные объекты на один уровень вверх относительно ближайшего верхнего объекта
|
|
@@ -2587,20 +2484,20 @@ class W {
|
|
|
2587
2484
|
* @private
|
|
2588
2485
|
*/
|
|
2589
2486
|
static _moveSelectionForward(e, t) {
|
|
2590
|
-
for (var a = e.getObjects(), r = t.getObjects(),
|
|
2487
|
+
for (var a = e.getObjects(), r = t.getObjects(), i = r.map((l) => a.indexOf(l)), n = -1, o = function(d) {
|
|
2591
2488
|
var h = a[d];
|
|
2592
|
-
if (!r.includes(h) &&
|
|
2593
|
-
return
|
|
2594
|
-
}, c = 0; c < a.length && !
|
|
2489
|
+
if (!r.includes(h) && i.some((v) => d > v))
|
|
2490
|
+
return n = d, 1;
|
|
2491
|
+
}, c = 0; c < a.length && !o(c); c += 1)
|
|
2595
2492
|
;
|
|
2596
|
-
if (
|
|
2493
|
+
if (n !== -1) {
|
|
2597
2494
|
var u = r.map((l) => ({
|
|
2598
2495
|
obj: l,
|
|
2599
2496
|
index: a.indexOf(l)
|
|
2600
2497
|
})).sort((l, d) => d.index - l.index);
|
|
2601
2498
|
u.forEach((l) => {
|
|
2602
2499
|
var d = a.indexOf(l.obj);
|
|
2603
|
-
d <
|
|
2500
|
+
d < n && (e.moveObjectTo(l.obj, n), n = d);
|
|
2604
2501
|
});
|
|
2605
2502
|
}
|
|
2606
2503
|
}
|
|
@@ -2612,68 +2509,68 @@ class W {
|
|
|
2612
2509
|
* @private
|
|
2613
2510
|
*/
|
|
2614
2511
|
static _moveSelectionBackwards(e, t) {
|
|
2615
|
-
for (var a = e.getObjects(), r = t.getObjects(),
|
|
2616
|
-
e.moveObjectTo(r[
|
|
2512
|
+
for (var a = e.getObjects(), r = t.getObjects(), i = Math.min(...r.map((o) => a.indexOf(o))), n = r.length - 1; n >= 0; n -= 1)
|
|
2513
|
+
e.moveObjectTo(r[n], i - 1);
|
|
2617
2514
|
}
|
|
2618
2515
|
}
|
|
2619
|
-
var
|
|
2620
|
-
function
|
|
2621
|
-
var t = Object.keys(
|
|
2516
|
+
var St = ["id", "left", "top", "width", "height", "fill"], At = ["id", "left", "top", "radius", "fill"], wt = ["id", "left", "top", "width", "height", "fill"];
|
|
2517
|
+
function Ie(s, e) {
|
|
2518
|
+
var t = Object.keys(s);
|
|
2622
2519
|
if (Object.getOwnPropertySymbols) {
|
|
2623
|
-
var a = Object.getOwnPropertySymbols(
|
|
2520
|
+
var a = Object.getOwnPropertySymbols(s);
|
|
2624
2521
|
e && (a = a.filter(function(r) {
|
|
2625
|
-
return Object.getOwnPropertyDescriptor(
|
|
2522
|
+
return Object.getOwnPropertyDescriptor(s, r).enumerable;
|
|
2626
2523
|
})), t.push.apply(t, a);
|
|
2627
2524
|
}
|
|
2628
2525
|
return t;
|
|
2629
2526
|
}
|
|
2630
|
-
function
|
|
2527
|
+
function K(s) {
|
|
2631
2528
|
for (var e = 1; e < arguments.length; e++) {
|
|
2632
2529
|
var t = arguments[e] != null ? arguments[e] : {};
|
|
2633
|
-
e % 2 ?
|
|
2634
|
-
|
|
2635
|
-
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(
|
|
2636
|
-
Object.defineProperty(
|
|
2530
|
+
e % 2 ? Ie(Object(t), !0).forEach(function(a) {
|
|
2531
|
+
Ct(s, a, t[a]);
|
|
2532
|
+
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(s, Object.getOwnPropertyDescriptors(t)) : Ie(Object(t)).forEach(function(a) {
|
|
2533
|
+
Object.defineProperty(s, a, Object.getOwnPropertyDescriptor(t, a));
|
|
2637
2534
|
});
|
|
2638
2535
|
}
|
|
2639
|
-
return
|
|
2536
|
+
return s;
|
|
2640
2537
|
}
|
|
2641
|
-
function
|
|
2642
|
-
return (e =
|
|
2538
|
+
function Ct(s, e, t) {
|
|
2539
|
+
return (e = Nt(e)) in s ? Object.defineProperty(s, e, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : s[e] = t, s;
|
|
2643
2540
|
}
|
|
2644
|
-
function
|
|
2645
|
-
var e =
|
|
2541
|
+
function Nt(s) {
|
|
2542
|
+
var e = Dt(s, "string");
|
|
2646
2543
|
return typeof e == "symbol" ? e : e + "";
|
|
2647
2544
|
}
|
|
2648
|
-
function
|
|
2649
|
-
if (typeof
|
|
2650
|
-
var t =
|
|
2545
|
+
function Dt(s, e) {
|
|
2546
|
+
if (typeof s != "object" || !s) return s;
|
|
2547
|
+
var t = s[Symbol.toPrimitive];
|
|
2651
2548
|
if (t !== void 0) {
|
|
2652
|
-
var a = t.call(
|
|
2549
|
+
var a = t.call(s, e);
|
|
2653
2550
|
if (typeof a != "object") return a;
|
|
2654
2551
|
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
2655
2552
|
}
|
|
2656
|
-
return (e === "string" ? String : Number)(
|
|
2553
|
+
return (e === "string" ? String : Number)(s);
|
|
2657
2554
|
}
|
|
2658
|
-
function
|
|
2659
|
-
if (
|
|
2660
|
-
var t, a, r =
|
|
2555
|
+
function $(s, e) {
|
|
2556
|
+
if (s == null) return {};
|
|
2557
|
+
var t, a, r = Lt(s, e);
|
|
2661
2558
|
if (Object.getOwnPropertySymbols) {
|
|
2662
|
-
var
|
|
2663
|
-
for (a = 0; a <
|
|
2559
|
+
var i = Object.getOwnPropertySymbols(s);
|
|
2560
|
+
for (a = 0; a < i.length; a++) t = i[a], e.indexOf(t) === -1 && {}.propertyIsEnumerable.call(s, t) && (r[t] = s[t]);
|
|
2664
2561
|
}
|
|
2665
2562
|
return r;
|
|
2666
2563
|
}
|
|
2667
|
-
function
|
|
2668
|
-
if (
|
|
2564
|
+
function Lt(s, e) {
|
|
2565
|
+
if (s == null) return {};
|
|
2669
2566
|
var t = {};
|
|
2670
|
-
for (var a in
|
|
2567
|
+
for (var a in s) if ({}.hasOwnProperty.call(s, a)) {
|
|
2671
2568
|
if (e.indexOf(a) !== -1) continue;
|
|
2672
|
-
t[a] =
|
|
2569
|
+
t[a] = s[a];
|
|
2673
2570
|
}
|
|
2674
2571
|
return t;
|
|
2675
2572
|
}
|
|
2676
|
-
class
|
|
2573
|
+
class Et {
|
|
2677
2574
|
/**
|
|
2678
2575
|
* @param {object} options
|
|
2679
2576
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -2704,21 +2601,21 @@ class Nt {
|
|
|
2704
2601
|
id: t = "rect-".concat(w()),
|
|
2705
2602
|
left: a,
|
|
2706
2603
|
top: r,
|
|
2707
|
-
width:
|
|
2708
|
-
height:
|
|
2709
|
-
fill:
|
|
2710
|
-
} = e, c =
|
|
2604
|
+
width: i = 100,
|
|
2605
|
+
height: n = 100,
|
|
2606
|
+
fill: o = "blue"
|
|
2607
|
+
} = e, c = $(e, St), {
|
|
2711
2608
|
withoutSelection: u,
|
|
2712
2609
|
withoutAdding: l
|
|
2713
2610
|
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, {
|
|
2714
2611
|
canvas: d
|
|
2715
|
-
} = this.editor, h = new
|
|
2612
|
+
} = this.editor, h = new Ue(K({
|
|
2716
2613
|
id: t,
|
|
2717
2614
|
left: a,
|
|
2718
2615
|
top: r,
|
|
2719
|
-
width:
|
|
2720
|
-
height:
|
|
2721
|
-
fill:
|
|
2616
|
+
width: i,
|
|
2617
|
+
height: n,
|
|
2618
|
+
fill: o
|
|
2722
2619
|
}, c));
|
|
2723
2620
|
return !a && !r && d.centerObject(h), l || (d.add(h), u || d.setActiveObject(h), d.renderAll()), h;
|
|
2724
2621
|
}
|
|
@@ -2741,20 +2638,20 @@ class Nt {
|
|
|
2741
2638
|
id: t = "circle-".concat(w()),
|
|
2742
2639
|
left: a,
|
|
2743
2640
|
top: r,
|
|
2744
|
-
radius:
|
|
2745
|
-
fill:
|
|
2746
|
-
} = e,
|
|
2641
|
+
radius: i = 50,
|
|
2642
|
+
fill: n = "green"
|
|
2643
|
+
} = e, o = $(e, At), {
|
|
2747
2644
|
withoutSelection: c,
|
|
2748
2645
|
withoutAdding: u
|
|
2749
2646
|
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, {
|
|
2750
2647
|
canvas: l
|
|
2751
|
-
} = this.editor, d = new
|
|
2648
|
+
} = this.editor, d = new Ye(K({
|
|
2752
2649
|
id: t,
|
|
2753
2650
|
left: a,
|
|
2754
2651
|
top: r,
|
|
2755
|
-
fill:
|
|
2756
|
-
radius:
|
|
2757
|
-
},
|
|
2652
|
+
fill: n,
|
|
2653
|
+
radius: i
|
|
2654
|
+
}, o));
|
|
2758
2655
|
return !a && !r && l.centerObject(d), u || (l.add(d), c || l.setActiveObject(d), l.renderAll()), d;
|
|
2759
2656
|
}
|
|
2760
2657
|
/**
|
|
@@ -2777,49 +2674,49 @@ class Nt {
|
|
|
2777
2674
|
id: t = "triangle-".concat(w()),
|
|
2778
2675
|
left: a,
|
|
2779
2676
|
top: r,
|
|
2780
|
-
width:
|
|
2781
|
-
height:
|
|
2782
|
-
fill:
|
|
2783
|
-
} = e, c =
|
|
2677
|
+
width: i = 100,
|
|
2678
|
+
height: n = 100,
|
|
2679
|
+
fill: o = "yellow"
|
|
2680
|
+
} = e, c = $(e, wt), {
|
|
2784
2681
|
withoutSelection: u,
|
|
2785
2682
|
withoutAdding: l
|
|
2786
2683
|
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, {
|
|
2787
2684
|
canvas: d
|
|
2788
|
-
} = this.editor, h = new
|
|
2685
|
+
} = this.editor, h = new Pe(K({
|
|
2789
2686
|
id: t,
|
|
2790
2687
|
left: a,
|
|
2791
2688
|
top: r,
|
|
2792
|
-
fill:
|
|
2793
|
-
width:
|
|
2794
|
-
height:
|
|
2689
|
+
fill: o,
|
|
2690
|
+
width: i,
|
|
2691
|
+
height: n
|
|
2795
2692
|
}, c));
|
|
2796
2693
|
return !a && !r && d.centerObject(h), l || (d.add(h), u || d.setActiveObject(h), d.renderAll()), h;
|
|
2797
2694
|
}
|
|
2798
2695
|
}
|
|
2799
|
-
function
|
|
2696
|
+
function Se(s, e, t, a, r, i, n) {
|
|
2800
2697
|
try {
|
|
2801
|
-
var
|
|
2698
|
+
var o = s[i](n), c = o.value;
|
|
2802
2699
|
} catch (u) {
|
|
2803
2700
|
return void t(u);
|
|
2804
2701
|
}
|
|
2805
|
-
|
|
2702
|
+
o.done ? e(c) : Promise.resolve(c).then(a, r);
|
|
2806
2703
|
}
|
|
2807
|
-
function
|
|
2704
|
+
function Ae(s) {
|
|
2808
2705
|
return function() {
|
|
2809
2706
|
var e = this, t = arguments;
|
|
2810
2707
|
return new Promise(function(a, r) {
|
|
2811
|
-
var
|
|
2812
|
-
function
|
|
2813
|
-
|
|
2708
|
+
var i = s.apply(e, t);
|
|
2709
|
+
function n(c) {
|
|
2710
|
+
Se(i, a, r, n, o, "next", c);
|
|
2814
2711
|
}
|
|
2815
|
-
function
|
|
2816
|
-
|
|
2712
|
+
function o(c) {
|
|
2713
|
+
Se(i, a, r, n, o, "throw", c);
|
|
2817
2714
|
}
|
|
2818
|
-
|
|
2715
|
+
n(void 0);
|
|
2819
2716
|
});
|
|
2820
2717
|
};
|
|
2821
2718
|
}
|
|
2822
|
-
class
|
|
2719
|
+
class Ot {
|
|
2823
2720
|
/**
|
|
2824
2721
|
* @param {object} options
|
|
2825
2722
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -2836,7 +2733,7 @@ class Lt {
|
|
|
2836
2733
|
*/
|
|
2837
2734
|
copy() {
|
|
2838
2735
|
var e = this;
|
|
2839
|
-
return
|
|
2736
|
+
return Ae(function* () {
|
|
2840
2737
|
var {
|
|
2841
2738
|
canvas: t
|
|
2842
2739
|
} = e.editor, a = t.getActiveObject();
|
|
@@ -2858,12 +2755,12 @@ class Lt {
|
|
|
2858
2755
|
});
|
|
2859
2756
|
return;
|
|
2860
2757
|
}
|
|
2861
|
-
var
|
|
2862
|
-
|
|
2863
|
-
}),
|
|
2864
|
-
[
|
|
2758
|
+
var i = r.toCanvasElement(), n = yield new Promise((u) => {
|
|
2759
|
+
i.toBlob(u);
|
|
2760
|
+
}), o = new ClipboardItem({
|
|
2761
|
+
[n.type]: n
|
|
2865
2762
|
});
|
|
2866
|
-
yield navigator.clipboard.write([
|
|
2763
|
+
yield navigator.clipboard.write([o]), t.fire("editor:object-copied", {
|
|
2867
2764
|
object: r
|
|
2868
2765
|
});
|
|
2869
2766
|
} catch (u) {
|
|
@@ -2880,7 +2777,7 @@ class Lt {
|
|
|
2880
2777
|
*/
|
|
2881
2778
|
paste() {
|
|
2882
2779
|
var e = this;
|
|
2883
|
-
return
|
|
2780
|
+
return Ae(function* () {
|
|
2884
2781
|
var {
|
|
2885
2782
|
canvas: t
|
|
2886
2783
|
} = e.editor;
|
|
@@ -2891,7 +2788,7 @@ class Lt {
|
|
|
2891
2788
|
left: a.left + 10,
|
|
2892
2789
|
top: a.top + 10,
|
|
2893
2790
|
evented: !0
|
|
2894
|
-
}), a instanceof
|
|
2791
|
+
}), a instanceof Y ? (a.canvas = t, a.forEachObject((r) => {
|
|
2895
2792
|
t.add(r);
|
|
2896
2793
|
})) : t.add(a), t.setActiveObject(a), t.requestRenderAll(), t.fire("editor:object-pasted", {
|
|
2897
2794
|
object: a
|
|
@@ -2900,7 +2797,7 @@ class Lt {
|
|
|
2900
2797
|
})();
|
|
2901
2798
|
}
|
|
2902
2799
|
}
|
|
2903
|
-
class
|
|
2800
|
+
class Tt {
|
|
2904
2801
|
/**
|
|
2905
2802
|
* @param {object} options
|
|
2906
2803
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -2926,10 +2823,10 @@ class Et {
|
|
|
2926
2823
|
withoutSave: a
|
|
2927
2824
|
} = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, {
|
|
2928
2825
|
canvas: r,
|
|
2929
|
-
historyManager:
|
|
2930
|
-
} = this.editor,
|
|
2931
|
-
if (!(!
|
|
2932
|
-
var
|
|
2826
|
+
historyManager: i
|
|
2827
|
+
} = this.editor, n = e || r.getActiveObject();
|
|
2828
|
+
if (!(!n || n.locked)) {
|
|
2829
|
+
var o = {
|
|
2933
2830
|
lockMovementX: !0,
|
|
2934
2831
|
lockMovementY: !0,
|
|
2935
2832
|
lockRotation: !0,
|
|
@@ -2939,12 +2836,12 @@ class Et {
|
|
|
2939
2836
|
lockSkewingY: !0,
|
|
2940
2837
|
locked: !0
|
|
2941
2838
|
};
|
|
2942
|
-
|
|
2943
|
-
var c = !t && ["activeselection", "group"].includes(
|
|
2944
|
-
c &&
|
|
2945
|
-
u.set(
|
|
2946
|
-
}), r.renderAll(), a ||
|
|
2947
|
-
object:
|
|
2839
|
+
n.set(o);
|
|
2840
|
+
var c = !t && ["activeselection", "group"].includes(n.type);
|
|
2841
|
+
c && n.getObjects().forEach((u) => {
|
|
2842
|
+
u.set(o);
|
|
2843
|
+
}), r.renderAll(), a || i.saveState(), r.fire("editor:object-locked", {
|
|
2844
|
+
object: n
|
|
2948
2845
|
});
|
|
2949
2846
|
}
|
|
2950
2847
|
}
|
|
@@ -2963,9 +2860,9 @@ class Et {
|
|
|
2963
2860
|
} = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, {
|
|
2964
2861
|
canvas: a,
|
|
2965
2862
|
historyManager: r
|
|
2966
|
-
} = this.editor,
|
|
2967
|
-
if (
|
|
2968
|
-
var
|
|
2863
|
+
} = this.editor, i = e || a.getActiveObject();
|
|
2864
|
+
if (i) {
|
|
2865
|
+
var n = {
|
|
2969
2866
|
lockMovementX: !1,
|
|
2970
2867
|
lockMovementY: !1,
|
|
2971
2868
|
lockRotation: !1,
|
|
@@ -2975,15 +2872,15 @@ class Et {
|
|
|
2975
2872
|
lockSkewingY: !1,
|
|
2976
2873
|
locked: !1
|
|
2977
2874
|
};
|
|
2978
|
-
|
|
2979
|
-
|
|
2875
|
+
i.set(n), ["activeselection", "group"].includes(i.type) && i.getObjects().forEach((o) => {
|
|
2876
|
+
o.set(n);
|
|
2980
2877
|
}), a.renderAll(), t || r.saveState(), a.fire("editor:object-unlocked", {
|
|
2981
|
-
object:
|
|
2878
|
+
object: i
|
|
2982
2879
|
});
|
|
2983
2880
|
}
|
|
2984
2881
|
}
|
|
2985
2882
|
}
|
|
2986
|
-
class
|
|
2883
|
+
class kt {
|
|
2987
2884
|
/**
|
|
2988
2885
|
* @param {object} options
|
|
2989
2886
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -3010,10 +2907,10 @@ class Ot {
|
|
|
3010
2907
|
historyManager: r
|
|
3011
2908
|
} = this.editor;
|
|
3012
2909
|
r.suspendHistory();
|
|
3013
|
-
var
|
|
3014
|
-
if (
|
|
3015
|
-
var
|
|
3016
|
-
|
|
2910
|
+
var i = e || a.getActiveObject();
|
|
2911
|
+
if (i && i.type === "activeselection") {
|
|
2912
|
+
var n = i.getObjects(), o = new He(n);
|
|
2913
|
+
n.forEach((c) => a.remove(c)), o.set("id", "".concat(o.type, "-").concat(w())), a.add(o), a.setActiveObject(o), a.renderAll(), r.resumeHistory(), t || r.saveState(), a.fire("editor:objects-grouped");
|
|
3017
2914
|
}
|
|
3018
2915
|
}
|
|
3019
2916
|
/**
|
|
@@ -3032,18 +2929,18 @@ class Ot {
|
|
|
3032
2929
|
historyManager: r
|
|
3033
2930
|
} = this.editor;
|
|
3034
2931
|
r.suspendHistory();
|
|
3035
|
-
var
|
|
3036
|
-
if (!(!
|
|
3037
|
-
var
|
|
3038
|
-
a.remove(
|
|
3039
|
-
var
|
|
2932
|
+
var i = e || a.getActiveObject();
|
|
2933
|
+
if (!(!i || i.type !== "group")) {
|
|
2934
|
+
var n = i.removeAll();
|
|
2935
|
+
a.remove(i), n.forEach((c) => a.add(c));
|
|
2936
|
+
var o = new Y(n, {
|
|
3040
2937
|
canvas: a
|
|
3041
2938
|
});
|
|
3042
|
-
a.setActiveObject(
|
|
2939
|
+
a.setActiveObject(o), a.renderAll(), r.resumeHistory(), t || r.saveState(), a.fire("editor:objects-ungrouped");
|
|
3043
2940
|
}
|
|
3044
2941
|
}
|
|
3045
2942
|
}
|
|
3046
|
-
class
|
|
2943
|
+
class xt {
|
|
3047
2944
|
/**
|
|
3048
2945
|
* @param {object} options
|
|
3049
2946
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -3065,19 +2962,19 @@ class Tt {
|
|
|
3065
2962
|
objectLockManager: a
|
|
3066
2963
|
} = this.editor;
|
|
3067
2964
|
e.discardActiveObject();
|
|
3068
|
-
var r = t.getObjects(),
|
|
2965
|
+
var r = t.getObjects(), i = r.some((o) => o.locked), n = r.length > 1 ? new Y(t.getObjects(), {
|
|
3069
2966
|
canvas: e
|
|
3070
2967
|
}) : r[0];
|
|
3071
|
-
|
|
3072
|
-
object:
|
|
2968
|
+
i && a.lockObject({
|
|
2969
|
+
object: n,
|
|
3073
2970
|
skipInnerObjects: !0,
|
|
3074
2971
|
withoutSave: !0
|
|
3075
|
-
}), e.setActiveObject(
|
|
3076
|
-
selected:
|
|
2972
|
+
}), e.setActiveObject(n), e.requestRenderAll(), e.fire("editor:all-objects-selected", {
|
|
2973
|
+
selected: n
|
|
3077
2974
|
});
|
|
3078
2975
|
}
|
|
3079
2976
|
}
|
|
3080
|
-
class
|
|
2977
|
+
class Bt {
|
|
3081
2978
|
/**
|
|
3082
2979
|
* @param {object} options
|
|
3083
2980
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -3102,17 +2999,17 @@ class kt {
|
|
|
3102
2999
|
} = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, {
|
|
3103
3000
|
canvas: a,
|
|
3104
3001
|
historyManager: r
|
|
3105
|
-
} = this.editor,
|
|
3106
|
-
|
|
3107
|
-
if (
|
|
3108
|
-
this.ungroup(
|
|
3002
|
+
} = this.editor, i = (e || a.getActiveObjects()).filter((n) => !n.locked);
|
|
3003
|
+
i != null && i.length && (r.suspendHistory(), i.forEach((n) => {
|
|
3004
|
+
if (n.type === "group" && n.format !== "svg") {
|
|
3005
|
+
this.ungroup(n), this.deleteSelectedObjects();
|
|
3109
3006
|
return;
|
|
3110
3007
|
}
|
|
3111
|
-
a.remove(
|
|
3008
|
+
a.remove(n);
|
|
3112
3009
|
}), a.discardActiveObject(), a.renderAll(), r.resumeHistory(), t || r.saveState(), a.fire("editor:objects-deleted"));
|
|
3113
3010
|
}
|
|
3114
3011
|
}
|
|
3115
|
-
var
|
|
3012
|
+
var Zt = {
|
|
3116
3013
|
IMAGE_MANAGER: {
|
|
3117
3014
|
/**
|
|
3118
3015
|
* Некорректный Content-Type изображения
|
|
@@ -3140,7 +3037,7 @@ var xt = {
|
|
|
3140
3037
|
IMAGE_EXPORT_FAILED: "IMAGE_EXPORT_FAILED"
|
|
3141
3038
|
}
|
|
3142
3039
|
};
|
|
3143
|
-
class
|
|
3040
|
+
class V {
|
|
3144
3041
|
constructor(e) {
|
|
3145
3042
|
var {
|
|
3146
3043
|
editor: t
|
|
@@ -3162,10 +3059,10 @@ class F {
|
|
|
3162
3059
|
origin: t = "ImageEditor",
|
|
3163
3060
|
method: a = "Unknown Method",
|
|
3164
3061
|
code: r,
|
|
3165
|
-
data:
|
|
3166
|
-
message:
|
|
3062
|
+
data: i,
|
|
3063
|
+
message: n
|
|
3167
3064
|
} = e;
|
|
3168
|
-
if (!
|
|
3065
|
+
if (!V.isValidErrorCode(r)) {
|
|
3169
3066
|
console.warn("Неизвестный код ошибки: ", {
|
|
3170
3067
|
code: r,
|
|
3171
3068
|
origin: t,
|
|
@@ -3174,13 +3071,13 @@ class F {
|
|
|
3174
3071
|
return;
|
|
3175
3072
|
}
|
|
3176
3073
|
if (r) {
|
|
3177
|
-
var
|
|
3178
|
-
console.error("".concat(t, ". ").concat(a, ". ").concat(r, ". ").concat(
|
|
3074
|
+
var o = n || r;
|
|
3075
|
+
console.error("".concat(t, ". ").concat(a, ". ").concat(r, ". ").concat(o), i), this.editor.canvas.fire("editor:error", {
|
|
3179
3076
|
code: r,
|
|
3180
3077
|
origin: t,
|
|
3181
3078
|
method: a,
|
|
3182
|
-
message:
|
|
3183
|
-
data:
|
|
3079
|
+
message: o,
|
|
3080
|
+
data: i
|
|
3184
3081
|
});
|
|
3185
3082
|
}
|
|
3186
3083
|
}
|
|
@@ -3199,10 +3096,10 @@ class F {
|
|
|
3199
3096
|
origin: t = "ImageEditor",
|
|
3200
3097
|
method: a = "Unknown Method",
|
|
3201
3098
|
code: r,
|
|
3202
|
-
message:
|
|
3203
|
-
data:
|
|
3099
|
+
message: i,
|
|
3100
|
+
data: n
|
|
3204
3101
|
} = e;
|
|
3205
|
-
if (!
|
|
3102
|
+
if (!V.isValidErrorCode(r)) {
|
|
3206
3103
|
console.warn("Неизвестный код ошибки: ", {
|
|
3207
3104
|
code: r,
|
|
3208
3105
|
origin: t,
|
|
@@ -3210,131 +3107,65 @@ class F {
|
|
|
3210
3107
|
});
|
|
3211
3108
|
return;
|
|
3212
3109
|
}
|
|
3213
|
-
var
|
|
3214
|
-
console.warn("".concat(t, ". ").concat(a, ". ").concat(r, ". ").concat(
|
|
3110
|
+
var o = i || r;
|
|
3111
|
+
console.warn("".concat(t, ". ").concat(a, ". ").concat(r, ". ").concat(o), n), this.editor.canvas.fire("editor:warning", {
|
|
3215
3112
|
code: r,
|
|
3216
3113
|
origin: t,
|
|
3217
3114
|
method: a,
|
|
3218
|
-
message:
|
|
3219
|
-
data:
|
|
3115
|
+
message: i,
|
|
3116
|
+
data: n
|
|
3220
3117
|
});
|
|
3221
3118
|
}
|
|
3222
3119
|
static isValidErrorCode(e) {
|
|
3223
|
-
return e ? Object.values(
|
|
3120
|
+
return e ? Object.values(Zt).some((t) => Object.values(t).includes(e)) : !1;
|
|
3224
3121
|
}
|
|
3225
3122
|
}
|
|
3226
|
-
|
|
3227
|
-
|
|
3228
|
-
|
|
3229
|
-
|
|
3230
|
-
|
|
3231
|
-
|
|
3232
|
-
|
|
3233
|
-
}
|
|
3234
|
-
function Bt(o) {
|
|
3235
|
-
return function() {
|
|
3236
|
-
var e = this, t = arguments;
|
|
3237
|
-
return new Promise(function(a, r) {
|
|
3238
|
-
var n = o.apply(e, t);
|
|
3239
|
-
function i(c) {
|
|
3240
|
-
Ie(n, a, r, i, s, "next", c);
|
|
3241
|
-
}
|
|
3242
|
-
function s(c) {
|
|
3243
|
-
Ie(n, a, r, i, s, "throw", c);
|
|
3244
|
-
}
|
|
3245
|
-
i(void 0);
|
|
3246
|
-
});
|
|
3247
|
-
};
|
|
3248
|
-
}
|
|
3249
|
-
class ie {
|
|
3250
|
-
constructor(e) {
|
|
3251
|
-
var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
|
|
3123
|
+
class oe {
|
|
3124
|
+
/**
|
|
3125
|
+
* Конструктор класса ImageEditor.
|
|
3126
|
+
* @param {string} canvasId - идентификатор канваса, в котором будет создан редактор
|
|
3127
|
+
* @param {IEditorOptions} options - опции и настройки редактора
|
|
3128
|
+
*/
|
|
3129
|
+
constructor(e, t) {
|
|
3252
3130
|
this.options = t;
|
|
3253
|
-
|
|
3254
|
-
|
|
3255
|
-
minZoom: r,
|
|
3256
|
-
maxZoom: n
|
|
3257
|
-
} = t;
|
|
3258
|
-
this.containerId = e, this.editorId = "".concat(e, "-").concat(w()), this.clipboard = null, this.defaultZoom = a, this.minZoom = r || vt, this.maxZoom = n || mt, this.init();
|
|
3131
|
+
const { defaultScale: a, minZoom: r, maxZoom: i } = t;
|
|
3132
|
+
this.containerId = e, this.editorId = `${e}-${w()}`, this.clipboard = null, this.defaultZoom = a, this.minZoom = r || ft, this.maxZoom = i || Mt, this.init();
|
|
3259
3133
|
}
|
|
3260
3134
|
init() {
|
|
3261
|
-
|
|
3262
|
-
|
|
3263
|
-
|
|
3264
|
-
|
|
3265
|
-
|
|
3266
|
-
|
|
3267
|
-
canvasWrapperHeight: n,
|
|
3135
|
+
return Q(this, null, function* () {
|
|
3136
|
+
const {
|
|
3137
|
+
editorContainerWidth: e,
|
|
3138
|
+
editorContainerHeight: t,
|
|
3139
|
+
canvasWrapperWidth: a,
|
|
3140
|
+
canvasWrapperHeight: r,
|
|
3268
3141
|
canvasCSSWidth: i,
|
|
3269
|
-
canvasCSSHeight:
|
|
3270
|
-
initialImage:
|
|
3271
|
-
initialStateJSON:
|
|
3272
|
-
scaleType:
|
|
3273
|
-
_onReadyCallback:
|
|
3274
|
-
} =
|
|
3275
|
-
if (
|
|
3276
|
-
|
|
3277
|
-
|
|
3278
|
-
|
|
3279
|
-
|
|
3280
|
-
|
|
3281
|
-
|
|
3282
|
-
editor: e
|
|
3283
|
-
}), e.canvasManager = new jt({
|
|
3284
|
-
editor: e
|
|
3285
|
-
}), e.imageManager = new A({
|
|
3286
|
-
editor: e
|
|
3287
|
-
}), e.layerManager = new W({
|
|
3288
|
-
editor: e
|
|
3289
|
-
}), e.shapeManager = new Nt({
|
|
3290
|
-
editor: e
|
|
3291
|
-
}), e.interactionBlocker = new pt({
|
|
3292
|
-
editor: e
|
|
3293
|
-
}), e.clipboardManager = new Lt({
|
|
3294
|
-
editor: e
|
|
3295
|
-
}), e.objectLockManager = new Et({
|
|
3296
|
-
editor: e
|
|
3297
|
-
}), e.groupingManager = new Ot({
|
|
3298
|
-
editor: e
|
|
3299
|
-
}), e.selectionManager = new Tt({
|
|
3300
|
-
editor: e
|
|
3301
|
-
}), e.deletionManager = new kt({
|
|
3302
|
-
editor: e
|
|
3303
|
-
}), e._createMonageArea(), e._createClippingArea(), e.listeners = new z({
|
|
3304
|
-
editor: e,
|
|
3305
|
-
options: e.options
|
|
3306
|
-
}), e.canvasManager.setEditorContainerWidth(t), e.canvasManager.setEditorContainerHeight(a), e.canvasManager.setCanvasWrapperWidth(r), e.canvasManager.setCanvasWrapperHeight(n), e.canvasManager.setCanvasCSSWidth(i), e.canvasManager.setCanvasCSSHeight(s), c != null && c.source) {
|
|
3307
|
-
var {
|
|
3308
|
-
source: h,
|
|
3309
|
-
scale: v = "image-".concat(l),
|
|
3310
|
-
withoutSave: m = !0
|
|
3311
|
-
} = c;
|
|
3312
|
-
yield e.imageManager.importImage({
|
|
3313
|
-
source: h,
|
|
3314
|
-
scale: v,
|
|
3315
|
-
withoutSave: m
|
|
3316
|
-
});
|
|
3142
|
+
canvasCSSHeight: n,
|
|
3143
|
+
initialImage: o,
|
|
3144
|
+
initialStateJSON: c,
|
|
3145
|
+
scaleType: u,
|
|
3146
|
+
_onReadyCallback: l
|
|
3147
|
+
} = this.options;
|
|
3148
|
+
if (tt.apply(), this.canvas = new _e(this.containerId, this.options), this.moduleLoader = new Ve(), this.workerManager = new Ge(), this.errorManager = new V({ editor: this }), this.historyManager = new mt({ editor: this }), this.toolbar = new vt({ editor: this }), this.transformManager = new bt({ editor: this }), this.canvasManager = new pt({ editor: this }), this.imageManager = new A({ editor: this }), this.layerManager = new F({ editor: this }), this.shapeManager = new Et({ editor: this }), this.interactionBlocker = new It({ editor: this }), this.clipboardManager = new Ot({ editor: this }), this.objectLockManager = new Tt({ editor: this }), this.groupingManager = new kt({ editor: this }), this.selectionManager = new xt({ editor: this }), this.deletionManager = new Bt({ editor: this }), this._createMonageArea(), this._createClippingArea(), this.listeners = new U({ 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), o != null && o.source) {
|
|
3149
|
+
const {
|
|
3150
|
+
source: d,
|
|
3151
|
+
scale: h = `image-${u}`,
|
|
3152
|
+
withoutSave: v = !0
|
|
3153
|
+
} = o;
|
|
3154
|
+
yield this.imageManager.importImage({ source: d, scale: h, withoutSave: v });
|
|
3317
3155
|
} else
|
|
3318
|
-
|
|
3319
|
-
|
|
3320
|
-
|
|
3321
|
-
u && e.historyManager.loadStateFromFullState(u), e.historyManager.saveState(), console.log("editor:ready"), e.canvas.fire("editor:ready", e), typeof d == "function" && d(e);
|
|
3322
|
-
})();
|
|
3156
|
+
this.canvasManager.setDefaultScale({ withoutSave: !0 });
|
|
3157
|
+
c && this.historyManager.loadStateFromFullState(c), this.historyManager.saveState(), console.log("editor:ready"), this.canvas.fire("editor:ready", this), typeof l == "function" && l(this);
|
|
3158
|
+
});
|
|
3323
3159
|
}
|
|
3324
|
-
/**
|
|
3325
|
-
* Создаёт монтажную область
|
|
3326
|
-
* @private
|
|
3327
|
-
* @returns {void}
|
|
3328
|
-
*/
|
|
3329
3160
|
_createMonageArea() {
|
|
3330
|
-
|
|
3161
|
+
const {
|
|
3331
3162
|
montageAreaWidth: e,
|
|
3332
3163
|
montageAreaHeight: t
|
|
3333
3164
|
} = this.options;
|
|
3334
3165
|
this.montageArea = this.shapeManager.addRectangle({
|
|
3335
3166
|
width: e,
|
|
3336
3167
|
height: t,
|
|
3337
|
-
fill:
|
|
3168
|
+
fill: oe._createMosaicPattern(),
|
|
3338
3169
|
stroke: null,
|
|
3339
3170
|
strokeWidth: 0,
|
|
3340
3171
|
selectable: !1,
|
|
@@ -3346,17 +3177,10 @@ class ie {
|
|
|
3346
3177
|
originY: "center",
|
|
3347
3178
|
objectCaching: !1,
|
|
3348
3179
|
noScaleCache: !0
|
|
3349
|
-
}, {
|
|
3350
|
-
withoutSelection: !0
|
|
3351
|
-
});
|
|
3180
|
+
}, { withoutSelection: !0 });
|
|
3352
3181
|
}
|
|
3353
|
-
/**
|
|
3354
|
-
* Создаёт область клиппинга
|
|
3355
|
-
* @private
|
|
3356
|
-
* @returns {void}
|
|
3357
|
-
*/
|
|
3358
3182
|
_createClippingArea() {
|
|
3359
|
-
|
|
3183
|
+
const {
|
|
3360
3184
|
montageAreaWidth: e,
|
|
3361
3185
|
montageAreaHeight: t
|
|
3362
3186
|
} = this.options;
|
|
@@ -3365,7 +3189,6 @@ class ie {
|
|
|
3365
3189
|
width: e,
|
|
3366
3190
|
height: t,
|
|
3367
3191
|
stroke: null,
|
|
3368
|
-
fill: null,
|
|
3369
3192
|
strokeWidth: 0,
|
|
3370
3193
|
hasBorders: !1,
|
|
3371
3194
|
hasControls: !1,
|
|
@@ -3373,32 +3196,26 @@ class ie {
|
|
|
3373
3196
|
evented: !1,
|
|
3374
3197
|
originX: "center",
|
|
3375
3198
|
originY: "center"
|
|
3376
|
-
}, {
|
|
3377
|
-
withoutSelection: !0,
|
|
3378
|
-
withoutAdding: !0
|
|
3379
|
-
});
|
|
3199
|
+
}, { withoutSelection: !0, withoutAdding: !0 });
|
|
3380
3200
|
}
|
|
3381
|
-
/**
|
|
3382
|
-
* Метод для удаления редактора и всех слушателей.
|
|
3383
|
-
*/
|
|
3384
3201
|
destroy() {
|
|
3385
3202
|
this.listeners.destroy(), this.toolbar.destroy(), this.canvas.dispose(), this.workerManager.worker.terminate(), this.imageManager.revokeBlobUrls();
|
|
3386
3203
|
}
|
|
3387
3204
|
/**
|
|
3388
3205
|
* Создает паттерн мозаики.
|
|
3389
|
-
* @returns {
|
|
3206
|
+
* @returns {Pattern} паттерн мозаики
|
|
3390
3207
|
*/
|
|
3391
3208
|
static _createMosaicPattern() {
|
|
3392
|
-
|
|
3209
|
+
const e = document.createElement("canvas");
|
|
3393
3210
|
e.width = 20, e.height = 20;
|
|
3394
|
-
|
|
3395
|
-
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
|
|
3211
|
+
const t = e.getContext("2d");
|
|
3212
|
+
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 Re({
|
|
3396
3213
|
source: e,
|
|
3397
3214
|
repeat: "repeat"
|
|
3398
3215
|
});
|
|
3399
3216
|
}
|
|
3400
3217
|
}
|
|
3401
|
-
const
|
|
3218
|
+
const zt = {
|
|
3402
3219
|
// Cохраняют ли объекты свой текущий порядок (z-index) при выделении
|
|
3403
3220
|
preserveObjectStacking: !0,
|
|
3404
3221
|
// Возможность взаимодействия с объектом за пределами монтажной области
|
|
@@ -3432,7 +3249,13 @@ const Zt = {
|
|
|
3432
3249
|
/**
|
|
3433
3250
|
* Массив допустимых форматов изображений для загрузки в редактор.
|
|
3434
3251
|
*/
|
|
3435
|
-
acceptContentTypes: [
|
|
3252
|
+
acceptContentTypes: [
|
|
3253
|
+
"image/png",
|
|
3254
|
+
"image/jpeg",
|
|
3255
|
+
"image/jpg",
|
|
3256
|
+
"image/svg+xml",
|
|
3257
|
+
"image/webp"
|
|
3258
|
+
],
|
|
3436
3259
|
// Показывать панель инструментов для выделенного объекта
|
|
3437
3260
|
showToolbar: !0,
|
|
3438
3261
|
// Настройки панели инструментов выделенного объекта.
|
|
@@ -3443,28 +3266,36 @@ const Zt = {
|
|
|
3443
3266
|
name: "Разблокировать",
|
|
3444
3267
|
handle: "unlock"
|
|
3445
3268
|
}],
|
|
3446
|
-
actions: [
|
|
3447
|
-
|
|
3448
|
-
|
|
3449
|
-
|
|
3450
|
-
|
|
3451
|
-
|
|
3452
|
-
|
|
3453
|
-
|
|
3454
|
-
|
|
3455
|
-
|
|
3456
|
-
|
|
3457
|
-
|
|
3458
|
-
|
|
3459
|
-
|
|
3460
|
-
|
|
3461
|
-
|
|
3462
|
-
|
|
3463
|
-
|
|
3464
|
-
|
|
3465
|
-
|
|
3466
|
-
|
|
3467
|
-
|
|
3269
|
+
actions: [
|
|
3270
|
+
{
|
|
3271
|
+
name: "Создать копию",
|
|
3272
|
+
handle: "copyPaste"
|
|
3273
|
+
},
|
|
3274
|
+
{
|
|
3275
|
+
name: "Заблокировать",
|
|
3276
|
+
handle: "lock"
|
|
3277
|
+
},
|
|
3278
|
+
{
|
|
3279
|
+
name: "На передний план",
|
|
3280
|
+
handle: "bringToFront"
|
|
3281
|
+
},
|
|
3282
|
+
{
|
|
3283
|
+
name: "На задний план",
|
|
3284
|
+
handle: "sendToBack"
|
|
3285
|
+
},
|
|
3286
|
+
{
|
|
3287
|
+
name: "На один уровень вверх",
|
|
3288
|
+
handle: "bringForward"
|
|
3289
|
+
},
|
|
3290
|
+
{
|
|
3291
|
+
name: "На один уровень вниз",
|
|
3292
|
+
handle: "sendBackwards"
|
|
3293
|
+
},
|
|
3294
|
+
{
|
|
3295
|
+
name: "Удалить",
|
|
3296
|
+
handle: "delete"
|
|
3297
|
+
}
|
|
3298
|
+
]
|
|
3468
3299
|
},
|
|
3469
3300
|
// Можно передать JSON объект в виде строки для инициализации редактора
|
|
3470
3301
|
initialStateJSON: null,
|
|
@@ -3495,7 +3326,7 @@ const Zt = {
|
|
|
3495
3326
|
// Зум по колесику мыши
|
|
3496
3327
|
mouseWheelZooming: !0,
|
|
3497
3328
|
// Перемещение канваса при зажатой кнопке ALT
|
|
3498
|
-
canvasDragging: !
|
|
3329
|
+
canvasDragging: !0,
|
|
3499
3330
|
// Копирование объектов (Ctrl + C, Ctrl + V)
|
|
3500
3331
|
copyObjectsByHotkey: !0,
|
|
3501
3332
|
// Вставка изображения из буфера обмена
|
|
@@ -3509,56 +3340,18 @@ const Zt = {
|
|
|
3509
3340
|
// Сброс параметров объекта по двойному клику
|
|
3510
3341
|
resetObjectFitByDoubleClick: !0
|
|
3511
3342
|
};
|
|
3512
|
-
function
|
|
3513
|
-
|
|
3514
|
-
if (Object.getOwnPropertySymbols) {
|
|
3515
|
-
var a = Object.getOwnPropertySymbols(o);
|
|
3516
|
-
e && (a = a.filter(function(r) {
|
|
3517
|
-
return Object.getOwnPropertyDescriptor(o, r).enumerable;
|
|
3518
|
-
})), t.push.apply(t, a);
|
|
3519
|
-
}
|
|
3520
|
-
return t;
|
|
3521
|
-
}
|
|
3522
|
-
function Ae(o) {
|
|
3523
|
-
for (var e = 1; e < arguments.length; e++) {
|
|
3524
|
-
var t = arguments[e] != null ? arguments[e] : {};
|
|
3525
|
-
e % 2 ? Se(Object(t), !0).forEach(function(a) {
|
|
3526
|
-
zt(o, a, t[a]);
|
|
3527
|
-
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(o, Object.getOwnPropertyDescriptors(t)) : Se(Object(t)).forEach(function(a) {
|
|
3528
|
-
Object.defineProperty(o, a, Object.getOwnPropertyDescriptor(t, a));
|
|
3529
|
-
});
|
|
3530
|
-
}
|
|
3531
|
-
return o;
|
|
3532
|
-
}
|
|
3533
|
-
function zt(o, e, t) {
|
|
3534
|
-
return (e = Pt(e)) in o ? Object.defineProperty(o, e, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : o[e] = t, o;
|
|
3535
|
-
}
|
|
3536
|
-
function Pt(o) {
|
|
3537
|
-
var e = Ut(o, "string");
|
|
3538
|
-
return typeof e == "symbol" ? e : e + "";
|
|
3539
|
-
}
|
|
3540
|
-
function Ut(o, e) {
|
|
3541
|
-
if (typeof o != "object" || !o) return o;
|
|
3542
|
-
var t = o[Symbol.toPrimitive];
|
|
3543
|
-
if (t !== void 0) {
|
|
3544
|
-
var a = t.call(o, e);
|
|
3545
|
-
if (typeof a != "object") return a;
|
|
3546
|
-
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
3547
|
-
}
|
|
3548
|
-
return (e === "string" ? String : Number)(o);
|
|
3549
|
-
}
|
|
3550
|
-
function _t(o) {
|
|
3551
|
-
var e = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, t = Ae(Ae({}, Zt), e), a = document.getElementById(o);
|
|
3343
|
+
function Ht(s, e = {}) {
|
|
3344
|
+
const t = X(X({}, zt), e), a = document.getElementById(s);
|
|
3552
3345
|
if (!a)
|
|
3553
|
-
return Promise.reject(new Error(
|
|
3554
|
-
|
|
3555
|
-
return r.id =
|
|
3556
|
-
t._onReadyCallback =
|
|
3557
|
-
|
|
3558
|
-
window[
|
|
3346
|
+
return Promise.reject(new Error(`Контейнер с ID "${s}" не найден.`));
|
|
3347
|
+
const r = document.createElement("canvas");
|
|
3348
|
+
return r.id = `${s}-canvas`, a.appendChild(r), t.editorContainer = a, new Promise((i) => {
|
|
3349
|
+
t._onReadyCallback = i;
|
|
3350
|
+
const n = new oe(r.id, t);
|
|
3351
|
+
window[s] = n;
|
|
3559
3352
|
});
|
|
3560
3353
|
}
|
|
3561
3354
|
export {
|
|
3562
|
-
|
|
3355
|
+
Ht as default
|
|
3563
3356
|
};
|
|
3564
|
-
//# sourceMappingURL=main.
|
|
3357
|
+
//# sourceMappingURL=main.map
|