@mbs-dev/react-editor 1.12.0 → 1.13.0
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/Editor.js +44 -68
- package/package.json +1 -1
- package/src/Editor.tsx +48 -77
- package/types/Editor.d.ts +0 -1
package/dist/Editor.js
CHANGED
|
@@ -89,32 +89,8 @@ var uploaderConfig = function (apiUrl, imageUrl, selectionRef) { return ({
|
|
|
89
89
|
return formdata;
|
|
90
90
|
},
|
|
91
91
|
isSuccess: function (e) {
|
|
92
|
-
var _a, _b;
|
|
93
|
-
var err = (_a = (typeof (e === null || e === void 0 ? void 0 : e.error) === 'number' ? e.error : undefined)) !== null && _a !== void 0 ? _a : (typeof ((_b = e === null || e === void 0 ? void 0 : e.data) === null || _b === void 0 ? void 0 : _b.error) === 'number' ? e.data.error : undefined);
|
|
94
|
-
if ((e === null || e === void 0 ? void 0 : e.success) === true)
|
|
95
|
-
return true;
|
|
96
|
-
if (typeof err === 'number')
|
|
97
|
-
return err === 0;
|
|
98
|
-
return false;
|
|
99
|
-
},
|
|
100
|
-
getMessage: function (e) {
|
|
101
|
-
var _a, _b;
|
|
102
|
-
var msg = (_a = e === null || e === void 0 ? void 0 : e.msg) !== null && _a !== void 0 ? _a : (_b = e === null || e === void 0 ? void 0 : e.data) === null || _b === void 0 ? void 0 : _b.msg;
|
|
103
|
-
return typeof msg === 'string' ? msg : '';
|
|
104
|
-
},
|
|
105
|
-
process: function (resp) {
|
|
106
|
-
var payload = (resp === null || resp === void 0 ? void 0 : resp.data) ? resp.data : resp;
|
|
107
|
-
var files = Array.isArray(payload === null || payload === void 0 ? void 0 : payload.files) ? payload.files : [];
|
|
108
|
-
var error = payload === null || payload === void 0 ? void 0 : payload.error;
|
|
109
|
-
var msg = payload === null || payload === void 0 ? void 0 : payload.msg;
|
|
110
|
-
return {
|
|
111
|
-
files: files,
|
|
112
|
-
error: typeof error === 'number' ? String(error) : (error !== null && error !== void 0 ? error : ''),
|
|
113
|
-
msg: typeof msg === 'string' ? msg : '',
|
|
114
|
-
};
|
|
115
|
-
},
|
|
116
|
-
defaultHandlerSuccess: function (data) {
|
|
117
92
|
var _this = this;
|
|
93
|
+
var _a;
|
|
118
94
|
var fn = this.jodit;
|
|
119
95
|
var restoreToLastCaret = function () {
|
|
120
96
|
var _a, _b;
|
|
@@ -148,51 +124,51 @@ var uploaderConfig = function (apiUrl, imageUrl, selectionRef) { return ({
|
|
|
148
124
|
selectionRef.current = null;
|
|
149
125
|
}
|
|
150
126
|
};
|
|
151
|
-
|
|
152
|
-
.
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
return { file: '' };
|
|
163
|
-
})
|
|
164
|
-
.filter(function (x) { return !!x.file; });
|
|
165
|
-
if (!list.length)
|
|
166
|
-
return;
|
|
167
|
-
list.forEach(function (_a) {
|
|
168
|
-
var _b;
|
|
169
|
-
var file = _a.file, origineFileName = _a.origineFileName;
|
|
170
|
-
var src = imageUrl ? "".concat(imageUrl, "/").concat(file) : file;
|
|
171
|
-
restoreToLastCaret();
|
|
172
|
-
if (isImageByExtension(file, _this.imagesExtensions || ['jpg', 'png', 'jpeg', 'gif', 'webp'])) {
|
|
173
|
-
var tagName_1 = 'img';
|
|
174
|
-
var elm_1 = fn.createInside.element(tagName_1);
|
|
175
|
-
elm_1.setAttribute('src', src);
|
|
176
|
-
fn.s.insertImage(elm_1, null, fn.o.imageDefaultWidth);
|
|
177
|
-
refreshSavedRange();
|
|
178
|
-
return;
|
|
179
|
-
}
|
|
180
|
-
var tagName = 'a';
|
|
181
|
-
var elm = fn.createInside.element(tagName);
|
|
182
|
-
elm.setAttribute('href', src);
|
|
183
|
-
elm.setAttribute('target', '_blank');
|
|
184
|
-
elm.setAttribute('rel', 'noopener noreferrer');
|
|
185
|
-
elm.textContent = origineFileName || getDisplayNameFromPath(file);
|
|
186
|
-
fn.s.insertNode(elm);
|
|
187
|
-
if ((_b = fn === null || fn === void 0 ? void 0 : fn.s) === null || _b === void 0 ? void 0 : _b.setCursorAfter) {
|
|
188
|
-
try {
|
|
189
|
-
fn.s.setCursorAfter(elm);
|
|
127
|
+
if (((_a = e === null || e === void 0 ? void 0 : e.data) === null || _a === void 0 ? void 0 : _a.files) && e.data.files.length) {
|
|
128
|
+
e.data.files.forEach(function (filename) {
|
|
129
|
+
var _a;
|
|
130
|
+
var src = imageUrl ? "".concat(imageUrl, "/").concat(filename) : filename;
|
|
131
|
+
restoreToLastCaret();
|
|
132
|
+
if (isImageByExtension(filename, _this.imagesExtensions || ['jpg', 'png', 'jpeg', 'gif', 'webp'])) {
|
|
133
|
+
var tagName = 'img';
|
|
134
|
+
var elm = fn.createInside.element(tagName);
|
|
135
|
+
elm.setAttribute('src', src);
|
|
136
|
+
fn.s.insertImage(elm, null, fn.o.imageDefaultWidth);
|
|
137
|
+
refreshSavedRange();
|
|
190
138
|
}
|
|
191
|
-
|
|
139
|
+
else {
|
|
140
|
+
var tagName = 'a';
|
|
141
|
+
var elm = fn.createInside.element(tagName);
|
|
142
|
+
elm.setAttribute('href', src);
|
|
143
|
+
elm.setAttribute('target', '_blank');
|
|
144
|
+
elm.setAttribute('rel', 'noopener noreferrer');
|
|
145
|
+
elm.textContent = getDisplayNameFromPath(filename);
|
|
146
|
+
fn.s.insertNode(elm);
|
|
147
|
+
if ((_a = fn === null || fn === void 0 ? void 0 : fn.s) === null || _a === void 0 ? void 0 : _a.setCursorAfter) {
|
|
148
|
+
try {
|
|
149
|
+
fn.s.setCursorAfter(elm);
|
|
150
|
+
}
|
|
151
|
+
catch (_b) {
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
refreshSavedRange();
|
|
192
155
|
}
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
return !!(e === null || e === void 0 ? void 0 : e.success);
|
|
159
|
+
},
|
|
160
|
+
getMessage: function (e) {
|
|
161
|
+
var _a;
|
|
162
|
+
return ((_a = e === null || e === void 0 ? void 0 : e.data) === null || _a === void 0 ? void 0 : _a.messages) && Array.isArray(e.data.messages) ? e.data.messages.join('') : '';
|
|
163
|
+
},
|
|
164
|
+
process: function (resp) {
|
|
165
|
+
var files = [];
|
|
166
|
+
files.unshift(resp === null || resp === void 0 ? void 0 : resp.data);
|
|
167
|
+
return {
|
|
168
|
+
files: resp === null || resp === void 0 ? void 0 : resp.data,
|
|
169
|
+
error: resp === null || resp === void 0 ? void 0 : resp.msg,
|
|
170
|
+
msg: resp === null || resp === void 0 ? void 0 : resp.msg,
|
|
171
|
+
};
|
|
196
172
|
},
|
|
197
173
|
error: function (e) {
|
|
198
174
|
this.j.e.fire('errorMessage', e.message, 'error', 4000);
|
package/package.json
CHANGED
package/src/Editor.tsx
CHANGED
|
@@ -56,35 +56,6 @@ export const uploaderConfig = (apiUrl?: string, imageUrl?: string, selectionRef?
|
|
|
56
56
|
return formdata;
|
|
57
57
|
},
|
|
58
58
|
isSuccess(this: any, e: any): boolean {
|
|
59
|
-
const err =
|
|
60
|
-
(typeof e?.error === 'number' ? e.error : undefined) ??
|
|
61
|
-
(typeof e?.data?.error === 'number' ? e.data.error : undefined);
|
|
62
|
-
|
|
63
|
-
if (e?.success === true) return true;
|
|
64
|
-
if (typeof err === 'number') return err === 0;
|
|
65
|
-
|
|
66
|
-
return false;
|
|
67
|
-
},
|
|
68
|
-
getMessage(e: any): string {
|
|
69
|
-
const msg = e?.msg ?? e?.data?.msg;
|
|
70
|
-
return typeof msg === 'string' ? msg : '';
|
|
71
|
-
},
|
|
72
|
-
process(resp: any): { files: any[]; error: string; msg: string } {
|
|
73
|
-
const payload = resp?.data ? resp.data : resp;
|
|
74
|
-
|
|
75
|
-
const files = Array.isArray(payload?.files) ? payload.files : [];
|
|
76
|
-
const error = payload?.error;
|
|
77
|
-
const msg = payload?.msg;
|
|
78
|
-
|
|
79
|
-
return {
|
|
80
|
-
files,
|
|
81
|
-
error: typeof error === 'number' ? String(error) : (error ?? ''),
|
|
82
|
-
msg: typeof msg === 'string' ? msg : '',
|
|
83
|
-
};
|
|
84
|
-
},
|
|
85
|
-
|
|
86
|
-
// ✅ FIX: handle insertion here to avoid default handler inserting "undefined[object Object]"
|
|
87
|
-
defaultHandlerSuccess(this: any, data: any): void {
|
|
88
59
|
const fn = this.jodit;
|
|
89
60
|
|
|
90
61
|
const restoreToLastCaret = () => {
|
|
@@ -99,6 +70,7 @@ export const uploaderConfig = (apiUrl?: string, imageUrl?: string, selectionRef?
|
|
|
99
70
|
}
|
|
100
71
|
}
|
|
101
72
|
|
|
73
|
+
// fallback: jodit internal save/restore
|
|
102
74
|
if (fn?.s?.focus) fn.s.focus();
|
|
103
75
|
if (fn?.s?.restore) {
|
|
104
76
|
try {
|
|
@@ -120,59 +92,58 @@ export const uploaderConfig = (apiUrl?: string, imageUrl?: string, selectionRef?
|
|
|
120
92
|
}
|
|
121
93
|
};
|
|
122
94
|
|
|
123
|
-
|
|
124
|
-
.
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
// ✅ Otherwise insert <a> and display origineFileName (files only)
|
|
155
|
-
const tagName = 'a';
|
|
156
|
-
const elm = fn.createInside.element(tagName);
|
|
157
|
-
elm.setAttribute('href', src);
|
|
158
|
-
elm.setAttribute('target', '_blank');
|
|
159
|
-
elm.setAttribute('rel', 'noopener noreferrer');
|
|
160
|
-
elm.textContent = origineFileName || getDisplayNameFromPath(file);
|
|
161
|
-
|
|
162
|
-
fn.s.insertNode(elm);
|
|
95
|
+
if (e?.data?.files && e.data.files.length) {
|
|
96
|
+
e.data.files.forEach((filename: string) => {
|
|
97
|
+
const src = imageUrl ? `${imageUrl}/${filename}` : filename;
|
|
98
|
+
|
|
99
|
+
// ✅ Restore caret BEFORE inserting anything (image or file)
|
|
100
|
+
restoreToLastCaret();
|
|
101
|
+
|
|
102
|
+
// ✅ If it's an image => insert <img>, otherwise insert <a href="...">
|
|
103
|
+
if (isImageByExtension(filename, this.imagesExtensions || ['jpg', 'png', 'jpeg', 'gif', 'webp'])) {
|
|
104
|
+
const tagName = 'img';
|
|
105
|
+
const elm = fn.createInside.element(tagName);
|
|
106
|
+
elm.setAttribute('src', src);
|
|
107
|
+
fn.s.insertImage(elm as HTMLImageElement, null, fn.o.imageDefaultWidth);
|
|
108
|
+
refreshSavedRange();
|
|
109
|
+
} else {
|
|
110
|
+
const tagName = 'a';
|
|
111
|
+
const elm = fn.createInside.element(tagName);
|
|
112
|
+
elm.setAttribute('href', src);
|
|
113
|
+
elm.setAttribute('target', '_blank');
|
|
114
|
+
elm.setAttribute('rel', 'noopener noreferrer');
|
|
115
|
+
elm.textContent = getDisplayNameFromPath(filename);
|
|
116
|
+
|
|
117
|
+
fn.s.insertNode(elm);
|
|
118
|
+
|
|
119
|
+
if (fn?.s?.setCursorAfter) {
|
|
120
|
+
try {
|
|
121
|
+
fn.s.setCursorAfter(elm);
|
|
122
|
+
} catch {
|
|
123
|
+
// ignore
|
|
124
|
+
}
|
|
125
|
+
}
|
|
163
126
|
|
|
164
|
-
|
|
165
|
-
try {
|
|
166
|
-
fn.s.setCursorAfter(elm);
|
|
167
|
-
} catch {
|
|
168
|
-
// ignore
|
|
127
|
+
refreshSavedRange();
|
|
169
128
|
}
|
|
170
|
-
}
|
|
129
|
+
});
|
|
130
|
+
}
|
|
171
131
|
|
|
172
|
-
|
|
173
|
-
|
|
132
|
+
return !!e?.success;
|
|
133
|
+
},
|
|
134
|
+
getMessage(e: any): string {
|
|
135
|
+
return e?.data?.messages && Array.isArray(e.data.messages) ? e.data.messages.join('') : '';
|
|
174
136
|
},
|
|
137
|
+
process(resp: any): { files: any[]; error: string; msg: string } {
|
|
138
|
+
const files: any[] = [];
|
|
139
|
+
files.unshift(resp?.data);
|
|
175
140
|
|
|
141
|
+
return {
|
|
142
|
+
files: resp?.data,
|
|
143
|
+
error: resp?.msg,
|
|
144
|
+
msg: resp?.msg,
|
|
145
|
+
};
|
|
146
|
+
},
|
|
176
147
|
error(this: any, e: Error): void {
|
|
177
148
|
this.j.e.fire('errorMessage', e.message, 'error', 4000);
|
|
178
149
|
},
|
package/types/Editor.d.ts
CHANGED
|
@@ -19,7 +19,6 @@ export declare const uploaderConfig: (apiUrl?: string, imageUrl?: string, select
|
|
|
19
19
|
error: string;
|
|
20
20
|
msg: string;
|
|
21
21
|
};
|
|
22
|
-
defaultHandlerSuccess(this: any, data: any): void;
|
|
23
22
|
error(this: any, e: Error): void;
|
|
24
23
|
defaultHandlerError(this: any, e: any): void;
|
|
25
24
|
};
|