OLD | NEW |
1 <!-- | 1 <!-- |
2 Copyright 2013 The Polymer Authors. All rights reserved. | 2 Copyright 2013 The Polymer Authors. All rights reserved. |
3 Use of this source code is governed by a BSD-style | 3 Use of this source code is governed by a BSD-style |
4 license that can be found in the LICENSE file. | 4 license that can be found in the LICENSE file. |
5 --> | 5 --> |
6 <!-- | 6 <!-- |
7 /** | 7 /** |
8 * @module Polymer Elements | 8 * @module Polymer Elements |
9 */ | 9 */ |
10 /** | 10 /** |
(...skipping 20 matching lines...) Expand all Loading... |
31 * } | 31 * } |
32 * </style> | 32 * </style> |
33 * ... | 33 * ... |
34 * <polymer-selector> | 34 * <polymer-selector> |
35 * <div class="item">Item 1</div> | 35 * <div class="item">Item 1</div> |
36 * <div class="item">Item 2</div> | 36 * <div class="item">Item 2</div> |
37 * <div class="item">Item 3</div> | 37 * <div class="item">Item 3</div> |
38 * </polymer-selector> | 38 * </polymer-selector> |
39 * | 39 * |
40 * @class polymer-selector | 40 * @class polymer-selector |
| 41 * @status stable |
41 */ | 42 */ |
42 /** | 43 /** |
43 * Fired when an item's selection state is changed. This event is fired both | 44 * Fired when an item's selection state is changed. This event is fired both |
44 * when an item is selected or deselected. The `isSelected` detail property | 45 * when an item is selected or deselected. The `isSelected` detail property |
45 * contains the selection state. | 46 * contains the selection state. |
46 * | 47 * |
47 * @event polymer-select | 48 * @event polymer-select |
48 * @param {Object} detail | 49 * @param {Object} detail |
49 * @param {boolean} detail.isSelected true for selection and false for deselec
tion | 50 * @param {boolean} detail.isSelected true for selection and false for deselec
tion |
50 * @param {Object} detail.item the item element | 51 * @param {Object} detail.item the item element |
51 */ | 52 */ |
52 /** | 53 /** |
53 * Fired when an item element is tapped. | 54 * Fired when an item element is tapped. |
54 * | 55 * |
55 * @event polymer-activate | 56 * @event polymer-activate |
56 * @param {Object} detail | 57 * @param {Object} detail |
57 * @param {Object} detail.item the item element | 58 * @param {Object} detail.item the item element |
58 */ | 59 */ |
59 --> | 60 --> |
60 <link rel="import" href="../polymer/polymer.html"> | 61 <link rel="import" href="../polymer/polymer.html"> |
61 <link rel="import" href="../polymer-selection/polymer-selection.html"> | 62 <link rel="import" href="../polymer-selection/polymer-selection.html"> |
62 | 63 |
63 <polymer-element name="polymer-selector" | 64 <polymer-element name="polymer-selector" |
64 attributes="selected multi valueattr selectedClass selectedProperty selected
Item selectedModel selectedIndex notap target itemsSelector activateEvent"> | 65 attributes="selected multi valueattr selectedClass selectedProperty selected
Attribute selectedItem selectedModel selectedIndex notap target itemsSelector ac
tivateEvent"> |
65 <template> | 66 <template> |
66 <polymer-selection id="selection" multi="{{multi}}" on-polymer-select="{{sel
ectionSelect}}"></polymer-selection> | 67 <polymer-selection id="selection" multi="{{multi}}" on-polymer-select="{{sel
ectionSelect}}"></polymer-selection> |
67 <content id="items" select="*"></content> | 68 <content id="items" select="*"></content> |
68 </template> | 69 </template> |
69 <script> | 70 <script> |
70 Polymer('polymer-selector', { | 71 Polymer('polymer-selector', { |
71 /** | 72 /** |
72 * Gets or sets the selected element. Default to use the index | 73 * Gets or sets the selected element. Default to use the index |
73 * of the item element. | 74 * of the item element. |
74 * | 75 * |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
123 * @type string | 124 * @type string |
124 * @default 'polymer-selected' | 125 * @default 'polymer-selected' |
125 */ | 126 */ |
126 selectedClass: 'polymer-selected', | 127 selectedClass: 'polymer-selected', |
127 /** | 128 /** |
128 * Specifies the property to be used to set on the selected element | 129 * Specifies the property to be used to set on the selected element |
129 * to indicate its active state. | 130 * to indicate its active state. |
130 * | 131 * |
131 * @attribute selectedProperty | 132 * @attribute selectedProperty |
132 * @type string | 133 * @type string |
| 134 * @default '' |
| 135 */ |
| 136 selectedProperty: '', |
| 137 /** |
| 138 * Specifies the property to be used to set on the selected element |
| 139 * to indicate its active state. |
| 140 * |
| 141 * @attribute selectedProperty |
| 142 * @type string |
133 * @default 'active' | 143 * @default 'active' |
134 */ | 144 */ |
135 selectedProperty: 'active', | 145 selectedAttribute: 'active', |
136 /** | 146 /** |
137 * Returns the currently selected element. In multi-selection this returns | 147 * Returns the currently selected element. In multi-selection this returns |
138 * an array of selected elements. | 148 * an array of selected elements. |
139 * | 149 * |
140 * @attribute selectedItem | 150 * @attribute selectedItem |
141 * @type Object | 151 * @type Object |
142 * @default null | 152 * @default null |
143 */ | 153 */ |
144 selectedItem: null, | 154 selectedItem: null, |
145 /** | 155 /** |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
301 this.applySelection(detail.item, detail.isSelected); | 311 this.applySelection(detail.item, detail.isSelected); |
302 } | 312 } |
303 }, | 313 }, |
304 applySelection: function(item, isSelected) { | 314 applySelection: function(item, isSelected) { |
305 if (this.selectedClass) { | 315 if (this.selectedClass) { |
306 item.classList.toggle(this.selectedClass, isSelected); | 316 item.classList.toggle(this.selectedClass, isSelected); |
307 } | 317 } |
308 if (this.selectedProperty) { | 318 if (this.selectedProperty) { |
309 item[this.selectedProperty] = isSelected; | 319 item[this.selectedProperty] = isSelected; |
310 } | 320 } |
| 321 if (this.selectedAttribute && item.setAttribute) { |
| 322 if (isSelected) { |
| 323 item.setAttribute(this.selectedAttribute, ''); |
| 324 } else { |
| 325 item.removeAttribute(this.selectedAttribute); |
| 326 } |
| 327 } |
311 }, | 328 }, |
312 // event fired from host | 329 // event fired from host |
313 activateHandler: function(e) { | 330 activateHandler: function(e) { |
314 if (!this.notap) { | 331 if (!this.notap) { |
315 var i = this.findDistributedTarget(e.target, this.items); | 332 var i = this.findDistributedTarget(e.target, this.items); |
316 if (i >= 0) { | 333 if (i >= 0) { |
317 var item = this.items[i]; | 334 var item = this.items[i]; |
318 var s = this.valueForNode(item) || i; | 335 var s = this.valueForNode(item) || i; |
319 if (this.multi) { | 336 if (this.multi) { |
320 if (this.selected) { | 337 if (this.selected) { |
(...skipping 24 matching lines...) Expand all Loading... |
345 var i = Array.prototype.indexOf.call(nodes, target); | 362 var i = Array.prototype.indexOf.call(nodes, target); |
346 if (i >= 0) { | 363 if (i >= 0) { |
347 return i; | 364 return i; |
348 } | 365 } |
349 target = target.parentNode; | 366 target = target.parentNode; |
350 } | 367 } |
351 } | 368 } |
352 }); | 369 }); |
353 </script> | 370 </script> |
354 </polymer-element> | 371 </polymer-element> |
OLD | NEW |