gecko-dev/browser/components/preferences/containers.js

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

161 строка
4.8 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/. */
/* import-globals-from preferences.js */
var { ContextualIdentityService } = ChromeUtils.import(
Bug 1514594: Part 3 - Change ChromeUtils.import API. *** Bug 1514594: Part 3a - Change ChromeUtils.import to return an exports object; not pollute global. r=mccr8 This changes the behavior of ChromeUtils.import() to return an exports object, rather than a module global, in all cases except when `null` is passed as a second argument, and changes the default behavior not to pollute the global scope with the module's exports. Thus, the following code written for the old model: ChromeUtils.import("resource://gre/modules/Services.jsm"); is approximately the same as the following, in the new model: var {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm"); Since the two behaviors are mutually incompatible, this patch will land with a scripted rewrite to update all existing callers to use the new model rather than the old. *** Bug 1514594: Part 3b - Mass rewrite all JS code to use the new ChromeUtils.import API. rs=Gijs This was done using the followng script: https://bitbucket.org/kmaglione/m-c-rewrites/src/tip/processors/cu-import-exports.jsm *** Bug 1514594: Part 3c - Update ESLint plugin for ChromeUtils.import API changes. r=Standard8 Differential Revision: https://phabricator.services.mozilla.com/D16747 *** Bug 1514594: Part 3d - Remove/fix hundreds of duplicate imports from sync tests. r=Gijs Differential Revision: https://phabricator.services.mozilla.com/D16748 *** Bug 1514594: Part 3e - Remove no-op ChromeUtils.import() calls. r=Gijs Differential Revision: https://phabricator.services.mozilla.com/D16749 *** Bug 1514594: Part 3f.1 - Cleanup various test corner cases after mass rewrite. r=Gijs *** Bug 1514594: Part 3f.2 - Cleanup various non-test corner cases after mass rewrite. r=Gijs Differential Revision: https://phabricator.services.mozilla.com/D16750 --HG-- extra : rebase_source : 359574ee3064c90f33bf36c2ebe3159a24cc8895 extra : histedit_source : b93c8f42808b1599f9122d7842d2c0b3e656a594%2C64a3a4e3359dc889e2ab2b49461bab9e27fc10a7
2019-01-17 21:18:31 +03:00
"resource://gre/modules/ContextualIdentityService.jsm"
);
const defaultContainerIcon = "fingerprint";
const defaultContainerColor = "blue";
let gContainersPane = {
init() {
this._list = document.getElementById("containersView");
document
.getElementById("backContainersButton")
.addEventListener("command", function() {
gotoPref("general");
});
document
.getElementById("containersAdd")
.addEventListener("command", function() {
gContainersPane.onAddButtonCommand();
});
this._rebuildView();
},
_rebuildView() {
const containers = ContextualIdentityService.getPublicIdentities();
while (this._list.firstChild) {
this._list.firstChild.remove();
}
for (let container of containers) {
let item = document.createXULElement("richlistitem");
let outer = document.createXULElement("hbox");
outer.setAttribute("flex", 1);
outer.setAttribute("align", "center");
item.appendChild(outer);
let userContextIcon = document.createXULElement("hbox");
userContextIcon.className = "userContext-icon";
userContextIcon.setAttribute("width", 24);
userContextIcon.setAttribute("height", 24);
userContextIcon.classList.add("userContext-icon-inprefs");
userContextIcon.classList.add("identity-icon-" + container.icon);
userContextIcon.classList.add("identity-color-" + container.color);
outer.appendChild(userContextIcon);
let label = document.createXULElement("label");
label.setAttribute("flex", 1);
label.setAttribute("crop", "end");
label.textContent = ContextualIdentityService.getUserContextLabel(
container.userContextId
);
outer.appendChild(label);
let containerButtons = document.createXULElement("hbox");
containerButtons.className = "container-buttons";
item.appendChild(containerButtons);
let prefsButton = document.createXULElement("button");
prefsButton.addEventListener("command", function(event) {
gContainersPane.onPreferenceCommand(event.originalTarget);
});
prefsButton.setAttribute("value", container.userContextId);
document.l10n.setAttributes(prefsButton, "containers-preferences-button");
containerButtons.appendChild(prefsButton);
let removeButton = document.createXULElement("button");
removeButton.addEventListener("command", function(event) {
gContainersPane.onRemoveCommand(event.originalTarget);
});
removeButton.setAttribute("value", container.userContextId);
document.l10n.setAttributes(removeButton, "containers-remove-button");
containerButtons.appendChild(removeButton);
this._list.appendChild(item);
}
},
async onRemoveCommand(button) {
let userContextId = parseInt(button.getAttribute("value"), 10);
let count = ContextualIdentityService.countContainerTabs(userContextId);
if (count > 0) {
let [
title,
message,
okButton,
cancelButton,
] = await document.l10n.formatValues([
{ id: "containers-remove-alert-title" },
{ id: "containers-remove-alert-msg", args: { count } },
{ id: "containers-remove-ok-button" },
{ id: "containers-remove-cancel-button" },
]);
let buttonFlags =
Ci.nsIPrompt.BUTTON_TITLE_IS_STRING * Ci.nsIPrompt.BUTTON_POS_0 +
Ci.nsIPrompt.BUTTON_TITLE_IS_STRING * Ci.nsIPrompt.BUTTON_POS_1;
let rv = Services.prompt.confirmEx(
window,
title,
message,
buttonFlags,
okButton,
cancelButton,
null,
null,
{}
);
if (rv != 0) {
return;
}
await ContextualIdentityService.closeContainerTabs(userContextId);
}
ContextualIdentityService.remove(userContextId);
this._rebuildView();
},
onPreferenceCommand(button) {
this.openPreferenceDialog(button.getAttribute("value"));
},
onAddButtonCommand(button) {
this.openPreferenceDialog(null);
},
openPreferenceDialog(userContextId) {
let identity = {
name: "",
icon: defaultContainerIcon,
color: defaultContainerColor,
};
if (userContextId) {
identity = ContextualIdentityService.getPublicIdentityFromId(
userContextId
);
identity.name = ContextualIdentityService.getUserContextLabel(
identity.userContextId
);
}
const params = { userContextId, identity };
gSubDialog.open(
"chrome://browser/content/preferences/dialogs/containers.xhtml",
null,
params
);
},
};