@mbs-dev/react-editor 1.10.0 → 1.12.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 +68 -44
- package/package.json +1 -1
- package/src/Editor.tsx +77 -48
- package/types/Editor.d.ts +1 -0
package/dist/Editor.js
CHANGED
|
@@ -89,8 +89,32 @@ 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) {
|
|
92
117
|
var _this = this;
|
|
93
|
-
var _a;
|
|
94
118
|
var fn = this.jodit;
|
|
95
119
|
var restoreToLastCaret = function () {
|
|
96
120
|
var _a, _b;
|
|
@@ -124,51 +148,51 @@ var uploaderConfig = function (apiUrl, imageUrl, selectionRef) { return ({
|
|
|
124
148
|
selectionRef.current = null;
|
|
125
149
|
}
|
|
126
150
|
};
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
151
|
+
var list = (Array.isArray(data === null || data === void 0 ? void 0 : data.files) ? data.files : [])
|
|
152
|
+
.map(function (item) {
|
|
153
|
+
var _a;
|
|
154
|
+
if (typeof item === 'string')
|
|
155
|
+
return { file: item };
|
|
156
|
+
if (item && typeof item === 'object') {
|
|
157
|
+
return {
|
|
158
|
+
file: String((_a = item.file) !== null && _a !== void 0 ? _a : ''),
|
|
159
|
+
origineFileName: typeof item.origineFileName === 'string' ? item.origineFileName : undefined,
|
|
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);
|
|
138
190
|
}
|
|
139
|
-
|
|
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();
|
|
191
|
+
catch (_c) {
|
|
155
192
|
}
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
|
|
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
|
-
};
|
|
193
|
+
}
|
|
194
|
+
refreshSavedRange();
|
|
195
|
+
});
|
|
172
196
|
},
|
|
173
197
|
error: function (e) {
|
|
174
198
|
this.j.e.fire('errorMessage', e.message, 'error', 4000);
|
package/package.json
CHANGED
package/src/Editor.tsx
CHANGED
|
@@ -56,6 +56,35 @@ 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 {
|
|
59
88
|
const fn = this.jodit;
|
|
60
89
|
|
|
61
90
|
const restoreToLastCaret = () => {
|
|
@@ -70,7 +99,6 @@ export const uploaderConfig = (apiUrl?: string, imageUrl?: string, selectionRef?
|
|
|
70
99
|
}
|
|
71
100
|
}
|
|
72
101
|
|
|
73
|
-
// fallback: jodit internal save/restore
|
|
74
102
|
if (fn?.s?.focus) fn.s.focus();
|
|
75
103
|
if (fn?.s?.restore) {
|
|
76
104
|
try {
|
|
@@ -92,58 +120,59 @@ export const uploaderConfig = (apiUrl?: string, imageUrl?: string, selectionRef?
|
|
|
92
120
|
}
|
|
93
121
|
};
|
|
94
122
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
123
|
+
const list: Array<{ file: string; origineFileName?: string }> = (Array.isArray(data?.files) ? data.files : [])
|
|
124
|
+
.map((item: any) => {
|
|
125
|
+
if (typeof item === 'string') return { file: item };
|
|
126
|
+
if (item && typeof item === 'object') {
|
|
127
|
+
return {
|
|
128
|
+
file: String(item.file ?? ''),
|
|
129
|
+
origineFileName: typeof item.origineFileName === 'string' ? item.origineFileName : undefined,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
return { file: '' };
|
|
133
|
+
})
|
|
134
|
+
.filter((x: { file: any; }) => !!x.file);
|
|
135
|
+
|
|
136
|
+
if (!list.length) return;
|
|
137
|
+
|
|
138
|
+
list.forEach(({ file, origineFileName }) => {
|
|
139
|
+
const src = imageUrl ? `${imageUrl}/${file}` : file;
|
|
140
|
+
|
|
141
|
+
// ✅ Restore caret BEFORE inserting anything (image or file)
|
|
142
|
+
restoreToLastCaret();
|
|
143
|
+
|
|
144
|
+
// ✅ If it's an image => insert <img> (no filename display)
|
|
145
|
+
if (isImageByExtension(file, this.imagesExtensions || ['jpg', 'png', 'jpeg', 'gif', 'webp'])) {
|
|
146
|
+
const tagName = 'img';
|
|
147
|
+
const elm = fn.createInside.element(tagName);
|
|
148
|
+
elm.setAttribute('src', src);
|
|
149
|
+
fn.s.insertImage(elm as HTMLImageElement, null, fn.o.imageDefaultWidth);
|
|
150
|
+
refreshSavedRange();
|
|
151
|
+
return;
|
|
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);
|
|
126
161
|
|
|
127
|
-
|
|
162
|
+
fn.s.insertNode(elm);
|
|
163
|
+
|
|
164
|
+
if (fn?.s?.setCursorAfter) {
|
|
165
|
+
try {
|
|
166
|
+
fn.s.setCursorAfter(elm);
|
|
167
|
+
} catch {
|
|
168
|
+
// ignore
|
|
128
169
|
}
|
|
129
|
-
}
|
|
130
|
-
}
|
|
170
|
+
}
|
|
131
171
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
getMessage(e: any): string {
|
|
135
|
-
return e?.data?.messages && Array.isArray(e.data.messages) ? e.data.messages.join('') : '';
|
|
172
|
+
refreshSavedRange();
|
|
173
|
+
});
|
|
136
174
|
},
|
|
137
|
-
process(resp: any): { files: any[]; error: string; msg: string } {
|
|
138
|
-
const files: any[] = [];
|
|
139
|
-
files.unshift(resp?.data);
|
|
140
175
|
|
|
141
|
-
return {
|
|
142
|
-
files: resp?.data,
|
|
143
|
-
error: resp?.msg,
|
|
144
|
-
msg: resp?.msg,
|
|
145
|
-
};
|
|
146
|
-
},
|
|
147
176
|
error(this: any, e: Error): void {
|
|
148
177
|
this.j.e.fire('errorMessage', e.message, 'error', 4000);
|
|
149
178
|
},
|
package/types/Editor.d.ts
CHANGED
|
@@ -19,6 +19,7 @@ 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;
|
|
22
23
|
error(this: any, e: Error): void;
|
|
23
24
|
defaultHandlerError(this: any, e: any): void;
|
|
24
25
|
};
|