diff --git a/src/bg.js b/src/bg.js index 43eea90..0607498 100644 --- a/src/bg.js +++ b/src/bg.js @@ -1,24 +1,13 @@ const kTST_ID = 'treestyletab@piro.sakura.ne.jp'; const MY_EXTENSION_NAME = 'tab-groupcolor'; -var changeIcon = function(color) { - var getFavicon = function() { - var favicon = undefined; - var nodeList = document.getElementsByTagName("link"); - for (var i = 0; i < nodeList.length; i++) { - if ((nodeList[i].getAttribute("rel") == "icon") || (nodeList[i].getAttribute("rel") == "shortcut icon")) { - favicon = nodeList[i].getAttribute("href"); - } - } - return favicon; - }; - +var changeIcon = function(color, currentIcon) { var canvas = document.createElement('canvas'); canvas.width = 16; canvas.height = 16; var ctx = canvas.getContext('2d'); var img = new Image(); - img.src = getFavicon(); + img.src = currentIcon; img.onload = function() { ctx.drawImage(img, 0, 0); ctx.fillStyle = color; @@ -67,7 +56,10 @@ var getTabParent = (tabs, id, currentTopLevelTabPos) => { } if (tabs[i].id === id) { - return currentTopLevelTabPos; + return { + parentIndex: currentTopLevelTabPos, + faviconUrl: tabs[i].favIconUrl + }; } else { if (tabs[i].children && tabs[i].children.length > 0) { let ret = getTabParent(tabs[i].children, id, currentTopLevelTabPos); @@ -87,13 +79,26 @@ var updateAllColorsOnAllTabs = async () => { window: w.id }); - for (let i = 0; i < tstTabs.length; i++) { - if (tstTabs[i].status === 'complete') { - browser.tabs.executeScript(tstTabs[i].id, { - code: '(' + changeIcon.toString() + ')("' + generateRandomColor(getTabParent(tstTabs, tstTabs[i].id)) + '")' - }); + var changeTabs = (tabs) => { + + for (let i = 0; i < tabs.length; i++) { + + if (tabs[i].status === 'complete') { + let t = getTabParent(tstTabs, tabs[i].id); + browser.tabs.executeScript(tabs[i].id, { + code: '(' + changeIcon.toString() + ')' + + '("' + generateRandomColor(t.parentIndex) + '", "' + t.faviconUrl + '")' + }); + } + + if (tabs[i].children && tabs[i].children.length > 0) { + changeTabs(tabs[i].children); + } } - } + }; + + changeTabs(tstTabs); + }); } @@ -112,14 +117,17 @@ browser.runtime.onMessageExternal.addListener((aMessage, aSender) => { //when a tab is created browser.tabs.onUpdated.addListener(async (tabId, changeInfo, tab) => { - var tstTab = await browser.runtime.sendMessage(kTST_ID, { + var tstTabs = await browser.runtime.sendMessage(kTST_ID, { type: 'get-tree', window: tab.windowId }); if (tab.status === 'complete') { + var t = getTabParent(tstTabs, tab.id); + browser.tabs.executeScript(tab.id, { - code: '(' + changeIcon.toString() + ')("' + generateRandomColor(getTabParent(tstTab, tab.id)) + '")' + code: '(' + changeIcon.toString() + ')' + + '("' + generateRandomColor(t.parentIndex) + '", "' + t.faviconUrl + '")' }); } });