diff --git a/app/appearance/langs/ar_SA.json b/app/appearance/langs/ar_SA.json index 031410725..bdefc8dab 100644 --- a/app/appearance/langs/ar_SA.json +++ b/app/appearance/langs/ar_SA.json @@ -177,6 +177,7 @@ "thisDatabase": "قاعدة البيانات هذه", "relatedTo": "الربط بـ", "relation": "ربط", + "relatedItems": "العناصر المرتبطة", "rollup": "القيمة المحتسبة", "rollupProperty": "الخاصية", "rollupCalc": "الحساب بـ", diff --git a/app/appearance/langs/de_DE.json b/app/appearance/langs/de_DE.json index 144e55559..819056bc2 100644 --- a/app/appearance/langs/de_DE.json +++ b/app/appearance/langs/de_DE.json @@ -177,6 +177,7 @@ "thisDatabase": "Diese Datenbank", "relatedTo": "Verbindung zu", "relation": "Beziehung", + "relatedItems": "Verknüpfte Einträge", "rollup": "Rollup", "rollupProperty": "Eigenschaft", "rollupCalc": "Berechnen", diff --git a/app/appearance/langs/en_US.json b/app/appearance/langs/en_US.json index 8f8185d44..7947ab32b 100644 --- a/app/appearance/langs/en_US.json +++ b/app/appearance/langs/en_US.json @@ -177,6 +177,7 @@ "thisDatabase": "This database", "relatedTo": "Relation to", "relation": "Relation", + "relatedItems": "Related Items", "rollup": "Rollup", "rollupProperty": "Property", "rollupCalc": "Calculate", diff --git a/app/appearance/langs/es_ES.json b/app/appearance/langs/es_ES.json index b05f57216..632da1e4a 100644 --- a/app/appearance/langs/es_ES.json +++ b/app/appearance/langs/es_ES.json @@ -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", diff --git a/app/appearance/langs/fr_FR.json b/app/appearance/langs/fr_FR.json index f740c6caa..fbfdefecb 100644 --- a/app/appearance/langs/fr_FR.json +++ b/app/appearance/langs/fr_FR.json @@ -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", diff --git a/app/appearance/langs/he_IL.json b/app/appearance/langs/he_IL.json index fbaed8cdc..27aa75cf4 100644 --- a/app/appearance/langs/he_IL.json +++ b/app/appearance/langs/he_IL.json @@ -177,6 +177,7 @@ "thisDatabase": "בסיס הנתונים הזה", "relatedTo": "קשר ל", "relation": "קשר", + "relatedItems": "פריטים קשורים", "rollup": "סיכום", "rollupProperty": "מאפיין", "rollupCalc": "חישוב", diff --git a/app/appearance/langs/it_IT.json b/app/appearance/langs/it_IT.json index 75922bfc0..8ed125a4b 100644 --- a/app/appearance/langs/it_IT.json +++ b/app/appearance/langs/it_IT.json @@ -177,6 +177,7 @@ "thisDatabase": "Questo database", "relatedTo": "Relazionato a", "relation": "Relazione", + "relatedItems": "Elementi correlati", "rollup": "Rollup", "rollupProperty": "Proprietà", "rollupCalc": "Calcola", diff --git a/app/appearance/langs/ja_JP.json b/app/appearance/langs/ja_JP.json index 894872b15..b0e1faa0a 100644 --- a/app/appearance/langs/ja_JP.json +++ b/app/appearance/langs/ja_JP.json @@ -177,6 +177,7 @@ "thisDatabase": "現在のデータベース", "relatedTo": "関連付け", "relation": "関連", + "relatedItems": "関連項目", "rollup": "集計", "rollupProperty": "属性", "rollupCalc": "計算方法", diff --git a/app/appearance/langs/pl_PL.json b/app/appearance/langs/pl_PL.json index 3554eafa8..ee2e55f0e 100644 --- a/app/appearance/langs/pl_PL.json +++ b/app/appearance/langs/pl_PL.json @@ -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", diff --git a/app/appearance/langs/pt_BR.json b/app/appearance/langs/pt_BR.json index 3931df5b2..b684bdb9a 100644 --- a/app/appearance/langs/pt_BR.json +++ b/app/appearance/langs/pt_BR.json @@ -177,6 +177,7 @@ "thisDatabase": "Este banco de dados", "relatedTo": "Relacionado a", "relation": "Relação", + "relatedItems": "Itens relacionados", "rollup": "Rollup", "rollupProperty": "Propriedade", "rollupCalc": "Calcular", diff --git a/app/appearance/langs/ru_RU.json b/app/appearance/langs/ru_RU.json index e6ee2bd65..9f0c2e67a 100644 --- a/app/appearance/langs/ru_RU.json +++ b/app/appearance/langs/ru_RU.json @@ -177,6 +177,7 @@ "thisDatabase": "Эта база данных", "relatedTo": "Связано с", "relation": "Связь", + "relatedItems": "Связанные элементы", "rollup": "Свод", "rollupProperty": "Свойство", "rollupCalc": "Вычислить", diff --git a/app/appearance/langs/zh_CHT.json b/app/appearance/langs/zh_CHT.json index d45a75c53..06fd737de 100644 --- a/app/appearance/langs/zh_CHT.json +++ b/app/appearance/langs/zh_CHT.json @@ -177,6 +177,7 @@ "thisDatabase": "目前資料庫", "relatedTo": "關聯至", "relation": "關聯", + "relatedItems": "已關聯條目", "rollup": "匯總", "rollupProperty": "總計欄位", "rollupCalc": "彙總方式", diff --git a/app/appearance/langs/zh_CN.json b/app/appearance/langs/zh_CN.json index 425d9bafd..292a763bd 100644 --- a/app/appearance/langs/zh_CN.json +++ b/app/appearance/langs/zh_CN.json @@ -177,6 +177,7 @@ "thisDatabase": "当前数据库", "relatedTo": "关联至", "relation": "关联", + "relatedItems": "已关联条目", "rollup": "汇总", "rollupProperty": "汇总字段", "rollupCalc": "汇总方式", diff --git a/app/src/protyle/render/av/relation.ts b/app/src/protyle/render/av/relation.ts index bf8544a50..a08082359 100644 --- a/app/src/protyle/render/av/relation.ts +++ b/app/src/protyle/render/av/relation.ts @@ -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,17 @@ export const toggleUpdateRelationBtn = (menuItemsElement: HTMLElement, avId: str } }; +const updateCopyRelatedItems = (menuElement: Element) => { + const inputElement = menuElement.querySelector(".b3-form__icona .b3-text-field"); + if (menuElement.querySelector(".b3-menu__icon.fn__grab")) { + inputElement.nextElementSibling.classList.remove("fn__none"); + inputElement.classList.add("b3-form__icona-input"); + } else { + inputElement.nextElementSibling.classList.add("fn__none"); + inputElement.classList.remove("b3-form__icona-input"); + } +}; + const genSelectItemHTML = (options: { type: "selected" | "empty" | "unselect", id?: string, @@ -322,6 +335,7 @@ ${keyword ? genSelectItemHTML({ text: menuElement.querySelector(".popover__block").outerHTML }) : (html ? "" : genSelectItemHTML({type: "empty"}))}`; menuElement.querySelector(".b3-menu__items .b3-menu__item:not(.fn__none)").classList.add("b3-menu__item--current"); + updateCopyRelatedItems(menuElement); }); }; @@ -369,7 +383,7 @@ ${html || genSelectItemHTML({type: "empty"})}`; options.menuElement.querySelector(".b3-menu__items .b3-menu__item:not(.fn__none)").classList.add("b3-menu__item--current"); const inputElement = options.menuElement.querySelector("input"); inputElement.focus(); - const databaseName = inputElement.parentElement.querySelector(".popover__block"); + const databaseName = inputElement.parentElement.parentElement.querySelector(".popover__block"); databaseName.innerHTML = Lute.EscapeHTMLStr(response.data.name); databaseName.setAttribute("data-id", response.data.blockIDs[0]); const listElement = options.menuElement.querySelector(".b3-menu__items"); @@ -396,6 +410,26 @@ ${html || genSelectItemHTML({type: "empty"})}`; event.stopPropagation(); filterItem(options.menuElement, options.cellElements[0], inputElement.value); }); + updateCopyRelatedItems(options.menuElement) + options.menuElement.querySelector('[data-type="copyRelatedItems"]').addEventListener("click", () => { + let copyText = ""; + const selectedElements = options.menuElement.querySelectorAll('.b3-menu__item[draggable="true"]'); + selectedElements.forEach((item: HTMLElement) => { + if (selectedElements.length > 1) { + copyText += "* "; + } + const textElement = item.querySelector(".b3-menu__label") as HTMLElement; + if (!textElement.dataset.id || textElement.dataset.id === "undefined") { + copyText += textElement.textContent + "\n"; + } else { + copyText += `((${textElement.dataset.id} "${textElement.textContent}"))\n`; + } + }); + if (copyText) { + writeText(copyText.trimEnd()); + showMessage(window.siyuan.languages.copied); + } + }); }); }; @@ -410,9 +444,12 @@ export const getRelationHTML = (data: IAV, cellElements?: HTMLElement[]) => { if (colRelationData && colRelationData.avID) { return `
- +
+ + +
- +
@@ -539,4 +576,5 @@ class="${target.className} ariaLabel" draggable="true">${genSelectItemHTML({ } } updateCellsValue(protyle, nodeElement, newValue, cellElements); + updateCopyRelatedItems(menuElement); }; diff --git a/app/src/protyle/util/paste.ts b/app/src/protyle/util/paste.ts index 54e15c8ac..c3f3549e6 100644 --- a/app/src/protyle/util/paste.ts +++ b/app/src/protyle/util/paste.ts @@ -473,7 +473,7 @@ export const paste = async (protyle: IProtyle, event: (ClipboardEvent | DragEven const textHTMLLowercase = textHTML.toLowerCase(); if (textPlain && "" !== textPlain.trim() && (textHTML.startsWith(" textHTMLLowercase.indexOf("class=\"katex") && 0 > textHTMLLowercase.indexOf("class=\"math") && - 0 > textHTMLLowercase.indexOf("") && 0 > textHTMLLowercase.indexOf("") && + 0 > textHTMLLowercase.indexOf("") && 0 > textHTMLLowercase.indexOf("") && 0 > textHTMLLowercase.indexOf("") && 0 > textHTMLLowercase.indexOf("") && 0 > textHTMLLowercase.indexOf("") && 0 > textHTMLLowercase.indexOf("") && 0 > textHTMLLowercase.indexOf("") && 0 > textHTMLLowercase.indexOf("") && 0 > textHTMLLowercase.indexOf("") && diff --git a/kernel/util/font.go b/kernel/util/font.go index 643beee7d..3b9b6df71 100644 --- a/kernel/util/font.go +++ b/kernel/util/font.go @@ -121,15 +121,23 @@ func parseTTCFontFamily(fontPath string) (ret []string) { continue } - family, _ := font.Name(nil, ttc.NameIDFamily) - if "" == family { - family, _ = font.Name(nil, ttc.NameIDTypographicFamily) - } + family, _ := font.Name(nil, ttc.NameIDFull) family = strings.TrimSpace(family) - if "" == family || strings.HasPrefix(family, ".") { - continue + if "" != family && !strings.HasPrefix(family, ".") { + ret = append(ret, family) + } + + family, _ = font.Name(nil, ttc.NameIDFamily) + family = strings.TrimSpace(family) + if "" != family && !strings.HasPrefix(family, ".") { + ret = append(ret, family) + } + + family, _ = font.Name(nil, ttc.NameIDTypographicFamily) + family = strings.TrimSpace(family) + if "" != family && !strings.HasPrefix(family, ".") { + ret = append(ret, family) } - ret = append(ret, family) } ret = gulu.Str.RemoveDuplicatedElem(ret) return @@ -150,35 +158,38 @@ func parseTTFFontFamily(fontPath string) (ret string) { return } + if strings.Contains(fontPath, "04") { + logging.LogInfo(fontPath) + } + t, err := font.NameTable() if err != nil { logging.LogErrorf("get font [%s] name table failed: %s", fontPath, err) return } + var family, subfamily string for _, e := range t.List() { - if sfnt.NameFontFamily != e.NameID && sfnt.NamePreferredFamily != e.NameID { - continue - } - - if sfnt.PlatformLanguageID(1033) == e.LanguageID || sfnt.PlatformLanguageID(2052) == e.LanguageID { + if sfnt.NameFontFamily == e.NameID && (sfnt.PlatformLanguageID(1033) == e.LanguageID || sfnt.PlatformLanguageID(2052) == e.LanguageID) { v, _, err := transform.Bytes(textUnicode.UTF16(textUnicode.BigEndian, textUnicode.IgnoreBOM).NewDecoder(), e.Value) - if err != nil { - return "" + if err == nil { + family = strings.TrimSpace(string(v)) } - val := string(v) - if sfnt.NameFontFamily == e.NameID && "" != val { - ret = val - } - if sfnt.NamePreferredFamily == e.NameID && "" != val { - ret = val + } + if sfnt.NameFontSubfamily == e.NameID && (sfnt.PlatformLanguageID(1033) == e.LanguageID || sfnt.PlatformLanguageID(2052) == e.LanguageID) { + v, _, err := transform.Bytes(textUnicode.UTF16(textUnicode.BigEndian, textUnicode.IgnoreBOM).NewDecoder(), e.Value) + if err == nil { + subfamily = strings.TrimSpace(string(v)) } } } - ret = strings.TrimSpace(ret) - if strings.HasPrefix(ret, ".") { - return "" + if family != "" && !strings.HasPrefix(family, ".") { + if subfamily != "" && !strings.Contains(subfamily, "<") && !strings.EqualFold(subfamily, "Regular") { + ret = family + " " + subfamily // 例如 "PingFang SC Bold" + } else { + ret = family + } } return }