Index: third_party/polymer/v0_8/components-chromium/paper-radio-group/paper-radio-group-extracted.js |
diff --git a/third_party/polymer/v0_8/components-chromium/paper-radio-group/paper-radio-group-extracted.js b/third_party/polymer/v0_8/components-chromium/paper-radio-group/paper-radio-group-extracted.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6de17dc0b7ebc43582e45461b1438a287255ab9b |
--- /dev/null |
+++ b/third_party/polymer/v0_8/components-chromium/paper-radio-group/paper-radio-group-extracted.js |
@@ -0,0 +1,127 @@ |
+ |
+ Polymer({ |
+ is: 'paper-radio-group', |
+ |
+ behaviors: [ |
+ Polymer.IronA11yKeysBehavior |
+ ], |
+ |
+ hostAttributes: { |
+ role: 'radiogroup', |
+ tabindex: 0 |
+ }, |
+ |
+ properties: { |
+ /** |
+ * Fired when the selected element changes to user interaction. |
+ * |
+ * @event paper-radio-group-changed |
+ */ |
+ |
+ /** |
+ * Gets or sets the selected element. Use the `name` attribute of the |
+ * <paper-radio-button> that should be selected. |
+ * |
+ * @attribute selected |
+ * @type String |
+ * @default null |
+ */ |
+ |
+ selected: { |
+ type: String, |
+ value: null, |
+ notify: true, |
+ reflectToAttribute: true, |
+ observer: "_selectedChanged" |
+ } |
+ }, |
+ |
+ keyBindings: { |
+ 'left up': '_selectPrevious', |
+ 'right down': '_selectNext', |
+ }, |
+ |
+ _selectedChanged: function() { |
+ // TODO: This only needs to be async while a domReady event is unavailable. |
+ this.async(function() { |
+ this._selectIndex(this._valueToIndex(this.items, this.selected)); |
+ this.fire('paper-radio-group-changed'); |
+ }); |
+ }, |
+ |
+ _selectNext: function() { |
+ this.selected = this._nextNode(); |
+ }, |
+ |
+ _selectPrevious: function() { |
+ this.selected = this._previousNode(); |
+ }, |
+ |
+ /** |
+ * Returns an array of all items. |
+ * |
+ * @property items |
+ * @type array |
+ */ |
+ get items() { |
+ return Polymer.dom(this.$.items).getDistributedNodes(); |
+ }, |
+ |
+ _nextNode: function() { |
+ var items = this.items; |
+ var index = this._selectedIndex; |
+ var newIndex = index; |
+ do { |
+ newIndex = (newIndex + 1) % items.length; |
+ if (newIndex === index) { |
+ break; |
+ } |
+ } while (items[newIndex].disabled); |
+ return this._valueForNode(items[newIndex]); |
+ }, |
+ |
+ _previousNode: function() { |
+ var items = this.items; |
+ var index = this._selectedIndex; |
+ var newIndex = index; |
+ do { |
+ newIndex = (newIndex || items.length) - 1; |
+ if (newIndex === index) { |
+ break; |
+ } |
+ } while (items[newIndex].disabled); |
+ return this._valueForNode(items[newIndex]); |
+ }, |
+ |
+ _selectIndex: function(index) { |
+ if (index == this._selectedIndex) |
+ return; |
+ |
+ var nodes = this.items; |
+ |
+ // If there was a previously selected node, deselect it. |
+ if (nodes[this._selectedIndex]) { |
+ nodes[this._selectedIndex].checked = false; |
+ } |
+ |
+ // Select a new node. |
+ nodes[index].checked = true; |
+ nodes[index].focus(); |
+ this._selectedIndex = index; |
+ }, |
+ |
+ _valueForNode: function(node) { |
+ return node["name"] || node.getAttribute("name"); |
+ }, |
+ |
+ // Finds an item with value == |value| and return its index. |
+ _valueToIndex: function(items, value) { |
+ for (var index = 0, node; (node = items[index]); index++) { |
+ if (this._valueForNode(node) == value) { |
+ return index; |
+ } |
+ } |
+ // If no item found, the value itself is probably the index. |
+ return value; |
+ } |
+ }); |