From 87073ccde712c29b9767be9a71a25bc45fb54012 Mon Sep 17 00:00:00 2001 From: Mark Friedrich Date: Sat, 23 Jun 2018 17:03:34 +0200 Subject: [PATCH] - fixed a bug where filtered(hidden) systems could be moved if they were selected before filter was applied, #641 --- js/app/map/map.js | 9 ++++-- js/app/map/util.js | 49 ++++++++++++++++++++++---------- public/js/v1.3.6/app/map/map.js | 9 ++++-- public/js/v1.3.6/app/map/util.js | 49 ++++++++++++++++++++++---------- 4 files changed, 80 insertions(+), 36 deletions(-) diff --git a/js/app/map/map.js b/js/app/map/map.js index 8aa336c0..292f9062 100644 --- a/js/app/map/map.js +++ b/js/app/map/map.js @@ -2325,7 +2325,7 @@ define([ if(! system.hasClass('no-click')){ if(e.ctrlKey === true){ // select system - MapUtil.toggleSelectSystem(map, [system]); + MapUtil.toggleSystemsSelect(map, [system]); }else{ MapUtil.showSystemInfo(map, system); } @@ -2383,14 +2383,17 @@ define([ let mapElement = $(this); let map = getMapInstance(mapElement.data('id')); - let allSystems = mapElement.find('.' + config.systemClass + ':not(.' + config.systemSelectedClass + ')'); + let allSystems = mapElement.find('.' + config.systemClass + + ':not(.' + config.systemSelectedClass + ')' + + ':not(.' + MapUtil.config.systemHiddenClass + ')' + ); // filter non-locked systems allSystems = allSystems.filter(function(i, el){ return ( $(el).data('locked') !== true ); }); - MapUtil.toggleSelectSystem(map, allSystems); + MapUtil.toggleSystemsSelect(map, allSystems); Util.showNotify({title: allSystems.length + ' systems selected', type: 'success'}); diff --git a/js/app/map/util.js b/js/app/map/util.js index 4fed4bb2..b3860d05 100644 --- a/js/app/map/util.js +++ b/js/app/map/util.js @@ -26,6 +26,7 @@ define([ systemClass: 'pf-system', // class for all systems systemActiveClass: 'pf-system-active', // class for an active system on a map systemSelectedClass: 'pf-system-selected', // class for selected systems on on map + systemHiddenClass: 'pf-system-hidden', // class for hidden (filtered) systems // dataTable tableCellEllipsisClass: 'pf-table-cell-ellipsis', @@ -461,7 +462,7 @@ define([ */ let filterMapByScopes = (map, scopes) => { if(map){ - // TODO sometimes map is undefined -> bug + // TODO ^^sometimes map is undefined -> bug let mapElement = $(map.getContainer()); let allSystems = mapElement.getSystems(); let allConnections = map.getAllConnections(); @@ -500,9 +501,9 @@ define([ visibleTypeIds.indexOf($(system).data('typeId')) >= 0 || visibleSystems.indexOf(system) >= 0 ){ - setSystemVisible(system, true); + setSystemVisible(system, map, true); }else{ - setSystemVisible(system, false); + setSystemVisible(system, map, false); } } @@ -510,7 +511,7 @@ define([ }else{ // clear filter for(let system of allSystems){ - setSystemVisible(system, true); + setSystemVisible(system, map, true); } for(let connection of allConnections){ setConnectionVisible(connection, true); @@ -521,6 +522,22 @@ define([ } }; + /** + * mark system as "selected" e.g. for dragging + * @param map + * @param system + * @param select + */ + let setSystemSelect = (map, system, select) => { + if(select){ + system.addClass(config.systemSelectedClass); + map.addToDragSelection(system); + }else{ + system.removeClass(config.systemSelectedClass); + map.removeFromDragSelection(system); + } + }; + /** * mark a system as "active" * @param map @@ -540,8 +557,13 @@ define([ * @param system * @param visible */ - let setSystemVisible = (system, visible) => { - $(system).toggleClass('pf-system-hidden', !visible); + let setSystemVisible = (system, map, visible) => { + system = $(system); + if(!visible){ + // invisible systems should no longer be selected + setSystemSelect(map, system, false); + } + system.toggleClass(config.systemHiddenClass, !visible); }; /** @@ -576,17 +598,14 @@ define([ * @param map * @param systems */ - let toggleSelectSystem = (map, systems) => { + let toggleSystemsSelect = (map, systems) => { for(let system of systems){ system = $(system); - if( system.data('locked') !== true ){ - if( system.hasClass( config.systemSelectedClass ) ){ - system.removeClass( config.systemSelectedClass ); - - map.removeFromDragSelection(system); + if(system.data('locked') !== true){ + if(system.hasClass(config.systemSelectedClass)){ + setSystemSelect(map, system, false); }else{ - system.addClass( config.systemSelectedClass ); - map.addToDragSelection(system); + setSystemSelect(map, system, true); } } } @@ -1299,7 +1318,7 @@ define([ getSystemData: getSystemData, getSystemTypeInfo: getSystemTypeInfo, getEffectInfoForSystem: getEffectInfoForSystem, - toggleSelectSystem: toggleSelectSystem, + toggleSystemsSelect: toggleSystemsSelect, toggleConnectionActive: toggleConnectionActive, showSystemInfo: showSystemInfo, showConnectionInfo: showConnectionInfo, diff --git a/public/js/v1.3.6/app/map/map.js b/public/js/v1.3.6/app/map/map.js index 8aa336c0..292f9062 100644 --- a/public/js/v1.3.6/app/map/map.js +++ b/public/js/v1.3.6/app/map/map.js @@ -2325,7 +2325,7 @@ define([ if(! system.hasClass('no-click')){ if(e.ctrlKey === true){ // select system - MapUtil.toggleSelectSystem(map, [system]); + MapUtil.toggleSystemsSelect(map, [system]); }else{ MapUtil.showSystemInfo(map, system); } @@ -2383,14 +2383,17 @@ define([ let mapElement = $(this); let map = getMapInstance(mapElement.data('id')); - let allSystems = mapElement.find('.' + config.systemClass + ':not(.' + config.systemSelectedClass + ')'); + let allSystems = mapElement.find('.' + config.systemClass + + ':not(.' + config.systemSelectedClass + ')' + + ':not(.' + MapUtil.config.systemHiddenClass + ')' + ); // filter non-locked systems allSystems = allSystems.filter(function(i, el){ return ( $(el).data('locked') !== true ); }); - MapUtil.toggleSelectSystem(map, allSystems); + MapUtil.toggleSystemsSelect(map, allSystems); Util.showNotify({title: allSystems.length + ' systems selected', type: 'success'}); diff --git a/public/js/v1.3.6/app/map/util.js b/public/js/v1.3.6/app/map/util.js index 4fed4bb2..b3860d05 100644 --- a/public/js/v1.3.6/app/map/util.js +++ b/public/js/v1.3.6/app/map/util.js @@ -26,6 +26,7 @@ define([ systemClass: 'pf-system', // class for all systems systemActiveClass: 'pf-system-active', // class for an active system on a map systemSelectedClass: 'pf-system-selected', // class for selected systems on on map + systemHiddenClass: 'pf-system-hidden', // class for hidden (filtered) systems // dataTable tableCellEllipsisClass: 'pf-table-cell-ellipsis', @@ -461,7 +462,7 @@ define([ */ let filterMapByScopes = (map, scopes) => { if(map){ - // TODO sometimes map is undefined -> bug + // TODO ^^sometimes map is undefined -> bug let mapElement = $(map.getContainer()); let allSystems = mapElement.getSystems(); let allConnections = map.getAllConnections(); @@ -500,9 +501,9 @@ define([ visibleTypeIds.indexOf($(system).data('typeId')) >= 0 || visibleSystems.indexOf(system) >= 0 ){ - setSystemVisible(system, true); + setSystemVisible(system, map, true); }else{ - setSystemVisible(system, false); + setSystemVisible(system, map, false); } } @@ -510,7 +511,7 @@ define([ }else{ // clear filter for(let system of allSystems){ - setSystemVisible(system, true); + setSystemVisible(system, map, true); } for(let connection of allConnections){ setConnectionVisible(connection, true); @@ -521,6 +522,22 @@ define([ } }; + /** + * mark system as "selected" e.g. for dragging + * @param map + * @param system + * @param select + */ + let setSystemSelect = (map, system, select) => { + if(select){ + system.addClass(config.systemSelectedClass); + map.addToDragSelection(system); + }else{ + system.removeClass(config.systemSelectedClass); + map.removeFromDragSelection(system); + } + }; + /** * mark a system as "active" * @param map @@ -540,8 +557,13 @@ define([ * @param system * @param visible */ - let setSystemVisible = (system, visible) => { - $(system).toggleClass('pf-system-hidden', !visible); + let setSystemVisible = (system, map, visible) => { + system = $(system); + if(!visible){ + // invisible systems should no longer be selected + setSystemSelect(map, system, false); + } + system.toggleClass(config.systemHiddenClass, !visible); }; /** @@ -576,17 +598,14 @@ define([ * @param map * @param systems */ - let toggleSelectSystem = (map, systems) => { + let toggleSystemsSelect = (map, systems) => { for(let system of systems){ system = $(system); - if( system.data('locked') !== true ){ - if( system.hasClass( config.systemSelectedClass ) ){ - system.removeClass( config.systemSelectedClass ); - - map.removeFromDragSelection(system); + if(system.data('locked') !== true){ + if(system.hasClass(config.systemSelectedClass)){ + setSystemSelect(map, system, false); }else{ - system.addClass( config.systemSelectedClass ); - map.addToDragSelection(system); + setSystemSelect(map, system, true); } } } @@ -1299,7 +1318,7 @@ define([ getSystemData: getSystemData, getSystemTypeInfo: getSystemTypeInfo, getEffectInfoForSystem: getEffectInfoForSystem, - toggleSelectSystem: toggleSelectSystem, + toggleSystemsSelect: toggleSystemsSelect, toggleConnectionActive: toggleConnectionActive, showSystemInfo: showSystemInfo, showConnectionInfo: showConnectionInfo,