Fix collection-menu selection via right-click->drag->release or keyboard
This commit is contained in:
parent
aad12db2ff
commit
02774ac6fe
2 changed files with 131 additions and 124 deletions
|
@ -2345,127 +2345,127 @@ var ZoteroPane = new function()
|
|||
}
|
||||
|
||||
|
||||
// menuitem configuration
|
||||
//
|
||||
// This has to be kept in sync with zotero-collectionmenu in zoteroPane.xul. We could do this
|
||||
// entirely in JS, but various localized strings are only in zotero.dtd, and they're used in
|
||||
// standalone.xul as well, so for now they have to remain as XML entities.
|
||||
var _collectionContextMenuOptions = [
|
||||
{
|
||||
id: "sync",
|
||||
label: Zotero.getString('sync.sync'),
|
||||
oncommand: () => {
|
||||
Zotero.Sync.Runner.sync({
|
||||
libraries: [libraryID],
|
||||
});
|
||||
}
|
||||
},
|
||||
{
|
||||
id: "sep1",
|
||||
},
|
||||
{
|
||||
id: "newCollection",
|
||||
command: "cmd_zotero_newCollection"
|
||||
},
|
||||
{
|
||||
id: "newSavedSearch",
|
||||
command: "cmd_zotero_newSavedSearch"
|
||||
},
|
||||
{
|
||||
id: "newSubcollection",
|
||||
oncommand: () => {
|
||||
this.newCollection(this.getSelectedCollection().key);
|
||||
}
|
||||
},
|
||||
{
|
||||
id: "refreshFeed",
|
||||
oncommand: () => this.refreshFeed()
|
||||
},
|
||||
{
|
||||
id: "sep2",
|
||||
},
|
||||
{
|
||||
id: "showDuplicates",
|
||||
oncommand: () => {
|
||||
this.setVirtual(libraryID, 'duplicates', true);
|
||||
}
|
||||
},
|
||||
{
|
||||
id: "showUnfiled",
|
||||
oncommand: () => {
|
||||
this.setVirtual(libraryID, 'unfiled', true);
|
||||
}
|
||||
},
|
||||
{
|
||||
id: "editSelectedCollection",
|
||||
oncommand: () => this.editSelectedCollection()
|
||||
},
|
||||
{
|
||||
id: "markReadFeed",
|
||||
oncommand: () => this.markFeedRead()
|
||||
},
|
||||
{
|
||||
id: "editSelectedFeed",
|
||||
oncommand: () => this.editSelectedFeed()
|
||||
},
|
||||
{
|
||||
id: "deleteCollection",
|
||||
oncommand: () => this.deleteSelectedCollection()
|
||||
},
|
||||
{
|
||||
id: "deleteCollectionAndItems",
|
||||
oncommand: () => this.deleteSelectedCollection(true)
|
||||
},
|
||||
{
|
||||
id: "sep3",
|
||||
},
|
||||
{
|
||||
id: "exportCollection",
|
||||
oncommand: () => Zotero_File_Interface.exportCollection()
|
||||
},
|
||||
{
|
||||
id: "createBibCollection",
|
||||
oncommand: () => Zotero_File_Interface.bibliographyFromCollection()
|
||||
},
|
||||
{
|
||||
id: "exportFile",
|
||||
oncommand: () => Zotero_File_Interface.exportFile()
|
||||
},
|
||||
{
|
||||
id: "loadReport",
|
||||
oncommand: event => Zotero_Report_Interface.loadCollectionReport(event)
|
||||
},
|
||||
{
|
||||
id: "emptyTrash",
|
||||
oncommand: () => this.emptyTrash()
|
||||
},
|
||||
{
|
||||
id: "removeLibrary",
|
||||
label: Zotero.getString('pane.collections.menu.remove.library'),
|
||||
oncommand: () => {
|
||||
let library = Zotero.Libraries.get(libraryID);
|
||||
let ps = Services.prompt;
|
||||
let buttonFlags = (ps.BUTTON_POS_0) * (ps.BUTTON_TITLE_IS_STRING)
|
||||
+ (ps.BUTTON_POS_1) * (ps.BUTTON_TITLE_CANCEL);
|
||||
let index = ps.confirmEx(
|
||||
null,
|
||||
Zotero.getString('pane.collections.removeLibrary'),
|
||||
Zotero.getString('pane.collections.removeLibrary.text', library.name),
|
||||
buttonFlags,
|
||||
Zotero.getString('general.remove'),
|
||||
null,
|
||||
null, null, {}
|
||||
);
|
||||
if (index == 0) {
|
||||
library.eraseTx();
|
||||
}
|
||||
}
|
||||
},
|
||||
];
|
||||
|
||||
this.buildCollectionContextMenu = function (noRepeat) {
|
||||
var libraryID = this.getSelectedLibraryID();
|
||||
|
||||
// menuitem configuration
|
||||
//
|
||||
// This has to be kept in sync with zotero-collectionmenu in zoteroPane.xul. We could do this
|
||||
// entirely in JS, but various localized strings are only in zotero.dtd, and they're used in
|
||||
// standalone.xul as well, so for now they have to remain as XML entities.
|
||||
var options = [
|
||||
{
|
||||
id: "sync",
|
||||
label: Zotero.getString('sync.sync'),
|
||||
onclick: () => {
|
||||
Zotero.Sync.Runner.sync({
|
||||
libraries: [libraryID],
|
||||
});
|
||||
}
|
||||
},
|
||||
{
|
||||
id: "sep1",
|
||||
},
|
||||
{
|
||||
id: "newCollection",
|
||||
command: "cmd_zotero_newCollection"
|
||||
},
|
||||
{
|
||||
id: "newSavedSearch",
|
||||
command: "cmd_zotero_newSavedSearch"
|
||||
},
|
||||
{
|
||||
id: "newSubcollection",
|
||||
onclick: () => {
|
||||
this.newCollection(this.getSelectedCollection().key);
|
||||
}
|
||||
},
|
||||
{
|
||||
id: "refreshFeed",
|
||||
onclick: () => this.refreshFeed()
|
||||
},
|
||||
{
|
||||
id: "sep2",
|
||||
},
|
||||
{
|
||||
id: "showDuplicates",
|
||||
onclick: () => {
|
||||
this.setVirtual(libraryID, 'duplicates', true);
|
||||
}
|
||||
},
|
||||
{
|
||||
id: "showUnfiled",
|
||||
onclick: () => {
|
||||
this.setVirtual(libraryID, 'unfiled', true);
|
||||
}
|
||||
},
|
||||
{
|
||||
id: "editSelectedCollection",
|
||||
onclick: () => this.editSelectedCollection()
|
||||
},
|
||||
{
|
||||
id: "markReadFeed",
|
||||
onclick: () => this.markFeedRead()
|
||||
},
|
||||
{
|
||||
id: "editSelectedFeed",
|
||||
onclick: () => this.editSelectedFeed()
|
||||
},
|
||||
{
|
||||
id: "deleteCollection",
|
||||
onclick: () => this.deleteSelectedCollection()
|
||||
},
|
||||
{
|
||||
id: "deleteCollectionAndItems",
|
||||
onclick: () => this.deleteSelectedCollection(true)
|
||||
},
|
||||
{
|
||||
id: "sep3",
|
||||
},
|
||||
{
|
||||
id: "exportCollection",
|
||||
onclick: () => Zotero_File_Interface.exportCollection()
|
||||
},
|
||||
{
|
||||
id: "createBibCollection",
|
||||
onclick: () => Zotero_File_Interface.bibliographyFromCollection()
|
||||
},
|
||||
{
|
||||
id: "exportFile",
|
||||
onclick: () => Zotero_File_Interface.exportFile()
|
||||
},
|
||||
{
|
||||
id: "loadReport",
|
||||
onclick: event => Zotero_Report_Interface.loadCollectionReport(event)
|
||||
},
|
||||
{
|
||||
id: "emptyTrash",
|
||||
onclick: () => this.emptyTrash()
|
||||
},
|
||||
{
|
||||
id: "removeLibrary",
|
||||
label: Zotero.getString('pane.collections.menu.remove.library'),
|
||||
onclick: () => {
|
||||
let library = Zotero.Libraries.get(libraryID);
|
||||
let ps = Services.prompt;
|
||||
let buttonFlags = (ps.BUTTON_POS_0) * (ps.BUTTON_TITLE_IS_STRING)
|
||||
+ (ps.BUTTON_POS_1) * (ps.BUTTON_TITLE_CANCEL);
|
||||
let index = ps.confirmEx(
|
||||
null,
|
||||
Zotero.getString('pane.collections.removeLibrary'),
|
||||
Zotero.getString('pane.collections.removeLibrary.text', library.name),
|
||||
buttonFlags,
|
||||
Zotero.getString('general.remove'),
|
||||
null,
|
||||
null, null, {}
|
||||
);
|
||||
if (index == 0) {
|
||||
library.eraseTx();
|
||||
}
|
||||
}
|
||||
},
|
||||
];
|
||||
|
||||
var options = _collectionContextMenuOptions;
|
||||
|
||||
var collectionTreeRow = this.collectionsView.selectedTreeRow;
|
||||
// This can happen if selection is changing during delayed second call below
|
||||
|
@ -2499,9 +2499,6 @@ var ZoteroPane = new function()
|
|||
if (option.command) {
|
||||
menuitem.setAttribute('command', option.command);
|
||||
}
|
||||
else if (option.onclick) {
|
||||
menuitem.onclick = option.onclick;
|
||||
}
|
||||
}
|
||||
|
||||
// By default things are hidden and visible, so we only need to record
|
||||
|
@ -2659,7 +2656,15 @@ var ZoteroPane = new function()
|
|||
for (let id of disable) {
|
||||
m[id].setAttribute('disabled', true);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
this.onCollectionContextMenuSelect = function (event) {
|
||||
event.stopPropagation();
|
||||
var o = _collectionContextMenuOptions.find(o => o.id == event.target.id)
|
||||
if (o.oncommand) {
|
||||
o.oncommand();
|
||||
}
|
||||
};
|
||||
|
||||
this.buildItemContextMenu = Zotero.Promise.coroutine(function* () {
|
||||
var options = [
|
||||
|
|
|
@ -257,7 +257,9 @@
|
|||
</toolbar>
|
||||
|
||||
<popupset>
|
||||
<menupopup id="zotero-collectionmenu" onpopupshowing="ZoteroPane_Local.buildCollectionContextMenu();">
|
||||
<menupopup id="zotero-collectionmenu"
|
||||
onpopupshowing="ZoteroPane_Local.buildCollectionContextMenu();"
|
||||
oncommand="ZoteroPane.onCollectionContextMenuSelect(event)">
|
||||
<!-- Keep order in sync with buildCollectionContextMenu, which adds additional attributes -->
|
||||
<menuitem class="zotero-menuitem-sync"/>
|
||||
<menuseparator/>
|
||||
|
|
Loading…
Add table
Reference in a new issue