diff --git a/app/appearance/langs/en_US.json b/app/appearance/langs/en_US.json index 37a82141e..66dc9ea8a 100644 --- a/app/appearance/langs/en_US.json +++ b/app/appearance/langs/en_US.json @@ -1,4 +1,7 @@ { + "hide": "Hide", + "wrap": "Wrap column", + "edit": "Edit", "incompatiblePluginTip": "This plugin is not supported on the current terminal", "incompatible": "Incompatible", "trust": "Trust", diff --git a/app/appearance/langs/es_ES.json b/app/appearance/langs/es_ES.json index 2ce353eab..4516e9e9f 100644 --- a/app/appearance/langs/es_ES.json +++ b/app/appearance/langs/es_ES.json @@ -1,4 +1,7 @@ { + "hide": "Ocultar", + "wrap": "Columna de ajuste", + "edit": "Editar", "incompatiblePluginTip": "Este complemento no es compatible con el terminal actual", "incompatible": "Incompatible", "trust": "Confiar", diff --git a/app/appearance/langs/fr_FR.json b/app/appearance/langs/fr_FR.json index 6980d2fa8..b5018f804 100644 --- a/app/appearance/langs/fr_FR.json +++ b/app/appearance/langs/fr_FR.json @@ -1,4 +1,7 @@ { + "hide": "Masquer", + "wrap": "Reboucler la colonne", + "edit": "Modifier", "incompatiblePluginTip": "Ce plugin n'est pas supporté sur le terminal actuel", "incompatible": "Incompatible", "trust": "Confiance", diff --git a/app/appearance/langs/zh_CHT.json b/app/appearance/langs/zh_CHT.json index 9c15eb48d..37f0ba729 100644 --- a/app/appearance/langs/zh_CHT.json +++ b/app/appearance/langs/zh_CHT.json @@ -1,4 +1,7 @@ { + "hide": "隱藏", + "wrap": "換行", + "edit": "編輯", "incompatiblePluginTip": "該插件不支持在當前終端上使用", "incompatible": "不兼容", "trust": "信任", diff --git a/app/appearance/langs/zh_CN.json b/app/appearance/langs/zh_CN.json index fbf15a43a..d360651ef 100644 --- a/app/appearance/langs/zh_CN.json +++ b/app/appearance/langs/zh_CN.json @@ -1,4 +1,7 @@ { + "hide": "隐藏", + "wrap": "换行", + "edit": "编辑", "incompatiblePluginTip": "该插件不支持在当前终端上使用", "incompatible": "不兼容", "trust": "信任", diff --git a/app/src/assets/scss/protyle/_wysiwyg.scss b/app/src/assets/scss/protyle/_wysiwyg.scss index 4302e4ebe..d484153c4 100644 --- a/app/src/assets/scss/protyle/_wysiwyg.scss +++ b/app/src/assets/scss/protyle/_wysiwyg.scss @@ -42,6 +42,23 @@ &__row { display: flex; border-bottom: 1px solid var(--b3-theme-surface-lighter); + + &--header .av__cell { + display: flex; + align-items: center; + + svg { + height: 14px; + width: 14px; + color: var(--b3-theme-on-surface); + margin-right: 5px; + } + } + + &--header, + &--footer { + background-color: var(--b3-theme-background); + } } &__cell { diff --git a/app/src/mobile/util/MobileBackFoward.ts b/app/src/mobile/util/MobileBackFoward.ts index fc5a7c909..441f18447 100644 --- a/app/src/mobile/util/MobileBackFoward.ts +++ b/app/src/mobile/util/MobileBackFoward.ts @@ -11,7 +11,7 @@ import {setStorageVal} from "../../protyle/util/compatibility"; import {closePanel} from "./closePanel"; import {showMessage} from "../../dialog/message"; import {getCurrentEditor} from "../editor"; -import {avRender} from "../../protyle/render/av"; +import {avRender} from "../../protyle/render/av/render"; const forwardStack: IBackStack[] = []; diff --git a/app/src/protyle/gutter/index.ts b/app/src/protyle/gutter/index.ts index c2f260d80..a3091c599 100644 --- a/app/src/protyle/gutter/index.ts +++ b/app/src/protyle/gutter/index.ts @@ -40,7 +40,7 @@ import {activeBlur} from "../../mobile/util/keyboardToolbar"; import {hideTooltip} from "../../dialog/tooltip"; import {appearanceMenu} from "../toolbar/Font"; import {setPosition} from "../../util/setPosition"; -import {avRender} from "../render/av"; +import {avRender} from "../render/av/render"; export class Gutter { public element: HTMLElement; diff --git a/app/src/protyle/hint/extend.ts b/app/src/protyle/hint/extend.ts index e7ab3cdb2..f5ac11327 100644 --- a/app/src/protyle/hint/extend.ts +++ b/app/src/protyle/hint/extend.ts @@ -19,7 +19,7 @@ import {zoomOut} from "../../menus/protyle"; import {hideElements} from "../ui/hideElements"; import {genAssetHTML} from "../../asset/renderAssets"; import {unicode2Emoji} from "../../emoji"; -import {avRender} from "../render/av"; +import {avRender} from "../render/av/render"; export const hintSlash = (key: string, protyle: IProtyle) => { const allList: IHintData[] = [{ diff --git a/app/src/protyle/hint/index.ts b/app/src/protyle/hint/index.ts index 1c72ffde2..ac38cb26d 100644 --- a/app/src/protyle/hint/index.ts +++ b/app/src/protyle/hint/index.ts @@ -32,7 +32,7 @@ import {processRender} from "../util/processCode"; import {AIChat} from "../../ai/chat"; import {isMobile} from "../../util/functions"; import {isCtrl} from "../util/compatibility"; -import {avRender} from "../render/av"; +import {avRender} from "../render/av/render"; export class Hint { public timeId: number; diff --git a/app/src/protyle/method.ts b/app/src/protyle/method.ts index 77c954322..899a9d5da 100644 --- a/app/src/protyle/method.ts +++ b/app/src/protyle/method.ts @@ -7,7 +7,7 @@ import { chartRender } from "./render/chartRender"; import { abcRender } from "./render/abcRender"; import { mindmapRender } from "./render/mindmapRender"; import { plantumlRender } from "./render/plantumlRender"; -import { avRender } from "./render/av"; +import { avRender } from "./render/av/render"; import "../assets/scss/export.scss"; class Protyle { diff --git a/app/src/protyle/preview/index.ts b/app/src/protyle/preview/index.ts index b12447ce5..a52c99bb1 100644 --- a/app/src/protyle/preview/index.ts +++ b/app/src/protyle/preview/index.ts @@ -17,7 +17,7 @@ import {fetchPost} from "../../util/fetch"; import {processRender} from "../util/processCode"; import {highlightRender} from "../render/highlightRender"; import {speechRender} from "../render/speechRender"; -import {avRender} from "../render/av"; +import {avRender} from "../render/av/render"; export class Preview { public element: HTMLElement; diff --git a/app/src/protyle/render/av/action.ts b/app/src/protyle/render/av/action.ts index 8ea97fbb6..06ae229e9 100644 --- a/app/src/protyle/render/av/action.ts +++ b/app/src/protyle/render/av/action.ts @@ -1,6 +1,7 @@ import {hasClosestBlock, hasClosestByAttribute, hasClosestByClassName} from "../../util/hasClosest"; import {transaction} from "../../wysiwyg/transaction"; import {Menu} from "../../../plugin/API"; +import {getIconByType} from "./render"; export const avClick = (protyle: IProtyle, event: MouseEvent & { target: HTMLElement }) => { const blockElement = hasClosestBlock(event.target) @@ -23,13 +24,13 @@ export const avClick = (protyle: IProtyle, event: MouseEvent & { target: HTMLEle id, parentID: blockElement.getAttribute("data-av-type"), }]); - } }) const addRect = addElement.getBoundingClientRect() menu.open({ x: addRect.left, - y: addRect.bottom + y: addRect.bottom, + h: addRect.height }) event.preventDefault(); event.stopPropagation(); @@ -37,6 +38,84 @@ export const avClick = (protyle: IProtyle, event: MouseEvent & { target: HTMLEle } const cellElement = hasClosestByClassName(event.target, "av__cell") if (cellElement && blockElement) { + const type = cellElement.getAttribute("data-dtype") + const menu = new Menu("av-header-cell") + menu.addItem({ + icon: getIconByType(type), + label: ``, + bind() { + + } + }) + if (type !== "block") { + menu.addItem({ + icon: "iconEdit", + label: window.siyuan.languages.edit, + click() { + + } + }) + } + menu.addSeparator() + menu.addItem({ + icon: "iconUp", + label: window.siyuan.languages.fileNameNatASC, + click() { + + } + }) + menu.addItem({ + icon: "iconDown", + label: window.siyuan.languages.fileNameNatDESC, + click() { + + } + }) + menu.addItem({ + icon: "iconFilter", + label: window.siyuan.languages.filter, + click() { + + } + }) + menu.addSeparator() + if (type !== "block") { + menu.addItem({ + icon: "iconEyeoff", + label: window.siyuan.languages.hide, + click() { + + } + }) + menu.addItem({ + icon: "iconCopy", + label: window.siyuan.languages.duplicate, + click() { + + } + }) + menu.addItem({ + icon: "iconTrashcan", + label: window.siyuan.languages.delete, + click() { + + } + }) + menu.addSeparator() + } + menu.addItem({ + label: `