🎨 Improve slash menu (#15731)

fix https://github.com/siyuan-note/siyuan/issues/12518
This commit is contained in:
Jeffrey Chen 2025-09-08 09:57:36 +08:00 committed by GitHub
parent 006da6bc90
commit adca241ed5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 16 additions and 7 deletions

View file

@ -31,6 +31,7 @@ import {
} from "../../emoji";
import {blockRender} from "../render/blockRender";
import {uploadFiles} from "../upload";
import {isAbnormalItem} from "../../util/upDownHint";
/// #if !MOBILE
import {openFileById} from "../../editor/util";
/// #endif
@ -290,6 +291,14 @@ ${unicode2Emoji(emoji.unicode)}</button>`;
/// #endif
}
this.element.scrollTop = 0;
let currentHintElement = this.element.querySelector(".b3-list-item--focus") as HTMLElement;
if (isAbnormalItem(currentHintElement, "b3-list-item")) {
currentHintElement.classList.remove("b3-list-item--focus");
do {
currentHintElement = currentHintElement.nextElementSibling as HTMLElement;
} while (isAbnormalItem(currentHintElement, "b3-list-item"));
currentHintElement?.classList.add("b3-list-item--focus");
}
this.bindUploadEvent(protyle, this.element);
if (this.source !== "hint") {
const searchElement = this.element.querySelector("input.b3-text-field") as HTMLInputElement;

View file

@ -1,5 +1,5 @@
const isNormalItem = (currentHintElement: HTMLElement, className: string) => {
return !currentHintElement.classList.contains(className) || currentHintElement.getBoundingClientRect().height === 0;
export const isAbnormalItem = (currentHintElement: HTMLElement, className: string) => {
return !currentHintElement || !currentHintElement.classList.contains(className) || currentHintElement.getBoundingClientRect().height === 0;
};
export const upDownHint = (listElement: Element, event: KeyboardEvent, classActiveName = "b3-list-item--focus", defaultElement?: Element) => {
@ -19,13 +19,13 @@ export const upDownHint = (listElement: Element, event: KeyboardEvent, classActi
currentHintElement.classList.remove(classActiveName);
currentHintElement = currentHintElement.nextElementSibling as HTMLElement;
while (currentHintElement && isNormalItem(currentHintElement, className)) {
while (isAbnormalItem(currentHintElement, className)) {
currentHintElement = currentHintElement.nextElementSibling as HTMLElement;
}
if (!currentHintElement) {
currentHintElement = listElement.children[0] as HTMLElement;
while (currentHintElement && isNormalItem(currentHintElement, className)) {
while (isAbnormalItem(currentHintElement, className)) {
currentHintElement = currentHintElement.nextElementSibling as HTMLElement;
}
}
@ -44,7 +44,7 @@ export const upDownHint = (listElement: Element, event: KeyboardEvent, classActi
currentHintElement.classList.remove(classActiveName);
currentHintElement = currentHintElement.previousElementSibling as HTMLElement;
while (currentHintElement && isNormalItem(currentHintElement, className)) {
while (isAbnormalItem(currentHintElement, className)) {
currentHintElement = currentHintElement.previousElementSibling as HTMLElement;
}
@ -70,7 +70,7 @@ export const upDownHint = (listElement: Element, event: KeyboardEvent, classActi
event.stopPropagation();
currentHintElement.classList.remove(classActiveName);
currentHintElement = listElement.children[0] as HTMLElement;
while (currentHintElement && isNormalItem(currentHintElement, className)) {
while (isAbnormalItem(currentHintElement, className)) {
currentHintElement = currentHintElement.nextElementSibling as HTMLElement;
}
if (!currentHintElement) {
@ -84,7 +84,7 @@ export const upDownHint = (listElement: Element, event: KeyboardEvent, classActi
event.stopPropagation();
currentHintElement.classList.remove(classActiveName);
currentHintElement = listElement.children[listElement.children.length - 1] as HTMLElement;
while (currentHintElement && isNormalItem(currentHintElement, className)) {
while (isAbnormalItem(currentHintElement, className)) {
currentHintElement = currentHintElement.previousElementSibling as HTMLElement;
}
if (!currentHintElement) {