Skip to content

Commit

Permalink
fix(mvc.Dom): remove event listeners on element removal; fix(linkTool…
Browse files Browse the repository at this point in the history
…s.Vertices): fix to fire mouseleave event when redundancyRemoval is disabled (#2482)
  • Loading branch information
kumilingus committed Jan 18, 2024
1 parent 6b1b54f commit cc74f36
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 13 deletions.
27 changes: 21 additions & 6 deletions packages/joint-core/src/mvc/Dom/methods.mjs
Original file line number Diff line number Diff line change
@@ -1,35 +1,50 @@
import { camelCase } from '../../util/utilHelpers.mjs';
import $ from './Dom.mjs';
import V from '../../V/index.mjs';
import { dataPriv, cleanNodesData } from './vars.mjs';
import { dataPriv, dataUser } from './vars.mjs';

// Manipulation

function removeNodes(nodes, removeData) {
function cleanNodesData(nodes) {
let i = nodes.length;
while (i--) cleanNodeData(nodes[i]);
}

function cleanNodeData(node) {
$.event.remove(node);
dataPriv.remove(node);
dataUser.remove(node);
}

function removeNodes(nodes) {
for (let i = 0; i < nodes.length; i++) {
const node = nodes[i];
removeData && dataPriv.remove(node);
if (node.parentNode) {
node.parentNode.removeChild(node);
}
}
}

export function remove() {
removeNodes(this, true);
for (let i = 0; i < this.length; i++) {
const node = this[i];
cleanNodeData(node);
cleanNodesData(node.getElementsByTagName('*'));
}
removeNodes(this);
return this;
}

export function detach() {
removeNodes(this, false);
removeNodes(this);
return this;
}

export function empty() {
for (let i = 0; i < this.length; i++) {
const node = this[i];
if (node.nodeType === 1) {
cleanNodesData(dataPriv, node.getElementsByTagName('*'));
cleanNodesData(node.getElementsByTagName('*'));
// Remove any remaining nodes
node.textContent = '';
}
Expand Down
7 changes: 0 additions & 7 deletions packages/joint-core/src/mvc/Dom/vars.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,3 @@ import Data from '../Data.mjs';
export const dataPriv = new Data();

export const dataUser = new Data();

export function cleanNodesData(data, nodes) {
let i = nodes.length;
while (i--) {
data.remove(nodes[i]);
}
}

0 comments on commit cc74f36

Please sign in to comment.