/* * @Author: ferried * @Email: harlancui@outlook.com * @Date: 2021-02-03 17:29:26 * @LastEditTime: 2021-03-05 11:09:33 * @LastEditors: ferried * @Description: Basic description * @FilePath: /stars/projects/stars/src/schematics/ng-add/files/src/overlay.ts * @LICENSE: NONE */ import { Directionality } from "@angular/cdk/bidi"; import { Overlay, OverlayConfig, OverlayContainer, OverlayKeyboardDispatcher, OverlayPositionBuilder, OverlayRef, ScrollStrategyOptions, } from "@angular/cdk/overlay"; import { DOCUMENT, Location } from "@angular/common"; import { ComponentFactoryResolver, Inject, Injectable, Injector, NgZone, } from "@angular/core"; @Injectable({ providedIn: "root" }) export class AppOverlay extends Overlay { constructor( /** Scrolling strategies that can be used when creating an overlay. */ scrollStrategies: ScrollStrategyOptions, _overlayContainer: OverlayContainer, _componentFactoryResolver: ComponentFactoryResolver, _positionBuilder: OverlayPositionBuilder, _keyboardDispatcher: OverlayKeyboardDispatcher, _injector: Injector, _ngZone: NgZone, @Inject(DOCUMENT) _document: any, _directionality: Directionality, _location: Location ) { super( scrollStrategies, _overlayContainer, _componentFactoryResolver, _positionBuilder, _keyboardDispatcher, _injector, _ngZone, _document, _directionality, _location ); } private getOverlayPanelClasses(config: OverlayConfig) { let classes = ["<%=project%>"]; if (config && config.panelClass) { if (isArray(config.panelClass)) { classes = classes.concat(config.panelClass); } else { classes.push(config.panelClass as string); } } return classes; } create(config?: OverlayConfig): OverlayRef { const overlayConfig: OverlayConfig = { ...config, panelClass: this.getOverlayPanelClasses(config), }; const overlayRef = super.create(overlayConfig); overlayRef.addPanelClass(overlayConfig.panelClass); return overlayRef; } } function baseGetTag(value: any) { const objectProto = Object.prototype; const hasOwnProperty = objectProto.hasOwnProperty; const toString = objectProto.toString; const symToStringTag = typeof Symbol !== "undefined" ? Symbol.toStringTag : undefined; if (value == null) { return value === undefined ? "[object Undefined]" : "[object Null]"; } if (!(symToStringTag && symToStringTag in Object(value))) { return toString.call(value); } const isOwn = hasOwnProperty.call(value, symToStringTag); const tag = value[symToStringTag]; let unmasked = false; try { value[symToStringTag] = undefined; unmasked = true; } catch (e) {} const result = toString.call(value); if (unmasked) { if (isOwn) { value[symToStringTag] = tag; } else { delete value[symToStringTag]; } } return result; } export function isArray(value: any): boolean { return value && baseGetTag(value) === "[object Array]"; }