From a555105a557849345c25543b62892e4258839e59 Mon Sep 17 00:00:00 2001 From: Vanessa Date: Sun, 28 Jan 2024 13:01:40 +0800 Subject: [PATCH] :art: fix https://github.com/siyuan-note/siyuan/issues/10269 --- app/appearance/langs/en_US.json | 1 + app/appearance/langs/es_ES.json | 1 + app/appearance/langs/fr_FR.json | 1 + app/appearance/langs/zh_CHT.json | 1 + app/appearance/langs/zh_CN.json | 1 + app/src/protyle/gutter/index.ts | 44 +++++++++++++++++++++++++++ app/src/protyle/render/av/relation.ts | 24 ++++++++++++--- 7 files changed, 69 insertions(+), 4 deletions(-) diff --git a/app/appearance/langs/en_US.json b/app/appearance/langs/en_US.json index c793a4980..168259762 100644 --- a/app/appearance/langs/en_US.json +++ b/app/appearance/langs/en_US.json @@ -1,4 +1,5 @@ { + "addToDatabase": "Add to Database", "clearContext": "Clear context", "cloudStoragePurge": "Purge cloud storage", "cloudStoragePurgeConfirm": "Note:Are you sure to execute it now?", diff --git a/app/appearance/langs/es_ES.json b/app/appearance/langs/es_ES.json index f1b9c6a63..a273f5b6b 100644 --- a/app/appearance/langs/es_ES.json +++ b/app/appearance/langs/es_ES.json @@ -1,4 +1,5 @@ { + "addToDatabase": "Agregar a la base de datos", "clearContext": "Borrar contexto", "cloudStoragePurge": "Borrar almacenamiento en la nube", "cloudStoragePurgeConfirm": "Nota:¿Está seguro de ejecutarla ahora?", diff --git a/app/appearance/langs/fr_FR.json b/app/appearance/langs/fr_FR.json index 58afe8d05..438aa55f1 100644 --- a/app/appearance/langs/fr_FR.json +++ b/app/appearance/langs/fr_FR.json @@ -1,4 +1,5 @@ { + "addToDatabase": "Ajouter à la base de données", "clearContext": "Effacer le contexte", "cloudStoragePurge": "Purger le stockage cloud", "cloudStoragePurgeConfirm": "Remarque :Êtes-vous sûr de l'exécuter maintenant ?", diff --git a/app/appearance/langs/zh_CHT.json b/app/appearance/langs/zh_CHT.json index e21649ce9..bd3bb790e 100644 --- a/app/appearance/langs/zh_CHT.json +++ b/app/appearance/langs/zh_CHT.json @@ -1,4 +1,5 @@ { + "addToDatabase": "新增至資料庫", "clearContext": "清空上下文", "cloudStoragePurge": "清理雲端儲存", "cloudStoragePurgeConfirm": "請注意:確定現在就執行嗎?", diff --git a/app/appearance/langs/zh_CN.json b/app/appearance/langs/zh_CN.json index 7881a0c34..7627a082f 100644 --- a/app/appearance/langs/zh_CN.json +++ b/app/appearance/langs/zh_CN.json @@ -1,4 +1,5 @@ { + "addToDatabase": "添加到数据库", "clearContext": "清空上下文", "cloudStoragePurge": "清理云端存储", "cloudStoragePurgeConfirm": "请注意: 确定现在就执行吗?", diff --git a/app/src/protyle/gutter/index.ts b/app/src/protyle/gutter/index.ts index e297b1f59..06f450596 100644 --- a/app/src/protyle/gutter/index.ts +++ b/app/src/protyle/gutter/index.ts @@ -46,6 +46,7 @@ import {avRender} from "../render/av/render"; import {emitOpenMenu} from "../../plugin/EventBus"; import {insertAttrViewBlockAnimation} from "../render/av/row"; import {avContextmenu} from "../render/av/action"; +import {openSearchAV} from "../render/av/relation"; export class Gutter { public element: HTMLElement; @@ -785,6 +786,29 @@ export class Gutter { }); } }).element); + window.siyuan.menus.menu.append(new MenuItem({ + label: window.siyuan.languages.addToDatabase, + icon: "iconDatabase", + click: () => { + openSearchAV("", this.element, (listItemElement) => { + const sourceIds: string[] = [] + selectsElement.forEach(item => { + sourceIds.push(item.getAttribute("data-node-id")); + }); + const avID = listItemElement.dataset.avId; + transaction(protyle, [{ + action: "insertAttrViewBlock", + avID, + srcIDs: sourceIds, + isDetached: false, + }], [{ + action: "removeAttrViewBlock", + srcIDs: sourceIds, + avID, + }]); + }); + } + }).element); window.siyuan.menus.menu.append(new MenuItem({ label: window.siyuan.languages.delete, icon: "iconTrashcan", @@ -1214,6 +1238,26 @@ export class Gutter { }); } }).element); + window.siyuan.menus.menu.append(new MenuItem({ + label: window.siyuan.languages.addToDatabase, + icon: "iconDatabase", + click: () => { + openSearchAV("", this.element, (listItemElement) => { + const sourceIds: string[] = [nodeElement.getAttribute("data-node-id")]; + const avID = listItemElement.dataset.avId; + transaction(protyle, [{ + action: "insertAttrViewBlock", + avID, + srcIDs: sourceIds, + isDetached: false, + }], [{ + action: "removeAttrViewBlock", + srcIDs: sourceIds, + avID, + }]); + }); + } + }).element); window.siyuan.menus.menu.append(new MenuItem({ label: window.siyuan.languages.delete, icon: "iconTrashcan", diff --git a/app/src/protyle/render/av/relation.ts b/app/src/protyle/render/av/relation.ts index 0e92557f0..a9accd722 100644 --- a/app/src/protyle/render/av/relation.ts +++ b/app/src/protyle/render/av/relation.ts @@ -45,7 +45,7 @@ const setDatabase = (avId: string, element: HTMLElement, item: HTMLElement) => { } }; -export const openSearchAV = (avId: string, target: HTMLElement) => { +export const openSearchAV = (avId: string, target: HTMLElement, cb?: (element: HTMLElement) => void) => { window.siyuan.menus.menu.remove(); const menu = new Menu(); menu.addItem({ @@ -72,19 +72,34 @@ export const openSearchAV = (avId: string, target: HTMLElement) => { if (event.key === "Enter") { event.preventDefault(); event.stopPropagation(); - setDatabase(avId, target, listElement.querySelector(".b3-list-item--focus")); + const listItemElement = listElement.querySelector(".b3-list-item--focus") as HTMLElement; + if (cb) { + cb(listItemElement); + } else { + setDatabase(avId, target, listItemElement); + } window.siyuan.menus.menu.remove(); } }); - inputElement.addEventListener("input", (event) => { + inputElement.addEventListener("input", (event: InputEvent) => { event.stopPropagation(); + if (event.isComposing) { + return; + } + genSearchList(listElement, inputElement.value, avId); + }); + inputElement.addEventListener("compositionend", () => { genSearchList(listElement, inputElement.value, avId); }); element.lastElementChild.addEventListener("click", (event) => { const listItemElement = hasClosestByClassName(event.target as HTMLElement, "b3-list-item"); if (listItemElement) { event.stopPropagation(); - setDatabase(avId, target, listItemElement); + if (cb) { + cb(listItemElement); + } else { + setDatabase(avId, target, listItemElement); + } window.siyuan.menus.menu.remove(); } }); @@ -225,6 +240,7 @@ const filterItem = (listElement: Element, key: string) => { } }) } + export const bindRelationEvent = (options: { menuElement: HTMLElement, protyle: IProtyle,