const storageArea = browser.storage.local; const tabsAction = browser.tabs; const searchBar = document.getElementById("searchBar"); const errHandler = document.getElementById("errorZone"); const listZone = document.getElementById("listZone"); const notFoundText = document.createTextNode("Search not found..."); const tabImg = browser.extension.getURL("icons/tab.png"); var oldElm = ""; var plusTag = "" var currentWinId = undefined; var newWinId = undefined; var focusedWinID = undefined; var windowIndex = 0; function logTabs(tabs) { windowIndex = 0; tabsAction.query({currentWindow: true, active: true}).then((tab) => { focusedWinID = tab[0].windowId; }, focusedWinID).then(() => { for (let tab of tabs) { currentWinId = tab.windowId; if (currentWinId == newWinId) { createContainer(tab); } else { if (windowIndex != 0) { var pTag = document.createElement("P"); var msg = (focusedWinID == tab.windowId) ? "[ Current Window ] " : "Window: " + tab.windowId; var pText = document.createTextNode(msg); pTag.className = "windowIdHeaders"; pTag.appendChild(pText); listZone.appendChild(pTag); windowIndex++; createContainer(tab); } else { createContainer(tab); windowIndex = 1; } } newWinId = currentWinId; } }); newWinId = undefined; scrollToView(800); } function createContainer(tab) { var id = tab.id; var spanTag = document.createElement("DIV"); var pTag = document.createElement("P"); var iconText = document.createTextNode(tab.title); var closeImgTag = document.createElement("IMG"); var hidnStImgTag = document.createElement("IMG"); var icoImgTag = document.createElement("IMG"); // Used to properly set bg // Set oldElm so eventListeners.js has starting ref if (tab.active == true) { browser.windows.getCurrent().then((window) => { if (tab.windowId == window.id) { spanTag.className = "block block-focused"; if (oldElm) { oldElm.setAttribute("class", "block"); } oldElm = spanTag; } }, tab, oldElm, spanTag); } spanTag.setAttribute("tabID", tab.id); spanTag.title = tab.title; spanTag.id = "iconElm"; closeImgTag.id = "closeBttn"; closeImgTag.className = "closeImg"; closeImgTag.src = "../icons/x.png"; hidnStImgTag.id = "hideTgglBttn" hidnStImgTag.className= "hiderImg"; pTag.className = "pTagTitleText"; if (!tab.hidden) { spanTag.className = "block"; hidnStImgTag.src = "../icons/eyeOpen.png"; } else { spanTag.className = "block hiddenBGColor"; hidnStImgTag.src = "../icons/eyeClosed.png"; } spanTag.style.backgroundImage = "url(" + tab.favIconUrl + ")"; icoImgTag.src = tab.favIconUrl; icoImgTag.onerror = function() { spanTag.style.backgroundImage = "url(" + tabImg + ")"; } spanTag.appendChild(closeImgTag); spanTag.appendChild(hidnStImgTag); pTag.appendChild(iconText); spanTag.appendChild(pTag); listZone.appendChild(spanTag); } function createTab() { tabsAction.create({}) .then(function (tab) { createContainer(tab); }).then(function () { listZone.appendChild(plusTag); }); } function onError(error) { console.log(`Error: ${error}`); } function getTabs() { clearNodes(listZone); storageArea.get("searchMode").then((results) => { var target = document.getElementById("searchMode"); if (Object.keys(results).length > 0) { var fileKeys = Object.keys(results); for (let fileKey of fileKeys) { var key = results[fileKey]; if (key) { target.title = "Searching curent windows..."; target.children[0].src = "../icons/windows.png"; target.setAttribute("searchwindowsmode", true); tabsAction.query({}).then(logTabs, onError) .then(resetWinIndex, onError); } else { target.title = "Searching curent window..."; target.children[0].src = "../icons/window.png"; target.setAttribute("searchwindowsmode", false); tabsAction.query({currentWindow: true}) .then(logTabs, onError); } } } else { setSearchMode(target, "curent window", "window", false); } }); } async function setSearchMode(target, text, img, state) { target.title = "Searching " + text + "..."; target.children[0].src = "../icons/" + img + ".png"; target.setAttribute("searchwindowsmode", state); await storageArea.set({"searchMode": state }); getTabs(); // No loop b/c object keys will be greater than 0 after setup } function clearNodes(targetNode) { while (targetNode.firstChild) { targetNode.removeChild(targetNode.firstChild); } } function resetWinIndex() { windowIndex = 0; } getTabs();