Permalink
| <!-- | |
| 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; | |
| } | |
| paper-radio-button[checked]::shadow #offRadio { | |
| border-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"> | |
| <link rel="import" href="../core-a11y-keys/core-a11y-keys.html"> | |
| <polymer-element name="paper-radio-button" role="radio" tabindex="0" aria-checked="false"> | |
| <template> | |
| <link rel="stylesheet" href="paper-radio-button.css"> | |
| <core-a11y-keys target="{{}}" keys="space" on-keys-pressed="{{tap}}"></core-a11y-keys> | |
| <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 due to user interaction. | |
| * | |
| * @event change | |
| */ | |
| /** | |
| * Fired when the checked state changes. | |
| * | |
| * @event core-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() { | |
| if (this.disabled) { | |
| return; | |
| } | |
| var old = this.checked; | |
| this.toggle(); | |
| if (this.checked !== old) { | |
| this.fire('change'); | |
| } | |
| }, | |
| toggle: function() { | |
| this.checked = !this.toggles || !this.checked; | |
| }, | |
| checkedChanged: function() { | |
| this.setAttribute('aria-checked', this.checked ? 'true' : 'false'); | |
| this.fire('core-change'); | |
| }, | |
| labelChanged: function() { | |
| this.setAttribute('aria-label', this.label); | |
| } | |
| }); | |
| </script> | |
| </polymer-element> |