UNPKG

todomvc

Version:

> Helping you select an MV\* framework

150 lines (138 loc) 4.96 kB
<!-- Copyright (c) 2014 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 --> <!-- @group Polymer Core Elements The `<core-selection>` element is used to manage selection state. It has no visual appearance and is typically used in conjunction with another element. For example, [core-selector](#core-selector) use a `<core-selection>` to manage selection. To mark an item as selected, call the `select(item)` method on `<core-selection>`. The item itself is an argument to this method. The `<core-selection>`element manages selection state for any given set of items. When an item is selected, the `core-select` event is fired. The attribute `multi` indicates if multiple items can be selected at once. Example: <polymer-element name="selection-example"> <template> <style> polyfill-next-selector { content: ':host > .selected'; } ::content > .selected { font-weight: bold; font-style: italic; } </style> <ul on-tap="{{itemTapAction}}"> <content></content> </ul> <core-selection id="selection" multi on-core-select="{{selectAction}}"></core-selection> </template> <script> Polymer('selection-example', { itemTapAction: function(e, detail, sender) { this.$.selection.select(e.target); }, selectAction: function(e, detail, sender) { detail.item.classList.toggle('selected', detail.isSelected); } }); </script> </polymer-element> <selection-example> <li>Red</li> <li>Green</li> <li>Blue</li> </selection-example> @element core-selection --> <!-- Fired when an item's selection state is changed. This event is fired both when an item is selected or deselected. The `isSelected` detail property contains the selection state. @event core-select @param {Object} detail @param {boolean} detail.isSelected true for selection and false for de-selection @param {Object} detail.item the item element --> <link rel="import" href="../polymer/polymer.html"> <polymer-element name="core-selection" attributes="multi" hidden> <script> Polymer('core-selection', { /** * If true, multiple selections are allowed. * * @attribute multi * @type boolean * @default false */ multi: false, ready: function() { this.clear(); }, clear: function() { this.selection = []; }, /** * Retrieves the selected item(s). * @method getSelection * @returns Returns the selected item(s). If the multi property is true, * getSelection will return an array, otherwise it will return * the selected item or undefined if there is no selection. */ getSelection: function() { return this.multi ? this.selection : this.selection[0]; }, /** * Indicates if a given item is selected. * @method isSelected * @param {any} 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; }, setItemSelected: function(item, isSelected) { if (item !== undefined && item !== null) { if (isSelected) { this.selection.push(item); } else { var i = this.selection.indexOf(item); if (i >= 0) { this.selection.splice(i, 1); } } this.fire("core-select", {isSelected: isSelected, item: item}); } }, /** * Set 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 {any} item: The item to select. */ select: function(item) { if (this.multi) { this.toggle(item); } else if (this.getSelection() !== item) { this.setItemSelected(this.getSelection(), false); this.setItemSelected(item, true); } }, /** * Toggles the selection state for `item`. * @method toggle * @param {any} item: The item to toggle. */ toggle: function(item) { this.setItemSelected(item, !this.isSelected(item)); } }); </script> </polymer-element>