From 20a034e73a12e44e7ef4e96aa8a3396e946a3f80 Mon Sep 17 00:00:00 2001 From: Karl Seamon Date: Thu, 4 Nov 2021 13:14:08 -0400 Subject: [PATCH] perf(multiple): Remove IE 11 cruft from table, column-resize, and popover-edit. --- .../column-resize/column-resize.ts | 8 ++---- src/cdk-experimental/popover-edit/polyfill.ts | 28 ++----------------- .../popover-edit/public-api.ts | 2 +- src/cdk/table/cell.ts | 7 +---- 4 files changed, 6 insertions(+), 39 deletions(-) diff --git a/src/cdk-experimental/column-resize/column-resize.ts b/src/cdk-experimental/column-resize/column-resize.ts index ed4146084072..a1e354f95445 100644 --- a/src/cdk-experimental/column-resize/column-resize.ts +++ b/src/cdk-experimental/column-resize/column-resize.ts @@ -10,7 +10,7 @@ import {AfterViewInit, Directive, ElementRef, NgZone, OnDestroy} from '@angular/ import {fromEvent, merge, Subject} from 'rxjs'; import {filter, map, mapTo, pairwise, startWith, take, takeUntil} from 'rxjs/operators'; -import {_closest, _matches} from '@angular/cdk-experimental/popover-edit'; +import {_closest} from '@angular/cdk-experimental/popover-edit'; import {ColumnResizeNotifier, ColumnResizeNotifierSource} from './column-resize-notifier'; import {HEADER_CELL_SELECTOR, RESIZE_OVERLAY_SELECTOR} from './selectors'; @@ -80,11 +80,7 @@ export abstract class ColumnResize implements AfterViewInit, OnDestroy { .subscribe(this.eventDispatcher.headerCellHovered); fromEvent(element, 'mouseleave') .pipe( - filter( - event => - !!event.relatedTarget && - !_matches(event.relatedTarget as Element, RESIZE_OVERLAY_SELECTOR), - ), + filter(event => !!(event.relatedTarget as Element)?.matches(RESIZE_OVERLAY_SELECTOR)), mapTo(null), takeUntil(this.destroyed), ) diff --git a/src/cdk-experimental/popover-edit/polyfill.ts b/src/cdk-experimental/popover-edit/polyfill.ts index d71e8cfaa96a..efe2f36375ca 100644 --- a/src/cdk-experimental/popover-edit/polyfill.ts +++ b/src/cdk-experimental/popover-edit/polyfill.ts @@ -6,14 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ -/** IE 11 compatible matches implementation. */ -export function matches(element: Element, selector: string): boolean { - return element.matches - ? element.matches(selector) - : (element as any)['msMatchesSelector'](selector); -} - -/** IE 11 compatible closest implementation that is able to start from non-Element Nodes. */ +/** closest implementation that is able to start from non-Element Nodes. */ export function closest( element: EventTarget | Element | null | undefined, selector: string, @@ -27,22 +20,5 @@ export function closest( curr = curr.parentNode; } - return ( - curr && - ((hasNativeClosest - ? curr.closest(selector) - : polyfillClosest(curr, selector)) as Element | null) - ); + return curr?.closest(selector) ?? null; } - -/** Polyfill for browsers without Element.closest. */ -function polyfillClosest(element: Element, selector: string): Element | null { - let curr: Node | null = element; - while (curr != null && !(curr instanceof Element && matches(curr, selector))) { - curr = curr.parentNode; - } - - return (curr || null) as Element | null; -} - -const hasNativeClosest = !!Element.prototype.closest; diff --git a/src/cdk-experimental/popover-edit/public-api.ts b/src/cdk-experimental/popover-edit/public-api.ts index db5e67108b82..96346bf8c856 100644 --- a/src/cdk-experimental/popover-edit/public-api.ts +++ b/src/cdk-experimental/popover-edit/public-api.ts @@ -17,4 +17,4 @@ export * from './table-directives'; // Private to Angular Components export {CELL_SELECTOR as _CELL_SELECTOR} from './constants'; -export {closest as _closest, matches as _matches} from './polyfill'; +export {closest as _closest} from './polyfill'; diff --git a/src/cdk/table/cell.ts b/src/cdk/table/cell.ts index 22bf3c9c93d9..a9d399214559 100644 --- a/src/cdk/table/cell.ts +++ b/src/cdk/table/cell.ts @@ -153,12 +153,7 @@ export class CdkColumnDef extends _CdkColumnDefBase implements CanStick { /** Base class for the cells. Adds a CSS classname that identifies the column it renders in. */ export class BaseCdkCell { constructor(columnDef: CdkColumnDef, elementRef: ElementRef) { - // If IE 11 is dropped before we switch to setting a single class name, change to multi param - // with destructuring. - const classList = elementRef.nativeElement.classList; - for (const className of columnDef._columnCssClassName) { - classList.add(className); - } + elementRef.nativeElement.classList.add(...columnDef._columnCssClassName); } }