@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
JavaScript
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==