This commit is contained in:
Vanessa 2023-04-09 11:41:02 +08:00
parent 1bc838aa88
commit 5e9a6d9106
13 changed files with 130 additions and 104 deletions

View file

@ -29,16 +29,19 @@
} }
&--fullscreen { &--fullscreen {
top: 0; top: 100vh;
left: 0; left: 0;
width: 100%; width: 100%;
border: 0; border: 0;
box-shadow: none; box-shadow: none;
bottom: 0;
right: 0; right: 0;
max-height: none; max-height: none;
height: 100vh;
padding: 0; padding: 0;
border-radius: 0; border-radius: 0;
transition: transform 0.15s cubic-bezier(0, 0, 0.2, 1) 0ms;
display: flex;
flex-direction: column;
.b3-menu { .b3-menu {
&__submenu { &__submenu {
@ -49,21 +52,27 @@
right: 0; right: 0;
box-shadow: none; box-shadow: none;
border: 0; border: 0;
padding: 27px 0 0 0; padding: 24px 0;
& > .b3-menu__item:first-child { & > .b3-menu__item:first-child {
border-top: .5px solid var(--b3-theme-background-light); border-top: .5px solid var(--b3-theme-background-light);
} }
} }
&__items {
flex: 1;
overflow: auto;
padding: 24px 0;
}
&__item { &__item {
border-bottom: .5px solid var(--b3-theme-background-light); border-bottom: .5px solid var(--b3-theme-background-light);
line-height: 42px; line-height: 42px;
background-color: var(--b3-theme-background); background-color: var(--b3-theme-background);
text-decoration: none; text-decoration: none;
&:last-child { &:first-child {
margin-bottom: 24px; border-top: .5px solid var(--b3-theme-background-light);
} }
&--show > .b3-menu__submenu--row { &--show > .b3-menu__submenu--row {
@ -88,9 +97,7 @@
padding: 0 8px; padding: 0 8px;
display: flex; display: flex;
background-color: var(--b3-theme-background); background-color: var(--b3-theme-background);
position: sticky; height: 48.5px;
top: 0;
z-index: 1;
} }
&__separator { &__separator {

View file

@ -241,9 +241,9 @@
} }
#menu { #menu {
transition: transform 0.15s cubic-bezier(0, 0, 0.2, 1) 0ms;
z-index: 220; z-index: 220;
transform: translateX(100vw); transform: translateX(100vw);
top: 0;
} }
.keyboard { .keyboard {

View file

@ -24,7 +24,13 @@
</div> </div>
<div id="dockBottom" class="dock fn__none"></div> <div id="dockBottom" class="dock fn__none"></div>
<div id="status" class="fn__flex status"></div> <div id="status" class="fn__flex status"></div>
<div id="commonMenu" class="b3-menu fn__none"></div> <div id="commonMenu" class="b3-menu fn__none">
<div class="b3-menu__title fn__none">
<svg class="b3-menu__icon"><use xlink:href="#iconLeft"></use></svg>
<span class="b3-menu__label"></span>
</div>
<div class="b3-menu__items"></div>
</div>
<div id="message" class="b3-snackbars"></div> <div id="message" class="b3-snackbars"></div>
<script> <script>
setTimeout(() => { setTimeout(() => {

View file

@ -15,7 +15,13 @@
<div id="layouts" class="layout fn__flex-1"></div> <div id="layouts" class="layout fn__flex-1"></div>
</div> </div>
<div id="status" class="fn__flex status"></div> <div id="status" class="fn__flex status"></div>
<div id="commonMenu" class="b3-menu fn__none"></div> <div id="commonMenu" class="b3-menu fn__none">
<div class="b3-menu__title fn__none">
<svg class="b3-menu__icon"><use xlink:href="#iconLeft"></use></svg>
<span class="b3-menu__label"></span>
</div>
<div class="b3-menu__items"></div>
</div>
<div id="message" class="b3-snackbars"></div> <div id="message" class="b3-snackbars"></div>
</body> </body>
</html> </html>

View file

@ -23,7 +23,13 @@
</div> </div>
<div id="dockBottom" class="dock fn__none"></div> <div id="dockBottom" class="dock fn__none"></div>
<div id="status" class="fn__flex status"></div> <div id="status" class="fn__flex status"></div>
<div id="commonMenu" class="b3-menu fn__none"></div> <div id="commonMenu" class="b3-menu fn__none">
<div class="b3-menu__title fn__none">
<svg class="b3-menu__icon"><use xlink:href="#iconLeft"></use></svg>
<span class="b3-menu__label"></span>
</div>
<div class="b3-menu__items"></div>
</div>
<div id="message" class="b3-snackbars"></div> <div id="message" class="b3-snackbars"></div>
</body> </body>
</html> </html>

View file

@ -56,7 +56,13 @@
</div> </div>
<div id="modelMain" class="fn__flex-1"></div> <div id="modelMain" class="fn__flex-1"></div>
</div> </div>
<div id="commonMenu" class="b3-menu fn__none"></div> <div id="commonMenu" class="b3-menu fn__none">
<div class="b3-menu__title fn__none">
<svg class="b3-menu__icon"><use xlink:href="#iconLeft"></use></svg>
<span class="b3-menu__label"></span>
</div>
<div class="b3-menu__items"></div>
</div>
<div id="message" class="b3-snackbars"></div> <div id="message" class="b3-snackbars"></div>
<div id="status" class="status status--hide"></div> <div id="status" class="status status--hide"></div>
<div id="keyboardToolbar" class="keyboard fn__none"></div> <div id="keyboardToolbar" class="keyboard fn__none"></div>

View file

@ -193,7 +193,7 @@ export const addEmoji = (unicode: string) => {
export const openEmojiPanel = (id: string, target: HTMLElement, isNotebook = false) => { export const openEmojiPanel = (id: string, target: HTMLElement, isNotebook = false) => {
window.siyuan.menus.menu.remove(); window.siyuan.menus.menu.remove();
window.siyuan.menus.menu.element.innerHTML = `<div class="emojis" style="width: ${isMobile() ? "80vw" : "360px"}"> window.siyuan.menus.menu.element.lastElementChild.innerHTML = `<div class="emojis" style="width: ${isMobile() ? "80vw" : "360px"}">
<div class="fn__flex"> <div class="fn__flex">
<span class="fn__space"></span> <span class="fn__space"></span>
<label class="b3-form__icon fn__flex-1"> <label class="b3-form__icon fn__flex-1">
@ -220,7 +220,7 @@ export const openEmojiPanel = (id: string, target: HTMLElement, isNotebook = fal
<div data-type="9" class="emojis__type" aria-label="${window.siyuan.emojis[8][window.siyuan.config.lang === "zh_CN" ? "title_zh_cn" : "title"]}">${unicode2Emoji("1f6a9")}</div> <div data-type="9" class="emojis__type" aria-label="${window.siyuan.emojis[8][window.siyuan.config.lang === "zh_CN" ? "title_zh_cn" : "title"]}">${unicode2Emoji("1f6a9")}</div>
</div> </div>
</div>`; </div>`;
window.siyuan.menus.menu.element.firstElementChild.querySelector(".emojis__item").classList.add("emojis__item--current"); window.siyuan.menus.menu.element.querySelector(".emojis__item").classList.add("emojis__item--current");
const rect = target.getBoundingClientRect(); const rect = target.getBoundingClientRect();
window.siyuan.menus.menu.popup({x: rect.left, y: rect.top + rect.height}); window.siyuan.menus.menu.popup({x: rect.left, y: rect.top + rect.height});
const inputElement = window.siyuan.menus.menu.element.querySelector(".b3-text-field") as HTMLInputElement; const inputElement = window.siyuan.menus.menu.element.querySelector(".b3-text-field") as HTMLInputElement;
@ -233,7 +233,7 @@ export const openEmojiPanel = (id: string, target: HTMLElement, isNotebook = fal
emojisContentElement.nextElementSibling.classList.remove("fn__none"); emojisContentElement.nextElementSibling.classList.remove("fn__none");
} }
emojisContentElement.scrollTop = 0; emojisContentElement.scrollTop = 0;
window.siyuan.menus.menu.element.firstElementChild.querySelector(".emojis__item")?.classList.add("emojis__item--current"); window.siyuan.menus.menu.element.querySelector(".emojis__item")?.classList.add("emojis__item--current");
if (inputElement.value === "") { if (inputElement.value === "") {
lazyLoadEmoji(window.siyuan.menus.menu.element); lazyLoadEmoji(window.siyuan.menus.menu.element);
} }
@ -250,7 +250,7 @@ export const openEmojiPanel = (id: string, target: HTMLElement, isNotebook = fal
emojisContentElement.nextElementSibling.classList.remove("fn__none"); emojisContentElement.nextElementSibling.classList.remove("fn__none");
} }
emojisContentElement.scrollTop = 0; emojisContentElement.scrollTop = 0;
window.siyuan.menus.menu.element.firstElementChild.querySelector(".emojis__item")?.classList.add("emojis__item--current"); window.siyuan.menus.menu.element.querySelector(".emojis__item")?.classList.add("emojis__item--current");
if (inputElement.value === "") { if (inputElement.value === "") {
lazyLoadEmoji(window.siyuan.menus.menu.element); lazyLoadEmoji(window.siyuan.menus.menu.element);
} }
@ -263,7 +263,7 @@ export const openEmojiPanel = (id: string, target: HTMLElement, isNotebook = fal
if (event.key.indexOf("Arrow") === -1 && event.key !== "Enter") { if (event.key.indexOf("Arrow") === -1 && event.key !== "Enter") {
return; return;
} }
const currentElement = window.siyuan.menus.menu.element.firstElementChild.querySelector(".emojis__item--current"); const currentElement = window.siyuan.menus.menu.element.querySelector(".emojis__item--current");
if (!currentElement) { if (!currentElement) {
return; return;
} }
@ -335,7 +335,7 @@ export const openEmojiPanel = (id: string, target: HTMLElement, isNotebook = fal
lazyLoadEmoji(window.siyuan.menus.menu.element); lazyLoadEmoji(window.siyuan.menus.menu.element);
lazyLoadEmojiImg(window.siyuan.menus.menu.element); lazyLoadEmojiImg(window.siyuan.menus.menu.element);
// 不能使用 getEventName 否则 https://github.com/siyuan-note/siyuan/issues/5472 // 不能使用 getEventName 否则 https://github.com/siyuan-note/siyuan/issues/5472
window.siyuan.menus.menu.element.firstElementChild.addEventListener("click", (event) => { window.siyuan.menus.menu.element.lastElementChild.firstElementChild.addEventListener("click", (event) => {
const eventTarget = event.target as HTMLElement; const eventTarget = event.target as HTMLElement;
const typeElement = hasClosestByClassName(eventTarget, "emojis__type"); const typeElement = hasClosestByClassName(eventTarget, "emojis__type");
if (typeElement) { if (typeElement) {

View file

@ -131,7 +131,6 @@ class App {
} }
} }
}), }),
menus: new Menus()
}; };
fetchPost("/api/system/getConf", {}, response => { fetchPost("/api/system/getConf", {}, response => {
window.siyuan.config = response.data.conf; window.siyuan.config = response.data.conf;
@ -153,6 +152,7 @@ class App {
getLocalStorage(() => { getLocalStorage(() => {
fetchGet(`/appearance/langs/${window.siyuan.config.appearance.lang}.json?v=${Constants.SIYUAN_VERSION}`, (lauguages) => { fetchGet(`/appearance/langs/${window.siyuan.config.appearance.lang}.json?v=${Constants.SIYUAN_VERSION}`, (lauguages) => {
window.siyuan.languages = lauguages; window.siyuan.languages = lauguages;
window.siyuan.menus = new Menus();
bootSync(); bootSync();
fetchPost("/api/setting/getCloudUser", {}, userResponse => { fetchPost("/api/setting/getCloudUser", {}, userResponse => {
window.siyuan.user = userResponse.data; window.siyuan.user = userResponse.data;

View file

@ -12,6 +12,7 @@ export class Menu {
this.wheelEvent = "onwheel" in document.createElement("div") ? "wheel" : "mousewheel"; this.wheelEvent = "onwheel" in document.createElement("div") ? "wheel" : "mousewheel";
this.element = document.getElementById("commonMenu"); this.element = document.getElementById("commonMenu");
this.element.querySelector(".b3-menu__title .b3-menu__label").innerHTML = window.siyuan.languages.back;
this.element.addEventListener(isMobile() ? "click" : "mouseover", (event) => { this.element.addEventListener(isMobile() ? "click" : "mouseover", (event) => {
const target = event.target as Element; const target = event.target as Element;
if (isMobile()) { if (isMobile()) {
@ -92,7 +93,8 @@ export class Menu {
window.removeEventListener(this.wheelEvent, this.preventDefault, false); window.removeEventListener(this.wheelEvent, this.preventDefault, false);
} }
this.element.innerHTML = ""; this.element.firstElementChild.classList.add("fn__none");
this.element.lastElementChild.innerHTML = "";
this.element.classList.add("fn__none"); this.element.classList.add("fn__none");
this.element.classList.remove("b3-menu--list", "b3-menu--fullscreen"); this.element.classList.remove("b3-menu--list", "b3-menu--fullscreen");
this.element.removeAttribute("style"); // zIndex this.element.removeAttribute("style"); // zIndex
@ -103,11 +105,11 @@ export class Menu {
if (!element) { if (!element) {
return; return;
} }
this.element.append(element); this.element.lastElementChild.append(element);
} }
public popup(options: { x: number, y: number, h?: number, w?: number }, isLeft = false) { public popup(options: { x: number, y: number, h?: number, w?: number }, isLeft = false) {
if (this.element.innerHTML === "") { if (this.element.lastElementChild.innerHTML === "") {
return; return;
} }
if (isMobile()) { if (isMobile()) {
@ -122,27 +124,19 @@ export class Menu {
public fullscreen(position: "bottom" | "all" = "all") { public fullscreen(position: "bottom" | "all" = "all") {
this.element.classList.add("b3-menu--fullscreen"); this.element.classList.add("b3-menu--fullscreen");
this.element.insertAdjacentHTML("afterbegin", `<div class="b3-menu__title"> this.element.firstElementChild.classList.remove("fn__none");
<svg class="b3-menu__icon"><use xlink:href="#iconLeft"></use></svg>
<span class="b3-menu__label">${window.siyuan.languages.back}</span>
</div><button class="b3-menu__separator"></button>`);
if (isMobile()) {
window.addEventListener("touchmove", this.preventDefault, {passive: false});
} else {
window.addEventListener(this.wheelEvent, this.preventDefault, {passive: false});
}
this.element.classList.remove("fn__none"); this.element.classList.remove("fn__none");
this.element.style.left = "0"; window.addEventListener("touchmove", this.preventDefault, {passive: false});
if (position === "bottom") { setTimeout(() => {
this.element.querySelectorAll(".b3-menu__submenu").forEach((item: HTMLElement) => { if (position === "bottom") {
item.style.top = "calc(50vh + 48.5px)"; this.element.style.transform = "translateY(-50vh)";
}); this.element.style.height = "50vh";
this.element.style.top = "50vh"; } else {
} else { this.element.style.transform = "translateY(-100vh)";
this.element.style.top = "0"; }
} })
this.element.scrollTop = 0; this.element.lastElementChild.scrollTop = 0;
} }
} }
@ -232,9 +226,9 @@ export const bindMenuKeydown = (event: KeyboardEvent) => {
let actionMenuElement; let actionMenuElement;
if (!currentElement) { if (!currentElement) {
if (event.code === "ArrowUp") { if (event.code === "ArrowUp") {
actionMenuElement = getActionMenu(window.siyuan.menus.menu.element.lastElementChild, false); actionMenuElement = getActionMenu(window.siyuan.menus.menu.element.lastElementChild.lastElementChild, false);
} else { } else {
actionMenuElement = getActionMenu(window.siyuan.menus.menu.element.firstElementChild, true); actionMenuElement = getActionMenu(window.siyuan.menus.menu.element.lastElementChild.firstElementChild, true);
} }
} else { } else {
currentElement.classList.remove("b3-menu__item--current", "b3-menu__item--show"); currentElement.classList.remove("b3-menu__item--current", "b3-menu__item--show");

View file

@ -34,7 +34,6 @@ class App {
dialogs: [], dialogs: [],
blockPanels: [], blockPanels: [],
mobile: {}, mobile: {},
menus: new Menus(),
ws: new Model({ ws: new Model({
id: genUUID(), id: genUUID(),
type: "main", type: "main",
@ -55,6 +54,7 @@ class App {
getLocalStorage(() => { getLocalStorage(() => {
fetchGet(`/appearance/langs/${window.siyuan.config.appearance.lang}.json?v=${Constants.SIYUAN_VERSION}`, (lauguages) => { fetchGet(`/appearance/langs/${window.siyuan.config.appearance.lang}.json?v=${Constants.SIYUAN_VERSION}`, (lauguages) => {
window.siyuan.languages = lauguages; window.siyuan.languages = lauguages;
window.siyuan.menus = new Menus();
document.title = window.siyuan.languages.siyuanNote; document.title = window.siyuan.languages.siyuanNote;
bootSync(); bootSync();
loadAssets(confResponse.data.conf.appearance); loadAssets(confResponse.data.conf.appearance);

View file

@ -39,63 +39,64 @@ export const initRightMenu = () => {
<svg class="b3-menu__icon"><use xlink:href="#iconLeft"></use></svg> <svg class="b3-menu__icon"><use xlink:href="#iconLeft"></use></svg>
<span class="b3-menu__label">${window.siyuan.languages.back}</span> <span class="b3-menu__label">${window.siyuan.languages.back}</span>
</div> </div>
<div class="b3-menu__separator"></div> <div class="b3-menu__items">
${accountHTML} ${accountHTML}
<div id="menuRecent" class="b3-menu__item"> <div id="menuRecent" class="b3-menu__item">
<svg class="b3-menu__icon"><use xlink:href="#iconList"></use></svg><span class="b3-menu__label">${window.siyuan.languages.recentDocs}</span> <svg class="b3-menu__icon"><use xlink:href="#iconList"></use></svg><span class="b3-menu__label">${window.siyuan.languages.recentDocs}</span>
</div> </div>
<div id="menuSearch" class="b3-menu__item"> <div id="menuSearch" class="b3-menu__item">
<svg class="b3-menu__icon"><use xlink:href="#iconSearch"></use></svg><span class="b3-menu__label">${window.siyuan.languages.search}</span> <svg class="b3-menu__icon"><use xlink:href="#iconSearch"></use></svg><span class="b3-menu__label">${window.siyuan.languages.search}</span>
</div> </div>
<div class="b3-menu__item${window.siyuan.config.readonly ? " fn__none" : ""}" id="menuSyncNow"> <div class="b3-menu__item${window.siyuan.config.readonly ? " fn__none" : ""}" id="menuSyncNow">
<svg class="b3-menu__icon"><use xlink:href="#iconCloudSucc"></use></svg><span class="b3-menu__label">${window.siyuan.languages.syncNow}</span> <svg class="b3-menu__icon"><use xlink:href="#iconCloudSucc"></use></svg><span class="b3-menu__label">${window.siyuan.languages.syncNow}</span>
</div> </div>
<div class="b3-menu__item${window.siyuan.config.readonly ? " fn__none" : ""}" id="menuNewNotebook"> <div class="b3-menu__item${window.siyuan.config.readonly ? " fn__none" : ""}" id="menuNewNotebook">
<svg class="b3-menu__icon"><use xlink:href="#iconFilesRoot"></use></svg><span class="b3-menu__label">${window.siyuan.languages.newNotebook}</span> <svg class="b3-menu__icon"><use xlink:href="#iconFilesRoot"></use></svg><span class="b3-menu__label">${window.siyuan.languages.newNotebook}</span>
</div> </div>
<div class="b3-menu__separator"></div> <div class="b3-menu__separator"></div>
<div id="menuNewDaily" class="b3-menu__item${window.siyuan.config.readonly ? " fn__none" : ""}"> <div id="menuNewDaily" class="b3-menu__item${window.siyuan.config.readonly ? " fn__none" : ""}">
<svg class="b3-menu__icon"><use xlink:href="#iconCalendar"></use></svg><span class="b3-menu__label">${window.siyuan.languages.dailyNote}</span> <svg class="b3-menu__icon"><use xlink:href="#iconCalendar"></use></svg><span class="b3-menu__label">${window.siyuan.languages.dailyNote}</span>
</div> </div>
<div id="menuCard" class="b3-menu__item${window.siyuan.config.readonly ? " fn__none" : ""}"> <div id="menuCard" class="b3-menu__item${window.siyuan.config.readonly ? " fn__none" : ""}">
<svg class="b3-menu__icon" style="color: var(--b3-theme-secondary)"><use xlink:href="#iconRiffCard"></use></svg><span class="b3-menu__label">${window.siyuan.languages.riffCard}</span> <svg class="b3-menu__icon" style="color: var(--b3-theme-secondary)"><use xlink:href="#iconRiffCard"></use></svg><span class="b3-menu__label">${window.siyuan.languages.riffCard}</span>
</div> </div>
<div class="b3-menu__item${window.siyuan.config.readonly ? " fn__none" : ""}" id="menuLock"> <div class="b3-menu__item${window.siyuan.config.readonly ? " fn__none" : ""}" id="menuLock">
<svg class="b3-menu__icon"><use xlink:href="#iconLock"></use></svg><span class="b3-menu__label">${window.siyuan.languages.lockScreen}</span> <svg class="b3-menu__icon"><use xlink:href="#iconLock"></use></svg><span class="b3-menu__label">${window.siyuan.languages.lockScreen}</span>
</div> </div>
<div class="b3-menu__item${window.siyuan.config.readonly ? " fn__none" : ""}" id="menuHistory"> <div class="b3-menu__item${window.siyuan.config.readonly ? " fn__none" : ""}" id="menuHistory">
<svg class="b3-menu__icon"><use xlink:href="#iconHistory"></use></svg><span class="b3-menu__label">${window.siyuan.languages.dataHistory}</span> <svg class="b3-menu__icon"><use xlink:href="#iconHistory"></use></svg><span class="b3-menu__label">${window.siyuan.languages.dataHistory}</span>
</div> </div>
<div class="b3-menu__item${(window.webkit?.messageHandlers || window.JSAndroid) ? "" : " fn__none"}" id="menuSafeQuit"> <div class="b3-menu__item${(window.webkit?.messageHandlers || window.JSAndroid) ? "" : " fn__none"}" id="menuSafeQuit">
<svg class="b3-menu__icon"><use xlink:href="#iconQuit"></use></svg><span class="b3-menu__label">${window.siyuan.languages.safeQuit}</span> <svg class="b3-menu__icon"><use xlink:href="#iconQuit"></use></svg><span class="b3-menu__label">${window.siyuan.languages.safeQuit}</span>
</div> </div>
<div class="b3-menu__separator"></div> <div class="b3-menu__separator"></div>
<div class="b3-menu__item${window.siyuan.config.readonly ? " fn__none" : ""}" id="menuEditor"> <div class="b3-menu__item${window.siyuan.config.readonly ? " fn__none" : ""}" id="menuEditor">
<svg class="b3-menu__icon"><use xlink:href="#iconEdit"></use></svg><span class="b3-menu__label">${window.siyuan.languages.editor}</span> <svg class="b3-menu__icon"><use xlink:href="#iconEdit"></use></svg><span class="b3-menu__label">${window.siyuan.languages.editor}</span>
</div> </div>
<div class="b3-menu__item${window.siyuan.config.readonly ? " fn__none" : ""}" id="menuRiffCard"> <div class="b3-menu__item${window.siyuan.config.readonly ? " fn__none" : ""}" id="menuRiffCard">
<svg class="b3-menu__icon"><use xlink:href="#iconRiffCard"></use></svg><span class="b3-menu__label">${window.siyuan.languages.riffCard}</span> <svg class="b3-menu__icon"><use xlink:href="#iconRiffCard"></use></svg><span class="b3-menu__label">${window.siyuan.languages.riffCard}</span>
</div> </div>
<div class="b3-menu__item${window.siyuan.config.readonly ? " fn__none" : ""}" id="menuAI"> <div class="b3-menu__item${window.siyuan.config.readonly ? " fn__none" : ""}" id="menuAI">
<svg class="b3-menu__icon"><use xlink:href="#iconSparkles"></use></svg><span class="b3-menu__label">AI</span> <svg class="b3-menu__icon"><use xlink:href="#iconSparkles"></use></svg><span class="b3-menu__label">AI</span>
</div> </div>
<div class="b3-menu__item${window.siyuan.config.readonly ? " fn__none" : ""}" id="menuAppearance"> <div class="b3-menu__item${window.siyuan.config.readonly ? " fn__none" : ""}" id="menuAppearance">
<svg class="b3-menu__icon"><use xlink:href="#iconTheme"></use></svg><span class="b3-menu__label">${window.siyuan.languages.appearance}</span> <svg class="b3-menu__icon"><use xlink:href="#iconTheme"></use></svg><span class="b3-menu__label">${window.siyuan.languages.appearance}</span>
</div> </div>
<div id="menuSync" class="b3-menu__item${window.siyuan.config.readonly ? " fn__none" : ""}"> <div id="menuSync" class="b3-menu__item${window.siyuan.config.readonly ? " fn__none" : ""}">
<svg class="b3-menu__icon"><use xlink:href="#iconCloud"></use></svg><span class="b3-menu__label">${window.siyuan.languages.cloud}</span> <svg class="b3-menu__icon"><use xlink:href="#iconCloud"></use></svg><span class="b3-menu__label">${window.siyuan.languages.cloud}</span>
</div> </div>
<div class="b3-menu__item" id="menuAbout"> <div class="b3-menu__item" id="menuAbout">
<svg class="b3-menu__icon"><use xlink:href="#iconInfo"></use></svg><span class="b3-menu__label">${window.siyuan.languages.about}</span> <svg class="b3-menu__icon"><use xlink:href="#iconInfo"></use></svg><span class="b3-menu__label">${window.siyuan.languages.about}</span>
</div> </div>
<div class="b3-menu__separator"></div> <div class="b3-menu__separator"></div>
<div class="b3-menu__item" id="menuHelp"> <div class="b3-menu__item" id="menuHelp">
<svg class="b3-menu__icon"><use xlink:href="#iconHelp"></use></svg><span class="b3-menu__label">${window.siyuan.languages.help}</span> <svg class="b3-menu__icon"><use xlink:href="#iconHelp"></use></svg><span class="b3-menu__label">${window.siyuan.languages.help}</span>
</div> </div>
<a class="b3-menu__item" href="${"zh_CN" === window.siyuan.config.lang ? "https://ld246.com/article/1649901726096" : "https://github.com/siyuan-note/siyuan/issues"}" target="_blank"> <a class="b3-menu__item" href="${"zh_CN" === window.siyuan.config.lang ? "https://ld246.com/article/1649901726096" : "https://github.com/siyuan-note/siyuan/issues"}" target="_blank">
<svg class="b3-menu__icon"><use xlink:href="#iconHeart"></use></svg> <svg class="b3-menu__icon"><use xlink:href="#iconHeart"></use></svg>
<span class="b3-menu__label">${window.siyuan.languages.feedback}</span> <span class="b3-menu__label">${window.siyuan.languages.feedback}</span>
</a>`; </a>
</div>`;
processSync(); processSync();
// 只能用 click否则无法上下滚动 https://github.com/siyuan-note/siyuan/issues/6628 // 只能用 click否则无法上下滚动 https://github.com/siyuan-note/siyuan/issues/6628
menuElement.addEventListener("click", (event) => { menuElement.addEventListener("click", (event) => {

View file

@ -409,7 +409,7 @@ export class Background {
html += `<div class="b3-list-item${index === 0 ? " b3-list-item--focus" : ""}">${item}</div>`; html += `<div class="b3-list-item${index === 0 ? " b3-list-item--focus" : ""}">${item}</div>`;
}); });
window.siyuan.menus.menu.remove(); window.siyuan.menus.menu.remove();
window.siyuan.menus.menu.element.innerHTML = `<div class="fn__flex-column" style="max-height:50vh"><input style="margin: 4px 8px 8px 8px" class="b3-text-field"/> window.siyuan.menus.menu.element.lastElementChild.innerHTML = `<div class="fn__flex-column" style="max-height:50vh"><input style="margin: 4px 8px 8px 8px" class="b3-text-field"/>
<div class="b3-list fn__flex-1 b3-list--background" style="position: relative">${html}</div> <div class="b3-list fn__flex-1 b3-list--background" style="position: relative">${html}</div>
</div>`; </div>`;

View file

@ -119,13 +119,13 @@ class App {
} }
} }
}), }),
menus: new Menus()
}; };
fetchPost("/api/system/getConf", {}, response => { fetchPost("/api/system/getConf", {}, response => {
window.siyuan.config = response.data.conf; window.siyuan.config = response.data.conf;
getLocalStorage(() => { getLocalStorage(() => {
fetchGet(`/appearance/langs/${window.siyuan.config.appearance.lang}.json?v=${Constants.SIYUAN_VERSION}`, (lauguages) => { fetchGet(`/appearance/langs/${window.siyuan.config.appearance.lang}.json?v=${Constants.SIYUAN_VERSION}`, (lauguages) => {
window.siyuan.languages = lauguages; window.siyuan.languages = lauguages;
window.siyuan.menus = new Menus();
fetchPost("/api/setting/getCloudUser", {}, userResponse => { fetchPost("/api/setting/getCloudUser", {}, userResponse => {
window.siyuan.user = userResponse.data; window.siyuan.user = userResponse.data;
init(); init();