mirror of
https://github.com/zen-browser/components.git
synced 2025-07-08 23:05:30 +02:00
146 lines
4.3 KiB
TypeScript
146 lines
4.3 KiB
TypeScript
// 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/.
|
|
|
|
var ZenProfileDialogUI = {
|
|
showSubView(parent, event) {
|
|
let element = parent.querySelector('.zen-side-bar-profiles-button-panel-correction') || parent;
|
|
PanelUI.showSubView('PanelUI-zen-profiles', element, event);
|
|
this._updateProfilesList();
|
|
this._updateCurentProfileId();
|
|
},
|
|
|
|
_updateProfilesList() {
|
|
let parentList = document.getElementById('PanelUI-zen-profiles-list');
|
|
this._emptyUserList(parentList);
|
|
if (this._getProfilesSize(ProfileService.profiles) <= 1) {
|
|
return;
|
|
}
|
|
parentList.appendChild(document.createElement('toolbarseparator'));
|
|
for (let profile of ProfileService.profiles) {
|
|
if (profile == ProfileService.currentProfile) {
|
|
continue;
|
|
}
|
|
let item = document.createElement('div');
|
|
item.onclick = () => this._openProfile(profile);
|
|
item.className = 'PanelUI-zen-profiles-item';
|
|
let avatar = document.createElement('img');
|
|
avatar.className = 'PanelUI-zen-profiles-item-avatar';
|
|
let name = document.createElement('div');
|
|
name.className = 'PanelUI-zen-profiles-item-name';
|
|
name.appendChild(document.createTextNode(profile.name));
|
|
name.container = true;
|
|
avatar.setAttribute('src', ZenThemeModifier._getThemedAvatar(profile.zenAvatarPath));
|
|
item.appendChild(avatar);
|
|
item.appendChild(name);
|
|
parentList.appendChild(item);
|
|
}
|
|
},
|
|
|
|
_emptyUserList(element) {
|
|
element.innerHTML = '';
|
|
},
|
|
|
|
_updateCurentProfileId() {
|
|
let currentProfile = ProfileService.currentProfile;
|
|
if (!currentProfile) return;
|
|
let nameContainer = document.getElementById("PanelUI-zen-profiles-current-name");
|
|
nameContainer.textContent = currentProfile.name;
|
|
},
|
|
|
|
_openProfile(profile) {
|
|
Services.startup.createInstanceWithProfile(profile);
|
|
},
|
|
|
|
_getProfilesSize(profiles) {
|
|
let size = 0;
|
|
for (let _ of profiles) {
|
|
size += 1;
|
|
}
|
|
return size;
|
|
},
|
|
|
|
createProfileWizard() {
|
|
// This should be rewritten in HTML eventually.
|
|
// TODO: it could be `window.browsingContext.topChromeWindow.gDialogBox.open` but it does not work with the callback?
|
|
window.browsingContext.topChromeWindow.openDialog(
|
|
"chrome://mozapps/content/profile/createProfileWizard.xhtml",
|
|
"",
|
|
"centerscreen,chrome,modal,titlebar",
|
|
ProfileService,
|
|
{ CreateProfile: async (profile) => {
|
|
try {
|
|
ProfileService.defaultProfile = profile;
|
|
this._flush();
|
|
this._openProfile(profile);
|
|
} catch (e) {
|
|
// This can happen on dev-edition.
|
|
let [title, msg] = await document.l10n.formatValues([
|
|
{ id: "profiles-cannot-set-as-default-title" },
|
|
{ id: "profiles-cannot-set-as-default-message" },
|
|
]);
|
|
|
|
Services.prompt.alert(window, title, msg);
|
|
}
|
|
} }
|
|
);
|
|
},
|
|
|
|
async _flush() {
|
|
try {
|
|
ProfileService.flush();
|
|
this._updateProfilesList();
|
|
} catch (e) {
|
|
let [title, msg, button] = await document.l10n.formatValues([
|
|
{ id: "profiles-flush-fail-title" },
|
|
{
|
|
id:
|
|
e.result == Cr.NS_ERROR_DATABASE_CHANGED
|
|
? "profiles-flush-conflict"
|
|
: "profiles-flush-failed",
|
|
},
|
|
{ id: "profiles-flush-restart-button" },
|
|
]);
|
|
|
|
const PS = Ci.nsIPromptService;
|
|
let result = Services.prompt.confirmEx(
|
|
window,
|
|
title,
|
|
msg,
|
|
PS.BUTTON_POS_0 * PS.BUTTON_TITLE_CANCEL +
|
|
PS.BUTTON_POS_1 * PS.BUTTON_TITLE_IS_STRING,
|
|
null,
|
|
button,
|
|
null,
|
|
null,
|
|
{}
|
|
);
|
|
if (result == 1) {
|
|
this._restart(false);
|
|
}
|
|
}
|
|
},
|
|
|
|
_restart(safeMode) {
|
|
let cancelQuit = Cc["@mozilla.org/supports-PRBool;1"].createInstance(
|
|
Ci.nsISupportsPRBool
|
|
);
|
|
Services.obs.notifyObservers(
|
|
cancelQuit,
|
|
"quit-application-requested",
|
|
"restart"
|
|
);
|
|
|
|
if (cancelQuit.data) {
|
|
return;
|
|
}
|
|
|
|
let flags = Ci.nsIAppStartup.eAttemptQuit | Ci.nsIAppStartup.eRestart;
|
|
|
|
if (safeMode) {
|
|
Services.startup.restartInSafeMode(flags);
|
|
} else {
|
|
Services.startup.quit(flags);
|
|
}
|
|
}
|
|
};
|