ngx-md
Version:
[![Build Status][cirrus-ci-badge]][cirrus-ci-badge-url] [![npm][circleci-badge-url]][circleci-url] [![version][npm-badge-url]][npm-url] [![npm][license-badge-url]][license-url] [![npm][opencollective]][opencollective] [
{"version":3,"file":"ngx-md.mjs","sources":["../../../projects/ngx-md/src/lib/ngx-md.service.ts","../../../projects/ngx-md/src/lib/ngx-md.component.ts","../../../projects/ngx-md/src/lib/ngx-md.config.ts","../../../projects/ngx-md/src/lib/ngx-md.module.ts","../../../projects/ngx-md/src/public-api.ts","../../../projects/ngx-md/src/ngx-md.ts"],"sourcesContent":["import { Injectable, SecurityContext } from '@angular/core';\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { throwError, Observable } from 'rxjs';\nimport { map, catchError } from 'rxjs/operators';\nimport { Renderer, marked } from 'marked';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NgxMdService {\n private _renderer: any = new Renderer();\n constructor(private _http: HttpClient, private _domSanitizer: DomSanitizer) {\n this.extendRenderer();\n this.setMarkedOptions({});\n }\n\n // get the content from remote resource\n getContent(path: string): Observable<any> {\n return this._http.get(path, { responseType: 'text' }).pipe(\n map(res => this.extractData(res)),\n catchError(this.handleError)\n );\n }\n\n public get renderer(): Renderer {\n return this._renderer;\n }\n\n // handle data\n public extractData(res: any): string {\n return res || '';\n }\n\n public setMarkedOptions(options: any) {\n options = Object.assign(\n {\n gfm: true,\n tables: true,\n breaks: false,\n pedantic: false,\n sanitize: false,\n smartLists: true,\n smartypants: false,\n },\n options\n );\n options.renderer = this._renderer;\n marked.setOptions(options);\n }\n\n // comple markdown to html\n public compile(data: string, sanitize = true) {\n return this._domSanitizer.sanitize(\n sanitize ? SecurityContext.HTML : SecurityContext.NONE,\n marked.parse(data).trim()\n );\n }\n\n // handle error\n private handleError(error: HttpErrorResponse): any {\n const errMsg = error.message ? error.message : error.toString();\n return throwError(errMsg);\n }\n\n // extend marked render to support todo checkbox\n private extendRenderer() {\n this._renderer.listitem = function(text: string) {\n if (/^\\s*\\[[x ]\\]\\s*/.test(text)) {\n text = text\n .replace(\n /^\\s*\\[ \\]\\s*/,\n '<input type=\"checkbox\" class=\"md-checkbox\" disabled> '\n )\n .replace(\n /^\\s*\\[x\\]\\s*/,\n '<input type=\"checkbox\" class=\"md-checkbox\" checked disabled> '\n );\n return '<li style=\"list-style: none\">' + text + '</li>';\n } else {\n return '<li>' + text + '</li>';\n }\n };\n }\n}\n","import {\n Component,\n ElementRef,\n AfterViewInit,\n Input,\n PLATFORM_ID,\n Inject,\n Output,\n EventEmitter,\n} from '@angular/core';\nimport { NgxMdService } from './ngx-md.service';\nimport { isPlatformBrowser } from '@angular/common';\nimport * as Prism from 'prismjs';\nimport { Subscribable, Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { decode } from 'he';\n\n@Component({\n selector: 'markdown,[Markdown],ngx-md,[NgxMd]',\n template: '<ng-content></ng-content>',\n styles: [\n `\n .token.operator,\n .token.entity,\n .token.url,\n .language-css .token.string,\n .style .token.string {\n background: none;\n }\n .md-checkbox {\n vertical-align: middle;\n margin: 0 0.2em 0.25em -1.6em;\n font-size: 16px;\n }\n `,\n ],\n standalone: false\n})\nexport class NgxMdComponent implements AfterViewInit {\n _path: string;\n _data: string;\n _md: any;\n _ext: string;\n changeLog: string[] = [];\n @Output() error: EventEmitter<any> = new EventEmitter<any>();\n @Output() loaded: EventEmitter<any> = new EventEmitter<any>();\n @Output() rendered: EventEmitter<any> = new EventEmitter<any>();\n\n constructor(\n public _mdService: NgxMdService,\n public _el: ElementRef,\n @Inject(PLATFORM_ID) public platformId: string\n ) { \n this._path = '';\n this._data = '';\n this._ext = '';\n\n }\n\n @Input()\n set path(value: string) {\n if (value) {\n this._path = value;\n this.onPathChange();\n }\n }\n\n @Input()\n set data(value: string) {\n if (value) {\n this._data = value;\n this.onDataChange(value);\n }\n }\n\n /**\n * Boolean indicating if the markdown content should be sanitized to avoid script injections\n */\n @Input() public sanitizeHtml = true;\n\n // on input\n onDataChange(data: string) {\n if (data) {\n this._el.nativeElement.innerHTML = this._mdService.compile(\n data,\n this.sanitizeHtml\n );\n } else {\n this._el.nativeElement.innerHTML = '';\n }\n this.highlightContent(false);\n this.rendered.emit(data);\n }\n\n /**\n * After view init\n */\n ngAfterViewInit() {\n if (this._path) {\n this.onPathChange();\n } else if (!this._data) {\n this.processRaw();\n }\n }\n\n processRaw() {\n this._md = this.prepare(decode(this._el.nativeElement.innerHTML));\n this.onDataChange(this._md);\n }\n\n /**\n * get remote conent;\n */\n onPathChange() {\n this._ext =\n this._path &&\n this._path\n .split('.')\n .splice(-1)\n .join();\n this._mdService\n .getContent(this._path)\n .pipe(catchError(this.handleError))\n .subscribe(data => {\n this._md =\n this._ext !== 'md' ? '```' + this._ext + '\\n' + data + '\\n```' : data;\n this.onDataChange(this.prepare(this._md));\n this.loaded.emit(data);\n });\n }\n\n /**\n * catch http error\n */\n private handleError(error: any, caught: Observable<any>) {\n this.error.emit(error);\n console.error('An error occurred', error); // for demo purposes only\n return error.message || error;\n }\n\n /**\n * Prepare string\n */\n prepare(raw: string) {\n if (!raw) {\n return '';\n }\n if (this._ext === 'md' || !this.path) {\n let isCodeBlock = false;\n return raw\n .split('\\n')\n .map((line: string) => {\n // If the first non-blank chars are an opening/closing code block, toggle the flag\n if (this.trimLeft(line).substring(0, 3) === '```') {\n isCodeBlock = !isCodeBlock;\n }\n return isCodeBlock ? line : line.trim();\n })\n .join('\\n');\n }\n return raw.replace(/\\\"/g, '\\'');\n }\n\n /**\n * Trim left whitespace\n */\n private trimLeft(line: string) {\n return line.replace(/^\\s+|\\s+$/g, '');\n }\n\n /**\n * Use Prism to highlight code snippets only on the browser\n */\n private highlightContent(async: boolean): void {\n if (isPlatformBrowser(this.platformId)) {\n Prism.highlightAll(async);\n }\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class NgxMdConfig {\n /** config modue */\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule, ModuleWithProviders } from '@angular/core';\nimport { NgxMdService } from './ngx-md.service';\nimport { NgxMdConfig } from './ngx-md.config';\nimport { NgxMdComponent } from './ngx-md.component';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [NgxMdComponent],\n providers: [NgxMdService],\n exports: [NgxMdComponent],\n})\nexport class NgxMdModule {\n public static forRoot(): ModuleWithProviders<NgxMdModule> {\n return {\n ngModule: NgxMdModule,\n providers: [NgxMdConfig],\n };\n }\n}\n","/*\n * Public API Surface of ngx-md\n */\n\nexport * from './lib/ngx-md.service';\nexport * from './lib/ngx-md.component';\nexport * from './lib/ngx-md.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}