Commit 0ac96429 by Яков

try fix

parent 6e5aacd5
{
"name": "react-ag-qeditor",
"version": "1.0.77",
"version": "1.0.78",
"description": "WYSIWYG html editor",
"author": "atma",
"license": "MIT",
......
......@@ -508,12 +508,12 @@ const QEditor = ({
className: 'atma-editor-focused',
mode: 'all'
}),
DragAndDrop.configure({
linkUpload: uploadOptions.url
}),
Audio,
Superscript,
Subscript,
DragAndDrop.configure({
linkUpload: uploadOptions.url
}),
],
content: value,
onUpdate: ({editor}) => onChange(editor.getHTML()),
......
......@@ -151,30 +151,34 @@ const DragAndDrop = Extension.create({
props: {
handleDOMEvents: {
paste: async (view, event) => {
const items = Array.from(
(event.clipboardData || event.originalEvent.clipboardData).items
);
const clipboardData = event.clipboardData || event.originalEvent.clipboardData;
// 1. Сначала проверяем HTML-вставку (таблицы, форматирование)
const html = clipboardData.getData('text/html');
if (html) {
// Если есть HTML - пропускаем для обработки другими расширениями
return false;
}
// Ищем изображения среди вставленных элементов
const imageItems = items.filter(item =>
item.type.startsWith('image/') && item.getAsFile()
// 2. Проверяем наличие именно файлов изображений
const files = Array.from(clipboardData.files);
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();
try {
const { schema } = view.state;
if (!schema.nodes.image) return false;
// Обрабатываем все найденные изображения
for (const item of imageItems) {
const file = item.getAsFile();
if (!file) continue;
const { schema } = view.state;
if (!schema.nodes.image) return false;
try {
for (const file of imageFiles) {
const imageSrc = await upload(file);
const node = schema.nodes.image.create({ src: imageSrc });
const transaction = view.state.tr.replaceSelectionWith(node);
......@@ -187,17 +191,22 @@ const DragAndDrop = Extension.create({
}
},
drop: async (view, event) => {
// Аналогичная логика для drop
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;
event.preventDefault();
try {
const { schema } = view.state;
if (!schema.nodes.image) return false;
const { schema } = view.state;
if (!schema.nodes.image) return false;
try {
const coordinates = view.posAtCoords({
left: event.clientX,
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