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:
Dan Stillman 2017-03-24 05:18:55 -04:00
parent 1a4b7121d3
commit 820755e152
10 changed files with 105 additions and 99 deletions

View file

@ -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(