1 <!-- 2 Copyright (c) 2014 The Polymer Project Authors. All rights reserved. 3 This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt 4 The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt 5 The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt 6 Code distributed by Google as part of the polymer project is also 7 subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt 8 --> 9 10 <!-- 11 `paper-radio-button` is a button that can be either checked or unchecked. 12 User can tap the radio button to check it. But it cannot be unchecked by 13 tapping once checked. 14 15 Use `paper-radio-group` to group a set of radio buttons. When radio buttons 16 are inside a radio group, only one radio button in the group can be checked. 17 18 Example: 19 20 <paper-radio-button></paper-radio-button> 21 22 Styling radio button: 23 24 To change the ink color for checked state: 25 26 paper-radio-button::shadow #ink[checked] { 27 color: #4285f4; 28 } 29 30 To change the radio checked color: 31 32 paper-radio-button::shadow #onRadio { 33 background-color: #4285f4; 34 } 35 36 To change the ink color for unchecked state: 37 38 paper-radio-button::shadow #ink { 39 color: #b5b5b5; 40 } 41 42 To change the radio unchecked color: 43 44 paper-radio-button::shadow #offRadio { 45 border-color: #b5b5b5; 46 } 47 48 @group Paper Elements 49 @element paper-radio-button 50 @homepage github.io 51 --> 52 53 <link rel="import" href="../paper-ripple/paper-ripple.html"> 54 55 <polymer-element name="paper-radio-button" role="radio" tabindex="0" aria-checked="false"> 56 <template> 57 58 <link rel="stylesheet" href="paper-radio-button.css"> 59 60 <div id="radioContainer" class="{{ {labeled: label} | tokenList }}"> 61 62 <div id="offRadio"></div> 63 <div id="onRadio"></div> 64 65 <paper-ripple id="ink" class="circle recenteringTouch" checked?="{{!checked}}"></paper-ripple> 66 67 </div> 68 69 <div id="radioLabel" aria-hidden="true" hidden?="{{!label}}">{{label}}<content></content></div> 70 71 </template> 72 <script> 73 74 Polymer('paper-radio-button', { 75 76 /** 77 * Fired when the checked state changes. 78 * 79 * @event change 80 */ 81 82 publish: { 83 /** 84 * Gets or sets the state, `true` is checked and `false` is unchecked. 85 * 86 * @attribute checked 87 * @type boolean 88 * @default false 89 */ 90 checked: {value: false, reflect: true}, 91 92 /** 93 * The label for the radio button. 94 * 95 * @attribute label 96 * @type string 97 * @default '' 98 */ 99 label: '', 100 101 /** 102 * Normally the user cannot uncheck the radio button by tapping once 103 * checked. Setting this property to `true` makes the radio button 104 * toggleable from checked to unchecked. 105 * 106 * @attribute toggles 107 * @type boolean 108 * @default false 109 */ 110 toggles: false, 111 112 /** 113 * If true, the user cannot interact with this element. 114 * 115 * @attribute disabled 116 * @type boolean 117 * @default false 118 */ 119 disabled: {value: false, reflect: true} 120 }, 121 122 eventDelegates: { 123 tap: 'tap' 124 }, 125 126 tap: function() { 127 this.toggle(); 128 this.fire('paper-radio-button-activate'); 129 }, 130 131 toggle: function() { 132 this.checked = !this.toggles || !this.checked; 133 }, 134 135 checkedChanged: function() { 136 this.$.onRadio.classList.toggle('fill', this.checked); 137 this.setAttribute('aria-checked', this.checked ? 'true': 'false'); 138 this.fire('change'); 139 }, 140 141 labelChanged: function() { 142 this.setAttribute('aria-label', this.label); 143 } 144 145 }); 146 147 </script> 148 </polymer-element> 149