Vanessa 2023-06-03 21:45:24 +08:00
parent f99d9e19bc
commit f43770d8d2
7 changed files with 43 additions and 20 deletions

View file

@ -82,6 +82,7 @@ export abstract class Constants {
public static readonly LOCAL_PDFTHEME = "local-pdftheme"; public static readonly LOCAL_PDFTHEME = "local-pdftheme";
public static readonly LOCAL_LAYOUTS = "local-layouts"; public static readonly LOCAL_LAYOUTS = "local-layouts";
public static readonly LOCAL_AI = "local-ai"; public static readonly LOCAL_AI = "local-ai";
public static readonly LOCAL_PLUGINTOPUNPIN = "local-plugintopunpin";
// timeout // timeout
public static readonly TIMEOUT_DBLCLICK = 190; public static readonly TIMEOUT_DBLCLICK = 190;

View file

@ -102,7 +102,7 @@ export const initBar = (app: App) => {
} }
}; };
if (!useElement) { if (!useElement) {
const svgElement = hideElement.querySelector("svg"); const svgElement = hideElement.querySelector("svg").cloneNode(true) as HTMLElement;
svgElement.classList.add("b3-menu__icon"); svgElement.classList.add("b3-menu__icon");
menuOptions.iconHTML = svgElement.outerHTML; menuOptions.iconHTML = svgElement.outerHTML;
} }
@ -275,6 +275,31 @@ const openPlugin = (app: App, target: Element) => {
// @ts-ignore // @ts-ignore
const hasSetting = plugin.setting || plugin.__proto__.hasOwnProperty("openSetting"); const hasSetting = plugin.setting || plugin.__proto__.hasOwnProperty("openSetting");
plugin.topBarIcons.forEach(item => { plugin.topBarIcons.forEach(item => {
const hasUnpin = window.siyuan.storage[Constants.LOCAL_PLUGINTOPUNPIN].includes(item.id);
const submenu = [{
icon: "iconPin",
label: hasUnpin ? window.siyuan.languages.pin : window.siyuan.languages.unpin,
click() {
if (hasUnpin) {
window.siyuan.storage[Constants.LOCAL_PLUGINTOPUNPIN].splice(window.siyuan.storage[Constants.LOCAL_PLUGINTOPUNPIN].indexOf(item.id), 1);
item.classList.remove("fn__none")
} else {
window.siyuan.storage[Constants.LOCAL_PLUGINTOPUNPIN].push(item.id);
window.siyuan.storage[Constants.LOCAL_PLUGINTOPUNPIN] = Array.from(new Set(window.siyuan.storage[Constants.LOCAL_PLUGINTOPUNPIN]));
item.classList.add("fn__none")
}
setStorageVal(Constants.LOCAL_PLUGINTOPUNPIN, window.siyuan.storage[Constants.LOCAL_PLUGINTOPUNPIN]);
}
}];
if (hasSetting) {
submenu.push({
icon: "iconSettings",
label: window.siyuan.languages.config,
click() {
plugin.openSetting();
},
})
}
const menuOption: IMenu = { const menuOption: IMenu = {
icon: "iconInfo", icon: "iconInfo",
label: item.getAttribute("aria-label"), label: item.getAttribute("aria-label"),
@ -282,25 +307,12 @@ const openPlugin = (app: App, target: Element) => {
item.dispatchEvent(new CustomEvent("click")) item.dispatchEvent(new CustomEvent("click"))
}, },
type: "submenu", type: "submenu",
submenu: [{ submenu
icon: "iconPin",
label: window.siyuan.languages.pin,
click() {
}
}, {
icon: "iconSettings",
label: window.siyuan.languages.config,
disabled: !hasSetting,
click() {
plugin.openSetting();
},
}]
} }
if (item.querySelector("use")) { if (item.querySelector("use")) {
menuOption.icon = item.querySelector("use").getAttribute("xlink:href").replace("#", ""); menuOption.icon = item.querySelector("use").getAttribute("xlink:href").replace("#", "");
} else { } else {
const svgElement = item.querySelector("svg"); const svgElement = item.querySelector("svg").cloneNode(true) as HTMLElement;
svgElement.classList.add("b3-menu__icon") svgElement.classList.add("b3-menu__icon")
menuOption.iconHTML = svgElement.outerHTML; menuOption.iconHTML = svgElement.outerHTML;
} }

View file

@ -631,6 +631,9 @@ export const resizeTopbar = () => {
} else if (left < right && right - left < width / 3) { } else if (left < right && right - left < width / 3) {
dragElement.style.paddingLeft = (right - left) + "px"; dragElement.style.paddingLeft = (right - left) + "px";
} }
window.siyuan.storage[Constants.LOCAL_PLUGINTOPUNPIN].forEach((id: string) => {
toolbarElement.querySelector("#" + id)?.classList.add("fn__none");
});
}; };
let resizeTimeout: number; let resizeTimeout: number;

View file

@ -77,7 +77,7 @@ export class Plugin {
const iconElement = document.createElement("div"); const iconElement = document.createElement("div");
iconElement.setAttribute("data-menu", "true"); iconElement.setAttribute("data-menu", "true");
iconElement.addEventListener("click", options.callback); iconElement.addEventListener("click", options.callback);
iconElement.id = "plugin" + genUUID(); iconElement.id = `plugin_${this.name}_${this.topBarIcons.length}`;
if (isMobile()) { if (isMobile()) {
iconElement.className = "b3-menu__item"; iconElement.className = "b3-menu__item";
iconElement.innerHTML = (options.icon.startsWith("icon") ? `<svg class="b3-menu__icon"><use xlink:href="#${options.icon}"></use></svg>` : options.icon) + iconElement.innerHTML = (options.icon.startsWith("icon") ? `<svg class="b3-menu__icon"><use xlink:href="#${options.icon}"></use></svg>` : options.icon) +

View file

@ -2,10 +2,11 @@ import {fetchSyncPost} from "../util/fetch";
import {App} from "../index"; import {App} from "../index";
import {Plugin} from "./index"; import {Plugin} from "./index";
/// #if !MOBILE /// #if !MOBILE
import {exportLayout} from "../layout/util"; import {exportLayout, resizeTopbar} from "../layout/util";
/// #endif /// #endif
import {API} from "./API"; import {API} from "./API";
import {getFrontend, isMobile, isWindow} from "../util/functions"; import {getFrontend, isMobile, isWindow} from "../util/functions";
import {Constants} from "../constants";
const getObject = (key: string) => { const getObject = (key: string) => {
const api = { const api = {
@ -141,9 +142,13 @@ export const afterLoadPlugin = (plugin: Plugin) => {
if (isMobile()) { if (isMobile()) {
document.querySelector("#menuAbout").after(element); document.querySelector("#menuAbout").after(element);
} else if (!isWindow()) { } else if (!isWindow()) {
if (window.siyuan.storage[Constants.LOCAL_PLUGINTOPUNPIN].includes(element.id)) {
element.classList.add("fn__none");
}
document.querySelector("#" + (element.getAttribute("data-position") === "right" ? "barPlugins" : "drag")).before(element); document.querySelector("#" + (element.getAttribute("data-position") === "right" ? "barPlugins" : "drag")).before(element);
} }
}); });
resizeTopbar();
} }
/// #if !MOBILE /// #if !MOBILE
mergePluginHotkey(plugin); mergePluginHotkey(plugin);

View file

@ -1,7 +1,7 @@
import {App} from "../index"; import {App} from "../index";
import {Plugin} from "../plugin"; import {Plugin} from "../plugin";
import {getAllModels} from "../layout/getAll"; import {getAllModels} from "../layout/getAll";
import {exportLayout} from "../layout/util"; import {exportLayout, resizeTopbar} from "../layout/util";
import {Constants} from "../constants"; import {Constants} from "../constants";
export const uninstall = (app: App, name: string) => { export const uninstall = (app: App, name: string) => {
@ -24,6 +24,7 @@ export const uninstall = (app: App, name: string) => {
plugin.topBarIcons.forEach(item => { plugin.topBarIcons.forEach(item => {
item.remove(); item.remove();
}); });
resizeTopbar();
// rm statusBar // rm statusBar
/// #if !MOBILE /// #if !MOBILE
plugin.statusBarIcons.forEach(item => { plugin.statusBarIcons.forEach(item => {

View file

@ -161,6 +161,7 @@ export const getLocalStorage = (cb: () => void) => {
}; };
defaultStorage[Constants.LOCAL_LAYOUTS] = []; // {name: "", layout:{}} defaultStorage[Constants.LOCAL_LAYOUTS] = []; // {name: "", layout:{}}
defaultStorage[Constants.LOCAL_AI] = []; // {name: "", memo: ""} defaultStorage[Constants.LOCAL_AI] = []; // {name: "", memo: ""}
defaultStorage[Constants.LOCAL_PLUGINTOPUNPIN] = [];
defaultStorage[Constants.LOCAL_BAZAAR] = { defaultStorage[Constants.LOCAL_BAZAAR] = {
theme: "0", theme: "0",
template: "0", template: "0",
@ -214,7 +215,7 @@ export const getLocalStorage = (cb: () => void) => {
[Constants.LOCAL_EXPORTIMG, Constants.LOCAL_SEARCHKEYS, Constants.LOCAL_PDFTHEME, Constants.LOCAL_BAZAAR, Constants.LOCAL_EXPORTWORD, [Constants.LOCAL_EXPORTIMG, Constants.LOCAL_SEARCHKEYS, Constants.LOCAL_PDFTHEME, Constants.LOCAL_BAZAAR, Constants.LOCAL_EXPORTWORD,
Constants.LOCAL_EXPORTPDF, Constants.LOCAL_DOCINFO, Constants.LOCAL_FONTSTYLES, Constants.LOCAL_SEARCHDATA, Constants.LOCAL_EXPORTPDF, Constants.LOCAL_DOCINFO, Constants.LOCAL_FONTSTYLES, Constants.LOCAL_SEARCHDATA,
Constants.LOCAL_ZOOM, Constants.LOCAL_LAYOUTS, Constants.LOCAL_AI].forEach((key) => { Constants.LOCAL_ZOOM, Constants.LOCAL_LAYOUTS, Constants.LOCAL_AI, Constants.LOCAL_PLUGINTOPUNPIN].forEach((key) => {
if (typeof response.data[key] === "string") { if (typeof response.data[key] === "string") {
try { try {
window.siyuan.storage[key] = Object.assign(defaultStorage[key], JSON.parse(response.data[key])); window.siyuan.storage[key] = Object.assign(defaultStorage[key], JSON.parse(response.data[key]));