Commit 94fe6020 by Яков

try fix

parent a5d39205
{
"name": "react-ag-qeditor",
"version": "1.0.79",
"version": "1.0.80",
"description": "WYSIWYG html editor",
"author": "atma",
"license": "MIT",
......
......@@ -12,214 +12,67 @@ const upload = async (file) => {
return response.data.file_path;
};
// const DragAndDrop = Extension.create({
// name: 'customDragAndDrop',
// addProseMirrorPlugins() {
// return [
// new Plugin({
// key: new PluginKey('customDragAndDrop'),
// props: {
// handleDOMEvents: {
// async paste (view, event) {
// let items = (event.clipboardData || event.originalEvent.clipboardData).items;
//
// for (let i = 0; i < items.length; i++){
// const { schema } = view.state;
// const image = items[i].getAsFile();
//
// if (!image) {
// return
// }
//
// event.preventDefault();
// const imageSrc = await upload(image);
//
// const node = schema.nodes.image.create({
// src: imageSrc,
// });
// const transaction = view.state.tr.replaceSelectionWith(node);
// view.dispatch(transaction)
// }
// },
// async drop (view, event) {
// const hasFiles = event.dataTransfer.files.length > 0;
//
// // Другой способ достать текст
// // console.log(event.dataTransfer.items[0].getAsString( (i) => {
// // console.log(i)
// // }));
// // console.log(hasFiles)
//
// if (hasFiles) {
// event.preventDefault();
// const images = event.dataTransfer.files;
// const {schema} = view.state;
// const coordinates = view.posAtCoords({left: event.clientX, top: event.clientY});
//
// for (let i = 0; i < images.length; i++) {
// const imageSrc = await upload(images[i]);
// if (imageSrc) {
// const node = schema.nodes.image.create({
// src: imageSrc
// });
// const transaction = view.state.tr.insert(coordinates.pos, node);
// view.dispatch(transaction)
// }
// }
// }
// }
// }
// }
// })
// ]
// }
// });
// const DragAndDrop = Extension.create({
// name: 'customDragAndDrop',
// addProseMirrorPlugins() {
// return [
// new Plugin({
// key: new PluginKey('customDragAndDropPlugin'),
// props: {
// handleDOMEvents: {
// async paste(view, event) {
// const items = (event.clipboardData || event.originalEvent.clipboardData).items;
// let hasImages = false;
//
// // Проверяем, есть ли изображения в буфере
// for (let i = 0; i < items.length; i++) {
// if (items[i].type.indexOf('image') !== -1) {
// hasImages = true;
// break;
// }
// }
//
// // Если нет изображений - пропускаем обработку
// if (!hasImages) return false;
//
// // Обрабатываем только изображения
// for (let i = 0; i < items.length; i++) {
// const image = items[i].getAsFile();
// if (!image || !image.type.match('image.*')) continue;
//
// event.preventDefault();
// const imageSrc = await upload(image);
// const node = view.state.schema.nodes.image.create({
// src: imageSrc,
// });
// const transaction = view.state.tr.replaceSelectionWith(node);
// view.dispatch(transaction);
// }
// return true;
// },
// async drop(view, event) {
// const hasFiles = event.dataTransfer.files.length > 0;
// if (!hasFiles) return false;
//
// event.preventDefault();
// const images = event.dataTransfer.files;
// const { schema } = view.state;
// const coordinates = view.posAtCoords({ left: event.clientX, top: event.clientY });
//
// for (let i = 0; i < images.length; i++) {
// if (!images[i].type.match('image.*')) continue;
// const imageSrc = await upload(images[i]);
// if (imageSrc) {
// const node = schema.nodes.image.create({
// src: imageSrc
// });
// const transaction = view.state.tr.insert(coordinates.pos, node);
// view.dispatch(transaction);
// }
// }
// return true;
// }
// }
// }
// })
// ]
// }
// });
const DragAndDrop = Extension.create({
name: 'smartImageUpload',
name: 'customDragAndDrop',
addProseMirrorPlugins() {
return [
new Plugin({
key: new PluginKey('smartImageUpload'),
key: new PluginKey('customDragAndDrop'),
props: {
handleDOMEvents: {
paste: (view, event) => {
const clipboard = event.clipboardData || event.originalEvent.clipboardData
async paste (view, event) {
let items = (event.clipboardData || event.originalEvent.clipboardData).items;
// Проверяем наличие изображений
const hasImages = Array.from(clipboard.items).some(
item => item.type.startsWith('image/')
)
for (let i = 0; i < items.length; i++){
const { schema } = view.state;
const image = items[i].getAsFile();
// Если есть изображения - обрабатываем только их
if (hasImages) {
event.preventDefault()
if (!image) {
return
}
// Получаем все изображения из буфера
const images = Array.from(clipboard.items)
.filter(item => item.type.startsWith('image/'))
.map(item => item.getAsFile())
.filter(Boolean)
// event.preventDefault();
const imageSrc = await upload(image);
// Загружаем и вставляем каждое изображение
images.forEach(async (file) => {
const imageUrl = await upload(file) // Ваша функция загрузки
view.state.schema.nodes.image.createAndFill(
{ src: imageUrl }
)?.forEach(node => {
const transaction = view.state.tr.replaceSelectionWith(node)
const node = schema.nodes.image.create({
src: imageSrc,
});
const transaction = view.state.tr.replaceSelectionWith(node);
view.dispatch(transaction)
})
})
return true
}
// Для всего остального позволяем Tiptap обрабатывать самостоятельно
return false
},
drop: (view, event) => {
const files = event.dataTransfer?.files
if (files && files.length > 0) {
const imageFiles = Array.from(files).filter(
file => file.type.startsWith('image/')
)
if (imageFiles.length > 0) {
event.preventDefault()
// Получаем позицию для вставки
const coordinates = view.posAtCoords({
left: event.clientX,
top: event.clientY
})
// Загружаем и вставляем изображения
imageFiles.forEach(async (file) => {
const imageUrl = await upload(file) // Ваша функция загрузки
const node = view.state.schema.nodes.image.create(
{ src: imageUrl }
)
const transaction = view.state.tr.insert(coordinates.pos, node)
async drop (view, event) {
const hasFiles = event.dataTransfer.files.length > 0;
// Другой способ достать текст
// console.log(event.dataTransfer.items[0].getAsString( (i) => {
// console.log(i)
// }));
// console.log(hasFiles)
if (hasFiles) {
// event.preventDefault();
const images = event.dataTransfer.files;
const {schema} = view.state;
const coordinates = view.posAtCoords({left: event.clientX, top: event.clientY});
for (let i = 0; i < images.length; i++) {
const imageSrc = await upload(images[i]);
if (imageSrc) {
const node = schema.nodes.image.create({
src: imageSrc
});
const transaction = view.state.tr.insert(coordinates.pos, node);
view.dispatch(transaction)
})
return true
}
}
return false
}
}
}
}
})
]
}
})
export default DragAndDrop;
});
export default DragAndDrop;
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