From f82eff2befbd47e36acabaf8ade7096b19bf3403 Mon Sep 17 00:00:00 2001 From: Jeremy Elbourn Date: Thu, 12 Apr 2018 11:20:06 -0700 Subject: [PATCH] Revert "refactor: avoid casting document to any in constructor (#10775)" This reverts commit e60f5fc391c103d489db948234bb6e9aaee0856b. --- src/cdk-experimental/dialog/dialog-container.ts | 2 +- src/cdk/a11y/aria-describer/aria-describer.ts | 11 +++++++---- src/cdk/a11y/focus-trap/focus-trap.ts | 11 +++++++++-- src/cdk/a11y/live-announcer/live-announcer.ts | 4 ++-- .../overlay/keyboard/overlay-keyboard-dispatcher.ts | 9 ++++++--- src/cdk/overlay/overlay-container.ts | 7 +++---- src/cdk/overlay/overlay.ts | 2 +- src/cdk/overlay/position/overlay-position-builder.ts | 2 +- src/cdk/overlay/scroll/block-scroll-strategy.ts | 5 ++++- src/cdk/overlay/scroll/scroll-strategy-options.ts | 6 +++++- src/lib/autocomplete/autocomplete-trigger.ts | 2 +- src/lib/badge/badge.ts | 2 +- src/lib/bottom-sheet/bottom-sheet-container.ts | 6 +++++- src/lib/datepicker/datepicker.ts | 4 ++-- src/lib/dialog/dialog-container.ts | 2 +- src/lib/icon/icon-registry.ts | 6 +++++- src/lib/menu/menu-content.ts | 2 +- src/lib/progress-spinner/progress-spinner.ts | 4 ++-- 18 files changed, 57 insertions(+), 30 deletions(-) diff --git a/src/cdk-experimental/dialog/dialog-container.ts b/src/cdk-experimental/dialog/dialog-container.ts index 8f8ea5e7d684..97563cc0b3df 100644 --- a/src/cdk-experimental/dialog/dialog-container.ts +++ b/src/cdk-experimental/dialog/dialog-container.ts @@ -109,7 +109,7 @@ export class CdkDialogContainer extends BasePortalOutlet { private _elementRef: ElementRef, private _focusTrapFactory: FocusTrapFactory, private _changeDetectorRef: ChangeDetectorRef, - @Optional() @Inject(DOCUMENT) private _document: Document) { + @Optional() @Inject(DOCUMENT) private _document: any) { super(); } diff --git a/src/cdk/a11y/aria-describer/aria-describer.ts b/src/cdk/a11y/aria-describer/aria-describer.ts index 5db79ba76ffe..be9066e3b119 100644 --- a/src/cdk/a11y/aria-describer/aria-describer.ts +++ b/src/cdk/a11y/aria-describer/aria-describer.ts @@ -55,7 +55,11 @@ let messagesContainer: HTMLElement | null = null; */ @Injectable({providedIn: 'root'}) export class AriaDescriber { - constructor(@Inject(DOCUMENT) private _document: Document) {} + private _document: Document; + + constructor(@Inject(DOCUMENT) _document: any) { + this._document = _document; + } /** * Adds to the host element an aria-describedby reference to a hidden element that contains @@ -209,8 +213,7 @@ export class AriaDescriber { /** @docs-private @deprecated @deletion-target 7.0.0 */ -export function ARIA_DESCRIBER_PROVIDER_FACTORY(parentDispatcher: AriaDescriber, - _document: Document) { +export function ARIA_DESCRIBER_PROVIDER_FACTORY(parentDispatcher: AriaDescriber, _document: any) { return parentDispatcher || new AriaDescriber(_document); } @@ -220,7 +223,7 @@ export const ARIA_DESCRIBER_PROVIDER = { provide: AriaDescriber, deps: [ [new Optional(), new SkipSelf(), AriaDescriber], - DOCUMENT as InjectionToken + DOCUMENT as InjectionToken ], useFactory: ARIA_DESCRIBER_PROVIDER_FACTORY }; diff --git a/src/cdk/a11y/focus-trap/focus-trap.ts b/src/cdk/a11y/focus-trap/focus-trap.ts index ee0662f2fada..8dbf83827aae 100644 --- a/src/cdk/a11y/focus-trap/focus-trap.ts +++ b/src/cdk/a11y/focus-trap/focus-trap.ts @@ -285,10 +285,15 @@ export class FocusTrap { /** Factory that allows easy instantiation of focus traps. */ @Injectable({providedIn: 'root'}) export class FocusTrapFactory { + private _document: Document; + constructor( private _checker: InteractivityChecker, private _ngZone: NgZone, - @Inject(DOCUMENT) private _document: Document) {} + @Inject(DOCUMENT) _document: any) { + + this._document = _document; + } /** * Creates a focus-trapped region around the given element. @@ -309,6 +314,8 @@ export class FocusTrapFactory { exportAs: 'cdkTrapFocus', }) export class CdkTrapFocus implements OnDestroy, AfterContentInit { + private _document: Document; + /** Underlying FocusTrap instance. */ focusTrap: FocusTrap; @@ -332,7 +339,7 @@ export class CdkTrapFocus implements OnDestroy, AfterContentInit { constructor( private _elementRef: ElementRef, private _focusTrapFactory: FocusTrapFactory, - @Inject(DOCUMENT) private _document: Document) { + @Inject(DOCUMENT) _document: any) { this._document = _document; this.focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement, true); diff --git a/src/cdk/a11y/live-announcer/live-announcer.ts b/src/cdk/a11y/live-announcer/live-announcer.ts index 6816c5bfdb63..d423bb098f13 100644 --- a/src/cdk/a11y/live-announcer/live-announcer.ts +++ b/src/cdk/a11y/live-announcer/live-announcer.ts @@ -27,7 +27,7 @@ export class LiveAnnouncer implements OnDestroy { constructor( @Optional() @Inject(LIVE_ANNOUNCER_ELEMENT_TOKEN) elementToken: any, - @Inject(DOCUMENT) private _document: Document) { + @Inject(DOCUMENT) private _document: any) { // We inject the live element as `any` because the constructor signature cannot reference // browser globals (HTMLElement) on non-browser environments, since having a class decorator @@ -83,7 +83,7 @@ export class LiveAnnouncer implements OnDestroy { /** @docs-private @deprecated @deletion-target 7.0.0 */ export function LIVE_ANNOUNCER_PROVIDER_FACTORY( - parentDispatcher: LiveAnnouncer, liveElement: any, _document: Document) { + parentDispatcher: LiveAnnouncer, liveElement: any, _document: any) { return parentDispatcher || new LiveAnnouncer(liveElement, _document); } diff --git a/src/cdk/overlay/keyboard/overlay-keyboard-dispatcher.ts b/src/cdk/overlay/keyboard/overlay-keyboard-dispatcher.ts index f39392e59186..983be9276492 100644 --- a/src/cdk/overlay/keyboard/overlay-keyboard-dispatcher.ts +++ b/src/cdk/overlay/keyboard/overlay-keyboard-dispatcher.ts @@ -29,9 +29,12 @@ export class OverlayKeyboardDispatcher implements OnDestroy { /** Currently attached overlays in the order they were attached. */ _attachedOverlays: OverlayRef[] = []; + private _document: Document; private _isAttached: boolean; - constructor(@Inject(DOCUMENT) private _document: Document) {} + constructor(@Inject(DOCUMENT) document: any) { + this._document = document; + } ngOnDestroy() { this._detach(); @@ -94,7 +97,7 @@ export class OverlayKeyboardDispatcher implements OnDestroy { /** @docs-private @deprecated @deletion-target 7.0.0 */ export function OVERLAY_KEYBOARD_DISPATCHER_PROVIDER_FACTORY( - dispatcher: OverlayKeyboardDispatcher, _document: Document) { + dispatcher: OverlayKeyboardDispatcher, _document: any) { return dispatcher || new OverlayKeyboardDispatcher(_document); } @@ -108,7 +111,7 @@ export const OVERLAY_KEYBOARD_DISPATCHER_PROVIDER = { // Coerce to `InjectionToken` so that the `deps` match the "shape" // of the type expected by Angular - DOCUMENT as InjectionToken + DOCUMENT as InjectionToken ], useFactory: OVERLAY_KEYBOARD_DISPATCHER_PROVIDER_FACTORY }; diff --git a/src/cdk/overlay/overlay-container.ts b/src/cdk/overlay/overlay-container.ts index 7d7e472a3c97..3598f500896b 100644 --- a/src/cdk/overlay/overlay-container.ts +++ b/src/cdk/overlay/overlay-container.ts @@ -22,7 +22,7 @@ import { export class OverlayContainer implements OnDestroy { protected _containerElement: HTMLElement; - constructor(@Inject(DOCUMENT) private _document: Document) {} + constructor(@Inject(DOCUMENT) private _document: any) {} ngOnDestroy() { if (this._containerElement && this._containerElement.parentNode) { @@ -57,7 +57,7 @@ export class OverlayContainer implements OnDestroy { /** @docs-private @deprecated @deletion-target 7.0.0 */ export function OVERLAY_CONTAINER_PROVIDER_FACTORY(parentContainer: OverlayContainer, - _document: Document) { + _document: any) { return parentContainer || new OverlayContainer(_document); } @@ -67,8 +67,7 @@ export const OVERLAY_CONTAINER_PROVIDER = { provide: OverlayContainer, deps: [ [new Optional(), new SkipSelf(), OverlayContainer], - // We need to use the InjectionToken somewhere to keep TS happy - DOCUMENT as InjectionToken + DOCUMENT as InjectionToken // We need to use the InjectionToken somewhere to keep TS happy ], useFactory: OVERLAY_CONTAINER_PROVIDER_FACTORY }; diff --git a/src/cdk/overlay/overlay.ts b/src/cdk/overlay/overlay.ts index a269bdbdb530..7c6511aa2f4d 100644 --- a/src/cdk/overlay/overlay.ts +++ b/src/cdk/overlay/overlay.ts @@ -51,7 +51,7 @@ export class Overlay { private _appRef: ApplicationRef, private _injector: Injector, private _ngZone: NgZone, - @Inject(DOCUMENT) private _document: Document, + @Inject(DOCUMENT) private _document: any, private _directionality: Directionality) { } /** diff --git a/src/cdk/overlay/position/overlay-position-builder.ts b/src/cdk/overlay/position/overlay-position-builder.ts index 968ffe8cb299..38c809b04bf0 100644 --- a/src/cdk/overlay/position/overlay-position-builder.ts +++ b/src/cdk/overlay/position/overlay-position-builder.ts @@ -20,7 +20,7 @@ import {GlobalPositionStrategy} from './global-position-strategy'; export class OverlayPositionBuilder { constructor( private _viewportRuler: ViewportRuler, - @Inject(DOCUMENT) private _document: Document) { } + @Inject(DOCUMENT) private _document: any) { } /** * Creates a global position strategy. diff --git a/src/cdk/overlay/scroll/block-scroll-strategy.ts b/src/cdk/overlay/scroll/block-scroll-strategy.ts index f50ef4763d35..5ad36ea2a3e1 100644 --- a/src/cdk/overlay/scroll/block-scroll-strategy.ts +++ b/src/cdk/overlay/scroll/block-scroll-strategy.ts @@ -17,8 +17,11 @@ export class BlockScrollStrategy implements ScrollStrategy { private _previousHTMLStyles = { top: '', left: '' }; private _previousScrollPosition: { top: number, left: number }; private _isEnabled = false; + private _document: Document; - constructor(private _viewportRuler: ViewportRuler, private _document: Document) {} + constructor(private _viewportRuler: ViewportRuler, document: any) { + this._document = document; + } /** Attaches this scroll strategy to an overlay. */ attach() { } diff --git a/src/cdk/overlay/scroll/scroll-strategy-options.ts b/src/cdk/overlay/scroll/scroll-strategy-options.ts index e468251bab78..26d1b3d4ba0e 100644 --- a/src/cdk/overlay/scroll/scroll-strategy-options.ts +++ b/src/cdk/overlay/scroll/scroll-strategy-options.ts @@ -26,11 +26,15 @@ import { */ @Injectable({providedIn: 'root'}) export class ScrollStrategyOptions { + private _document: Document; + constructor( private _scrollDispatcher: ScrollDispatcher, private _viewportRuler: ViewportRuler, private _ngZone: NgZone, - @Inject(DOCUMENT) private _document: Document) {} + @Inject(DOCUMENT) document: any) { + this._document = document; + } /** Do nothing on scroll. */ noop = () => new NoopScrollStrategy(); diff --git a/src/lib/autocomplete/autocomplete-trigger.ts b/src/lib/autocomplete/autocomplete-trigger.ts index 1a672e47df93..7018ab310e5e 100644 --- a/src/lib/autocomplete/autocomplete-trigger.ts +++ b/src/lib/autocomplete/autocomplete-trigger.ts @@ -145,7 +145,7 @@ export class MatAutocompleteTrigger implements ControlValueAccessor, OnDestroy { @Inject(MAT_AUTOCOMPLETE_SCROLL_STRATEGY) private _scrollStrategy, @Optional() private _dir: Directionality, @Optional() @Host() private _formField: MatFormField, - @Optional() @Inject(DOCUMENT) private _document: Document, + @Optional() @Inject(DOCUMENT) private _document: any, // @deletion-target 7.0.0 Make `_viewportRuler` required. private _viewportRuler?: ViewportRuler) {} diff --git a/src/lib/badge/badge.ts b/src/lib/badge/badge.ts index a1aa64824f30..25f42d5c4dfc 100644 --- a/src/lib/badge/badge.ts +++ b/src/lib/badge/badge.ts @@ -96,7 +96,7 @@ export class MatBadge implements OnDestroy { private _badgeElement: HTMLElement; constructor( - @Optional() @Inject(DOCUMENT) private _document: Document, + @Optional() @Inject(DOCUMENT) private _document: any, private _ngZone: NgZone, private _elementRef: ElementRef, private _ariaDescriber: AriaDescriber) {} diff --git a/src/lib/bottom-sheet/bottom-sheet-container.ts b/src/lib/bottom-sheet/bottom-sheet-container.ts index bb91fa7f831b..aab2a3da6087 100644 --- a/src/lib/bottom-sheet/bottom-sheet-container.ts +++ b/src/lib/bottom-sheet/bottom-sheet-container.ts @@ -79,6 +79,9 @@ export class MatBottomSheetContainer extends BasePortalOutlet implements OnDestr /** Element that was focused before the bottom sheet was opened. */ private _elementFocusedBeforeOpened: HTMLElement | null = null; + /** Server-side rendering-compatible reference to the global document object. */ + private _document: Document; + /** Whether the component has been destroyed. */ private _destroyed: boolean; @@ -87,9 +90,10 @@ export class MatBottomSheetContainer extends BasePortalOutlet implements OnDestr private _changeDetectorRef: ChangeDetectorRef, private _focusTrapFactory: FocusTrapFactory, breakpointObserver: BreakpointObserver, - @Optional() @Inject(DOCUMENT) private _document: Document) { + @Optional() @Inject(DOCUMENT) document: any) { super(); + this._document = document; this._breakpointSubscription = breakpointObserver .observe([Breakpoints.Medium, Breakpoints.Large, Breakpoints.XLarge]) .subscribe(() => { diff --git a/src/lib/datepicker/datepicker.ts b/src/lib/datepicker/datepicker.ts index 97db91e90be7..f307506e63f7 100644 --- a/src/lib/datepicker/datepicker.ts +++ b/src/lib/datepicker/datepicker.ts @@ -313,7 +313,7 @@ export class MatDatepicker implements OnDestroy, CanColor { @Inject(MAT_DATEPICKER_SCROLL_STRATEGY) private _scrollStrategy, @Optional() private _dateAdapter: DateAdapter, @Optional() private _dir: Directionality, - @Optional() @Inject(DOCUMENT) private _document: Document) { + @Optional() @Inject(DOCUMENT) private _document: any) { if (!this._dateAdapter) { throw createMissingDateImplError('DateAdapter'); } @@ -371,7 +371,7 @@ export class MatDatepicker implements OnDestroy, CanColor { throw Error('Attempted to open an MatDatepicker with no associated input.'); } if (this._document) { - this._focusedElementBeforeOpen = this._document.activeElement as HTMLElement; + this._focusedElementBeforeOpen = this._document.activeElement; } this.touchUi ? this._openAsDialog() : this._openAsPopup(); diff --git a/src/lib/dialog/dialog-container.ts b/src/lib/dialog/dialog-container.ts index d93c84ad8c92..3a705be37521 100644 --- a/src/lib/dialog/dialog-container.ts +++ b/src/lib/dialog/dialog-container.ts @@ -98,7 +98,7 @@ export class MatDialogContainer extends BasePortalOutlet { private _elementRef: ElementRef, private _focusTrapFactory: FocusTrapFactory, private _changeDetectorRef: ChangeDetectorRef, - @Optional() @Inject(DOCUMENT) private _document: Document) { + @Optional() @Inject(DOCUMENT) private _document: any) { super(); } diff --git a/src/lib/icon/icon-registry.ts b/src/lib/icon/icon-registry.ts index 72e970791505..3d094971b1b7 100644 --- a/src/lib/icon/icon-registry.ts +++ b/src/lib/icon/icon-registry.ts @@ -94,6 +94,8 @@ class SvgIconConfig { */ @Injectable({providedIn: 'root'}) export class MatIconRegistry { + private _document: Document; + /** * URLs and cached SVG elements for individual icons. Keys are of the format "[namespace]:[icon]". */ @@ -124,7 +126,9 @@ export class MatIconRegistry { constructor( @Optional() private _httpClient: HttpClient, private _sanitizer: DomSanitizer, - @Optional() @Inject(DOCUMENT) private _document: Document) {} + @Optional() @Inject(DOCUMENT) document: any) { + this._document = document; + } /** * Registers an icon by URL in the default namespace. diff --git a/src/lib/menu/menu-content.ts b/src/lib/menu/menu-content.ts index 3a280d9151c7..e8d16b824ea5 100644 --- a/src/lib/menu/menu-content.ts +++ b/src/lib/menu/menu-content.ts @@ -35,7 +35,7 @@ export class MatMenuContent implements OnDestroy { private _appRef: ApplicationRef, private _injector: Injector, private _viewContainerRef: ViewContainerRef, - @Inject(DOCUMENT) private _document: Document) {} + @Inject(DOCUMENT) private _document: any) {} /** * Attaches the content with a particular context. diff --git a/src/lib/progress-spinner/progress-spinner.ts b/src/lib/progress-spinner/progress-spinner.ts index a63698cc621a..dc7b88885c33 100644 --- a/src/lib/progress-spinner/progress-spinner.ts +++ b/src/lib/progress-spinner/progress-spinner.ts @@ -144,7 +144,7 @@ export class MatProgressSpinner extends _MatProgressSpinnerMixinBase implements constructor(public _elementRef: ElementRef, platform: Platform, - @Optional() @Inject(DOCUMENT) private _document: Document) { + @Optional() @Inject(DOCUMENT) private _document: any) { super(_elementRef); this._fallbackAnimation = platform.EDGE || platform.TRIDENT; @@ -244,7 +244,7 @@ export class MatProgressSpinner extends _MatProgressSpinnerMixinBase implements }) export class MatSpinner extends MatProgressSpinner { constructor(elementRef: ElementRef, platform: Platform, - @Optional() @Inject(DOCUMENT) document: Document) { + @Optional() @Inject(DOCUMENT) document: any) { super(elementRef, platform, document); this.mode = 'indeterminate'; }