UNPKG

ngx-showdown-angular-latest

Version:
1 lines 27 kB
{"version":3,"file":"ngx-showdown.mjs","sources":["../../../src/showdown-config.provider.ts","../../../src/showdown-converter.provider.ts","../../../src/showdown.component.ts","../../../src/source.directive.ts","../../../src/showdown.pipe.ts","../../../src/showdown.module.ts","../../../src/ngx-showdown.ts"],"sourcesContent":["import * as Showdown from 'showdown';\r\n\r\n/**\r\n * @internal\r\n */\r\nlet {hasOwnProperty} = {};\r\n\r\nexport interface ShowdownConfig extends Showdown.ConverterOptions {\r\n}\r\n\r\n/**\r\n * A config provider\r\n *\r\n * ### Example\r\n *\r\n * Set custom config provider.\r\n * ```typescript\r\n * import { NgModel } from '@angular/core';\r\n * import { ShowdownModule, ShowdownConfig } from 'ngx-showdown';\r\n *\r\n * export class MyShowdownConfig extends ShowdownConfig {\r\n * emoji = true;\r\n * underscore = false;\r\n * flavor = 'github';\r\n * }\r\n *\r\n * @NgModel({\r\n * imports: [ ShowdownModule ],\r\n * providers: [ {provide: ShowdownConfig, useClass: MyConverterOptions} ]\r\n * })\r\n * export class AppModule {}\r\n * ```\r\n */\r\nexport class ShowdownConfig implements Showdown.ConverterOptions {\r\n\r\n /**\r\n * @see https://github.com/showdownjs/showdown/blob/master/README.md#flavors\r\n */\r\n flavor?: Showdown.Flavor;\r\n\r\n constructor(options?: ShowdownConfig | Showdown.ConverterOptions) {\r\n this.merge(options);\r\n }\r\n\r\n /**\r\n * Merge options\r\n *\r\n * @param options - A options object to merge.\r\n */\r\n public merge?(options: ShowdownConfig | Showdown.ConverterOptions) {\r\n for (let key in options) {\r\n if (hasOwnProperty.call(options, key)) {\r\n this[key] = options[key];\r\n }\r\n }\r\n }\r\n\r\n}\r\n","import { Injectable, Optional } from '@angular/core';\r\nimport * as Showdown from 'showdown';\r\nimport { ShowdownConfig } from './showdown-config.provider';\r\n\r\n/**\r\n * @internal\r\n */\r\nlet {hasOwnProperty} = {};\r\n\r\n/**\r\n * ### Example\r\n *\r\n * Setup as standalone\r\n * ```typescript\r\n * import { NgModule } from '@angular/core';\r\n * import { ShowdownConverter } from 'ngx-showdown';\r\n *\r\n * @NgModule({\r\n * providers: [ ShowdownConverter ];\r\n * })\r\n * export class AppModule {}\r\n * ```\r\n *\r\n * Use the converter instance.\r\n * ```typescript\r\n * import { Injectable } from '@angular/core';\r\n * import { ShowdownConverter } from 'ngx-showdown';\r\n *\r\n * @Injectable()\r\n * export class SomeService {\r\n * constructor(showdownConverter: ShowdownConverter) {\r\n * let markdown: string = \"**Some**\";\r\n * let html: string = showdownConverter.makeHtml(markdown);\r\n * console.log(`some:\\nmarkdown: ${markdown)\\nhtml: ${html}\\n`);\r\n * }\r\n * }\r\n * ```\r\n */\r\n@Injectable()\r\nexport class ShowdownConverter extends Showdown.Converter {\r\n\r\n constructor(@Optional() config?: ShowdownConfig) {\r\n super(config && {extensions: config.extensions});\r\n this.setFlavor((config && config.flavor) || 'vanilla');\r\n this.setOptions(config);\r\n }\r\n\r\n /**\r\n * Set options to the converter.\r\n *\r\n * @param options - A options object to set.\r\n */\r\n public setOptions(options: Showdown.ShowdownOptions): void {\r\n for (let key in options) {\r\n if (hasOwnProperty.call(options, key)) {\r\n this.setOption(key, options[key]);\r\n }\r\n }\r\n }\r\n\r\n}\r\n","import { Component, ElementRef, Input, OnChanges, OnInit, Optional, SecurityContext } from '@angular/core';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport * as Showdown from 'showdown';\r\nimport { ShowdownConfig } from './showdown-config.provider';\r\nimport { ShowdownConverter } from './showdown-converter.provider';\r\n\r\n/**\r\n * @internal\r\n */\r\nconst MAP_OPTION = {\r\n '': true,\r\n true: true,\r\n false: false\r\n};\r\n\r\n/**\r\n * @internal\r\n */\r\nlet _toOption = (value: any) => MAP_OPTION.hasOwnProperty(value) ? MAP_OPTION[value] : value;\r\n\r\n/**\r\n * The options keys for the dynamic properties set.\r\n * @internal\r\n */\r\nconst OPTIONS_PROPERTIES_KEYS: string[] = [\r\n 'backslashEscapesHTMLTags',\r\n 'completeHTMLDocument',\r\n 'disableForced4SpacesIndentedSublists',\r\n 'emoji',\r\n 'encodeEmails',\r\n 'ghCodeBlocks',\r\n 'ghCompatibleHeaderId',\r\n 'ghMentions',\r\n 'ghMentionsLink',\r\n 'headerLevelStart',\r\n 'literalMidWordAsterisks',\r\n 'literalMidWordUnderscores',\r\n 'metadata',\r\n 'noHeaderId',\r\n 'omitExtraWLInCodeBlocks',\r\n 'openLinksInNewWindow',\r\n 'parseImgDimensions',\r\n 'prefixHeaderId',\r\n 'rawHeaderId',\r\n 'rawPrefixHeaderId',\r\n 'requireSpaceBeforeHeadingText',\r\n 'simpleLineBreaks',\r\n 'simplifiedAutoLink',\r\n 'smartIndentationFix',\r\n 'smoothLivePreview',\r\n 'splitAdjacentBlockquotes',\r\n 'strikethrough',\r\n 'tables',\r\n 'tablesHeaderId',\r\n 'tasklists',\r\n 'underline'\r\n];\r\n\r\n// For the options setter properties that dynamic definition (the code after the class)\r\nexport interface ShowdownComponent extends Showdown.ShowdownOptions {\r\n}\r\n\r\n/**\r\n * A angular component for render `Markdown` to `HTML`.\r\n *\r\n * ### Example\r\n *\r\n * Setup as standalone\r\n * ```typescript\r\n * import { NgModule } from '@angular/core';\r\n * import { ShowdownComponent } from 'ngx-showdown';\r\n *\r\n * @NgModule({\r\n * declarations: [ ShowdownComponent ];\r\n * })\r\n * export class AppModule {}\r\n * ```\r\n *\r\n * Bind markdown value and options object\r\n * ```typescript\r\n * import { Component } from '@angular/core';\r\n * import * as Showdown from 'showdown';\r\n *\r\n * @Component({\r\n * selector: 'some',\r\n * template: '<showdown [value]=\"text\" [options]=\"options\"></showdown>'\r\n * })\r\n * export class SomeComponent {\r\n * text: string = `\r\n * # Some header\r\n * ---\r\n * **Some bold**\r\n * `;\r\n * options: Showdown.ShowdownOptions = { smartIndentationFix: true };\r\n * // ...\r\n * }\r\n * ```\r\n * Bind single option (it have properties for all showdown options).\r\n * ```html\r\n * <showdown emoji=\"true\" noHeaderId># Some text :+1:</showdown>\r\n * ```\r\n *\r\n * Set static markdown value.\r\n * ```html\r\n * <showdown value=\"___Some static value___\" underline></showdown>\r\n * ```\r\n *\r\n * Use as directive on anther element.\r\n * ```html\r\n * <div showdown=\"# Div Element\" headerLevelStart=\"2\"></div>\r\n * ```\r\n *\r\n * Static markdown value in the element content.\r\n * ```html\r\n * <div>\r\n * <showdown smartIndentationFix>\r\n * # List:\r\n * * a\r\n * * A\r\n * * b\r\n * </showdown>\r\n * </div>\r\n * ```\r\n *\r\n * Set template reference variable.\r\n * ```html\r\n * <showdown #sd></showdown>\r\n * ```\r\n * Or\r\n * ```html\r\n * <div showdown #sd=\"showdown\"></div>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'showdown,[showdown]',\r\n template: '<ng-content></ng-content>',\r\n exportAs: 'showdown',\r\n inputs: OPTIONS_PROPERTIES_KEYS\r\n})\r\nexport class ShowdownComponent extends ShowdownConverter implements OnInit, OnChanges, Showdown.ShowdownOptions {\r\n\r\n /**\r\n * The input markdown value.\r\n *\r\n * __Example :__\r\n *\r\n * Set some static markdown value.\r\n * ```html\r\n * <showdown value=\"**Some bold value**\"></showdown>\r\n * ```\r\n *\r\n * Bind property with markdown value.\r\n * ```html\r\n * <textarea [(ngModel)]=\"text\"></textarea>\r\n * <showdown [value]=\"text\"></showdown>\r\n * ```\r\n */\r\n @Input() value: string;\r\n\r\n /**\r\n * Input alias to `value`.\r\n *\r\n * __Example :__\r\n *\r\n * ```html\r\n * <div [showdown]=\"# Some Header\"></div>\r\n * ```\r\n *\r\n * Equivalent to\r\n * ```html\r\n * <showdown [value]=\"# Some Header\"></showdown>\r\n * ```\r\n */\r\n @Input() set showdown(value: string) {\r\n this.value = value;\r\n }\r\n\r\n /**\r\n * The showdown options of the converter.\r\n *\r\n * __Example :__\r\n *\r\n * Bind options\r\n * ```typescript\r\n * import { Component } from '@angular/core';\r\n * import * as Showdown from 'showdown';\r\n *\r\n * @Component({\r\n * selector: `some`,\r\n * template: `<showdown [options]=\"options\"># Some Header<showdown>`\r\n * })\r\n * export class SomeComponent {\r\n * options: Showdown.ShowdownOptions = {headerLevelStart: 3};\r\n * // ...\r\n * }\r\n * ```\r\n * Or\r\n * ```html\r\n * <showdown [options]=\"{smartIndentationFix: true}\"> # Indentation Fix<showdown>\r\n * ```\r\n */\r\n @Input()\r\n get options(): Showdown.ShowdownOptions {\r\n return this.getOptions();\r\n }\r\n\r\n set options(options: Showdown.ShowdownOptions) {\r\n this.setOptions(options);\r\n }\r\n\r\n private _sanitize: boolean;\r\n\r\n /**\r\n * Enables html sanitize, it will sanitize the converter html output by [`DomSanitizer`](https://angular.io/api/platform-browser/DomSanitizer#sanitize).\r\n *\r\n * __Example :__\r\n *\r\n * ```typescript\r\n * import { Component } from '@angular/core';\r\n *\r\n * @Component({\r\n * selector: 'some',\r\n * styles: [`.box { width: 95%; padding: 5px; border: 1px solid black;}`],\r\n * template: `\r\n * <h3>Input</h3>\r\n * <textarea class=\"box\" [(ngModel)]=\"text\"></textarea>\r\n * <input type=\"checkbox\" [(ngModel)]=\"sanitize\"/> <b>Sanitize</b>\r\n * <h3>Markdown</h3>\r\n * <pre class=\"box\"><code>{{ text }}</code></pre>\r\n * <h3>Preview</h3>\r\n * <div class=\"box\">\r\n * <showdown #sd [value]=\"text\" [sanitize]=\"sanitize\"></showdown>\r\n * </div>\r\n * `;\r\n * })\r\n * export class SomeComponent {\r\n * text: string = `# A cool link\r\n * <a href=\"javascript:alert('Hello!')\">click me</a>`;\r\n * }\r\n * ```\r\n */\r\n @Input()\r\n set sanitize(sanitize: boolean) {\r\n this._sanitize = _toOption(sanitize);\r\n }\r\n\r\n constructor(private _elementRef: ElementRef, @Optional() private _domSanitizer?: DomSanitizer, @Optional() config?: ShowdownConfig) {\r\n super(config);\r\n }\r\n\r\n /**\r\n * A angular lifecycle method, Use on init to check if it `content` type and load the element `content` to `value`.\r\n * @internal\r\n */\r\n ngOnInit(): void {\r\n if (this.value === undefined && this._elementRef.nativeElement.innerHTML.trim() !== '') {\r\n this.render(this._elementRef.nativeElement.innerHTML);\r\n }\r\n }\r\n\r\n /**\r\n * A angular lifecycle method, Use to call to render method after changes.\r\n * @internal\r\n */\r\n ngOnChanges(): void {\r\n this.render();\r\n }\r\n\r\n /**\r\n * Convert the markdown value of {@link ShowdownComponent#value} to html and set the html result to the element content.\r\n *\r\n * __Example :__\r\n *\r\n * ```html\r\n * <textarea #textarea (change)=\"showdown.render(textarea.value)\"/># Some Header</textarea>\r\n * <showdown #showdown></showdown>\r\n * ```\r\n * @param value - A markdown value to render (it will override the current value of `ShowdownComponent#value`)\r\n */\r\n public render(value?: string): void {\r\n if (typeof value === 'string') {\r\n this.value = value;\r\n }\r\n\r\n if (typeof this.value === 'string') {\r\n let result = this.makeHtml(this.value);\r\n\r\n if (this._sanitize) {\r\n result = this._domSanitizer.sanitize(SecurityContext.HTML, result);\r\n }\r\n\r\n this._elementRef.nativeElement.innerHTML = result;\r\n }\r\n }\r\n\r\n}\r\n\r\n// Define options properties setter for angular directive and direct access\r\nfor (let key of OPTIONS_PROPERTIES_KEYS) {\r\n Object.defineProperty(ShowdownComponent.prototype, key, {\r\n set(value: any): void {\r\n this.setOption(key, _toOption(value));\r\n },\r\n configurable: true\r\n });\r\n}\r\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { Directive, EventEmitter, Input, OnChanges, Output } from '@angular/core';\r\nimport { ShowdownComponent } from './showdown.component';\r\n\r\n/**\r\n * A angular directive to `ShowdownComponent` for make http request of markdown content.\r\n *\r\n * ### Example\r\n *\r\n * Setup as standalone\r\n * ```typescript\r\n * import { NgModule } from '@angular/core';\r\n * import { HttpClientModule } from '@angular/common/http';\r\n * import { ShowdownComponent, SourceDirective } from 'ngx-showdown';\r\n *\r\n * @NgModule({\r\n * declarations: [ ShowdownComponent, SourceDirective ],\r\n * imports: [ HttpClientModule ]\r\n * })\r\n * export class AppModule {}\r\n * ```\r\n *\r\n * Bind url `src` directive\r\n * ```typescript\r\n * import { Component } from '@angular/core';\r\n *\r\n * @Component({\r\n * selector: 'some',\r\n * template: '<showdown [src]=\"url\" smartIndentationFix>**Loading...**</showdown>\r\n * })\r\n * class SomeComponent {\r\n * url: string = 'https://unpkg.com/ngx-showdown/README.md';\r\n * // ...\r\n * }\r\n * ```\r\n *\r\n * Set static url\r\n * ```html\r\n * <showdown src=\"README.md\" [options]=\"{noHeaderId: true}\"></showdown>\r\n * ```\r\n *\r\n * Set template reference variable\r\n * ```html\r\n * <showdown #source=\"source\" src=\"README.md\"></showdown>\r\n * ```\r\n *\r\n * Listening to `error` events.\r\n * ```html\r\n * <showdown #sd src=\"http://url.error\" (error)=\"sd.render('# '+$event.message)\"></showdown>\r\n * ```\r\n */\r\n@Directive({\r\n selector: 'showdown[src],[showdown][src]',\r\n exportAs: 'source'\r\n})\r\nexport class SourceDirective implements OnChanges {\r\n\r\n /**\r\n * The source url of the markdown content.\r\n *\r\n * __Example :__\r\n *\r\n * Set static url to `src` directive.\r\n * ```html\r\n * <showdown src=\"https://unpkg.com/ngx-showdown/README.md\"></showdown>\r\n * ```\r\n *\r\n * Bind url to `src` directive.\r\n * ```html\r\n * <input type=\"text\" #url placeholder=\"url\" />\r\n * <button (click)=\"src = url.value\">Load</button>\r\n * <showdown [src]=\"src\">**Loading...**</showdown>\r\n * ```\r\n */\r\n @Input() src: string;\r\n\r\n /**\r\n * On error occur.\r\n *\r\n * __Example :__\r\n *\r\n * ```html\r\n * <input type=\"text\" placeholder=\"url\" [(ngModel)]=\"url\"/>\r\n * <showdown [src]=\"url\" (error)=\"sd.render('# Error\\n> '+$event.message)\">**Loading...**</showdown>\r\n * ```\r\n */\r\n @Output() error: EventEmitter<HttpErrorResponse> = new EventEmitter();\r\n\r\n constructor(private _showdownComponent: ShowdownComponent, private _http: HttpClient) {\r\n }\r\n\r\n /**\r\n * A angular lifecycle method, Use to call to `load` method on src init/changes\r\n * @internal\r\n */\r\n ngOnChanges(): void {\r\n this.load();\r\n }\r\n\r\n /**\r\n * Load the markdown content of {@link SourceDirective#src} url to {@link ShowdownComponent#value}.\r\n *\r\n * __Example :__\r\n *\r\n * ```html\r\n * <input type=\"text\" #url value=\"source.src\" placeholder=\"Url\" />\r\n * <button (click)=\"source.load(url.value)\">Load</button>\r\n * <showdown #source=\"source\" src=\"https://unpkg.com/ngx-showdown/README.md\"></showdown>\r\n * ```\r\n * @param url - A url of markdown content to load (it will override the current url of `SourceDirective#src`)\r\n */\r\n public load(url?: string): void {\r\n if (url) {\r\n this.src = url;\r\n }\r\n\r\n if (this.src) {\r\n this\r\n ._http\r\n .get(this.src, {responseType: 'text'})\r\n .subscribe((response: string) => {\r\n this._showdownComponent.render(response);\r\n }, (error: HttpErrorResponse) => {\r\n this.error.emit(error);\r\n });\r\n }\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport * as Showdown from 'showdown';\r\nimport { ShowdownConverter } from './showdown-converter.provider';\r\n\r\n/**\r\n * A angular pipe to transform `Markdown` to `HTML`.\r\n *\r\n * ### Example\r\n *\r\n * Setup as standalone\r\n * ```typescript\r\n * import { NgModule } from '@angular/core';\r\n * import { ShowdownPipe } from 'ngx-showdown';\r\n *\r\n * @NgModule({\r\n * declarations: [ ShowdownPipe ];\r\n * })\r\n * export class AppModule {}\r\n * ```\r\n *\r\n * Transform markdown value to html.\r\n * ```html\r\n * <input type=\"text\" placeholder=\"Name\" [(ngModel)]=\"name\"/>\r\n * <div [innerHTML]=\"'**Hello '+(name || 'nobody')+'!**' | showdown\">\r\n * ```\r\n *\r\n * Transform markdown value to html with `options`.\r\n * ```typescript\r\n * import * as Showdown from 'showdown';\r\n *\r\n * @Component({\r\n * selector: 'some',\r\n * template: `<div innerHTML=\"{{ text | showdown: options }}\"></div>`\r\n * })\r\n * export class SomeComponent {\r\n * text: string = \"__Some Underline__\";\r\n * options: Showdown.ShowdownOptions = { underline: true };\r\n * // ...\r\n * }\r\n * ```\r\n */\r\n@Pipe({\r\n name: 'showdown',\r\n pure: false\r\n})\r\nexport class ShowdownPipe extends ShowdownConverter implements PipeTransform {\r\n\r\n /**\r\n * Transform markdown value to html.\r\n *\r\n * @param value - The markdown value to transform to html.\r\n * @param options - A `Showdown` converter options.\r\n * @returns Returns the transform result of `value` to html.\r\n */\r\n transform(value: string, options?: Showdown.ShowdownOptions): string {\r\n this.setOptions(options);\r\n return this.makeHtml(value);\r\n }\r\n\r\n}\r\n","import { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport * as Showdown from 'showdown';\r\nimport { ShowdownConfig } from './showdown-config.provider';\r\nimport { ShowdownConverter } from './showdown-converter.provider';\r\nimport { ShowdownComponent } from './showdown.component';\r\nimport { ShowdownPipe } from './showdown.pipe';\r\nimport { SourceDirective } from './source.directive';\r\n\r\n/**\r\n * @internal\r\n */\r\nconst DECLARATIONS = [\r\n ShowdownComponent,\r\n ShowdownPipe,\r\n SourceDirective\r\n];\r\n\r\n/**\r\n * ### Example\r\n *\r\n * Add `ShowdownModule` to app `imports`.\r\n * ```typescript\r\n * import { NgModule } from '@angular/core';\r\n * import { ShowdownModule } from 'ngx-showdown';\r\n *\r\n * @NgModule({\r\n * imports: [ ShowdownModule ];\r\n * })\r\n * export class AppModule {}\r\n * ```\r\n */\r\n@NgModule({\r\n declarations: DECLARATIONS,\r\n providers: [ShowdownConverter],\r\n exports: DECLARATIONS\r\n})\r\nexport class ShowdownModule {\r\n\r\n /**\r\n * __Example :__\r\n *\r\n * Add `ShowdownModule` to app `imports` with config.\r\n * ```typescript\r\n * import { NgModule } from '@angular/core';\r\n * import { ShowdownModule } from 'ngx-showdown';\r\n *\r\n * @NgModule({\r\n * imports: [ ShowdownModule.forRoot({\r\n * smartIndentationFix: true,\r\n * foo: 'bar',\r\n * flavor: 'github',\r\n * extensions: [ {type:'listener', listeners: {'codeBlocks.after': console.log}} ]\r\n * }) ];\r\n * })\r\n * export class AppModule {}\r\n * ```\r\n * @param config - A root converter config for all converter instances.\r\n */\r\n static forRoot(config: ShowdownConfig | Showdown.ConverterOptions): ModuleWithProviders<ShowdownModule> {\r\n return {\r\n ngModule: ShowdownModule,\r\n providers: [{provide: ShowdownConfig, useValue: config}]\r\n };\r\n }\r\n\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["hasOwnProperty","i1.ShowdownConfig","i2.ShowdownConfig","i1.ShowdownComponent"],"mappings":"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"}