| |
| <!-- |
| @license |
| Copyright (c) 2015 The Polymer Project Authors. All rights reserved. |
| This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt |
| The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt |
| The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt |
| Code distributed by Google as part of the polymer project is also |
| subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt |
| --> |
| |
| <link rel="import" href="../polymer/polymer.html"> |
| |
| <script> |
| |
| /** |
| * @param {!Function} selectCallback |
| * @constructor |
| */ |
| Polymer.IronSelection = function(selectCallback) { |
| this.selection = []; |
| this.selectCallback = selectCallback; |
| }; |
| |
| Polymer.IronSelection.prototype = { |
| |
| /** |
| * Retrieves the selected item(s). |
| * |
| * @method get |
| * @returns Returns the selected item(s). If the multi property is true, |
| * `get` will return an array, otherwise it will return |
| * the selected item or undefined if there is no selection. |
| */ |
| get: function() { |
| return this.multi ? this.selection.slice() : this.selection[0]; |
| }, |
| |
| /** |
| * Clears all the selection except the ones indicated. |
| * |
| * @method clear |
| * @param {Array} excludes items to be excluded. |
| */ |
| clear: function(excludes) { |
| this.selection.slice().forEach(function(item) { |
| if (!excludes || excludes.indexOf(item) < 0) { |
| this.setItemSelected(item, false); |
| } |
| }, this); |
| }, |
| |
| /** |
| * Indicates if a given item is selected. |
| * |
| * @method isSelected |
| * @param {*} item The item whose selection state should be checked. |
| * @returns Returns true if `item` is selected. |
| */ |
| isSelected: function(item) { |
| return this.selection.indexOf(item) >= 0; |
| }, |
| |
| /** |
| * Sets the selection state for a given item to either selected or deselected. |
| * |
| * @method setItemSelected |
| * @param {*} item The item to select. |
| * @param {boolean} isSelected True for selected, false for deselected. |
| */ |
| setItemSelected: function(item, isSelected) { |
| if (item != null) { |
| if (isSelected !== this.isSelected(item)) { |
| // proceed to update selection only if requested state differs from current |
| if (isSelected) { |
| this.selection.push(item); |
| } else { |
| var i = this.selection.indexOf(item); |
| if (i >= 0) { |
| this.selection.splice(i, 1); |
| } |
| } |
| if (this.selectCallback) { |
| this.selectCallback(item, isSelected); |
| } |
| } |
| } |
| }, |
| |
| /** |
| * Sets the selection state for a given item. If the `multi` property |
| * is true, then the selected state of `item` will be toggled; otherwise |
| * the `item` will be selected. |
| * |
| * @method select |
| * @param {*} item The item to select. |
| */ |
| select: function(item) { |
| if (this.multi) { |
| this.toggle(item); |
| } else if (this.get() !== item) { |
| this.setItemSelected(this.get(), false); |
| this.setItemSelected(item, true); |
| } |
| }, |
| |
| /** |
| * Toggles the selection state for `item`. |
| * |
| * @method toggle |
| * @param {*} item The item to toggle. |
| */ |
| toggle: function(item) { |
| this.setItemSelected(item, !this.isSelected(item)); |
| } |
| |
| }; |
| |
| </script> |