Commit 0ac96429 by Яков

try fix

parent 6e5aacd5
{ {
"name": "react-ag-qeditor", "name": "react-ag-qeditor",
"version": "1.0.77", "version": "1.0.78",
"description": "WYSIWYG html editor", "description": "WYSIWYG html editor",
"author": "atma", "author": "atma",
"license": "MIT", "license": "MIT",
......
...@@ -508,12 +508,12 @@ const QEditor = ({ ...@@ -508,12 +508,12 @@ const QEditor = ({
className: 'atma-editor-focused', className: 'atma-editor-focused',
mode: 'all' mode: 'all'
}), }),
DragAndDrop.configure({
linkUpload: uploadOptions.url
}),
Audio, Audio,
Superscript, Superscript,
Subscript, Subscript,
DragAndDrop.configure({
linkUpload: uploadOptions.url
}),
], ],
content: value, content: value,
onUpdate: ({editor}) => onChange(editor.getHTML()), onUpdate: ({editor}) => onChange(editor.getHTML()),
......
...@@ -151,30 +151,34 @@ const DragAndDrop = Extension.create({ ...@@ -151,30 +151,34 @@ const DragAndDrop = Extension.create({
props: { props: {
handleDOMEvents: { handleDOMEvents: {
paste: async (view, event) => { paste: async (view, event) => {
const items = Array.from( const clipboardData = event.clipboardData || event.originalEvent.clipboardData;
(event.clipboardData || event.originalEvent.clipboardData).items
); // 1. Сначала проверяем HTML-вставку (таблицы, форматирование)
const html = clipboardData.getData('text/html');
if (html) {
// Если есть HTML - пропускаем для обработки другими расширениями
return false;
}
// Ищем изображения среди вставленных элементов // 2. Проверяем наличие именно файлов изображений
const imageItems = items.filter(item => const files = Array.from(clipboardData.files);
item.type.startsWith('image/') && item.getAsFile() const imageFiles = files.filter(file =>
file.type.startsWith('image/') &&
file.size > 0 &&
file.name.match(/\.(jpg|jpeg|png|gif|webp)$/i)
); );
// Если нет изображений - пропускаем обработку // Если нет реальных изображений - пропускаем
if (imageItems.length === 0) return false; if (imageFiles.length === 0) return false;
// Отменяем событие только если нашли изображения // 3. Только теперь обрабатываем изображения
event.preventDefault(); event.preventDefault();
try { const { schema } = view.state;
const { schema } = view.state; if (!schema.nodes.image) return false;
if (!schema.nodes.image) return false;
// Обрабатываем все найденные изображения
for (const item of imageItems) {
const file = item.getAsFile();
if (!file) continue;
try {
for (const file of imageFiles) {
const imageSrc = await upload(file); const imageSrc = await upload(file);
const node = schema.nodes.image.create({ src: imageSrc }); const node = schema.nodes.image.create({ src: imageSrc });
const transaction = view.state.tr.replaceSelectionWith(node); const transaction = view.state.tr.replaceSelectionWith(node);
...@@ -187,17 +191,22 @@ const DragAndDrop = Extension.create({ ...@@ -187,17 +191,22 @@ const DragAndDrop = Extension.create({
} }
}, },
drop: async (view, event) => { drop: async (view, event) => {
// Аналогичная логика для drop
const files = Array.from(event.dataTransfer?.files || []); const files = Array.from(event.dataTransfer?.files || []);
const imageFiles = files.filter(file => file.type.startsWith('image/')); const imageFiles = files.filter(file =>
file.type.startsWith('image/') &&
file.size > 0 &&
file.name.match(/\.(jpg|jpeg|png|gif|webp)$/i)
);
if (imageFiles.length === 0) return false; if (imageFiles.length === 0) return false;
event.preventDefault(); event.preventDefault();
try { const { schema } = view.state;
const { schema } = view.state; if (!schema.nodes.image) return false;
if (!schema.nodes.image) return false;
try {
const coordinates = view.posAtCoords({ const coordinates = view.posAtCoords({
left: event.clientX, left: event.clientX,
top: event.clientY top: event.clientY
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment