| <link rel="import" href="chrome://resources/cr_elements/policy/cr_policy_pref_indicator.html"> |
| <link rel="import" href="chrome://resources/html/polymer.html"> |
| <link rel="import" href="chrome://resources/polymer/v1_0/iron-a11y-keys-behavior/iron-a11y-keys-behavior.html"> |
| <link rel="import" href="pref_control_behavior.html"> |
| <link rel="import" href="../prefs/pref_util.html"> |
| <link rel="import" href="../settings_shared_css.html"> |
| |
| <dom-module id="controlled-radio-button"> |
| <template> |
| <style include="settings-shared"> |
| :host { |
| --ink-to-circle: calc((var(--paper-radio-button-ink-size) - |
| var(--paper-radio-button-size)) / 2); |
| @apply(--settings-actionable); |
| align-items: center; |
| display: flex; |
| outline: none; |
| } |
| |
| #labelWrapper { |
| -webkit-margin-start: var(--paper-radio-button-label-spacing, 10px); |
| flex: 1; |
| } |
| |
| #label { |
| color: var(--paper-radio-button-label-color, --primary-text-color); |
| } |
| |
| .circle, |
| .disc, |
| .disc-wrapper, |
| paper-ripple { |
| border-radius: 50%; |
| } |
| |
| .disc-wrapper { |
| height: var(--paper-radio-button-ink-size); |
| margin: 0 calc(-1 * var(--ink-to-circle)); |
| position: relative; |
| width: var(--paper-radio-button-ink-size); |
| } |
| |
| .circle, |
| .disc { |
| box-sizing: border-box; |
| height: var(--paper-radio-button-size); |
| left: var(--ink-to-circle); |
| position: absolute; |
| top: var(--ink-to-circle); |
| width: var(--paper-radio-button-size); |
| } |
| |
| .circle { |
| border: 2px solid var(--paper-radio-button-unchecked-color, |
| --primary-text-color); |
| } |
| |
| :host([checked]) .circle { |
| border-color: var(--paper-radio-button-checked-color, --primary-color); |
| } |
| |
| .disc { |
| background-color: var(--paper-radio-button-unchecked-background-color, |
| transparent); |
| transform: scale(0); |
| transition: border-color 200ms, transform 200ms; |
| } |
| |
| :host([checked]) .disc { |
| background-color: var(--paper-radio-button-checked-color, |
| --primary-color); |
| transform: scale(0.5); |
| } |
| |
| paper-ripple { |
| color: var(--paper-radio-button-unchecked-ink-color, |
| --primary-text-color); |
| opacity: .6; |
| } |
| |
| :host([checked]) paper-ripple { |
| color: var(--paper-radio-button-checked-ink-color, |
| --primary-text-color); |
| } |
| |
| :host(:not([controlled_])) { |
| @apply(--settings-actionable); |
| } |
| |
| :host([controlled_]) { |
| /* Disable pointer events for this whole element, as outer on-tap gets |
| * triggered when clicking/tapping anywhere in :host. */ |
| pointer-events: none; |
| } |
| |
| :host([controlled_]) :-webkit-any(.circle, .disc) { |
| opacity: .5; |
| } |
| |
| :host([controlled_]) .circle { |
| border-color: var(--paper-radio-button-unchecked-color, |
| --primary-text-color); |
| } |
| |
| :host([controlled_][checked]) .disc { |
| background-color: var(--paper-radio-button-unchecked-color, |
| --primary-text-color); |
| } |
| |
| :host([controlled_]) #labelWrapper { |
| opacity: .65; |
| } |
| |
| cr-policy-pref-indicator { |
| -webkit-margin-start: var(--settings-control-spacing); |
| /* Enable pointer events for the indicator so :hover works. Disable |
| * clicks/taps via onIndicatorTap_ so outer on-tap doesn't trigger. */ |
| pointer-events: all; |
| } |
| </style> |
| |
| <div class="disc-wrapper"> |
| <div class="circle"></div> |
| <div class="disc"></div> |
| <paper-ripple center hold-down="[[pressed_]]"></paper-ripple> |
| </div> |
| |
| <div id="labelWrapper"> |
| <span id="label" hidden$="[[!label]]">[[label]]</span> |
| <content></content> |
| </div> |
| |
| <template is="dom-if" if="[[showIndicator_(controlled_, name, pref.*)]]"> |
| <cr-policy-pref-indicator pref="[[pref]]" on-tap="onIndicatorTap_" |
| icon-aria-label="[[label]]"> |
| </cr-policy-pref-indicator> |
| </template> |
| |
| </template> |
| <script src="controlled_radio_button.js"></script> |
| </dom-module> |