Files
tubestation/browser/components/migration/content/migration-dialog-window.js
Mike Conley 09574d63a6 Bug 1819343 - Allow MigrationWizard initialization to be kicked off either on binding to the DOM or with script. r=kpatenio,settings-reviewers,Gijs
Up until now, we've used the connectedCallback to initialize the MigrationWizard. That's
been fine, except that it requires us to remove and then re-add the element to the DOM
if we want to "reset" it and start over.

This patch adds a method "requestState" to the MigrationWizard that kicks off the
initialization. Embedders can set the `auto-request-state` attribute on the
element if they're happy to just use the connectedCallback.

Finally, this adds an intrinsic width to the entire MigrationWizard element to reduce
flicker when transitioning between states.

Differential Revision: https://phabricator.services.mozilla.com/D171742
2023-03-06 21:39:01 +00:00

78 lines
2.2 KiB
JavaScript

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
/**
* This file manages a MigrationWizard embedded in a dialog that runs
* in a top-level dialog window. It's main responsibility is to listen
* for dialog-specific events from the embedded MigrationWizard and to
* respond appropriately to them.
*
* A single object argument is expected to be passed when opening
* this dialog.
*
* @param {object} window.arguments.0
* @param {Function} window.arguments.0.onResize
* A callback to resize the container of this document when the
* MigrationWizard resizes.
* @param {object} window.arguments.0.options
* A series of options for configuring the dialog. See
* MigrationUtils.showMigrationWizard for a description of this
* object.
*/
const MigrationDialog = {
_wiz: null,
init() {
addEventListener("load", this);
},
onLoad() {
this._wiz = document.getElementById("wizard");
this._wiz.addEventListener("MigrationWizard:Close", this);
document.addEventListener("keypress", this);
let args = window.arguments[0];
// When opened via nsIWindowWatcher.openWindow, the arguments are
// passed through C++, and they arrive to us wrapped as an XPCOM
// object. We use wrappedJSObject to get at the underlying JS
// object.
if (args instanceof Ci.nsISupports) {
args = args.wrappedJSObject;
}
// We have to inform the container of this document that the
// MigrationWizard has changed size in order for it to update
// its dimensions too.
let observer = new ResizeObserver(() => {
args.onResize();
});
observer.observe(this._wiz);
this._wiz.requestState();
},
handleEvent(event) {
switch (event.type) {
case "load": {
this.onLoad();
break;
}
case "keypress": {
if (event.keyCode == KeyEvent.DOM_VK_ESCAPE) {
window.close();
}
break;
}
case "MigrationWizard:Close": {
window.close();
break;
}
}
},
};
MigrationDialog.init();