Commit 0f503d93 by Яков

try fix

parent d0995235
{ {
"name": "react-ag-qeditor", "name": "react-ag-qeditor",
"version": "1.0.75", "version": "1.0.76",
"description": "WYSIWYG html editor", "description": "WYSIWYG html editor",
"author": "atma", "author": "atma",
"license": "MIT", "license": "MIT",
......
...@@ -12,61 +12,128 @@ const upload = async (file) => { ...@@ -12,61 +12,128 @@ const upload = async (file) => {
return response.data.file_path; 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({ const DragAndDrop = Extension.create({
name: 'customDragAndDrop', name: 'customDragAndDrop',
addProseMirrorPlugins() { addProseMirrorPlugins() {
return [ return [
new Plugin({ new Plugin({
key: new PluginKey('customDragAndDrop'), key: new PluginKey('customDragAndDropPlugin'),
props: { props: {
handleDOMEvents: { handleDOMEvents: {
async paste (view, event) { async paste(view, event) {
let items = (event.clipboardData || event.originalEvent.clipboardData).items; const items = (event.clipboardData || event.originalEvent.clipboardData).items;
let hasImages = false;
for (let i = 0; i < items.length; i++){
const { schema } = view.state;
const image = items[i].getAsFile();
if (!image) { // Проверяем, есть ли изображения в буфере
return 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(); event.preventDefault();
const imageSrc = await upload(image); const imageSrc = await upload(image);
const node = view.state.schema.nodes.image.create({
const node = schema.nodes.image.create({
src: imageSrc, src: imageSrc,
}); });
const transaction = view.state.tr.replaceSelectionWith(node); const transaction = view.state.tr.replaceSelectionWith(node);
view.dispatch(transaction) view.dispatch(transaction);
} }
return true;
}, },
async drop (view, event) { async drop(view, event) {
const hasFiles = event.dataTransfer.files.length > 0; const hasFiles = event.dataTransfer.files.length > 0;
if (!hasFiles) return false;
// Другой способ достать текст
// console.log(event.dataTransfer.items[0].getAsString( (i) => {
// console.log(i)
// }));
// console.log(hasFiles)
if (hasFiles) {
event.preventDefault(); event.preventDefault();
const images = event.dataTransfer.files; const images = event.dataTransfer.files;
const {schema} = view.state; const { schema } = view.state;
const coordinates = view.posAtCoords({left: event.clientX, top: event.clientY}); const coordinates = view.posAtCoords({ left: event.clientX, top: event.clientY });
for (let i = 0; i < images.length; i++) { for (let i = 0; i < images.length; i++) {
if (!images[i].type.match('image.*')) continue;
const imageSrc = await upload(images[i]); const imageSrc = await upload(images[i]);
if (imageSrc) { if (imageSrc) {
const node = schema.nodes.image.create({ const node = schema.nodes.image.create({
src: imageSrc src: imageSrc
}); });
const transaction = view.state.tr.insert(coordinates.pos, node); const transaction = view.state.tr.insert(coordinates.pos, node);
view.dispatch(transaction) view.dispatch(transaction);
}
} }
} }
return true;
} }
} }
} }
...@@ -74,5 +141,4 @@ const DragAndDrop = Extension.create({ ...@@ -74,5 +141,4 @@ const DragAndDrop = Extension.create({
] ]
} }
}); });
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