diff --git a/chrome/content/zotero/elements/itemBox.js b/chrome/content/zotero/elements/itemBox.js index de1d51a7f2..a4ff76f235 100644 --- a/chrome/content/zotero/elements/itemBox.js +++ b/chrome/content/zotero/elements/itemBox.js @@ -1506,7 +1506,9 @@ if (lazy.BIDI_BROWSER_UI) { // Attempt to guess text direction automatically let language = this.item.getField('language'); - valueElement.dir = Zotero.ItemFields.getDirection(fieldName, language); + valueElement.dir = Zotero.ItemFields.getDirection( + this.item.itemTypeID, fieldName, language + ); } // Regardless, align the text in unfocused fields consistently, following the locale's direction diff --git a/chrome/content/zotero/itemTree.jsx b/chrome/content/zotero/itemTree.jsx index 2cac5baaa6..29c97f2886 100644 --- a/chrome/content/zotero/itemTree.jsx +++ b/chrome/content/zotero/itemTree.jsx @@ -2861,7 +2861,9 @@ var ItemTree = class ItemTree extends LibraryTree { let textSpanAriaLabel = [textWithFullStop, itemTypeAriaLabel, tagAriaLabel, retractedAriaLabel].join(' '); textSpan.className = "cell-text"; if (lazy.BIDI_BROWSER_UI) { - textSpan.dir = Zotero.ItemFields.getDirection(column.dataKey, item.getField('language')); + textSpan.dir = Zotero.ItemFields.getDirection( + item.itemTypeID, column.dataKey, item.getField('language') + ); } textSpan.setAttribute('aria-label', textSpanAriaLabel); diff --git a/chrome/content/zotero/xpcom/data/itemFields.js b/chrome/content/zotero/xpcom/data/itemFields.js index 4b675773dc..10029a9105 100644 --- a/chrome/content/zotero/xpcom/data/itemFields.js +++ b/chrome/content/zotero/xpcom/data/itemFields.js @@ -421,12 +421,13 @@ Zotero.ItemFields = new function() { /** * Guess the text direction of a field, using the item's language field if available. * + * @param {number} itemTypeID * @param {string | number} field * @param {string} [itemLanguage] * @returns {'auto' | 'ltr' | 'rtl'} */ - this.getDirection = function (field, itemLanguage) { - field = this.getName(field) || field; + this.getDirection = function (itemTypeID, field, itemLanguage) { + field = this.getName(this.getBaseIDFromTypeAndField(itemTypeID, field) || field); switch (field) { // Certain fields containing IDs, numbers, and data: always LTR case 'ISBN': @@ -438,24 +439,15 @@ Zotero.ItemFields = new function() { case 'numberOfVolumes': case 'issue': case 'runningTime': - case 'billNumber': case 'number': case 'versionNumber': - case 'documentNumber': - case 'patentNumber': case 'applicationNumber': case 'priorityNumbers': - case 'episodeNumber': - case 'reportNumber': case 'codeNumber': - case 'publicLawNumber': - case 'archiveID': - case 'codePages': case 'pages': case 'numPages': case 'seriesNumber': case 'edition': - case 'identifier': case 'citationKey': case 'language': case 'extra':