aboutsummaryrefslogtreecommitdiff
path: root/editor/editor.js
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2024-10-03 17:29:07 +0700
committerShulhan <ms@kilabit.info>2024-10-03 17:29:07 +0700
commitddb540da0a80b7ecad1ebb62f51e76d252f771f3 (patch)
treec996c37a44fc67344a3055c444bfe3a3ef8c3e70 /editor/editor.js
parentd1e96e09438b4a5c7580b86c469e817a61be991f (diff)
downloadpakakeh.ts-ddb540da0a80b7ecad1ebb62f51e76d252f771f3.tar.xz
editor: allow inserting tab on editor
Previously pressing tab on editor will move focus to the next component on page or browser. Now, pressing tab will insert "\t" on the current cursor.
Diffstat (limited to 'editor/editor.js')
-rw-r--r--editor/editor.js27
1 files changed, 27 insertions, 0 deletions
diff --git a/editor/editor.js b/editor/editor.js
index e80e147..090b7fe 100644
--- a/editor/editor.js
+++ b/editor/editor.js
@@ -11,6 +11,7 @@ export class WuiEditor {
this.elLineNumber = document.createElement("div");
this.elContent = document.createElement("div");
this.isKeyControl = false;
+ this.isKeyShift = false;
this.id = opts.id;
this.isEditable = opts.isEditable;
const el = document.getElementById(opts.id);
@@ -102,6 +103,7 @@ export class WuiEditor {
};
this.elContent.addEventListener("blur", () => {
this.isKeyControl = false;
+ this.isKeyShift = false;
});
}
this.elContent.classList.add(WUI_EDITOR_CLASS_CONTENT);
@@ -146,6 +148,16 @@ export class WuiEditor {
`;
document.head.appendChild(style);
}
+ insert(text) {
+ const selection = window.getSelection();
+ if (!selection || !selection.rangeCount) {
+ console.error(`insert: failed to get selection`);
+ return;
+ }
+ selection.deleteFromDocument();
+ selection.getRangeAt(0).insertNode(document.createTextNode(text));
+ selection.collapseToEnd();
+ }
onKeydownDocument(ed, ev) {
switch (ev.key) {
case "Control":
@@ -164,6 +176,18 @@ export class WuiEditor {
}
this.addNewLine();
return false;
+ case "Shift":
+ ed.isKeyShift = true;
+ break;
+ case "Tab":
+ if (ed.isKeyShift) {
+ // Pressing Shift+Tab should move focus out of editor,
+ // which focus to the previous component on the page or browser.
+ return true;
+ }
+ ev.preventDefault();
+ this.insert("\t");
+ return false;
}
return true;
}
@@ -172,6 +196,9 @@ export class WuiEditor {
case "Control":
ed.isKeyControl = false;
return true;
+ case "Shift":
+ ed.isKeyShift = false;
+ break;
}
return true;
}