mirror of
https://github.com/siyuan-note/siyuan.git
synced 2026-01-18 14:35:27 +01:00
126 lines
7.3 KiB
TypeScript
126 lines
7.3 KiB
TypeScript
import {fetchPost} from "../../util/fetch";
|
|
import {escapeHtml} from "../../util/escape";
|
|
import {openCard} from "../../card/openCard";
|
|
import {getDockByType} from "../../layout/tabUtil";
|
|
import {getAllTabs} from "../../layout/getAll";
|
|
import {App} from "../../index";
|
|
import {Constants} from "../../constants";
|
|
import {matchHotKey} from "../../protyle/util/hotKey";
|
|
|
|
export const windowKeyUp = (app: App, event: KeyboardEvent) => {
|
|
window.siyuan.ctrlIsPressed = false;
|
|
window.siyuan.shiftIsPressed = false;
|
|
window.siyuan.altIsPressed = false;
|
|
const switchDialog = window.siyuan.dialogs.find(item => {
|
|
if (item.element.getAttribute("data-key") === Constants.DIALOG_SWITCHTAB) {
|
|
return true;
|
|
}
|
|
});
|
|
if (switchDialog && switchDialog.element.parentElement) {
|
|
if (window.siyuan.config.keymap.general.goToEditTabNext.custom.endsWith(Constants.KEYCODELIST[event.keyCode]) ||
|
|
window.siyuan.config.keymap.general.goToEditTabPrev.custom.endsWith(Constants.KEYCODELIST[event.keyCode])) {
|
|
let currentLiElement = switchDialog.element.querySelector(".b3-list-item--focus");
|
|
currentLiElement.classList.remove("b3-list-item--focus");
|
|
if (matchHotKey(window.siyuan.config.keymap.general.goToEditTabPrev.custom, event)) {
|
|
if (currentLiElement.previousElementSibling) {
|
|
currentLiElement.previousElementSibling.classList.add("b3-list-item--focus");
|
|
} else if (currentLiElement.getAttribute("data-original")) {
|
|
currentLiElement.parentElement.lastElementChild.classList.add("b3-list-item--focus");
|
|
currentLiElement.removeAttribute("data-original");
|
|
} else if (currentLiElement.parentElement.nextElementSibling) {
|
|
if (currentLiElement.parentElement.nextElementSibling.lastElementChild) {
|
|
currentLiElement.parentElement.nextElementSibling.lastElementChild.classList.add("b3-list-item--focus");
|
|
} else {
|
|
currentLiElement.parentElement.lastElementChild.classList.add("b3-list-item--focus");
|
|
}
|
|
} else if (currentLiElement.parentElement.previousElementSibling) {
|
|
currentLiElement.parentElement.previousElementSibling.lastElementChild.classList.add("b3-list-item--focus");
|
|
}
|
|
} else {
|
|
if (currentLiElement.nextElementSibling) {
|
|
currentLiElement.nextElementSibling.classList.add("b3-list-item--focus");
|
|
} else if (currentLiElement.getAttribute("data-original")) {
|
|
currentLiElement.parentElement.firstElementChild.classList.add("b3-list-item--focus");
|
|
currentLiElement.removeAttribute("data-original");
|
|
} else if (currentLiElement.parentElement.nextElementSibling) {
|
|
if (currentLiElement.parentElement.nextElementSibling.firstElementChild) {
|
|
currentLiElement.parentElement.nextElementSibling.firstElementChild.classList.add("b3-list-item--focus");
|
|
} else {
|
|
currentLiElement.parentElement.firstElementChild.classList.add("b3-list-item--focus");
|
|
}
|
|
} else if (currentLiElement.parentElement.previousElementSibling) {
|
|
currentLiElement.parentElement.previousElementSibling.firstElementChild.classList.add("b3-list-item--focus");
|
|
}
|
|
}
|
|
currentLiElement = switchDialog.element.querySelector(".b3-list-item--focus");
|
|
if (currentLiElement) {
|
|
const rootId = currentLiElement.getAttribute("data-node-id");
|
|
if (rootId) {
|
|
fetchPost("/api/filetree/getFullHPathByID", {
|
|
id: rootId
|
|
}, (response) => {
|
|
currentLiElement.parentElement.parentElement.nextElementSibling.innerHTML = escapeHtml(response.data);
|
|
});
|
|
} else {
|
|
currentLiElement.parentElement.parentElement.nextElementSibling.innerHTML = currentLiElement.querySelector(".b3-list-item__text").innerHTML;
|
|
}
|
|
const currentRect = currentLiElement.getBoundingClientRect();
|
|
const currentParentRect = currentLiElement.parentElement.getBoundingClientRect();
|
|
if (currentRect.top < currentParentRect.top) {
|
|
currentLiElement.scrollIntoView(true);
|
|
} else if (currentRect.bottom > currentParentRect.bottom) {
|
|
currentLiElement.scrollIntoView(false);
|
|
}
|
|
}
|
|
const originalElement = switchDialog.element.querySelector('[data-original="true"]');
|
|
if (originalElement) {
|
|
originalElement.removeAttribute("data-original");
|
|
}
|
|
} else if (window.siyuan.config.keymap.general.goToEditTabNext.custom.startsWith(Constants.KEYCODELIST[event.keyCode]) ||
|
|
window.siyuan.config.keymap.general.goToEditTabPrev.custom.startsWith(Constants.KEYCODELIST[event.keyCode])) {
|
|
let currentLiElement = switchDialog.element.querySelector(".b3-list-item--focus");
|
|
// 快速切换时,不触发 Tab
|
|
if (currentLiElement.getAttribute("data-original")) {
|
|
currentLiElement.classList.remove("b3-list-item--focus");
|
|
if (matchHotKey(window.siyuan.config.keymap.general.goToEditTabPrev.custom, event)) {
|
|
// 上一个
|
|
if (currentLiElement.previousElementSibling) {
|
|
currentLiElement.previousElementSibling.classList.add("b3-list-item--focus");
|
|
} else {
|
|
currentLiElement.parentElement.lastElementChild.classList.add("b3-list-item--focus");
|
|
currentLiElement.removeAttribute("data-original");
|
|
}
|
|
} else {
|
|
if (currentLiElement.nextElementSibling) {
|
|
currentLiElement.nextElementSibling.classList.add("b3-list-item--focus");
|
|
} else {
|
|
currentLiElement.parentElement.firstElementChild.classList.add("b3-list-item--focus");
|
|
}
|
|
}
|
|
currentLiElement.removeAttribute("data-original");
|
|
currentLiElement = switchDialog.element.querySelector(".b3-list-item--focus");
|
|
}
|
|
const currentType = currentLiElement.getAttribute("data-type");
|
|
if (currentType) {
|
|
if (currentType === "riffCard") {
|
|
openCard(app);
|
|
} else {
|
|
getDockByType(currentType).toggleModel(currentType, true);
|
|
}
|
|
if (document.activeElement) {
|
|
(document.activeElement as HTMLElement).blur();
|
|
}
|
|
} else {
|
|
const currentId = currentLiElement.getAttribute("data-id");
|
|
getAllTabs().find(item => {
|
|
if (item.id === currentId) {
|
|
item.parent.switchTab(item.headElement);
|
|
item.parent.showHeading();
|
|
return true;
|
|
}
|
|
});
|
|
}
|
|
switchDialog.destroy();
|
|
}
|
|
}
|
|
};
|