From ef204d46ab7a7c4c444e82fa3f723ae4fc76dd52 Mon Sep 17 00:00:00 2001 From: Will Bamberg Date: Tue, 22 Mar 2016 13:59:41 -0700 Subject: [PATCH 1/3] handle pinned tabs correctly --- tabs-tabs-tabs/tabs.js | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/tabs-tabs-tabs/tabs.js b/tabs-tabs-tabs/tabs.js index 38919e6..73d730d 100644 --- a/tabs-tabs-tabs/tabs.js +++ b/tabs-tabs-tabs/tabs.js @@ -1,23 +1,39 @@ +function firstUnpinnedTab(tabs) { + for (var tab of tabs) { + if (!tab.pinned) { + return tab.index; + } + } +} + document.addEventListener("click", function(e) { function callOnActiveTab(callback) { chrome.tabs.query({}, function(tabs) { for (var tab of tabs) { if (tab.active) { - callback(tab); + callback(tab, tabs); } } }); } if (e.target.id === "tabs-move-beginning") { - callOnActiveTab((tab) => { - chrome.tabs.move([tab.id], {index: 0}); + callOnActiveTab((tab, tabs) => { + var destination = 0; + if (!tab.pinned) { + destination = firstUnpinnedTab(tabs); + } + chrome.tabs.move([tab.id], {index: destination}); }); } if (e.target.id === "tabs-move-end") { - callOnActiveTab((tab) => { - chrome.tabs.move([tab.id], {index: -1}); + callOnActiveTab((tab, tabs) => { + var destination = -1; + if (tab.pinned) { + destination = firstUnpinnedTab(tabs); + } + chrome.tabs.move([tab.id], {index: destination}); }); } From ce8f0aac4099dc31c544235ae84a76b0268fa991 Mon Sep 17 00:00:00 2001 From: Will Bamberg Date: Tue, 22 Mar 2016 16:15:06 -0700 Subject: [PATCH 2/3] restrict to current window's tabs; fix a problem with last-pinned-tab's index --- tabs-tabs-tabs/tabs.js | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/tabs-tabs-tabs/tabs.js b/tabs-tabs-tabs/tabs.js index 73d730d..227de79 100644 --- a/tabs-tabs-tabs/tabs.js +++ b/tabs-tabs-tabs/tabs.js @@ -8,7 +8,7 @@ function firstUnpinnedTab(tabs) { document.addEventListener("click", function(e) { function callOnActiveTab(callback) { - chrome.tabs.query({}, function(tabs) { + chrome.tabs.query({windowId: chrome.windows.WINDOW_ID_CURRENT}, function(tabs) { for (var tab of tabs) { if (tab.active) { callback(tab, tabs); @@ -19,21 +19,22 @@ document.addEventListener("click", function(e) { if (e.target.id === "tabs-move-beginning") { callOnActiveTab((tab, tabs) => { - var destination = 0; + var index = 0; if (!tab.pinned) { - destination = firstUnpinnedTab(tabs); + index = firstUnpinnedTab(tabs); } - chrome.tabs.move([tab.id], {index: destination}); + chrome.tabs.move([tab.id], {index}); }); } if (e.target.id === "tabs-move-end") { callOnActiveTab((tab, tabs) => { - var destination = -1; + var index = -1; if (tab.pinned) { - destination = firstUnpinnedTab(tabs); + var lastPinnedTab = Math.max(0, firstUnpinnedTab(tabs) - 1); + index = lastPinnedTab; } - chrome.tabs.move([tab.id], {index: destination}); + chrome.tabs.move([tab.id], {index}); }); } From 18713d4a55fc432a898d097b4318fcfd34a70103 Mon Sep 17 00:00:00 2001 From: Will Bamberg Date: Wed, 23 Mar 2016 11:27:40 -0700 Subject: [PATCH 3/3] use currentWindow:true instead of windowId to select current window --- tabs-tabs-tabs/tabs.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tabs-tabs-tabs/tabs.js b/tabs-tabs-tabs/tabs.js index 227de79..0ab39bd 100644 --- a/tabs-tabs-tabs/tabs.js +++ b/tabs-tabs-tabs/tabs.js @@ -8,7 +8,7 @@ function firstUnpinnedTab(tabs) { document.addEventListener("click", function(e) { function callOnActiveTab(callback) { - chrome.tabs.query({windowId: chrome.windows.WINDOW_ID_CURRENT}, function(tabs) { + chrome.tabs.query({currentWindow: true}, function(tabs) { for (var tab of tabs) { if (tab.active) { callback(tab, tabs);