Skip to content

Commit

Permalink
🎨 #8617
Browse files Browse the repository at this point in the history
  • Loading branch information
Vanessa219 committed Jun 29, 2023
1 parent dce9d4d commit 846fdf7
Show file tree
Hide file tree
Showing 6 changed files with 130 additions and 48 deletions.
51 changes: 51 additions & 0 deletions app/src/menus/protyle.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ import {removeLink} from "../protyle/toolbar/Link";
import {alignImgCenter, alignImgLeft} from "../protyle/wysiwyg/commonHotkey";
import {renameTag} from "../util/noRelyPCFunction";
import {hideElements} from "../protyle/ui/hideElements";
import {emitOpenMenu} from "../plugin/EventBus";

export const refMenu = (protyle: IProtyle, element: HTMLElement) => {
const nodeElement = hasClosestBlock(element);
Expand Down Expand Up @@ -271,6 +272,19 @@ export const refMenu = (protyle: IProtyle, element: HTMLElement) => {
focusByWbr(nodeElement, protyle.toolbar.range);
}
}).element);

if (protyle?.app?.plugins) {
emitOpenMenu({
plugins: protyle.app.plugins,
type: "open-menu-blockref",
detail: {
protyle,
element: element,
},
separatorPosition: "top",
});
}

const rect = element.getBoundingClientRect();
window.siyuan.menus.menu.popup({
x: rect.left,
Expand Down Expand Up @@ -715,6 +729,18 @@ export const imgMenu = (protyle: IProtyle, range: Range, assetElement: HTMLEleme
window.siyuan.menus.menu.append(new MenuItem({type: "separator"}).element);
openMenu(protyle.app, imgSrc, false, false);
}
if (protyle?.app?.plugins) {
emitOpenMenu({
plugins: protyle.app.plugins,
type: "open-menu-image",
detail: {
protyle,
element: assetElement,
},
separatorPosition: "top",
});
}

window.siyuan.menus.menu.popup({x: position.clientX, y: position.clientY});
const textElements = window.siyuan.menus.menu.element.querySelectorAll("textarea");
textElements[0].focus();
Expand Down Expand Up @@ -876,6 +902,18 @@ export const linkMenu = (protyle: IProtyle, linkElement: HTMLElement, focusText
focusByWbr(nodeElement, protyle.toolbar.range);
}
}).element);

if (protyle?.app?.plugins) {
emitOpenMenu({
plugins: protyle.app.plugins,
type: "open-menu-link",
detail: {
protyle,
element: linkElement,
},
separatorPosition: "top",
});
}
const rect = linkElement.getBoundingClientRect();
window.siyuan.menus.menu.popup({
x: rect.left,
Expand Down Expand Up @@ -995,6 +1033,19 @@ export const tagMenu = (protyle: IProtyle, tagElement: HTMLElement) => {
focusByWbr(nodeElement, protyle.toolbar.range);
}
}).element);

if (protyle?.app?.plugins) {
emitOpenMenu({
plugins: protyle.app.plugins,
type: "open-menu-tag",
detail: {
protyle,
element: tagElement,
},
separatorPosition: "top",
});
}

