From 1cb16f64eec495845edbc97cad4490b59d879226 Mon Sep 17 00:00:00 2001 From: Alex de Mulder Date: Sat, 13 Feb 2016 14:59:45 +0100 Subject: [PATCH] Fixed #1575: fixed selection events --- HISTORY.md | 1 + dist/vis.js | 38 +++++++++++------------ lib/network/modules/InteractionHandler.js | 34 ++++++++++---------- 3 files changed, 38 insertions(+), 35 deletions(-) diff --git a/HISTORY.md b/HISTORY.md index 506f4636..75c77209 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -22,6 +22,7 @@ http://visjs.org - Fixed #1635: edges are now referring to the correct points. - Fixed #1644, #1631: overlapping nodes in hierarchical layout should no longer occur. - Added parentCentralization option for hierarchical layout. +- Fixed #1575: fixed selection events ## 2016-02-04, version 4.14.0 diff --git a/dist/vis.js b/dist/vis.js index b1220eec..3dbe3015 100644 --- a/dist/vis.js +++ b/dist/vis.js @@ -38286,8 +38286,8 @@ return /******/ (function(modules) { // webpackBootstrap var _determineIfDifferent2 = this._determineIfDifferent(previousSelection, currentSelection); - var nodesChanges = _determineIfDifferent2.nodesChanges; - var edgesChanges = _determineIfDifferent2.edgesChanges; + var nodesChanged = _determineIfDifferent2.nodesChanged; + var edgesChanged = _determineIfDifferent2.edgesChanged; var nodeSelected = false; @@ -38296,15 +38296,15 @@ return /******/ (function(modules) { // webpackBootstrap this.selectionHandler._generateClickEvent('selectNode', event, pointer); selected = true; nodeSelected = true; - } else if (selectedNodesCount - previouslySelectedNodeCount < 0) { - // node was deselected - this.selectionHandler._generateClickEvent('deselectNode', event, pointer, previousSelection); - selected = true; - } else if (selectedNodesCount === previouslySelectedNodeCount && nodesChanges === true) { + } else if (nodesChanged === true && selectedNodesCount > 0) { this.selectionHandler._generateClickEvent('deselectNode', event, pointer, previousSelection); this.selectionHandler._generateClickEvent('selectNode', event, pointer); nodeSelected = true; selected = true; + } else if (selectedNodesCount - previouslySelectedNodeCount < 0) { + // node was deselected + this.selectionHandler._generateClickEvent('deselectNode', event, pointer, previousSelection); + selected = true; } // handle the selected edges @@ -38312,13 +38312,13 @@ return /******/ (function(modules) { // webpackBootstrap // edge was selected this.selectionHandler._generateClickEvent('selectEdge', event, pointer); selected = true; - } else if (selectedEdgesCount - previouslySelectedEdgeCount < 0) { - // edge was deselected + } else if (selectedEdgesCount > 0 && edgesChanged === true) { this.selectionHandler._generateClickEvent('deselectEdge', event, pointer, previousSelection); + this.selectionHandler._generateClickEvent('selectEdge', event, pointer); selected = true; - } else if (selectedEdgesCount === previouslySelectedEdgeCount && edgesChanges === true) { + } else if (selectedEdgesCount - previouslySelectedEdgeCount < 0) { + // edge was deselected this.selectionHandler._generateClickEvent('deselectEdge', event, pointer, previousSelection); - this.selectionHandler._generateClickEvent('selectEdge', event, pointer); selected = true; } @@ -38333,37 +38333,37 @@ return /******/ (function(modules) { // webpackBootstrap * This function checks if the nodes and edges previously selected have changed. * @param previousSelection * @param currentSelection - * @returns {{nodesChanges: boolean, edgesChanges: boolean}} + * @returns {{nodesChanged: boolean, edgesChanged: boolean}} * @private */ }, { key: '_determineIfDifferent', value: function _determineIfDifferent(previousSelection, currentSelection) { - var nodesChanges = false; - var edgesChanges = false; + var nodesChanged = false; + var edgesChanged = false; for (var i = 0; i < previousSelection.nodes.length; i++) { if (currentSelection.nodes.indexOf(previousSelection.nodes[i]) === -1) { - nodesChanges = true; + nodesChanged = true; } } for (var i = 0; i < currentSelection.nodes.length; i++) { if (previousSelection.nodes.indexOf(previousSelection.nodes[i]) === -1) { - nodesChanges = true; + nodesChanged = true; } } for (var i = 0; i < previousSelection.edges.length; i++) { if (currentSelection.edges.indexOf(previousSelection.edges[i]) === -1) { - edgesChanges = true; + edgesChanged = true; } } for (var i = 0; i < currentSelection.edges.length; i++) { if (previousSelection.edges.indexOf(previousSelection.edges[i]) === -1) { - edgesChanges = true; + edgesChanged = true; } } - return { nodesChanges: nodesChanges, edgesChanges: edgesChanges }; + return { nodesChanged: nodesChanged, edgesChanged: edgesChanged }; } /** diff --git a/lib/network/modules/InteractionHandler.js b/lib/network/modules/InteractionHandler.js index f1b7fecd..b4e6fec4 100644 --- a/lib/network/modules/InteractionHandler.js +++ b/lib/network/modules/InteractionHandler.js @@ -189,7 +189,7 @@ class InteractionHandler { let selectedNodesCount = this.selectionHandler._getSelectedNodeCount(); let currentSelection = this.selectionHandler.getSelection(); - let {nodesChanges, edgesChanges} = this._determineIfDifferent(previousSelection, currentSelection); + let {nodesChanged, edgesChanged} = this._determineIfDifferent(previousSelection, currentSelection); let nodeSelected = false; if (selectedNodesCount - previouslySelectedNodeCount > 0) { // node was selected @@ -197,32 +197,34 @@ class InteractionHandler { selected = true; nodeSelected = true; } - else if (selectedNodesCount - previouslySelectedNodeCount < 0) { // node was deselected + else if (nodesChanged === true && selectedNodesCount > 0) { this.selectionHandler._generateClickEvent('deselectNode', event, pointer, previousSelection); + this.selectionHandler._generateClickEvent('selectNode', event, pointer); + nodeSelected = true; selected = true; } - else if (selectedNodesCount === previouslySelectedNodeCount && nodesChanges === true) { + else if (selectedNodesCount - previouslySelectedNodeCount < 0) { // node was deselected this.selectionHandler._generateClickEvent('deselectNode', event, pointer, previousSelection); - this.selectionHandler._generateClickEvent('selectNode', event, pointer); - nodeSelected = true; selected = true; } + // handle the selected edges if (selectedEdgesCount - previouslySelectedEdgeCount > 0 && nodeSelected === false) { // edge was selected this.selectionHandler._generateClickEvent('selectEdge', event, pointer); selected = true; } - else if (selectedEdgesCount - previouslySelectedEdgeCount < 0) { // edge was deselected + else if (selectedEdgesCount > 0 && edgesChanged === true) { this.selectionHandler._generateClickEvent('deselectEdge', event, pointer, previousSelection); + this.selectionHandler._generateClickEvent('selectEdge', event, pointer); selected = true; } - else if (selectedEdgesCount === previouslySelectedEdgeCount && edgesChanges === true) { + else if (selectedEdgesCount - previouslySelectedEdgeCount < 0) { // edge was deselected this.selectionHandler._generateClickEvent('deselectEdge', event, pointer, previousSelection); - this.selectionHandler._generateClickEvent('selectEdge', event, pointer); selected = true; } + // fire the select event if anything has been selected or deselected if (selected === true) { // select or unselect this.selectionHandler._generateClickEvent('select', event, pointer); @@ -234,35 +236,35 @@ class InteractionHandler { * This function checks if the nodes and edges previously selected have changed. * @param previousSelection * @param currentSelection - * @returns {{nodesChanges: boolean, edgesChanges: boolean}} + * @returns {{nodesChanged: boolean, edgesChanged: boolean}} * @private */ _determineIfDifferent(previousSelection,currentSelection) { - let nodesChanges = false; - let edgesChanges = false; + let nodesChanged = false; + let edgesChanged = false; for (let i = 0; i < previousSelection.nodes.length; i++) { if (currentSelection.nodes.indexOf(previousSelection.nodes[i]) === -1) { - nodesChanges = true; + nodesChanged = true; } } for (let i = 0; i < currentSelection.nodes.length; i++) { if (previousSelection.nodes.indexOf(previousSelection.nodes[i]) === -1) { - nodesChanges = true; + nodesChanged = true; } } for (let i = 0; i < previousSelection.edges.length; i++) { if (currentSelection.edges.indexOf(previousSelection.edges[i]) === -1) { - edgesChanges = true; + edgesChanged = true; } } for (let i = 0; i < currentSelection.edges.length; i++) { if (previousSelection.edges.indexOf(previousSelection.edges[i]) === -1) { - edgesChanges = true; + edgesChanged = true; } } - return {nodesChanges, edgesChanges}; + return {nodesChanged, edgesChanged}; }