@cisstech/nge
Version:
NG Essentials is a collection of libraries for Angular developers.
55 lines • 7.17 kB
JavaScript
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=