@anu3ev/fabric-image-editor 0.1.31 → 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} +716 -922
- 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 P {
|
|
35
|
+
class U {
|
|
32
36
|
/**
|
|
33
37
|
* Конструктор принимает редактор и опции.
|
|
34
38
|
* @param {Object} params
|
|
@@ -44,75 +48,48 @@ class P {
|
|
|
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 = P.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 = P.debounce(this.handleObjectModifiedHistory.bind(this), 300), this.handleObjectRotatingHistoryBound = P.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
|
-
if (n.length === 0) {
|
|
103
|
-
this.canvas.discardActiveObject();
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
106
|
-
if (n.length === 1) {
|
|
107
|
-
this.canvas.setActiveObject(n[0]);
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
|
-
var i = new U(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;
|
|
115
84
|
}
|
|
85
|
+
if (r.length === 1) {
|
|
86
|
+
this.canvas.setActiveObject(r[0]);
|
|
87
|
+
return;
|
|
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 P {
|
|
|
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 P {
|
|
|
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 P {
|
|
|
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 P {
|
|
|
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 P {
|
|
|
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 P {
|
|
|
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 P {
|
|
|
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 P {
|
|
|
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,26 +397,26 @@ class Fe {
|
|
|
501
397
|
this.worker.terminate();
|
|
502
398
|
}
|
|
503
399
|
}
|
|
504
|
-
var I = 12,
|
|
505
|
-
function W(
|
|
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
422
|
render: W,
|
|
@@ -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,30 +497,30 @@ 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
|
}
|
|
@@ -687,87 +583,87 @@ const B = {
|
|
|
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
|
|
@@ -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 T(
|
|
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
|
}
|
|
@@ -1149,12 +1045,12 @@ class A {
|
|
|
1149
1045
|
var {
|
|
1150
1046
|
source: a,
|
|
1151
1047
|
scale: r = "image-".concat(t.options.scaleType),
|
|
1152
|
-
withoutSave:
|
|
1048
|
+
withoutSave: i = !1
|
|
1153
1049
|
} = e;
|
|
1154
1050
|
if (!a) return null;
|
|
1155
1051
|
var {
|
|
1156
|
-
canvas:
|
|
1157
|
-
montageArea:
|
|
1052
|
+
canvas: n,
|
|
1053
|
+
montageArea: o,
|
|
1158
1054
|
transformManager: c,
|
|
1159
1055
|
historyManager: u,
|
|
1160
1056
|
errorManager: l
|
|
@@ -1206,19 +1102,19 @@ class A {
|
|
|
1206
1102
|
}
|
|
1207
1103
|
}), null;
|
|
1208
1104
|
if (t._createdBlobUrls.push(M), h === "svg") {
|
|
1209
|
-
var
|
|
1210
|
-
g =
|
|
1105
|
+
var N = yield Ze(M);
|
|
1106
|
+
g = P.groupSVGElements(N.objects, N.options);
|
|
1211
1107
|
} else
|
|
1212
|
-
g = yield
|
|
1108
|
+
g = yield me.fromURL(M, {
|
|
1213
1109
|
crossOrigin: "anonymous"
|
|
1214
1110
|
});
|
|
1215
1111
|
var {
|
|
1216
1112
|
width: E,
|
|
1217
1113
|
height: S
|
|
1218
1114
|
} = g;
|
|
1219
|
-
if (S > L || E >
|
|
1115
|
+
if (S > L || E > D) {
|
|
1220
1116
|
var p = yield t.resizeImageToBoundaries(g._element.src, "max"), k = URL.createObjectURL(p);
|
|
1221
|
-
t._createdBlobUrls.push(k), g = yield
|
|
1117
|
+
t._createdBlobUrls.push(k), g = yield me.fromURL(k, {
|
|
1222
1118
|
crossOrigin: "anonymous"
|
|
1223
1119
|
});
|
|
1224
1120
|
}
|
|
@@ -1231,7 +1127,7 @@ class A {
|
|
|
1231
1127
|
var {
|
|
1232
1128
|
width: H,
|
|
1233
1129
|
height: _
|
|
1234
|
-
} =
|
|
1130
|
+
} = o, R = t.calculateScaleFactor({
|
|
1235
1131
|
imageObject: g,
|
|
1236
1132
|
scaleType: r
|
|
1237
1133
|
});
|
|
@@ -1245,16 +1141,16 @@ class A {
|
|
|
1245
1141
|
withoutSave: !0
|
|
1246
1142
|
});
|
|
1247
1143
|
}
|
|
1248
|
-
|
|
1144
|
+
n.add(g), n.centerObject(g), n.setActiveObject(g), n.renderAll(), u.resumeHistory(), i || u.saveState();
|
|
1249
1145
|
var O = {
|
|
1250
1146
|
image: g,
|
|
1251
1147
|
format: h,
|
|
1252
1148
|
contentType: d,
|
|
1253
1149
|
scale: r,
|
|
1254
|
-
withoutSave:
|
|
1150
|
+
withoutSave: i,
|
|
1255
1151
|
source: a
|
|
1256
1152
|
};
|
|
1257
|
-
return
|
|
1153
|
+
return n.fire("editor:image-imported", O), O;
|
|
1258
1154
|
} catch (x) {
|
|
1259
1155
|
return l.emitError({
|
|
1260
1156
|
origin: "ImageManager",
|
|
@@ -1266,7 +1162,7 @@ class A {
|
|
|
1266
1162
|
format: h,
|
|
1267
1163
|
contentType: d,
|
|
1268
1164
|
scale: r,
|
|
1269
|
-
withoutSave:
|
|
1165
|
+
withoutSave: i
|
|
1270
1166
|
}
|
|
1271
1167
|
}), u.resumeHistory(), null;
|
|
1272
1168
|
}
|
|
@@ -1283,24 +1179,24 @@ class A {
|
|
|
1283
1179
|
resizeImageToBoundaries(e) {
|
|
1284
1180
|
var t = arguments, a = this;
|
|
1285
1181
|
return T(function* () {
|
|
1286
|
-
var r = t.length > 1 && t[1] !== void 0 ? t[1] : "max",
|
|
1182
|
+
var r = t.length > 1 && t[1] !== void 0 ? t[1] : "max", i = "Размер изображения больше максимального размера канваса, поэтому оно будет уменьшено до максимальных размеров: ".concat(D, "x").concat(L);
|
|
1287
1183
|
a.editor.errorManager.emitWarning({
|
|
1288
1184
|
origin: "ImageManager",
|
|
1289
1185
|
method: "resizeImageToBoundaries",
|
|
1290
1186
|
code: "IMAGE_RESIZE_WARNING",
|
|
1291
|
-
message:
|
|
1187
|
+
message: i,
|
|
1292
1188
|
data: {
|
|
1293
1189
|
dataURL: e,
|
|
1294
1190
|
size: r
|
|
1295
1191
|
}
|
|
1296
1192
|
});
|
|
1297
|
-
var
|
|
1193
|
+
var n = yield a.editor.workerManager.post("resizeImage", {
|
|
1298
1194
|
dataURL: e,
|
|
1299
|
-
maxWidth:
|
|
1195
|
+
maxWidth: D,
|
|
1300
1196
|
maxHeight: L,
|
|
1301
1197
|
sizeType: r
|
|
1302
1198
|
});
|
|
1303
|
-
return
|
|
1199
|
+
return n;
|
|
1304
1200
|
})();
|
|
1305
1201
|
}
|
|
1306
1202
|
/**
|
|
@@ -1320,10 +1216,10 @@ class A {
|
|
|
1320
1216
|
var {
|
|
1321
1217
|
fileName: a = "image.png",
|
|
1322
1218
|
contentType: r = "image/png",
|
|
1323
|
-
exportAsBase64:
|
|
1324
|
-
exportAsBlob:
|
|
1219
|
+
exportAsBase64: i = !1,
|
|
1220
|
+
exportAsBlob: n = !1
|
|
1325
1221
|
} = e.length > 0 && e[0] !== void 0 ? e[0] : {}, {
|
|
1326
|
-
canvas:
|
|
1222
|
+
canvas: o,
|
|
1327
1223
|
montageArea: c,
|
|
1328
1224
|
workerManager: u
|
|
1329
1225
|
} = t.editor;
|
|
@@ -1335,7 +1231,7 @@ class A {
|
|
|
1335
1231
|
top: m,
|
|
1336
1232
|
width: f,
|
|
1337
1233
|
height: M
|
|
1338
|
-
} = c.getBoundingRect(), g = yield
|
|
1234
|
+
} = c.getBoundingRect(), g = yield o.clone(["id", "format", "locked"]);
|
|
1339
1235
|
["image/jpg", "image/jpeg"].includes(d) && (g.backgroundColor = "#ffffff");
|
|
1340
1236
|
var C = g.getObjects().find((b) => b.id === c.id);
|
|
1341
1237
|
C.visible = !1, g.viewportTransform = [1, 0, 0, 1, -v, -m], g.setDimensions({
|
|
@@ -1346,11 +1242,11 @@ class A {
|
|
|
1346
1242
|
}), g.renderAll();
|
|
1347
1243
|
var y = g.getObjects().filter((b) => b.format).every((b) => b.format === "svg");
|
|
1348
1244
|
if (h === "svg" && y) {
|
|
1349
|
-
var
|
|
1245
|
+
var N = g.toSVG();
|
|
1350
1246
|
g.dispose();
|
|
1351
|
-
var E = A._exportSVGStringAsFile(
|
|
1352
|
-
exportAsBase64:
|
|
1353
|
-
exportAsBlob:
|
|
1247
|
+
var E = A._exportSVGStringAsFile(N, {
|
|
1248
|
+
exportAsBase64: i,
|
|
1249
|
+
exportAsBlob: n,
|
|
1354
1250
|
fileName: a
|
|
1355
1251
|
}), S = {
|
|
1356
1252
|
image: E,
|
|
@@ -1358,19 +1254,19 @@ class A {
|
|
|
1358
1254
|
contentType: "image/svg+xml",
|
|
1359
1255
|
fileName: a.replace(/\.[^/.]+$/, ".svg")
|
|
1360
1256
|
};
|
|
1361
|
-
return
|
|
1257
|
+
return o.fire("editor:canvas-exported", S), S;
|
|
1362
1258
|
}
|
|
1363
1259
|
var p = yield new Promise((b) => {
|
|
1364
1260
|
g.getElement().toBlob(b);
|
|
1365
1261
|
});
|
|
1366
|
-
if (g.dispose(),
|
|
1262
|
+
if (g.dispose(), n) {
|
|
1367
1263
|
var k = {
|
|
1368
1264
|
image: p,
|
|
1369
1265
|
format: h,
|
|
1370
1266
|
contentType: d,
|
|
1371
1267
|
fileName: a
|
|
1372
1268
|
};
|
|
1373
|
-
return
|
|
1269
|
+
return o.fire("editor:canvas-exported", k), k;
|
|
1374
1270
|
}
|
|
1375
1271
|
var H = yield createImageBitmap(p), _ = yield u.post("toDataURL", {
|
|
1376
1272
|
format: h,
|
|
@@ -1383,43 +1279,43 @@ class A {
|
|
|
1383
1279
|
unit: "mm",
|
|
1384
1280
|
format: [O, x]
|
|
1385
1281
|
});
|
|
1386
|
-
if (G.addImage(_, "JPG", 0, 0, O, x),
|
|
1387
|
-
var
|
|
1388
|
-
image:
|
|
1282
|
+
if (G.addImage(_, "JPG", 0, 0, O, x), i) {
|
|
1283
|
+
var Ne = G.output("datauristring"), ce = {
|
|
1284
|
+
image: Ne,
|
|
1389
1285
|
format: "pdf",
|
|
1390
1286
|
contentType: "application/pdf",
|
|
1391
1287
|
fileName: a
|
|
1392
1288
|
};
|
|
1393
|
-
return
|
|
1289
|
+
return o.fire("editor:canvas-exported", ce), ce;
|
|
1394
1290
|
}
|
|
1395
|
-
var
|
|
1291
|
+
var De = G.output("blob"), Le = new File([De], a, {
|
|
1396
1292
|
type: "application/pdf"
|
|
1397
|
-
}),
|
|
1293
|
+
}), ue = {
|
|
1398
1294
|
image: Le,
|
|
1399
1295
|
format: "pdf",
|
|
1400
1296
|
contentType: "application/pdf",
|
|
1401
1297
|
fileName: a
|
|
1402
1298
|
};
|
|
1403
|
-
return
|
|
1299
|
+
return o.fire("editor:canvas-exported", ue), ue;
|
|
1404
1300
|
}
|
|
1405
|
-
if (
|
|
1406
|
-
var
|
|
1301
|
+
if (i) {
|
|
1302
|
+
var de = {
|
|
1407
1303
|
image: _,
|
|
1408
1304
|
format: h,
|
|
1409
1305
|
contentType: d,
|
|
1410
1306
|
fileName: a
|
|
1411
1307
|
};
|
|
1412
|
-
return
|
|
1308
|
+
return o.fire("editor:canvas-exported", de), de;
|
|
1413
1309
|
}
|
|
1414
|
-
var
|
|
1310
|
+
var le = h === "svg" && !y ? a.replace(/\.[^/.]+$/, ".png") : a, Ee = new File([p], le, {
|
|
1415
1311
|
type: d
|
|
1416
|
-
}),
|
|
1312
|
+
}), he = {
|
|
1417
1313
|
image: Ee,
|
|
1418
1314
|
format: h,
|
|
1419
1315
|
contentType: d,
|
|
1420
|
-
fileName:
|
|
1316
|
+
fileName: le
|
|
1421
1317
|
};
|
|
1422
|
-
return
|
|
1318
|
+
return o.fire("editor:canvas-exported", he), he;
|
|
1423
1319
|
} catch (b) {
|
|
1424
1320
|
return t.editor.errorManager.emitError({
|
|
1425
1321
|
origin: "ImageManager",
|
|
@@ -1429,8 +1325,8 @@ class A {
|
|
|
1429
1325
|
data: {
|
|
1430
1326
|
contentType: r,
|
|
1431
1327
|
fileName: a,
|
|
1432
|
-
exportAsBase64:
|
|
1433
|
-
exportAsBlob:
|
|
1328
|
+
exportAsBase64: i,
|
|
1329
|
+
exportAsBlob: n
|
|
1434
1330
|
}
|
|
1435
1331
|
}), "";
|
|
1436
1332
|
}
|
|
@@ -1453,9 +1349,9 @@ class A {
|
|
|
1453
1349
|
var {
|
|
1454
1350
|
object: a,
|
|
1455
1351
|
fileName: r = "image.png",
|
|
1456
|
-
contentType:
|
|
1457
|
-
exportAsBase64:
|
|
1458
|
-
exportAsBlob:
|
|
1352
|
+
contentType: i = "image/png",
|
|
1353
|
+
exportAsBase64: n = !1,
|
|
1354
|
+
exportAsBlob: o = !1
|
|
1459
1355
|
} = e.length > 0 && e[0] !== void 0 ? e[0] : {}, {
|
|
1460
1356
|
canvas: c,
|
|
1461
1357
|
workerManager: u
|
|
@@ -1467,18 +1363,18 @@ class A {
|
|
|
1467
1363
|
code: "NO_OBJECT_SELECTED",
|
|
1468
1364
|
message: "Не выбран объект для экспорта",
|
|
1469
1365
|
data: {
|
|
1470
|
-
contentType:
|
|
1366
|
+
contentType: i,
|
|
1471
1367
|
fileName: r,
|
|
1472
|
-
exportAsBase64:
|
|
1473
|
-
exportAsBlob:
|
|
1368
|
+
exportAsBase64: n,
|
|
1369
|
+
exportAsBlob: o
|
|
1474
1370
|
}
|
|
1475
1371
|
}), "";
|
|
1476
1372
|
try {
|
|
1477
|
-
var d = A.getFormatFromContentType(
|
|
1373
|
+
var d = A.getFormatFromContentType(i);
|
|
1478
1374
|
if (d === "svg") {
|
|
1479
1375
|
var h = l.toSVG(), v = t._exportSVGStringAsFile(h, {
|
|
1480
|
-
exportAsBase64:
|
|
1481
|
-
exportAsBlob:
|
|
1376
|
+
exportAsBase64: n,
|
|
1377
|
+
exportAsBlob: o,
|
|
1482
1378
|
fileName: r
|
|
1483
1379
|
}), m = {
|
|
1484
1380
|
image: v,
|
|
@@ -1488,7 +1384,7 @@ class A {
|
|
|
1488
1384
|
};
|
|
1489
1385
|
return c.fire("editor:object-exported", m), m;
|
|
1490
1386
|
}
|
|
1491
|
-
if (
|
|
1387
|
+
if (n) {
|
|
1492
1388
|
var f = yield createImageBitmap(l._element), M = yield u.post("toDataURL", {
|
|
1493
1389
|
format: d,
|
|
1494
1390
|
quality: 1,
|
|
@@ -1496,7 +1392,7 @@ class A {
|
|
|
1496
1392
|
}, [f]), g = {
|
|
1497
1393
|
image: M,
|
|
1498
1394
|
format: d,
|
|
1499
|
-
contentType:
|
|
1395
|
+
contentType: i,
|
|
1500
1396
|
fileName: r
|
|
1501
1397
|
};
|
|
1502
1398
|
return c.fire("editor:object-exported", g), g;
|
|
@@ -1504,21 +1400,21 @@ class A {
|
|
|
1504
1400
|
var C = l.toCanvasElement(), y = yield new Promise((p) => {
|
|
1505
1401
|
C.toBlob(p);
|
|
1506
1402
|
});
|
|
1507
|
-
if (
|
|
1508
|
-
var
|
|
1403
|
+
if (o) {
|
|
1404
|
+
var N = {
|
|
1509
1405
|
image: y,
|
|
1510
1406
|
format: d,
|
|
1511
|
-
contentType:
|
|
1407
|
+
contentType: i,
|
|
1512
1408
|
fileName: r
|
|
1513
1409
|
};
|
|
1514
|
-
return c.fire("editor:object-exported",
|
|
1410
|
+
return c.fire("editor:object-exported", N), N;
|
|
1515
1411
|
}
|
|
1516
1412
|
var E = new File([y], r, {
|
|
1517
|
-
type:
|
|
1413
|
+
type: i
|
|
1518
1414
|
}), S = {
|
|
1519
1415
|
image: E,
|
|
1520
1416
|
format: d,
|
|
1521
|
-
contentType:
|
|
1417
|
+
contentType: i,
|
|
1522
1418
|
fileName: r
|
|
1523
1419
|
};
|
|
1524
1420
|
return c.fire("editor:object-exported", S), S;
|
|
@@ -1529,10 +1425,10 @@ class A {
|
|
|
1529
1425
|
code: "IMAGE_EXPORT_FAILED",
|
|
1530
1426
|
message: "Ошибка экспорта объекта: ".concat(p.message),
|
|
1531
1427
|
data: {
|
|
1532
|
-
contentType:
|
|
1428
|
+
contentType: i,
|
|
1533
1429
|
fileName: r,
|
|
1534
|
-
exportAsBase64:
|
|
1535
|
-
exportAsBlob:
|
|
1430
|
+
exportAsBase64: n,
|
|
1431
|
+
exportAsBlob: o
|
|
1536
1432
|
}
|
|
1537
1433
|
}), "";
|
|
1538
1434
|
}
|
|
@@ -1623,11 +1519,11 @@ class A {
|
|
|
1623
1519
|
try {
|
|
1624
1520
|
var r = yield fetch(e, {
|
|
1625
1521
|
method: "HEAD"
|
|
1626
|
-
}),
|
|
1627
|
-
if (
|
|
1628
|
-
return
|
|
1629
|
-
} catch (
|
|
1630
|
-
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);
|
|
1631
1527
|
}
|
|
1632
1528
|
return t.getContentTypeFromExtension(e);
|
|
1633
1529
|
})();
|
|
@@ -1640,13 +1536,13 @@ class A {
|
|
|
1640
1536
|
*/
|
|
1641
1537
|
getContentTypeFromExtension(e) {
|
|
1642
1538
|
try {
|
|
1643
|
-
var t, a = new URL(e), r = (t = a.pathname.split(".").pop()) === null || t === void 0 ? void 0 : t.toLowerCase(),
|
|
1644
|
-
return this.acceptContentTypes.forEach((
|
|
1645
|
-
var
|
|
1646
|
-
|
|
1647
|
-
}),
|
|
1648
|
-
} catch (
|
|
1649
|
-
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";
|
|
1650
1546
|
}
|
|
1651
1547
|
}
|
|
1652
1548
|
/**
|
|
@@ -1663,14 +1559,14 @@ class A {
|
|
|
1663
1559
|
montageArea: r
|
|
1664
1560
|
} = this.editor;
|
|
1665
1561
|
if (!r || !t) return 1;
|
|
1666
|
-
var
|
|
1667
|
-
width:
|
|
1562
|
+
var i = r.width, n = r.height, {
|
|
1563
|
+
width: o,
|
|
1668
1564
|
height: c
|
|
1669
1565
|
} = t;
|
|
1670
|
-
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;
|
|
1671
1567
|
}
|
|
1672
1568
|
}
|
|
1673
|
-
class
|
|
1569
|
+
class pt {
|
|
1674
1570
|
/**
|
|
1675
1571
|
* @param {object} options
|
|
1676
1572
|
* @param {ImageEditor} options.editor – экземпляр редактора
|
|
@@ -1683,10 +1579,11 @@ class jt {
|
|
|
1683
1579
|
}
|
|
1684
1580
|
/**
|
|
1685
1581
|
* Устанавливаем внутреннюю ширину канваса (для экспорта)
|
|
1686
|
-
* @param {String} width
|
|
1687
|
-
* @param {Object} options
|
|
1688
|
-
* @param {Boolean} options.preserveProportional - Сохранить пропорции
|
|
1689
|
-
* @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] - Адаптировать канвас к контейнеру
|
|
1690
1587
|
* @fires editor:resolution-width-changed
|
|
1691
1588
|
*/
|
|
1692
1589
|
setResolutionWidth(e) {
|
|
@@ -1697,18 +1594,18 @@ class jt {
|
|
|
1697
1594
|
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
|
|
1698
1595
|
if (e) {
|
|
1699
1596
|
var {
|
|
1700
|
-
canvas:
|
|
1701
|
-
montageArea:
|
|
1597
|
+
canvas: i,
|
|
1598
|
+
montageArea: n,
|
|
1702
1599
|
options: {
|
|
1703
|
-
canvasBackstoreWidth:
|
|
1600
|
+
canvasBackstoreWidth: o
|
|
1704
1601
|
}
|
|
1705
1602
|
} = this.editor, {
|
|
1706
1603
|
width: c,
|
|
1707
1604
|
height: u
|
|
1708
|
-
} =
|
|
1709
|
-
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({
|
|
1710
1607
|
width: l
|
|
1711
|
-
}),
|
|
1608
|
+
}), i.clipPath.set({
|
|
1712
1609
|
width: l
|
|
1713
1610
|
}), t) {
|
|
1714
1611
|
var d = l / c, h = u * d;
|
|
@@ -1718,18 +1615,19 @@ class jt {
|
|
|
1718
1615
|
var {
|
|
1719
1616
|
left: v,
|
|
1720
1617
|
top: m
|
|
1721
|
-
} = this.getObjectDefaultCoords(
|
|
1722
|
-
|
|
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", {
|
|
1723
1620
|
width: e
|
|
1724
1621
|
});
|
|
1725
1622
|
}
|
|
1726
1623
|
}
|
|
1727
1624
|
/**
|
|
1728
1625
|
* Устанавливаем внутреннюю высоту канваса (для экспорта)
|
|
1729
|
-
* @param {String} height
|
|
1730
|
-
* @param {Object} options
|
|
1731
|
-
* @param {Boolean} options.preserveProportional - Сохранить пропорции
|
|
1732
|
-
* @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] - Адаптировать канвас к контейнеру
|
|
1733
1631
|
* @fires editor:resolution-height-changed
|
|
1734
1632
|
*/
|
|
1735
1633
|
setResolutionHeight(e) {
|
|
@@ -1740,18 +1638,18 @@ class jt {
|
|
|
1740
1638
|
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
|
|
1741
1639
|
if (e) {
|
|
1742
1640
|
var {
|
|
1743
|
-
canvas:
|
|
1744
|
-
montageArea:
|
|
1641
|
+
canvas: i,
|
|
1642
|
+
montageArea: n,
|
|
1745
1643
|
options: {
|
|
1746
|
-
canvasBackstoreHeight:
|
|
1644
|
+
canvasBackstoreHeight: o
|
|
1747
1645
|
}
|
|
1748
1646
|
} = this.editor, {
|
|
1749
1647
|
width: c,
|
|
1750
1648
|
height: u
|
|
1751
|
-
} =
|
|
1752
|
-
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({
|
|
1753
1651
|
height: l
|
|
1754
|
-
}),
|
|
1652
|
+
}), i.clipPath.set({
|
|
1755
1653
|
height: l
|
|
1756
1654
|
}), t) {
|
|
1757
1655
|
var d = l / u, h = c * d;
|
|
@@ -1761,8 +1659,8 @@ class jt {
|
|
|
1761
1659
|
var {
|
|
1762
1660
|
left: v,
|
|
1763
1661
|
top: m
|
|
1764
|
-
} = this.getObjectDefaultCoords(
|
|
1765
|
-
|
|
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", {
|
|
1766
1664
|
height: e
|
|
1767
1665
|
});
|
|
1768
1666
|
}
|
|
@@ -1775,7 +1673,7 @@ class jt {
|
|
|
1775
1673
|
var {
|
|
1776
1674
|
canvas: e,
|
|
1777
1675
|
montageArea: t
|
|
1778
|
-
} = 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);
|
|
1779
1677
|
t.set({
|
|
1780
1678
|
left: a / 2,
|
|
1781
1679
|
top: r / 2
|
|
@@ -1783,8 +1681,8 @@ class jt {
|
|
|
1783
1681
|
left: a / 2,
|
|
1784
1682
|
top: r / 2
|
|
1785
1683
|
}), e.renderAll();
|
|
1786
|
-
var
|
|
1787
|
-
|
|
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();
|
|
1788
1686
|
}
|
|
1789
1687
|
/**
|
|
1790
1688
|
* Метод для получения координат объекта с учетом текущего зума
|
|
@@ -1801,16 +1699,16 @@ class jt {
|
|
|
1801
1699
|
}), {};
|
|
1802
1700
|
var {
|
|
1803
1701
|
width: r,
|
|
1804
|
-
height:
|
|
1805
|
-
} = a,
|
|
1702
|
+
height: i
|
|
1703
|
+
} = a, n = t.getZoom(), o = (r - r * n) / 2, c = (i - i * n) / 2;
|
|
1806
1704
|
return {
|
|
1807
|
-
left:
|
|
1705
|
+
left: o,
|
|
1808
1706
|
top: c
|
|
1809
1707
|
};
|
|
1810
1708
|
}
|
|
1811
1709
|
setCanvasBackstoreWidth(e) {
|
|
1812
1710
|
if (!(!e || typeof e != "number")) {
|
|
1813
|
-
var t = Math.max(Math.min(e,
|
|
1711
|
+
var t = Math.max(Math.min(e, D), Z);
|
|
1814
1712
|
this.editor.canvas.setDimensions({
|
|
1815
1713
|
width: t
|
|
1816
1714
|
}, {
|
|
@@ -1831,10 +1729,10 @@ class jt {
|
|
|
1831
1729
|
adaptCanvasToContainer() {
|
|
1832
1730
|
var {
|
|
1833
1731
|
canvas: e
|
|
1834
|
-
} = this.editor, t = e.editorContainer, a = t.clientWidth, r = t.clientHeight,
|
|
1835
|
-
console.log("adaptCanvasToContainer newWidth",
|
|
1836
|
-
width:
|
|
1837
|
-
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
|
|
1838
1736
|
}, {
|
|
1839
1737
|
backstoreOnly: !0
|
|
1840
1738
|
});
|
|
@@ -1854,9 +1752,9 @@ class jt {
|
|
|
1854
1752
|
var {
|
|
1855
1753
|
canvas: t,
|
|
1856
1754
|
montageArea: a
|
|
1857
|
-
} = 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;
|
|
1858
1756
|
t.setDimensions({
|
|
1859
|
-
width:
|
|
1757
|
+
width: o,
|
|
1860
1758
|
height: c
|
|
1861
1759
|
}, {
|
|
1862
1760
|
cssOnly: !0
|
|
@@ -1953,35 +1851,35 @@ class jt {
|
|
|
1953
1851
|
var {
|
|
1954
1852
|
canvas: r,
|
|
1955
1853
|
options: {
|
|
1956
|
-
editorContainer:
|
|
1854
|
+
editorContainer: i
|
|
1957
1855
|
}
|
|
1958
|
-
} = this.editor,
|
|
1856
|
+
} = this.editor, n = [];
|
|
1959
1857
|
switch (e) {
|
|
1960
1858
|
case "canvas":
|
|
1961
|
-
|
|
1859
|
+
n.push(r.lowerCanvasEl, r.upperCanvasEl);
|
|
1962
1860
|
break;
|
|
1963
1861
|
case "wrapper":
|
|
1964
|
-
|
|
1862
|
+
n.push(r.wrapperEl);
|
|
1965
1863
|
break;
|
|
1966
1864
|
case "container":
|
|
1967
|
-
|
|
1865
|
+
n.push(i);
|
|
1968
1866
|
break;
|
|
1969
1867
|
default:
|
|
1970
|
-
|
|
1868
|
+
n.push(r.lowerCanvasEl, r.upperCanvasEl);
|
|
1971
1869
|
}
|
|
1972
|
-
var
|
|
1870
|
+
var o = t === "width" ? "width" : "height";
|
|
1973
1871
|
if (typeof a == "string") {
|
|
1974
|
-
|
|
1975
|
-
l.style[
|
|
1872
|
+
n.forEach((l) => {
|
|
1873
|
+
l.style[o] = a;
|
|
1976
1874
|
});
|
|
1977
1875
|
return;
|
|
1978
1876
|
}
|
|
1979
1877
|
var c = parseFloat(a);
|
|
1980
1878
|
if (!isNaN(c)) {
|
|
1981
1879
|
var u = "".concat(c, "px");
|
|
1982
|
-
|
|
1983
|
-
l.style[
|
|
1984
|
-
}), 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"), {
|
|
1985
1883
|
element: e,
|
|
1986
1884
|
value: a
|
|
1987
1885
|
});
|
|
@@ -2003,10 +1901,10 @@ class jt {
|
|
|
2003
1901
|
withoutSave: a
|
|
2004
1902
|
} = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, {
|
|
2005
1903
|
canvas: r,
|
|
2006
|
-
montageArea:
|
|
2007
|
-
transformManager:
|
|
1904
|
+
montageArea: i,
|
|
1905
|
+
transformManager: n,
|
|
2008
1906
|
options: {
|
|
2009
|
-
montageAreaWidth:
|
|
1907
|
+
montageAreaWidth: o,
|
|
2010
1908
|
montageAreaHeight: c
|
|
2011
1909
|
}
|
|
2012
1910
|
} = this.editor, u = e || r.getActiveObject();
|
|
@@ -2021,19 +1919,19 @@ class jt {
|
|
|
2021
1919
|
message: h
|
|
2022
1920
|
});
|
|
2023
1921
|
}
|
|
2024
|
-
var v = Math.min(l,
|
|
1922
|
+
var v = Math.min(l, D), m = Math.min(d, L);
|
|
2025
1923
|
if (t) {
|
|
2026
1924
|
var {
|
|
2027
1925
|
width: f,
|
|
2028
1926
|
height: M
|
|
2029
|
-
} =
|
|
1927
|
+
} = i, g = l / f, C = d / M, y = Math.max(g, C);
|
|
2030
1928
|
v = f * y, m = M * y;
|
|
2031
1929
|
}
|
|
2032
1930
|
this.setResolutionWidth(v, {
|
|
2033
1931
|
withoutSave: !0
|
|
2034
1932
|
}), this.setResolutionHeight(m, {
|
|
2035
1933
|
withoutSave: !0
|
|
2036
|
-
}), (l >
|
|
1934
|
+
}), (l > o || d > c) && n.calculateAndApplyDefaultZoom(o, c), n.resetObject(u, {
|
|
2037
1935
|
withoutSave: !0
|
|
2038
1936
|
}), r.centerObject(u), r.renderAll(), a || this.editor.historyManager.saveState(), r.fire("editor:canvas-scaled", {
|
|
2039
1937
|
width: v,
|
|
@@ -2067,13 +1965,13 @@ class jt {
|
|
|
2067
1965
|
transformManager: a,
|
|
2068
1966
|
historyManager: r,
|
|
2069
1967
|
options: {
|
|
2070
|
-
montageAreaWidth:
|
|
2071
|
-
montageAreaHeight:
|
|
1968
|
+
montageAreaWidth: i,
|
|
1969
|
+
montageAreaHeight: n
|
|
2072
1970
|
}
|
|
2073
1971
|
} = this.editor;
|
|
2074
|
-
a.resetZoom(), this.setResolutionWidth(
|
|
1972
|
+
a.resetZoom(), this.setResolutionWidth(i, {
|
|
2075
1973
|
withoutSave: !0
|
|
2076
|
-
}), this.setResolutionHeight(
|
|
1974
|
+
}), this.setResolutionHeight(n, {
|
|
2077
1975
|
withoutSave: !0
|
|
2078
1976
|
}), t.renderAll(), a.resetObjects(), e || r.saveState(), t.fire("editor:default-scale-set");
|
|
2079
1977
|
}
|
|
@@ -2089,10 +1987,10 @@ class jt {
|
|
|
2089
1987
|
overlayMask: a
|
|
2090
1988
|
}
|
|
2091
1989
|
} = this.editor, r = e.getObjects();
|
|
2092
|
-
return r.filter((
|
|
1990
|
+
return r.filter((i) => i.id !== t.id && i.id !== a.id);
|
|
2093
1991
|
}
|
|
2094
1992
|
}
|
|
2095
|
-
class
|
|
1993
|
+
class bt {
|
|
2096
1994
|
/**
|
|
2097
1995
|
* @param {object} options
|
|
2098
1996
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -2114,12 +2012,12 @@ class yt {
|
|
|
2114
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, {
|
|
2115
2013
|
width: a,
|
|
2116
2014
|
height: r
|
|
2117
|
-
} = this.editor.montageArea,
|
|
2015
|
+
} = this.editor.montageArea, i = e / a, n = t / r, o = Math.min(i, n), {
|
|
2118
2016
|
minZoom: c,
|
|
2119
2017
|
maxZoom: u,
|
|
2120
2018
|
maxZoomFactor: l
|
|
2121
2019
|
} = this.options;
|
|
2122
|
-
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);
|
|
2123
2021
|
}
|
|
2124
2022
|
/**
|
|
2125
2023
|
* Увеличение/уменьшение масштаба
|
|
@@ -2131,23 +2029,23 @@ class yt {
|
|
|
2131
2029
|
* Если передавать координаты курсора, то нужно быть аккуратнее, так как юзер может выйти за пределы рабочей области
|
|
2132
2030
|
*/
|
|
2133
2031
|
zoom() {
|
|
2134
|
-
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] : {};
|
|
2135
2033
|
if (e) {
|
|
2136
2034
|
var {
|
|
2137
2035
|
canvas: a,
|
|
2138
2036
|
minZoom: r,
|
|
2139
|
-
maxZoom:
|
|
2140
|
-
} = this.editor,
|
|
2141
|
-
x:
|
|
2037
|
+
maxZoom: i
|
|
2038
|
+
} = this.editor, n = a.getZoom(), {
|
|
2039
|
+
x: o = t.pointX,
|
|
2142
2040
|
y: c = t.pointY
|
|
2143
|
-
} = a.getCenterPoint(), u = Number((
|
|
2144
|
-
u >
|
|
2145
|
-
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),
|
|
2146
2044
|
y: Number(c)
|
|
2147
2045
|
}, u), a.fire("editor:zoom-changed", {
|
|
2148
2046
|
currentZoom: a.getZoom(),
|
|
2149
2047
|
zoom: u,
|
|
2150
|
-
pointX:
|
|
2048
|
+
pointX: o,
|
|
2151
2049
|
pointY: c
|
|
2152
2050
|
});
|
|
2153
2051
|
}
|
|
@@ -2163,17 +2061,17 @@ class yt {
|
|
|
2163
2061
|
minZoom: a,
|
|
2164
2062
|
maxZoom: r
|
|
2165
2063
|
} = this.editor, {
|
|
2166
|
-
x:
|
|
2167
|
-
y:
|
|
2168
|
-
} = t.getCenterPoint(),
|
|
2169
|
-
e > r && (
|
|
2170
|
-
x: Number(
|
|
2171
|
-
y: Number(
|
|
2172
|
-
},
|
|
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", {
|
|
2173
2071
|
currentZoom: t.getZoom(),
|
|
2174
|
-
zoom:
|
|
2175
|
-
pointX:
|
|
2176
|
-
pointY:
|
|
2072
|
+
zoom: o,
|
|
2073
|
+
pointX: i,
|
|
2074
|
+
pointY: n
|
|
2177
2075
|
});
|
|
2178
2076
|
}
|
|
2179
2077
|
/**
|
|
@@ -2203,16 +2101,16 @@ class yt {
|
|
|
2203
2101
|
* @fires editor:object-rotated
|
|
2204
2102
|
*/
|
|
2205
2103
|
rotate() {
|
|
2206
|
-
var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] :
|
|
2104
|
+
var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : yt, {
|
|
2207
2105
|
withoutSave: t
|
|
2208
2106
|
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, {
|
|
2209
2107
|
canvas: a,
|
|
2210
2108
|
historyManager: r
|
|
2211
|
-
} = this.editor,
|
|
2212
|
-
if (
|
|
2213
|
-
var
|
|
2214
|
-
|
|
2215
|
-
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
|
|
2216
2114
|
});
|
|
2217
2115
|
}
|
|
2218
2116
|
}
|
|
@@ -2258,11 +2156,11 @@ class yt {
|
|
|
2258
2156
|
withoutSave: a
|
|
2259
2157
|
} = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, {
|
|
2260
2158
|
canvas: r,
|
|
2261
|
-
historyManager:
|
|
2262
|
-
} = this.editor,
|
|
2263
|
-
|
|
2264
|
-
|
|
2265
|
-
}) :
|
|
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));
|
|
2266
2164
|
}
|
|
2267
2165
|
/**
|
|
2268
2166
|
* Масштабирование изображения
|
|
@@ -2282,32 +2180,32 @@ class yt {
|
|
|
2282
2180
|
withoutSave: a,
|
|
2283
2181
|
fitAsOneObject: r
|
|
2284
2182
|
} = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, {
|
|
2285
|
-
canvas:
|
|
2286
|
-
imageManager:
|
|
2287
|
-
historyManager:
|
|
2288
|
-
} = this.editor, c = e ||
|
|
2183
|
+
canvas: i,
|
|
2184
|
+
imageManager: n,
|
|
2185
|
+
historyManager: o
|
|
2186
|
+
} = this.editor, c = e || i.getActiveObject();
|
|
2289
2187
|
if (c) {
|
|
2290
2188
|
if (["activeselection"].includes(c.type) && !r) {
|
|
2291
2189
|
var u = c.getObjects();
|
|
2292
|
-
|
|
2293
|
-
var v =
|
|
2190
|
+
i.discardActiveObject(), u.forEach((h) => {
|
|
2191
|
+
var v = n.calculateScaleFactor({
|
|
2294
2192
|
imageObject: h,
|
|
2295
2193
|
scaleType: t
|
|
2296
2194
|
});
|
|
2297
|
-
h.scale(v),
|
|
2195
|
+
h.scale(v), i.centerObject(h);
|
|
2298
2196
|
});
|
|
2299
|
-
var l = new
|
|
2300
|
-
canvas:
|
|
2197
|
+
var l = new Y(u, {
|
|
2198
|
+
canvas: i
|
|
2301
2199
|
});
|
|
2302
|
-
|
|
2200
|
+
i.setActiveObject(l);
|
|
2303
2201
|
} else {
|
|
2304
|
-
var d =
|
|
2202
|
+
var d = n.calculateScaleFactor({
|
|
2305
2203
|
imageObject: c,
|
|
2306
2204
|
scaleType: t
|
|
2307
2205
|
});
|
|
2308
|
-
c.scale(d),
|
|
2206
|
+
c.scale(d), i.centerObject(c);
|
|
2309
2207
|
}
|
|
2310
|
-
|
|
2208
|
+
i.renderAll(), a || o.saveState(), i.fire("editor:image-fitted", {
|
|
2311
2209
|
type: t
|
|
2312
2210
|
});
|
|
2313
2211
|
}
|
|
@@ -2333,15 +2231,15 @@ class yt {
|
|
|
2333
2231
|
withoutSave: a = !1
|
|
2334
2232
|
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, {
|
|
2335
2233
|
canvas: r,
|
|
2336
|
-
montageArea:
|
|
2337
|
-
imageManager:
|
|
2338
|
-
historyManager:
|
|
2234
|
+
montageArea: i,
|
|
2235
|
+
imageManager: n,
|
|
2236
|
+
historyManager: o,
|
|
2339
2237
|
options: {
|
|
2340
2238
|
scaleType: c
|
|
2341
2239
|
}
|
|
2342
2240
|
} = this.editor, u = e || r.getActiveObject();
|
|
2343
2241
|
if (!(!u || u.locked)) {
|
|
2344
|
-
if (
|
|
2242
|
+
if (o.suspendHistory(), u.type !== "image" && u.format !== "svg" && (u.set({
|
|
2345
2243
|
scaleX: 1,
|
|
2346
2244
|
scaleY: 1,
|
|
2347
2245
|
flipX: !1,
|
|
@@ -2356,10 +2254,10 @@ class yt {
|
|
|
2356
2254
|
var {
|
|
2357
2255
|
width: l,
|
|
2358
2256
|
height: d
|
|
2359
|
-
} =
|
|
2257
|
+
} = i, {
|
|
2360
2258
|
width: h,
|
|
2361
2259
|
height: v
|
|
2362
|
-
} = u, m =
|
|
2260
|
+
} = u, m = n.calculateScaleFactor({
|
|
2363
2261
|
imageObject: u,
|
|
2364
2262
|
scaleType: c
|
|
2365
2263
|
});
|
|
@@ -2375,11 +2273,11 @@ class yt {
|
|
|
2375
2273
|
flipX: !1,
|
|
2376
2274
|
flipY: !1,
|
|
2377
2275
|
angle: 0
|
|
2378
|
-
}), r.centerObject(u), r.renderAll(),
|
|
2276
|
+
}), r.centerObject(u), r.renderAll(), o.resumeHistory(), a || o.saveState(), r.fire("editor:object-reset");
|
|
2379
2277
|
}
|
|
2380
2278
|
}
|
|
2381
2279
|
}
|
|
2382
|
-
class
|
|
2280
|
+
class It {
|
|
2383
2281
|
/**
|
|
2384
2282
|
* @param {object} options
|
|
2385
2283
|
* @param {ImageEditor} options.editor – экземпляр редактора
|
|
@@ -2429,15 +2327,15 @@ class pt {
|
|
|
2429
2327
|
a.suspendHistory(), t.setCoords();
|
|
2430
2328
|
var {
|
|
2431
2329
|
left: r,
|
|
2432
|
-
top:
|
|
2433
|
-
width:
|
|
2434
|
-
height:
|
|
2330
|
+
top: i,
|
|
2331
|
+
width: n,
|
|
2332
|
+
height: o
|
|
2435
2333
|
} = t.getBoundingRect();
|
|
2436
2334
|
this.overlayMask.set({
|
|
2437
2335
|
left: r,
|
|
2438
|
-
top:
|
|
2439
|
-
width:
|
|
2440
|
-
height:
|
|
2336
|
+
top: i,
|
|
2337
|
+
width: n,
|
|
2338
|
+
height: o
|
|
2441
2339
|
}), e.discardActiveObject(), this.editor.layerManager.bringToFront(this.overlayMask, {
|
|
2442
2340
|
withoutSave: !0
|
|
2443
2341
|
}), a.resumeHistory();
|
|
@@ -2505,10 +2403,10 @@ class F {
|
|
|
2505
2403
|
historyManager: r
|
|
2506
2404
|
} = this.editor;
|
|
2507
2405
|
r.suspendHistory();
|
|
2508
|
-
var
|
|
2509
|
-
|
|
2510
|
-
a.bringObjectToFront(
|
|
2511
|
-
}) : 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"));
|
|
2512
2410
|
}
|
|
2513
2411
|
/**
|
|
2514
2412
|
* Поднять объект на один уровень вверх по оси Z
|
|
@@ -2525,8 +2423,8 @@ class F {
|
|
|
2525
2423
|
historyManager: r
|
|
2526
2424
|
} = this.editor;
|
|
2527
2425
|
r.suspendHistory();
|
|
2528
|
-
var
|
|
2529
|
-
|
|
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"));
|
|
2530
2428
|
}
|
|
2531
2429
|
/**
|
|
2532
2430
|
* Отправить объект на задний план по оси Z
|
|
@@ -2541,20 +2439,20 @@ class F {
|
|
|
2541
2439
|
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, {
|
|
2542
2440
|
canvas: a,
|
|
2543
2441
|
montageArea: r,
|
|
2544
|
-
historyManager:
|
|
2442
|
+
historyManager: i,
|
|
2545
2443
|
interactionBlocker: {
|
|
2546
|
-
overlayMask:
|
|
2444
|
+
overlayMask: n
|
|
2547
2445
|
}
|
|
2548
2446
|
} = this.editor;
|
|
2549
|
-
|
|
2550
|
-
var
|
|
2551
|
-
if (
|
|
2552
|
-
if (
|
|
2553
|
-
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)
|
|
2554
2452
|
a.sendObjectToBack(c[u]);
|
|
2555
2453
|
else
|
|
2556
|
-
a.sendObjectToBack(
|
|
2557
|
-
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");
|
|
2558
2456
|
}
|
|
2559
2457
|
}
|
|
2560
2458
|
/**
|
|
@@ -2569,14 +2467,14 @@ class F {
|
|
|
2569
2467
|
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, {
|
|
2570
2468
|
canvas: a,
|
|
2571
2469
|
montageArea: r,
|
|
2572
|
-
historyManager:
|
|
2470
|
+
historyManager: i,
|
|
2573
2471
|
interactionBlocker: {
|
|
2574
|
-
overlayMask:
|
|
2472
|
+
overlayMask: n
|
|
2575
2473
|
}
|
|
2576
2474
|
} = this.editor;
|
|
2577
|
-
|
|
2578
|
-
var
|
|
2579
|
-
|
|
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"));
|
|
2580
2478
|
}
|
|
2581
2479
|
/**
|
|
2582
2480
|
* Сдвигает выделенные объекты на один уровень вверх относительно ближайшего верхнего объекта
|
|
@@ -2586,20 +2484,20 @@ class F {
|
|
|
2586
2484
|
* @private
|
|
2587
2485
|
*/
|
|
2588
2486
|
static _moveSelectionForward(e, t) {
|
|
2589
|
-
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) {
|
|
2590
2488
|
var h = a[d];
|
|
2591
|
-
if (!r.includes(h) &&
|
|
2592
|
-
return
|
|
2593
|
-
}, 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)
|
|
2594
2492
|
;
|
|
2595
|
-
if (
|
|
2493
|
+
if (n !== -1) {
|
|
2596
2494
|
var u = r.map((l) => ({
|
|
2597
2495
|
obj: l,
|
|
2598
2496
|
index: a.indexOf(l)
|
|
2599
2497
|
})).sort((l, d) => d.index - l.index);
|
|
2600
2498
|
u.forEach((l) => {
|
|
2601
2499
|
var d = a.indexOf(l.obj);
|
|
2602
|
-
d <
|
|
2500
|
+
d < n && (e.moveObjectTo(l.obj, n), n = d);
|
|
2603
2501
|
});
|
|
2604
2502
|
}
|
|
2605
2503
|
}
|
|
@@ -2611,68 +2509,68 @@ class F {
|
|
|
2611
2509
|
* @private
|
|
2612
2510
|
*/
|
|
2613
2511
|
static _moveSelectionBackwards(e, t) {
|
|
2614
|
-
for (var a = e.getObjects(), r = t.getObjects(),
|
|
2615
|
-
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);
|
|
2616
2514
|
}
|
|
2617
2515
|
}
|
|
2618
|
-
var
|
|
2619
|
-
function
|
|
2620
|
-
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);
|
|
2621
2519
|
if (Object.getOwnPropertySymbols) {
|
|
2622
|
-
var a = Object.getOwnPropertySymbols(
|
|
2520
|
+
var a = Object.getOwnPropertySymbols(s);
|
|
2623
2521
|
e && (a = a.filter(function(r) {
|
|
2624
|
-
return Object.getOwnPropertyDescriptor(
|
|
2522
|
+
return Object.getOwnPropertyDescriptor(s, r).enumerable;
|
|
2625
2523
|
})), t.push.apply(t, a);
|
|
2626
2524
|
}
|
|
2627
2525
|
return t;
|
|
2628
2526
|
}
|
|
2629
|
-
function
|
|
2527
|
+
function K(s) {
|
|
2630
2528
|
for (var e = 1; e < arguments.length; e++) {
|
|
2631
2529
|
var t = arguments[e] != null ? arguments[e] : {};
|
|
2632
|
-
e % 2 ?
|
|
2633
|
-
|
|
2634
|
-
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(
|
|
2635
|
-
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));
|
|
2636
2534
|
});
|
|
2637
2535
|
}
|
|
2638
|
-
return
|
|
2536
|
+
return s;
|
|
2639
2537
|
}
|
|
2640
|
-
function
|
|
2641
|
-
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;
|
|
2642
2540
|
}
|
|
2643
|
-
function
|
|
2644
|
-
var e =
|
|
2541
|
+
function Nt(s) {
|
|
2542
|
+
var e = Dt(s, "string");
|
|
2645
2543
|
return typeof e == "symbol" ? e : e + "";
|
|
2646
2544
|
}
|
|
2647
|
-
function
|
|
2648
|
-
if (typeof
|
|
2649
|
-
var t =
|
|
2545
|
+
function Dt(s, e) {
|
|
2546
|
+
if (typeof s != "object" || !s) return s;
|
|
2547
|
+
var t = s[Symbol.toPrimitive];
|
|
2650
2548
|
if (t !== void 0) {
|
|
2651
|
-
var a = t.call(
|
|
2549
|
+
var a = t.call(s, e);
|
|
2652
2550
|
if (typeof a != "object") return a;
|
|
2653
2551
|
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
2654
2552
|
}
|
|
2655
|
-
return (e === "string" ? String : Number)(
|
|
2553
|
+
return (e === "string" ? String : Number)(s);
|
|
2656
2554
|
}
|
|
2657
|
-
function
|
|
2658
|
-
if (
|
|
2659
|
-
var t, a, r =
|
|
2555
|
+
function $(s, e) {
|
|
2556
|
+
if (s == null) return {};
|
|
2557
|
+
var t, a, r = Lt(s, e);
|
|
2660
2558
|
if (Object.getOwnPropertySymbols) {
|
|
2661
|
-
var
|
|
2662
|
-
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]);
|
|
2663
2561
|
}
|
|
2664
2562
|
return r;
|
|
2665
2563
|
}
|
|
2666
|
-
function
|
|
2667
|
-
if (
|
|
2564
|
+
function Lt(s, e) {
|
|
2565
|
+
if (s == null) return {};
|
|
2668
2566
|
var t = {};
|
|
2669
|
-
for (var a in
|
|
2567
|
+
for (var a in s) if ({}.hasOwnProperty.call(s, a)) {
|
|
2670
2568
|
if (e.indexOf(a) !== -1) continue;
|
|
2671
|
-
t[a] =
|
|
2569
|
+
t[a] = s[a];
|
|
2672
2570
|
}
|
|
2673
2571
|
return t;
|
|
2674
2572
|
}
|
|
2675
|
-
class
|
|
2573
|
+
class Et {
|
|
2676
2574
|
/**
|
|
2677
2575
|
* @param {object} options
|
|
2678
2576
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -2703,21 +2601,21 @@ class Nt {
|
|
|
2703
2601
|
id: t = "rect-".concat(w()),
|
|
2704
2602
|
left: a,
|
|
2705
2603
|
top: r,
|
|
2706
|
-
width:
|
|
2707
|
-
height:
|
|
2708
|
-
fill:
|
|
2709
|
-
} = e, c =
|
|
2604
|
+
width: i = 100,
|
|
2605
|
+
height: n = 100,
|
|
2606
|
+
fill: o = "blue"
|
|
2607
|
+
} = e, c = $(e, St), {
|
|
2710
2608
|
withoutSelection: u,
|
|
2711
2609
|
withoutAdding: l
|
|
2712
2610
|
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, {
|
|
2713
2611
|
canvas: d
|
|
2714
|
-
} = this.editor, h = new
|
|
2612
|
+
} = this.editor, h = new Ue(K({
|
|
2715
2613
|
id: t,
|
|
2716
2614
|
left: a,
|
|
2717
2615
|
top: r,
|
|
2718
|
-
width:
|
|
2719
|
-
height:
|
|
2720
|
-
fill:
|
|
2616
|
+
width: i,
|
|
2617
|
+
height: n,
|
|
2618
|
+
fill: o
|
|
2721
2619
|
}, c));
|
|
2722
2620
|
return !a && !r && d.centerObject(h), l || (d.add(h), u || d.setActiveObject(h), d.renderAll()), h;
|
|
2723
2621
|
}
|
|
@@ -2740,20 +2638,20 @@ class Nt {
|
|
|
2740
2638
|
id: t = "circle-".concat(w()),
|
|
2741
2639
|
left: a,
|
|
2742
2640
|
top: r,
|
|
2743
|
-
radius:
|
|
2744
|
-
fill:
|
|
2745
|
-
} = e,
|
|
2641
|
+
radius: i = 50,
|
|
2642
|
+
fill: n = "green"
|
|
2643
|
+
} = e, o = $(e, At), {
|
|
2746
2644
|
withoutSelection: c,
|
|
2747
2645
|
withoutAdding: u
|
|
2748
2646
|
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, {
|
|
2749
2647
|
canvas: l
|
|
2750
|
-
} = this.editor, d = new
|
|
2648
|
+
} = this.editor, d = new Ye(K({
|
|
2751
2649
|
id: t,
|
|
2752
2650
|
left: a,
|
|
2753
2651
|
top: r,
|
|
2754
|
-
fill:
|
|
2755
|
-
radius:
|
|
2756
|
-
},
|
|
2652
|
+
fill: n,
|
|
2653
|
+
radius: i
|
|
2654
|
+
}, o));
|
|
2757
2655
|
return !a && !r && l.centerObject(d), u || (l.add(d), c || l.setActiveObject(d), l.renderAll()), d;
|
|
2758
2656
|
}
|
|
2759
2657
|
/**
|
|
@@ -2776,49 +2674,49 @@ class Nt {
|
|
|
2776
2674
|
id: t = "triangle-".concat(w()),
|
|
2777
2675
|
left: a,
|
|
2778
2676
|
top: r,
|
|
2779
|
-
width:
|
|
2780
|
-
height:
|
|
2781
|
-
fill:
|
|
2782
|
-
} = e, c =
|
|
2677
|
+
width: i = 100,
|
|
2678
|
+
height: n = 100,
|
|
2679
|
+
fill: o = "yellow"
|
|
2680
|
+
} = e, c = $(e, wt), {
|
|
2783
2681
|
withoutSelection: u,
|
|
2784
2682
|
withoutAdding: l
|
|
2785
2683
|
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, {
|
|
2786
2684
|
canvas: d
|
|
2787
|
-
} = this.editor, h = new
|
|
2685
|
+
} = this.editor, h = new Pe(K({
|
|
2788
2686
|
id: t,
|
|
2789
2687
|
left: a,
|
|
2790
2688
|
top: r,
|
|
2791
|
-
fill:
|
|
2792
|
-
width:
|
|
2793
|
-
height:
|
|
2689
|
+
fill: o,
|
|
2690
|
+
width: i,
|
|
2691
|
+
height: n
|
|
2794
2692
|
}, c));
|
|
2795
2693
|
return !a && !r && d.centerObject(h), l || (d.add(h), u || d.setActiveObject(h), d.renderAll()), h;
|
|
2796
2694
|
}
|
|
2797
2695
|
}
|
|
2798
|
-
function
|
|
2696
|
+
function Se(s, e, t, a, r, i, n) {
|
|
2799
2697
|
try {
|
|
2800
|
-
var
|
|
2698
|
+
var o = s[i](n), c = o.value;
|
|
2801
2699
|
} catch (u) {
|
|
2802
2700
|
return void t(u);
|
|
2803
2701
|
}
|
|
2804
|
-
|
|
2702
|
+
o.done ? e(c) : Promise.resolve(c).then(a, r);
|
|
2805
2703
|
}
|
|
2806
|
-
function
|
|
2704
|
+
function Ae(s) {
|
|
2807
2705
|
return function() {
|
|
2808
2706
|
var e = this, t = arguments;
|
|
2809
2707
|
return new Promise(function(a, r) {
|
|
2810
|
-
var
|
|
2811
|
-
function
|
|
2812
|
-
|
|
2708
|
+
var i = s.apply(e, t);
|
|
2709
|
+
function n(c) {
|
|
2710
|
+
Se(i, a, r, n, o, "next", c);
|
|
2813
2711
|
}
|
|
2814
|
-
function
|
|
2815
|
-
|
|
2712
|
+
function o(c) {
|
|
2713
|
+
Se(i, a, r, n, o, "throw", c);
|
|
2816
2714
|
}
|
|
2817
|
-
|
|
2715
|
+
n(void 0);
|
|
2818
2716
|
});
|
|
2819
2717
|
};
|
|
2820
2718
|
}
|
|
2821
|
-
class
|
|
2719
|
+
class Ot {
|
|
2822
2720
|
/**
|
|
2823
2721
|
* @param {object} options
|
|
2824
2722
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -2835,7 +2733,7 @@ class Lt {
|
|
|
2835
2733
|
*/
|
|
2836
2734
|
copy() {
|
|
2837
2735
|
var e = this;
|
|
2838
|
-
return
|
|
2736
|
+
return Ae(function* () {
|
|
2839
2737
|
var {
|
|
2840
2738
|
canvas: t
|
|
2841
2739
|
} = e.editor, a = t.getActiveObject();
|
|
@@ -2857,12 +2755,12 @@ class Lt {
|
|
|
2857
2755
|
});
|
|
2858
2756
|
return;
|
|
2859
2757
|
}
|
|
2860
|
-
var
|
|
2861
|
-
|
|
2862
|
-
}),
|
|
2863
|
-
[
|
|
2758
|
+
var i = r.toCanvasElement(), n = yield new Promise((u) => {
|
|
2759
|
+
i.toBlob(u);
|
|
2760
|
+
}), o = new ClipboardItem({
|
|
2761
|
+
[n.type]: n
|
|
2864
2762
|
});
|
|
2865
|
-
yield navigator.clipboard.write([
|
|
2763
|
+
yield navigator.clipboard.write([o]), t.fire("editor:object-copied", {
|
|
2866
2764
|
object: r
|
|
2867
2765
|
});
|
|
2868
2766
|
} catch (u) {
|
|
@@ -2879,7 +2777,7 @@ class Lt {
|
|
|
2879
2777
|
*/
|
|
2880
2778
|
paste() {
|
|
2881
2779
|
var e = this;
|
|
2882
|
-
return
|
|
2780
|
+
return Ae(function* () {
|
|
2883
2781
|
var {
|
|
2884
2782
|
canvas: t
|
|
2885
2783
|
} = e.editor;
|
|
@@ -2890,7 +2788,7 @@ class Lt {
|
|
|
2890
2788
|
left: a.left + 10,
|
|
2891
2789
|
top: a.top + 10,
|
|
2892
2790
|
evented: !0
|
|
2893
|
-
}), a instanceof
|
|
2791
|
+
}), a instanceof Y ? (a.canvas = t, a.forEachObject((r) => {
|
|
2894
2792
|
t.add(r);
|
|
2895
2793
|
})) : t.add(a), t.setActiveObject(a), t.requestRenderAll(), t.fire("editor:object-pasted", {
|
|
2896
2794
|
object: a
|
|
@@ -2899,7 +2797,7 @@ class Lt {
|
|
|
2899
2797
|
})();
|
|
2900
2798
|
}
|
|
2901
2799
|
}
|
|
2902
|
-
class
|
|
2800
|
+
class Tt {
|
|
2903
2801
|
/**
|
|
2904
2802
|
* @param {object} options
|
|
2905
2803
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -2925,10 +2823,10 @@ class Et {
|
|
|
2925
2823
|
withoutSave: a
|
|
2926
2824
|
} = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, {
|
|
2927
2825
|
canvas: r,
|
|
2928
|
-
historyManager:
|
|
2929
|
-
} = this.editor,
|
|
2930
|
-
if (!(!
|
|
2931
|
-
var
|
|
2826
|
+
historyManager: i
|
|
2827
|
+
} = this.editor, n = e || r.getActiveObject();
|
|
2828
|
+
if (!(!n || n.locked)) {
|
|
2829
|
+
var o = {
|
|
2932
2830
|
lockMovementX: !0,
|
|
2933
2831
|
lockMovementY: !0,
|
|
2934
2832
|
lockRotation: !0,
|
|
@@ -2938,12 +2836,12 @@ class Et {
|
|
|
2938
2836
|
lockSkewingY: !0,
|
|
2939
2837
|
locked: !0
|
|
2940
2838
|
};
|
|
2941
|
-
|
|
2942
|
-
var c = !t && ["activeselection", "group"].includes(
|
|
2943
|
-
c &&
|
|
2944
|
-
u.set(
|
|
2945
|
-
}), r.renderAll(), a ||
|
|
2946
|
-
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
|
|
2947
2845
|
});
|
|
2948
2846
|
}
|
|
2949
2847
|
}
|
|
@@ -2962,9 +2860,9 @@ class Et {
|
|
|
2962
2860
|
} = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, {
|
|
2963
2861
|
canvas: a,
|
|
2964
2862
|
historyManager: r
|
|
2965
|
-
} = this.editor,
|
|
2966
|
-
if (
|
|
2967
|
-
var
|
|
2863
|
+
} = this.editor, i = e || a.getActiveObject();
|
|
2864
|
+
if (i) {
|
|
2865
|
+
var n = {
|
|
2968
2866
|
lockMovementX: !1,
|
|
2969
2867
|
lockMovementY: !1,
|
|
2970
2868
|
lockRotation: !1,
|
|
@@ -2974,15 +2872,15 @@ class Et {
|
|
|
2974
2872
|
lockSkewingY: !1,
|
|
2975
2873
|
locked: !1
|
|
2976
2874
|
};
|
|
2977
|
-
|
|
2978
|
-
|
|
2875
|
+
i.set(n), ["activeselection", "group"].includes(i.type) && i.getObjects().forEach((o) => {
|
|
2876
|
+
o.set(n);
|
|
2979
2877
|
}), a.renderAll(), t || r.saveState(), a.fire("editor:object-unlocked", {
|
|
2980
|
-
object:
|
|
2878
|
+
object: i
|
|
2981
2879
|
});
|
|
2982
2880
|
}
|
|
2983
2881
|
}
|
|
2984
2882
|
}
|
|
2985
|
-
class
|
|
2883
|
+
class kt {
|
|
2986
2884
|
/**
|
|
2987
2885
|
* @param {object} options
|
|
2988
2886
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -3009,10 +2907,10 @@ class Ot {
|
|
|
3009
2907
|
historyManager: r
|
|
3010
2908
|
} = this.editor;
|
|
3011
2909
|
r.suspendHistory();
|
|
3012
|
-
var
|
|
3013
|
-
if (
|
|
3014
|
-
var
|
|
3015
|
-
|
|
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");
|
|
3016
2914
|
}
|
|
3017
2915
|
}
|
|
3018
2916
|
/**
|
|
@@ -3031,18 +2929,18 @@ class Ot {
|
|
|
3031
2929
|
historyManager: r
|
|
3032
2930
|
} = this.editor;
|
|
3033
2931
|
r.suspendHistory();
|
|
3034
|
-
var
|
|
3035
|
-
if (!(!
|
|
3036
|
-
var
|
|
3037
|
-
a.remove(
|
|
3038
|
-
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, {
|
|
3039
2937
|
canvas: a
|
|
3040
2938
|
});
|
|
3041
|
-
a.setActiveObject(
|
|
2939
|
+
a.setActiveObject(o), a.renderAll(), r.resumeHistory(), t || r.saveState(), a.fire("editor:objects-ungrouped");
|
|
3042
2940
|
}
|
|
3043
2941
|
}
|
|
3044
2942
|
}
|
|
3045
|
-
class
|
|
2943
|
+
class xt {
|
|
3046
2944
|
/**
|
|
3047
2945
|
* @param {object} options
|
|
3048
2946
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -3064,19 +2962,19 @@ class Tt {
|
|
|
3064
2962
|
objectLockManager: a
|
|
3065
2963
|
} = this.editor;
|
|
3066
2964
|
e.discardActiveObject();
|
|
3067
|
-
var r = t.getObjects(),
|
|
2965
|
+
var r = t.getObjects(), i = r.some((o) => o.locked), n = r.length > 1 ? new Y(t.getObjects(), {
|
|
3068
2966
|
canvas: e
|
|
3069
2967
|
}) : r[0];
|
|
3070
|
-
|
|
3071
|
-
object:
|
|
2968
|
+
i && a.lockObject({
|
|
2969
|
+
object: n,
|
|
3072
2970
|
skipInnerObjects: !0,
|
|
3073
2971
|
withoutSave: !0
|
|
3074
|
-
}), e.setActiveObject(
|
|
3075
|
-
selected:
|
|
2972
|
+
}), e.setActiveObject(n), e.requestRenderAll(), e.fire("editor:all-objects-selected", {
|
|
2973
|
+
selected: n
|
|
3076
2974
|
});
|
|
3077
2975
|
}
|
|
3078
2976
|
}
|
|
3079
|
-
class
|
|
2977
|
+
class Bt {
|
|
3080
2978
|
/**
|
|
3081
2979
|
* @param {object} options
|
|
3082
2980
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -3101,17 +2999,17 @@ class kt {
|
|
|
3101
2999
|
} = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, {
|
|
3102
3000
|
canvas: a,
|
|
3103
3001
|
historyManager: r
|
|
3104
|
-
} = this.editor,
|
|
3105
|
-
|
|
3106
|
-
if (
|
|
3107
|
-
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();
|
|
3108
3006
|
return;
|
|
3109
3007
|
}
|
|
3110
|
-
a.remove(
|
|
3008
|
+
a.remove(n);
|
|
3111
3009
|
}), a.discardActiveObject(), a.renderAll(), r.resumeHistory(), t || r.saveState(), a.fire("editor:objects-deleted"));
|
|
3112
3010
|
}
|
|
3113
3011
|
}
|
|
3114
|
-
var
|
|
3012
|
+
var Zt = {
|
|
3115
3013
|
IMAGE_MANAGER: {
|
|
3116
3014
|
/**
|
|
3117
3015
|
* Некорректный Content-Type изображения
|
|
@@ -3161,8 +3059,8 @@ class V {
|
|
|
3161
3059
|
origin: t = "ImageEditor",
|
|
3162
3060
|
method: a = "Unknown Method",
|
|
3163
3061
|
code: r,
|
|
3164
|
-
data:
|
|
3165
|
-
message:
|
|
3062
|
+
data: i,
|
|
3063
|
+
message: n
|
|
3166
3064
|
} = e;
|
|
3167
3065
|
if (!V.isValidErrorCode(r)) {
|
|
3168
3066
|
console.warn("Неизвестный код ошибки: ", {
|
|
@@ -3173,13 +3071,13 @@ class V {
|
|
|
3173
3071
|
return;
|
|
3174
3072
|
}
|
|
3175
3073
|
if (r) {
|
|
3176
|
-
var
|
|
3177
|
-
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", {
|
|
3178
3076
|
code: r,
|
|
3179
3077
|
origin: t,
|
|
3180
3078
|
method: a,
|
|
3181
|
-
message:
|
|
3182
|
-
data:
|
|
3079
|
+
message: o,
|
|
3080
|
+
data: i
|
|
3183
3081
|
});
|
|
3184
3082
|
}
|
|
3185
3083
|
}
|
|
@@ -3198,8 +3096,8 @@ class V {
|
|
|
3198
3096
|
origin: t = "ImageEditor",
|
|
3199
3097
|
method: a = "Unknown Method",
|
|
3200
3098
|
code: r,
|
|
3201
|
-
message:
|
|
3202
|
-
data:
|
|
3099
|
+
message: i,
|
|
3100
|
+
data: n
|
|
3203
3101
|
} = e;
|
|
3204
3102
|
if (!V.isValidErrorCode(r)) {
|
|
3205
3103
|
console.warn("Неизвестный код ошибки: ", {
|
|
@@ -3209,131 +3107,65 @@ class V {
|
|
|
3209
3107
|
});
|
|
3210
3108
|
return;
|
|
3211
3109
|
}
|
|
3212
|
-
var
|
|
3213
|
-
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", {
|
|
3214
3112
|
code: r,
|
|
3215
3113
|
origin: t,
|
|
3216
3114
|
method: a,
|
|
3217
|
-
message:
|
|
3218
|
-
data:
|
|
3115
|
+
message: i,
|
|
3116
|
+
data: n
|
|
3219
3117
|
});
|
|
3220
3118
|
}
|
|
3221
3119
|
static isValidErrorCode(e) {
|
|
3222
|
-
return e ? Object.values(
|
|
3223
|
-
}
|
|
3224
|
-
}
|
|
3225
|
-
function Ie(o, e, t, a, r, n, i) {
|
|
3226
|
-
try {
|
|
3227
|
-
var s = o[n](i), c = s.value;
|
|
3228
|
-
} catch (u) {
|
|
3229
|
-
return void t(u);
|
|
3120
|
+
return e ? Object.values(Zt).some((t) => Object.values(t).includes(e)) : !1;
|
|
3230
3121
|
}
|
|
3231
|
-
s.done ? e(c) : Promise.resolve(c).then(a, r);
|
|
3232
3122
|
}
|
|
3233
|
-
|
|
3234
|
-
|
|
3235
|
-
|
|
3236
|
-
|
|
3237
|
-
|
|
3238
|
-
|
|
3239
|
-
|
|
3240
|
-
}
|
|
3241
|
-
function s(c) {
|
|
3242
|
-
Ie(n, a, r, i, s, "throw", c);
|
|
3243
|
-
}
|
|
3244
|
-
i(void 0);
|
|
3245
|
-
});
|
|
3246
|
-
};
|
|
3247
|
-
}
|
|
3248
|
-
class ie {
|
|
3249
|
-
constructor(e) {
|
|
3250
|
-
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) {
|
|
3251
3130
|
this.options = t;
|
|
3252
|
-
|
|
3253
|
-
|
|
3254
|
-
minZoom: r,
|
|
3255
|
-
maxZoom: n
|
|
3256
|
-
} = t;
|
|
3257
|
-
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();
|
|
3258
3133
|
}
|
|
3259
3134
|
init() {
|
|
3260
|
-
|
|
3261
|
-
|
|
3262
|
-
|
|
3263
|
-
|
|
3264
|
-
|
|
3265
|
-
|
|
3266
|
-
canvasWrapperHeight: n,
|
|
3135
|
+
return Q(this, null, function* () {
|
|
3136
|
+
const {
|
|
3137
|
+
editorContainerWidth: e,
|
|
3138
|
+
editorContainerHeight: t,
|
|
3139
|
+
canvasWrapperWidth: a,
|
|
3140
|
+
canvasWrapperHeight: r,
|
|
3267
3141
|
canvasCSSWidth: i,
|
|
3268
|
-
canvasCSSHeight:
|
|
3269
|
-
initialImage:
|
|
3270
|
-
initialStateJSON:
|
|
3271
|
-
scaleType:
|
|
3272
|
-
_onReadyCallback:
|
|
3273
|
-
} =
|
|
3274
|
-
if (
|
|
3275
|
-
|
|
3276
|
-
|
|
3277
|
-
|
|
3278
|
-
|
|
3279
|
-
|
|
3280
|
-
|
|
3281
|
-
editor: e
|
|
3282
|
-
}), e.canvasManager = new jt({
|
|
3283
|
-
editor: e
|
|
3284
|
-
}), e.imageManager = new A({
|
|
3285
|
-
editor: e
|
|
3286
|
-
}), e.layerManager = new F({
|
|
3287
|
-
editor: e
|
|
3288
|
-
}), e.shapeManager = new Nt({
|
|
3289
|
-
editor: e
|
|
3290
|
-
}), e.interactionBlocker = new pt({
|
|
3291
|
-
editor: e
|
|
3292
|
-
}), e.clipboardManager = new Lt({
|
|
3293
|
-
editor: e
|
|
3294
|
-
}), e.objectLockManager = new Et({
|
|
3295
|
-
editor: e
|
|
3296
|
-
}), e.groupingManager = new Ot({
|
|
3297
|
-
editor: e
|
|
3298
|
-
}), e.selectionManager = new Tt({
|
|
3299
|
-
editor: e
|
|
3300
|
-
}), e.deletionManager = new kt({
|
|
3301
|
-
editor: e
|
|
3302
|
-
}), e._createMonageArea(), e._createClippingArea(), e.listeners = new P({
|
|
3303
|
-
editor: e,
|
|
3304
|
-
options: e.options
|
|
3305
|
-
}), 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) {
|
|
3306
|
-
var {
|
|
3307
|
-
source: h,
|
|
3308
|
-
scale: v = "image-".concat(l),
|
|
3309
|
-
withoutSave: m = !0
|
|
3310
|
-
} = c;
|
|
3311
|
-
yield e.imageManager.importImage({
|
|
3312
|
-
source: h,
|
|
3313
|
-
scale: v,
|
|
3314
|
-
withoutSave: m
|
|
3315
|
-
});
|
|
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 });
|
|
3316
3155
|
} else
|
|
3317
|
-
|
|
3318
|
-
|
|
3319
|
-
|
|
3320
|
-
u && e.historyManager.loadStateFromFullState(u), e.historyManager.saveState(), console.log("editor:ready"), e.canvas.fire("editor:ready", e), typeof d == "function" && d(e);
|
|
3321
|
-
})();
|
|
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
|
+
});
|
|
3322
3159
|
}
|
|
3323
|
-
/**
|
|
3324
|
-
* Создаёт монтажную область
|
|
3325
|
-
* @private
|
|
3326
|
-
* @returns {void}
|
|
3327
|
-
*/
|
|
3328
3160
|
_createMonageArea() {
|
|
3329
|
-
|
|
3161
|
+
const {
|
|
3330
3162
|
montageAreaWidth: e,
|
|
3331
3163
|
montageAreaHeight: t
|
|
3332
3164
|
} = this.options;
|
|
3333
3165
|
this.montageArea = this.shapeManager.addRectangle({
|
|
3334
3166
|
width: e,
|
|
3335
3167
|
height: t,
|
|
3336
|
-
fill:
|
|
3168
|
+
fill: oe._createMosaicPattern(),
|
|
3337
3169
|
stroke: null,
|
|
3338
3170
|
strokeWidth: 0,
|
|
3339
3171
|
selectable: !1,
|
|
@@ -3345,17 +3177,10 @@ class ie {
|
|
|
3345
3177
|
originY: "center",
|
|
3346
3178
|
objectCaching: !1,
|
|
3347
3179
|
noScaleCache: !0
|
|
3348
|
-
}, {
|
|
3349
|
-
withoutSelection: !0
|
|
3350
|
-
});
|
|
3180
|
+
}, { withoutSelection: !0 });
|
|
3351
3181
|
}
|
|
3352
|
-
/**
|
|
3353
|
-
* Создаёт область клиппинга
|
|
3354
|
-
* @private
|
|
3355
|
-
* @returns {void}
|
|
3356
|
-
*/
|
|
3357
3182
|
_createClippingArea() {
|
|
3358
|
-
|
|
3183
|
+
const {
|
|
3359
3184
|
montageAreaWidth: e,
|
|
3360
3185
|
montageAreaHeight: t
|
|
3361
3186
|
} = this.options;
|
|
@@ -3364,7 +3189,6 @@ class ie {
|
|
|
3364
3189
|
width: e,
|
|
3365
3190
|
height: t,
|
|
3366
3191
|
stroke: null,
|
|
3367
|
-
fill: null,
|
|
3368
3192
|
strokeWidth: 0,
|
|
3369
3193
|
hasBorders: !1,
|
|
3370
3194
|
hasControls: !1,
|
|
@@ -3372,32 +3196,26 @@ class ie {
|
|
|
3372
3196
|
evented: !1,
|
|
3373
3197
|
originX: "center",
|
|
3374
3198
|
originY: "center"
|
|
3375
|
-
}, {
|
|
3376
|
-
withoutSelection: !0,
|
|
3377
|
-
withoutAdding: !0
|
|
3378
|
-
});
|
|
3199
|
+
}, { withoutSelection: !0, withoutAdding: !0 });
|
|
3379
3200
|
}
|
|
3380
|
-
/**
|
|
3381
|
-
* Метод для удаления редактора и всех слушателей.
|
|
3382
|
-
*/
|
|
3383
3201
|
destroy() {
|
|
3384
3202
|
this.listeners.destroy(), this.toolbar.destroy(), this.canvas.dispose(), this.workerManager.worker.terminate(), this.imageManager.revokeBlobUrls();
|
|
3385
3203
|
}
|
|
3386
3204
|
/**
|
|
3387
3205
|
* Создает паттерн мозаики.
|
|
3388
|
-
* @returns {
|
|
3206
|
+
* @returns {Pattern} паттерн мозаики
|
|
3389
3207
|
*/
|
|
3390
3208
|
static _createMosaicPattern() {
|
|
3391
|
-
|
|
3209
|
+
const e = document.createElement("canvas");
|
|
3392
3210
|
e.width = 20, e.height = 20;
|
|
3393
|
-
|
|
3394
|
-
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({
|
|
3395
3213
|
source: e,
|
|
3396
3214
|
repeat: "repeat"
|
|
3397
3215
|
});
|
|
3398
3216
|
}
|
|
3399
3217
|
}
|
|
3400
|
-
const
|
|
3218
|
+
const zt = {
|
|
3401
3219
|
// Cохраняют ли объекты свой текущий порядок (z-index) при выделении
|
|
3402
3220
|
preserveObjectStacking: !0,
|
|
3403
3221
|
// Возможность взаимодействия с объектом за пределами монтажной области
|
|
@@ -3431,7 +3249,13 @@ const Zt = {
|
|
|
3431
3249
|
/**
|
|
3432
3250
|
* Массив допустимых форматов изображений для загрузки в редактор.
|
|
3433
3251
|
*/
|
|
3434
|
-
acceptContentTypes: [
|
|
3252
|
+
acceptContentTypes: [
|
|
3253
|
+
"image/png",
|
|
3254
|
+
"image/jpeg",
|
|
3255
|
+
"image/jpg",
|
|
3256
|
+
"image/svg+xml",
|
|
3257
|
+
"image/webp"
|
|
3258
|
+
],
|
|
3435
3259
|
// Показывать панель инструментов для выделенного объекта
|
|
3436
3260
|
showToolbar: !0,
|
|
3437
3261
|
// Настройки панели инструментов выделенного объекта.
|
|
@@ -3442,28 +3266,36 @@ const Zt = {
|
|
|
3442
3266
|
name: "Разблокировать",
|
|
3443
3267
|
handle: "unlock"
|
|
3444
3268
|
}],
|
|
3445
|
-
actions: [
|
|
3446
|
-
|
|
3447
|
-
|
|
3448
|
-
|
|
3449
|
-
|
|
3450
|
-
|
|
3451
|
-
|
|
3452
|
-
|
|
3453
|
-
|
|
3454
|
-
|
|
3455
|
-
|
|
3456
|
-
|
|
3457
|
-
|
|
3458
|
-
|
|
3459
|
-
|
|
3460
|
-
|
|
3461
|
-
|
|
3462
|
-
|
|
3463
|
-
|
|
3464
|
-
|
|
3465
|
-
|
|
3466
|
-
|
|
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
|
+
]
|
|
3467
3299
|
},
|
|
3468
3300
|
// Можно передать JSON объект в виде строки для инициализации редактора
|
|
3469
3301
|
initialStateJSON: null,
|
|
@@ -3508,56 +3340,18 @@ const Zt = {
|
|
|
3508
3340
|
// Сброс параметров объекта по двойному клику
|
|
3509
3341
|
resetObjectFitByDoubleClick: !0
|
|
3510
3342
|
};
|
|
3511
|
-
function
|
|
3512
|
-
|
|
3513
|
-
if (Object.getOwnPropertySymbols) {
|
|
3514
|
-
var a = Object.getOwnPropertySymbols(o);
|
|
3515
|
-
e && (a = a.filter(function(r) {
|
|
3516
|
-
return Object.getOwnPropertyDescriptor(o, r).enumerable;
|
|
3517
|
-
})), t.push.apply(t, a);
|
|
3518
|
-
}
|
|
3519
|
-
return t;
|
|
3520
|
-
}
|
|
3521
|
-
function Ae(o) {
|
|
3522
|
-
for (var e = 1; e < arguments.length; e++) {
|
|
3523
|
-
var t = arguments[e] != null ? arguments[e] : {};
|
|
3524
|
-
e % 2 ? Se(Object(t), !0).forEach(function(a) {
|
|
3525
|
-
zt(o, a, t[a]);
|
|
3526
|
-
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(o, Object.getOwnPropertyDescriptors(t)) : Se(Object(t)).forEach(function(a) {
|
|
3527
|
-
Object.defineProperty(o, a, Object.getOwnPropertyDescriptor(t, a));
|
|
3528
|
-
});
|
|
3529
|
-
}
|
|
3530
|
-
return o;
|
|
3531
|
-
}
|
|
3532
|
-
function zt(o, e, t) {
|
|
3533
|
-
return (e = Pt(e)) in o ? Object.defineProperty(o, e, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : o[e] = t, o;
|
|
3534
|
-
}
|
|
3535
|
-
function Pt(o) {
|
|
3536
|
-
var e = Ut(o, "string");
|
|
3537
|
-
return typeof e == "symbol" ? e : e + "";
|
|
3538
|
-
}
|
|
3539
|
-
function Ut(o, e) {
|
|
3540
|
-
if (typeof o != "object" || !o) return o;
|
|
3541
|
-
var t = o[Symbol.toPrimitive];
|
|
3542
|
-
if (t !== void 0) {
|
|
3543
|
-
var a = t.call(o, e);
|
|
3544
|
-
if (typeof a != "object") return a;
|
|
3545
|
-
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
3546
|
-
}
|
|
3547
|
-
return (e === "string" ? String : Number)(o);
|
|
3548
|
-
}
|
|
3549
|
-
function _t(o) {
|
|
3550
|
-
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);
|
|
3551
3345
|
if (!a)
|
|
3552
|
-
return Promise.reject(new Error(
|
|
3553
|
-
|
|
3554
|
-
return r.id =
|
|
3555
|
-
t._onReadyCallback =
|
|
3556
|
-
|
|
3557
|
-
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;
|
|
3558
3352
|
});
|
|
3559
3353
|
}
|
|
3560
3354
|
export {
|
|
3561
|
-
|
|
3355
|
+
Ht as default
|
|
3562
3356
|
};
|
|
3563
|
-
//# sourceMappingURL=main.
|
|
3357
|
+
//# sourceMappingURL=main.map
|