UNPKG

@cisstech/nge

Version:

NG Essentials is a collection of libraries for Angular developers.

55 lines 7.17 kB
import { Injectable } from '@angular/core'; import { NGE_MARKDOWN_CONTRIBUTION } from '../nge-markdown-contribution'; import * as i0 from "@angular/core"; import * as i1 from "@angular/router"; import * as i2 from "@angular/common"; /** * Contribution to handle fragment navigation in anchor elements. */ export class NgeMarkdownLinkAnchor { constructor(router, location) { this.router = router; this.location = location; } contribute(transformer) { transformer.addRendererTransformer((renderer) => { renderer.link = (href, _, text) => { const attributes = new Map(); if (href.startsWith('#')) { href = this.location.path() + href; } attributes.set('href', href); // open in new tab if its a link external to the application const routes = (this.router.config || []).map((config) => { if (!config.path?.startsWith('/')) { return '/' + config.path; } return config.path; }); if (!routes.find((route) => href.startsWith(route))) { attributes.set('target', '_blank'); } return `<a ${Array.from(attributes.entries()) .map((entry) => { return entry[0] + '=' + entry[1]; }) .join(' ')}>${text}</a>`; }; return renderer; }); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: NgeMarkdownLinkAnchor, deps: [{ token: i1.Router }, { token: i2.Location }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: NgeMarkdownLinkAnchor }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: NgeMarkdownLinkAnchor, decorators: [{ type: Injectable }], ctorParameters: () => [{ type: i1.Router }, { type: i2.Location }] }); /** * Injection token to register `NgeMarkdownLinkAnchor` contribution. */ export const NgeMarkdownLinkAnchorProvider = { provide: NGE_MARKDOWN_CONTRIBUTION, multi: true, useClass: NgeMarkdownLinkAnchor, }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdlLW1hcmtkb3duLWxpbmstYW5jaG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmdlL21hcmtkb3duL3NyYy9jb250cmlidXRpb25zL25nZS1tYXJrZG93bi1saW5rLWFuY2hvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFBO0FBR3BELE9BQU8sRUFBMkIseUJBQXlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTs7OztBQUVqRzs7R0FFRztBQUVILE1BQU0sT0FBTyxxQkFBcUI7SUFDaEMsWUFDbUIsTUFBYyxFQUNkLFFBQWtCO1FBRGxCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxhQUFRLEdBQVIsUUFBUSxDQUFVO0lBQ2xDLENBQUM7SUFFSixVQUFVLENBQUMsV0FBbUM7UUFDNUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDOUMsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLElBQVksRUFBRSxDQUFTLEVBQUUsSUFBWSxFQUFFLEVBQUU7Z0JBQ3hELE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFBO2dCQUM1QyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDekIsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFBO2dCQUNwQyxDQUFDO2dCQUNELFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFBO2dCQUU1Qiw0REFBNEQ7Z0JBQzVELE1BQU0sTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7b0JBQ3ZELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO3dCQUNsQyxPQUFPLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFBO29CQUMxQixDQUFDO29CQUNELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQTtnQkFDcEIsQ0FBQyxDQUFDLENBQUE7Z0JBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNwRCxVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQTtnQkFDcEMsQ0FBQztnQkFFRCxPQUFPLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7cUJBQzFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUNiLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7Z0JBQ2xDLENBQUMsQ0FBQztxQkFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUE7WUFDNUIsQ0FBQyxDQUFBO1lBQ0QsT0FBTyxRQUFRLENBQUE7UUFDakIsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDOzhHQWxDVSxxQkFBcUI7a0hBQXJCLHFCQUFxQjs7MkZBQXJCLHFCQUFxQjtrQkFEakMsVUFBVTs7QUFzQ1g7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBYTtJQUNyRCxPQUFPLEVBQUUseUJBQXlCO0lBQ2xDLEtBQUssRUFBRSxJQUFJO0lBQ1gsUUFBUSxFQUFFLHFCQUFxQjtDQUNoQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInXG5pbXBvcnQgeyBOZ2VNYXJrZG93blRyYW5zZm9ybWVyIH0gZnJvbSAnLi4vbmdlLW1hcmtkb3duLXRyYW5zZm9ybWVyJ1xuaW1wb3J0IHsgTmdlTWFya2Rvd25Db250cmlidXRpb24sIE5HRV9NQVJLRE9XTl9DT05UUklCVVRJT04gfSBmcm9tICcuLi9uZ2UtbWFya2Rvd24tY29udHJpYnV0aW9uJ1xuXG4vKipcbiAqIENvbnRyaWJ1dGlvbiB0byBoYW5kbGUgZnJhZ21lbnQgbmF2aWdhdGlvbiBpbiBhbmNob3IgZWxlbWVudHMuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOZ2VNYXJrZG93bkxpbmtBbmNob3IgaW1wbGVtZW50cyBOZ2VNYXJrZG93bkNvbnRyaWJ1dGlvbiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2NhdGlvbjogTG9jYXRpb25cbiAgKSB7fVxuXG4gIGNvbnRyaWJ1dGUodHJhbnNmb3JtZXI6IE5nZU1hcmtkb3duVHJhbnNmb3JtZXIpIHtcbiAgICB0cmFuc2Zvcm1lci5hZGRSZW5kZXJlclRyYW5zZm9ybWVyKChyZW5kZXJlcikgPT4ge1xuICAgICAgcmVuZGVyZXIubGluayA9IChocmVmOiBzdHJpbmcsIF86IHN0cmluZywgdGV4dDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpXG4gICAgICAgIGlmIChocmVmLnN0YXJ0c1dpdGgoJyMnKSkge1xuICAgICAgICAgIGhyZWYgPSB0aGlzLmxvY2F0aW9uLnBhdGgoKSArIGhyZWZcbiAgICAgICAgfVxuICAgICAgICBhdHRyaWJ1dGVzLnNldCgnaHJlZicsIGhyZWYpXG5cbiAgICAgICAgLy8gb3BlbiBpbiBuZXcgdGFiIGlmIGl0cyBhIGxpbmsgZXh0ZXJuYWwgdG8gdGhlIGFwcGxpY2F0aW9uXG4gICAgICAgIGNvbnN0IHJvdXRlcyA9ICh0aGlzLnJvdXRlci5jb25maWcgfHwgW10pLm1hcCgoY29uZmlnKSA9PiB7XG4gICAgICAgICAgaWYgKCFjb25maWcucGF0aD8uc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgICAgICByZXR1cm4gJy8nICsgY29uZmlnLnBhdGhcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNvbmZpZy5wYXRoXG4gICAgICAgIH0pXG4gICAgICAgIGlmICghcm91dGVzLmZpbmQoKHJvdXRlKSA9PiBocmVmLnN0YXJ0c1dpdGgocm91dGUpKSkge1xuICAgICAgICAgIGF0dHJpYnV0ZXMuc2V0KCd0YXJnZXQnLCAnX2JsYW5rJylcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBgPGEgJHtBcnJheS5mcm9tKGF0dHJpYnV0ZXMuZW50cmllcygpKVxuICAgICAgICAgIC5tYXAoKGVudHJ5KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZW50cnlbMF0gKyAnPScgKyBlbnRyeVsxXVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmpvaW4oJyAnKX0+JHt0ZXh0fTwvYT5gXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVuZGVyZXJcbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogSW5qZWN0aW9uIHRva2VuIHRvIHJlZ2lzdGVyIGBOZ2VNYXJrZG93bkxpbmtBbmNob3JgIGNvbnRyaWJ1dGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IE5nZU1hcmtkb3duTGlua0FuY2hvclByb3ZpZGVyOiBQcm92aWRlciA9IHtcbiAgcHJvdmlkZTogTkdFX01BUktET1dOX0NPTlRSSUJVVElPTixcbiAgbXVsdGk6IHRydWUsXG4gIHVzZUNsYXNzOiBOZ2VNYXJrZG93bkxpbmtBbmNob3IsXG59XG4iXX0=