www

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

commit 293f7c6dd42a4f59328617e3c34011aa7b2a754b
parent 973e602cfc9efb5a85f02f73a028bd700129e07e
Author: Dan Stillman <dstillman@zotero.org>
Date:   Thu, 16 Apr 2015 14:02:36 -0400

Zotero.Search.prototype.addCondition() doesn't need to be async

Diffstat:
Mchrome/content/zotero/advancedSearch.js | 4++--
Mchrome/content/zotero/xpcom/api.js | 16++++++++--------
Mchrome/content/zotero/xpcom/collectionTreeView.js | 22+++++++++++-----------
Mchrome/content/zotero/xpcom/data/items.js | 6+++---
Mchrome/content/zotero/xpcom/duplicates.js | 2+-
Mchrome/content/zotero/xpcom/search.js | 76++++++++++++++++++++++++++++++++++++++++++----------------------------------
Mchrome/content/zotero/zoteroPane.js | 8++++----
Mcomponents/zotero-protocol-handler.js | 6+++---
8 files changed, 74 insertions(+), 66 deletions(-)

diff --git a/chrome/content/zotero/advancedSearch.js b/chrome/content/zotero/advancedSearch.js @@ -62,7 +62,7 @@ var ZoteroAdvancedSearch = new function() { ref: _searchBox.search, isSearchMode: function() { return true; }, getItems: Zotero.Promise.coroutine(function* () { - var search = yield _searchBox.search.clone(); + var search = _searchBox.search.clone(); search.libraryID = _libraryID; var ids = yield search.search(); return Zotero.Items.get(ids); @@ -128,7 +128,7 @@ var ZoteroAdvancedSearch = new function() { name.value = untitled; } - var s = yield _searchBox.search.clone(); + var s = _searchBox.search.clone(); s.name = name.value; yield s.save(); diff --git a/chrome/content/zotero/xpcom/api.js b/chrome/content/zotero/xpcom/api.js @@ -78,7 +78,7 @@ Zotero.API = { s2.setScope(s); var groups = Zotero.Groups.getAll(); for each(var group in groups) { - yield s2.addCondition('libraryID', 'isNot', group.libraryID); + s2.addCondition('libraryID', 'isNot', group.libraryID); } var ids = yield s2.search(); break; @@ -90,29 +90,29 @@ Zotero.API = { var s = new Zotero.Search; if (params.libraryID !== undefined) { - yield s.addCondition('libraryID', 'is', params.libraryID); + s.addCondition('libraryID', 'is', params.libraryID); } if (params.objectKey) { - yield s.addCondition('key', 'is', params.objectKey); + s.addCondition('key', 'is', params.objectKey); } else if (params.objectID) { Zotero.debug('adding ' + params.objectID); - yield s.addCondition('itemID', 'is', params.objectID); + s.addCondition('itemID', 'is', params.objectID); } if (params.itemKey) { - yield s.addCondition('blockStart'); + s.addCondition('blockStart'); for (let i=0; i<params.itemKey.length; i++) { let itemKey = params.itemKey[i]; - yield s.addCondition('key', 'is', itemKey); + s.addCondition('key', 'is', itemKey); } - yield s.addCondition('blockEnd'); + s.addCondition('blockEnd'); } // Display all top-level items /*if (params.onlyTopLevel) { - yield s.addCondition('noChildren', 'true'); + s.addCondition('noChildren', 'true'); }*/ var ids = yield s.search(); diff --git a/chrome/content/zotero/xpcom/collectionTreeView.js b/chrome/content/zotero/xpcom/collectionTreeView.js @@ -1054,8 +1054,8 @@ Zotero.CollectionTreeView.prototype._expandRow = Zotero.Promise.coroutine(functi let s = new Zotero.Search; s.libraryID = libraryID; s.name = Zotero.getString('pane.collections.unfiled'); - yield s.addCondition('libraryID', 'is', libraryID); - yield s.addCondition('unfiled', 'true'); + s.addCondition('libraryID', 'is', libraryID); + s.addCondition('unfiled', 'true'); this._addRow(rows, new Zotero.CollectionTreeRow('unfiled', s), level + 1, row + 1 + newRows); newRows++; } @@ -2295,22 +2295,22 @@ Zotero.CollectionTreeRow.prototype.getSearchObject = Zotero.Promise.coroutine(fu } else { var s = new Zotero.Search(); - yield s.addCondition('libraryID', 'is', this.ref.libraryID); + s.addCondition('libraryID', 'is', this.ref.libraryID); // Library root if (this.isLibrary(true)) { - yield s.addCondition('noChildren', 'true'); + s.addCondition('noChildren', 'true'); includeScopeChildren = true; } else if (this.isCollection()) { - yield s.addCondition('noChildren', 'true'); - yield s.addCondition('collectionID', 'is', this.ref.id); + s.addCondition('noChildren', 'true'); + s.addCondition('collectionID', 'is', this.ref.id); if (Zotero.Prefs.get('recursiveCollections')) { - yield s.addCondition('recursive', 'true'); + s.addCondition('recursive', 'true'); } includeScopeChildren = true; } else if (this.isTrash()) { - yield s.addCondition('deleted', 'true'); + s.addCondition('deleted', 'true'); } else { throw new Error('Invalid search mode in Zotero.CollectionTreeRow.getSearchObject()'); @@ -2320,19 +2320,19 @@ Zotero.CollectionTreeRow.prototype.getSearchObject = Zotero.Promise.coroutine(fu // Create the outer (filter) search var s2 = new Zotero.Search(); if (this.isTrash()) { - yield s2.addCondition('deleted', 'true'); + s2.addCondition('deleted', 'true'); } s2.setScope(s, includeScopeChildren); if (this.searchText) { var cond = 'quicksearch-' + Zotero.Prefs.get('search.quicksearch-mode'); - yield s2.addCondition(cond, 'contains', this.searchText); + s2.addCondition(cond, 'contains', this.searchText); } if (this.tags){ for (var tag in this.tags){ if (this.tags[tag]){ - yield s2.addCondition('tag', 'is', tag); + s2.addCondition('tag', 'is', tag); } } } diff --git a/chrome/content/zotero/xpcom/data/items.js b/chrome/content/zotero/xpcom/data/items.js @@ -194,11 +194,11 @@ Zotero.Items = function() { this.apiDataGenerator = function* (params) { Zotero.debug(params); var s = new Zotero.Search; - yield s.addCondition('libraryID', 'is', params.libraryID); + s.addCondition('libraryID', 'is', params.libraryID); if (params.scopeObject == 'collections') { - yield s.addCondition('collection', 'is', params.scopeObjectKey); + s.addCondition('collection', 'is', params.scopeObjectKey); } - yield s.addCondition('title', 'contains', 'test'); + s.addCondition('title', 'contains', 'test'); var ids = yield s.search(); yield '[\n'; diff --git a/chrome/content/zotero/xpcom/duplicates.js b/chrome/content/zotero/xpcom/duplicates.js @@ -67,7 +67,7 @@ Zotero.Duplicates.prototype.getSearchObject = Zotero.Promise.coroutine(function* var s = new Zotero.Search; s.libraryID = this._libraryID; - yield s.addCondition('tempTable', 'is', 'tmpDuplicates'); + s.addCondition('tempTable', 'is', 'tmpDuplicates'); return s; }); diff --git a/chrome/content/zotero/xpcom/search.js b/chrome/content/zotero/xpcom/search.js @@ -282,7 +282,7 @@ Zotero.Search.prototype._finalizeSave = Zotero.Promise.coroutine(function* (env) }); -Zotero.Search.prototype.clone = Zotero.Promise.coroutine(function* (libraryID) { +Zotero.Search.prototype.clone = function (libraryID) { var s = new Zotero.Search(); s.libraryID = libraryID === undefined ? this.libraryID : libraryID; @@ -293,19 +293,19 @@ Zotero.Search.prototype.clone = Zotero.Promise.coroutine(function* (libraryID) { condition.condition + '/' + condition.mode : condition.condition - yield s.addCondition(name, condition.operator, condition.value, + s.addCondition(name, condition.operator, condition.value, condition.required); } return s; -}); +}; -Zotero.Search.prototype.addCondition = Zotero.Promise.coroutine(function* (condition, operator, value, required) { +Zotero.Search.prototype.addCondition = function (condition, operator, value, required) { this._requireData('conditions'); if (!Zotero.SearchConditions.hasOperator(condition, operator)){ - throw ("Invalid operator '" + operator + "' for condition " + condition); + throw new Error("Invalid operator '" + operator + "' for condition " + condition); } // Shortcut to add a condition on every table -- does not return an id @@ -313,71 +313,79 @@ Zotero.Search.prototype.addCondition = Zotero.Promise.coroutine(function* (condi var parts = Zotero.SearchConditions.parseSearchString(value); for each(var part in parts) { - yield this.addCondition('blockStart'); + this.addCondition('blockStart'); // If search string is 8 characters, see if this is a item key if (operator == 'contains' && part.text.length == 8) { - yield this.addCondition('key', 'is', part.text, false); + this.addCondition('key', 'is', part.text, false); } if (condition == 'quicksearch-titleCreatorYear') { - yield this.addCondition('title', operator, part.text, false); - yield this.addCondition('publicationTitle', operator, part.text, false); - yield this.addCondition('shortTitle', operator, part.text, false); - yield this.addCondition('court', operator, part.text, false); - yield this.addCondition('year', operator, part.text, false); + this.addCondition('title', operator, part.text, false); + this.addCondition('publicationTitle', operator, part.text, false); + this.addCondition('shortTitle', operator, part.text, false); + this.addCondition('court', operator, part.text, false); + this.addCondition('year', operator, part.text, false); } else { - yield this.addCondition('field', operator, part.text, false); - yield this.addCondition('tag', operator, part.text, false); - yield this.addCondition('note', operator, part.text, false); + this.addCondition('field', operator, part.text, false); + this.addCondition('tag', operator, part.text, false); + this.addCondition('note', operator, part.text, false); } - yield this.addCondition('creator', operator, part.text, false); + this.addCondition('creator', operator, part.text, false); if (condition == 'quicksearch-everything') { - yield this.addCondition('annotation', operator, part.text, false); + this.addCondition('annotation', operator, part.text, false); if (part.inQuotes) { - yield this.addCondition('fulltextContent', operator, part.text, false); + this.addCondition('fulltextContent', operator, part.text, false); } else { var splits = Zotero.Fulltext.semanticSplitter(part.text); for each(var split in splits) { - yield this.addCondition('fulltextWord', operator, split, false); + this.addCondition('fulltextWord', operator, split, false); } } } - yield this.addCondition('blockEnd'); + this.addCondition('blockEnd'); } if (condition == 'quicksearch-titleCreatorYear') { - yield this.addCondition('noChildren', 'true'); + this.addCondition('noChildren', 'true'); } return false; } - // Shortcut to add a collection + // Shortcut to add a collection (which must be loaded first) else if (condition == 'collectionID') { - var c = yield Zotero.Collections.getAsync(value); - if (!c) { - var msg = "Collection " + value + " not found"; + let [libraryID, key] = Zotero.Collections.getLibraryAndKeyFromID(value); + if (!key) { + let msg = "Collection " + value + " not found"; Zotero.debug(msg, 2); Components.utils.reportError(msg); return; } - return this.addCondition('collection', operator, c.key, required); + if (this.libraryID && libraryID != this.libraryID) { + Zotero.logError(new Error("Collection " + value + " is in different library")); + return; + } + return this.addCondition('collection', operator, key, required); } - // Shortcut to add a saved search + // Shortcut to add a saved search (which must be loaded first) else if (condition == 'savedSearchID') { - var s = yield Zotero.Searches.getAsync(value); - if (!s) { - var msg = "Saved search " + value + " not found"; + let [libraryID, key] = Zotero.Searches.getLibraryAndKeyFromID(value); + if (!key) { + let msg = "Saved search " + value + " not found"; Zotero.debug(msg, 2); Components.utils.reportError(msg); return; } - return this.addCondition('savedSearch', operator, s.key, required); + if (this.libraryID && libraryID != this.libraryID) { + Zotero.logError(new Error("Collection " + value + " is in different library")); + return; + } + return this.addCondition('savedSearch', operator, key, required); } var searchConditionID = ++this._maxSearchConditionID; @@ -399,7 +407,7 @@ Zotero.Search.prototype.addCondition = Zotero.Promise.coroutine(function* (condi this._sql = null; this._sqlParams = false; return searchConditionID; -}); +} /* @@ -691,12 +699,12 @@ Zotero.Search.prototype.search = Zotero.Promise.coroutine(function* (asTempTable else if (joinMode == 'any' && !c.required) { continue; } - yield s.addCondition(c.condition, c.operator, c.value); + s.addCondition(c.condition, c.operator, c.value); } var splits = Zotero.Fulltext.semanticSplitter(condition.value); for each(var split in splits){ - yield s.addCondition('fulltextWord', condition.operator, split); + s.addCondition('fulltextWord', condition.operator, split); } var fulltextWordIDs = yield s.search(); diff --git a/chrome/content/zotero/zoteroPane.js b/chrome/content/zotero/zoteroPane.js @@ -859,7 +859,7 @@ var ZoteroPane = new function() var s = new Zotero.Search(); s.libraryID = this.getSelectedLibraryID(); - yield s.addCondition('title', 'contains', ''); + s.addCondition('title', 'contains', ''); var untitled = Zotero.getString('pane.collections.untitled'); untitled = yield Zotero.DB.getNextName('savedSearches', 'savedSearchName', @@ -953,7 +953,7 @@ var ZoteroPane = new function() }); - this.openAdvancedSearchWindow = Zotero.Promise.coroutine(function* () { + this.openAdvancedSearchWindow = function () { var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"] .getService(Components.interfaces.nsIWindowMediator); var enumerator = wm.getEnumerator('zotero:search'); @@ -968,11 +968,11 @@ var ZoteroPane = new function() var s = new Zotero.Search(); s.libraryID = this.getSelectedLibraryID(); - yield s.addCondition('title', 'contains', ''); + s.addCondition('title', 'contains', ''); var io = {dataIn: {search: s}, dataOut: null}; window.openDialog('chrome://zotero/content/advancedSearch.xul', '', 'chrome,dialog=no,centerscreen', io); - }); + }; this.toggleTagSelector = Zotero.Promise.coroutine(function* () { diff --git a/components/zotero-protocol-handler.js b/components/zotero-protocol-handler.js @@ -598,7 +598,7 @@ function ZoteroProtocolHandler() { search.setScope(s); var groups = yield Zotero.Groups.getAll(); for each(var group in groups) { - yield search.addCondition('libraryID', 'isNot', group.libraryID); + search.addCondition('libraryID', 'isNot', group.libraryID); } break; } @@ -624,8 +624,8 @@ function ZoteroProtocolHandler() { } let s = new Zotero.Search(); - yield s.addCondition('libraryID', 'is', params.libraryID); - yield s.addCondition('noChildren', 'true'); + s.addCondition('libraryID', 'is', params.libraryID); + s.addCondition('noChildren', 'true'); var ids = yield s.search(); var results = yield Zotero.Items.getAsync(ids); }