Merge 02f5ef86f3
into aec2aa5fb0
This commit is contained in:
commit
34cd766ad2
11 changed files with 127 additions and 29 deletions
2
.gitmodules
vendored
2
.gitmodules
vendored
|
@ -1,5 +1,5 @@
|
||||||
[submodule "src/_locales"]
|
[submodule "src/_locales"]
|
||||||
branch = main
|
branch = main
|
||||||
path = src/_locales
|
path = src/_locales
|
||||||
url = https://github.com/mozilla-l10n/multi-account-containers-l10n.git
|
url = https://github.com/GHolk/multi-account-containers-l10n.git
|
||||||
ignore=all
|
ignore=all
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
# 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
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
|
28
package-lock.json
generated
28
package-lock.json
generated
|
@ -1,12 +1,12 @@
|
||||||
{
|
{
|
||||||
"name": "testpilot-containers",
|
"name": "testpilot-containers",
|
||||||
"version": "8.1.3",
|
"version": "8.2.0",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "testpilot-containers",
|
"name": "testpilot-containers",
|
||||||
"version": "8.1.1",
|
"version": "8.2.0",
|
||||||
"license": "MPL-2.0",
|
"license": "MPL-2.0",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"addons-linter": "^5.28.0",
|
"addons-linter": "^5.28.0",
|
||||||
|
@ -15032,8 +15032,7 @@
|
||||||
"version": "5.3.2",
|
"version": "5.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
|
||||||
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
|
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
|
||||||
"dev": true,
|
"dev": true
|
||||||
"requires": {}
|
|
||||||
},
|
},
|
||||||
"acorn-walk": {
|
"acorn-walk": {
|
||||||
"version": "7.2.0",
|
"version": "7.2.0",
|
||||||
|
@ -17246,15 +17245,13 @@
|
||||||
"version": "4.0.2",
|
"version": "4.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/eslint-plugin-no-unsanitized/-/eslint-plugin-no-unsanitized-4.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/eslint-plugin-no-unsanitized/-/eslint-plugin-no-unsanitized-4.0.2.tgz",
|
||||||
"integrity": "sha512-Pry0S9YmHoz8NCEMRQh7N0Yexh2MYCNPIlrV52hTmS7qXnTghWsjXouF08bgsrrZqaW9tt1ZiK3j5NEmPE+EjQ==",
|
"integrity": "sha512-Pry0S9YmHoz8NCEMRQh7N0Yexh2MYCNPIlrV52hTmS7qXnTghWsjXouF08bgsrrZqaW9tt1ZiK3j5NEmPE+EjQ==",
|
||||||
"dev": true,
|
"dev": true
|
||||||
"requires": {}
|
|
||||||
},
|
},
|
||||||
"eslint-plugin-promise": {
|
"eslint-plugin-promise": {
|
||||||
"version": "5.2.0",
|
"version": "5.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-5.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-5.2.0.tgz",
|
||||||
"integrity": "sha512-SftLb1pUG01QYq2A/hGAWfDRXqYD82zE7j7TopDOyNdU+7SvvoXREls/+PRTY17vUXzXnZA/zfnyKgRH6x4JJw==",
|
"integrity": "sha512-SftLb1pUG01QYq2A/hGAWfDRXqYD82zE7j7TopDOyNdU+7SvvoXREls/+PRTY17vUXzXnZA/zfnyKgRH6x4JJw==",
|
||||||
"dev": true,
|
"dev": true
|
||||||
"requires": {}
|
|
||||||
},
|
},
|
||||||
"eslint-scope": {
|
"eslint-scope": {
|
||||||
"version": "5.1.1",
|
"version": "5.1.1",
|
||||||
|
@ -19763,8 +19760,7 @@
|
||||||
"version": "7.5.9",
|
"version": "7.5.9",
|
||||||
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz",
|
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz",
|
||||||
"integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
|
"integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
|
||||||
"dev": true,
|
"dev": true
|
||||||
"requires": {}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -21971,8 +21967,7 @@
|
||||||
"version": "0.36.2",
|
"version": "0.36.2",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-syntax/-/postcss-syntax-0.36.2.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-syntax/-/postcss-syntax-0.36.2.tgz",
|
||||||
"integrity": "sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==",
|
"integrity": "sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==",
|
||||||
"dev": true,
|
"dev": true
|
||||||
"requires": {}
|
|
||||||
},
|
},
|
||||||
"postcss-value-parser": {
|
"postcss-value-parser": {
|
||||||
"version": "4.2.0",
|
"version": "4.2.0",
|
||||||
|
@ -22826,8 +22821,7 @@
|
||||||
"version": "3.7.0",
|
"version": "3.7.0",
|
||||||
"resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-3.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-3.7.0.tgz",
|
||||||
"integrity": "sha512-mf5NURdUaSdnatJx3uhoBOrY9dtL19fiOtAdT1Azxg3+lNJFiuN0uzaU3xX1LeAfL17kHQhTAJgpsfhbMJMY2g==",
|
"integrity": "sha512-mf5NURdUaSdnatJx3uhoBOrY9dtL19fiOtAdT1Azxg3+lNJFiuN0uzaU3xX1LeAfL17kHQhTAJgpsfhbMJMY2g==",
|
||||||
"dev": true,
|
"dev": true
|
||||||
"requires": {}
|
|
||||||
},
|
},
|
||||||
"slash": {
|
"slash": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
|
@ -23571,8 +23565,7 @@
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-3.0.0.tgz",
|
||||||
"integrity": "sha512-F6yTRuc06xr1h5Qw/ykb2LuFynJ2IxkKfCMf+1xqPffkxh0S09Zc902XCffcsw/XMFq/OzQ1w54fLIDtmRNHnQ==",
|
"integrity": "sha512-F6yTRuc06xr1h5Qw/ykb2LuFynJ2IxkKfCMf+1xqPffkxh0S09Zc902XCffcsw/XMFq/OzQ1w54fLIDtmRNHnQ==",
|
||||||
"dev": true,
|
"dev": true
|
||||||
"requires": {}
|
|
||||||
},
|
},
|
||||||
"stylelint-config-standard": {
|
"stylelint-config-standard": {
|
||||||
"version": "20.0.0",
|
"version": "20.0.0",
|
||||||
|
@ -24946,8 +24939,7 @@
|
||||||
"version": "8.12.0",
|
"version": "8.12.0",
|
||||||
"resolved": "https://registry.npmjs.org/ws/-/ws-8.12.0.tgz",
|
"resolved": "https://registry.npmjs.org/ws/-/ws-8.12.0.tgz",
|
||||||
"integrity": "sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==",
|
"integrity": "sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==",
|
||||||
"dev": true,
|
"dev": true
|
||||||
"requires": {}
|
|
||||||
},
|
},
|
||||||
"xdg-basedir": {
|
"xdg-basedir": {
|
||||||
"version": "5.1.0",
|
"version": "5.1.0",
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit bdaa01291b7367a5e815470fd263ea36c862fe32
|
Subproject commit e9fb99295ceb14eaa9cb8cdc24887f6258949012
|
9
src/img/disable-redirect.svg
Normal file
9
src/img/disable-redirect.svg
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
<!-- 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/. -->
|
||||||
|
<svg data-name="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
|
||||||
|
<rect x="1" y="1" width="6" height="6" rx="1"/>
|
||||||
|
<rect x="1" y="9" width="6" height="6" rx="1"/>
|
||||||
|
<rect x="9" y="9" width="6" height="6" rx="1"/>
|
||||||
|
<path fill="context-fill" fill-opacity="context-fill-opacity" d="M14.92 1.62a1 1 0 0 0-0.54-0.54A1 1 0 0 0 14 1h-4a1 1 0 0 0 0 2h1.59l-2.3 2.29a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0L13 4.41V6a1 1 0 0 0 2 0V2a1 1 0 0 0-0.08-0.38z"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 677 B |
|
@ -225,14 +225,20 @@ window.assignManager = {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
this.removeContextMenu();
|
this.removeContextMenu();
|
||||||
const [tab, siteSettings] = await Promise.all([
|
const a = await Promise.all([
|
||||||
browser.tabs.get(options.tabId),
|
browser.tabs.get(options.tabId),
|
||||||
this.storageArea.get(options.url)
|
this.storageArea.get(options.url)
|
||||||
]);
|
]);
|
||||||
let container;
|
const tab = a[0];
|
||||||
|
let siteSettings = a[1];
|
||||||
|
let container = false;
|
||||||
|
let cookieStoreId = false;
|
||||||
|
if (siteSettings) {
|
||||||
|
cookieStoreId = backgroundLogic.cookieStoreId(siteSettings.userContextId);
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
container = await browser.contextualIdentities
|
container = cookieStoreId && await browser.contextualIdentities
|
||||||
.get(backgroundLogic.cookieStoreId(siteSettings.userContextId));
|
.get(cookieStoreId);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
container = false;
|
container = false;
|
||||||
}
|
}
|
||||||
|
@ -243,6 +249,14 @@ window.assignManager = {
|
||||||
this.deleteContainer(siteSettings.userContextId);
|
this.deleteContainer(siteSettings.userContextId);
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (siteSettings && container) {
|
||||||
|
const containerState = await identityState.storageArea.get(cookieStoreId);
|
||||||
|
if (containerState.redirectDisable) {
|
||||||
|
container = false;
|
||||||
|
siteSettings = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
const userContextId = this.getUserContextIdFromCookieStore(tab);
|
const userContextId = this.getUserContextIdFromCookieStore(tab);
|
||||||
|
|
||||||
// https://github.com/mozilla/multi-account-containers/issues/847
|
// https://github.com/mozilla/multi-account-containers/issues/847
|
||||||
|
@ -394,7 +408,8 @@ window.assignManager = {
|
||||||
// Requested page is not assigned to a specific container. If the current tab's container
|
// Requested page is not assigned to a specific container. If the current tab's container
|
||||||
// is locked, then the page must be reloaded in the default container.
|
// is locked, then the page must be reloaded in the default container.
|
||||||
const currentContainerState = await identityState.storageArea.get(tab.cookieStoreId);
|
const currentContainerState = await identityState.storageArea.get(tab.cookieStoreId);
|
||||||
return currentContainerState && currentContainerState.isIsolated;
|
return currentContainerState && currentContainerState.isIsolated &&
|
||||||
|
!currentContainerState.redirectDisable;
|
||||||
},
|
},
|
||||||
|
|
||||||
maybeAddProxyListeners() {
|
maybeAddProxyListeners() {
|
||||||
|
|
|
@ -244,6 +244,23 @@ const backgroundLogic = {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
async setRedirectState(cookieStoreId, enable, global) {
|
||||||
|
if (global) {
|
||||||
|
const containers = await identityState.getCookieStoreIDuuidMap();
|
||||||
|
for (const id in containers) {
|
||||||
|
await this.setRedirectState(id, enable, false);;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const containerState = await identityState.storageArea.get(cookieStoreId);
|
||||||
|
try {
|
||||||
|
containerState.redirectDisable = !enable;
|
||||||
|
return await identityState.storageArea.set(cookieStoreId, containerState);
|
||||||
|
} catch (error) {
|
||||||
|
// console.error(`No container: ${cookieStoreId}`);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
async moveTabsToWindow(options) {
|
async moveTabsToWindow(options) {
|
||||||
const requiredArguments = ["cookieStoreId", "windowId"];
|
const requiredArguments = ["cookieStoreId", "windowId"];
|
||||||
this.checkArgs(requiredArguments, options, "moveTabsToWindow");
|
this.checkArgs(requiredArguments, options, "moveTabsToWindow");
|
||||||
|
@ -350,7 +367,8 @@ const backgroundLogic = {
|
||||||
hasOpenTabs: !!openTabs.length,
|
hasOpenTabs: !!openTabs.length,
|
||||||
numberOfHiddenTabs: containerState.hiddenTabs.length,
|
numberOfHiddenTabs: containerState.hiddenTabs.length,
|
||||||
numberOfOpenTabs: openTabs.length,
|
numberOfOpenTabs: openTabs.length,
|
||||||
isIsolated: !!containerState.isIsolated
|
isIsolated: !!containerState.isIsolated,
|
||||||
|
redirectDisable: containerState.redirectDisable
|
||||||
};
|
};
|
||||||
return;
|
return;
|
||||||
});
|
});
|
||||||
|
|
|
@ -63,6 +63,11 @@ const messageHandler = {
|
||||||
windowId: m.windowId
|
windowId: m.windowId
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
case "setRedirectState":
|
||||||
|
response = backgroundLogic.setRedirectState(
|
||||||
|
m.cookieStoreId, m.state, m.global
|
||||||
|
);
|
||||||
|
break;
|
||||||
case "checkIncompatibleAddons":
|
case "checkIncompatibleAddons":
|
||||||
// TODO
|
// TODO
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -60,6 +60,7 @@ const Logic = {
|
||||||
_previousPanelPath: [],
|
_previousPanelPath: [],
|
||||||
_panels: {},
|
_panels: {},
|
||||||
_onboardingVariation: null,
|
_onboardingVariation: null,
|
||||||
|
_initPromise: null,
|
||||||
|
|
||||||
async init() {
|
async init() {
|
||||||
browser.runtime.sendMessage({
|
browser.runtime.sendMessage({
|
||||||
|
@ -258,6 +259,7 @@ const Logic = {
|
||||||
identity.numberOfHiddenTabs = stateObject.numberOfHiddenTabs;
|
identity.numberOfHiddenTabs = stateObject.numberOfHiddenTabs;
|
||||||
identity.numberOfOpenTabs = stateObject.numberOfOpenTabs;
|
identity.numberOfOpenTabs = stateObject.numberOfOpenTabs;
|
||||||
identity.isIsolated = stateObject.isIsolated;
|
identity.isIsolated = stateObject.isIsolated;
|
||||||
|
identity.redirectDisable = stateObject.redirectDisable;
|
||||||
}
|
}
|
||||||
if (containerOrder) {
|
if (containerOrder) {
|
||||||
identity.order = containerOrder[identity.cookieStoreId];
|
identity.order = containerOrder[identity.cookieStoreId];
|
||||||
|
@ -756,6 +758,25 @@ Logic.registerPanel(P_CONTAINERS_LIST, {
|
||||||
Utils.addEnterHandler(document.querySelector("#always-open-in"), () => {
|
Utils.addEnterHandler(document.querySelector("#always-open-in"), () => {
|
||||||
Logic.showPanel(ALWAYS_OPEN_IN_PICKER);
|
Logic.showPanel(ALWAYS_OPEN_IN_PICKER);
|
||||||
});
|
});
|
||||||
|
const redirectEl = document.querySelector("#disable-redirect-all");
|
||||||
|
let redirectSwitchStateTo = false;
|
||||||
|
Logic.initPromise.then(() => {
|
||||||
|
const identities = Logic.identities();
|
||||||
|
redirectSwitchStateTo = identities.some(id => id.redirectDisable);
|
||||||
|
redirectEl.querySelector('.menu-text').textContent = browser.i18n.getMessage(redirectSwitchStateTo ? "enableRedirectAllContainer" : "disableRedirectAllContainer");
|
||||||
|
});
|
||||||
|
Utils.addEnterHandler(redirectEl, async () => {
|
||||||
|
try {
|
||||||
|
await browser.runtime.sendMessage({
|
||||||
|
method: "setRedirectState",
|
||||||
|
state: redirectSwitchStateTo,
|
||||||
|
global: true
|
||||||
|
});
|
||||||
|
window.close();
|
||||||
|
} catch (e) {
|
||||||
|
window.close();
|
||||||
|
}
|
||||||
|
});
|
||||||
Utils.addEnterHandler(document.querySelector("#sort-containers-link"), async () => {
|
Utils.addEnterHandler(document.querySelector("#sort-containers-link"), async () => {
|
||||||
try {
|
try {
|
||||||
await browser.runtime.sendMessage({
|
await browser.runtime.sendMessage({
|
||||||
|
@ -972,6 +993,7 @@ Logic.registerPanel(P_CONTAINER_INFO, {
|
||||||
}
|
}
|
||||||
|
|
||||||
this.intializeShowHide(identity);
|
this.intializeShowHide(identity);
|
||||||
|
this.initializeRedirectSwitch(identity);
|
||||||
|
|
||||||
// Let's retrieve the list of tabs.
|
// Let's retrieve the list of tabs.
|
||||||
const tabs = await browser.runtime.sendMessage({
|
const tabs = await browser.runtime.sendMessage({
|
||||||
|
@ -993,6 +1015,27 @@ Logic.registerPanel(P_CONTAINER_INFO, {
|
||||||
return this.buildOpenTabTable(tabs);
|
return this.buildOpenTabTable(tabs);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
initializeRedirectSwitch(identity) {
|
||||||
|
const redirectEl = document.querySelector("#disable-redirect");
|
||||||
|
Utils.addEnterHandler(redirectEl, async () => {
|
||||||
|
try {
|
||||||
|
browser.runtime.sendMessage({
|
||||||
|
method: "setRedirectState",
|
||||||
|
state: identity.redirectDisable,
|
||||||
|
cookieStoreId: Logic.currentCookieStoreId()
|
||||||
|
});
|
||||||
|
window.close();
|
||||||
|
} catch (e) {
|
||||||
|
window.close();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// const hideShowIcon = document.getElementById("container-info-hideorshow-icon");
|
||||||
|
// hideShowIcon.src = identity.hasHiddenTabs ? CONTAINER_UNHIDE_SRC : CONTAINER_HIDE_SRC;
|
||||||
|
|
||||||
|
const redirectLabel = document.getElementById("disable-redirect-this-container");
|
||||||
|
redirectLabel.textContent = browser.i18n.getMessage(identity.redirectDisable ? "enableRedirectThisContainer" : "disableRedirectThisContainer");
|
||||||
|
},
|
||||||
intializeShowHide(identity) {
|
intializeShowHide(identity) {
|
||||||
const hideContEl = document.querySelector("#hideorshow-container");
|
const hideContEl = document.querySelector("#hideorshow-container");
|
||||||
if (identity.numberOfOpenTabs === 0 && !identity.hasHiddenTabs) {
|
if (identity.numberOfOpenTabs === 0 && !identity.hasHiddenTabs) {
|
||||||
|
@ -2376,7 +2419,7 @@ Logic.registerPanel(P_CONTAINERS_ACHIEVEMENT, {
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
Logic.init();
|
Logic.initPromise = Logic.init();
|
||||||
|
|
||||||
window.addEventListener("resize", function () {
|
window.addEventListener("resize", function () {
|
||||||
//for overflow menu
|
//for overflow menu
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"manifest_version": 2,
|
"manifest_version": 2,
|
||||||
"name": "Firefox Multi-Account Containers",
|
"name": "Firefox Multi-Account Containers DEV",
|
||||||
"version": "8.2.0",
|
"version": "8.2.0",
|
||||||
"incognito": "not_allowed",
|
"incognito": "not_allowed",
|
||||||
"description": "__MSG_extensionDescription__",
|
"description": "__MSG_extensionDescription__",
|
||||||
|
|
|
@ -149,6 +149,14 @@
|
||||||
</span>
|
</span>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr class="menu-item hover-highlight keyboard-nav" id="disable-redirect-all" tabindex="0">
|
||||||
|
<td>
|
||||||
|
<img class="menu-icon" alt="" src="/img/disable-redirect.svg" />
|
||||||
|
<span class="menu-text" data-i18n-message-id="disableRedirectAllContainer"></span>
|
||||||
|
<span class="menu-arrow">
|
||||||
|
</span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<hr>
|
<hr>
|
||||||
<div class="sub-header-wrapper flx-row flx-space-between">
|
<div class="sub-header-wrapper flx-row flx-space-between">
|
||||||
|
@ -236,6 +244,14 @@
|
||||||
</span>
|
</span>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr class="menu-item hover-highlight keyboard-nav" id="disable-redirect" tabindex="0">
|
||||||
|
<td>
|
||||||
|
<img class="menu-icon" alt="" src="/img/disable-redirect.svg" />
|
||||||
|
<span class="menu-text" id="disable-redirect-this-container" data-i18n-message-id="disableRedirectThisContainer"></span>
|
||||||
|
<span class="menu-arrow">
|
||||||
|
</span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
<tr class="menu-item hover-highlight keyboard-nav" id="clear-container-storage" tabindex="0">
|
<tr class="menu-item hover-highlight keyboard-nav" id="clear-container-storage" tabindex="0">
|
||||||
<td>
|
<td>
|
||||||
<img class="menu-icon clear-storage-icon" alt="" src="img/container-delete.svg" />
|
<img class="menu-icon clear-storage-icon" alt="" src="img/container-delete.svg" />
|
||||||
|
|
Loading…
Add table
Reference in a new issue