UNPKG

ngx-transloco-markup-router-link

Version:
73 lines 10.4 kB
import { Injectable } from '@angular/core'; import { isRouterLink } from './router-link.model'; import * as i0 from "@angular/core"; import * as i1 from "@angular/router"; import * as i2 from "@angular/common"; /** * An implementation of `LinkRenderer` that supports the rendering of `RouterLink` values: links that target an (internal) Angular route. */ export class RouterLinkRenderer { constructor(router, locationStrategy) { this.router = router; this.locationStrategy = locationStrategy; } /** * @inheritdoc */ supports(link) { return isRouterLink(link); } /** * @inheritdoc */ render(link, targetElement) { this.setAnchorElementHref(targetElement, link); this.setAnchorElementTarget(targetElement, link); this.setAnchorElementClickHandler(targetElement, link); } setAnchorElementHref(anchorElement, link) { anchorElement.href = this.getRouterLinkTargetUrl(link); } setAnchorElementTarget(anchorElement, link) { if (link.target !== undefined) { anchorElement.target = link.target; } } setAnchorElementClickHandler(anchorElement, link) { anchorElement.addEventListener('click', (clickEvent) => { const useDefaultClickHandling = clickEventTargetsDifferentWindow(clickEvent) || routerLinkTargetsDifferentWindow(link); if (!useDefaultClickHandling) { clickEvent.preventDefault(); this.navigateTo(link); } }); } navigateTo(link) { this.router.navigateByUrl(this.convertRouterLinkToUrlTree(link), link); } getRouterLinkTargetUrl(link) { const urlTree = this.convertRouterLinkToUrlTree(link); const serializedUrl = this.router.serializeUrl(urlTree); return this.locationStrategy.prepareExternalUrl(serializedUrl); } convertRouterLinkToUrlTree(link) { const navigationCommands = getRouterLinkNavigationCommands(link); return this.router.createUrlTree(navigationCommands, link); } } RouterLinkRenderer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: RouterLinkRenderer, deps: [{ token: i1.Router }, { token: i2.LocationStrategy }], target: i0.ɵɵFactoryTarget.Injectable }); RouterLinkRenderer.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: RouterLinkRenderer }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: RouterLinkRenderer, decorators: [{ type: Injectable }], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.LocationStrategy }]; } }); function getRouterLinkNavigationCommands(link) { return Array.isArray(link.route) ? link.route : [link.route]; } function clickEventTargetsDifferentWindow(clickEvent) { return clickEvent.button !== 0 || clickEvent.ctrlKey || clickEvent.metaKey || clickEvent.shiftKey; } function routerLinkTargetsDifferentWindow(link) { return link.target !== undefined && link.target !== '_self'; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLWxpbmstcmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvc3JjL3JvdXRlci1saW5rLXJlbmRlcmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJM0MsT0FBTyxFQUFpQyxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7OztBQUVsRjs7R0FFRztBQUVILE1BQU0sT0FBTyxrQkFBa0I7SUFDM0IsWUFDcUIsTUFBYyxFQUNkLGdCQUFrQztRQURsQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtJQUNwRCxDQUFDO0lBRUo7O09BRUc7SUFDSSxRQUFRLENBQUMsSUFBYTtRQUN6QixPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsSUFBZ0IsRUFBRSxhQUFnQztRQUM1RCxJQUFJLENBQUMsb0JBQW9CLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLDRCQUE0QixDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRU8sb0JBQW9CLENBQUMsYUFBZ0MsRUFBRSxJQUFnQjtRQUMzRSxhQUFhLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRU8sc0JBQXNCLENBQUMsYUFBZ0MsRUFBRSxJQUFnQjtRQUM3RSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO1lBQzNCLGFBQWEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUN0QztJQUNMLENBQUM7SUFFTyw0QkFBNEIsQ0FBQyxhQUFnQyxFQUFFLElBQWdCO1FBQ25GLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUNuRCxNQUFNLHVCQUF1QixHQUN6QixnQ0FBZ0MsQ0FBQyxVQUFVLENBQUM7Z0JBQzVDLGdDQUFnQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRTNDLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtnQkFDMUIsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3pCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sVUFBVSxDQUFDLElBQWdCO1FBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRU8sc0JBQXNCLENBQUMsSUFBZ0I7UUFDM0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXhELE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFTywwQkFBMEIsQ0FBQyxJQUFnQjtRQUMvQyxNQUFNLGtCQUFrQixHQUFHLCtCQUErQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWpFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0QsQ0FBQzs7K0dBNURRLGtCQUFrQjttSEFBbEIsa0JBQWtCOzJGQUFsQixrQkFBa0I7a0JBRDlCLFVBQVU7O0FBZ0VYLFNBQVMsK0JBQStCLENBQUMsSUFBZ0I7SUFDckQsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakUsQ0FBQztBQUVELFNBQVMsZ0NBQWdDLENBQUMsVUFBc0I7SUFDNUQsT0FBTyxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxVQUFVLENBQUMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQztBQUN0RyxDQUFDO0FBRUQsU0FBUyxnQ0FBZ0MsQ0FBQyxJQUFnQjtJQUN0RCxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssT0FBTyxDQUFDO0FBQ2hFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2NhdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciwgVXJsVHJlZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBMaW5rUmVuZGVyZXIgfSBmcm9tICduZ3gtdHJhbnNsb2NvLW1hcmt1cCc7XG5cbmltcG9ydCB7IE5hdmlnYXRpb25Db21tYW5kLCBSb3V0ZXJMaW5rLCBpc1JvdXRlckxpbmsgfSBmcm9tICcuL3JvdXRlci1saW5rLm1vZGVsJztcblxuLyoqXG4gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiBgTGlua1JlbmRlcmVyYCB0aGF0IHN1cHBvcnRzIHRoZSByZW5kZXJpbmcgb2YgYFJvdXRlckxpbmtgIHZhbHVlczogbGlua3MgdGhhdCB0YXJnZXQgYW4gKGludGVybmFsKSBBbmd1bGFyIHJvdXRlLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUm91dGVyTGlua1JlbmRlcmVyIGltcGxlbWVudHMgTGlua1JlbmRlcmVyPFJvdXRlckxpbms+IHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBsb2NhdGlvblN0cmF0ZWd5OiBMb2NhdGlvblN0cmF0ZWd5LFxuICAgICkge31cblxuICAgIC8qKlxuICAgICAqIEBpbmhlcml0ZG9jXG4gICAgICovXG4gICAgcHVibGljIHN1cHBvcnRzKGxpbms6IHVua25vd24pOiBsaW5rIGlzIFJvdXRlckxpbmsge1xuICAgICAgICByZXR1cm4gaXNSb3V0ZXJMaW5rKGxpbmspO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBpbmhlcml0ZG9jXG4gICAgICovXG4gICAgcHVibGljIHJlbmRlcihsaW5rOiBSb3V0ZXJMaW5rLCB0YXJnZXRFbGVtZW50OiBIVE1MQW5jaG9yRWxlbWVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldEFuY2hvckVsZW1lbnRIcmVmKHRhcmdldEVsZW1lbnQsIGxpbmspO1xuICAgICAgICB0aGlzLnNldEFuY2hvckVsZW1lbnRUYXJnZXQodGFyZ2V0RWxlbWVudCwgbGluayk7XG4gICAgICAgIHRoaXMuc2V0QW5jaG9yRWxlbWVudENsaWNrSGFuZGxlcih0YXJnZXRFbGVtZW50LCBsaW5rKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEFuY2hvckVsZW1lbnRIcmVmKGFuY2hvckVsZW1lbnQ6IEhUTUxBbmNob3JFbGVtZW50LCBsaW5rOiBSb3V0ZXJMaW5rKTogdm9pZCB7XG4gICAgICAgIGFuY2hvckVsZW1lbnQuaHJlZiA9IHRoaXMuZ2V0Um91dGVyTGlua1RhcmdldFVybChsaW5rKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEFuY2hvckVsZW1lbnRUYXJnZXQoYW5jaG9yRWxlbWVudDogSFRNTEFuY2hvckVsZW1lbnQsIGxpbms6IFJvdXRlckxpbmspOiB2b2lkIHtcbiAgICAgICAgaWYgKGxpbmsudGFyZ2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFuY2hvckVsZW1lbnQudGFyZ2V0ID0gbGluay50YXJnZXQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEFuY2hvckVsZW1lbnRDbGlja0hhbmRsZXIoYW5jaG9yRWxlbWVudDogSFRNTEFuY2hvckVsZW1lbnQsIGxpbms6IFJvdXRlckxpbmspOiB2b2lkIHtcbiAgICAgICAgYW5jaG9yRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChjbGlja0V2ZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB1c2VEZWZhdWx0Q2xpY2tIYW5kbGluZyA9XG4gICAgICAgICAgICAgICAgY2xpY2tFdmVudFRhcmdldHNEaWZmZXJlbnRXaW5kb3coY2xpY2tFdmVudCkgfHxcbiAgICAgICAgICAgICAgICByb3V0ZXJMaW5rVGFyZ2V0c0RpZmZlcmVudFdpbmRvdyhsaW5rKTtcblxuICAgICAgICAgICAgaWYgKCF1c2VEZWZhdWx0Q2xpY2tIYW5kbGluZykge1xuICAgICAgICAgICAgICAgIGNsaWNrRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRlVG8obGluayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgbmF2aWdhdGVUbyhsaW5rOiBSb3V0ZXJMaW5rKTogdm9pZCB7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy5jb252ZXJ0Um91dGVyTGlua1RvVXJsVHJlZShsaW5rKSwgbGluayk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSb3V0ZXJMaW5rVGFyZ2V0VXJsKGxpbms6IFJvdXRlckxpbmspOiBzdHJpbmcge1xuICAgICAgICBjb25zdCB1cmxUcmVlID0gdGhpcy5jb252ZXJ0Um91dGVyTGlua1RvVXJsVHJlZShsaW5rKTtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZFVybCA9IHRoaXMucm91dGVyLnNlcmlhbGl6ZVVybCh1cmxUcmVlKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5sb2NhdGlvblN0cmF0ZWd5LnByZXBhcmVFeHRlcm5hbFVybChzZXJpYWxpemVkVXJsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnZlcnRSb3V0ZXJMaW5rVG9VcmxUcmVlKGxpbms6IFJvdXRlckxpbmspOiBVcmxUcmVlIHtcbiAgICAgICAgY29uc3QgbmF2aWdhdGlvbkNvbW1hbmRzID0gZ2V0Um91dGVyTGlua05hdmlnYXRpb25Db21tYW5kcyhsaW5rKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZShuYXZpZ2F0aW9uQ29tbWFuZHMsIGxpbmspO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0Um91dGVyTGlua05hdmlnYXRpb25Db21tYW5kcyhsaW5rOiBSb3V0ZXJMaW5rKTogTmF2aWdhdGlvbkNvbW1hbmRbXSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkobGluay5yb3V0ZSkgPyBsaW5rLnJvdXRlIDogW2xpbmsucm91dGVdO1xufVxuXG5mdW5jdGlvbiBjbGlja0V2ZW50VGFyZ2V0c0RpZmZlcmVudFdpbmRvdyhjbGlja0V2ZW50OiBNb3VzZUV2ZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNsaWNrRXZlbnQuYnV0dG9uICE9PSAwIHx8IGNsaWNrRXZlbnQuY3RybEtleSB8fCBjbGlja0V2ZW50Lm1ldGFLZXkgfHwgY2xpY2tFdmVudC5zaGlmdEtleTtcbn1cblxuZnVuY3Rpb24gcm91dGVyTGlua1RhcmdldHNEaWZmZXJlbnRXaW5kb3cobGluazogUm91dGVyTGluayk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBsaW5rLnRhcmdldCAhPT0gdW5kZWZpbmVkICYmIGxpbmsudGFyZ2V0ICE9PSAnX3NlbGYnO1xufVxuIl19