www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

commit 5598cac35999ddd3541f9f390596c84b80713dff
parent 06d93e4d61d5d86728fc0237f4812b1fceae891b
Author: Dan Stillman <dstillman@zotero.org>
Date:   Tue, 29 Mar 2011 12:06:37 +0000

Fix closing of parent items on various edits


Diffstat:
Mchrome/content/zotero/xpcom/itemTreeView.js | 60+++++++++++++++++++++++++++++++++---------------------------
1 file changed, 33 insertions(+), 27 deletions(-)

diff --git a/chrome/content/zotero/xpcom/itemTreeView.js b/chrome/content/zotero/xpcom/itemTreeView.js @@ -1188,19 +1188,10 @@ Zotero.ItemTreeView.prototype.sort = function(itemID) } // Need to close all containers before sorting - var openRows = new Array(); - for (var i=0; i<this._dataItems.length; i++) { - if(this.isContainer(i) && this.isContainerOpen(i)) - { - openRows.push(this._getItemAtRow(i).ref.id); - this.toggleOpenState(i, true); - } - } - this._refreshHashMap(); + var openItemIDs = this.saveOpenState(true); // Single-row sort if (itemID) { - this._refreshHashMap(); var row = this._itemRowMap[itemID]; for (var i=0, len=this._dataItems.length; i<len; i++) { if (i == row) { @@ -1241,12 +1232,9 @@ Zotero.ItemTreeView.prototype.sort = function(itemID) } } - // Reopen closed containers - for (var i = 0; i < openRows.length; i++) { - this.toggleOpenState(this._itemRowMap[openRows[i]], true); - } - this._refreshHashMap(); + + this.rememberOpenState(openItemIDs); } //////////////////////////////////////////////////////////////////////////////// @@ -1585,7 +1573,22 @@ Zotero.ItemTreeView.prototype.selectSearchMatches = function () { } -Zotero.ItemTreeView.prototype.saveOpenState = function() { +Zotero.ItemTreeView.prototype.saveOpenState = function(close) { + var itemIDs = []; + for (var i=0; i<this._dataItems.length; i++) { + if (this.isContainer(i) && this.isContainerOpen(i)) { + itemIDs.push(this._getItemAtRow(i).ref.id); + if (close) { + this.toggleOpenState(i, true); + } + } + } + if (close) { + this._refreshHashMap(); + } + return itemIDs; + + var ids = []; for (var i=0, len=this.rowCount; i<len; i++) { if (this.isContainer(i) && this.isContainerOpen(i)) { @@ -1596,21 +1599,24 @@ Zotero.ItemTreeView.prototype.saveOpenState = function() { } -Zotero.ItemTreeView.prototype.rememberOpenState = function(ids) { - var hash = {}; - for each(var id in ids) { - hash[id] = true; +Zotero.ItemTreeView.prototype.rememberOpenState = function(itemIDs) { + var rowsToOpen = []; + for each(var id in itemIDs) { + var row = this._itemRowMap[id]; + // Item may not still exist + if (!row) { + continue; + } + rowsToOpen.push(row); } - + rowsToOpen.sort(); this._treebox.beginUpdateBatch(); - for (var i=0; i<this.rowCount; i++) { - var id = this._getItemAtRow(i).ref.id; - if (hash[id] && this.isContainer(i) && this.isContainerOpen(i)) { - this.toggleOpenState(i, true); - } + // Reopen from bottom up + for (var i=rowsToOpen.length-1; i>=0; i--) { + this.toggleOpenState(rowsToOpen[i], true); } - this._refreshHashMap(); this._treebox.endUpdateBatch(); + this._refreshHashMap(); }