diff --git a/chrome/content/zotero/xpcom/data_access.js b/chrome/content/zotero/xpcom/data_access.js index ed121ab179..bf8ed6e950 100644 --- a/chrome/content/zotero/xpcom/data_access.js +++ b/chrome/content/zotero/xpcom/data_access.js @@ -1828,9 +1828,7 @@ Zotero.Item.prototype.erase = function(deleteChildren){ } // If we're not in the middle of a larger commit, trigger the notifier now - if (!Zotero.DB.transactionInProgress()){ - Zotero.Notifier.trigger('delete', 'item', this.getID()); - } + Zotero.Notifier.trigger('delete', 'item', this.getID()); } @@ -2178,12 +2176,27 @@ Zotero.Items = new function(){ /** - * Delete item from database and clear from internal array + * Delete item(s) from database and clear from internal array + * + * If _eraseChildren_ is true, erase child items as well **/ - function erase(id){ - var obj = this.get(id); - obj.erase(); // calls unload() - obj = undefined; + function erase(ids, eraseChildren){ + var unlock = Zotero.Notifier.begin(true); + try { + for each(var id in ids) { + var item = this.get(id); + if (!item) { + Zotero.debug('Item ' + id + ' does not exist in Items.erase()!', 1); + Zotero.Notifier.trigger('item', 'delete', id); + continue; + } + item.erase(eraseChildren); // calls unload() + item = undefined; + } + } + finally { + Zotero.Notifier.commit(unlock); + } } diff --git a/chrome/content/zotero/xpcom/itemTreeView.js b/chrome/content/zotero/xpcom/itemTreeView.js index aaf1ab13d8..866440af80 100644 --- a/chrome/content/zotero/xpcom/itemTreeView.js +++ b/chrome/content/zotero/xpcom/itemTreeView.js @@ -119,7 +119,11 @@ Zotero.ItemTreeView.prototype.notify = function(action, type, ids) { if(action == 'delete' || !this._itemGroup.ref.hasItem(ids[i])) { - rows.push(this._itemRowMap[ids[i]]); + // Row might already be gone (e.g. if this is a child and + // 'modify' was sent to parent) + if (this._itemRowMap[ids[i]] != undefined) { + rows.push(this._itemRowMap[ids[i]]); + } } } @@ -469,12 +473,14 @@ Zotero.ItemTreeView.prototype.toggleOpenState = function(row) else if(notes) newRows = notes; - newRows = Zotero.Items.get(newRows); - - for(var i = 0; i < newRows.length; i++) - { - count++; - this._showItem(new Zotero.ItemTreeView.TreeRow(newRows[i],thisLevel+1,false), row+i+1); //item ref, before row + if (newRows) { + newRows = Zotero.Items.get(newRows); + + for(var i = 0; i < newRows.length; i++) + { + count++; + this._showItem(new Zotero.ItemTreeView.TreeRow(newRows[i], thisLevel + 1, false), row + i + 1); // item ref, before row + } } } @@ -655,24 +661,27 @@ Zotero.ItemTreeView.prototype.deleteSelection = function(eraseChildren, force) this._refreshHashMap(); //create an array of selected items - var items = new Array(); - var start = new Object(); - var end = new Object(); + var ids = []; + var start = {}; + var end = {}; for (var i=0, len=this.selection.getRangeCount(); i