Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
lib
react-ag-qeditor
Commits
0ac96429
Commit
0ac96429
authored
May 14, 2025
by
Яков
Browse files
try fix
parent
6e5aacd5
Changes
3
Hide whitespace changes
Inline
Side-by-side
package.json
View file @
0ac96429
{
{
"name"
:
"react-ag-qeditor"
,
"name"
:
"react-ag-qeditor"
,
"version"
:
"1.0.7
7
"
,
"version"
:
"1.0.7
8
"
,
"description"
:
"WYSIWYG html editor"
,
"description"
:
"WYSIWYG html editor"
,
"author"
:
"atma"
,
"author"
:
"atma"
,
"license"
:
"
MIT
"
,
"license"
:
"
MIT
"
,
...
...
src/QEditor.jsx
View file @
0ac96429
...
@@ -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
()),
...
...
src/extensions/DragAndDrop.js
View file @
0ac96429
...
@@ -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
(
image
Item
s
.
length
===
0
)
return
false
;
if
(
image
File
s
.
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
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment