Skip to content

Commit 2524491

Browse files
committed
refactor: move away from deprecated apis
Moves away from the APIs that were deprecated in Angular 4. They include: * Switching from using `OpaqueToken` to `InjectionToken`. * Moving from `Renderer` to `Renderer2`. * Changing the `Injector.get(thing: any)` usages to use the new signature `Injector.get<T>(thing: T)`.
1 parent ab77fa9 commit 2524491

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+267
-228
lines changed

src/lib/button-toggle/button-toggle.spec.ts

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {
55
ComponentFixture,
66
TestBed,
77
} from '@angular/core/testing';
8-
import {NgControl, FormsModule, ReactiveFormsModule, FormControl} from '@angular/forms';
8+
import {NgModel, FormsModule, ReactiveFormsModule, FormControl} from '@angular/forms';
99
import {Component, DebugElement} from '@angular/core';
1010
import {By} from '@angular/platform-browser';
1111
import {
@@ -56,7 +56,7 @@ describe('MdButtonToggle', () => {
5656

5757
groupDebugElement = fixture.debugElement.query(By.directive(MdButtonToggleGroup));
5858
groupNativeElement = groupDebugElement.nativeElement;
59-
groupInstance = groupDebugElement.injector.get(MdButtonToggleGroup);
59+
groupInstance = groupDebugElement.injector.get<MdButtonToggleGroup>(MdButtonToggleGroup);
6060

6161
buttonToggleDebugElements = fixture.debugElement.queryAll(By.directive(MdButtonToggle));
6262

@@ -215,7 +215,7 @@ describe('MdButtonToggle', () => {
215215
let groupInstance: MdButtonToggleGroup;
216216
let buttonToggleInstances: MdButtonToggle[];
217217
let testComponent: ButtonToggleGroupWithNgModel;
218-
let groupNgControl: NgControl;
218+
let groupNgModel: NgModel;
219219

220220
beforeEach(async(() => {
221221
fixture = TestBed.createComponent(ButtonToggleGroupWithNgModel);
@@ -225,8 +225,8 @@ describe('MdButtonToggle', () => {
225225

226226
groupDebugElement = fixture.debugElement.query(By.directive(MdButtonToggleGroup));
227227
groupNativeElement = groupDebugElement.nativeElement;
228-
groupInstance = groupDebugElement.injector.get(MdButtonToggleGroup);
229-
groupNgControl = groupDebugElement.injector.get(NgControl);
228+
groupInstance = groupDebugElement.injector.get<MdButtonToggleGroup>(MdButtonToggleGroup);
229+
groupNgModel = groupDebugElement.injector.get<NgModel>(NgModel);
230230

231231
buttonToggleDebugElements = fixture.debugElement.queryAll(By.directive(MdButtonToggle));
232232
buttonToggleNativeElements =
@@ -259,27 +259,27 @@ describe('MdButtonToggle', () => {
259259
expect(groupInstance.selected.value).toBe(groupInstance.value);
260260
});
261261

262-
it('should have the correct ngControl state initially and after interaction', fakeAsync(() => {
263-
expect(groupNgControl.valid).toBe(true);
264-
expect(groupNgControl.pristine).toBe(true);
265-
expect(groupNgControl.touched).toBe(false);
262+
it('should have the correct FormControl state initially and after interaction', fakeAsync(() => {
263+
expect(groupNgModel.valid).toBe(true);
264+
expect(groupNgModel.pristine).toBe(true);
265+
expect(groupNgModel.touched).toBe(false);
266266

267267
buttonToggleInstances[1].checked = true;
268268
fixture.detectChanges();
269269
tick();
270270

271-
expect(groupNgControl.valid).toBe(true);
272-
expect(groupNgControl.pristine).toBe(false);
273-
expect(groupNgControl.touched).toBe(false);
271+
expect(groupNgModel.valid).toBe(true);
272+
expect(groupNgModel.pristine).toBe(false);
273+
expect(groupNgModel.touched).toBe(false);
274274

275275
let nativeRadioLabel = buttonToggleDebugElements[2].query(By.css('label')).nativeElement;
276276
nativeRadioLabel.click();
277277
fixture.detectChanges();
278278
tick();
279279

280-
expect(groupNgControl.valid).toBe(true);
281-
expect(groupNgControl.pristine).toBe(false);
282-
expect(groupNgControl.touched).toBe(true);
280+
expect(groupNgModel.valid).toBe(true);
281+
expect(groupNgModel.pristine).toBe(false);
282+
expect(groupNgModel.touched).toBe(true);
283283
}));
284284

285285
it('should update the ngModel value when selecting a button toggle', fakeAsync(() => {
@@ -301,7 +301,7 @@ describe('MdButtonToggle', () => {
301301
let groupInstance: MdButtonToggleGroup;
302302
let buttonToggleInstances: MdButtonToggle[];
303303
let testComponent: ButtonToggleGroupWithNgModel;
304-
let groupNgControl: NgControl;
304+
let groupNgModel: NgModel;
305305

306306
beforeEach(async(() => {
307307
fixture = TestBed.createComponent(ButtonToggleGroupWithNgModel);
@@ -310,8 +310,8 @@ describe('MdButtonToggle', () => {
310310

311311
groupDebugElement = fixture.debugElement.query(By.directive(MdButtonToggleGroup));
312312
groupNativeElement = groupDebugElement.nativeElement;
313-
groupInstance = groupDebugElement.injector.get(MdButtonToggleGroup);
314-
groupNgControl = groupDebugElement.injector.get(NgControl);
313+
groupInstance = groupDebugElement.injector.get<MdButtonToggleGroup>(MdButtonToggleGroup);
314+
groupNgModel = groupDebugElement.injector.get<NgModel>(NgModel);
315315

316316
buttonToggleDebugElements = fixture.debugElement.queryAll(By.directive(MdButtonToggle));
317317
buttonToggleNativeElements =
@@ -341,7 +341,7 @@ describe('MdButtonToggle', () => {
341341
let fixture = TestBed.createComponent(ButtonToggleGroupWithInitialValue);
342342
let testComponent = fixture.debugElement.componentInstance;
343343
let groupDebugElement = fixture.debugElement.query(By.directive(MdButtonToggleGroup));
344-
let groupInstance: MdButtonToggleGroup = groupDebugElement.injector.get(MdButtonToggleGroup);
344+
let groupInstance: MdButtonToggleGroup = groupDebugElement.injector.get<MdButtonToggleGroup>(MdButtonToggleGroup);
345345

346346
fixture.detectChanges();
347347

@@ -376,7 +376,8 @@ describe('MdButtonToggle', () => {
376376

377377
groupDebugElement = fixture.debugElement.query(By.directive(MdButtonToggleGroupMultiple));
378378
groupNativeElement = groupDebugElement.nativeElement;
379-
groupInstance = groupDebugElement.injector.get(MdButtonToggleGroupMultiple);
379+
groupInstance = groupDebugElement.injector.get<MdButtonToggleGroupMultiple>(
380+
MdButtonToggleGroupMultiple);
380381

381382
buttonToggleDebugElements = fixture.debugElement.queryAll(By.directive(MdButtonToggle));
382383
buttonToggleNativeElements = buttonToggleDebugElements
@@ -479,7 +480,7 @@ describe('MdButtonToggle', () => {
479480
testComponent = fixture.debugElement.componentInstance;
480481

481482
groupDebugElement = fixture.debugElement.query(By.directive(MdButtonToggleGroup));
482-
groupInstance = groupDebugElement.injector.get(MdButtonToggleGroup);
483+
groupInstance = groupDebugElement.injector.get<MdButtonToggleGroup>(MdButtonToggleGroup);
483484
}));
484485

485486
it('should toggle the disabled state', () => {

src/lib/button-toggle/button-toggle.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {
33
ContentChildren,
44
Directive,
55
ElementRef,
6-
Renderer,
6+
Renderer2,
77
EventEmitter,
88
HostBinding,
99
Input,
@@ -380,7 +380,7 @@ export class MdButtonToggle implements OnInit {
380380
constructor(@Optional() toggleGroup: MdButtonToggleGroup,
381381
@Optional() toggleGroupMultiple: MdButtonToggleGroupMultiple,
382382
private _buttonToggleDispatcher: UniqueSelectionDispatcher,
383-
private _renderer: Renderer,
383+
private _renderer: Renderer2,
384384
private _elementRef: ElementRef,
385385
private _focusOriginMonitor: FocusOriginMonitor) {
386386
this.buttonToggleGroup = toggleGroup;
@@ -418,7 +418,7 @@ export class MdButtonToggle implements OnInit {
418418

419419
/** Focuses the button. */
420420
focus() {
421-
this._renderer.invokeElementMethod(this._inputElement.nativeElement, 'focus');
421+
this._inputElement.nativeElement.focus();
422422
}
423423

424424
/** Toggle the state of the current button toggle. */

src/lib/button/button.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {
66
HostBinding,
77
Input,
88
OnDestroy,
9-
Renderer,
9+
Renderer2,
1010
ViewEncapsulation
1111
} from '@angular/core';
1212
import {coerceBooleanProperty, FocusOriginMonitor} from '../core';
@@ -119,7 +119,7 @@ export class MdButton implements OnDestroy {
119119
get disabled() { return this._disabled; }
120120
set disabled(value: boolean) { this._disabled = coerceBooleanProperty(value) ? true : null; }
121121

122-
constructor(private _elementRef: ElementRef, private _renderer: Renderer,
122+
constructor(private _elementRef: ElementRef, private _renderer: Renderer2,
123123
private _focusOriginMonitor: FocusOriginMonitor) {
124124
this._focusOriginMonitor.monitor(this._elementRef.nativeElement, this._renderer, true);
125125
}
@@ -141,13 +141,17 @@ export class MdButton implements OnDestroy {
141141

142142
_setElementColor(color: string, isAdd: boolean) {
143143
if (color != null && color != '') {
144-
this._renderer.setElementClass(this._getHostElement(), `mat-${color}`, isAdd);
144+
if (isAdd) {
145+
this._renderer.addClass(this._getHostElement(), `mat-${color}`);
146+
} else {
147+
this._renderer.removeClass(this._getHostElement(), `mat-${color}`);
148+
}
145149
}
146150
}
147151

148152
/** Focuses the button. */
149153
focus(): void {
150-
this._renderer.invokeElementMethod(this._getHostElement(), 'focus');
154+
this._getHostElement().focus();
151155
}
152156

153157
_getHostElement() {
@@ -188,7 +192,7 @@ export class MdButton implements OnDestroy {
188192
encapsulation: ViewEncapsulation.None
189193
})
190194
export class MdAnchor extends MdButton {
191-
constructor(elementRef: ElementRef, renderer: Renderer, focusOriginMonitor: FocusOriginMonitor) {
195+
constructor(elementRef: ElementRef, renderer: Renderer2, focusOriginMonitor: FocusOriginMonitor) {
192196
super(elementRef, renderer, focusOriginMonitor);
193197
}
194198

src/lib/checkbox/checkbox.spec.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {
66
TestBed,
77
tick,
88
} from '@angular/core/testing';
9-
import {NgControl, FormsModule, ReactiveFormsModule, FormControl} from '@angular/forms';
9+
import {NgModel, FormsModule, ReactiveFormsModule, FormControl} from '@angular/forms';
1010
import {Component, DebugElement} from '@angular/core';
1111
import {By} from '@angular/platform-browser';
1212
import {MdCheckbox, MdCheckboxChange, MdCheckboxModule} from './index';
@@ -682,11 +682,11 @@ describe('MdCheckbox', () => {
682682
flushMicrotasks();
683683

684684
let checkboxElement = fixture.debugElement.query(By.directive(MdCheckbox));
685-
let ngControl = <NgControl> checkboxElement.injector.get(NgControl);
685+
let ngModel = checkboxElement.injector.get<NgModel>(NgModel);
686686

687-
expect(ngControl.valid).toBe(true);
688-
expect(ngControl.pristine).toBe(true);
689-
expect(ngControl.touched).toBe(false);
687+
expect(ngModel.valid).toBe(true);
688+
expect(ngModel.pristine).toBe(true);
689+
expect(ngModel.touched).toBe(false);
690690

691691
// TODO(jelbourn): test that `touched` and `pristine` state are modified appropriately.
692692
// This is currently blocked on issues with async() and fakeAsync().

src/lib/checkbox/checkbox.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {
66
EventEmitter,
77
Input,
88
Output,
9-
Renderer,
9+
Renderer2,
1010
ViewEncapsulation,
1111
forwardRef,
1212
ViewChild,
@@ -188,7 +188,7 @@ export class MdCheckbox implements ControlValueAccessor, AfterViewInit, OnDestro
188188
/** Reference to the focus origin monitor subscription. */
189189
private _focusedSubscription: Subscription;
190190

191-
constructor(private _renderer: Renderer,
191+
constructor(private _renderer: Renderer2,
192192
private _elementRef: ElementRef,
193193
private _changeDetectorRef: ChangeDetectorRef,
194194
private _focusOriginMonitor: FocusOriginMonitor) {
@@ -276,7 +276,11 @@ export class MdCheckbox implements ControlValueAccessor, AfterViewInit, OnDestro
276276

277277
_setElementColor(color: string, isAdd: boolean) {
278278
if (color != null && color != '') {
279-
this._renderer.setElementClass(this._elementRef.nativeElement, `mat-${color}`, isAdd);
279+
if (isAdd) {
280+
this._renderer.addClass(this._elementRef.nativeElement, `mat-${color}`);
281+
} else {
282+
this._renderer.removeClass(this._elementRef.nativeElement, `mat-${color}`);
283+
}
280284
}
281285
}
282286

@@ -327,15 +331,15 @@ export class MdCheckbox implements ControlValueAccessor, AfterViewInit, OnDestro
327331
return;
328332
}
329333
if (this._currentAnimationClass.length > 0) {
330-
renderer.setElementClass(elementRef.nativeElement, this._currentAnimationClass, false);
334+
renderer.removeClass(elementRef.nativeElement, this._currentAnimationClass);
331335
}
332336

333337
this._currentAnimationClass = this._getAnimationClassForCheckStateTransition(
334338
oldState, newState);
335339
this._currentCheckState = newState;
336340

337341
if (this._currentAnimationClass.length > 0) {
338-
renderer.setElementClass(elementRef.nativeElement, this._currentAnimationClass, true);
342+
renderer.addClass(elementRef.nativeElement, this._currentAnimationClass);
339343
}
340344
}
341345

src/lib/chips/chip.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {
66
OnDestroy,
77
OnInit,
88
Output,
9-
Renderer
9+
Renderer2,
1010
} from '@angular/core';
1111

1212
import {Focusable} from '../core/a11y/focus-key-manager';
@@ -58,7 +58,7 @@ export class MdChip implements Focusable, OnInit, OnDestroy {
5858
/** Emitted when the chip is destroyed. */
5959
@Output() destroy = new EventEmitter<MdChipEvent>();
6060

61-
constructor(protected _renderer: Renderer, protected _elementRef: ElementRef) { }
61+
constructor(protected _renderer: Renderer2, protected _elementRef: ElementRef) { }
6262

6363
ngOnInit(): void {
6464
this._addDefaultCSSClass();
@@ -119,7 +119,7 @@ export class MdChip implements Focusable, OnInit, OnDestroy {
119119

120120
/** Allows for programmatic focusing of the chip. */
121121
focus(): void {
122-
this._renderer.invokeElementMethod(this._elementRef.nativeElement, 'focus');
122+
this._elementRef.nativeElement.focus();
123123
this.onFocus.emit({chip: this});
124124
}
125125

@@ -139,12 +139,12 @@ export class MdChip implements Focusable, OnInit, OnDestroy {
139139
let el: HTMLElement = this._elementRef.nativeElement;
140140

141141
// Always add the `mat-chip` class
142-
el.classList.add('mat-chip');
142+
this._renderer.addClass(el, 'mat-chip');
143143

144144
// If we are a basic chip, also add the `mat-basic-chip` class for :not() targeting
145145
if (el.nodeName.toLowerCase() == 'mat-basic-chip' || el.hasAttribute('mat-basic-chip') ||
146146
el.nodeName.toLowerCase() == 'md-basic-chip' || el.hasAttribute('md-basic-chip')) {
147-
el.classList.add('mat-basic-chip');
147+
this._renderer.addClass(el, 'mat-basic-chip');
148148
}
149149
}
150150

@@ -158,7 +158,11 @@ export class MdChip implements Focusable, OnInit, OnDestroy {
158158
/** Sets the mat-color on the native element. */
159159
private _setElementColor(color: string, isAdd: boolean) {
160160
if (color != null && color != '') {
161-
this._renderer.setElementClass(this._elementRef.nativeElement, `mat-${color}`, isAdd);
161+
if (isAdd) {
162+
this._renderer.addClass(this._elementRef.nativeElement, `mat-${color}`);
163+
} else {
164+
this._renderer.removeClass(this._elementRef.nativeElement, `mat-${color}`);
165+
}
162166
}
163167
}
164168
}

src/lib/core/a11y/live-announcer.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import {
22
Injectable,
3-
OpaqueToken,
3+
InjectionToken,
44
Optional,
55
Inject,
66
SkipSelf,
77
} from '@angular/core';
88

9-
export const LIVE_ANNOUNCER_ELEMENT_TOKEN = new OpaqueToken('liveAnnouncerElement');
9+
export const LIVE_ANNOUNCER_ELEMENT_TOKEN = new InjectionToken<HTMLElement>('liveAnnouncerElement');
1010

1111
/** Possible politeness levels. */
1212
export type AriaLivePoliteness = 'off' | 'polite' | 'assertive';

src/lib/core/compatibility/compatibility.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import {
22
NgModule,
33
ModuleWithProviders,
44
Directive,
5-
OpaqueToken,
5+
InjectionToken,
66
Inject,
77
Optional,
88
isDevMode,
@@ -12,7 +12,7 @@ import {DOCUMENT} from '@angular/platform-browser';
1212
/** Whether we've done the global sanity checks (e.g. a theme is loaded, there is a doctype). */
1313
let hasDoneGlobalChecks = false;
1414

15-
export const MATERIAL_COMPATIBILITY_MODE = new OpaqueToken('md-compatibility-mode');
15+
export const MATERIAL_COMPATIBILITY_MODE = new InjectionToken<boolean>('md-compatibility-mode');
1616

1717
/** Selector that matches all elements that may have style collisions with AngularJS Material. */
1818
export const MAT_ELEMENTS_SELECTOR = `

src/lib/core/line/line.ts

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import {
2-
NgModule,
3-
Directive,
4-
Renderer,
5-
ElementRef,
6-
QueryList
2+
NgModule,
3+
Directive,
4+
Renderer2,
5+
ElementRef,
6+
QueryList,
77
} from '@angular/core';
88
import {CompatibilityModule} from '../compatibility/compatibility';
99

@@ -26,7 +26,7 @@ export class MdLine {}
2626
* @docs-private
2727
*/
2828
export class MdLineSetter {
29-
constructor(private _lines: QueryList<MdLine>, private _renderer: Renderer,
29+
constructor(private _lines: QueryList<MdLine>, private _renderer: Renderer2,
3030
private _element: ElementRef) {
3131
this._setLineClass(this._lines.length);
3232

@@ -50,8 +50,12 @@ export class MdLineSetter {
5050
this._setClass('mat-multi-line', false);
5151
}
5252

53-
private _setClass(className: string, bool: boolean): void {
54-
this._renderer.setElementClass(this._element.nativeElement, className, bool);
53+
private _setClass(className: string, isAdd: boolean): void {
54+
if (isAdd) {
55+
this._renderer.addClass(this._element.nativeElement, className);
56+
} else {
57+
this._renderer.removeClass(this._element.nativeElement, className);
58+
}
5559
}
5660

5761
}

0 commit comments

Comments
 (0)