- fixed a bug where filtered(hidden) systems could be moved if they were selected before filter was applied, #641

This commit is contained in:
Mark Friedrich
2018-06-23 17:03:34 +02:00
parent dacd8751a1
commit 87073ccde7
4 changed files with 80 additions and 36 deletions

View File

@@ -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'});

View File

@@ -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,

View File

@@ -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'});

View File

@@ -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,