<!-- 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 --> <!-- `paper-radio-button` is a button that can be either checked or unchecked. User can tap the radio button to check it. But it cannot be unchecked by tapping once checked. Use `paper-radio-group` to group a set of radio buttons. When radio buttons are inside a radio group, only one radio button in the group can be checked. Example: <paper-radio-button></paper-radio-button> Styling radio button: To change the ink color for checked state: paper-radio-button::shadow #ink[checked] { color: #4285f4; } To change the radio checked color: paper-radio-button::shadow #onRadio { background-color: #4285f4; } To change the ink color for unchecked state: paper-radio-button::shadow #ink { color: #b5b5b5; } To change the radio unchecked color: paper-radio-button::shadow #offRadio { border-color: #b5b5b5; } @group Paper Elements @element paper-radio-button @homepage github.io --> <link rel="import" href="../paper-ripple/paper-ripple.html"> <polymer-element name="paper-radio-button" role="radio" tabindex="0" aria-checked="false"> <template> <link rel="stylesheet" href="paper-radio-button.css"> <div id="radioContainer" class="{{ {labeled: label} | tokenList }}"> <div id="offRadio"></div> <div id="onRadio"></div> <paper-ripple id="ink" class="circle recenteringTouch" checked?="{{!checked}}"></paper-ripple> </div> <div id="radioLabel" aria-hidden="true" hidden?="{{!label}}">{{label}}<content></content></div> </template> <script> Polymer('paper-radio-button', { /** * Fired when the checked state changes. * * @event change */ publish: { /** * Gets or sets the state, `true` is checked and `false` is unchecked. * * @attribute checked * @type boolean * @default false */ checked: {value: false, reflect: true}, /** * The label for the radio button. * * @attribute label * @type string * @default '' */ label: '', /** * Normally the user cannot uncheck the radio button by tapping once * checked. Setting this property to `true` makes the radio button * toggleable from checked to unchecked. * * @attribute toggles * @type boolean * @default false */ toggles: false, /** * If true, the user cannot interact with this element. * * @attribute disabled * @type boolean * @default false */ disabled: {value: false, reflect: true} }, eventDelegates: { tap: 'tap' }, tap: function() { this.toggle(); this.fire('paper-radio-button-activate'); }, toggle: function() { this.checked = !this.toggles || !this.checked; }, checkedChanged: function() { this.$.onRadio.classList.toggle('fill', this.checked); this.setAttribute('aria-checked', this.checked ? 'true': 'false'); this.fire('change'); }, labelChanged: function() { this.setAttribute('aria-label', this.label); } }); </script> </polymer-element>