From 6b8e5bafc671f1bff9ebf09c8252b4e968c13687 Mon Sep 17 00:00:00 2001 From: Dan Stillman Date: Sun, 1 Nov 2015 03:36:23 -0500 Subject: [PATCH] Don't show deleted items outside of trash --- chrome/content/zotero/xpcom/itemTreeView.js | 1 + chrome/content/zotero/xpcom/libraryTreeView.js | 8 +++++--- chrome/content/zotero/xpcom/search.js | 8 +++++--- test/tests/itemTreeViewTest.js | 8 ++++++++ 4 files changed, 19 insertions(+), 6 deletions(-) diff --git a/chrome/content/zotero/xpcom/itemTreeView.js b/chrome/content/zotero/xpcom/itemTreeView.js index e3d66093a2..0cecfbc7ad 100644 --- a/chrome/content/zotero/xpcom/itemTreeView.js +++ b/chrome/content/zotero/xpcom/itemTreeView.js @@ -3083,6 +3083,7 @@ Zotero.ItemTreeView.prototype.drop = Zotero.Promise.coroutine(function* (row, or //////////////////////////////////////////////////////////////////////////////// Zotero.ItemTreeView.prototype.isSeparator = function(row) { return false; } +Zotero.ItemTreeView.prototype.isSelectable = function (row, col) { return true; } Zotero.ItemTreeView.prototype.getRowProperties = function(row, prop) {} Zotero.ItemTreeView.prototype.getColumnProperties = function(col, prop) {} Zotero.ItemTreeView.prototype.getCellProperties = function(row, col, prop) { diff --git a/chrome/content/zotero/xpcom/libraryTreeView.js b/chrome/content/zotero/xpcom/libraryTreeView.js index 3f456b0886..18e96855ab 100644 --- a/chrome/content/zotero/xpcom/libraryTreeView.js +++ b/chrome/content/zotero/xpcom/libraryTreeView.js @@ -82,9 +82,11 @@ Zotero.LibraryTreeView.prototype = { * @return {Integer} */ getRowIndexByID: function (id) { - // FIXME: Should work for itemIDs too - var type = id[0]; - id = ('' + id).substr(1); + var type = ""; + if (this.type != 'item') { + var type = id[0]; + id = ('' + id).substr(1); + } return this._rowMap[type + id]; }, diff --git a/chrome/content/zotero/xpcom/search.js b/chrome/content/zotero/xpcom/search.js index 847d08a973..228c7cbbd1 100644 --- a/chrome/content/zotero/xpcom/search.js +++ b/chrome/content/zotero/xpcom/search.js @@ -1051,12 +1051,14 @@ Zotero.Search.prototype._buildQuery = Zotero.Promise.coroutine(function* () { } // Exclude deleted items (and their child items) by default + let not = deleted ? "" : "NOT "; + let op = deleted ? "OR" : "AND"; sql += " WHERE (" - + "itemID " + (deleted ? "" : "NOT ") + "IN (SELECT itemID FROM deletedItems) " - + "OR itemID " + (deleted ? "" : "NOT ") + "IN (SELECT itemID FROM itemNotes " + + `itemID ${not} IN (SELECT itemID FROM deletedItems) ` + + `${op} itemID ${not}IN (SELECT itemID FROM itemNotes ` + "WHERE parentItemID IS NOT NULL AND " + "parentItemID IN (SELECT itemID FROM deletedItems)) " - + "OR itemID " + (deleted ? "" : "NOT ") + "IN (SELECT itemID FROM itemAttachments " + + `${op} itemID ${not}IN (SELECT itemID FROM itemAttachments ` + "WHERE parentItemID IS NOT NULL AND " + "parentItemID IN (SELECT itemID FROM deletedItems))" + ")"; diff --git a/test/tests/itemTreeViewTest.js b/test/tests/itemTreeViewTest.js index 5b77790018..826f03826e 100644 --- a/test/tests/itemTreeViewTest.js +++ b/test/tests/itemTreeViewTest.js @@ -20,6 +20,14 @@ describe("Zotero.ItemTreeView", function() { win.close(); }); + it("shouldn't show items in trash", function* () { + var item = yield createDataObject('item', { title: "foo" }); + var itemID = item.id; + item.deleted = true; + yield item.saveTx(); + assert.notOk(itemsView.getRowIndexByID(itemID)); + }) + describe("#selectItem()", function () { /** * Make sure that selectItem() doesn't hang if the pane's item-select handler is never