11import {
2+ AfterContentInit ,
3+ ChangeDetectionStrategy ,
24 Component ,
35 ElementRef ,
4- Renderer ,
6+ EventEmitter ,
57 forwardRef ,
6- ChangeDetectionStrategy ,
78 Input ,
9+ OnDestroy ,
810 Output ,
9- EventEmitter ,
10- AfterContentInit ,
11+ Renderer ,
1112 ViewChild ,
12- ViewEncapsulation ,
13- OnDestroy ,
13+ ViewEncapsulation
1414} from '@angular/core' ;
1515import {
1616 applyCssTransform ,
1717 coerceBooleanProperty ,
18- HammerInput ,
19- FocusOriginMonitor ,
2018 FocusOrigin ,
19+ FocusOriginMonitor ,
20+ HammerInput ,
2121 MdRipple ,
2222 RippleRef
2323} from '../core' ;
2424import { ControlValueAccessor , NG_VALUE_ACCESSOR } from '@angular/forms' ;
25- import { Observable } from 'rxjs/Observable' ;
25+ import { mixinDisabled , CanDisable } from '../core/common-behaviors/disabled' ;
26+
2627
2728export const MD_SLIDE_TOGGLE_VALUE_ACCESSOR : any = {
2829 provide : NG_VALUE_ACCESSOR ,
@@ -39,9 +40,13 @@ export class MdSlideToggleChange {
3940// Increasing integer for generating unique ids for slide-toggle components.
4041let nextId = 0 ;
4142
42- /**
43- * Two-state control, which can be also called `switch`.
44- */
43+
44+
45+ // Boilerplate for applying mixins to MdSlideToggle.
46+ export class MdSlideToggleBase { }
47+ export const _MdSlideToggleMixinBase = mixinDisabled ( MdSlideToggleBase ) ;
48+
49+ /** Represents a slidable "switch" toggle that can be moved between on and off. */
4550@Component ( {
4651 moduleId : module . id ,
4752 selector : 'md-slide-toggle, mat-slide-toggle' ,
@@ -54,11 +59,12 @@ let nextId = 0;
5459 templateUrl : 'slide-toggle.html' ,
5560 styleUrls : [ 'slide-toggle.css' ] ,
5661 providers : [ MD_SLIDE_TOGGLE_VALUE_ACCESSOR ] ,
62+ inputs : [ 'disabled' ] ,
5763 encapsulation : ViewEncapsulation . None ,
5864 changeDetection : ChangeDetectionStrategy . OnPush
5965} )
60- export class MdSlideToggle implements OnDestroy , AfterContentInit , ControlValueAccessor {
61-
66+ export class MdSlideToggle extends _MdSlideToggleMixinBase
67+ implements OnDestroy , AfterContentInit , ControlValueAccessor , CanDisable {
6268 private onChange = ( _ : any ) => { } ;
6369 private onTouched = ( ) => { } ;
6470
@@ -67,7 +73,6 @@ export class MdSlideToggle implements OnDestroy, AfterContentInit, ControlValueA
6773 private _checked : boolean = false ;
6874 private _color : string ;
6975 private _slideRenderer : SlideToggleRenderer = null ;
70- private _disabled : boolean = false ;
7176 private _required : boolean = false ;
7277 private _disableRipple : boolean = false ;
7378
@@ -92,11 +97,6 @@ export class MdSlideToggle implements OnDestroy, AfterContentInit, ControlValueA
9297 /** Used to set the aria-labelledby attribute on the underlying input element. */
9398 @Input ( 'aria-labelledby' ) ariaLabelledby : string = null ;
9499
95- /** Whether the slide-toggle is disabled. */
96- @Input ( )
97- get disabled ( ) : boolean { return this . _disabled ; }
98- set disabled ( value ) { this . _disabled = coerceBooleanProperty ( value ) ; }
99-
100100 /** Whether the slide-toggle is required. */
101101 @Input ( )
102102 get required ( ) : boolean { return this . _required ; }
@@ -121,7 +121,9 @@ export class MdSlideToggle implements OnDestroy, AfterContentInit, ControlValueA
121121
122122 constructor ( private _elementRef : ElementRef ,
123123 private _renderer : Renderer ,
124- private _focusOriginMonitor : FocusOriginMonitor ) { }
124+ private _focusOriginMonitor : FocusOriginMonitor ) {
125+ super ( ) ;
126+ }
125127
126128 ngAfterContentInit ( ) {
127129 this . _slideRenderer = new SlideToggleRenderer ( this . _elementRef ) ;
0 commit comments