Index: third_party/polymer/components/core-selection/core-selection.html |
diff --git a/third_party/polymer/components/core-selection/core-selection.html b/third_party/polymer/components/core-selection/core-selection.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..414b7827ec023bf1f9b5f74148c432336898f523 |
--- /dev/null |
+++ b/third_party/polymer/components/core-selection/core-selection.html |
@@ -0,0 +1,149 @@ |
+<!-- |
+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> |