mirror of
https://github.com/zen-browser/components.git
synced 2025-07-08 00:10:01 +02:00
refactor: Update ZenProfileDialogUI to improve profiles list and profile creation
This commit is contained in:
parent
ea286eb8a6
commit
8fe0426311
1 changed files with 146 additions and 0 deletions
146
src/ZenProfileDialogUI.js
Normal file
146
src/ZenProfileDialogUI.js
Normal file
|
@ -0,0 +1,146 @@
|
|||
// 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);
|
||||
}
|
||||
}
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue