Rework libraryTreeView event handling
Changes `libraryTreeView::addEventListener('load')` and similar to `libraryTreeView::onLoad.addListener(listener, once)`, etc. `once` is an optional boolean that, when true, causes the listener to fire once and then be removed. This is implicit for 'load'. 'load' maintains its special behavior of running immediately if the treeview has already been loaded. Also adds `waitForLoad()` and `waitForSelect()` functions that return promises on event completion, since most uses of those events were just resolving deferreds.
This commit is contained in:
parent
1a4b7121d3
commit
820755e152
10 changed files with 105 additions and 99 deletions
|
@ -190,15 +190,11 @@ var waitForItemsLoad = Zotero.Promise.coroutine(function* (win, collectionRowToS
|
|||
var zp = win.ZoteroPane;
|
||||
var cv = zp.collectionsView;
|
||||
|
||||
var deferred = Zotero.Promise.defer();
|
||||
cv.addEventListener('load', () => deferred.resolve());
|
||||
yield deferred.promise;
|
||||
yield cv.waitForLoad();
|
||||
if (collectionRowToSelect !== undefined) {
|
||||
yield cv.selectWait(collectionRowToSelect);
|
||||
}
|
||||
deferred = Zotero.Promise.defer();
|
||||
zp.itemsView.addEventListener('load', () => deferred.resolve());
|
||||
return deferred.promise;
|
||||
yield zp.itemsView.waitForLoad();
|
||||
});
|
||||
|
||||
var waitForTagSelector = function (win) {
|
||||
|
|
|
@ -35,8 +35,7 @@ describe("Advanced Search", function () {
|
|||
var deferred = Zotero.Promise.defer();
|
||||
o.search();
|
||||
var iv = o.itemsView;
|
||||
iv.addEventListener('load', () => deferred.resolve());
|
||||
yield deferred.promise;
|
||||
yield iv.waitForLoad();
|
||||
|
||||
// Check results
|
||||
assert.equal(iv.rowCount, 1);
|
||||
|
|
|
@ -566,8 +566,7 @@ describe("Zotero.ItemTreeView", function() {
|
|||
let view = zp.itemsView;
|
||||
yield view.selectItem(item3.id, true);
|
||||
|
||||
var deferred = Zotero.Promise.defer();
|
||||
view.addEventListener('select', () => deferred.resolve());
|
||||
var promise = view.waitForSelect();
|
||||
|
||||
view.drop(view.getRowIndexByID(item2.id), 0, {
|
||||
dropEffect: 'copy',
|
||||
|
@ -585,7 +584,7 @@ describe("Zotero.ItemTreeView", function() {
|
|||
mozItemCount: 1
|
||||
})
|
||||
|
||||
yield deferred.promise;
|
||||
yield promise;
|
||||
|
||||
// Old parent should be empty
|
||||
assert.isFalse(view.isContainerOpen(view.getRowIndexByID(item1.id)));
|
||||
|
@ -606,8 +605,7 @@ describe("Zotero.ItemTreeView", function() {
|
|||
let view = zp.itemsView;
|
||||
yield view.selectItem(item3.id, true);
|
||||
|
||||
var deferred = Zotero.Promise.defer();
|
||||
view.addEventListener('select', () => deferred.resolve());
|
||||
var promise = view.waitForSelect();
|
||||
|
||||
view.drop(view.getRowIndexByID(item1.id), 0, {
|
||||
dropEffect: 'copy',
|
||||
|
@ -625,7 +623,7 @@ describe("Zotero.ItemTreeView", function() {
|
|||
mozItemCount: 1
|
||||
})
|
||||
|
||||
yield deferred.promise;
|
||||
yield promise;
|
||||
|
||||
// Old parent should be empty
|
||||
assert.isFalse(view.isContainerOpen(view.getRowIndexByID(item2.id)));
|
||||
|
@ -640,8 +638,7 @@ describe("Zotero.ItemTreeView", function() {
|
|||
var file = getTestDataDirectory();
|
||||
file.append('test.png');
|
||||
|
||||
var deferred = Zotero.Promise.defer();
|
||||
itemsView.addEventListener('select', () => deferred.resolve());
|
||||
var promise = itemsView.waitForSelect();
|
||||
|
||||
itemsView.drop(0, -1, {
|
||||
dropEffect: 'copy',
|
||||
|
@ -659,7 +656,7 @@ describe("Zotero.ItemTreeView", function() {
|
|||
}
|
||||
})
|
||||
|
||||
yield deferred.promise;
|
||||
yield promise;
|
||||
var items = itemsView.getSelectedItems();
|
||||
var path = yield items[0].getFilePathAsync();
|
||||
assert.equal(
|
||||
|
@ -669,8 +666,7 @@ describe("Zotero.ItemTreeView", function() {
|
|||
});
|
||||
|
||||
it("should create a top-level attachment when a URL is dragged", function* () {
|
||||
var deferred = Zotero.Promise.defer();
|
||||
itemsView.addEventListener('select', () => deferred.resolve());
|
||||
var promise = itemsView.waitForSelect();
|
||||
|
||||
itemsView.drop(0, -1, {
|
||||
dropEffect: 'copy',
|
||||
|
@ -688,7 +684,7 @@ describe("Zotero.ItemTreeView", function() {
|
|||
mozItemCount: 1,
|
||||
})
|
||||
|
||||
yield deferred.promise;
|
||||
yield promise;
|
||||
var item = itemsView.getSelectedItems()[0];
|
||||
assert.equal(item.getField('url'), pdfURL);
|
||||
assert.equal(
|
||||
|
|
|
@ -35,9 +35,7 @@ describe("Related Box", function () {
|
|||
yield Zotero.Promise.delay(50);
|
||||
}
|
||||
while (!view);
|
||||
var deferred = Zotero.Promise.defer();
|
||||
view.addEventListener('load', () => deferred.resolve());
|
||||
yield deferred.promise;
|
||||
yield view.waitForLoad();
|
||||
|
||||
// Select the other item
|
||||
for (let i = 0; i < view.rowCount; i++) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue