import { HTMLWidget, Widget } from "@hpcc-js/common"; import * as marked from "marked"; import { markdownWidget } from "./markdownPlugins/index.js"; import "../src/markdown.css"; declare const hljs: any; export class Markdown extends HTMLWidget { private _renderer = new marked.Renderer(); private _origCode = this._renderer.code; private _origLink = this._renderer.link; private _origHtml = this._renderer.html; private _codeSamples: Widget[] = []; public _anchors = []; _path: string; path(): string; path(_: string): this; path(_?: string): this | string { if (!arguments.length) return this._path; this._path = _; return this; } _markdown: string; markdown(): string; markdown(_: string): this; markdown(_?: string): this | string { if (!arguments.length) return this._markdown; this._anchors = []; this._markdown = _; return this; } scroll() { } constructor() { super(); // Heading override --- const context = this; this._renderer.heading = (text, level) => { const escapedText = text.toLowerCase().replace(/[^\w]+/g, ""); const href = this.path() + "#" + escapedText; context._anchors.push({ label: text, href: "#" + href }); return `\ ${text} `; }; // Link override --- this._renderer.link = (href: string, title: string, text: string): string => { console.log("href: " + href); const extLink = href.indexOf("http") === 0 || href.indexOf("file") === 0 || href.indexOf("api/") === 0; let retVal = this._origLink.call(this._renderer, (extLink ? "" : "#") + href, title, text); if (extLink) { retVal = retVal.replace('">', '" target="_blank">'); } return retVal; }; // Code override --- this._renderer.code = (text: string, infostring: string, escaped: boolean) => { const mdWidget = markdownWidget(infostring, text); if (mdWidget) { return this.renderPlaceholder(mdWidget); } return this._origCode.call(this._renderer, text, infostring, escaped); }; this._renderer.html = (html: string) => { if (html.indexOf("")); const htmlParts = html.split("\n"); const infostring = htmlParts.shift().substr("