UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

57 lines 9.26 kB
import { Pipe, SecurityContext } from '@angular/core'; import { DomSanitizer } from '@angular/platform-browser'; import { from, of } from 'rxjs'; import { catchError, map } from 'rxjs/operators'; import * as i0 from "@angular/core"; import * as i1 from "@angular/platform-browser"; export class MarkdownToHtmlPipe { constructor(sanitizer) { this.sanitizer = sanitizer; } transform(markdown, args) { return markdown ? from(import('marked')).pipe(map(marked => { const renderer = new marked.Renderer(); const baseUrl = args?.baseUrl || ''; if (baseUrl) { const originalRendererImage = renderer.image; renderer.image = image => { const { href } = image; image.href = baseUrl + href; return originalRendererImage.call(renderer, image); }; } const anchorWithAttributes = `<a target="_blank" rel="noreferrer noopener nofollow" `; const originalRendererLink = renderer.link; renderer.link = link => { const { href } = link; const { hostname, protocol } = window.location; const localLink = href.startsWith(`${protocol}//${hostname}`); const html = originalRendererLink.call(renderer, link); return localLink ? html : html.replace(/^<a /, anchorWithAttributes); }; const originalRendererHtml = renderer.html; renderer.html = html => { const anchorWithAttributes = `<a target="_blank" rel="noreferrer noopener nofollow" `; html.text = html.text.replace(/<a /, anchorWithAttributes); html.raw = html.raw.replace(/<a /, anchorWithAttributes); return originalRendererHtml.call(renderer, html); }; return marked.parse(markdown, { renderer }); }), map(html => this.sanitizer.sanitize(SecurityContext.HTML, html)), catchError(e => { console.warn(e); return of('<p>Failed to process markdown file.</p>'); })) : of(''); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MarkdownToHtmlPipe, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe }); } static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: MarkdownToHtmlPipe, isStandalone: true, name: "markdownToHtml" }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MarkdownToHtmlPipe, decorators: [{ type: Pipe, args: [{ name: 'markdownToHtml', standalone: true }] }], ctorParameters: () => [{ type: i1.DomSanitizer }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24tdG8taHRtbC5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9jb21tb24vbWFya2Rvd24tdG8taHRtbC5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLElBQUksRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBTWpELE1BQU0sT0FBTyxrQkFBa0I7SUFDN0IsWUFBb0IsU0FBdUI7UUFBdkIsY0FBUyxHQUFULFNBQVMsQ0FBYztJQUFHLENBQUM7SUFFL0MsU0FBUyxDQUFDLFFBQWdCLEVBQUUsSUFBMEI7UUFDcEQsT0FBTyxRQUFRO1lBQ2IsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3pCLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDWCxNQUFNLFFBQVEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDdkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUM7Z0JBQ3BDLElBQUksT0FBTyxFQUFFLENBQUM7b0JBQ1osTUFBTSxxQkFBcUIsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO29CQUM3QyxRQUFRLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxFQUFFO3dCQUN2QixNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDO3dCQUN2QixLQUFLLENBQUMsSUFBSSxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUM7d0JBQzVCLE9BQU8scUJBQXFCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDckQsQ0FBQyxDQUFDO2dCQUNKLENBQUM7Z0JBQ0QsTUFBTSxvQkFBb0IsR0FBRyx3REFBd0QsQ0FBQztnQkFFdEYsTUFBTSxvQkFBb0IsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUMzQyxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFO29CQUNyQixNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDO29CQUN0QixNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7b0JBQy9DLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUMsQ0FBQztvQkFDOUQsTUFBTSxJQUFJLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDdkQsT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztnQkFDdkUsQ0FBQyxDQUFDO2dCQUVGLE1BQU0sb0JBQW9CLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFDM0MsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRTtvQkFDckIsTUFBTSxvQkFBb0IsR0FBRyx3REFBd0QsQ0FBQztvQkFDdEYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztvQkFDM0QsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztvQkFDekQsT0FBTyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNuRCxDQUFDLENBQUM7Z0JBQ0YsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDOUMsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUNoRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2IsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEIsT0FBTyxFQUFFLENBQUMseUNBQXlDLENBQUMsQ0FBQztZQUN2RCxDQUFDLENBQUMsQ0FDSDtZQUNILENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDYixDQUFDOytHQTVDVSxrQkFBa0I7NkdBQWxCLGtCQUFrQjs7NEZBQWxCLGtCQUFrQjtrQkFKOUIsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsZ0JBQWdCO29CQUN0QixVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtLCBTZWN1cml0eUNvbnRleHQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgZnJvbSwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQFBpcGUoe1xuICBuYW1lOiAnbWFya2Rvd25Ub0h0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIE1hcmtkb3duVG9IdG1sUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyKSB7fVxuXG4gIHRyYW5zZm9ybShtYXJrZG93bjogc3RyaW5nLCBhcmdzPzogeyBiYXNlVXJsOiBzdHJpbmcgfSk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG1hcmtkb3duXG4gICAgICA/IGZyb20oaW1wb3J0KCdtYXJrZWQnKSkucGlwZShcbiAgICAgICAgICBtYXAobWFya2VkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcmVyID0gbmV3IG1hcmtlZC5SZW5kZXJlcigpO1xuICAgICAgICAgICAgY29uc3QgYmFzZVVybCA9IGFyZ3M/LmJhc2VVcmwgfHwgJyc7XG4gICAgICAgICAgICBpZiAoYmFzZVVybCkge1xuICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbFJlbmRlcmVySW1hZ2UgPSByZW5kZXJlci5pbWFnZTtcbiAgICAgICAgICAgICAgcmVuZGVyZXIuaW1hZ2UgPSBpbWFnZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBocmVmIH0gPSBpbWFnZTtcbiAgICAgICAgICAgICAgICBpbWFnZS5ocmVmID0gYmFzZVVybCArIGhyZWY7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVuZGVyZXJJbWFnZS5jYWxsKHJlbmRlcmVyLCBpbWFnZSk7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhbmNob3JXaXRoQXR0cmlidXRlcyA9IGA8YSB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub3JlZmVycmVyIG5vb3BlbmVyIG5vZm9sbG93XCIgYDtcblxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxSZW5kZXJlckxpbmsgPSByZW5kZXJlci5saW5rO1xuICAgICAgICAgICAgcmVuZGVyZXIubGluayA9IGxpbmsgPT4ge1xuICAgICAgICAgICAgICBjb25zdCB7IGhyZWYgfSA9IGxpbms7XG4gICAgICAgICAgICAgIGNvbnN0IHsgaG9zdG5hbWUsIHByb3RvY29sIH0gPSB3aW5kb3cubG9jYXRpb247XG4gICAgICAgICAgICAgIGNvbnN0IGxvY2FsTGluayA9IGhyZWYuc3RhcnRzV2l0aChgJHtwcm90b2NvbH0vLyR7aG9zdG5hbWV9YCk7XG4gICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBvcmlnaW5hbFJlbmRlcmVyTGluay5jYWxsKHJlbmRlcmVyLCBsaW5rKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsTGluayA/IGh0bWwgOiBodG1sLnJlcGxhY2UoL148YSAvLCBhbmNob3JXaXRoQXR0cmlidXRlcyk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbFJlbmRlcmVySHRtbCA9IHJlbmRlcmVyLmh0bWw7XG4gICAgICAgICAgICByZW5kZXJlci5odG1sID0gaHRtbCA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGFuY2hvcldpdGhBdHRyaWJ1dGVzID0gYDxhIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vcmVmZXJyZXIgbm9vcGVuZXIgbm9mb2xsb3dcIiBgO1xuICAgICAgICAgICAgICBodG1sLnRleHQgPSBodG1sLnRleHQucmVwbGFjZSgvPGEgLywgYW5jaG9yV2l0aEF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgICBodG1sLnJhdyA9IGh0bWwucmF3LnJlcGxhY2UoLzxhIC8sIGFuY2hvcldpdGhBdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVuZGVyZXJIdG1sLmNhbGwocmVuZGVyZXIsIGh0bWwpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBtYXJrZWQucGFyc2UobWFya2Rvd24sIHsgcmVuZGVyZXIgfSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgbWFwKGh0bWwgPT4gdGhpcy5zYW5pdGl6ZXIuc2FuaXRpemUoU2VjdXJpdHlDb250ZXh0LkhUTUwsIGh0bWwpKSxcbiAgICAgICAgICBjYXRjaEVycm9yKGUgPT4ge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGUpO1xuICAgICAgICAgICAgcmV0dXJuIG9mKCc8cD5GYWlsZWQgdG8gcHJvY2VzcyBtYXJrZG93biBmaWxlLjwvcD4nKTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICA6IG9mKCcnKTtcbiAgfVxufVxuIl19