Vanessa 2022-06-25 22:55:09 +08:00
parent 51d3d68981
commit 4b7c67a1cd
6 changed files with 130 additions and 106 deletions

View file

@ -235,7 +235,28 @@ progressLoading: 400
box-sizing: border-box; box-sizing: border-box;
height: 22px; height: 22px;
line-height: 22px; line-height: 22px;
&__msg {
font-size: 12px; font-size: 12px;
color: var(--b3-theme-on-surface);
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
#barDock {
&:hover .b3-menu {
display: block;
}
.b3-menu {
display: none;
&__item:hover {
background-color: var(--b3-list-hover);
}
}
}
} }
.config { .config {

View file

@ -145,7 +145,7 @@ export const transactionError = (data: { code: number, data: string }) => {
}; };
export const progressStatus = (data: IWebSocketData) => { export const progressStatus = (data: IWebSocketData) => {
document.getElementById("statusMsg").innerHTML = data.data; document.querySelector("#status .status__msg").innerHTML = data.data;
}; };
export const progressLoading = (data: IWebSocketData) => { export const progressLoading = (data: IWebSocketData) => {

View file

@ -1,35 +1,12 @@
import {MenuItem} from "./Menu"; import {MenuItem} from "./Menu";
import {mountHelp} from "../util/mount";
import {openSetting} from "../config"; import {openSetting} from "../config";
/// #if !BROWSER /// #if !BROWSER
import {getCurrentWindow} from "@electron/remote"; import {getCurrentWindow} from "@electron/remote";
/// #endif /// #endif
import {exportLayout, getDockByType} from "../layout/util";
import {fetchPost} from "../util/fetch";
import {getAllDocks} from "../layout/getAll";
import {hasClosestByClassName} from "../protyle/util/hasClosest";
import {openHistory} from "../util/history"; import {openHistory} from "../util/history";
export const initToolbarMore = () => { export const initToolbarMore = () => {
window.siyuan.menus.menu.remove(); window.siyuan.menus.menu.remove();
getAllDocks().forEach(item => {
window.siyuan.menus.menu.append(new MenuItem({
icon: item.icon,
accelerator: window.siyuan.config.keymap.general[item.hotkeyLangId].custom,
label: window.siyuan.languages[item.hotkeyLangId],
click: () => {
getDockByType(item.type).toggleModel(item.type);
if (item.type === "file" && getSelection().rangeCount > 0) {
const range = getSelection().getRangeAt(0);
const wysiwygElement = hasClosestByClassName(range.startContainer, "protyle-wysiwyg", true);
if (wysiwygElement) {
wysiwygElement.blur();
}
}
}
}).element);
});
window.siyuan.menus.menu.append(new MenuItem({type: "separator"}).element);
if (!window.siyuan.config.readonly) { if (!window.siyuan.config.readonly) {
window.siyuan.menus.menu.append(new MenuItem({ window.siyuan.menus.menu.append(new MenuItem({
icon: "iconSettings", icon: "iconSettings",
@ -39,6 +16,7 @@ export const initToolbarMore = () => {
openSetting(); openSetting();
} }
}).element); }).element);
}
window.siyuan.menus.menu.append(new MenuItem({ window.siyuan.menus.menu.append(new MenuItem({
label: window.siyuan.languages.dataHistory, label: window.siyuan.languages.dataHistory,
icon: "iconVideo", icon: "iconVideo",
@ -47,39 +25,6 @@ export const initToolbarMore = () => {
openHistory(); openHistory();
} }
}).element); }).element);
}
window.siyuan.menus.menu.append(new MenuItem({
icon: "iconLock",
accelerator: window.siyuan.config.keymap.general.lockScreen.custom,
label: window.siyuan.languages.lockScreen,
click: () => {
exportLayout(false, () => {
fetchPost("/api/system/logoutAuth", {}, () => {
window.location.href = "/";
});
});
}
}).element);
window.siyuan.menus.menu.append(new MenuItem({
icon: "iconHeart",
label: window.siyuan.languages.feedback,
click: () => {
if ("zh_CN" === window.siyuan.config.lang) {
window.open("https://ld246.com/article/1649901726096");
} else {
window.open("https://github.com/siyuan-note/siyuan/issues");
}
}
}).element);
if (!window.siyuan.config.readonly) {
window.siyuan.menus.menu.append(new MenuItem({
icon: "iconHelp",
label: window.siyuan.languages.help,
click: () => {
mountHelp();
}
}).element);
}
/// #if !BROWSER /// #if !BROWSER
window.siyuan.menus.menu.append(new MenuItem({ window.siyuan.menus.menu.append(new MenuItem({
icon: "iconBug", icon: "iconBug",

View file

@ -255,7 +255,7 @@ export const globalShortcut = () => {
event.preventDefault(); event.preventDefault();
return; return;
} }
if (!window.siyuan.config.readonly && matchHotKey(window.siyuan.config.keymap.general.history.custom, event)) { if (matchHotKey(window.siyuan.config.keymap.general.history.custom, event)) {
openHistory(); openHistory();
event.preventDefault(); event.preventDefault();
return; return;

View file

@ -310,7 +310,7 @@ export const openHistory = () => {
window.siyuan.menus.menu.popup({x: event.clientX, y: event.clientY}); window.siyuan.menus.menu.popup({x: event.clientX, y: event.clientY});
window.siyuan.menus.menu.element.style.zIndex = "310"; window.siyuan.menus.menu.element.style.zIndex = "310";
break; break;
} else if (target.classList.contains("b3-list-item__action")) { } else if (target.classList.contains("b3-list-item__action") && !window.siyuan.config.readonly) {
confirmDialog("⚠️ " + window.siyuan.languages.rollback, `${window.siyuan.languages.rollbackConfirm.replace("${date}", target.parentElement.textContent.trim())}`, () => { confirmDialog("⚠️ " + window.siyuan.languages.rollback, `${window.siyuan.languages.rollbackConfirm.replace("${date}", target.parentElement.textContent.trim())}`, () => {
const dataType = target.parentElement.getAttribute("data-type"); const dataType = target.parentElement.getAttribute("data-type");
if (dataType === "assets") { if (dataType === "assets") {

View file

@ -1,5 +1,5 @@
import {openSearch} from "../search/spread"; import {openSearch} from "../search/spread";
import {exportLayout, JSONToLayout, resizeDrag, resizeTabs} from "../layout/util"; import {exportLayout, getDockByType, JSONToLayout, resizeDrag, resizeTabs} from "../layout/util";
import {hotKey2Electron, updateHotkeyTip} from "../protyle/util/compatibility"; import {hotKey2Electron, updateHotkeyTip} from "../protyle/util/compatibility";
/// #if !BROWSER /// #if !BROWSER
import {ipcRenderer} from "electron"; import {ipcRenderer} from "electron";
@ -22,6 +22,8 @@ import {focusByRange} from "../protyle/util/selection";
import {exitSiYuan} from "../dialog/processSystem"; import {exitSiYuan} from "../dialog/processSystem";
import {openSetting} from "../config"; import {openSetting} from "../config";
import {getSearch} from "./functions"; import {getSearch} from "./functions";
import {getAllDocks} from "../layout/getAll";
import {hasClosestByClassName} from "../protyle/util/hasClosest";
const matchKeymap = (keymap: Record<string, IKeymapItem>, key1: "general" | "editor", key2?: "general" | "insert" | "heading" | "list" | "table") => { const matchKeymap = (keymap: Record<string, IKeymapItem>, key1: "general" | "editor", key2?: "general" | "insert" | "heading" | "list" | "table") => {
if (key1 === "general") { if (key1 === "general") {
@ -155,44 +157,45 @@ export const onGetConfig = () => {
}; };
const initStatus = () => { const initStatus = () => {
document.querySelector(".status").innerHTML = `<div id="barDock" class="toolbar__item b3-tooltips b3-tooltips__ne${window.siyuan.config.readonly ? " fn__none" : ""}" aria-label="${window.siyuan.config.uiLayout.hideDock ? window.siyuan.languages.showDock : window.siyuan.languages.hideDock}"> const allDocks = getAllDocks();
let menuHTML = ''
allDocks.forEach(item => {
menuHTML += `<button class="b3-menu__item" data-type="${item.type}"><svg class="b3-menu__icon""><use xlink:href="#${item.icon}"></use></svg><span class="b3-menu__label">${window.siyuan.languages[item.hotkeyLangId]}</span><span class="b3-menu__accelerator">${window.siyuan.config.keymap.general[item.hotkeyLangId].custom}</span></button>`
});
document.getElementById("status").innerHTML = `<div id="barDock" class="toolbar__item b3-tooltips b3-tooltips__e${window.siyuan.config.readonly ? " fn__none" : ""}" aria-label="${window.siyuan.config.uiLayout.hideDock ? window.siyuan.languages.showDock : window.siyuan.languages.hideDock}">
<svg> <svg>
<use xlink:href="#${window.siyuan.config.uiLayout.hideDock ? "iconDock" : "iconHideDock"}"></use> <use xlink:href="#${window.siyuan.config.uiLayout.hideDock ? "iconDock" : "iconHideDock"}"></use>
</svg> </svg>
<div class="b3-menu" style="bottom: 21px;left: 4px">
${menuHTML}
</div> </div>
<div class="fn__space"></div> </div>
<div id="statusMsg"></div> <div class="status__msg"></div>
<div class="fn__space"></div>
<div class="fn__flex-1"></div> <div class="fn__flex-1"></div>
<div id="barSync" class="toolbar__item b3-tooltips b3-tooltips__nw" aria-label="${window.siyuan.config.sync.stat || (window.siyuan.languages.syncNow + " F9")}"> <div id="barSync" class="toolbar__item b3-tooltips b3-tooltips__nw" aria-label="${window.siyuan.config.sync.stat || (window.siyuan.languages.syncNow + " F9")}">
<svg> <svg><use xlink:href="#iconRefresh"></use></svg>
<use xlink:href="#iconRefresh"></use> </div>
</svg> <div id="barLock" class="toolbar__item b3-tooltips b3-tooltips__nw" aria-label="${window.siyuan.languages.lockScreen} ${updateHotkeyTip(window.siyuan.config.keymap.general.lockScreen.custom)}">
<svg><use xlink:href="#iconLock"></use></svg>
</div>
<div id="barFeedback" class="toolbar__item b3-tooltips b3-tooltips__nw" aria-label="${window.siyuan.languages.feedback}">
<svg><use xlink:href="#iconHeart"></use></svg>
</div>
<div id="barHelp" class="toolbar__item b3-tooltips b3-tooltips__nw" aria-label="${window.siyuan.languages.help}">
<svg><use xlink:href="#iconHelp"></use></svg>
</div>` </div>`
const baSyncElement = document.getElementById("barSync"); document.querySelector("#status").addEventListener("click", (event) => {
baSyncElement.addEventListener("click", () => { let target = event.target as HTMLElement
if (needSubscribe()) { while (target.id !== "status") {
return; if (target.id === 'barDock') {
} const useElement = target.firstElementChild.firstElementChild
if (!window.siyuan.config.sync.enabled) {
showMessage(window.siyuan.languages._kernel[124]);
return;
}
if (baSyncElement.firstElementChild.classList.contains("fn__rotate")) {
return;
}
fetchPost("/api/sync/performSync", {});
});
const barDockElement = document.getElementById("barDock");
const useElement = document.querySelector("#barDock use");
barDockElement.addEventListener("click", () => {
const dockIsShow = useElement.getAttribute("xlink:href") === "#iconHideDock"; const dockIsShow = useElement.getAttribute("xlink:href") === "#iconHideDock";
if (dockIsShow) { if (dockIsShow) {
useElement.setAttribute("xlink:href", "#iconDock"); useElement.setAttribute("xlink:href", "#iconDock");
barDockElement.setAttribute("aria-label", window.siyuan.languages.showDock); target.setAttribute("aria-label", window.siyuan.languages.showDock);
} else { } else {
useElement.setAttribute("xlink:href", "#iconHideDock"); useElement.setAttribute("xlink:href", "#iconHideDock");
barDockElement.setAttribute("aria-label", window.siyuan.languages.hideDock); target.setAttribute("aria-label", window.siyuan.languages.hideDock);
} }
document.querySelectorAll(".dock").forEach(item => { document.querySelectorAll(".dock").forEach(item => {
if (dockIsShow) { if (dockIsShow) {
@ -206,7 +209,62 @@ const initStatus = () => {
} }
}); });
resizeTabs(); resizeTabs();
event.stopPropagation();
break;
} else if (target.id === "barSync") {
if (needSubscribe()) {
return;
}
if (!window.siyuan.config.sync.enabled) {
showMessage(window.siyuan.languages._kernel[124]);
return;
}
if (target.firstElementChild.classList.contains("fn__rotate")) {
return;
}
fetchPost("/api/sync/performSync", {});
event.stopPropagation();
break;
} else if (target.classList.contains("b3-menu__item")) {
const type = target.getAttribute("data-type") as TDockType
getDockByType(type).toggleModel(type);
if (type === "file" && getSelection().rangeCount > 0) {
const range = getSelection().getRangeAt(0);
const wysiwygElement = hasClosestByClassName(range.startContainer, "protyle-wysiwyg", true);
if (wysiwygElement) {
wysiwygElement.blur();
}
}
target.parentElement.style.display = "none";
setTimeout(() => {
target.parentElement.style.display = "";
}, Constants.TIMEOUT_BLOCKLOAD);
event.stopPropagation();
break;
} else if (target.id === "barLock") {
exportLayout(false, () => {
fetchPost("/api/system/logoutAuth", {}, () => {
window.location.href = "/";
}); });
});
event.stopPropagation();
break;
} else if (target.id === "barHelp") {
mountHelp();
event.stopPropagation();
break;
} else if (target.id === "barFeedback") {
if ("zh_CN" === window.siyuan.config.lang) {
window.open("https://ld246.com/article/1649901726096");
} else {
window.open("https://github.com/siyuan-note/siyuan/issues");
}
event.stopPropagation();
break;
}
target = target.parentElement
}
})
} }
const initBar = () => { const initBar = () => {