From 3fc5adb516c91453733a8fe0d448df40d4a037e2 Mon Sep 17 00:00:00 2001 From: windingwind <33902321+windingwind@users.noreply.github.com> Date: Tue, 12 Nov 2024 14:42:36 +0100 Subject: [PATCH] fix: magic key command navigation --- src/extras/editor/magicKey.ts | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/extras/editor/magicKey.ts b/src/extras/editor/magicKey.ts index d962893..347219f 100644 --- a/src/extras/editor/magicKey.ts +++ b/src/extras/editor/magicKey.ts @@ -370,10 +370,10 @@ class PluginState { input.addEventListener("keydown", (event) => { if (event.key === "ArrowUp") { - this._selectCommand(this.selectedCommandIndex - 1); + this._selectCommand(this.selectedCommandIndex - 1, "up"); event.preventDefault(); } else if (event.key === "ArrowDown") { - this._selectCommand(this.selectedCommandIndex + 1); + this._selectCommand(this.selectedCommandIndex + 1, "down"); event.preventDefault(); } else if (event.key === "Enter") { event.preventDefault(); @@ -423,7 +423,7 @@ class PluginState { return !!document.querySelector(`.${this.popupClass}`); } - _selectCommand(index?: number) { + _selectCommand(index?: number, direction: "up" | "down" = "down") { if (typeof index === "undefined") { index = this.selectedCommandIndex; } @@ -441,8 +441,22 @@ class PluginState { ".popup-item", ) as NodeListOf; if (items[index]?.hidden) { - // Will find the first visible item - index = items.length; + // Will find the next visible item in the specified direction + if (direction === "up") { + for (let i = index - 1; i >= 0; i--) { + if (!items[i].hidden) { + index = i; + break; + } + } + } else if (direction === "down") { + for (let i = index + 1; i < items.length; i++) { + if (!items[i].hidden) { + index = i; + break; + } + } + } } if (index >= items.length) { // Find the first visible item with :first-of-type