forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			151 lines
		
	
	
	
		
			4.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			151 lines
		
	
	
	
		
			4.7 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 */
 | |
| 
 | |
| 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.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.className = "userContext-label-inprefs";
 | |
|       label.setAttribute("flex", 1);
 | |
|       let containerName = ContextualIdentityService.getUserContextLabel(
 | |
|         container.userContextId
 | |
|       );
 | |
|       label.textContent = containerName;
 | |
|       label.setAttribute("tooltiptext", containerName);
 | |
|       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-settings-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",
 | |
|       undefined,
 | |
|       params
 | |
|     );
 | |
|   },
 | |
| };
 | 
