fix #9: implement sorting tabs by container (#23)

This commit is contained in:
luke crouch 2016-12-29 09:09:19 -06:00 committed by Jonathan Kingston
parent 3c06f76ab3
commit d2978510ca
4 changed files with 36 additions and 7 deletions

View file

@ -1,9 +1,8 @@
const {ContextualIdentityService} = require('resource://gre/modules/ContextualIdentityService.jsm'); /* global require */
const tabs = require('sdk/tabs'); const tabs = require('sdk/tabs');
const webExtension = require('sdk/webextension'); const webExtension = require('sdk/webextension');
function handleWebExtensionMessage(message, sender, sendReply) { function handleWebExtensionMessage(message, sender, sendReply) {
console.log(message);
switch (message) { switch (message) {
case 'open-containers-preferences': case 'open-containers-preferences':
tabs.open('about:preferences#containers'); tabs.open('about:preferences#containers');

View file

@ -16,10 +16,10 @@ function showContainer(containerId) {
browser.contextualIdentities.show(containerId); browser.contextualIdentities.show(containerId);
} }
browser.contextualIdentities.query({}).then(identites=> { browser.contextualIdentities.query({}).then(identities=> {
const identitiesListElement = document.querySelector('.identities-list'); const identitiesListElement = document.querySelector('.identities-list');
identites.forEach(identity=> { identities.forEach(identity=> {
const identityRow = ` const identityRow = `
<tr data-identity-cookie-store-id="${identity.cookieStoreId}" > <tr data-identity-cookie-store-id="${identity.cookieStoreId}" >
<td><div class="userContext-icon" <td><div class="userContext-icon"
@ -70,3 +70,32 @@ document.querySelector('#edit-containers-link').addEventListener('click', ()=> {
window.close(); window.close();
}); });
}); });
function moveTabs(sortedTabsArray) {
let positionIndex = 0;
sortedTabsArray.forEach(tabID=> {
browser.tabs.move(tabID, {index: positionIndex});
positionIndex++;
});
}
document.querySelector('#sort-containers-link').addEventListener('click', ()=> {
browser.contextualIdentities.query({}).then(identities=> {
identities.unshift({cookieStoreId: 'firefox-default'});
browser.tabs.query({}).then(tabsArray=> {
const sortedTabsArray = [];
identities.forEach(identity=> {
tabsArray.forEach(tab=> {
if (tab.cookieStoreId === identity.cookieStoreId) {
sortedTabsArray.push(tab.id);
}
});
});
moveTabs(sortedTabsArray);
});
});
});

View file

@ -22,7 +22,9 @@
"permissions": [ "permissions": [
"cookies", "cookies",
"experiments.contextualidentities", "experiments.contextualidentities",
"contextualidentities" "contextualidentities",
"tabs",
"cookies"
], ],
"browser_action": { "browser_action": {
@ -36,4 +38,3 @@
} }
} }

View file

@ -14,7 +14,7 @@
<h4>Containers</h4> <h4>Containers</h4>
</div> </div>
<div class="small-2 columns header-column"> <div class="small-2 columns header-column">
<img alt="Sort Containers" class="header-icon" src="/img/container-sort.svg"> <a id="sort-containers-link"><img alt="Sort Containers" class="header-icon" src="/img/container-sort.svg"></a>
</div> </div>
</div> </div>
<table class="unstriped hover"> <table class="unstriped hover">