www

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

commit 72ca609b52ebe511ccb054d499a2dd476274558f
parent 9b23e1ecdcac7c83efc8e2cd8d7a5a410201b8f0
Author: Dan Stillman <dstillman@zotero.org>
Date:   Thu, 29 Jun 2006 05:18:55 +0000

Addresses #87, Add fromArray() and toArray() methods to Item objects

Changed _getDescendents to take _nested_ flag, be extensible later for smart folders and other types, and include the collection name in the dataset

Added Collection.toArray()

Sample array:

'0' ...
	'id' => "13"
	'type' => "item"
'1' ...
	'id' => "14"
	'type' => "item"
'2' ...
	'id' => "7373"
	'name' => "A Sub-project!"
	'type' => "collection"
	'children' ...
		'0' ...
			'id' => "15"
			'type' => "item"
		'1' ...
			'id' => "9233"
			'name' => "A Sub-sub-project!"
			'type' => "collection"
			'children' ...




Diffstat:
Mchrome/chromeFiles/content/scholar/xpcom/data_access.js | 72++++++++++++++++++++++++++++++++++++++++++++----------------------------
1 file changed, 44 insertions(+), 28 deletions(-)

diff --git a/chrome/chromeFiles/content/scholar/xpcom/data_access.js b/chrome/chromeFiles/content/scholar/xpcom/data_access.js @@ -1791,10 +1791,7 @@ Scholar.Collection.prototype.hasItem = function(itemID){ Scholar.Collection.prototype.hasDescendent = function(type, id){ var descendents = this._getDescendents(); for (var i=0, len=descendents.length; i<len; i++){ - // TODO: fix this to work with smart collections - if (((type=='collection' && descendents[i]['isCollection']) || - (type=='item' && !descendents[i]['isCollection'])) - && id==descendents[i]['id']){ + if (descendents[i]['type']==type && descendents[i]['id']==id){ return true; } } @@ -1813,7 +1810,7 @@ Scholar.Collection.prototype.erase = function(deleteItems){ for(var i=0, len=descendents.length; i<len; i++){ // Descendent collections - if (descendents[i]['isCollection']){ + if (descendents[i]['type']=='collection'){ collections.push(descendents[i]['id']); } // Descendent items @@ -1851,6 +1848,11 @@ Scholar.Collection.prototype.isCollection = function(){ } +Scholar.Collection.prototype.toArray = function(){ + return this._getDescendents(true); +} + + Scholar.Collection.prototype._loadChildItems = function(){ this._childItems = new Scholar.Hash(); @@ -1869,36 +1871,50 @@ Scholar.Collection.prototype._loadChildItems = function(){ /** -* Returns an array of descendent collections and items (rows of 'id' and 'isCollection') +* Returns an array of descendent collections and items +* (rows of 'id', 'type' ('item' or 'collection'), and, if collection, 'name') +* +* nested: Return multidimensional array with 'children' nodes instead of flat array **/ -Scholar.Collection.prototype._getDescendents = function(){ +Scholar.Collection.prototype._getDescendents = function(nested){ var toReturn = new Array(); + // 0 == collection + // 1 == item var children = Scholar.DB.query('SELECT collectionID AS id, ' - + '1 AS isCollection FROM collections ' - + 'WHERE parentCollectionID=' + this._id - + ' UNION SELECT itemID AS id, 0 AS isCollection FROM collectionItems ' - + 'WHERE collectionID=' + this._id); + + "0 AS type, collectionName AS collectionName " + + 'FROM collections WHERE parentCollectionID=' + this._id + + ' UNION SELECT itemID AS id, 1 AS type, NULL AS collectionName ' + + 'FROM collectionItems WHERE collectionID=' + this._id); for(var i=0, len=children.length; i<len; i++){ - if (parseInt(children[i]['isCollection'])){ - toReturn.push({ - id: children[i]['id'], - isCollection: true - }); - - var descendents = - Scholar.Collections.get(children[i]['id'])._getDescendents(); + switch (children[i]['type']){ + case 0: + toReturn.push({ + id: children[i]['id'], + name: children[i]['collectionName'], + type: 'collection' + }); + + var descendents = + Scholar.Collections.get(children[i]['id'])._getDescendents(nested); + + if (nested){ + toReturn[toReturn.length-1]['children'] = descendents; + } + else { + for(var j=0, len2=descendents.length; j<len2; j++){ + toReturn.push(descendents[j]); + } + } + break; - for(var j=0, len2=descendents.length; j<len2; j++){ - toReturn.push(descendents[j]); - } - } - else { - toReturn.push({ - id: children[i]['id'], - isCollection: false - }); + case 1: + toReturn.push({ + id: children[i]['id'], + type: 'item' + }); + break; } }