1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
/* 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/. */
// This file is loaded into the browser window scope.
/* eslint-env mozilla/browser-window */
XPCOMUtils.defineLazyServiceGetter(
this,
"ProfileService",
"@mozilla.org/toolkit/profile-service;1",
"nsIToolkitProfileService"
);
var gProfiles = {
init() {
XPCOMUtils.defineLazyPreferenceGetter(
this,
"PROFILES_ENABLED",
"browser.profiles.enabled",
false,
this.toggleProfileButtonsVisibility.bind(this)
);
if (!this.PROFILES_ENABLED) {
return;
}
this.toggleProfileButtonsVisibility();
},
toggleProfileButtonsVisibility() {
let profilesButton = PanelMultiView.getViewNode(
document,
"appMenu-profiles-button"
);
profilesButton.hidden = !this.PROFILES_ENABLED;
if (this.PROFILES_ENABLED) {
document.l10n.setArgs(profilesButton, {
profilename: ProfileService.currentProfile?.name ?? "",
});
}
},
updateView(panel) {
this.populateSubView();
PanelUI.showSubView("PanelUI-profiles", panel);
},
async populateSubView() {
let closeProfileButton = PanelMultiView.getViewNode(
document,
"profiles-close-profile-button"
);
document.l10n.setArgs(closeProfileButton, {
profilename: ProfileService.currentProfile?.name ?? "",
});
let profileIconEl = PanelMultiView.getViewNode(
document,
"profile-icon-image"
);
profileIconEl.style.listStyleImage = `url(${
ProfileService.currentProfile?.iconURL ??
"chrome://branding/content/icon64.png"
})`;
let profileNameEl = PanelMultiView.getViewNode(document, "profile-name");
profileNameEl.textContent = ProfileService.currentProfile?.name ?? "";
let profilesList = PanelMultiView.getViewNode(
document,
"PanelUI-profiles"
).querySelector("#profiles-list");
while (profilesList.lastElementChild) {
profilesList.lastElementChild.remove();
}
for (let profile of ProfileService.profiles) {
if (profile === ProfileService.currentProfile) {
continue;
}
let button = document.createXULElement("toolbarbutton");
button.setAttribute("label", profile.name);
button.className = "subviewbutton subviewbutton-iconic";
button.style.listStyleImage = `url(${
profile.iconURL ?? "chrome://branding/content/icon16.png"
})`;
button.onclick = () => {
Services.startup.createInstanceWithProfile(profile);
};
profilesList.appendChild(button);
}
},
};
|