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("