Index: samples/third_party/todomvc/web/lib-elements/polymer-selection.html |
diff --git a/samples/third_party/todomvc/web/lib-elements/polymer-selection.html b/samples/third_party/todomvc/web/lib-elements/polymer-selection.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..609ced39ded902980f4e5807a8fae2a154996f5d |
--- /dev/null |
+++ b/samples/third_party/todomvc/web/lib-elements/polymer-selection.html |
@@ -0,0 +1,151 @@ |
+<!-- |
+Copyright 2013 The Polymer Authors. All rights reserved. |
+Use of this source code is governed by a BSD-style |
+license that can be found in the LICENSE file. |
+--> |
+<!-- |
+/** |
+ * @module Polymer Elements |
+ */ |
+--> |
+<!-- |
+/** |
+ * The polymer-selection element is used to manage selection state. It has no |
+ * visual appearance and is typically used in conjuneciton with another element. |
+ * For example, <a href="polymer-selector.html">polymer-selector</a> |
+ * use a polymer-selection to manage selection. |
+ * |
+ * To mark an item as selected, call the select(item) method on |
+ * polymer-selection. Notice that the item itself is an argument to this method. |
+ * The polymer-selection element manages selection state for any given set of |
+ * items. When an item is selected, the `polymer-select` event is fired. |
+ * The attribute "multi" indicates if multiple items can be selected at once. |
+ * |
+ * Example: |
+ * |
+ * <polymer-element name="selection-example"> |
+ * <template> |
+ * <style> |
+ * ::-webkit-distributed(> .selected) { |
+ * font-weight: bold; |
+ * font-style: italic; |
+ * } |
+ * </style> |
+ * <ul on-tap="{{itemTapAction}}"> |
+ * <content></content> |
+ * </ul> |
+ * <polymer-selection id="selection" multi on-polymer-select="{{selectAction}}"></polymer-selection> |
+ * </template> |
+ * <script> |
+ * Polymer('selection-example', { |
+ * itemTapAction: function(e) { |
+ * this.$.selection.select(e.target); |
+ * }, |
+ * selectAction: function(e, detail) { |
+ * detail.item.classList.toggle('selected', detail.isSelected); |
+ * } |
+ * }); |
+ * </script> |
+ * </polymer-element> |
+ * |
+ * <selection-example> |
+ * <li>Red</li> |
+ * <li>Green</li> |
+ * <li>Blue</li> |
+ * </selection-example> |
+ * |
+ * @class polymer-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 polymer-select |
+ * @param {Object} detail |
+ * @param {boolean} detail.isSelected true for selection and false for deselection |
+ * @param {Object} detail.item the item element |
+ */ |
+--> |
+<polymer-element name="polymer-selection" attributes="multi"> |
+ <template> |
+ <style> |
+ :host { |
+ display: none !important; |
+ } |
+ </style> |
+ </template> |
+ <script> |
+ Polymer('polymer-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("polymer-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> |