mirror of
https://github.com/FoggedLens/iD.git
synced 2026-05-15 05:30:35 +02:00
Persist down pointer multiselection between browse/select mode transitions
This commit is contained in:
@@ -259,7 +259,7 @@ export function behaviorSelect(context) {
|
||||
// always enter modeSelect even if the entity is already
|
||||
// selected since listeners may expect `context.enter` events,
|
||||
// e.g. in the walkthrough
|
||||
newMode = mode.id === 'select' ? mode.selectedIDs([datum.id]) : modeSelect(context, [datum.id]);
|
||||
newMode = mode.id === 'select' ? mode.selectedIDs([datum.id]) : modeSelect(context, [datum.id]).selectBehavior(behavior);
|
||||
context.enter(newMode);
|
||||
}
|
||||
|
||||
@@ -269,7 +269,7 @@ export function behaviorSelect(context) {
|
||||
if (!showMenu) {
|
||||
// deselect clicked entity, then reenter select mode or return to browse mode..
|
||||
selectedIDs = selectedIDs.filter(function(id) { return id !== datum.id; });
|
||||
newMode = selectedIDs.length ? mode.selectedIDs(selectedIDs) : modeBrowse(context);
|
||||
newMode = selectedIDs.length ? mode.selectedIDs(selectedIDs) : modeBrowse(context).selectBehavior(behavior);
|
||||
context.enter(newMode);
|
||||
}
|
||||
} else {
|
||||
|
||||
+24
-11
@@ -16,20 +16,33 @@ export function modeBrowse(context) {
|
||||
id: 'browse',
|
||||
title: t('modes.browse.title'),
|
||||
description: t('modes.browse.description')
|
||||
}, sidebar;
|
||||
};
|
||||
var sidebar;
|
||||
|
||||
var behaviors = [
|
||||
behaviorPaste(context),
|
||||
behaviorHover(context).on('hover', context.ui().sidebar.hover),
|
||||
behaviorSelect(context),
|
||||
behaviorLasso(context),
|
||||
modeDragNode(context).behavior,
|
||||
modeDragNote(context).behavior
|
||||
];
|
||||
var _selectBehavior;
|
||||
var _behaviors = [];
|
||||
|
||||
|
||||
mode.selectBehavior = function(val) {
|
||||
if (!arguments.length) return _selectBehavior;
|
||||
_selectBehavior = val;
|
||||
return mode;
|
||||
};
|
||||
|
||||
|
||||
mode.enter = function() {
|
||||
behaviors.forEach(context.install);
|
||||
if (!_behaviors.length) {
|
||||
if (!_selectBehavior) _selectBehavior = behaviorSelect(context);
|
||||
_behaviors = [
|
||||
behaviorPaste(context),
|
||||
behaviorHover(context).on('hover', context.ui().sidebar.hover),
|
||||
_selectBehavior,
|
||||
behaviorLasso(context),
|
||||
modeDragNode(context).behavior,
|
||||
modeDragNote(context).behavior
|
||||
];
|
||||
}
|
||||
_behaviors.forEach(context.install);
|
||||
|
||||
// Get focus on the body.
|
||||
if (document.activeElement && document.activeElement.blur) {
|
||||
@@ -46,7 +59,7 @@ export function modeBrowse(context) {
|
||||
|
||||
mode.exit = function() {
|
||||
context.ui().sidebar.hover.cancel();
|
||||
behaviors.forEach(context.uninstall);
|
||||
_behaviors.forEach(context.uninstall);
|
||||
|
||||
if (sidebar) {
|
||||
context.ui().sidebar.hide();
|
||||
|
||||
+22
-9
@@ -40,15 +40,8 @@ export function modeSelect(context, selectedIDs) {
|
||||
|
||||
var _breatheBehavior = behaviorBreathe(context);
|
||||
var _modeDragNode = modeDragNode(context);
|
||||
var _behaviors = [
|
||||
behaviorPaste(context),
|
||||
_breatheBehavior,
|
||||
behaviorHover(context).on('hover', context.ui().sidebar.hoverModeSelect),
|
||||
behaviorSelect(context),
|
||||
behaviorLasso(context),
|
||||
_modeDragNode.behavior,
|
||||
modeDragNote(context).behavior
|
||||
];
|
||||
var _selectBehavior;
|
||||
var _behaviors = [];
|
||||
|
||||
var _operations = [];
|
||||
var _newFeature = false;
|
||||
@@ -160,6 +153,13 @@ export function modeSelect(context, selectedIDs) {
|
||||
};
|
||||
|
||||
|
||||
mode.selectBehavior = function(val) {
|
||||
if (!arguments.length) return _selectBehavior;
|
||||
_selectBehavior = val;
|
||||
return mode;
|
||||
};
|
||||
|
||||
|
||||
mode.follow = function(val) {
|
||||
if (!arguments.length) return _follow;
|
||||
_follow = val;
|
||||
@@ -208,6 +208,19 @@ export function modeSelect(context, selectedIDs) {
|
||||
|
||||
loadOperations();
|
||||
|
||||
if (!_behaviors.length) {
|
||||
if (!_selectBehavior) _selectBehavior = behaviorSelect(context);
|
||||
|
||||
_behaviors = [
|
||||
behaviorPaste(context),
|
||||
_breatheBehavior,
|
||||
behaviorHover(context).on('hover', context.ui().sidebar.hoverModeSelect),
|
||||
_selectBehavior,
|
||||
behaviorLasso(context),
|
||||
_modeDragNode.behavior,
|
||||
modeDragNote(context).behavior
|
||||
];
|
||||
}
|
||||
_behaviors.forEach(context.install);
|
||||
|
||||
keybinding
|
||||
|
||||
Reference in New Issue
Block a user