Compare commits

...

20 Commits

Author SHA1 Message Date
luke crouch f0afc0da36 Merge pull request #1854 from mozilla/version-bump
Update version number for new release
2020-08-25 11:54:16 -05:00
Maxx Crawford fc070b2d0d Update version number for new release 2020-08-25 11:40:01 -05:00
luke crouch 899476e81a Merge pull request #1835 from Moonloard/replace-tab
Replace tab instead of creating a new one (#1765 #1704 #1590  #1837)
2020-08-14 11:11:19 -05:00
Moonloard 518f1cca89 option name adjusted 2020-07-27 22:49:33 +02:00
Moonloard 997fe4db12 description of option adjusted 2020-07-27 22:42:55 +02:00
Moonloard a5f6f8381a remove unnecessary line breaks 2020-07-27 22:22:42 +02:00
Moonloard 46d76dfaa3 new option to replace current tab when a assigned domain is opened 2020-07-27 22:12:49 +02:00
Maxx Crawford 00a1ce9dca Merge pull request #1815 from mozilla/1781-site-isolation-save-fix
Site isolation saved changes do not affect other containers
2020-07-16 21:09:30 -05:00
Maxx Crawford b6f3c15999 Bumped version number for patch 2020-07-15 10:42:08 -05:00
Maxx Crawford 024fb03c33 Fixed #1781 - Reset checkbox listener to keep event queue to 0 2020-07-15 10:41:12 -05:00
luke crouch de8d0b28ea Merge pull request #1811 from mozilla/1810-restore-new-tab-keyboard-nav
Fixed #1810 - Split container item funcitonality
2020-07-14 19:53:49 -05:00
Maxx Crawford 8cffccccce Merge pull request #1809 from mozilla/fix-manage-site-list
fix space character typo in classList.add argument
2020-07-14 16:56:07 -05:00
Maxx Crawford 7f31a92ede Fixed #1810 - Split container item funcitonality 2020-07-14 16:49:49 -05:00
luke crouch b47291ae87 Merge pull request #1780 from mozilla/1779-manage-site-list-icon-fix
Fixed #1779 - Added CSS override for favicons on the Manage Site List panel
2020-07-14 15:51:16 -05:00
luke crouch 8de231f5e9 fix space character typo in classList.add argument 2020-07-14 15:34:07 -05:00
luke crouch a10d222ce7 Merge pull request #1794 from ericlee4/close-button
fix #1788
2020-07-14 11:07:19 -05:00
luke crouch 487befda65 Merge pull request #1798 from kendallcorner/GH-1785-keyboard-nav
Fixed first panel keyboard arrow nav.  Added second panel keyboard nav.
2020-07-14 11:02:04 -05:00
Kendall Werts 28222e510f Fixed first panel keyboard arrow nav. Added second panel keyboard nav. 2020-07-12 22:01:14 -05:00
Eric Lee a2a11d053b fix #1788
close button not found
2020-07-12 15:36:50 -04:00
Maxx Crawford 5e99af0993 Fixed #1779 - Added CSS override for favicons on the Manage Site List panel 2020-07-09 15:29:33 -05:00
10 changed files with 219 additions and 154 deletions
+1 -1
View File
@@ -2,7 +2,7 @@
"name": "testpilot-containers", "name": "testpilot-containers",
"title": "Multi-Account Containers", "title": "Multi-Account Containers",
"description": "Containers helps you keep all the parts of your online life contained in different tabs. Custom labels and color-coded tabs help keep different activities — like online shopping, travel planning, or checking work email — separate.", "description": "Containers helps you keep all the parts of your online life contained in different tabs. Custom labels and color-coded tabs help keep different activities — like online shopping, travel planning, or checking work email — separate.",
"version": "7.0.0", "version": "7.1.0",
"author": "Andrea Marchesini, Luke Crouch and Jonathan Kingston", "author": "Andrea Marchesini, Luke Crouch and Jonathan Kingston",
"bugs": { "bugs": {
"url": "https://github.com/mozilla/multi-account-containers/issues" "url": "https://github.com/mozilla/multi-account-containers/issues"
+7 -2
View File
@@ -703,12 +703,16 @@ h3.title {
color: #fff; color: #fff;
} }
.menu-text { .menu-item-name {
display: flex;
inline-size: calc(100% - 40px); inline-size: calc(100% - 40px);
line-height: 24px;
max-inline-size: 260px; max-inline-size: 260px;
} }
.menu-text {
line-height: 24px;
}
.menu-icon { .menu-icon {
display: block; display: block;
height: 16px; height: 16px;
@@ -721,6 +725,7 @@ h3.title {
} }
/* Maintain 1:1 square ratio for Favicons of websites added to a specific container */ /* Maintain 1:1 square ratio for Favicons of websites added to a specific container */
#edit-sites-assigned .menu-icon,
#container-info-table .menu-icon { #container-info-table .menu-icon {
inline-size: 16px; inline-size: 16px;
} }
+8 -1
View File
@@ -51,6 +51,11 @@ window.assignManager = {
return !!syncEnabled; return !!syncEnabled;
}, },
async getReplaceTabEnabled() {
const { replaceTabEnabled } = await browser.storage.local.get("replaceTabEnabled");
return !!replaceTabEnabled;
},
getByUrlKey(siteStoreKey) { getByUrlKey(siteStoreKey) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
this.area.get([siteStoreKey]).then((storageResponse) => { this.area.get([siteStoreKey]).then((storageResponse) => {
@@ -233,9 +238,11 @@ window.assignManager = {
return {}; return {};
} }
} }
const replaceTabEnabled = await this.storageArea.getReplaceTabEnabled();
const removeTab = backgroundLogic.NEW_TAB_PAGES.has(tab.url) const removeTab = backgroundLogic.NEW_TAB_PAGES.has(tab.url)
|| (messageHandler.lastCreatedTab || (messageHandler.lastCreatedTab
&& messageHandler.lastCreatedTab.id === tab.id); && messageHandler.lastCreatedTab.id === tab.id)
|| replaceTabEnabled;
const openTabId = removeTab ? tab.openerTabId : tab.id; const openTabId = removeTab ? tab.openerTabId : tab.id;
if (!this.canceledRequests[tab.id]) { if (!this.canceledRequests[tab.id]) {
+10 -10
View File
@@ -16,25 +16,24 @@ async function requestPermissions() {
async function enableDisableSync() { async function enableDisableSync() {
const checkbox = document.querySelector("#syncCheck"); const checkbox = document.querySelector("#syncCheck");
if (checkbox.checked) { await browser.storage.local.set({syncEnabled: !!checkbox.checked});
await browser.storage.local.set({syncEnabled: true});
} else {
await browser.storage.local.set({syncEnabled: false});
}
browser.runtime.sendMessage({ method: "resetSync" }); browser.runtime.sendMessage({ method: "resetSync" });
} }
async function enableDisableReplaceTab() {
const checkbox = document.querySelector("#replaceTabCheck");
await browser.storage.local.set({replaceTabEnabled: !!checkbox.checked});
}
async function setupOptions() { async function setupOptions() {
const hasPermission = await browser.permissions.contains({permissions: ["bookmarks"]}); const hasPermission = await browser.permissions.contains({permissions: ["bookmarks"]});
const { syncEnabled } = await browser.storage.local.get("syncEnabled"); const { syncEnabled } = await browser.storage.local.get("syncEnabled");
const { replaceTabEnabled } = await browser.storage.local.get("replaceTabEnabled");
if (hasPermission) { if (hasPermission) {
document.querySelector("#bookmarksPermissions").checked = true; document.querySelector("#bookmarksPermissions").checked = true;
} }
if (syncEnabled) { document.querySelector("#syncCheck").checked = !!syncEnabled;
document.querySelector("#syncCheck").checked = true; document.querySelector("#replaceTabCheck").checked = !!replaceTabEnabled;
} else {
document.querySelector("#syncCheck").checked = false;
}
setupContainerShortcutSelects(); setupContainerShortcutSelects();
} }
@@ -82,6 +81,7 @@ function resetOnboarding() {
document.addEventListener("DOMContentLoaded", setupOptions); document.addEventListener("DOMContentLoaded", setupOptions);
document.querySelector("#bookmarksPermissions").addEventListener( "change", requestPermissions); document.querySelector("#bookmarksPermissions").addEventListener( "change", requestPermissions);
document.querySelector("#syncCheck").addEventListener( "change", enableDisableSync); document.querySelector("#syncCheck").addEventListener( "change", enableDisableSync);
document.querySelector("#replaceTabCheck").addEventListener( "change", enableDisableReplaceTab);
document.querySelector("button").addEventListener("click", resetOnboarding); document.querySelector("button").addEventListener("click", resetOnboarding);
for (let i=0; i < NUMBER_OF_KEYBOARD_SHORTCUTS; i++) { for (let i=0; i < NUMBER_OF_KEYBOARD_SHORTCUTS; i++) {
+140 -105
View File
@@ -30,6 +30,13 @@ const P_CONTAINER_DELETE = "containerDelete";
const P_CONTAINERS_ACHIEVEMENT = "containersAchievement"; const P_CONTAINERS_ACHIEVEMENT = "containersAchievement";
const P_CONTAINER_ASSIGNMENTS = "containerAssignments"; const P_CONTAINER_ASSIGNMENTS = "containerAssignments";
function addRemoveSiteIsolation() {
const identity = Logic.currentIdentity();
browser.runtime.sendMessage({
method: "addRemoveSiteIsolation",
cookieStoreId: identity.cookieStoreId
});
}
async function getExtensionInfo() { async function getExtensionInfo() {
const manifestPath = browser.extension.getURL("manifest.json"); const manifestPath = browser.extension.getURL("manifest.json");
@@ -219,14 +226,16 @@ const Logic = {
}, },
async showPanel(panel, currentIdentity = null, backwards = false) { async showPanel(panel, currentIdentity = null, backwards = false) {
// Invalid panel... ?!?
if (!(panel in this._panels)) {
throw new Error("Something really bad happened. Unknown panel: " + panel);
}
if (!backwards || !this._currentPanel) { if (!backwards || !this._currentPanel) {
this._previousPanelPath.push(this._currentPanel); this._previousPanelPath.push(this._currentPanel);
} }
// If invalid panel, reset panels.
if (!(panel in this._panels)) {
panel = P_CONTAINERS_LIST;
this._previousPanelPath = [];
}
this._currentPanel = panel; this._currentPanel = panel;
this._currentIdentity = currentIdentity; this._currentIdentity = currentIdentity;
@@ -348,6 +357,77 @@ const Logic = {
}); });
this._listenerSet = true; this._listenerSet = true;
} }
},
shortcutListener(e){
function openNewContainerTab(identity) {
try {
browser.tabs.create({
cookieStoreId: identity.cookieStoreId
});
window.close();
} catch (e) {
window.close();
}
}
const identities = Logic.identities();
if ((e.keyCode >= 49 && e.keyCode <= 57) &&
Logic._currentPanel === "containersList") {
const identity = identities[e.keyCode - 49];
if (identity) {
openNewContainerTab(identity);
}
}
},
keyboardNavListener(e){
const panelSelector = Logic.getPanelSelector(Logic._panels[Logic._currentPanel]);
const selectables = [...document.querySelectorAll(`${panelSelector} .keyboard-nav[tabindex='0']`)];
const element = document.activeElement;
const backButton = document.querySelector(`${panelSelector} .keyboard-nav-back`);
const index = selectables.indexOf(element) || 0;
function next() {
const nextElement = selectables[index + 1];
if (nextElement) {
nextElement.focus();
}
}
function previous() {
const previousElement = selectables[index - 1];
if (previousElement) {
previousElement.focus();
}
}
switch (e.keyCode) {
case 40:
next();
break;
case 38:
previous();
break;
case 39:
{
if(element){
element.click();
}
// If one Container is highlighted,
if (element.classList.contains("keyboard-right-arrow-override")) {
element.querySelector(".menu-right-float").click();
}
break;
}
case 37:
{
if(backButton){
backButton.click();
}
break;
}
default:
break;
}
} }
}; };
@@ -560,71 +640,10 @@ Logic.registerPanel(P_CONTAINERS_LIST, {
window.close(); window.close();
} }
}); });
document.addEventListener("keydown", (e) => {
function openNewContainerTab(identity) {
try {
browser.tabs.create({
cookieStoreId: identity.cookieStoreId
});
window.close();
} catch (e) {
window.close();
}
}
const identities = Logic.identities();
const selectables = [...document.querySelectorAll(".open-newtab[tabindex='0']")];
const element = document.activeElement;
const index = selectables.indexOf(element) || 0;
function next() {
const nextElement = selectables[index + 1];
if (nextElement) {
nextElement.focus();
}
}
function previous() {
const previousElement = selectables[index - 1];
if (previousElement) {
previousElement.focus();
}
}
switch (e.keyCode) {
case 40:
next();
break;
case 38:
previous();
break;
case 39:
{
const showTabs = element.parentNode.querySelector(".show-tabs");
if(showTabs) {
showTabs.click();
}
break;
}
case 37:
{
const hideTabs = document.querySelector(".panel-back-arrow");
if(hideTabs) {
hideTabs.click();
}
break;
}
default:
if ((e.keyCode >= 49 && e.keyCode <= 57) &&
Logic._currentPanel === "containersList") {
const identity = identities[e.keyCode - 49];
if (identity) {
openNewContainerTab(identity);
}
}
break;
}
});
}, },
unregister() { unregister() {
}, },
// This method is called when the panel is shown. // This method is called when the panel is shown.
@@ -633,19 +652,21 @@ Logic.registerPanel(P_CONTAINERS_LIST, {
Logic.identities().forEach(identity => { Logic.identities().forEach(identity => {
const tr = document.createElement("tr"); const tr = document.createElement("tr");
tr.classList.add("menu-item", "hover-highlight"); tr.classList.add("menu-item", "hover-highlight", "keyboard-nav", "keyboard-right-arrow-override");
tr.setAttribute("tabindex", "0"); tr.setAttribute("tabindex", "0");
const td = document.createElement("td"); const td = document.createElement("td");
const openTabs = identity.numberOfOpenTabs || "" ; const openTabs = identity.numberOfOpenTabs || "" ;
td.innerHTML = Utils.escaped` td.innerHTML = Utils.escaped`
<div class="menu-icon"> <div class="menu-item-name">
<div class="usercontext-icon" <div class="menu-icon">
data-identity-icon="${identity.icon}" <div class="usercontext-icon"
data-identity-color="${identity.color}"> data-identity-icon="${identity.icon}"
data-identity-color="${identity.color}">
</div>
</div> </div>
<span class="menu-text">${identity.name}</span>
</div> </div>
<span class="menu-text">${identity.name}</span>
<span class="menu-right-float"> <span class="menu-right-float">
<span class="container-count">${openTabs}</span> <span class="container-count">${openTabs}</span>
<span class="menu-arrow"> <span class="menu-arrow">
@@ -657,31 +678,46 @@ Logic.registerPanel(P_CONTAINERS_LIST, {
tr.appendChild(td); tr.appendChild(td);
Utils.addEnterHandler(tr, () => { const openInThisContainer = tr.querySelector(".menu-item-name");
Utils.addEnterHandler(openInThisContainer, () => {
try {
browser.tabs.create({
cookieStoreId: identity.cookieStoreId
});
window.close();
} catch (e) {
window.close();
}
});
Utils.addEnterOnlyHandler(tr, () => {
try {
browser.tabs.create({
cookieStoreId: identity.cookieStoreId
});
window.close();
} catch (e) {
window.close();
}
});
// Select only the ">" from the container list
const showPanelButton = tr.querySelector(".menu-right-float");
Utils.addEnterHandler(showPanelButton, () => {
Logic.showPanel(P_CONTAINER_INFO, identity); Logic.showPanel(P_CONTAINER_INFO, identity);
}); });
}); });
const list = document.querySelector("#identities-list"); const list = document.querySelector("#identities-list");
list.innerHTML = ""; list.innerHTML = "";
list.appendChild(fragment); list.appendChild(fragment);
/* Not sure why extensions require a focus for the doorhanger,
however it allows us to have a tabindex before the first selected item document.addEventListener("keydown", Logic.keyboardNavListener);
*/ document.addEventListener("keydown", Logic.shortcutListener);
// const focusHandler = () => {
// const identityList = list.querySelector("tr .clickable");
// if (identityList) {
// // otherwise this throws an error when there are no containers present.
// identityList.focus();
// document.removeEventListener("focus", focusHandler);
// }
// };
// document.addEventListener("focus", focusHandler);
// /* If the user mousedown's first then remove the focus handler */
// document.addEventListener("mousedown", () => {
// document.removeEventListener("focus", focusHandler);
// });
return Promise.resolve(); return Promise.resolve();
}, },
}); });
@@ -822,7 +858,7 @@ Logic.registerPanel(P_CONTAINER_INFO, {
for (let tab of tabs) { // eslint-disable-line prefer-const for (let tab of tabs) { // eslint-disable-line prefer-const
const tr = document.createElement("tr"); const tr = document.createElement("tr");
fragment.appendChild(tr); fragment.appendChild(tr);
tr.classList.add("menu-item", "hover-highlight"); tr.classList.add("menu-item", "hover-highlight", "keyboard-nav");
tr.setAttribute("tabindex", "0"); tr.setAttribute("tabindex", "0");
tr.innerHTML = Utils.escaped` tr.innerHTML = Utils.escaped`
<td> <td>
@@ -841,7 +877,7 @@ Logic.registerPanel(P_CONTAINER_INFO, {
window.close(); window.close();
}); });
const closeTab = document.querySelector(".trash-button"); const closeTab = tr.querySelector(".trash-button");
if (closeTab) { if (closeTab) {
Utils.addEnterHandler(closeTab, async (e) => { Utils.addEnterHandler(closeTab, async (e) => {
await browser.tabs.remove(Number(e.target.id)); await browser.tabs.remove(Number(e.target.id));
@@ -883,7 +919,7 @@ Logic.registerPanel(OPEN_NEW_CONTAINER_PICKER, {
Logic.identities().forEach(identity => { Logic.identities().forEach(identity => {
const tr = document.createElement("tr"); const tr = document.createElement("tr");
tr.classList.add("menu-item", "hover-highlight"); tr.classList.add("menu-item", "hover-highlight", "keyboard-nav");
tr.setAttribute("tabindex", "0"); tr.setAttribute("tabindex", "0");
const td = document.createElement("td"); const td = document.createElement("td");
@@ -942,7 +978,7 @@ Logic.registerPanel(MANAGE_CONTAINERS_PICKER, {
document.getElementById("new-container-div").innerHTML = Utils.escaped` document.getElementById("new-container-div").innerHTML = Utils.escaped`
<table class="menu"> <table class="menu">
<tr class="menu-item hover-highlight" id="new-container" tabindex="0"> <tr class="menu-item hover-highlight keyboard-nav" id="new-container" tabindex="0">
<td> <td>
<div class="menu-icon"><img alt="New Container" src="/img/new-16.svg" /> <div class="menu-icon"><img alt="New Container" src="/img/new-16.svg" />
</div> </div>
@@ -959,7 +995,7 @@ Logic.registerPanel(MANAGE_CONTAINERS_PICKER, {
Logic.identities().forEach(identity => { Logic.identities().forEach(identity => {
const tr = document.createElement("tr"); const tr = document.createElement("tr");
tr.classList.add("menu-item", "hover-highlight"); tr.classList.add("menu-item", "hover-highlight", "keyboard-nav");
tr.setAttribute("tabindex", "0"); tr.setAttribute("tabindex", "0");
const td = document.createElement("td"); const td = document.createElement("td");
@@ -1022,7 +1058,7 @@ Logic.registerPanel(REOPEN_IN_CONTAINER_PICKER, {
if (currentTab.cookieStoreId !== "firefox-default") { if (currentTab.cookieStoreId !== "firefox-default") {
const tr = document.createElement("tr"); const tr = document.createElement("tr");
tr.classList.add("menu-item", "hover-highlight"); tr.classList.add("menu-item", "hover-highlight", "keyboard-nav");
const td = document.createElement("td"); const td = document.createElement("td");
td.innerHTML = Utils.escaped` td.innerHTML = Utils.escaped`
@@ -1051,7 +1087,7 @@ Logic.registerPanel(REOPEN_IN_CONTAINER_PICKER, {
Logic.identities().forEach(identity => { Logic.identities().forEach(identity => {
if (currentTab.cookieStoreId !== identity.cookieStoreId) { if (currentTab.cookieStoreId !== identity.cookieStoreId) {
const tr = document.createElement("tr"); const tr = document.createElement("tr");
tr.classList.add("menu-item", "hover-highlight"); tr.classList.add("menu-item", "hover-highlight", "keyboard-nav");
tr.setAttribute("tabindex", "0"); tr.setAttribute("tabindex", "0");
const td = document.createElement("td"); const td = document.createElement("td");
@@ -1103,7 +1139,7 @@ Logic.registerPanel(ALWAYS_OPEN_IN_PICKER, {
Logic.identities().forEach(identity => { Logic.identities().forEach(identity => {
const tr = document.createElement("tr"); const tr = document.createElement("tr");
tr.classList.add("menu-item", "hover-highlight"); tr.classList.add("menu-item", "hover-highlight", "keyboard-nav");
tr.setAttribute("tabindex", "0"); tr.setAttribute("tabindex", "0");
const td = document.createElement("td"); const td = document.createElement("td");
@@ -1196,7 +1232,7 @@ Logic.registerPanel(P_CONTAINER_ASSIGNMENTS, {
delete assignments[siteKey]; delete assignments[siteKey];
this.showAssignedContainers(assignments); this.showAssignedContainers(assignments);
}); });
trElement.classList.add("menu-item", "hover-highlight"); trElement.classList.add("menu-item", "hover-highlight", "keyboard-nav");
tableElement.appendChild(trElement); tableElement.appendChild(trElement);
}); });
} }
@@ -1213,6 +1249,9 @@ Logic.registerPanel(P_CONTAINER_EDIT, {
initialize() { initialize() {
this.initializeRadioButtons(); this.initializeRadioButtons();
Utils.addEnterHandler(document.querySelector("#close-container-edit-panel"), () => { Utils.addEnterHandler(document.querySelector("#close-container-edit-panel"), () => {
// Resets listener from siteIsolation checkbox to keep the update queue to 0.
const siteIsolation = document.querySelector("#site-isolation");
siteIsolation.removeEventListener("change", addRemoveSiteIsolation, false);
const formValues = new FormData(this._editForm); const formValues = new FormData(this._editForm);
if (formValues.get("container-id") !== NEW_CONTAINER_ID) { if (formValues.get("container-id") !== NEW_CONTAINER_ID) {
this._submitForm(); this._submitForm();
@@ -1308,14 +1347,10 @@ Logic.registerPanel(P_CONTAINER_EDIT, {
containerName.select(); containerName.select();
containerName.focus(); containerName.focus();
}); });
const siteIsolation = document.querySelector("#site-isolation"); const siteIsolation = document.querySelector("#site-isolation");
siteIsolation.checked = !!identity.isIsolated; siteIsolation.checked = !!identity.isIsolated;
siteIsolation.addEventListener( "change", function() { siteIsolation.addEventListener( "change", addRemoveSiteIsolation, false);
browser.runtime.sendMessage({
method: "addRemoveSiteIsolation",
cookieStoreId: identity.cookieStoreId
});
});
[...document.querySelectorAll("[name='container-color']")].forEach(colorInput => { [...document.querySelectorAll("[name='container-color']")].forEach(colorInput => {
colorInput.checked = colorInput.value === identity.color; colorInput.checked = colorInput.value === identity.color;
}); });
+9
View File
@@ -75,6 +75,15 @@ const Utils = {
}); });
}, },
addEnterOnlyHandler(element, handler) {
element.addEventListener("keydown", (e) => {
if (e.keyCode === 13) {
e.preventDefault();
handler(e);
}
});
},
userContextId(cookieStoreId = "") { userContextId(cookieStoreId = "") {
const userContextId = cookieStoreId.replace("firefox-container-", ""); const userContextId = cookieStoreId.replace("firefox-container-", "");
return (userContextId !== cookieStoreId) ? Number(userContextId) : false; return (userContextId !== cookieStoreId) ? Number(userContextId) : false;
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"manifest_version": 2, "manifest_version": 2,
"name": "Firefox Multi-Account Containers", "name": "Firefox Multi-Account Containers",
"version": "7.0.0", "version": "7.1.0",
"incognito": "not_allowed", "incognito": "not_allowed",
"description": "Multi-Account Containers helps you keep all the parts of your online life contained in different tabs. Custom labels and color-coded tabs help keep different activities — like online shopping, travel planning, or checking work email — separate.", "description": "Multi-Account Containers helps you keep all the parts of your online life contained in different tabs. Custom labels and color-coded tabs help keep different activities — like online shopping, travel planning, or checking work email — separate.",
"icons": { "icons": {
+7
View File
@@ -20,6 +20,13 @@
Enable Sync Enable Sync
</label> </label>
<p><em>This setting allows you to sync your containers and site assignments across devices.</em></p> <p><em>This setting allows you to sync your containers and site assignments across devices.</em></p>
<h3>Tab behaviour:</h3>
<label>
<input type="checkbox" id="replaceTabCheck">
Replace tab instead of creating a new one
</label>
<p><em>Replace the current tab if a page which is assigned to another container is opened (instead of keeping the current tab open).
Opening tabs with middle mouse button is not affected.</em></p>
<h3>Keyboard Shortcuts:</h3> <h3>Keyboard Shortcuts:</h3>
<p><em>Edit which container is opened when using the numbered shortcuts.</em></p> <p><em>Edit which container is opened when using the numbered shortcuts.</em></p>
<p><label> <p><label>
+34 -33
View File
@@ -13,7 +13,7 @@
<p> <p>
Use containers to organize tasks, manage accounts, and keep your focus where you want it. Use containers to organize tasks, manage accounts, and keep your focus where you want it.
</p> </p>
<a href="#" class="onboarding-button onboarding-start-button" tabindex="0">Get Started</a> <a href="#" class="onboarding-button onboarding-start-button keyboard-nav" tabindex="0">Get Started</a>
</div> </div>
<div class="hide panel onboarding security-onboarding-panel-1"> <div class="hide panel onboarding security-onboarding-panel-1">
@@ -22,49 +22,49 @@
<p> <p>
Use containers to organize tasks, manage accounts, and store sensitive data. Use containers to organize tasks, manage accounts, and store sensitive data.
</p> </p>
<a href="#" class="onboarding-button onboarding-start-button" tabindex="0">Get Started</a> <a href="#" class="onboarding-button onboarding-start-button keyboard-nav" tabindex="0">Get Started</a>
</div> </div>
<div class="panel onboarding onboarding-panel-2 hide"> <div class="panel onboarding onboarding-panel-2 hide">
<img class="onboarding-img" alt="How Containers Work" src="/img/onboarding-2.png" /> <img class="onboarding-img" alt="How Containers Work" src="/img/onboarding-2.png" />
<h3 class="onboarding-title">Put containers to work for you.</h3> <h3 class="onboarding-title">Put containers to work for you.</h3>
<p>Features like color-coding and separate container tabs help you find things easily, focus your attention, and minimize distractions.</p> <p>Features like color-coding and separate container tabs help you find things easily, focus your attention, and minimize distractions.</p>
<a href="#" class="onboarding-button onboarding-next-button" tabindex="0">Next</a> <a href="#" class="onboarding-button onboarding-next-button keyboard-nav" tabindex="0">Next</a>
</div> </div>
<div class="panel onboarding security-onboarding-panel-2 hide"> <div class="panel onboarding security-onboarding-panel-2 hide">
<img class="onboarding-img" alt="How Containers Work" src="/img/onboarding-2.png" /> <img class="onboarding-img" alt="How Containers Work" src="/img/onboarding-2.png" />
<h3 class="onboarding-title">Put containers to work for you.</h3> <h3 class="onboarding-title">Put containers to work for you.</h3>
<p>Color-coding helps you categorize your online life, find things easily, and minimize distractions.</p> <p>Color-coding helps you categorize your online life, find things easily, and minimize distractions.</p>
<a href="#" class="onboarding-button onboarding-next-button" tabindex="0">Next</a> <a href="#" class="onboarding-button onboarding-next-button keyboard-nav" tabindex="0">Next</a>
</div> </div>
<div class="panel onboarding onboarding-panel-3 hide"> <div class="panel onboarding onboarding-panel-3 hide">
<img class="onboarding-img" alt="How Containers Work" src="/img/onboarding-3.png" /> <img class="onboarding-img" alt="How Containers Work" src="/img/onboarding-3.png" />
<h3 class="onboarding-title">A place for everything, and everything in its place.</h3> <h3 class="onboarding-title">A place for everything, and everything in its place.</h3>
<p>Start with the containers we've created, or create your own.</p> <p>Start with the containers we've created, or create your own.</p>
<a href="#" class="onboarding-button onboarding-almost-done-button" tabindex="0">Next</a> <a href="#" class="onboarding-button onboarding-almost-done-button keyboard-nav" tabindex="0">Next</a>
</div> </div>
<div class="panel onboarding security-onboarding-panel-3 hide"> <div class="panel onboarding security-onboarding-panel-3 hide">
<img class="onboarding-img" alt="How Containers Work" src="/img/onboarding-3-security.png" /> <img class="onboarding-img" alt="How Containers Work" src="/img/onboarding-3-security.png" />
<h3 class="onboarding-title">Set boundaries for your browsing.</h3> <h3 class="onboarding-title">Set boundaries for your browsing.</h3>
<p>Cookies are stored within a container, so you can segment sensitive data and browsing history to stay organized and to limit the impact of online trackers.</p> <p>Cookies are stored within a container, so you can segment sensitive data and browsing history to stay organized and to limit the impact of online trackers.</p>
<a href="#" class="onboarding-button onboarding-almost-done-button" tabindex="0">Next</a> <a href="#" class="onboarding-button onboarding-almost-done-button keyboard-nav" tabindex="0">Next</a>
</div> </div>
<div class="panel onboarding onboarding-panel-4 hide" id="onboarding-panel-4"> <div class="panel onboarding onboarding-panel-4 hide" id="onboarding-panel-4">
<img class="onboarding-img" alt="How to assign sites to containers" src="/img/onboarding-4.png" /> <img class="onboarding-img" alt="How to assign sites to containers" src="/img/onboarding-4.png" />
<h3 class="onboarding-title">Always open sites in the containers you want.</h3> <h3 class="onboarding-title">Always open sites in the containers you want.</h3>
<p>Right-click inside a container tab to assign the site to always open in the container.</p> <p>Right-click inside a container tab to assign the site to always open in the container.</p>
<a href="#" id="onboarding-done-button" class="onboarding-button" tabindex="0">Next</a> <a href="#" id="onboarding-done-button" class="onboarding-button keyboard-nav" tabindex="0">Next</a>
</div> </div>
<div class="panel onboarding onboarding-panel-5 hide" id="onboarding-panel-5"> <div class="panel onboarding onboarding-panel-5 hide" id="onboarding-panel-5">
<img class="onboarding-img" alt="Long-press the New Tab button to create a new container tab." src="/img/onboarding-3.png" /> <img class="onboarding-img" alt="Long-press the New Tab button to create a new container tab." src="/img/onboarding-3.png" />
<h3 class="onboarding-title">Container tabs when you need them.</h3> <h3 class="onboarding-title">Container tabs when you need them.</h3>
<p>Long-press the New Tab button to create a new container tab.</p> <p>Long-press the New Tab button to create a new container tab.</p>
<a href="#" id="onboarding-longpress-button" class="onboarding-button" tabindex="0">Next</a> <a href="#" id="onboarding-longpress-button" class="onboarding-button keyboard-nav" tabindex="0">Next</a>
</div> </div>
<div class="panel onboarding onboarding-panel-6 hide" id="onboarding-panel-6"> <div class="panel onboarding onboarding-panel-6 hide" id="onboarding-panel-6">
@@ -72,8 +72,8 @@
<h3 class="onboarding-title">Syncing Containers is now Available!</h3> <h3 class="onboarding-title">Syncing Containers is now Available!</h3>
<p>Turn on Sync to share container and site assignments with any computer connected to your Firefox Account.</p> <p>Turn on Sync to share container and site assignments with any computer connected to your Firefox Account.</p>
<div class="half-button-wrapper"> <div class="half-button-wrapper">
<a herf="#" id="no-sync" class="half-onboarding-button grey-button" tabindex="0">Not Now</a> <a herf="#" id="no-sync" class="half-onboarding-button grey-button keyboard-nav" tabindex="0">Not Now</a>
<a href="#" id="start-sync-button" class="half-onboarding-button" tabindex="0">Start Syncing</a> <a href="#" id="start-sync-button" class="half-onboarding-button keyboard-nav" tabindex="0">Start Syncing</a>
</div> </div>
</div> </div>
@@ -82,8 +82,8 @@
<h3 class="onboarding-title">Firefox Account is required to sync.</h3> <h3 class="onboarding-title">Firefox Account is required to sync.</h3>
<p>Click Sign In to confirm that your Firefox Account is active.</p> <p>Click Sign In to confirm that your Firefox Account is active.</p>
<div class="half-button-wrapper"> <div class="half-button-wrapper">
<a herf="#" id="no-sign-in" class="half-onboarding-button grey-button" tabindex="0">Not Now</a> <a herf="#" id="no-sign-in" class="half-onboarding-button grey-button keyboard-nav" tabindex="0">Not Now</a>
<a href="#" id="sign-in" class="half-onboarding-button" tabindex="0">Sign In</a> <a href="#" id="sign-in" class="half-onboarding-button keyboard-nav" tabindex="0">Sign In</a>
</div> </div>
</div> </div>
@@ -112,7 +112,7 @@
</span> </span>
</a> </a>
</p> </p>
<a href="#" id="achievement-done-button" class="onboarding-button">Done</a> <a href="#" id="achievement-done-button" class="onboarding-button keyboard-nav">Done</a>
</div> </div>
<div class="panel menu-panel container-panel hide" id="container-panel"> <div class="panel menu-panel container-panel hide" id="container-panel">
@@ -124,7 +124,7 @@
</a> </a>
<hr> <hr>
<table class="menu"> <table class="menu">
<tr class="menu-item hover-highlight" id="open-new-tab-in" tabindex="0"> <tr class="menu-item hover-highlight keyboard-nav" id="open-new-tab-in" tabindex="0">
<td> <td>
<img class="menu-icon" alt="Open in New Tab" src="/img/tab-new-16.svg" /> <img class="menu-icon" alt="Open in New Tab" src="/img/tab-new-16.svg" />
<span class="menu-text">Open New Tab in...</span> <span class="menu-text">Open New Tab in...</span>
@@ -133,7 +133,7 @@
</span> </span>
</td> </td>
</tr> </tr>
<tr class="menu-item hover-highlight" id="reopen-site-in" tabindex="0"> <tr class="menu-item hover-highlight keyboard-nav" id="reopen-site-in" tabindex="0">
<td> <td>
<img class="menu-icon" alt="Open in New Tab" src="/img/refresh-16.svg" /> <img class="menu-icon" alt="Open in New Tab" src="/img/refresh-16.svg" />
<span class="menu-text">Reopen This Site in...</span> <span class="menu-text">Reopen This Site in...</span>
@@ -145,7 +145,7 @@
</table> </table>
<hr> <hr>
<table class="menu"> <table class="menu">
<tr class="menu-item hover-highlight" id="sort-containers-link" tabindex="0"> <tr class="menu-item hover-highlight keyboard-nav" id="sort-containers-link" tabindex="0">
<td> <td>
<img class="menu-icon" alt="Open in New Tab" src="/img/sort-16_1.svg" /> <img class="menu-icon" alt="Open in New Tab" src="/img/sort-16_1.svg" />
<span class="menu-text">Sort Tabs by Container</span> <span class="menu-text">Sort Tabs by Container</span>
@@ -153,7 +153,7 @@
</span> </span>
</td> </td>
</tr> </tr>
<tr class="menu-item hover-highlight" id="always-open-in" tabindex="0"> <tr class="menu-item hover-highlight keyboard-nav" id="always-open-in" tabindex="0">
<td> <td>
<img class="menu-icon" alt="Open in New Tab" src="/img/container-openin-16.svg" /> <img class="menu-icon" alt="Open in New Tab" src="/img/container-openin-16.svg" />
<span class="menu-text">Always Open This Site in...</span> <span class="menu-text">Always Open This Site in...</span>
@@ -171,13 +171,14 @@
<table class="menu" id="identities-list"> <table class="menu" id="identities-list">
<tr class="menu-item hover-highlight"> <tr class="menu-item hover-highlight">
<td> <td>
<div class="menu-icon"> <div class="menu-item-name">
<div class="usercontext-icon" <div class="menu-icon">
data-identity-icon="pet" <div class="usercontext-icon"
data-identity-color="blue"> data-identity-icon="pet"
data-identity-color="blue"></div>
</div> </div>
<span class="menu-text">Default</span>
</div> </div>
<span class="menu-text">Default</span>
<span class="menu-right-float"> <span class="menu-right-float">
<span class="container-count">22</span> <span class="container-count">22</span>
<span class="menu-arrow"> <span class="menu-arrow">
@@ -188,7 +189,7 @@
</tr> </tr>
</table> </table>
</div> </div>
<div class="bottom-btn" id="manage-containers-link" tabindex="0"> <div class="bottom-btn keyboard-nav hover-highlight" id="manage-containers-link" tabindex="0">
Manage Containers Manage Containers
</div> </div>
</div> </div>
@@ -198,10 +199,10 @@
<h3 class="title" id="container-info-title"> <h3 class="title" id="container-info-title">
Personal Personal
</h3> </h3>
<button class="btn-return arrow-left" id="close-container-info-panel" tabindex="0"></button> <button class="btn-return arrow-left keyboard-nav-back" id="close-container-info-panel" tabindex="0"></button>
<hr> <hr>
<table class="menu"> <table class="menu">
<tr class="menu-item hover-highlight" id="open-new-tab-in-info" tabindex="0"> <tr class="menu-item hover-highlight keyboard-nav" id="open-new-tab-in-info" tabindex="0">
<td> <td>
<img class="menu-icon" alt="Open in New Tab" src="/img/tab-new-16.svg" /> <img class="menu-icon" alt="Open in New Tab" src="/img/tab-new-16.svg" />
<span class="menu-text">Open New Tab in this Container</span> <span class="menu-text">Open New Tab in this Container</span>
@@ -209,7 +210,7 @@
</span> </span>
</td> </td>
</tr> </tr>
<tr class="menu-item hover-highlight" id="hideorshow-container" tabindex="0"> <tr class="menu-item hover-highlight keyboard-nav" id="hideorshow-container" tabindex="0">
<td> <td>
<img id="container-info-hideorshow-icon" class="menu-icon" alt="Hide This Container" src="img/password-hide.svg" /> <img id="container-info-hideorshow-icon" class="menu-icon" alt="Hide This Container" src="img/password-hide.svg" />
<span id="container-info-hideorshow-label" class="menu-text">Hide This Container</span> <span id="container-info-hideorshow-label" class="menu-text">Hide This Container</span>
@@ -217,7 +218,7 @@
</span> </span>
</td> </td>
</tr> </tr>
<tr class="menu-item hover-highlight" id="move-to-new-window" tabindex="0"> <tr class="menu-item hover-highlight keyboard-nav" id="move-to-new-window" tabindex="0">
<td> <td>
<img class="menu-icon" alt="Move Tabs to a New Window" src="/img/movetowindow-16.svg" /> <img class="menu-icon" alt="Move Tabs to a New Window" src="/img/movetowindow-16.svg" />
<span class="menu-text">Move Tabs to a New Window</span> <span class="menu-text">Move Tabs to a New Window</span>
@@ -225,7 +226,7 @@
</span> </span>
</td> </td>
</tr> </tr>
<tr class="menu-item hover-highlight hover-highlight" id="always-open" tabindex="0"> <tr class="menu-item hover-highlight keyboard-nav" id="always-open" tabindex="0">
<td> <td>
<img class="menu-icon" alt="Always Open Site in Container" src="/img/container-openin-16.svg" /> <img class="menu-icon" alt="Always Open Site in Container" src="/img/container-openin-16.svg" />
<span class="menu-text" id="always-open-in-info-panel">Always Open Site in Container</span> <span class="menu-text" id="always-open-in-info-panel">Always Open Site in Container</span>
@@ -240,7 +241,7 @@
</div> </div>
<div class="scrollable"> <div class="scrollable">
<table class="menu" id="container-info-table"> <table class="menu" id="container-info-table">
<tr class="menu-item hover-highlight" tabindex="0"> <tr class="menu-item hover-highlight keyboard-nav" tabindex="0">
<td> <td>
<div class="favicon"><img class="menu-icon" src="https://www.mozilla.org/favicon.ico" /></div> <div class="favicon"><img class="menu-icon" src="https://www.mozilla.org/favicon.ico" /></div>
<span class="menu-text truncate-text">www.mozillllllllllllllllllllllllllllllllllllla.org</span> <span class="menu-text truncate-text">www.mozillllllllllllllllllllllllllllllllllllla.org</span>
@@ -249,7 +250,7 @@
</tr> </tr>
</table> </table>
</div> </div>
<div class="bottom-btn" id="manage-container-link"> <div class="bottom-btn keyboard-nav hover-highlight" id="manage-container-link" tabindex="0">
Manage This Container Manage This Container
</div> </div>
</div> </div>
@@ -259,12 +260,12 @@
<h3 class="title" id="picker-title"> <h3 class="title" id="picker-title">
Multi-Account Containers Multi-Account Containers
</h3> </h3>
<button class="btn-return arrow-left" id="close-container-picker-panel" tabindex="0"></button> <button class="btn-return arrow-left keyboard-nav-back" id="close-container-picker-panel" tabindex="0"></button>
<hr> <hr>
<div id="new-container-div"></div> <div id="new-container-div"></div>
<div class="scrollable identities-list"> <div class="scrollable identities-list">
<table class="menu" id="picker-identities-list"> <table class="menu" id="picker-identities-list">
<tr class="menu-item hover-highlight"> <tr class="menu-item hover-highlight keyboard-nav">
<td> <td>
<div class="menu-icon"> <div class="menu-icon">
<div class="usercontext-icon" <div class="usercontext-icon"
@@ -305,7 +306,7 @@
<input type="checkbox" class="site-isolation" id="site-isolation" name="site-isolation"> <input type="checkbox" class="site-isolation" id="site-isolation" name="site-isolation">
<label for="site-isolation" class="options-label">Limit to Designated Sites</label> <label for="site-isolation" class="options-label">Limit to Designated Sites</label>
</div> </div>
<div class="container-options options-label manage-assigned-sites-list" id="manage-assigned-sites-list">Manage Site List... <div class="container-options options-label manage-assigned-sites-list" id="manage-assigned-sites-list" tabindex="0">Manage Site List...
</div> </div>
</div> </div>
</div> </div>
+2 -1
View File
@@ -87,7 +87,8 @@ const initializeWithTab = async (details = {
"browserActionBadgesClicked": [], "browserActionBadgesClicked": [],
"onboarding-stage": 7, "onboarding-stage": 7,
"achievements": [], "achievements": [],
"syncEnabled": true "syncEnabled": true,
"replaceTabEnabled": false
}); });
window.browser.storage.local.set.resetHistory(); window.browser.storage.local.set.resetHistory();
window.browser.storage.sync.clear(); window.browser.storage.sync.clear();