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