diff --git a/README.md b/README.md index b74f8f9..0e5674c 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,8 @@ Inspired by: - Joplin Outline Plugin + Joplin Outline Plugin, + VSCode's Find and Replace diff --git a/src/index.ts b/src/index.ts index 03b7f73..42e7bd5 100644 --- a/src/index.ts +++ b/src/index.ts @@ -33,7 +33,17 @@ joplin.plugins.register({ } else if (message.name == "getEditorState") { return getEditorState(); } else if (message.name == "getPreviewRegex") { - return prepareRegex(message.form.searchPattern, message.form.options); + try { + return { + "regex": prepareRegex(message.form.searchPattern, message.form.options), + "error": null + } + } catch (exp) { + return { + "regex": null, + "error": exp + } + } } else if (message.name.startsWith("SARPlugin.")) { // Send any "SARPlugin..." messages directly to the CodeMirror editor plugin: return await joplin.commands.execute('editor.execCommand', { diff --git a/src/panel.ts b/src/panel.ts index 9ada348..b71dbbc 100644 --- a/src/panel.ts +++ b/src/panel.ts @@ -36,18 +36,20 @@ export async function getPanelHTML() { - - - + +
Regex4: + Regex:4
+ +
Options: diff --git a/src/webview_panel.js b/src/webview_panel.js index ea83b4a..d13a07e 100644 --- a/src/webview_panel.js +++ b/src/webview_panel.js @@ -26,6 +26,7 @@ let useWildcardsRad = document.querySelector("#usewildcards-rad"); let useRegexRad = document.querySelector("#useregex-rad"); // Text: +let helpDetails = document.querySelector("details"); let warnMdEditorParagraph = document.querySelector("#warning-mdeditor"); warnMdEditorParagraph.style.display = "none"; let regexPreviewSpan = document.querySelector("#regex-preview"); @@ -108,7 +109,13 @@ function updatePreviewRegex() { webviewApi .postMessage({ name: "getPreviewRegex", form: getForm() }) .then((response) => { - regexPreviewSpan.innerText = response.toString(); + if (response.regex) { + regexPreviewSpan.innerText = response.regex.toString(); + regexPreviewSpan.style.color = ""; + } else if (response.error) { + regexPreviewSpan.innerText = response.error.message; + regexPreviewSpan.style.color = "red"; + } }); } @@ -126,6 +133,17 @@ useLiteralSearchRad.addEventListener("change", updatePreviewRegex); useWildcardsRad.addEventListener("change", updatePreviewRegex); useRegexRad.addEventListener("change", updatePreviewRegex); +// Hide numbers if the help isn't displayed: +document.querySelectorAll("sup").forEach((el) => { + el.style.visibility = "hidden"; +}); +helpDetails.addEventListener("toggle", () => { + let isDetailsOpen = helpDetails.hasAttribute("open"); + document.querySelectorAll("sup").forEach((el) => { + el.style.visibility = isDetailsOpen ? "visible" : "hidden"; + }); +}); + // Get selected text upon opening the panel: webviewApi.postMessage({ name: "selectedText" }).then((response) => { if (response && response.length > 0) searchTxt.value = response;