🎨 Add data-id attribute to the buttons (#15052)

斜杠菜单中插件添加的选项、顶栏的插件菜单、顶栏的外观模式菜单,修正块引用锚文本的右键菜单

fix https://github.com/siyuan-note/siyuan/issues/12518
This commit is contained in:
Jeffrey Chen 2025-07-23 17:53:25 +08:00 committed by GitHub
parent 963cbfe15f
commit be3db79688
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 13 additions and 2 deletions

View file

@ -134,6 +134,7 @@ export const initBar = (app: App) => {
window.siyuan.menus.menu.remove(); window.siyuan.menus.menu.remove();
window.siyuan.menus.menu.element.setAttribute("data-name", "barmode"); window.siyuan.menus.menu.element.setAttribute("data-name", "barmode");
window.siyuan.menus.menu.append(new MenuItem({ window.siyuan.menus.menu.append(new MenuItem({
id: "themeLight",
label: window.siyuan.languages.themeLight, label: window.siyuan.languages.themeLight,
icon: "iconLight", icon: "iconLight",
current: window.siyuan.config.appearance.mode === 0 && !window.siyuan.config.appearance.modeOS, current: window.siyuan.config.appearance.mode === 0 && !window.siyuan.config.appearance.modeOS,
@ -142,6 +143,7 @@ export const initBar = (app: App) => {
} }
}).element); }).element);
window.siyuan.menus.menu.append(new MenuItem({ window.siyuan.menus.menu.append(new MenuItem({
id: "themeDark",
label: window.siyuan.languages.themeDark, label: window.siyuan.languages.themeDark,
current: window.siyuan.config.appearance.mode === 1 && !window.siyuan.config.appearance.modeOS, current: window.siyuan.config.appearance.mode === 1 && !window.siyuan.config.appearance.modeOS,
icon: "iconDark", icon: "iconDark",
@ -150,6 +152,7 @@ export const initBar = (app: App) => {
} }
}).element); }).element);
window.siyuan.menus.menu.append(new MenuItem({ window.siyuan.menus.menu.append(new MenuItem({
id: "themeOS",
label: window.siyuan.languages.themeOS, label: window.siyuan.languages.themeOS,
current: window.siyuan.config.appearance.modeOS, current: window.siyuan.config.appearance.modeOS,
icon: "iconMode", icon: "iconMode",

View file

@ -620,7 +620,7 @@ export const refMenu = (protyle: IProtyle, element: HTMLElement) => {
} }
}); });
window.siyuan.menus.menu.append(new MenuItem({ window.siyuan.menus.menu.append(new MenuItem({
id: "iconRefresh", id: "turnInto",
label: window.siyuan.languages.turnInto, label: window.siyuan.languages.turnInto,
icon: "iconRefresh", icon: "iconRefresh",
submenu submenu

View file

@ -10,6 +10,7 @@ export const openTopBarMenu = (app: App, target?: Element) => {
const menu = new Menu("topBarPlugin"); const menu = new Menu("topBarPlugin");
/// #if !MOBILE /// #if !MOBILE
menu.addItem({ menu.addItem({
id: "manage",
icon: "iconSettings", icon: "iconSettings",
label: window.siyuan.languages.manage, label: window.siyuan.languages.manage,
ignore: isHuawei() || window.siyuan.config.readonly, ignore: isHuawei() || window.siyuan.config.readonly,
@ -17,7 +18,7 @@ export const openTopBarMenu = (app: App, target?: Element) => {
openSetting(app).element.querySelector('.b3-tab-bar [data-name="bazaar"]').dispatchEvent(new CustomEvent("click")); openSetting(app).element.querySelector('.b3-tab-bar [data-name="bazaar"]').dispatchEvent(new CustomEvent("click"));
} }
}); });
menu.addSeparator(undefined, isHuawei() || window.siyuan.config.readonly); menu.addSeparator({id: "separator_1"}, isHuawei() || window.siyuan.config.readonly);
/// #endif /// #endif
let hasPlugin = false; let hasPlugin = false;
app.plugins.forEach((plugin) => { app.plugins.forEach((plugin) => {
@ -27,6 +28,7 @@ export const openTopBarMenu = (app: App, target?: Element) => {
plugin.topBarIcons.forEach(item => { plugin.topBarIcons.forEach(item => {
const hasUnpin = window.siyuan.storage[Constants.LOCAL_PLUGINTOPUNPIN].includes(item.id); const hasUnpin = window.siyuan.storage[Constants.LOCAL_PLUGINTOPUNPIN].includes(item.id);
const submenu = [{ const submenu = [{
id: hasUnpin ? "pin" : "unpin",
icon: hasUnpin ? "iconPin" : "iconUnpin", icon: hasUnpin ? "iconPin" : "iconUnpin",
label: hasUnpin ? window.siyuan.languages.pin : window.siyuan.languages.unpin, label: hasUnpin ? window.siyuan.languages.pin : window.siyuan.languages.unpin,
click() { click() {
@ -43,6 +45,7 @@ export const openTopBarMenu = (app: App, target?: Element) => {
}]; }];
if (hasSetting) { if (hasSetting) {
submenu.push({ submenu.push({
id: "config",
icon: "iconSettings", icon: "iconSettings",
label: window.siyuan.languages.config, label: window.siyuan.languages.config,
click() { click() {
@ -53,6 +56,7 @@ export const openTopBarMenu = (app: App, target?: Element) => {
const itemLabel = target ? item.getAttribute("aria-label") : item.textContent.trim(); const itemLabel = target ? item.getAttribute("aria-label") : item.textContent.trim();
if (!target) { if (!target) {
submenu.push({ submenu.push({
id: "play",
icon: "iconPlay", icon: "iconPlay",
label: itemLabel, label: itemLabel,
click() { click() {
@ -62,6 +66,7 @@ export const openTopBarMenu = (app: App, target?: Element) => {
}); });
} }
const menuOption: IMenu = { const menuOption: IMenu = {
id: item.id,
icon: "iconInfo", icon: "iconInfo",
label: itemLabel, label: itemLabel,
click: target ? () => { click: target ? () => {
@ -84,6 +89,7 @@ export const openTopBarMenu = (app: App, target?: Element) => {
if (!hasTopBar && hasSetting) { if (!hasTopBar && hasSetting) {
hasPlugin = true; hasPlugin = true;
menu.addItem({ menu.addItem({
id: plugin.name,
icon: "iconSettings", icon: "iconSettings",
label: plugin.displayName, label: plugin.displayName,
click() { click() {
@ -97,6 +103,7 @@ export const openTopBarMenu = (app: App, target?: Element) => {
window.siyuan.menus.menu.element.querySelector(".b3-menu__separator")?.remove(); window.siyuan.menus.menu.element.querySelector(".b3-menu__separator")?.remove();
} else { } else {
menu.addItem({ menu.addItem({
id: "emptyContent",
iconHTML: "", iconHTML: "",
type: "readonly", type: "readonly",
label: window.siyuan.languages.emptyContent, label: window.siyuan.languages.emptyContent,

View file

@ -332,6 +332,7 @@ export const hintSlash = (key: string, protyle: IProtyle) => {
plugin.protyleSlash.forEach(slash => { plugin.protyleSlash.forEach(slash => {
allList.push({ allList.push({
filter: slash.filter, filter: slash.filter,
id: slash.id,
value: `plugin${Constants.ZWSP}${plugin.name}${Constants.ZWSP}${slash.id}`, value: `plugin${Constants.ZWSP}${plugin.name}${Constants.ZWSP}${slash.id}`,
html: slash.html html: slash.html
}); });