Add "Delete Collection and Items..." context-menu option

Also update collection/search deletion dialogs with better button text and no more "[JavaScript Application]"
This commit is contained in:
Dan Stillman 2013-03-16 22:55:50 -04:00
parent 5f283a6b7f
commit 022ee4481b
5 changed files with 73 additions and 28 deletions

View file

@ -814,7 +814,7 @@ Zotero.CollectionTreeView.prototype.getLastViewedRow = function () {
/*
* Delete the selection
*/
Zotero.CollectionTreeView.prototype.deleteSelection = function()
Zotero.CollectionTreeView.prototype.deleteSelection = function(deleteItems)
{
if(this.selection.count == 0)
return;
@ -842,14 +842,12 @@ Zotero.CollectionTreeView.prototype.deleteSelection = function()
for (var i=0; i<rows.length; i++)
{
//erase collection from DB:
var group = this._getItemAtRow(rows[i]-i);
if(group.isCollection())
{
group.ref.erase();
var itemGroup = this._getItemAtRow(rows[i]-i);
if (itemGroup.isCollection()) {
itemGroup.ref.erase(deleteItems);
}
else if(group.isSearch())
{
Zotero.Searches.erase(group.ref['id']);
else if (itemGroup.isSearch()) {
Zotero.Searches.erase(itemGroup.ref.id);
}
}
this._treebox.endUpdateBatch();

View file

@ -961,7 +961,7 @@ Zotero.Collection.prototype.erase = function(deleteItems) {
}
}
if (del.length) {
Zotero.Items.erase(del);
Zotero.Items.trash(del);
}
// Remove relations

View file

@ -663,7 +663,8 @@ var ZoteroPane = new function()
if (from == 'zotero-collections-tree') {
if ((event.keyCode == event.DOM_VK_BACK_SPACE && Zotero.isMac) ||
event.keyCode == event.DOM_VK_DELETE) {
ZoteroPane_Local.deleteSelectedCollection();
var deleteItems = event.metaKey || (!Zotero.isMac && event.shiftKey);
ZoteroPane_Local.deleteSelectedCollection(deleteItems);
event.preventDefault();
return;
}
@ -673,7 +674,7 @@ var ZoteroPane = new function()
event.keyCode == event.DOM_VK_DELETE) {
// If Cmd/Ctrl delete, use forced mode, which does different
// things depending on the context
var force = event.metaKey || (!Zotero.isMac && event.ctrlKey);
var force = event.metaKey || (!Zotero.isMac && event.shiftKey);
ZoteroPane_Local.deleteSelectedItems(force);
event.preventDefault();
return;
@ -1587,7 +1588,7 @@ var ZoteroPane = new function()
}
this.deleteSelectedCollection = function () {
this.deleteSelectedCollection = function (deleteItems) {
var itemGroup = this.getItemGroup();
// Remove virtual duplicates collection
@ -1606,18 +1607,52 @@ var ZoteroPane = new function()
return;
}
var ps = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
.getService(Components.interfaces.nsIPromptService);
buttonFlags = ps.BUTTON_POS_0 * ps.BUTTON_TITLE_IS_STRING
+ ps.BUTTON_POS_1 * ps.BUTTON_TITLE_CANCEL;
if (this.collectionsView.selection.count == 1) {
if (itemGroup.isCollection())
{
if (confirm(Zotero.getString('pane.collections.delete')))
{
this.collectionsView.deleteSelection();
if (deleteItems) {
var index = ps.confirmEx(
null,
Zotero.getString('pane.collections.deleteWithItems.title'),
Zotero.getString('pane.collections.deleteWithItems'),
buttonFlags,
Zotero.getString('pane.collections.deleteWithItems.title'),
"", "", "", {}
);
}
else {
var index = ps.confirmEx(
null,
Zotero.getString('pane.collections.delete.title'),
Zotero.getString('pane.collections.delete')
+ "\n\n"
+ Zotero.getString('pane.collections.delete.keepItems'),
buttonFlags,
Zotero.getString('pane.collections.delete.title'),
"", "", "", {}
);
}
if (index == 0) {
this.collectionsView.deleteSelection(deleteItems);
}
}
else if (itemGroup.isSearch())
{
if (confirm(Zotero.getString('pane.collections.deleteSearch')))
{
var index = ps.confirmEx(
null,
Zotero.getString('pane.collections.deleteSearch.title'),
Zotero.getString('pane.collections.deleteSearch'),
buttonFlags,
Zotero.getString('pane.collections.deleteSearch.title'),
"", "", "", {}
);
if (index == 0) {
this.collectionsView.deleteSelection();
}
}
@ -1962,7 +1997,8 @@ var ZoteroPane = new function()
"showDuplicates",
"showUnfiled",
"editSelectedCollection",
"removeCollection",
"deleteCollection",
"deleteCollectionAndItems",
"sep2",
"exportCollection",
"createBibCollection",
@ -1992,7 +2028,8 @@ var ZoteroPane = new function()
m.newSubcollection,
m.sep1,
m.editSelectedCollection,
m.removeCollection,
m.deleteCollection,
m.deleteCollectionAndItems,
m.sep2,
m.exportCollection,
m.createBibCollection,
@ -2010,7 +2047,8 @@ var ZoteroPane = new function()
// Adjust labels
menu.childNodes[m.editSelectedCollection].setAttribute('label', Zotero.getString('pane.collections.menu.rename.collection'));
menu.childNodes[m.removeCollection].setAttribute('label', Zotero.getString('pane.collections.menu.remove.collection'));
menu.childNodes[m.deleteCollection].setAttribute('label', Zotero.getString('pane.collections.menu.delete.collection'));
menu.childNodes[m.deleteCollectionAndItems].setAttribute('label', Zotero.getString('pane.collections.menu.delete.collectionAndItems'));
menu.childNodes[m.exportCollection].setAttribute('label', Zotero.getString('pane.collections.menu.export.collection'));
menu.childNodes[m.createBibCollection].setAttribute('label', Zotero.getString('pane.collections.menu.createBib.collection'));
menu.childNodes[m.loadReport].setAttribute('label', Zotero.getString('pane.collections.menu.generateReport.collection'));
@ -2018,14 +2056,14 @@ var ZoteroPane = new function()
else if (itemGroup.isSearch()) {
show = [
m.editSelectedCollection,
m.removeCollection,
m.deleteCollection,
m.sep2,
m.exportCollection,
m.createBibCollection,
m.loadReport
];
menu.childNodes[m.removeCollection].setAttribute('label', Zotero.getString('pane.collections.menu.remove.savedSearch'));
menu.childNodes[m.deleteCollection].setAttribute('label', Zotero.getString('pane.collections.menu.delete.savedSearch'));
var s = [m.exportCollection, m.createBibCollection, m.loadReport];
if (!this.itemsView.rowCount) {
@ -2046,10 +2084,10 @@ var ZoteroPane = new function()
}
else if (itemGroup.isDuplicates() || itemGroup.isUnfiled()) {
show = [
m.removeCollection
m.deleteCollection
];
menu.childNodes[m.removeCollection].setAttribute('label', Zotero.getString('general.remove'));
menu.childNodes[m.deleteCollection].setAttribute('label', Zotero.getString('general.remove'));
}
else if (itemGroup.isHeader()) {
if (itemGroup.ref.id == 'commons-header') {
@ -2068,7 +2106,7 @@ var ZoteroPane = new function()
// Disable some actions if user doesn't have write access
//
// Some actions are disabled via their commands in onCollectionSelected()
var s = [m.newSubcollection, m.editSelectedCollection, m.removeCollection];
var s = [m.newSubcollection, m.editSelectedCollection, m.deleteCollection, m.deleteCollectionAndItems];
if (itemGroup.isWithinGroup() && !itemGroup.editable && !itemGroup.isDuplicates() && !itemGroup.isUnfiled()) {
disable = disable.concat(s);
}

View file

@ -245,6 +245,7 @@
<menuitem label="&zotero.collections.showUnfiledItems;" oncommand="ZoteroPane_Local.setVirtual(ZoteroPane_Local.getSelectedLibraryID(), 'unfiled', true)"/>
<menuitem oncommand="ZoteroPane_Local.editSelectedCollection();"/>
<menuitem oncommand="ZoteroPane_Local.deleteSelectedCollection();"/>
<menuitem oncommand="ZoteroPane_Local.deleteSelectedCollection(true);"/>
<menuseparator/>
<menuitem oncommand="Zotero_File_Interface.exportCollection();"/>
<menuitem oncommand="Zotero_File_Interface.bibliographyFromCollection();"/>

View file

@ -34,6 +34,7 @@ general.permissionDenied = Permission Denied
general.character.singular = character
general.character.plural = characters
general.create = Create
general.delete = Delete
general.seeForMoreInformation = See %S for more information.
general.enable = Enable
general.disable = Disable
@ -132,8 +133,14 @@ date.relative.daysAgo.multiple = %S days ago
date.relative.yearsAgo.one = 1 year ago
date.relative.yearsAgo.multiple = %S years ago
pane.collections.delete.title = Delete Collection
pane.collections.delete = Are you sure you want to delete the selected collection?
pane.collections.deleteSearch = Are you sure you want to delete the selected search?
pane.collections.delete.keepItems = Items within this collection will not be deleted.
pane.collections.deleteWithItems.title = Delete Collection and Items
pane.collections.deleteWithItems = Are you sure you want to delete the selected collection and move all items within it to the Trash?
pane.collections.deleteSearch.title = Delete Search
pane.collections.deleteSearch = Are you sure you want to delete the selected search?
pane.collections.emptyTrash = Are you sure you want to permanently remove items in the Trash?
pane.collections.newCollection = New Collection
pane.collections.name = Enter a name for this collection:
@ -149,8 +156,9 @@ pane.collections.duplicate = Duplicate Items
pane.collections.menu.rename.collection = Rename Collection…
pane.collections.menu.edit.savedSearch = Edit Saved Search
pane.collections.menu.remove.collection = Remove Collection…
pane.collections.menu.remove.savedSearch = Remove Saved Search…
pane.collections.menu.delete.collection = Delete Collection…
pane.collections.menu.delete.collectionAndItems = Delete Collection and Items…
pane.collections.menu.delete.savedSearch = Delete Saved Search…
pane.collections.menu.export.collection = Export Collection…
pane.collections.menu.export.savedSearch = Export Saved Search…
pane.collections.menu.createBib.collection = Create Bibliography From Collection…