Merge pull request #76 from bakulf/sort

Issue #74: pinned tabs sorted
This commit is contained in:
Andrea Marchesini 2017-01-11 14:32:33 +00:00 committed by GitHub
commit 8598c76e25

View file

@ -177,42 +177,51 @@ let ContainerService = {
},
sortTabs() {
return new Promise(resolve => {
for (let window of windows.browserWindows) {
// From model to XUL window.
window = viewFor(window);
function sortTabsInternal(window, pinnedTabs) {
// From model to XUL window.
const xulWindow = viewFor(window);
let tabs = tabsUtils.getTabs(window);
const tabs = tabsUtils.getTabs(xulWindow);
let pos = 0;
let pos = 0;
// Let"s collect UCIs/tabs for this window.
let map = new Map;
for (let tab of tabs) {
if (tabsUtils.isPinned(tab)) {
// pinned tabs must be consider as taken positions.
++pos;
continue;
}
let userContextId = parseInt(tab.getAttribute("usercontextid") || 0, 10);
if (!map.has(userContextId)) {
map.set(userContextId, []);
}
map.get(userContextId).push(tab);
// Let's collect UCIs/tabs for this window.
let map = new Map;
for (const tab of tabs) {
if (pinnedTabs && !tabsUtils.isPinned(tab)) {
// We don't have, or we already handled all the pinned tabs.
break;
}
// Let"s sort the map.
let sortMap = new Map([...map.entries()].sort((a, b) => a[0] > b[0]));
if (!pinnedTabs && tabsUtils.isPinned(tab)) {
// pinned tabs must be consider as taken positions.
++pos;
continue;
}
// Let"s move tabs.
sortMap.forEach(tabs => {
for (let tab of tabs) {
window.gBrowser.moveTabTo(tab, pos++);
}
});
let userContextId = parseInt(tab.getAttribute("usercontextid") || 0, 10);
if (!map.has(userContextId)) {
map.set(userContextId, []);
}
map.get(userContextId).push(tab);
}
// Let's sort the map.
const sortMap = new Map([...map.entries()].sort((a, b) => a[0] > b[0]));
// Let's move tabs.
sortMap.forEach(tabs => {
for (const tab of tabs) {
xulWindow.gBrowser.moveTabTo(tab, pos++);
}
});
}
return new Promise(resolve => {
for (let window of windows.browserWindows) {
// First the pinned tabs, then the normal ones.
sortTabsInternal(window, true);
sortTabsInternal(window, false);
}
resolve(null);
});
},