iron-selector icon indicating copy to clipboard operation
iron-selector copied to clipboard

Proposal for PR: add "traditional" multi-select to iron-selector

Open Caffeinix opened this issue 8 years ago • 4 comments

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?

Caffeinix avatar May 10 '16 02:05 Caffeinix

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.

bicknellr avatar May 24 '16 22:05 bicknellr

Where I can to get your extension? Please share it with community.

yarikus avatar Sep 13 '16 14:09 yarikus

Where can we get a preview of this extension to test it?

timoteoponce avatar Oct 11 '16 12:10 timoteoponce

@Caffeinix Awesome, I'd be interested to look at this code as well. Can you share it?

czellweg avatar Dec 15 '16 08:12 czellweg