11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    Polymer('core-selection', {
31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      /**
41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * If true, multiple selections are allowed.
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       *
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @attribute multi
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @type boolean
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @default false
91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       */
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      multi: false,
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      ready: function() {
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        this.clear();
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      },
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      clear: function() {
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        this.selection = [];
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      },
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      /**
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * Retrieves the selected item(s).
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @method getSelection
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @returns Returns the selected item(s). If the multi property is true,
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * getSelection will return an array, otherwise it will return
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * the selected item or undefined if there is no selection.
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      */
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      getSelection: function() {
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        return this.multi ? this.selection : this.selection[0];
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      },
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      /**
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * Indicates if a given item is selected.
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @method isSelected
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @param {any} item The item whose selection state should be checked.
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @returns Returns true if `item` is selected.
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      */
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      isSelected: function(item) {
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        return this.selection.indexOf(item) >= 0;
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      },
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      setItemSelected: function(item, isSelected) {
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        if (item !== undefined && item !== null) {
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          if (isSelected) {
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            this.selection.push(item);
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          } else {
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            var i = this.selection.indexOf(item);
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            if (i >= 0) {
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci              this.selection.splice(i, 1);
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            }
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          }
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          this.fire("core-select", {isSelected: isSelected, item: item});
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        }
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      },
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      /**
501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * Set the selection state for a given `item`. If the multi property
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * is true, then the selected state of `item` will be toggled; otherwise
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * the `item` will be selected.
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @method select
541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @param {any} item: The item to select.
551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      */
561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      select: function(item) {
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        if (this.multi) {
581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          this.toggle(item);
591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        } else if (this.getSelection() !== item) {
601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          this.setItemSelected(this.getSelection(), false);
611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          this.setItemSelected(item, true);
621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        }
631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      },
641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      /**
651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * Toggles the selection state for `item`.
661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @method toggle
671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @param {any} item: The item to toggle.
681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      */
691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      toggle: function(item) {
701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        this.setItemSelected(item, !this.isSelected(item));
711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      }
721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    });
731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci