mirror of
https://github.com/siyuan-note/siyuan.git
synced 2026-01-06 16:58:49 +01:00
✨ 关联列支持一键复制现有关联 (#15876)
This commit is contained in:
parent
dffd12477e
commit
f747739fd5
14 changed files with 74 additions and 2 deletions
|
|
@ -177,6 +177,7 @@
|
|||
"thisDatabase": "قاعدة البيانات هذه",
|
||||
"relatedTo": "الربط بـ",
|
||||
"relation": "ربط",
|
||||
"relatedItems": "العناصر المرتبطة",
|
||||
"rollup": "القيمة المحتسبة",
|
||||
"rollupProperty": "الخاصية",
|
||||
"rollupCalc": "الحساب بـ",
|
||||
|
|
|
|||
|
|
@ -177,6 +177,7 @@
|
|||
"thisDatabase": "Diese Datenbank",
|
||||
"relatedTo": "Verbindung zu",
|
||||
"relation": "Beziehung",
|
||||
"relatedItems": "Verknüpfte Einträge",
|
||||
"rollup": "Rollup",
|
||||
"rollupProperty": "Eigenschaft",
|
||||
"rollupCalc": "Berechnen",
|
||||
|
|
|
|||
|
|
@ -177,6 +177,7 @@
|
|||
"thisDatabase": "This database",
|
||||
"relatedTo": "Relation to",
|
||||
"relation": "Relation",
|
||||
"relatedItems": "Related Items",
|
||||
"rollup": "Rollup",
|
||||
"rollupProperty": "Property",
|
||||
"rollupCalc": "Calculate",
|
||||
|
|
|
|||
|
|
@ -177,6 +177,7 @@
|
|||
"thisDatabase": "Esta base de datos",
|
||||
"relatedTo": "Relación con",
|
||||
"relation": "Relación",
|
||||
"relatedItems": "Elementos relacionados",
|
||||
"rollup": "Acumular",
|
||||
"rollupProperty": "Propiedad",
|
||||
"rollupCalc": "Calcular",
|
||||
|
|
|
|||
|
|
@ -177,6 +177,7 @@
|
|||
"thisDatabase": "Cette base de données",
|
||||
"relatedTo": " Relation avec ",
|
||||
"relation": "Relation",
|
||||
"relatedItems": "Éléments liés",
|
||||
"rollup": "Rollup",
|
||||
"rollupProperty": "Propriété",
|
||||
"rollupCalc": "Calculer",
|
||||
|
|
|
|||
|
|
@ -177,6 +177,7 @@
|
|||
"thisDatabase": "בסיס הנתונים הזה",
|
||||
"relatedTo": "קשר ל",
|
||||
"relation": "קשר",
|
||||
"relatedItems": "פריטים קשורים",
|
||||
"rollup": "סיכום",
|
||||
"rollupProperty": "מאפיין",
|
||||
"rollupCalc": "חישוב",
|
||||
|
|
|
|||
|
|
@ -177,6 +177,7 @@
|
|||
"thisDatabase": "Questo database",
|
||||
"relatedTo": "Relazionato a",
|
||||
"relation": "Relazione",
|
||||
"relatedItems": "Elementi correlati",
|
||||
"rollup": "Rollup",
|
||||
"rollupProperty": "Proprietà",
|
||||
"rollupCalc": "Calcola",
|
||||
|
|
|
|||
|
|
@ -177,6 +177,7 @@
|
|||
"thisDatabase": "現在のデータベース",
|
||||
"relatedTo": "関連付け",
|
||||
"relation": "関連",
|
||||
"relatedItems": "関連項目",
|
||||
"rollup": "集計",
|
||||
"rollupProperty": "属性",
|
||||
"rollupCalc": "計算方法",
|
||||
|
|
|
|||
|
|
@ -177,6 +177,7 @@
|
|||
"thisDatabase": "Ta baza danych",
|
||||
"relatedTo": "Powiązane z",
|
||||
"relation": "Relacja",
|
||||
"relatedItems": "Powiązane elementy",
|
||||
"rollup": "Skumuluje",
|
||||
"rollupProperty": "Właściwość",
|
||||
"rollupCalc": "Oblicz",
|
||||
|
|
|
|||
|
|
@ -177,6 +177,7 @@
|
|||
"thisDatabase": "Este banco de dados",
|
||||
"relatedTo": "Relacionado a",
|
||||
"relation": "Relação",
|
||||
"relatedItems": "Itens relacionados",
|
||||
"rollup": "Rollup",
|
||||
"rollupProperty": "Propriedade",
|
||||
"rollupCalc": "Calcular",
|
||||
|
|
|
|||
|
|
@ -177,6 +177,7 @@
|
|||
"thisDatabase": "Эта база данных",
|
||||
"relatedTo": "Связано с",
|
||||
"relation": "Связь",
|
||||
"relatedItems": "Связанные элементы",
|
||||
"rollup": "Свод",
|
||||
"rollupProperty": "Свойство",
|
||||
"rollupCalc": "Вычислить",
|
||||
|
|
|
|||
|
|
@ -177,6 +177,7 @@
|
|||
"thisDatabase": "目前資料庫",
|
||||
"relatedTo": "關聯至",
|
||||
"relation": "關聯",
|
||||
"relatedItems": "已關聯條目",
|
||||
"rollup": "匯總",
|
||||
"rollupProperty": "總計欄位",
|
||||
"rollupCalc": "彙總方式",
|
||||
|
|
|
|||
|
|
@ -177,6 +177,7 @@
|
|||
"thisDatabase": "当前数据库",
|
||||
"relatedTo": "关联至",
|
||||
"relation": "关联",
|
||||
"relatedItems": "已关联条目",
|
||||
"rollup": "汇总",
|
||||
"rollupProperty": "汇总字段",
|
||||
"rollupCalc": "汇总方式",
|
||||
|
|
|
|||
|
|
@ -13,6 +13,8 @@ import {getFieldsByData, getViewName} from "./view";
|
|||
import {getColId} from "./col";
|
||||
import {getFieldIdByCellElement} from "./row";
|
||||
import {isMobile} from "../../../util/functions";
|
||||
import {showMessage} from "../../../dialog/message";
|
||||
import {writeText} from "../../util/compatibility";
|
||||
|
||||
interface IAVItem {
|
||||
avID: string;
|
||||
|
|
@ -249,6 +251,19 @@ export const toggleUpdateRelationBtn = (menuItemsElement: HTMLElement, avId: str
|
|||
}
|
||||
};
|
||||
|
||||
const genRelatedItemsHeader = (hasRelatedItems: boolean) => {
|
||||
if (!hasRelatedItems) {
|
||||
return "";
|
||||
}
|
||||
return `<div style="padding: 4px 2px;">
|
||||
<span class="b3-menu__label">${window.siyuan.languages.relatedItems || "已关联条目"}</span>
|
||||
<span class="fn__flex-1"></span>
|
||||
<button class="b3-button b3-button--small" data-type="copyRelatedItems" title="${window.siyuan.languages.copy}" style="padding: 4px 4px;">
|
||||
<svg><use xlink:href="#iconCopy"></use></svg>
|
||||
</button>
|
||||
</div>`;
|
||||
};
|
||||
|
||||
const genSelectItemHTML = (options: {
|
||||
type: "selected" | "empty" | "unselect",
|
||||
id?: string,
|
||||
|
|
@ -313,7 +328,8 @@ draggable="true">${genSelectItemHTML({
|
|||
});
|
||||
}
|
||||
});
|
||||
menuElement.querySelector(".b3-menu__items").innerHTML = `${selectHTML}
|
||||
const hasRelatedItems = selectHTML.trim() !== "";
|
||||
menuElement.querySelector(".b3-menu__items").innerHTML = `${genRelatedItemsHeader(hasRelatedItems)}${selectHTML}
|
||||
<button class="b3-menu__separator"></button>
|
||||
${html}
|
||||
${keyword ? genSelectItemHTML({
|
||||
|
|
@ -361,7 +377,8 @@ draggable="true">${genSelectItemHTML({
|
|||
});
|
||||
}
|
||||
});
|
||||
options.menuElement.querySelector(".b3-menu__items").innerHTML = `${selectHTML}
|
||||
const hasRelatedItems = selectHTML.trim() !== "";
|
||||
options.menuElement.querySelector(".b3-menu__items").innerHTML = `${genRelatedItemsHeader(hasRelatedItems)}${selectHTML}
|
||||
<button class="b3-menu__separator"></button>
|
||||
${html || genSelectItemHTML({type: "empty"})}`;
|
||||
const cellRect = options.cellElements[options.cellElements.length - 1].getBoundingClientRect();
|
||||
|
|
@ -396,6 +413,48 @@ ${html || genSelectItemHTML({type: "empty"})}`;
|
|||
event.stopPropagation();
|
||||
filterItem(options.menuElement, options.cellElements[0], inputElement.value);
|
||||
});
|
||||
|
||||
// 添加复制按钮的点击事件
|
||||
const copyRelatedItemsHandler = (event: Event) => {
|
||||
const target = event.target as HTMLElement;
|
||||
if (target.closest('[data-type="copyRelatedItems"]')) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
|
||||
const relationItems = options.cellElements[0].querySelectorAll(".av__cell--relation");
|
||||
const blockRefs: string[] = [];
|
||||
|
||||
relationItems.forEach((relationItem: HTMLElement) => {
|
||||
const item = relationItem.querySelector(".av__celltext") as HTMLElement;
|
||||
if (item) {
|
||||
const text = item.textContent || window.siyuan.languages.untitled;
|
||||
if (item.dataset.id) {
|
||||
// 有 ID 的条目,生成块引用
|
||||
const blockRef = `((${item.dataset.id} "${text}"))`;
|
||||
blockRefs.push(blockRef);
|
||||
} else {
|
||||
// 没有 ID 的条目,直接使用纯文本
|
||||
blockRefs.push(text);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if (blockRefs.length > 0) {
|
||||
let copyText: string;
|
||||
if (blockRefs.length === 1) {
|
||||
// 单个条目,直接复制
|
||||
copyText = blockRefs[0];
|
||||
} else {
|
||||
// 多个条目,复制为列表
|
||||
copyText = blockRefs.map(ref => `- ${ref}`).join("\n");
|
||||
}
|
||||
writeText(copyText);
|
||||
showMessage(window.siyuan.languages.copied || "已复制");
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
listElement.addEventListener("click", copyRelatedItemsHandler);
|
||||
});
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue