UNPKG

@spartacus/storefront

Version:

Spartacus Storefront is a package that you can include in your application, which allows you to add default storefront features.

43 lines 6.04 kB
import { Pipe } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "@spartacus/core"; /* * Supplements the anchor links that contain only the hash fragment in the `href` attribute, * (e.g. `<a href="#someId">`), by prepending the current location (path and query params), * so it becomes a link to a full url * e.g. `<a href="https://domain.com/current/path?and=query-params#someId">`. * * This helps to avoid the undesirable navigation to the homepage URL (`/#someId`) * when clicking the original link. * * It's useful for example for cms-provided content passed to the [innerHTML] directive. */ export class SupplementHashAnchorsPipe { constructor(renderer, winRef) { this.renderer = renderer; this.winRef = winRef; } getPath(anchorId) { const currentUrlWithoutFragment = this.winRef.location.href.replace(/#.*$/, ''); return `${currentUrlWithoutFragment}${anchorId}`; } transform(html) { const template = this.renderer.createElement('template'); template.innerHTML = html.trim(); const linkNodes = template.content.querySelectorAll('a'); Array.from(linkNodes).forEach((link) => { const href = link.getAttribute('href'); if ((href === null || href === void 0 ? void 0 : href.indexOf('#')) === 0) { this.renderer.setProperty(link, 'href', this.getPath(href)); } }); return template.innerHTML; } } SupplementHashAnchorsPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: SupplementHashAnchorsPipe, deps: [{ token: i0.Renderer2 }, { token: i1.WindowRef }], target: i0.ɵɵFactoryTarget.Pipe }); SupplementHashAnchorsPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: SupplementHashAnchorsPipe, name: "cxSupplementHashAnchors" }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: SupplementHashAnchorsPipe, decorators: [{ type: Pipe, args: [{ name: 'cxSupplementHashAnchors' }] }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i1.WindowRef }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwcGxlbWVudC1oYXNoLWFuY2hvcnMucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0b3JlZnJvbnRsaWIvc2hhcmVkL3BpcGVzL3N1cGxlbWVudC1oYXNoLWFuY2hvcnMvc3VwcGxlbWVudC1oYXNoLWFuY2hvcnMucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUE0QixNQUFNLGVBQWUsQ0FBQzs7O0FBRy9EOzs7Ozs7Ozs7O0dBVUc7QUFFSCxNQUFNLE9BQU8seUJBQXlCO0lBQ3BDLFlBQXNCLFFBQW1CLEVBQVksTUFBaUI7UUFBaEQsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUFZLFdBQU0sR0FBTixNQUFNLENBQVc7SUFBRyxDQUFDO0lBRWhFLE9BQU8sQ0FBQyxRQUFnQjtRQUNoQyxNQUFNLHlCQUF5QixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQ2pFLE1BQU0sRUFDTixFQUFFLENBQ0gsQ0FBQztRQUNGLE9BQU8sR0FBRyx5QkFBeUIsR0FBRyxRQUFRLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBRU0sU0FBUyxDQUFDLElBQVk7UUFDM0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekQsUUFBUSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakMsTUFBTSxTQUFTLEdBQWEsUUFBUSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVuRSxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQXVCLEVBQUUsRUFBRTtZQUN4RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFLLENBQUMsRUFBRTtnQkFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDN0Q7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sUUFBUSxDQUFDLFNBQVMsQ0FBQztJQUM1QixDQUFDOztzSEF2QlUseUJBQXlCO29IQUF6Qix5QkFBeUI7MkZBQXpCLHlCQUF5QjtrQkFEckMsSUFBSTttQkFBQyxFQUFFLElBQUksRUFBRSx5QkFBeUIsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0sIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgV2luZG93UmVmIH0gZnJvbSAnQHNwYXJ0YWN1cy9jb3JlJztcblxuLypcbiAqIFN1cHBsZW1lbnRzIHRoZSBhbmNob3IgbGlua3MgdGhhdCBjb250YWluIG9ubHkgdGhlIGhhc2ggZnJhZ21lbnQgaW4gdGhlIGBocmVmYCBhdHRyaWJ1dGUsXG4gKiAoZS5nLiBgPGEgaHJlZj1cIiNzb21lSWRcIj5gKSwgYnkgcHJlcGVuZGluZyB0aGUgY3VycmVudCBsb2NhdGlvbiAocGF0aCBhbmQgcXVlcnkgcGFyYW1zKSxcbiAqIHNvIGl0IGJlY29tZXMgYSBsaW5rIHRvIGEgZnVsbCB1cmxcbiAqIGUuZy4gYDxhIGhyZWY9XCJodHRwczovL2RvbWFpbi5jb20vY3VycmVudC9wYXRoP2FuZD1xdWVyeS1wYXJhbXMjc29tZUlkXCI+YC5cbiAqXG4gKiBUaGlzIGhlbHBzIHRvIGF2b2lkIHRoZSB1bmRlc2lyYWJsZSBuYXZpZ2F0aW9uIHRvIHRoZSBob21lcGFnZSBVUkwgKGAvI3NvbWVJZGApXG4gKiB3aGVuIGNsaWNraW5nIHRoZSBvcmlnaW5hbCBsaW5rLlxuICpcbiAqIEl0J3MgdXNlZnVsIGZvciBleGFtcGxlIGZvciBjbXMtcHJvdmlkZWQgY29udGVudCBwYXNzZWQgdG8gdGhlIFtpbm5lckhUTUxdIGRpcmVjdGl2ZS5cbiAqL1xuQFBpcGUoeyBuYW1lOiAnY3hTdXBwbGVtZW50SGFzaEFuY2hvcnMnIH0pXG5leHBvcnQgY2xhc3MgU3VwcGxlbWVudEhhc2hBbmNob3JzUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJvdGVjdGVkIHdpblJlZjogV2luZG93UmVmKSB7fVxuXG4gIHByb3RlY3RlZCBnZXRQYXRoKGFuY2hvcklkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGN1cnJlbnRVcmxXaXRob3V0RnJhZ21lbnQgPSB0aGlzLndpblJlZi5sb2NhdGlvbi5ocmVmLnJlcGxhY2UoXG4gICAgICAvIy4qJC8sXG4gICAgICAnJ1xuICAgICk7XG4gICAgcmV0dXJuIGAke2N1cnJlbnRVcmxXaXRob3V0RnJhZ21lbnR9JHthbmNob3JJZH1gO1xuICB9XG5cbiAgcHVibGljIHRyYW5zZm9ybShodG1sOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCd0ZW1wbGF0ZScpO1xuICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGh0bWwudHJpbSgpO1xuICAgIGNvbnN0IGxpbmtOb2RlczogTm9kZUxpc3QgPSB0ZW1wbGF0ZS5jb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2EnKTtcblxuICAgIEFycmF5LmZyb20obGlua05vZGVzKS5mb3JFYWNoKChsaW5rOiBIVE1MQW5jaG9yRWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgaHJlZiA9IGxpbmsuZ2V0QXR0cmlidXRlKCdocmVmJyk7XG4gICAgICBpZiAoaHJlZj8uaW5kZXhPZignIycpID09PSAwKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkobGluaywgJ2hyZWYnLCB0aGlzLmdldFBhdGgoaHJlZikpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0ZW1wbGF0ZS5pbm5lckhUTUw7XG4gIH1cbn1cbiJdfQ==