Skip to content

Commit 2cf3860

Browse files
crisbetojelbourn
authored andcommitted
refactor: remove renderer usages (#8235)
Removes any usages of the Renderer2 from the codebase. They're no longer necessary after Angular switched to Domino which is closer to the native DOM API.
1 parent 6a9fbfe commit 2cf3860

File tree

38 files changed

+176
-250
lines changed

38 files changed

+176
-250
lines changed

guides/creating-a-custom-form-field-control.md

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class MyTelInput {
5858
tel = tel || new MyTel('', '', '');
5959
this.parts.setValue({area: tel.area, exchange: tel.exchange, subscriber: tel.subscriber});
6060
}
61-
61+
6262
constructor(fb: FormBuilder) {
6363
this.parts = fb.group({
6464
'area': '',
@@ -98,7 +98,7 @@ the `MatFormFieldControl` interface, see the
9898
#### `value`
9999

100100
This property allows someone to set or get the value of our control. Its type should be the same
101-
type we used for the type parameter when we implemented `MatFormFieldControl`. Since our component
101+
type we used for the type parameter when we implemented `MatFormFieldControl`. Since our component
102102
already has a value property, we don't need to do anything for this one.
103103

104104
#### `stateChanges`
@@ -185,10 +185,9 @@ need to remember to emit on the `stateChanges` stream so change detection can ha
185185
```ts
186186
focused = false;
187187

188-
constructor(fb: FormBuilder, private fm: FocusMonitor, private elRef: ElementRef,
189-
renderer: Renderer2) {
188+
constructor(fb: FormBuilder, private fm: FocusMonitor, private elRef: ElementRef) {
190189
...
191-
fm.monitor(elRef.nativeElement, renderer, true).subscribe(origin => {
190+
fm.monitor(elRef.nativeElement, true).subscribe(origin => {
192191
this.focused = !!origin;
193192
this.stateChanges.next();
194193
});
@@ -307,7 +306,7 @@ just need to apply the given IDs to our host element.
307306

308307
```ts
309308
@HostBinding('attr.aria-describedby') describedBy = '';
310-
309+
311310
setDescribedByIds(ids: string[]) {
312311
this.describedBy = ids.join(' ');
313312
}

src/cdk/a11y/focus-monitor.spec.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import {TAB} from '@angular/cdk/keycodes';
22
import {dispatchFakeEvent, dispatchKeyboardEvent, dispatchMouseEvent} from '@angular/cdk/testing';
3-
import {Component, Renderer2} from '@angular/core';
3+
import {Component} from '@angular/core';
44
import {ComponentFixture, fakeAsync, inject, TestBed, tick} from '@angular/core/testing';
55
import {By} from '@angular/platform-browser';
66
import {FocusMonitor, FocusOrigin, TOUCH_BUFFER_MS} from './focus-monitor';
@@ -378,9 +378,7 @@ describe('cdkMonitorFocus', () => {
378378
@Component({
379379
template: `<button>focus me!</button>`
380380
})
381-
class PlainButton {
382-
constructor(public renderer: Renderer2) {}
383-
}
381+
class PlainButton {}
384382

385383

386384
@Component({

src/cdk/overlay/overlay-directives.ts

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import {
2121
OnDestroy,
2222
Optional,
2323
Output,
24-
Renderer2,
2524
SimpleChanges,
2625
TemplateRef,
2726
ViewContainerRef,
@@ -36,6 +35,7 @@ import {
3635
} from './position/connected-position';
3736
import {ConnectedPositionStrategy} from './position/connected-position-strategy';
3837
import {RepositionScrollStrategy, ScrollStrategy} from './scroll/index';
38+
import {DOCUMENT} from '@angular/common';
3939

4040

4141
/** Default set of positions for the overlay. Follows the behavior of a dropdown. */
@@ -97,7 +97,6 @@ export class CdkConnectedOverlay implements OnDestroy, OnChanges {
9797
private _offsetX: number = 0;
9898
private _offsetY: number = 0;
9999
private _position: ConnectedPositionStrategy;
100-
private _escapeListener = () => {};
101100

102101
/** Origin for the connected overlay. */
103102
@Input('cdkConnectedOverlayOrigin') origin: CdkOverlayOrigin;
@@ -230,11 +229,11 @@ export class CdkConnectedOverlay implements OnDestroy, OnChanges {
230229

231230
constructor(
232231
private _overlay: Overlay,
233-
private _renderer: Renderer2,
234232
templateRef: TemplateRef<any>,
235233
viewContainerRef: ViewContainerRef,
236234
@Inject(CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY) private _scrollStrategy,
237-
@Optional() private _dir: Directionality) {
235+
@Optional() private _dir: Directionality,
236+
@Optional() @Inject(DOCUMENT) private _document: any) {
238237
this._templatePortal = new TemplatePortal(templateRef, viewContainerRef);
239238
}
240239

@@ -335,7 +334,7 @@ export class CdkConnectedOverlay implements OnDestroy, OnChanges {
335334

336335
this._position.withDirection(this.dir);
337336
this._overlayRef.getConfig().direction = this.dir;
338-
this._initEscapeListener();
337+
this._document.addEventListener('keydown', this._escapeListener);
339338

340339
if (!this._overlayRef.hasAttached()) {
341340
this._overlayRef.attach(this._templatePortal);
@@ -357,7 +356,7 @@ export class CdkConnectedOverlay implements OnDestroy, OnChanges {
357356
}
358357

359358
this._backdropSubscription.unsubscribe();
360-
this._escapeListener();
359+
this._document.removeEventListener('keydown', this._escapeListener);
361360
}
362361

363362
/** Destroys the overlay created by this directive. */
@@ -368,15 +367,13 @@ export class CdkConnectedOverlay implements OnDestroy, OnChanges {
368367

369368
this._backdropSubscription.unsubscribe();
370369
this._positionSubscription.unsubscribe();
371-
this._escapeListener();
370+
this._document.removeEventListener('keydown', this._escapeListener);
372371
}
373372

374-
/** Sets the event listener that closes the overlay when pressing Escape. */
375-
private _initEscapeListener() {
376-
this._escapeListener = this._renderer.listen('document', 'keydown', (event: KeyboardEvent) => {
377-
if (event.keyCode === ESCAPE) {
378-
this._detachOverlay();
379-
}
380-
});
373+
/** Event listener that will close the overlay when the user presses escape. */
374+
private _escapeListener = (event: KeyboardEvent) => {
375+
if (event.keyCode === ESCAPE) {
376+
this._detachOverlay();
377+
}
381378
}
382379
}

src/cdk/overlay/position/connected-position-strategy.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -592,7 +592,7 @@ describe('ConnectedPositionStrategy', () => {
592592
{overlayX: 'start', overlayY: 'top'});
593593

594594
strategy.withScrollableContainers([
595-
new CdkScrollable(new FakeElementRef(scrollable), null!, null!, null!)]);
595+
new CdkScrollable(new FakeElementRef(scrollable), null!, null!)]);
596596
strategy.attach(fakeOverlayRef(overlayElement));
597597
positionChangeHandler = jasmine.createSpy('positionChangeHandler');
598598
onPositionChangeSubscription = strategy.onPositionChange.subscribe(positionChangeHandler);

src/cdk/scrolling/scrollable.ts

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* found in the LICENSE file at https://angular.io/license
77
*/
88

9-
import {Directive, ElementRef, OnInit, OnDestroy, NgZone, Renderer2} from '@angular/core';
9+
import {Directive, ElementRef, OnInit, OnDestroy, NgZone} from '@angular/core';
1010
import {Observable} from 'rxjs/Observable';
1111
import {Subject} from 'rxjs/Subject';
1212
import {ScrollDispatcher} from './scroll-dispatcher';
@@ -22,18 +22,15 @@ import {ScrollDispatcher} from './scroll-dispatcher';
2222
})
2323
export class CdkScrollable implements OnInit, OnDestroy {
2424
private _elementScrolled: Subject<Event> = new Subject();
25-
private _scrollListener: Function | null;
25+
private _scrollListener = (event: Event) => this._elementScrolled.next(event);
2626

2727
constructor(private _elementRef: ElementRef,
2828
private _scroll: ScrollDispatcher,
29-
private _ngZone: NgZone,
30-
private _renderer: Renderer2) {}
29+
private _ngZone: NgZone) {}
3130

3231
ngOnInit() {
33-
this._scrollListener = this._ngZone.runOutsideAngular(() => {
34-
return this._renderer.listen(this.getElementRef().nativeElement, 'scroll', (event: Event) => {
35-
this._elementScrolled.next(event);
36-
});
32+
this._ngZone.runOutsideAngular(() => {
33+
this.getElementRef().nativeElement.addEventListener('scroll', this._scrollListener);
3734
});
3835

3936
this._scroll.register(this);
@@ -43,8 +40,7 @@ export class CdkScrollable implements OnInit, OnDestroy {
4340
this._scroll.deregister(this);
4441

4542
if (this._scrollListener) {
46-
this._scrollListener();
47-
this._scrollListener = null;
43+
this.getElementRef().nativeElement.removeEventListener('scroll', this._scrollListener);
4844
}
4945
}
5046

src/cdk/table/cell.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* found in the LICENSE file at https://angular.io/license
77
*/
88

9-
import {ContentChild, Directive, ElementRef, Input, Renderer2, TemplateRef} from '@angular/core';
9+
import {ContentChild, Directive, ElementRef, Input, TemplateRef} from '@angular/core';
1010

1111
/**
1212
* Cell definition for a CDK table.
@@ -64,8 +64,8 @@ export class CdkColumnDef {
6464
},
6565
})
6666
export class CdkHeaderCell {
67-
constructor(columnDef: CdkColumnDef, elementRef: ElementRef, renderer: Renderer2) {
68-
renderer.addClass(elementRef.nativeElement, `cdk-column-${columnDef.cssClassFriendlyName}`);
67+
constructor(columnDef: CdkColumnDef, elementRef: ElementRef) {
68+
elementRef.nativeElement.classList.add(`cdk-column-${columnDef.cssClassFriendlyName}`);
6969
}
7070
}
7171

@@ -78,7 +78,7 @@ export class CdkHeaderCell {
7878
},
7979
})
8080
export class CdkCell {
81-
constructor(columnDef: CdkColumnDef, elementRef: ElementRef, renderer: Renderer2) {
82-
renderer.addClass(elementRef.nativeElement, `cdk-column-${columnDef.cssClassFriendlyName}`);
81+
constructor(columnDef: CdkColumnDef, elementRef: ElementRef) {
82+
elementRef.nativeElement.classList.add(`cdk-column-${columnDef.cssClassFriendlyName}`);
8383
}
8484
}

src/cdk/table/table.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import {
2323
IterableDiffers,
2424
NgIterable,
2525
QueryList,
26-
Renderer2,
2726
TrackByFunction,
2827
ViewChild,
2928
ViewContainerRef,
@@ -170,10 +169,10 @@ export class CdkTable<T> implements CollectionViewer {
170169
constructor(private readonly _differs: IterableDiffers,
171170
private readonly _changeDetectorRef: ChangeDetectorRef,
172171
elementRef: ElementRef,
173-
renderer: Renderer2,
174172
@Attribute('role') role: string) {
173+
175174
if (!role) {
176-
renderer.setAttribute(elementRef.nativeElement, 'role', 'grid');
175+
elementRef.nativeElement.setAttribute('role', 'grid');
177176
}
178177
}
179178

src/demo-app/demo-app/demo-app.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*/
88

99
import {OverlayContainer} from '@angular/cdk/overlay';
10-
import {Component, ElementRef, Renderer2, ViewEncapsulation} from '@angular/core';
10+
import {Component, ElementRef, ViewEncapsulation} from '@angular/core';
1111

1212
/**
1313
* The entry app for demo site. Routes under `accessibility` will use AccessibilityDemo component,
@@ -91,7 +91,6 @@ export class DemoApp {
9191

9292
constructor(
9393
private _element: ElementRef,
94-
private _renderer: Renderer2,
9594
private _overlayContainer: OverlayContainer) {}
9695

9796
toggleFullscreen() {
@@ -113,10 +112,10 @@ export class DemoApp {
113112
this.dark = !this.dark;
114113

115114
if (this.dark) {
116-
this._renderer.addClass(this._element.nativeElement, darkThemeClass);
115+
this._element.nativeElement.classList.add(darkThemeClass);
117116
this._overlayContainer.getContainerElement().classList.add(darkThemeClass);
118117
} else {
119-
this._renderer.removeClass(this._element.nativeElement, darkThemeClass);
118+
this._element.nativeElement.classList.remove(darkThemeClass);
120119
this._overlayContainer.getContainerElement().classList.remove(darkThemeClass);
121120
}
122121
}

src/lib/button/button.ts

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import {
1717
Inject,
1818
OnDestroy,
1919
Optional,
20-
Renderer2,
2120
Self,
2221
ViewEncapsulation,
2322
} from '@angular/core';
@@ -104,7 +103,7 @@ export class MatMiniFab {
104103
// Boilerplate for applying mixins to MatButton.
105104
/** @docs-private */
106105
export class MatButtonBase {
107-
constructor(public _renderer: Renderer2, public _elementRef: ElementRef) {}
106+
constructor(public _elementRef: ElementRef) {}
108107
}
109108
export const _MatButtonMixinBase = mixinColor(mixinDisabled(mixinDisableRipple(MatButtonBase)));
110109

@@ -136,11 +135,10 @@ export class MatButton extends _MatButtonMixinBase
136135
/** Whether the button is icon button. */
137136
_isIconButton: boolean = this._hasHostAttributes('mat-icon-button');
138137

139-
constructor(renderer: Renderer2,
140-
elementRef: ElementRef,
138+
constructor(elementRef: ElementRef,
141139
private _platform: Platform,
142140
private _focusMonitor: FocusMonitor) {
143-
super(renderer, elementRef);
141+
super(elementRef);
144142
this._focusMonitor.monitor(this._elementRef.nativeElement, true);
145143
}
146144

@@ -198,9 +196,8 @@ export class MatAnchor extends MatButton {
198196
constructor(
199197
platform: Platform,
200198
focusMonitor: FocusMonitor,
201-
elementRef: ElementRef,
202-
renderer: Renderer2) {
203-
super(renderer, elementRef, platform, focusMonitor);
199+
elementRef: ElementRef) {
200+
super(elementRef, platform, focusMonitor);
204201
}
205202

206203
_haltDisabledEvents(event: Event) {

src/lib/checkbox/checkbox.ts

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import {
2020
Input,
2121
OnDestroy,
2222
Output,
23-
Renderer2,
2423
ViewChild,
2524
ViewEncapsulation,
2625
} from '@angular/core';
@@ -79,7 +78,7 @@ export class MatCheckboxChange {
7978
// Boilerplate for applying mixins to MatCheckbox.
8079
/** @docs-private */
8180
export class MatCheckboxBase {
82-
constructor(public _renderer: Renderer2, public _elementRef: ElementRef) {}
81+
constructor(public _elementRef: ElementRef) {}
8382
}
8483
export const _MatCheckboxMixinBase =
8584
mixinTabIndex(mixinColor(mixinDisableRipple(mixinDisabled(MatCheckboxBase)), 'accent'));
@@ -197,13 +196,11 @@ export class MatCheckbox extends _MatCheckboxMixinBase implements ControlValueAc
197196
/** Reference to the focused state ripple. */
198197
private _focusRipple: RippleRef | null;
199198

200-
constructor(renderer: Renderer2,
201-
elementRef: ElementRef,
199+
constructor(elementRef: ElementRef,
202200
private _changeDetectorRef: ChangeDetectorRef,
203201
private _focusMonitor: FocusMonitor,
204202
@Attribute('tabindex') tabIndex: string) {
205-
super(renderer, elementRef);
206-
203+
super(elementRef);
207204
this.tabIndex = parseInt(tabIndex) || 0;
208205
}
209206

@@ -309,22 +306,21 @@ export class MatCheckbox extends _MatCheckboxMixinBase implements ControlValueAc
309306

310307
private _transitionCheckState(newState: TransitionCheckState) {
311308
let oldState = this._currentCheckState;
312-
let renderer = this._renderer;
313-
let elementRef = this._elementRef;
309+
let element: HTMLElement = this._elementRef.nativeElement;
314310

315311
if (oldState === newState) {
316312
return;
317313
}
318314
if (this._currentAnimationClass.length > 0) {
319-
renderer.removeClass(elementRef.nativeElement, this._currentAnimationClass);
315+
element.classList.remove(this._currentAnimationClass);
320316
}
321317

322318
this._currentAnimationClass = this._getAnimationClassForCheckStateTransition(
323319
oldState, newState);
324320
this._currentCheckState = newState;
325321

326322
if (this._currentAnimationClass.length > 0) {
327-
renderer.addClass(elementRef.nativeElement, this._currentAnimationClass);
323+
element.classList.add(this._currentAnimationClass);
328324
}
329325
}
330326

0 commit comments

Comments
 (0)