Add Relate Items to context menu (#5499)

This commit is contained in:
Abe Jellinek 2025-08-20 02:15:06 -04:00 • committed by GitHub
parent 7f9418fe98
commit 4f1589132c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 47 additions and 2 deletions

View file

@ -2358,6 +2358,31 @@ var ZoteroPane = new function () {
};
this.relateSelectedItems = async function () {
if (!this.canEdit()) {
this.displayCannotEditLibraryMessage();
return;
}
let selectedItems = this.getSelectedItems();
let saveOptions = {
skipDateModifiedUpdate: true
};
await Zotero.DB.executeTransaction(async () => {
for (let index1 = 0; index1 < selectedItems.length; index1++) {
for (let index2 = index1 + 1; index2 < selectedItems.length; index2++) {
let item1 = selectedItems[index1];
let item2 = selectedItems[index2];
item1.addRelatedItem(item2);
item2.addRelatedItem(item1);
await item1.save(saveOptions);
await item2.save(saveOptions);
}
}
});
};
this.deleteSelectedCollection = function (deleteItems) {
var collectionTreeRow = this.getCollectionTreeRow();
@ -3664,6 +3689,7 @@ var ZoteroPane = new function () {
'moveToTrash',
'deleteFromLibrary',
'mergeItems',
'relateItems',
'sep4',
'exportItems',
'createBib',
@ -3726,6 +3752,7 @@ var ZoteroPane = new function () {
multiple = '.multiple';
var canMerge = true,
showRelate = true, canRelate = true,
canIndex = true,
canRecognize = true,
canUnrecognize = true,
@ -3733,12 +3760,20 @@ var ZoteroPane = new function () {
var canMarkRead = collectionTreeRow.isFeedsOrFeed();
var markUnread = true;
for (let i = 0; i < items.length; i++) {
let item = items[i];
for (let item of items) {
if (canMerge && (!item.isRegularItem() || item.isFeedItem || collectionTreeRow.isDuplicates())) {
canMerge = false;
}
if (showRelate) {
if (item.isFeedItem) {
showRelate = false;
}
else if (canRelate && items.every(otherItem => otherItem === item || otherItem.relatedItems.includes(item.key))) {
canRelate = false;
}
}
if (canIndex && !((await Zotero.Fulltext.canReindex(item)))) {
canIndex = false;
}
@ -3764,6 +3799,13 @@ var ZoteroPane = new function () {
if (canMerge) {
show.add(m.mergeItems);
}
if (showRelate) {
show.add(m.relateItems);
if (!canRelate) {
disable.add(m.relateItems);
}
}
if (canIndex) {
show.add(m.reindexItem);

View file

@ -986,6 +986,7 @@
<menuitem class="menuitem-iconic zotero-menuitem-move-to-trash" oncommand="ZoteroPane_Local.deleteSelectedItems(true, true);"/>
<menuitem class="menuitem-iconic zotero-menuitem-delete-from-lib" oncommand="ZoteroPane_Local.deleteSelectedItems(false, true)"/>
<menuitem class="menuitem-iconic zotero-menuitem-merge-items" label="&zotero.items.menu.mergeItems;" oncommand="ZoteroPane_Local.mergeSelectedItems();"/>
<menuitem class="menuitem-iconic zotero-menuitem-relate-items" data-l10n-id="item-menu-relate-items" oncommand="ZoteroPane_Local.relateSelectedItems();"/>
<menuseparator/>
<menuitem class="menuitem-iconic zotero-menuitem-export" oncommand="Zotero_File_Interface.exportItems();"/>
<menuitem class="menuitem-iconic zotero-menuitem-create-bibliography" oncommand="Zotero_File_Interface.bibliographyFromItems();"/>

View file

@ -205,6 +205,8 @@ item-menu-add-url =
.label = Web Link
item-menu-change-parent-item =
.label = Change Parent Item…
item-menu-relate-items =
.label = Relate Items
view-online = View Online
item-menu-option-view-online =