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