UNPKG

@angular/common

Version:

Angular - commonly needed directives and services

1 lines 11.4 kB
{"version":3,"file":"_platform_location-chunk.mjs","sources":["../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/common/src/dom_adapter.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/common/src/location/platform_location.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nlet _DOM: DomAdapter = null!;\n\nexport function getDOM(): DomAdapter {\n return _DOM;\n}\n\nexport function setRootDomAdapter(adapter: DomAdapter) {\n _DOM ??= adapter;\n}\n\n/**\n * Provides DOM operations in an environment-agnostic way.\n *\n * @security Tread carefully! Interacting with the DOM directly is dangerous and\n * can introduce XSS risks.\n */\nexport abstract class DomAdapter {\n // Needs Domino-friendly test utility\n abstract dispatchEvent(el: any, evt: any): any;\n abstract readonly supportsDOMEvents: boolean;\n\n // Used by Meta\n abstract remove(el: any): void;\n abstract createElement(tagName: any, doc?: any): HTMLElement;\n abstract createHtmlDocument(): Document;\n abstract getDefaultDocument(): Document;\n\n // Used by By.css\n abstract isElementNode(node: any): boolean;\n\n // Used by Testability\n abstract isShadowRoot(node: any): boolean;\n\n // Used by KeyEventsPlugin\n abstract onAndCancel(el: any, evt: any, listener: any, options?: any): Function;\n\n // Used by PlatformLocation and ServerEventManagerPlugin\n abstract getGlobalEventTarget(doc: Document, target: string): any;\n\n // Used by PlatformLocation\n abstract getBaseHref(doc: Document): string | null;\n abstract resetBaseElement(): void;\n\n // TODO: remove dependency in DefaultValueAccessor\n abstract getUserAgent(): string;\n\n // Used in the legacy @angular/http package which has some usage in g3.\n abstract getCookie(name: string): string | null;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {inject, Injectable, InjectionToken, DOCUMENT} from '@angular/core';\n\nimport {getDOM} from '../dom_adapter';\n\n/**\n * This class should not be used directly by an application developer. Instead, use\n * {@link Location}.\n *\n * `PlatformLocation` encapsulates all calls to DOM APIs, which allows the Router to be\n * platform-agnostic.\n * This means that we can have different implementation of `PlatformLocation` for the different\n * platforms that Angular supports. For example, `@angular/platform-browser` provides an\n * implementation specific to the browser environment, while `@angular/platform-server` provides\n * one suitable for use with server-side rendering.\n *\n * The `PlatformLocation` class is used directly by all implementations of {@link LocationStrategy}\n * when they need to interact with the DOM APIs like pushState, popState, etc.\n *\n * {@link LocationStrategy} in turn is used by the {@link Location} service which is used directly\n * by the {@link /api/router/Router Router} in order to navigate between routes. Since all interactions between\n * {@link /api/router/Router Router} /\n * {@link Location} / {@link LocationStrategy} and DOM APIs flow through the `PlatformLocation`\n * class, they are all platform-agnostic.\n *\n * @publicApi\n */\n@Injectable({providedIn: 'platform', useFactory: () => inject(BrowserPlatformLocation)})\nexport abstract class PlatformLocation {\n abstract getBaseHrefFromDOM(): string;\n abstract getState(): unknown;\n /**\n * Returns a function that, when executed, removes the `popstate` event handler.\n */\n abstract onPopState(fn: LocationChangeListener): VoidFunction;\n /**\n * Returns a function that, when executed, removes the `hashchange` event handler.\n */\n abstract onHashChange(fn: LocationChangeListener): VoidFunction;\n\n abstract get href(): string;\n abstract get protocol(): string;\n abstract get hostname(): string;\n abstract get port(): string;\n abstract get pathname(): string;\n abstract get search(): string;\n abstract get hash(): string;\n\n abstract replaceState(state: any, title: string, url: string): void;\n\n abstract pushState(state: any, title: string, url: string): void;\n\n abstract forward(): void;\n\n abstract back(): void;\n\n historyGo?(relativePosition: number): void {\n throw new Error(ngDevMode ? 'Not implemented' : '');\n }\n}\n\n/**\n * @description\n * Indicates when a location is initialized.\n *\n * @publicApi\n */\nexport const LOCATION_INITIALIZED = new InjectionToken<Promise<any>>(\n typeof ngDevMode !== 'undefined' && ngDevMode ? 'Location Initialized' : '',\n);\n\n/**\n * @description\n * A serializable version of the event from `onPopState` or `onHashChange`\n *\n * @publicApi\n */\nexport interface LocationChangeEvent {\n type: string;\n state: any;\n}\n\n/**\n * @publicApi\n */\nexport interface LocationChangeListener {\n (event: LocationChangeEvent): any;\n}\n\n/**\n * `PlatformLocation` encapsulates all of the direct calls to platform APIs.\n * This class should not be used directly by an application developer. Instead, use\n * {@link Location}.\n *\n * @publicApi\n */\n@Injectable({\n providedIn: 'platform',\n useFactory: () => new BrowserPlatformLocation(),\n})\nexport class BrowserPlatformLocation extends PlatformLocation {\n private _location: Location;\n private _history: History;\n private _doc = inject(DOCUMENT);\n\n constructor() {\n super();\n this._location = window.location;\n this._history = window.history;\n }\n\n override getBaseHrefFromDOM(): string {\n return getDOM().getBaseHref(this._doc)!;\n }\n\n override onPopState(fn: LocationChangeListener): VoidFunction {\n const window = getDOM().getGlobalEventTarget(this._doc, 'window');\n window.addEventListener('popstate', fn, false);\n return () => window.removeEventListener('popstate', fn);\n }\n\n override onHashChange(fn: LocationChangeListener): VoidFunction {\n const window = getDOM().getGlobalEventTarget(this._doc, 'window');\n window.addEventListener('hashchange', fn, false);\n return () => window.removeEventListener('hashchange', fn);\n }\n\n override get href(): string {\n return this._location.href;\n }\n override get protocol(): string {\n return this._location.protocol;\n }\n override get hostname(): string {\n return this._location.hostname;\n }\n override get port(): string {\n return this._location.port;\n }\n override get pathname(): string {\n return this._location.pathname;\n }\n override get search(): string {\n return this._location.search;\n }\n override get hash(): string {\n return this._location.hash;\n }\n override set pathname(newPath: string) {\n this._location.pathname = newPath;\n }\n\n override pushState(state: any, title: string, url: string): void {\n this._history.pushState(state, title, url);\n }\n\n override replaceState(state: any, title: string, url: string): void {\n this._history.replaceState(state, title, url);\n }\n\n override forward(): void {\n this._history.forward();\n }\n\n override back(): void {\n this._history.back();\n }\n\n override historyGo(relativePosition: number = 0): void {\n this._history.go(relativePosition);\n }\n\n override getState(): unknown {\n return this._history.state;\n }\n}\n"],"names":["_DOM","getDOM","setRootDomAdapter","adapter","DomAdapter","PlatformLocation","historyGo","relativePosition","Error","ngDevMode","deps","target","i0","ɵɵFactoryTarget","Injectable","providedIn","useFactory","inject","BrowserPlatformLocation","decorators","args","LOCATION_INITIALIZED","InjectionToken","_location","_history","_doc","DOCUMENT","constructor","window","location","history","getBaseHrefFromDOM","getBaseHref","onPopState","fn","getGlobalEventTarget","addEventListener","removeEventListener","onHashChange","href","protocol","hostname","port","pathname","search","hash","newPath","pushState","state","title","url","replaceState","forward","back","go","getState"],"mappings":"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"}