iron-selector
iron-selector copied to clipboard
Proposal for PR: add "traditional" multi-select to iron-selector
I have written an extension to IronMultiSelectableBehavior
that implements a more general and traditional form of multi-select, similar to how multi-select works in most desktop applications. The behavior is as follows:
- Tapping an unselected element with no modifier selects it and deselects all other elements.
- Tapping a selected element with no modifier deselects all other elements.
- Tapping an element while holding shift selects all elements between it and the most recently selected other element, inclusive, and leaves all other selected elements alone.
- Tapping an unselected element while holding control or command selects it and leaves all other selected elements alone.
- Tapping a selected element while holding control of command deselects it and leaves all other selected elements alone.
My implementation is small (43 source lines) and works by extending IronMultiSelectableBehavior
and overriding two functions, _activateHandler
and _toggleSelected
. The _activateHandler
implementation just records the keyboard modifiers and then calls IronMultiSelectableBehavior
's version. _toggleSelected
is where the actual logic is implemented.
My implementation does not support a "mixed" mode where an unmodified tap will toggle the selection state like IronMultiSelectableBehavior
, but a shift-click will extend the selection. Such a thing would be relatively easy to add if it were desired, but it would increase the complexity somewhat.
This PR would fix https://github.com/PolymerElements/iron-selector/issues/38.
Thoughts?
I think this would be really awesome! We might have to go with the "mixed" mode you mentioned as the default since we'd be introducing a breaking change otherwise, but allowing the regular <select multiple>
style wouldn't be a problem if it was behind a property.
Where I can to get your extension? Please share it with community.
Where can we get a preview of this extension to test it?
@Caffeinix Awesome, I'd be interested to look at this code as well. Can you share it?