const rect = tagElement.getBoundingClientRect();
window.siyuan.menus.menu.popup({
x: rect.left,
Expand Down
29 changes: 29 additions & 0 deletions app/src/plugin/EventBus.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import {MenuItem, subMenu} from "../menus/Menu";

export class EventBus<DetailType = any> {
private eventTarget: EventTarget;

Expand All @@ -21,3 +23,30 @@ export class EventBus<DetailType = any> {
return this.eventTarget.dispatchEvent(new CustomEvent(type, {detail}));
}
}

export const emitOpenMenu = (options: {
plugins: import("./index").Plugin[],
type: TEventBus,
detail: any,
separatorPosition?: "top" | "bottom",
}) => {
const pluginSubMenu = new subMenu();
options.detail.menu = pluginSubMenu;
options.plugins.forEach((plugin) => {
plugin.eventBus.emit(options.type, options.detail);
});
if (pluginSubMenu.menus.length > 0) {
if (options.separatorPosition === "top") {
window.siyuan.menus.menu.append(new MenuItem({type: "separator"}).element);
}
window.siyuan.menus.menu.append(new MenuItem({
label: window.siyuan.languages.plugin,
icon: "iconPlugin",
type: "submenu",
submenu: pluginSubMenu.menus,
}).element);
if (options.separatorPosition === "bottom") {
window.siyuan.menus.menu.append(new MenuItem({type: "separator"}).element);
}
}
}
53 changes: 22 additions & 31 deletions app/src/protyle/gutter/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import {hasClosestBlock, hasClosestByAttribute, hasClosestByMatchTag, hasClosestByTag} from "../util/hasClosest";
import {getIconByType} from "../../editor/getIcon";
import {iframeMenu, setFold, tableMenu, videoMenu, zoomOut} from "../../menus/protyle";
import {MenuItem, subMenu} from "../../menus/Menu";
import {MenuItem} from "../../menus/Menu";
import {copySubMenu, openAttr, openWechatNotify} from "../../menus/commonMenuItem";
import {copyPlainText, updateHotkeyTip, writeText} from "../util/compatibility";
import {
Expand Down Expand Up @@ -41,6 +41,7 @@ import {hideTooltip} from "../../dialog/tooltip";
import {appearanceMenu} from "../toolbar/Font";
import {setPosition} from "../../util/setPosition";
import {avRender} from "../render/av/render";
import {emitOpenMenu} from "../../plugin/EventBus";

export class Gutter {
public element: HTMLElement;
Expand Down Expand Up @@ -726,22 +727,16 @@ export class Gutter {
}).element);
}

const pluginSubMenu = new subMenu();
protyle.app?.plugins?.forEach((plugin) => {
plugin.eventBus.emit("click-blockicon", {
protyle,
menu: pluginSubMenu,
blockElements: selectsElement,
if (protyle?.app?.plugins) {
emitOpenMenu({
plugins:protyle.app.plugins,
type: "click-blockicon",
detail: {
protyle,
blockElements: selectsElement,
},
separatorPosition: "top",
});
});
if (pluginSubMenu.menus.length > 0) {
window.siyuan.menus.menu.append(new MenuItem({type: "separator"}).element);
window.siyuan.menus.menu.append(new MenuItem({
label: window.siyuan.languages.plugin,
icon: "iconPlugin",
type: "submenu",
submenu: pluginSubMenu.menus,
}).element);
}

return window.siyuan.menus.menu;
Expand Down Expand Up @@ -1547,23 +1542,19 @@ export class Gutter {
}
window.siyuan.menus.menu.append(new MenuItem({type: "separator"}).element);
}
const pluginSubMenu = new subMenu();
protyle.app?.plugins?.forEach((plugin) => {
plugin.eventBus.emit("click-blockicon", {
protyle,
menu: pluginSubMenu,
blockElements: [nodeElement]

if (protyle?.app?.plugins) {
emitOpenMenu({
plugins:protyle.app.plugins,
type: "click-blockicon",
detail: {
protyle,
blockElements: [nodeElement]
},
separatorPosition: "bottom",
});
});
if (pluginSubMenu.menus.length > 0) {
window.siyuan.menus.menu.append(new MenuItem({
label: window.siyuan.languages.plugin,
icon: "iconPlugin",
type: "submenu",
submenu: pluginSubMenu.menus,
}).element);
window.siyuan.menus.menu.append(new MenuItem({type: "separator"}).element);
}

let updateHTML = nodeElement.getAttribute("updated") || "";
if (updateHTML) {
updateHTML = `${window.siyuan.languages.modifiedAt} ${dayjs(updateHTML).format("YYYY-MM-DD HH:mm:ss")}<br>`;
Expand Down
25 changes: 10 additions & 15 deletions app/src/protyle/header/Title.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import {makeCard, quickMakeCard} from "../../card/makeCard";
import {viewCards} from "../../card/viewCards";
import {getNotebookName, pathPosix} from "../../util/pathName";
import {commonClick} from "../wysiwyg/commonClick";
import {emitOpenMenu} from "../../plugin/EventBus";

export class Title {
public element: HTMLElement;
Expand Down Expand Up @@ -401,22 +402,16 @@ export class Title {
submenu: riffCardMenu,
}).element);

const pluginSubMenu = new subMenu();
protyle.app?.plugins?.forEach((plugin) => {
plugin.eventBus.emit("click-editortitleicon", {
protyle,
menu: pluginSubMenu,
data: response.data,
if (protyle?.app?.plugins) {
emitOpenMenu({
plugins:protyle.app.plugins,
type: "click-editortitleicon",
detail: {
protyle,
data: response.data,
},
separatorPosition: "top",
});
});
if (pluginSubMenu.menus.length > 0) {
window.siyuan.menus.menu.append(new MenuItem({ type: "separator" }).element);
window.siyuan.menus.menu.append(new MenuItem({
label: window.siyuan.languages.plugin,
icon: "iconPlugin",
type: "submenu",
submenu: pluginSubMenu.menus,
}).element);
}

window.siyuan.menus.menu.append(new MenuItem({type: "separator"}).element);
Expand Down
12 changes: 12 additions & 0 deletions app/src/protyle/render/av/action.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import {openEditorTab} from "../../../menus/util";
import {copySubMenu} from "../../../menus/commonMenuItem";
import {popTextCell, showHeaderCellMenu} from "./cell";
import {getColIconByType} from "./col";
import {emitOpenMenu} from "../../../plugin/EventBus";

export const avClick = (protyle: IProtyle, event: MouseEvent & { target: HTMLElement }) => {
const blockElement = hasClosestBlock(event.target);
Expand Down Expand Up @@ -143,6 +144,17 @@ export const avContextmenu = (protyle: IProtyle, event: MouseEvent & { detail: a
type: "submenu",
submenu: editAttrSubmenu
});
if (protyle?.app?.plugins) {
emitOpenMenu({
plugins: protyle.app.plugins,
type: "open-menu-av",
detail: {
protyle,
element: hasClosestByClassName(target, "av__cell"),
},
separatorPosition: "top",
});
}
menu.open({
x: event.clientX,
y: event.clientY,
Expand Down
8 changes: 6 additions & 2 deletions app/src/types/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,12 @@ type TOperation =
| "updateAttrViewCell"
type TBazaarType = "templates" | "icons" | "widgets" | "themes" | "plugins"
type TCardType = "doc" | "notebook" | "all"
type TEventBus = "ws-main" | "click-blockicon" | "click-editorcontent" | "click-pdf" |
"click-editortitleicon" | "open-noneditableblock" | "loaded-protyle"
type TEventBus = "ws-main" |
"click-blockicon" | "click-editorcontent" | "click-pdf" | "click-editortitleicon" |
"open-noneditableblock" |
"open-menu-blockref" | "open-menu-fileannotationref" | "open-menu-tag" | "open-menu-link" | "open-menu-image" |
"open-menu-av" | "open-menu-content" |
"loaded-protyle"
type TAVCol = "text" | "date" | "number" | "relation" | "rollup" | "select" | "block"

declare module "blueimp-md5"
Expand Down

0 comments on commit 846fdf7

Please sign in to comment.