check is dropped and is removed by ancestors instead of only check parent
This commit is contained in:
@@ -131,13 +131,31 @@ function initMutationObserver(cb: mutationCallBack): MutationObserver {
|
|||||||
return remove;
|
return remove;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const isDropped = (n: Node): boolean => {
|
||||||
|
const { parentNode } = n;
|
||||||
|
if (!parentNode) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (dropped.some(d => d === parentNode)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return isDropped(parentNode);
|
||||||
|
};
|
||||||
|
|
||||||
|
const isRemoved = (n: Node): boolean => {
|
||||||
|
const { parentNode } = n;
|
||||||
|
if (!parentNode) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
const parentId = mirror.getId((parentNode as Node) as INode);
|
||||||
|
if (removes.some(r => r.id === parentId)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return isRemoved(parentNode);
|
||||||
|
};
|
||||||
|
|
||||||
Array.from(addsSet).forEach(n => {
|
Array.from(addsSet).forEach(n => {
|
||||||
const parentId = mirror.getId((n.parentNode as Node) as INode);
|
if (!isDropped(n) && !isRemoved(n)) {
|
||||||
if (
|
|
||||||
parentId &&
|
|
||||||
!dropped.some(d => d === n.parentNode) &&
|
|
||||||
!removes.some(r => r.id === parentId)
|
|
||||||
) {
|
|
||||||
adds.push({
|
adds.push({
|
||||||
parentId: mirror.getId((n.parentNode as Node) as INode),
|
parentId: mirror.getId((n.parentNode as Node) as INode),
|
||||||
previousId: !n.previousSibling
|
previousId: !n.previousSibling
|
||||||
|
|||||||
Reference in New Issue
Block a user