Add data-id attribute to the buttons (#14182)

fix https://github.com/siyuan-note/siyuan/issues/12518
This commit is contained in:
Jeffrey Chen 2025-02-25 18:02:35 +08:00 committed by GitHub
parent 853cf71d31
commit 33f8def8ce
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
16 changed files with 224 additions and 31 deletions

View file

@ -84,7 +84,10 @@ export class Menu {
}
}
public addSeparator(index?: number) {
public addSeparator(index?: number, id?: string) {
if (id) {
return this.addItem({id: "separator_" + id, type: "separator", index});
}
return this.addItem({type: "separator", index});
}

View file

@ -19,6 +19,7 @@ export const openBookmarkMenu = (element: HTMLElement, event: MouseEvent, bookma
const id = element.getAttribute("data-node-id");
if (!id && !window.siyuan.config.readonly) {
window.siyuan.menus.menu.append(new MenuItem({
id: "rename",
icon: "iconEdit",
label: window.siyuan.languages.rename,
click: () => {
@ -57,6 +58,7 @@ export const openBookmarkMenu = (element: HTMLElement, event: MouseEvent, bookma
}
if (id) {
window.siyuan.menus.menu.append(new MenuItem({
id: "copy",
label: window.siyuan.languages.copy,
type: "submenu",
icon: "iconCopy",
@ -66,6 +68,7 @@ export const openBookmarkMenu = (element: HTMLElement, event: MouseEvent, bookma
if (!window.siyuan.config.readonly) {
window.siyuan.menus.menu.append(new MenuItem({
id: "remove",
icon: "iconTrashcan",
label: window.siyuan.languages.remove,
click: () => {

View file

@ -284,6 +284,7 @@ export const openFileAttr = (attrs: IObject, focusName = "bookmark", protyle?: I
window.siyuan.menus.menu.remove();
if (response.data.length === 0) {
window.siyuan.menus.menu.append(new MenuItem({
id: "emptyContent",
iconHTML: "",
label: window.siyuan.languages.emptyContent,
type: "readonly",
@ -711,6 +712,7 @@ export const openMenu = (app: App, src: string, onlyMenu: boolean, showAccelerat
const submenu = [];
/// #if MOBILE
submenu.push({
id: isInAndroid() || isInHarmony() ? "useDefault" : "useBrowserView",
label: isInAndroid() || isInHarmony() ? window.siyuan.languages.useDefault : window.siyuan.languages.useBrowserView,
accelerator: showAccelerator ? window.siyuan.languages.click : "",
click: () => {
@ -724,6 +726,7 @@ export const openMenu = (app: App, src: string, onlyMenu: boolean, showAccelerat
(src.endsWith(".pdf") && !src.startsWith("file://")))
) {
submenu.push({
id: "insertRight",
icon: "iconLayoutRight",
label: window.siyuan.languages.insertRight,
accelerator: showAccelerator ? window.siyuan.languages.click : "",
@ -732,6 +735,7 @@ export const openMenu = (app: App, src: string, onlyMenu: boolean, showAccelerat
}
});
submenu.push({
id: "openBy",
label: window.siyuan.languages.openBy,
icon: "iconOpen",
accelerator: showAccelerator ? "⌥" + window.siyuan.languages.click : "",
@ -741,6 +745,7 @@ export const openMenu = (app: App, src: string, onlyMenu: boolean, showAccelerat
});
/// #if !BROWSER
submenu.push({
id: "openByNewWindow",
label: window.siyuan.languages.openByNewWindow,
icon: "iconOpenWindow",
click() {
@ -748,6 +753,7 @@ export const openMenu = (app: App, src: string, onlyMenu: boolean, showAccelerat
}
});
submenu.push({
id: "showInFolder",
icon: "iconFolder",
label: window.siyuan.languages.showInFolder,
accelerator: showAccelerator ? "⌘" + window.siyuan.languages.click : "",
@ -756,6 +762,7 @@ export const openMenu = (app: App, src: string, onlyMenu: boolean, showAccelerat
}
});
submenu.push({
id: "useDefault",
label: window.siyuan.languages.useDefault,
accelerator: showAccelerator ? "⇧" + window.siyuan.languages.click : "",
click() {
@ -766,6 +773,7 @@ export const openMenu = (app: App, src: string, onlyMenu: boolean, showAccelerat
} else {
/// #if !BROWSER
submenu.push({
id: "useDefault",
label: window.siyuan.languages.useDefault,
accelerator: showAccelerator ? window.siyuan.languages.click : "",
click() {
@ -773,6 +781,7 @@ export const openMenu = (app: App, src: string, onlyMenu: boolean, showAccelerat
}
});
submenu.push({
id: "showInFolder",
icon: "iconFolder",
label: window.siyuan.languages.showInFolder,
accelerator: showAccelerator ? "⌘" + window.siyuan.languages.click : "",
@ -782,6 +791,7 @@ export const openMenu = (app: App, src: string, onlyMenu: boolean, showAccelerat
});
/// #else
submenu.push({
id: isInAndroid() || isInHarmony() ? "useDefault" : "useBrowserView",
label: isInAndroid() || isInHarmony() ? window.siyuan.languages.useDefault : window.siyuan.languages.useBrowserView,
accelerator: showAccelerator ? window.siyuan.languages.click : "",
click: () => {
@ -798,6 +808,7 @@ export const openMenu = (app: App, src: string, onlyMenu: boolean, showAccelerat
}
/// #if !BROWSER
submenu.push({
id: "useDefault",
label: window.siyuan.languages.useDefault,
accelerator: showAccelerator ? window.siyuan.languages.click : "",
click: () => {
@ -808,6 +819,7 @@ export const openMenu = (app: App, src: string, onlyMenu: boolean, showAccelerat
});
/// #else
submenu.push({
id: isInAndroid() || isInHarmony() ? "useDefault" : "useBrowserView",
label: isInAndroid() || isInHarmony() ? window.siyuan.languages.useDefault : window.siyuan.languages.useBrowserView,
accelerator: showAccelerator ? window.siyuan.languages.click : "",
click: () => {
@ -821,6 +833,7 @@ export const openMenu = (app: App, src: string, onlyMenu: boolean, showAccelerat
return submenu;
}
window.siyuan.menus.menu.append(new MenuItem({
id: "openBy",
label: window.siyuan.languages.openBy,
icon: "iconOpen",
submenu

View file

@ -219,6 +219,7 @@ export const fileAnnotationRefMenu = (protyle: IProtyle, refElement: HTMLElement
window.siyuan.menus.menu.remove();
let anchorElement: HTMLInputElement;
window.siyuan.menus.menu.append(new MenuItem({
id: "idAndAnchor",
iconHTML: "",
type: "readonly",
label: `<div>ID</div>
@ -265,9 +266,11 @@ export const fileAnnotationRefMenu = (protyle: IProtyle, refElement: HTMLElement
}).element);
window.siyuan.menus.menu.append(new MenuItem({type: "separator"}).element);
window.siyuan.menus.menu.append(new MenuItem({
id: "turnInto",
label: window.siyuan.languages.turnInto,
icon: "iconRefresh",
submenu: [{
id: "text",
iconHTML: "",
label: window.siyuan.languages.text,
click() {
@ -277,6 +280,7 @@ export const fileAnnotationRefMenu = (protyle: IProtyle, refElement: HTMLElement
oldHTML = nodeElement.outerHTML;
}
}, {
id: "text*",
iconHTML: "",
label: window.siyuan.languages.text + " *",
click() {
@ -289,6 +293,7 @@ export const fileAnnotationRefMenu = (protyle: IProtyle, refElement: HTMLElement
}]
}).element);
window.siyuan.menus.menu.append(new MenuItem({
id: "remove",
icon: "iconTrashcan",
label: window.siyuan.languages.remove,
click() {
@ -349,6 +354,7 @@ export const refMenu = (protyle: IProtyle, element: HTMLElement) => {
window.siyuan.menus.menu.remove();
if (!protyle.disabled) {
window.siyuan.menus.menu.append(new MenuItem({
id: "anchor",
iconHTML: "",
type: "readonly",
label: `<input style="margin: 4px 0" class="b3-text-field fn__block" placeholder="${window.siyuan.languages.anchor}">`,
@ -379,11 +385,13 @@ export const refMenu = (protyle: IProtyle, element: HTMLElement) => {
}
}).element);
window.siyuan.menus.menu.append(new MenuItem({
id: "separator_1",
type: "separator"
}).element);
}
/// #if !MOBILE
window.siyuan.menus.menu.append(new MenuItem({
id: "openBy",
label: window.siyuan.languages.openBy,
icon: "iconOpen",
accelerator: window.siyuan.config.keymap.editor.general.openBy.custom + "/" + window.siyuan.languages.click,
@ -402,6 +410,7 @@ export const refMenu = (protyle: IProtyle, element: HTMLElement) => {
}
}).element);
window.siyuan.menus.menu.append(new MenuItem({
id: "refTab",
label: window.siyuan.languages.refTab,
icon: "iconEyeoff",
accelerator: window.siyuan.config.keymap.editor.general.refTab.custom + "/" + updateHotkeyTip("⌘" + window.siyuan.languages.click),
@ -418,6 +427,7 @@ export const refMenu = (protyle: IProtyle, element: HTMLElement) => {
}
}).element);
window.siyuan.menus.menu.append(new MenuItem({
id: "insertRight",
label: window.siyuan.languages.insertRight,
icon: "iconLayoutRight",
accelerator: window.siyuan.config.keymap.editor.general.insertRight.custom + "/" + updateHotkeyTip("⌥" + window.siyuan.languages.click),
@ -437,6 +447,7 @@ export const refMenu = (protyle: IProtyle, element: HTMLElement) => {
}
}).element);
window.siyuan.menus.menu.append(new MenuItem({
id: "insertBottom",
label: window.siyuan.languages.insertBottom,
icon: "iconLayoutBottom",
accelerator: window.siyuan.config.keymap.editor.general.insertBottom.custom + (window.siyuan.config.keymap.editor.general.insertBottom.custom ? "/" : "") + updateHotkeyTip("⇧" + window.siyuan.languages.click),
@ -457,6 +468,7 @@ export const refMenu = (protyle: IProtyle, element: HTMLElement) => {
}).element);
/// #if !BROWSER
window.siyuan.menus.menu.append(new MenuItem({
id: "openByNewWindow",
label: window.siyuan.languages.openByNewWindow,
icon: "iconOpenWindow",
click() {
@ -464,8 +476,9 @@ export const refMenu = (protyle: IProtyle, element: HTMLElement) => {
}
}).element);
/// #endif
window.siyuan.menus.menu.append(new MenuItem({type: "separator"}).element);
window.siyuan.menus.menu.append(new MenuItem({id: "separator_2", type: "separator"}).element);
window.siyuan.menus.menu.append(new MenuItem({
id: "backlinks",
icon: "iconLink",
label: window.siyuan.languages.backlinks,
accelerator: window.siyuan.config.keymap.editor.general.backlinks.custom,
@ -477,6 +490,7 @@ export const refMenu = (protyle: IProtyle, element: HTMLElement) => {
}
}).element);
window.siyuan.menus.menu.append(new MenuItem({
id: "graphView",
icon: "iconGraph",
label: window.siyuan.languages.graphView,
accelerator: window.siyuan.config.keymap.editor.general.graphView.custom,
@ -487,12 +501,13 @@ export const refMenu = (protyle: IProtyle, element: HTMLElement) => {
});
}
}).element);
window.siyuan.menus.menu.append(new MenuItem({type: "separator"}).element);
window.siyuan.menus.menu.append(new MenuItem({id: "separator_3", type: "separator"}).element);
/// #endif
if (!protyle.disabled) {
let submenu: IMenu[] = [];
if (element.getAttribute("data-subtype") === "s") {
submenu.push({
id: "turnToDynamic",
iconHTML: "",
label: window.siyuan.languages.turnToDynamic,
click() {
@ -508,6 +523,7 @@ export const refMenu = (protyle: IProtyle, element: HTMLElement) => {
});
} else {
submenu.push({
id: "turnToStatic",
iconHTML: "",
label: window.siyuan.languages.turnToStatic,
click() {
@ -520,6 +536,7 @@ export const refMenu = (protyle: IProtyle, element: HTMLElement) => {
});
}
submenu = submenu.concat([{
id: "text",
iconHTML: "",
label: window.siyuan.languages.text,
click() {
@ -529,6 +546,7 @@ export const refMenu = (protyle: IProtyle, element: HTMLElement) => {
oldHTML = nodeElement.outerHTML;
}
}, {
id: "*",
iconHTML: "",
label: "*",
click() {
@ -540,6 +558,7 @@ export const refMenu = (protyle: IProtyle, element: HTMLElement) => {
oldHTML = nodeElement.outerHTML;
}
}, {
id: "text*",
iconHTML: "",
label: window.siyuan.languages.text + " *",
click() {
@ -552,6 +571,7 @@ export const refMenu = (protyle: IProtyle, element: HTMLElement) => {
oldHTML = nodeElement.outerHTML;
}
}, {
id: "link",
label: window.siyuan.languages.link,
iconHTML: "",
click() {
@ -564,6 +584,7 @@ export const refMenu = (protyle: IProtyle, element: HTMLElement) => {
}]);
if (element.parentElement.textContent.trim() === element.textContent.trim() && element.parentElement.tagName === "DIV") {
submenu.push({
id: "blockEmbed",
iconHTML: "",
label: window.siyuan.languages.blockEmbed,
click() {
@ -576,6 +597,7 @@ export const refMenu = (protyle: IProtyle, element: HTMLElement) => {
});
}
submenu.push({
id: "defBlock",
iconHTML: "",
label: window.siyuan.languages.defBlock,
click() {
@ -587,6 +609,7 @@ export const refMenu = (protyle: IProtyle, element: HTMLElement) => {
}
});
submenu.push({
id: "defBlockChildren",
iconHTML: "",
label: window.siyuan.languages.defBlockChildren,
click() {
@ -598,12 +621,14 @@ export const refMenu = (protyle: IProtyle, element: HTMLElement) => {
}
});
window.siyuan.menus.menu.append(new MenuItem({
id: "iconRefresh",
label: window.siyuan.languages.turnInto,
icon: "iconRefresh",
submenu
}).element);
}
window.siyuan.menus.menu.append(new MenuItem({
id: "copy",
label: window.siyuan.languages.copy,
icon: "iconCopy",
click() {
@ -612,6 +637,7 @@ export const refMenu = (protyle: IProtyle, element: HTMLElement) => {
}).element);
if (!protyle.disabled) {
window.siyuan.menus.menu.append(new MenuItem({
id: "cut",
label: window.siyuan.languages.cut,
icon: "iconCut",
click() {
@ -626,6 +652,7 @@ export const refMenu = (protyle: IProtyle, element: HTMLElement) => {
}
}).element);
window.siyuan.menus.menu.append(new MenuItem({
id: "remove",
label: window.siyuan.languages.remove,
icon: "iconTrashcan",
click() {
@ -686,6 +713,7 @@ export const contentMenu = (protyle: IProtyle, nodeElement: Element) => {
const id = nodeElement.getAttribute("data-node-id");
if (range.toString() !== "" || (range.cloneContents().childNodes[0] as HTMLElement)?.classList?.contains("emoji")) {
window.siyuan.menus.menu.append(new MenuItem({
id: "copy",
icon: "iconCopy",
accelerator: "⌘C",
label: window.siyuan.languages.copy,
@ -696,6 +724,7 @@ export const contentMenu = (protyle: IProtyle, nodeElement: Element) => {
}
}).element);
window.siyuan.menus.menu.append(new MenuItem({
id: "copyPlainText",
label: window.siyuan.languages.copyPlainText,
accelerator: window.siyuan.config.keymap.editor.general.copyPlainText.custom,
click() {
@ -707,6 +736,7 @@ export const contentMenu = (protyle: IProtyle, nodeElement: Element) => {
return;
}
window.siyuan.menus.menu.append(new MenuItem({
id: "cut",
icon: "iconCut",
accelerator: "⌘X",
label: window.siyuan.languages.cut,
@ -716,6 +746,7 @@ export const contentMenu = (protyle: IProtyle, nodeElement: Element) => {
}
}).element);
window.siyuan.menus.menu.append(new MenuItem({
id: "delete",
icon: "iconTrashcan",
accelerator: "⌫",
label: window.siyuan.languages.delete,
@ -735,6 +766,7 @@ export const contentMenu = (protyle: IProtyle, nodeElement: Element) => {
const inlineTypes = protyle.toolbar.getCurrentType(range);
if (inlineTypes.includes("code") || inlineTypes.includes("kbd")) {
window.siyuan.menus.menu.append(new MenuItem({
id: "copy",
label: window.siyuan.languages.copy,
icon: "iconCopy",
click() {
@ -742,6 +774,7 @@ export const contentMenu = (protyle: IProtyle, nodeElement: Element) => {
}
}).element);
window.siyuan.menus.menu.append(new MenuItem({
id: "copyPlainText",
label: window.siyuan.languages.copyPlainText,
click() {
copyPlainText(inlineElement.textContent);
@ -750,6 +783,7 @@ export const contentMenu = (protyle: IProtyle, nodeElement: Element) => {
if (!protyle.disabled) {
const id = nodeElement.getAttribute("data-node-id");
window.siyuan.menus.menu.append(new MenuItem({
id: "cut",
icon: "iconCut",
label: window.siyuan.languages.cut,
click() {
@ -763,6 +797,7 @@ export const contentMenu = (protyle: IProtyle, nodeElement: Element) => {
}
}).element);
window.siyuan.menus.menu.append(new MenuItem({
id: "remove",
icon: "iconTrashcan",
label: window.siyuan.languages.remove,
click() {
@ -782,6 +817,7 @@ export const contentMenu = (protyle: IProtyle, nodeElement: Element) => {
}
if (!protyle.disabled) {
window.siyuan.menus.menu.append(new MenuItem({
id: "paste",
label: window.siyuan.languages.paste,
icon: "iconPaste",
accelerator: "⌘V",
@ -799,6 +835,7 @@ export const contentMenu = (protyle: IProtyle, nodeElement: Element) => {
}
}).element);
window.siyuan.menus.menu.append(new MenuItem({
id: "pasteAsPlainText",
label: window.siyuan.languages.pasteAsPlainText,
accelerator: "⇧⌘V",
click() {
@ -807,6 +844,7 @@ export const contentMenu = (protyle: IProtyle, nodeElement: Element) => {
}
}).element);
window.siyuan.menus.menu.append(new MenuItem({
id: "pasteEscaped",
label: window.siyuan.languages.pasteEscaped,
click() {
pasteEscaped(protyle, nodeElement);
@ -814,6 +852,7 @@ export const contentMenu = (protyle: IProtyle, nodeElement: Element) => {
}).element);
}
window.siyuan.menus.menu.append(new MenuItem({
id: "selectAll",
label: window.siyuan.languages.selectAll,
icon: "iconSelect",
accelerator: "⌘A",
@ -827,6 +866,7 @@ export const contentMenu = (protyle: IProtyle, nodeElement: Element) => {
const tableMenus = tableMenu(protyle, nodeElement, cellElement as HTMLTableCellElement, range);
if (tableMenus.insertMenus.length > 0) {
window.siyuan.menus.menu.append(new MenuItem({
id: "separator_1",
type: "separator",
}).element);
tableMenus.insertMenus.forEach((menuItem) => {
@ -835,6 +875,7 @@ export const contentMenu = (protyle: IProtyle, nodeElement: Element) => {
}
if (tableMenus.removeMenus.length > 0) {
window.siyuan.menus.menu.append(new MenuItem({
id: "separator_2",
type: "separator",
}).element);
tableMenus.removeMenus.forEach((menuItem) => {
@ -842,9 +883,11 @@ export const contentMenu = (protyle: IProtyle, nodeElement: Element) => {
});
}
window.siyuan.menus.menu.append(new MenuItem({
id: "separator_3",
type: "separator",
}).element);
window.siyuan.menus.menu.append(new MenuItem({
id: "more",
type: "submenu",
icon: "iconMore",
label: window.siyuan.languages.more,
@ -1021,6 +1064,7 @@ export const imgMenu = (protyle: IProtyle, range: Range, assetElement: HTMLEleme
const html = nodeElement.outerHTML;
if (!protyle.disabled) {
window.siyuan.menus.menu.append(new MenuItem({
id: "imageUrlAndTitleAndTooltipText",
iconHTML: "",
type: "readonly",
label: `<div class="fn__flex">
@ -1086,9 +1130,10 @@ export const imgMenu = (protyle: IProtyle, range: Range, assetElement: HTMLEleme
});
}
}).element);
window.siyuan.menus.menu.append(new MenuItem({type: "separator"}).element);
window.siyuan.menus.menu.append(new MenuItem({id: "separator_1", type: "separator"}).element);
}
window.siyuan.menus.menu.append(new MenuItem({
id: "copy",
label: window.siyuan.languages.copy,
accelerator: "⌘C",
icon: "iconCopy",
@ -1101,6 +1146,7 @@ export const imgMenu = (protyle: IProtyle, range: Range, assetElement: HTMLEleme
}).element);
if (protyle.disabled) {
window.siyuan.menus.menu.append(new MenuItem({
id: "copyImageURL",
label: window.siyuan.languages.copy + " " + window.siyuan.languages.imageURL,
icon: "iconLink",
click() {
@ -1109,6 +1155,7 @@ export const imgMenu = (protyle: IProtyle, range: Range, assetElement: HTMLEleme
}).element);
}
window.siyuan.menus.menu.append(new MenuItem({
id: "copyAsPNG",
label: window.siyuan.languages.copyAsPNG,
accelerator: window.siyuan.config.keymap.editor.general.copyBlockRef.custom,
icon: "iconImage",
@ -1118,6 +1165,7 @@ export const imgMenu = (protyle: IProtyle, range: Range, assetElement: HTMLEleme
}).element);
if (!protyle.disabled) {
window.siyuan.menus.menu.append(new MenuItem({
id: "cut",
icon: "iconCut",
accelerator: "⌘X",
label: window.siyuan.languages.cut,
@ -1133,6 +1181,7 @@ export const imgMenu = (protyle: IProtyle, range: Range, assetElement: HTMLEleme
}
}).element);
window.siyuan.menus.menu.append(new MenuItem({
id: "delete",
icon: "iconTrashcan",
accelerator: "⌫",
label: window.siyuan.languages.delete,
@ -1143,10 +1192,11 @@ export const imgMenu = (protyle: IProtyle, range: Range, assetElement: HTMLEleme
focusByWbr(protyle.wysiwyg.element, range);
}
}).element);
window.siyuan.menus.menu.append(new MenuItem({type: "separator"}).element);
window.siyuan.menus.menu.append(new MenuItem({id: "separator_2", type: "separator"}).element);
const imagePath = imgElement.getAttribute("data-src");
if (imagePath.startsWith("assets/")) {
window.siyuan.menus.menu.append(new MenuItem({
id: "rename",
label: window.siyuan.languages.rename,
icon: "iconEdit",
click() {
@ -1155,8 +1205,10 @@ export const imgMenu = (protyle: IProtyle, range: Range, assetElement: HTMLEleme
}).element);
}
window.siyuan.menus.menu.append(new MenuItem({
id: "ocr",
label: "OCR",
submenu: [{
id: "ocrResult",
iconHTML: "",
type: "readonly",
label: `<textarea spellcheck="false" data-type="ocr" style="margin: 4px 0" rows="1" class="b3-text-field fn__size200" placeholder="${window.siyuan.languages.ocrResult}"></textarea>`,
@ -1173,6 +1225,7 @@ export const imgMenu = (protyle: IProtyle, range: Range, assetElement: HTMLEleme
}, {
type: "separator"
}, {
id: "reOCR",
iconHTML: "",
label: window.siyuan.languages.reOCR,
click() {
@ -1184,6 +1237,7 @@ export const imgMenu = (protyle: IProtyle, range: Range, assetElement: HTMLEleme
}],
}).element);
window.siyuan.menus.menu.append(new MenuItem({
id: "alignCenter",
icon: "iconAlignCenter",
label: window.siyuan.languages.alignCenter,
accelerator: window.siyuan.config.keymap.editor.general.alignCenter.custom,
@ -1192,6 +1246,7 @@ export const imgMenu = (protyle: IProtyle, range: Range, assetElement: HTMLEleme
}
}).element);
window.siyuan.menus.menu.append(new MenuItem({
id: "alignLeft",
icon: "iconAlignLeft",
label: window.siyuan.languages.alignLeft,
accelerator: window.siyuan.config.keymap.editor.general.alignLeft.custom,
@ -1201,8 +1256,10 @@ export const imgMenu = (protyle: IProtyle, range: Range, assetElement: HTMLEleme
}).element);
let rangeElement: HTMLInputElement;
window.siyuan.menus.menu.append(new MenuItem({
id: "width",
label: window.siyuan.languages.width,
submenu: [{
id: "widthInput",
iconHTML: "",
type: "readonly",
label: `<div class="fn__flex-center">
@ -1235,8 +1292,10 @@ export const imgMenu = (protyle: IProtyle, range: Range, assetElement: HTMLEleme
genImageWidthMenu("67%", imgElement, protyle, id, nodeElement, html),
genImageWidthMenu("75%", imgElement, protyle, id, nodeElement, html),
genImageWidthMenu("100%", imgElement, protyle, id, nodeElement, html), {
id: "separator_1",
type: "separator",
}, {
id: "widthDrag",
iconHTML: "",
type: "readonly",
label: `<div style="margin: 4px 0;" aria-label="${imgElement.parentElement.style.width ? imgElement.parentElement.style.width.replace("vw", "%").replace("calc(", "").replace(" - 8px)", "") : window.siyuan.languages.default}" class="b3-tooltips b3-tooltips__n${isMobile() ? "" : " fn__size200"}">
@ -1258,6 +1317,7 @@ export const imgMenu = (protyle: IProtyle, range: Range, assetElement: HTMLEleme
});
}
}, {
id: "separator_2",
type: "separator",
},
genImageWidthMenu(window.siyuan.languages.default, imgElement, protyle, id, nodeElement, html),
@ -1265,8 +1325,10 @@ export const imgMenu = (protyle: IProtyle, range: Range, assetElement: HTMLEleme
}).element);
let rangeHeightElement: HTMLInputElement;
window.siyuan.menus.menu.append(new MenuItem({
id: "height",
label: window.siyuan.languages.height,
submenu: [{
id: "heightInput",
iconHTML: "",
type: "readonly",
label: `<div class="fn__flex-center">
@ -1299,8 +1361,10 @@ export const imgMenu = (protyle: IProtyle, range: Range, assetElement: HTMLEleme
genImageHeightMenu("67%", imgElement, protyle, id, nodeElement, html),
genImageHeightMenu("75%", imgElement, protyle, id, nodeElement, html),
genImageHeightMenu("100%", imgElement, protyle, id, nodeElement, html), {
id: "separator_1",
type: "separator",
}, {
id: "heightDrag",
iconHTML: "",
type: "readonly",
label: `<div style="margin: 4px 0;" aria-label="${imgElement.style.height ? imgElement.style.height.replace("vh", "%") : window.siyuan.languages.default}" class="b3-tooltips b3-tooltips__n${isMobile() ? "" : " fn__size200"}">
@ -1322,6 +1386,7 @@ export const imgMenu = (protyle: IProtyle, range: Range, assetElement: HTMLEleme
});
}
}, {
id: "separator_2",
type: "separator",
},
genImageHeightMenu(window.siyuan.languages.default, imgElement, protyle, id, nodeElement, html),
@ -1330,7 +1395,7 @@ export const imgMenu = (protyle: IProtyle, range: Range, assetElement: HTMLEleme
}
const imgSrc = imgElement.getAttribute("src");
if (imgSrc) {
window.siyuan.menus.menu.append(new MenuItem({type: "separator"}).element);
window.siyuan.menus.menu.append(new MenuItem({id: "separator_3", type: "separator"}).element);
openMenu(protyle.app, imgSrc, false, false);
}
const dataSrc = imgElement.getAttribute("data-src");
@ -1388,6 +1453,7 @@ export const linkMenu = (protyle: IProtyle, linkElement: HTMLElement, focusText
let inputElements: NodeListOf<HTMLTextAreaElement>;
if (!protyle.disabled) {
window.siyuan.menus.menu.append(new MenuItem({
id: "linkAndAnchorAndTitle",
iconHTML: "",
type: "readonly",
label: `<div class="fn__flex">
@ -1499,9 +1565,10 @@ export const linkMenu = (protyle: IProtyle, linkElement: HTMLElement, focusText
});
}
}).element);
window.siyuan.menus.menu.append(new MenuItem({type: "separator"}).element);
window.siyuan.menus.menu.append(new MenuItem({id: "separator_1", type: "separator"}).element);
}
window.siyuan.menus.menu.append(new MenuItem({
id: "copy",
label: window.siyuan.languages.copy,
icon: "iconCopy",
click() {
@ -1513,6 +1580,7 @@ export const linkMenu = (protyle: IProtyle, linkElement: HTMLElement, focusText
}).element);
if (protyle.disabled) {
window.siyuan.menus.menu.append(new MenuItem({
id: "copyAHref",
label: window.siyuan.languages.copy + " " + window.siyuan.languages.replaceTypes.aHref,
icon: "iconLink",
click() {
@ -1522,6 +1590,7 @@ export const linkMenu = (protyle: IProtyle, linkElement: HTMLElement, focusText
}
if (!protyle.disabled) {
window.siyuan.menus.menu.append(new MenuItem({
id: "cut",
icon: "iconCut",
label: window.siyuan.languages.cut,
click() {
@ -1532,6 +1601,7 @@ export const linkMenu = (protyle: IProtyle, linkElement: HTMLElement, focusText
}
}).element);
window.siyuan.menus.menu.append(new MenuItem({
id: "remove",
icon: "iconTrashcan",
label: window.siyuan.languages.remove,
click() {
@ -1545,6 +1615,7 @@ export const linkMenu = (protyle: IProtyle, linkElement: HTMLElement, focusText
}).element);
if (linkAddress?.startsWith("assets/")) {
window.siyuan.menus.menu.append(new MenuItem({
id: "rename",
label: window.siyuan.languages.rename,
icon: "iconEdit",
click() {
@ -1554,6 +1625,7 @@ export const linkMenu = (protyle: IProtyle, linkElement: HTMLElement, focusText
}
if (linkAddress?.startsWith("siyuan://blocks/")) {
window.siyuan.menus.menu.append(new MenuItem({
id: "turnIntoRef",
label: `${window.siyuan.languages.turnInto} <b>${window.siyuan.languages.ref}</b>`,
icon: "iconRef",
click() {
@ -1577,6 +1649,7 @@ export const linkMenu = (protyle: IProtyle, linkElement: HTMLElement, focusText
}).element);
}
window.siyuan.menus.menu.append(new MenuItem({
id: "turnIntoText",
label: `${window.siyuan.languages.turnInto} <b>${window.siyuan.languages.text}</b>`,
icon: "iconRefresh",
click() {
@ -1591,7 +1664,7 @@ export const linkMenu = (protyle: IProtyle, linkElement: HTMLElement, focusText
}
if (linkAddress) {
window.siyuan.menus.menu.append(new MenuItem({type: "separator"}).element);
window.siyuan.menus.menu.append(new MenuItem({id: "separator_2", type: "separator"}).element);
openMenu(protyle.app, linkAddress, false, true);
if (linkAddress?.startsWith("assets/")) {
window.siyuan.menus.menu.append(new MenuItem(exportAsset(linkAddress)).element);
@ -1659,6 +1732,7 @@ export const tagMenu = (protyle: IProtyle, tagElement: HTMLElement) => {
const id = nodeElement.getAttribute("data-node-id");
let html = nodeElement.outerHTML;
window.siyuan.menus.menu.append(new MenuItem({
id: "tag",
iconHTML: "",
type: "readonly",
label: `<input class="b3-text-field fn__size200" style="margin: 4px 0" placeholder="${window.siyuan.languages.tag}">`,
@ -1701,9 +1775,10 @@ export const tagMenu = (protyle: IProtyle, tagElement: HTMLElement) => {
});
}
}).element);
window.siyuan.menus.menu.append(new MenuItem({type: "separator"}).element);
window.siyuan.menus.menu.append(new MenuItem({id: "separator_1", type: "separator"}).element);
window.siyuan.menus.menu.append(new MenuItem({
id: "search",
label: window.siyuan.languages.search,
accelerator: window.siyuan.languages.click,
icon: "iconSearch",
@ -1724,14 +1799,16 @@ export const tagMenu = (protyle: IProtyle, tagElement: HTMLElement) => {
}
}).element);
window.siyuan.menus.menu.append(new MenuItem({
id: "rename",
label: window.siyuan.languages.rename,
icon: "iconEdit",
click() {
renameTag(tagElement.textContent.replace(Constants.ZWSP, ""));
}
}).element);
window.siyuan.menus.menu.append(new MenuItem({type: "separator"}).element);
window.siyuan.menus.menu.append(new MenuItem({id: "separator_2", type: "separator"}).element);
window.siyuan.menus.menu.append(new MenuItem({
id: "turnIntoText",
label: `${window.siyuan.languages.turnInto} <b>${window.siyuan.languages.text}</b>`,
icon: "iconRefresh",
click() {
@ -1741,6 +1818,7 @@ export const tagMenu = (protyle: IProtyle, tagElement: HTMLElement) => {
}
}).element);
window.siyuan.menus.menu.append(new MenuItem({
id: "copy",
label: window.siyuan.languages.copy,
icon: "iconCopy",
click() {
@ -1751,6 +1829,7 @@ export const tagMenu = (protyle: IProtyle, tagElement: HTMLElement) => {
}
}).element);
window.siyuan.menus.menu.append(new MenuItem({
id: "cut",
label: window.siyuan.languages.cut,
icon: "iconCut",
click() {
@ -1761,6 +1840,7 @@ export const tagMenu = (protyle: IProtyle, tagElement: HTMLElement) => {
}
}).element);
window.siyuan.menus.menu.append(new MenuItem({
id: "remove",
icon: "iconTrashcan",
label: window.siyuan.languages.remove,
click() {
@ -1805,6 +1885,7 @@ export const inlineMathMenu = (protyle: IProtyle, element: Element) => {
const id = nodeElement.getAttribute("data-node-id");
const html = nodeElement.outerHTML;
window.siyuan.menus.menu.append(new MenuItem({
id: "copy",
label: window.siyuan.languages.copy,
icon: "iconCopy",
click() {
@ -1816,6 +1897,7 @@ export const inlineMathMenu = (protyle: IProtyle, element: Element) => {
}).element);
if (!protyle.disabled) {
window.siyuan.menus.menu.append(new MenuItem({
id: "cut",
icon: "iconCut",
label: window.siyuan.languages.cut,
click() {
@ -1826,6 +1908,7 @@ export const inlineMathMenu = (protyle: IProtyle, element: Element) => {
}
}).element);
window.siyuan.menus.menu.append(new MenuItem({
id: "remove",
icon: "iconTrashcan",
label: window.siyuan.languages.remove,
click() {
@ -1847,6 +1930,7 @@ export const inlineMathMenu = (protyle: IProtyle, element: Element) => {
const genImageWidthMenu = (label: string, imgElement: HTMLElement, protyle: IProtyle, id: string, nodeElement: HTMLElement, html: string) => {
return {
id: label === window.siyuan.languages.default ? "default" : "width_" + label,
iconHTML: "",
label,
click() {
@ -1862,6 +1946,7 @@ const genImageWidthMenu = (label: string, imgElement: HTMLElement, protyle: IPro
const genImageHeightMenu = (label: string, imgElement: HTMLElement, protyle: IProtyle, id: string, nodeElement: HTMLElement, html: string) => {
return {
id: label === window.siyuan.languages.default ? "default" : "width_" + label,
iconHTML: "",
label,
click() {
@ -1998,6 +2083,7 @@ export const tableMenu = (protyle: IProtyle, nodeElement: Element, cellElement:
const colIndex = getColIndex(cellElement);
if (cellElement.rowSpan > 1 || cellElement.colSpan > 1) {
otherMenus.push({
id: "cancelMerged",
label: window.siyuan.languages.cancelMerged,
click: () => {
const oldHTML = nodeElement.outerHTML;
@ -2048,6 +2134,7 @@ export const tableMenu = (protyle: IProtyle, nodeElement: Element, cellElement:
const thMatchElement = nodeElement.querySelectorAll("col")[colIndex];
if (thMatchElement.style.width || thMatchElement.style.minWidth) {
otherMenus.push({
id: "useDefaultWidth",
label: window.siyuan.languages.useDefaultWidth,
click: () => {
const html = nodeElement.outerHTML;
@ -2059,6 +2146,7 @@ export const tableMenu = (protyle: IProtyle, nodeElement: Element, cellElement:
}
const isPinHead = nodeElement.getAttribute("custom-pinthead");
otherMenus.push({
id: isPinHead ? "unpinTableHead" : "pinTableHead",
icon: isPinHead ? "iconUnpin" : "iconPin",
label: isPinHead ? window.siyuan.languages.unpinTableHead : window.siyuan.languages.pinTableHead,
click: () => {
@ -2071,8 +2159,9 @@ export const tableMenu = (protyle: IProtyle, nodeElement: Element, cellElement:
updateTransaction(protyle, nodeElement.getAttribute("data-node-id"), nodeElement.outerHTML, html);
}
});
otherMenus.push({type: "separator"});
otherMenus.push({id: "separator_1", type: "separator"});
otherMenus.push({
id: "alignLeft",
icon: "iconAlignLeft",
accelerator: window.siyuan.config.keymap.editor.general.alignLeft.custom,
label: window.siyuan.languages.alignLeft,
@ -2081,6 +2170,7 @@ export const tableMenu = (protyle: IProtyle, nodeElement: Element, cellElement:
}
});
otherMenus.push({
id: "alignCenter",
icon: "iconAlignCenter",
label: window.siyuan.languages.alignCenter,
accelerator: window.siyuan.config.keymap.editor.general.alignCenter.custom,
@ -2089,6 +2179,7 @@ export const tableMenu = (protyle: IProtyle, nodeElement: Element, cellElement:
}
});
otherMenus.push({
id: "alignRight",
icon: "iconAlignRight",
label: window.siyuan.languages.alignRight,
accelerator: window.siyuan.config.keymap.editor.general.alignRight.custom,
@ -2097,6 +2188,7 @@ export const tableMenu = (protyle: IProtyle, nodeElement: Element, cellElement:
}
});
otherMenus.push({
id: "useDefaultAlign",
icon: "",
label: window.siyuan.languages.useDefaultAlign,
click: () => {
@ -2182,6 +2274,7 @@ export const tableMenu = (protyle: IProtyle, nodeElement: Element, cellElement:
});
const insertMenus = [];
insertMenus.push({
id: "insertRowAbove",
icon: "iconBefore",
label: window.siyuan.languages.insertRowAbove,
accelerator: window.siyuan.config.keymap.editor.table.insertRowAbove.custom,
@ -2191,6 +2284,7 @@ export const tableMenu = (protyle: IProtyle, nodeElement: Element, cellElement:
});
if (!nextHasNone || (nextHasNone && !nextHasRowSpan && nextHasColSpan)) {
insertMenus.push({
id: "insertRowBelow",
icon: "iconAfter",
label: window.siyuan.languages.insertRowBelow,
accelerator: window.siyuan.config.keymap.editor.table.insertRowBelow.custom,
@ -2201,6 +2295,7 @@ export const tableMenu = (protyle: IProtyle, nodeElement: Element, cellElement:
}
if (colIsPure || previousColIsPure) {
insertMenus.push({
id: "insertColumnLeft",
icon: "iconInsertLeft",
label: window.siyuan.languages.insertColumnLeft,
accelerator: window.siyuan.config.keymap.editor.table.insertColumnLeft.custom,
@ -2211,6 +2306,7 @@ export const tableMenu = (protyle: IProtyle, nodeElement: Element, cellElement:
}
if (colIsPure || nextColIsPure) {
insertMenus.push({
id: "insertColumnRight",
icon: "iconInsertRight",
label: window.siyuan.languages.insertColumnRight,
accelerator: window.siyuan.config.keymap.editor.table.insertColumnRight.custom,
@ -2229,6 +2325,7 @@ export const tableMenu = (protyle: IProtyle, nodeElement: Element, cellElement:
(colIsPure && nextColIsPure)
) {
other2Menus.push({
id: "separator_2",
type: "separator"
});
}
@ -2236,6 +2333,7 @@ export const tableMenu = (protyle: IProtyle, nodeElement: Element, cellElement:
if ((!hasNone || (hasNone && !hasRowSpan && hasColSpan)) &&
(!previousHasNone || (previousHasNone && !previousHasRowSpan && previousHasColSpan))) {
other2Menus.push({
id: "moveToUp",
icon: "iconUp",
label: window.siyuan.languages.moveToUp,
accelerator: window.siyuan.config.keymap.editor.table.moveToUp.custom,
@ -2247,6 +2345,7 @@ export const tableMenu = (protyle: IProtyle, nodeElement: Element, cellElement:
if ((!hasNone || (hasNone && !hasRowSpan && hasColSpan)) &&
(!nextHasNone || (nextHasNone && !nextHasRowSpan && nextHasColSpan))) {
other2Menus.push({
id: "moveToDown",
icon: "iconDown",
label: window.siyuan.languages.moveToDown,
accelerator: window.siyuan.config.keymap.editor.table.moveToDown.custom,
@ -2257,6 +2356,7 @@ export const tableMenu = (protyle: IProtyle, nodeElement: Element, cellElement:
}
if (colIsPure && previousColIsPure) {
other2Menus.push({
id: "moveToLeft",
icon: "iconLeft",
label: window.siyuan.languages.moveToLeft,
accelerator: window.siyuan.config.keymap.editor.table.moveToLeft.custom,
@ -2267,6 +2367,7 @@ export const tableMenu = (protyle: IProtyle, nodeElement: Element, cellElement:
}
if (colIsPure && nextColIsPure) {
other2Menus.push({
id: "moveToRight",
icon: "iconRight",
label: window.siyuan.languages.moveToRight,
accelerator: window.siyuan.config.keymap.editor.table.moveToRight.custom,
@ -2286,6 +2387,7 @@ export const tableMenu = (protyle: IProtyle, nodeElement: Element, cellElement:
if (cellElement.parentElement.parentElement.tagName !== "THEAD" &&
((!hasNone && !hasRowSpan) || (hasNone && !hasRowSpan && hasColSpan))) {
removeMenus.push({
id: "deleteRow",
icon: "iconDeleteRow",
label: window.siyuan.languages["delete-row"],
accelerator: window.siyuan.config.keymap.editor.table["delete-row"].custom,
@ -2296,6 +2398,7 @@ export const tableMenu = (protyle: IProtyle, nodeElement: Element, cellElement:
}
if (colIsPure) {
removeMenus.push({
id: "deleteColumn",
icon: "iconDeleteColumn",
label: window.siyuan.languages["delete-column"],
accelerator: window.siyuan.config.keymap.editor.table["delete-column"].custom,

View file

@ -4,6 +4,7 @@ import {copySubMenu} from "./commonMenuItem";
export const initSearchMenu = (id: string) => {
window.siyuan.menus.menu.remove();
window.siyuan.menus.menu.append(new MenuItem({
id: "copy",
label: window.siyuan.languages.copy,
type: "submenu",
submenu: copySubMenu([id])

View file

@ -6,6 +6,7 @@ export const textMenu = (target: Element) => {
return;
}
menu.addItem({
id: "copy",
label: window.siyuan.languages.copy,
icon: "iconCopy",
click() {
@ -20,6 +21,7 @@ export const textMenu = (target: Element) => {
}
});
menu.addItem({
id: "selectAll",
label: window.siyuan.languages.selectAll,
icon: "iconSelect",
click() {

View file

@ -14,6 +14,7 @@ import {checkFold} from "../util/noRelyPCFunction";
export const exportAsset = (src: string) => {
return {
id: "export",
label: window.siyuan.languages.export,
icon: "iconUpload",
async click() {