UNPKG

ngx-markdown-it

Version:

An Angular library that renders markdown using [markdown-it](https://github.com/markdown-it/markdown-it).

81 lines 8.57 kB
/* * @file ngx-markdown-it.component.ts * * @brief Component to render markdown to html * @author David Suárez * @date Mon, 21 Jun 20 19:45:15 +0200 * * @license * * ngx-markdown-it: angular markdown-it module * * Copyright (c) 2021 David Suárez * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * */ import { Component, EventEmitter, Input, Output } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "./ngx-markdown-it.service"; export class NgxMarkdownItComponent { element; markdownService; _markdown; ready = new EventEmitter(); set markdown(val) { this._markdown = val; this.render(this._markdown); } constructor(element, markdownService) { this.element = element; this.markdownService = markdownService; } ngAfterViewInit() { if (this._markdown == null) { this.render(this.element.nativeElement.innerHTML.trim()); return; } else { /* * This is probably done in markdown() setter, but because before the view is init, our component or parents ones * are not in a safe state, we should signal again. */ this.ready.emit(); return; } } render(markdown) { this.element.nativeElement.innerHTML = this.markdownService.render(markdown); this.ready.emit(); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: NgxMarkdownItComponent, deps: [{ token: i0.ElementRef }, { token: i1.NgxMarkdownItService }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: NgxMarkdownItComponent, selector: "markdown-it", inputs: { markdown: "markdown" }, outputs: { ready: "ready" }, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: NgxMarkdownItComponent, decorators: [{ type: Component, args: [{ selector: 'markdown-it', template: `<ng-content></ng-content>` }] }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.NgxMarkdownItService }]; }, propDecorators: { ready: [{ type: Output }], markdown: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW1hcmtkb3duLWl0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9uZ3gtbWFya2Rvd24taXQvc3JjL2xpYi9uZ3gtbWFya2Rvd24taXQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0NHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBaUIsWUFBWSxFQUFjLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQVNsRyxNQUFNLE9BQU8sc0JBQXNCO0lBYXhCO0lBQ0M7SUFaVixTQUFTLENBQXFCO0lBRXBCLEtBQUssR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBRTNDLElBQ0ksUUFBUSxDQUFDLEdBQVc7UUFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELFlBQ1MsT0FBZ0MsRUFDL0IsZUFBcUM7UUFEdEMsWUFBTyxHQUFQLE9BQU8sQ0FBeUI7UUFDL0Isb0JBQWUsR0FBZixlQUFlLENBQXNCO0lBQzNDLENBQUM7SUFFTCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksRUFBRTtZQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELE9BQU87U0FFUjthQUFNO1lBQ0w7OztlQUdHO1lBQ0gsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNsQixPQUFPO1NBQ1I7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLFFBQWdCO1FBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3RSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3BCLENBQUM7dUdBbkNVLHNCQUFzQjsyRkFBdEIsc0JBQXNCLGtIQUh2QiwyQkFBMkI7OzJGQUcxQixzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0UsYUFBYSxZQUNiLDJCQUEyQjtvSUFPM0IsS0FBSztzQkFBZCxNQUFNO2dCQUdILFFBQVE7c0JBRFgsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBAZmlsZSBuZ3gtbWFya2Rvd24taXQuY29tcG9uZW50LnRzXG4gKlxuICogQGJyaWVmIENvbXBvbmVudCB0byByZW5kZXIgbWFya2Rvd24gdG8gaHRtbFxuICogQGF1dGhvciBEYXZpZCBTdcOhcmV6XG4gKiBAZGF0ZSBNb24sIDIxIEp1biAyMCAxOTo0NToxNSArMDIwMFxuICpcbiAqIEBsaWNlbnNlXG4gKlxuICogbmd4LW1hcmtkb3duLWl0OiBhbmd1bGFyIG1hcmtkb3duLWl0IG1vZHVsZVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAyMSBEYXZpZCBTdcOhcmV6XG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb25cbiAqIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uXG4gKiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXRcbiAqIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLFxuICogY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZVxuICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmdcbiAqIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbiAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG4gKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVNcbiAqIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4gKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVFxuICogSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksXG4gKiBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbiAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1JcbiAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiAqXG4gKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBBZnRlclZpZXdJbml0LCBFdmVudEVtaXR0ZXIsIEVsZW1lbnRSZWYsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTmd4TWFya2Rvd25JdFNlcnZpY2UgfSBmcm9tIFwiLi9uZ3gtbWFya2Rvd24taXQuc2VydmljZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtYXJrZG93bi1pdCcsXG4gIHRlbXBsYXRlOiBgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PmAsXG4gIHN0eWxlczogW11cbn0pXG5leHBvcnQgY2xhc3MgTmd4TWFya2Rvd25JdENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQgIHtcblxuICBfbWFya2Rvd246IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBAT3V0cHV0KCkgcmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQElucHV0KClcbiAgc2V0IG1hcmtkb3duKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5fbWFya2Rvd24gPSB2YWw7XG4gICAgdGhpcy5yZW5kZXIodGhpcy5fbWFya2Rvd24pO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIHByaXZhdGUgbWFya2Rvd25TZXJ2aWNlOiBOZ3hNYXJrZG93bkl0U2VydmljZSxcbiAgKSB7IH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX21hcmtkb3duID09IG51bGwpIHtcbiAgICAgIHRoaXMucmVuZGVyKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmlubmVySFRNTC50cmltKCkpO1xuICAgICAgcmV0dXJuO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8qXG4gICAgICAgKiBUaGlzIGlzIHByb2JhYmx5IGRvbmUgaW4gbWFya2Rvd24oKSBzZXR0ZXIsIGJ1dCBiZWNhdXNlIGJlZm9yZSB0aGUgdmlldyBpcyBpbml0LCBvdXIgY29tcG9uZW50IG9yIHBhcmVudHMgb25lc1xuICAgICAgICogIGFyZSBub3QgaW4gYSBzYWZlIHN0YXRlLCB3ZSBzaG91bGQgc2lnbmFsIGFnYWluLlxuICAgICAgICovXG4gICAgICB0aGlzLnJlYWR5LmVtaXQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICByZW5kZXIobWFya2Rvd246IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IHRoaXMubWFya2Rvd25TZXJ2aWNlLnJlbmRlcihtYXJrZG93bik7XG4gICAgdGhpcy5yZWFkeS5lbWl0KCk7XG4gIH1cbn1cbiJdfQ==