| OLD | NEW |
| (Empty) |
| 1 <!-- | |
| 2 Copyright (c) 2014 The Polymer Project Authors. All rights reserved. | |
| 3 This code may only be used under the BSD style license found at http://polymer.g
ithub.io/LICENSE.txt | |
| 4 The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt | |
| 5 The complete set of contributors may be found at http://polymer.github.io/CONTRI
BUTORS.txt | |
| 6 Code distributed by Google as part of the polymer project is also | |
| 7 subject to an additional IP rights grant found at http://polymer.github.io/PATEN
TS.txt | |
| 8 --> | |
| 9 <!-- | |
| 10 @group Polymer Core Elements | |
| 11 | |
| 12 The `<core-selection>` element is used to manage selection state. It has no | |
| 13 visual appearance and is typically used in conjunction with another element. | |
| 14 For example, [core-selector](#core-selector) | |
| 15 use a `<core-selection>` to manage selection. | |
| 16 | |
| 17 To mark an item as selected, call the `select(item)` method on | |
| 18 `<core-selection>`. The item itself is an argument to this method. | |
| 19 | |
| 20 The `<core-selection>`element manages selection state for any given set of | |
| 21 items. When an item is selected, the `core-select` event is fired. | |
| 22 | |
| 23 The attribute `multi` indicates if multiple items can be selected at once. | |
| 24 | |
| 25 Example: | |
| 26 | |
| 27 <polymer-element name="selection-example"> | |
| 28 <template> | |
| 29 <style> | |
| 30 polyfill-next-selector { content: ':host > .selected'; } | |
| 31 ::content > .selected { | |
| 32 font-weight: bold; | |
| 33 font-style: italic; | |
| 34 } | |
| 35 </style> | |
| 36 <ul on-tap="{{itemTapAction}}"> | |
| 37 <content></content> | |
| 38 </ul> | |
| 39 <core-selection id="selection" multi | |
| 40 on-core-select="{{selectAction}}"></core-selection> | |
| 41 </template> | |
| 42 <script> | |
| 43 Polymer('selection-example', { | |
| 44 itemTapAction: function(e, detail, sender) { | |
| 45 this.$.selection.select(e.target); | |
| 46 }, | |
| 47 selectAction: function(e, detail, sender) { | |
| 48 detail.item.classList.toggle('selected', detail.isSelected); | |
| 49 } | |
| 50 }); | |
| 51 </script> | |
| 52 </polymer-element> | |
| 53 | |
| 54 <selection-example> | |
| 55 <li>Red</li> | |
| 56 <li>Green</li> | |
| 57 <li>Blue</li> | |
| 58 </selection-example> | |
| 59 | |
| 60 @element core-selection | |
| 61 --> | |
| 62 | |
| 63 <!-- | |
| 64 Fired when an item's selection state is changed. This event is fired both | |
| 65 when an item is selected or deselected. The `isSelected` detail property | |
| 66 contains the selection state. | |
| 67 | |
| 68 @event core-select | |
| 69 @param {Object} detail | |
| 70 @param {boolean} detail.isSelected true for selection and false for de-selecti
on | |
| 71 @param {Object} detail.item the item element | |
| 72 --> | |
| 73 <link rel="import" href="../polymer/polymer.html"> | |
| 74 | |
| 75 <polymer-element name="core-selection" attributes="multi" hidden> | |
| 76 <script> | |
| 77 Polymer('core-selection', { | |
| 78 /** | |
| 79 * If true, multiple selections are allowed. | |
| 80 * | |
| 81 * @attribute multi | |
| 82 * @type boolean | |
| 83 * @default false | |
| 84 */ | |
| 85 multi: false, | |
| 86 ready: function() { | |
| 87 this.clear(); | |
| 88 }, | |
| 89 clear: function() { | |
| 90 this.selection = []; | |
| 91 }, | |
| 92 /** | |
| 93 * Retrieves the selected item(s). | |
| 94 * @method getSelection | |
| 95 * @returns Returns the selected item(s). If the multi property is true, | |
| 96 * getSelection will return an array, otherwise it will return | |
| 97 * the selected item or undefined if there is no selection. | |
| 98 */ | |
| 99 getSelection: function() { | |
| 100 return this.multi ? this.selection : this.selection[0]; | |
| 101 }, | |
| 102 /** | |
| 103 * Indicates if a given item is selected. | |
| 104 * @method isSelected | |
| 105 * @param {any} item The item whose selection state should be checked. | |
| 106 * @returns Returns true if `item` is selected. | |
| 107 */ | |
| 108 isSelected: function(item) { | |
| 109 return this.selection.indexOf(item) >= 0; | |
| 110 }, | |
| 111 setItemSelected: function(item, isSelected) { | |
| 112 if (item !== undefined && item !== null) { | |
| 113 if (isSelected) { | |
| 114 this.selection.push(item); | |
| 115 } else { | |
| 116 var i = this.selection.indexOf(item); | |
| 117 if (i >= 0) { | |
| 118 this.selection.splice(i, 1); | |
| 119 } | |
| 120 } | |
| 121 this.fire("core-select", {isSelected: isSelected, item: item}); | |
| 122 } | |
| 123 }, | |
| 124 /** | |
| 125 * Set the selection state for a given `item`. If the multi property | |
| 126 * is true, then the selected state of `item` will be toggled; otherwise | |
| 127 * the `item` will be selected. | |
| 128 * @method select | |
| 129 * @param {any} item: The item to select. | |
| 130 */ | |
| 131 select: function(item) { | |
| 132 if (this.multi) { | |
| 133 this.toggle(item); | |
| 134 } else if (this.getSelection() !== item) { | |
| 135 this.setItemSelected(this.getSelection(), false); | |
| 136 this.setItemSelected(item, true); | |
| 137 } | |
| 138 }, | |
| 139 /** | |
| 140 * Toggles the selection state for `item`. | |
| 141 * @method toggle | |
| 142 * @param {any} item: The item to toggle. | |
| 143 */ | |
| 144 toggle: function(item) { | |
| 145 this.setItemSelected(item, !this.isSelected(item)); | |
| 146 } | |
| 147 }); | |
| 148 </script> | |
| 149 </polymer-element> | |
| OLD | NEW |