diff --git a/main.ts b/main.ts index 297fd59..a9883d4 100644 --- a/main.ts +++ b/main.ts @@ -1,8 +1,8 @@ -import { Editor, Plugin, TFile, Menu } from 'obsidian'; +import { Editor, Plugin, TFile, Menu, WorkspaceLeaf } from 'obsidian'; -export default class MyPlugin extends Plugin { +export default class HTMLCheckboxPlugin extends Plugin { async onload() { @@ -20,8 +20,6 @@ export default class MyPlugin extends Plugin { }); })); - - this.addCommand({ id: "add-html-checkbox", name: "Add HTML checkbox", @@ -39,63 +37,64 @@ export default class MyPlugin extends Plugin { this.registerDomEvent(window, 'click', async (e: MouseEvent) => { let target = e.target as HTMLElement - - if (target.localName == "input" && (target as HTMLInputElement).type == "checkbox" && target.id ) { e.preventDefault() - let file = this.app.workspace.getActiveFile() as TFile + let file = this.app.workspace.getActiveFile() /* Check if checkbox is inside embedded file */ let embedWrapper = target.closest(".internal-embed") if (embedWrapper) { let embedSrc = embedWrapper.getAttribute("src") || "" - file = this.app.metadataCache.getFirstLinkpathDest(embedSrc, "") as TFile + file = this.app.metadataCache.getFirstLinkpathDest(embedSrc, "") } - let content = await this.app.vault.cachedRead(file) + if (file instanceof TFile) { + let content = await this.app.vault.cachedRead(file) - let id = target.id - let checkboxRE = new RegExp("]*?id=\"" + id + "\"[^>]*?>") + let id = target.id + let checkboxRE = new RegExp("]*?id=\"" + id + "\"[^>]*?>") - if (file.extension == "canvas") { - checkboxRE = new RegExp("]*?id=\\\\\"" + id + "\\\\\"[^>]*?>") - } + if (file.extension == "canvas") { + checkboxRE = new RegExp("]*?id=\\\\\"" + id + "\\\\\"[^>]*?>") + } - let checkboxMatch = content.match(checkboxRE) + let checkboxMatch = content.match(checkboxRE) - if (checkboxMatch) { - let checkboxString = checkboxMatch[0] - let dataTaskMatch = checkboxString.match(/data-task="."/) + if (checkboxMatch) { + let checkboxString = checkboxMatch[0] + let dataTaskMatch = checkboxString.match(/data-task="."/) - let newCheckboxString = checkboxString + let newCheckboxString = checkboxString - if ((target as HTMLInputElement).checked) { - newCheckboxString = newCheckboxString.replace(">", " checked>") - } else { - newCheckboxString = newCheckboxString.replace(" checked>", ">").replace(" >", ">") + if ((target as HTMLInputElement).checked) { + newCheckboxString = newCheckboxString.replace(">", " checked>") + } else { + newCheckboxString = newCheckboxString.replace(" checked>", ">").replace(" >", ">") - if (dataTaskMatch) { - newCheckboxString = newCheckboxString.replace(dataTaskMatch[0], "") + if (dataTaskMatch) { + newCheckboxString = newCheckboxString.replace(dataTaskMatch[0], "") + } + } + + let newContent = content.replace(checkboxString, newCheckboxString) + await this.app.vault.modify(file, newContent) + + let inCanvas = target.closest(".canvas-node-content") + + if (file.extension != "canvas" && inCanvas) { + let leaf = this.app.workspace.getMostRecentLeaf() + if (leaf instanceof WorkspaceLeaf) { + //@ts-ignore + await leaf.rebuildView() + } } } - - let newContent = content.replace(checkboxString, newCheckboxString) - await this.app.vault.modify(file, newContent) - - let inCanvas = target.closest(".canvas-node-content") - - if (file.extension != "canvas" && inCanvas) { - //@ts-ignore - await this.app.workspace.getMostRecentLeaf().rebuildView() - } - - - } + } } }); @@ -160,9 +159,9 @@ export default class MyPlugin extends Plugin { ); menu.showAtMouseEvent(e as MouseEvent); + console.log(menu) //@ts-ignore menu.dom.classList.add("checkbox-menu"); - } } }) @@ -205,82 +204,69 @@ export default class MyPlugin extends Plugin { async setStatus(status: string, target: HTMLElement) { - let file = this.app.workspace.getActiveFile() as TFile + let file = this.app.workspace.getActiveFile() /* Check if checkbox is inside embedded file */ let embedWrapper = target.closest(".internal-embed") if (embedWrapper) { let embedSrc = embedWrapper.getAttribute("src") || "" - file = this.app.metadataCache.getFirstLinkpathDest(embedSrc, "") as TFile + file = this.app.metadataCache.getFirstLinkpathDest(embedSrc, "") } - let content = await this.app.vault.cachedRead(file) + if (file instanceof TFile) { + let content = await this.app.vault.cachedRead(file) + let id = target.id + let checkboxRE = new RegExp("]*?id=\"" + id + "\"[^>]*?>") - let id = target.id - let checkboxRE = new RegExp("]*?id=\"" + id + "\"[^>]*?>") - - if (file.extension == "canvas") { - checkboxRE = new RegExp("]*?id=\\\\\"" + id + "\\\\\"[^>]*?>") - } - - - let checkboxString = content.match(checkboxRE)![0] - let newCheckboxString = checkboxString - let statusRe = new RegExp("data-task=\"" + status + "\"") - - let dataTaskMatch = checkboxString.match(/data-task="."/) - - - if (file.extension == "canvas") { - dataTaskMatch = checkboxString.match(/data-task=\\".\\"/) - } - - - - - let dataTaskMatchFirst = "" - if (dataTaskMatch) { - dataTaskMatchFirst = dataTaskMatch[0] - } - - let statusMatch = checkboxString.match(statusRe) - - - let dataTaskString = "data-task=\"" + status + "\"" - - if (file.extension == "canvas") { - dataTaskString = 'data-task=\\\"' + status + '\\\"' - } - - if (status == " ") { - newCheckboxString = newCheckboxString - .replace(dataTaskMatchFirst, "") - .replace(" checked>", ">").replace(" >", ">") - } else { - - if (dataTaskMatch && !statusMatch) { - newCheckboxString = newCheckboxString.replace(dataTaskMatchFirst, dataTaskString) + if (file.extension == "canvas") { + checkboxRE = new RegExp("]*?id=\\\\\"" + id + "\\\\\"[^>]*?>") } - if (!dataTaskMatch && (target as HTMLInputElement).checked) { - newCheckboxString = newCheckboxString.replace("checked", dataTaskString + " checked") - } - - if (!dataTaskMatch && !(target as HTMLInputElement).checked) { - newCheckboxString = newCheckboxString.replace(">", " " + dataTaskString + " checked>") - } - } + let checkboxString = content.match(checkboxRE)![0] + let newCheckboxString = checkboxString + let statusRe = new RegExp("data-task=\"" + status + "\"") + let dataTaskMatch = checkboxString.match(/data-task="."/) - let newContent = content.replace(checkboxString, newCheckboxString) - await this.app.vault.modify(file, newContent) + if (file.extension == "canvas") { + dataTaskMatch = checkboxString.match(/data-task=\\".\\"/) + } + + let dataTaskMatchFirst = "" + if (dataTaskMatch) { + dataTaskMatchFirst = dataTaskMatch[0] + } + + let statusMatch = checkboxString.match(statusRe) + let dataTaskString = "data-task=\"" + status + "\"" + + if (file.extension == "canvas") { + dataTaskString = 'data-task=\\\"' + status + '\\\"' + } + + if (status == " ") { + newCheckboxString = newCheckboxString + .replace(dataTaskMatchFirst, "") + .replace(" checked>", ">").replace(" >", ">") + } else { + + if (dataTaskMatch && !statusMatch) { + newCheckboxString = newCheckboxString.replace(dataTaskMatchFirst, dataTaskString) + } + + if (!dataTaskMatch && (target as HTMLInputElement).checked) { + newCheckboxString = newCheckboxString.replace("checked", dataTaskString + " checked") + } + + if (!dataTaskMatch && !(target as HTMLInputElement).checked) { + newCheckboxString = newCheckboxString.replace(">", " " + dataTaskString + " checked>") + } + } + + let newContent = content.replace(checkboxString, newCheckboxString) + await this.app.vault.modify(file, newContent) + } } - - - - - - } diff --git a/manifest.json b/manifest.json index ae54b6c..de1f25f 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "id": "html-checkboxes", "name": "HTML checkboxes", - "version": "1.0.0", + "version": "1.0.1", "minAppVersion": "0.15.0", "description": "Allows to quickly add HTML checkboxes to your notes and makes them clickable.", "author": "Anareaty",