<!--
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>