Fix item pane buttons after CEification

Fixes #4115
This commit is contained in:
windingwind 2024-05-14 16:55:52 +08:00 committed by Dan Stillman
parent 9a23031c12
commit bc47ee46c8
3 changed files with 37 additions and 22 deletions

View file

@ -254,19 +254,12 @@
* Display buttons at top of item pane depending on context * Display buttons at top of item pane depending on context
*/ */
updateItemPaneButtons() { updateItemPaneButtons() {
let container; let container = this.getCurrentPane();
if (!this.data.length) { if (!this.data.length) {
container.renderCustomHead();
return; return;
} }
else if (this.data.length > 1) {
container = this._messagePane;
}
else if (this.data[0].isNote()) {
container = this._noteEditor;
}
else {
container = this._itemDetails;
}
// My Publications buttons // My Publications buttons
var isPublications = this.collectionTreeRow.isPublications(); var isPublications = this.collectionTreeRow.isPublications();
@ -303,7 +296,7 @@
renderPublicationsHead(data) { renderPublicationsHead(data) {
let { doc, append } = data; let { doc, append } = data;
let button = doc.createXULElement("button"); let button = doc.createXULElement("button");
button.id = 'zotero-item-pane-my-publications-button'; button.classList.add('item-pane-my-publications-button');
let hiddenItemsSelected = this.data.some(item => !item.inPublications); let hiddenItemsSelected = this.data.some(item => !item.inPublications);
let str, onclick; let str, onclick;
@ -323,14 +316,14 @@
renderTrashHead(data) { renderTrashHead(data) {
let { doc, append } = data; let { doc, append } = data;
let restoreButton = doc.createXULElement("button"); let restoreButton = doc.createXULElement("button");
restoreButton.id = "zotero-item-restore-button"; restoreButton.classList.add("item-restore-button");
restoreButton.dataset.l10nId = "menu-restoreToLibrary"; restoreButton.dataset.l10nId = "menu-restoreToLibrary";
restoreButton.addEventListener("command", () => { restoreButton.addEventListener("command", () => {
ZoteroPane.restoreSelectedItems(); ZoteroPane.restoreSelectedItems();
}); });
let deleteButton = doc.createXULElement("button"); let deleteButton = doc.createXULElement("button");
deleteButton.id = "zotero-item-delete-button"; deleteButton.classList.add("item-delete-button");
deleteButton.dataset.l10nId = "menu-deletePermanently"; deleteButton.dataset.l10nId = "menu-deletePermanently";
deleteButton.addEventListener("command", () => { deleteButton.addEventListener("command", () => {
ZoteroPane.deleteSelectedItems(); ZoteroPane.deleteSelectedItems();
@ -343,13 +336,13 @@
let { doc, append } = data; let { doc, append } = data;
let toggleReadButton = doc.createXULElement("button"); let toggleReadButton = doc.createXULElement("button");
toggleReadButton.id = "zotero-feed-item-toggleRead-button"; toggleReadButton.classList.add("feed-item-toggleRead-button");
toggleReadButton.addEventListener("command", () => { toggleReadButton.addEventListener("command", () => {
ZoteroPane.toggleSelectedItemsRead(); ZoteroPane.toggleSelectedItemsRead();
}); });
let addToButton = document.createElement("button", { is: "split-menu-button" }); let addToButton = document.createElement("button", { is: "split-menu-button" });
addToButton.id = "zotero-feed-item-addTo-button"; addToButton.classList.add("feed-item-addTo-button");
addToButton.setAttribute("popup", "zotero-item-addTo-menu"); addToButton.setAttribute("popup", "zotero-item-addTo-menu");
addToButton.addEventListener("command", () => this.translateSelectedItems()); addToButton.addEventListener("command", () => this.translateSelectedItems());
@ -371,7 +364,7 @@
} }
setReadLabel(isRead) { setReadLabel(isRead) {
var elem = document.getElementById('zotero-feed-item-toggleRead-button'); var elem = this.getCurrentPane().querySelector('.feed-item-toggleRead-button');
var label = Zotero.getString('pane.item.' + (isRead ? 'markAsUnread' : 'markAsRead')); var label = Zotero.getString('pane.item.' + (isRead ? 'markAsUnread' : 'markAsRead'));
elem.label = label; elem.label = label;
@ -389,7 +382,7 @@
} }
buildTranslateSelectContextMenu(event) { buildTranslateSelectContextMenu(event) {
var menu = document.getElementById('zotero-item-addTo-menu'); var menu = document.querySelector('#zotero-item-addTo-menu');
// Don't trigger rebuilding on nested popupmenu open/close // Don't trigger rebuilding on nested popupmenu open/close
if (event.target != menu) { if (event.target != menu) {
return; return;
@ -442,7 +435,7 @@
setTranslateButton() { setTranslateButton() {
if (!this._translationTarget) return; if (!this._translationTarget) return;
var label = Zotero.getString('pane.item.addTo', this._translationTarget.name); var label = Zotero.getString('pane.item.addTo', this._translationTarget.name);
var elem = document.getElementById('zotero-feed-item-addTo-button'); var elem = this.getCurrentPane().querySelector('.feed-item-addTo-button');
elem.label = label; elem.label = label;
var key = Zotero.Keys.getKeyForCommand('saveToZotero'); var key = Zotero.Keys.getKeyForCommand('saveToZotero');
@ -461,6 +454,28 @@
this.setTranslateButton(); this.setTranslateButton();
} }
getCurrentPane(mode = undefined) {
if (!mode) {
// Guess a mode from the current data
if (!this.data.length || this.data.length > 1) {
mode = "message";
}
else if (this.data[0].isNote()) {
mode = "note";
}
else {
mode = "item";
}
}
let map = {
message: "_messagePane",
item: "_itemDetails",
note: "_noteEditor",
duplicates: "_duplicatesPane",
};
return this[map[mode]];
}
static get observedAttributes() { static get observedAttributes() {
return ['collapsed', 'width', 'height', 'view-type']; return ['collapsed', 'width', 'height', 'view-type'];
} }

View file

@ -1145,12 +1145,12 @@ describe("Item pane", function () {
item.isRead = true; item.isRead = true;
yield item.saveTx(); yield item.saveTx();
let button = doc.getElementById('zotero-feed-item-toggleRead-button'); let button = ZoteroPane.itemPane.getCurrentPane().querySelector('.feed-item-toggleRead-button');
assert.equal(button.label, Zotero.getString('pane.item.markAsUnread')); assert.equal(button.label, Zotero.getString('pane.item.markAsUnread'));
yield item.toggleRead(false); yield item.toggleRead(false);
// Button is re-created // Button is re-created
button = doc.getElementById('zotero-feed-item-toggleRead-button'); button = ZoteroPane.itemPane.getCurrentPane().querySelector('.feed-item-toggleRead-button');
assert.equal(button.label, Zotero.getString('pane.item.markAsRead')); assert.equal(button.label, Zotero.getString('pane.item.markAsRead'));
}); });
}); });

View file

@ -856,7 +856,7 @@ describe("Zotero.ItemTree", function() {
yield itemsView.selectItem(attachment.id); yield itemsView.selectItem(attachment.id);
yield Zotero.Promise.delay(); yield Zotero.Promise.delay();
var box = win.document.getElementById('zotero-item-pane-my-publications-button'); var box = zp.itemPane.getCurrentPane().querySelector('.item-pane-my-publications-button');
assert.isFalse(box.hidden); assert.isFalse(box.hidden);
}); });
@ -872,7 +872,7 @@ describe("Zotero.ItemTree", function() {
yield itemsView.selectItem(attachment.id); yield itemsView.selectItem(attachment.id);
var box = win.document.getElementById('zotero-item-pane-my-publications-button'); var box = zp.itemPane.getCurrentPane().querySelector('.item-pane-my-publications-button');
// box is not created if it shouldn't show // box is not created if it shouldn't show
assert.isNull(box); assert.isNull(box);
}); });