diff --git a/src/Documentation.ts b/src/Documentation.ts index e7f3c97..8cf9a61 100644 --- a/src/Documentation.ts +++ b/src/Documentation.ts @@ -139,13 +139,17 @@ export const showDocumentation = (app: Editor) => { document.getElementById("documentation")?.classList.remove("hidden"); // Load and convert Markdown content from the documentation file let style = createDocumentationStyle(app); - let bindings = Object.keys(style).map((key) => ({ - type: "output", - regex: new RegExp(`<${key}([^>]*)>`, "g"), - //@ts-ignore - replace: (match, p1) => `<${key} class="${style[key]}" ${p1}>`, - })); - updateDocumentationContent(app, bindings); + + function update_and_assign(callback: Function) { + let bindings = Object.keys(style).map((key) => ({ + type: "output", + regex: new RegExp(`<${key}([^>]*)>`, "g"), + //@ts-ignore + replace: (match, p1) => `<${key} class="${style[key]}" ${p1}>`, + })); + callback(bindings) + } + update_and_assign((e: Object) => updateDocumentationContent(app, e)); } }; @@ -166,15 +170,28 @@ export const updateDocumentationContent = (app: Editor, bindings: any) => { * @param app - The editor application. * @param bindings - Additional bindings for the showdown converter. */ + let loading_message: string = "

Loading! Clic to refresh!

"; const converter = new showdown.Converter({ emoji: true, moreStyling: true, backslashEscapesHTMLTags: true, extensions: [showdownHighlight({ auto_detection: true }), ...bindings], }); - const converted_markdown = converter.makeHtml( - app.docs[app.currentDocumentationPane], - ); - document.getElementById("documentation-content")!.innerHTML = - converted_markdown; -}; + console.log(app.currentDocumentationPane); + + function _update_and_assign(callback: Function) { + const converted_markdown = converter.makeHtml( + app.docs[app.currentDocumentationPane], + ); + callback(converted_markdown) + } + _update_and_assign((e: string)=> { + let display_content = e === undefined ? loading_message : e; + document.getElementById("documentation-content")!.innerHTML = display_content; + }) + if (document.getElementById("documentation-content")!.innerHTML.replace(/"/g, "'") == loading_message.replace(/"/g, "'")) { + setTimeout(() => { + updateDocumentationContent(app, bindings); + }, 100); + } +} \ No newline at end of file diff --git a/src/InterfaceLogic.ts b/src/InterfaceLogic.ts index 7ba5733..e2e39fa 100644 --- a/src/InterfaceLogic.ts +++ b/src/InterfaceLogic.ts @@ -525,18 +525,25 @@ export const installInterfaceLogic = (app: Editor) => { "loading_samples", ].forEach((e) => { let name = `docs_` + e; - document.getElementById(name)!.addEventListener("click", async () => { - if (name !== "docs_sample_list") { - app.currentDocumentationPane = e; - updateDocumentationContent(app, bindings); - } else { - console.log("Loading samples!"); - await loadSamples().then(() => { - app.docs = documentation_factory(app); + + // Check if the element exists + let element = document.getElementById(name); + if (element) { + element.addEventListener("click", async () => { + if (name !== "docs_sample_list") { app.currentDocumentationPane = e; updateDocumentationContent(app, bindings); - }); - } - }); + } else { + console.log("Loading samples!"); + await loadSamples().then(() => { + app.docs = documentation_factory(app); + app.currentDocumentationPane = e; + updateDocumentationContent(app, bindings); + }); + } + }); + } else { + console.log("Could not find element " + name); + } }); };