fune/browser/components/migration/content/migration-dialog-window.js
Mike Conley f0d2a795f1 Bug 1814912 - Use an HTML5 dialog instead of gSubDialog for the new migration wizard in about:preferences. r=Gijs,settings-reviewers
I also renamed migration-dialog.[js|html|css] to migration-dialog-window.[js|html|css] to
make it clearer that those resources are for when the wizard is being shown in a separate
window. I also updated the documentation to reflect this.

Differential Revision: https://phabricator.services.mozilla.com/D169014
2023-02-07 14:25:47 +00:00

76 lines
2.1 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);
},
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();