Update Zotero.ProgressWindow to properly handle and stack multiple progress windows, stored in Zotero.ProgressWindowSet
Refresher: var progress = new Zotero.ProgressWindow(); progress.changeHeadline('Indexing item...'); progress.addLines("My First Book", "chrome://zotero/skin/treeitem-book.png"); progress.addDescription('This is my first book.'); progress.show(); progress.fade(); var progress2 = new Zotero.ProgressWindow(); progress2.changeHeadline('Indexing item 2...'); progress2.addLines("My Second Book", "chrome://zotero/skin/treeitem-book.png"); progress2.addDescription('This is my second book.'); progress2.show(); progress2.fade();
This commit is contained in:
parent
5f37a75804
commit
f6d9a42644
|
@ -20,6 +20,57 @@
|
|||
***** END LICENSE BLOCK *****
|
||||
*/
|
||||
|
||||
|
||||
Zotero.ProgressWindowSet = new function() {
|
||||
this.add = add;
|
||||
this.tile = tile;
|
||||
this.remove = remove;
|
||||
|
||||
var _numWindows = 0;
|
||||
var _progressWindows = [];
|
||||
|
||||
const X_OFFSET = 30;
|
||||
const Y_OFFSET = 10;
|
||||
|
||||
function add(progressWin) {
|
||||
_progressWindows.push(progressWin);
|
||||
_numWindows++;
|
||||
}
|
||||
|
||||
|
||||
function tile(progressWin) {
|
||||
var parent = progressWin.opener;
|
||||
var sum = 0;
|
||||
|
||||
for (var i=0; i<_progressWindows.length; i++) {
|
||||
var p = _progressWindows[i];
|
||||
|
||||
// Skip progress windows from other windows
|
||||
if (p.opener != parent) {
|
||||
continue;
|
||||
}
|
||||
|
||||
sum += Y_OFFSET + p.outerHeight;
|
||||
|
||||
p.moveTo(
|
||||
parent.screenX + parent.innerWidth - p.outerWidth - X_OFFSET,
|
||||
parent.screenY + parent.innerHeight - sum
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function remove(progressWin) {
|
||||
_numWindows--;
|
||||
for (var i=0; i<_progressWindows.length; i++) {
|
||||
if (_progressWindows[i] == progressWin) {
|
||||
_progressWindows.splice(i, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Handles the display of a div showing progress in scraping, indexing, etc.
|
||||
*
|
||||
|
@ -55,11 +106,14 @@ Zotero.ProgressWindow = function(_window){
|
|||
if(_windowLoading || _windowLoaded) { // already loading or loaded
|
||||
return false;
|
||||
}
|
||||
|
||||
_progressWindow = _window.openDialog("chrome://zotero/chrome/progressWindow.xul",
|
||||
"", "chrome,dialog=no,titlebar=no,popup=yes");
|
||||
_progressWindow.addEventListener("load", _onWindowLoaded, false);
|
||||
_progressWindow.addEventListener("pageshow", _onWindowLoaded, false);
|
||||
_windowLoading = true;
|
||||
|
||||
Zotero.ProgressWindowSet.add(_progressWindow);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -126,6 +180,7 @@ Zotero.ProgressWindow = function(_window){
|
|||
function kill() {
|
||||
_windowLoaded = false;
|
||||
_windowLoading = false;
|
||||
Zotero.ProgressWindowSet.remove(_progressWindow);
|
||||
try {
|
||||
_progressWindow.close();
|
||||
} catch(ex) {}
|
||||
|
@ -152,10 +207,7 @@ Zotero.ProgressWindow = function(_window){
|
|||
|
||||
function _move() {
|
||||
_progressWindow.sizeToContent();
|
||||
_progressWindow.moveTo(
|
||||
_window.screenX + _window.innerWidth - _progressWindow.outerWidth - 30,
|
||||
_window.screenY + _window.innerHeight - _progressWindow.outerHeight - 10
|
||||
);
|
||||
Zotero.ProgressWindowSet.tile(_progressWindow);
|
||||
}
|
||||
|
||||
function _timeout() {
|
||||
|
|
Loading…
Reference in New Issue
Block a user