From c70553b0e467a32cd4cb6ee50af6a89c55707b91 Mon Sep 17 00:00:00 2001 From: Maxim Stewart Date: Thu, 24 May 2018 17:04:06 -0500 Subject: [PATCH] Fixed serchmode persistence and missing slot 0 tab --- README.md | 5 ++-- src/manifest.json | 5 ++-- src/scripts/eventListeners.js | 10 ++----- src/scripts/generateView.js | 56 ++++++++++++++++++++++++++++------- src/scripts/searchTabs.js | 21 +++++++++---- 5 files changed, 70 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 2d3d7ae..03be841 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,10 @@ Search Firefox tabs and get a list or automatic direct to the searched tab. # Download https://addons.mozilla.org/en-US/firefox/addon/tab-search-and-manage/ -# Version: 1.2.6 +# Version: 1.2.8 ***Note: diff --git a/src/manifest.json b/src/manifest.json index ef0b2e0..2878f28 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 2, "name": "Tab Search and Manage", - "version": "1.2.6", + "version": "1.2.8", "description": "This plugin can search, drag-n-drop ordering, and (un)hide all or some tabs.", "applications": { @@ -18,7 +18,8 @@ "permissions": [ "tabs", - "tabHide" + "tabHide", + "storage" ], "browser_action": { diff --git a/src/scripts/eventListeners.js b/src/scripts/eventListeners.js index 86892a4..3b278ef 100644 --- a/src/scripts/eventListeners.js +++ b/src/scripts/eventListeners.js @@ -59,16 +59,12 @@ document.addEventListener("click", (e) => { } else if (targetID == "searchMode") { var currentMode = target.getAttribute("searchwindowsmode"); if (currentMode == "true") { - target.title = "Searching curent window..."; - target.children[0].src = "../icons/window.png"; - target.setAttribute("searchwindowsmode", "false"); + // In generateview + setSearchMode(target, "curent window", "window", false); } else { - target.title = "Searching all windows..."; - target.children[0].src = "../icons/windows.png"; - target.setAttribute("searchwindowsmode", "true"); + setSearchMode(target, "all windows", "windows", true); } clearNodes(listZone); - getTabs(); } }); diff --git a/src/scripts/generateView.js b/src/scripts/generateView.js index 670564d..07570d0 100644 --- a/src/scripts/generateView.js +++ b/src/scripts/generateView.js @@ -1,3 +1,4 @@ +const storageArea = browser.storage.local; const tabsAction = browser.tabs; const searchBar = document.getElementById("searchBar"); const errHandler = document.getElementById("errorZone"); @@ -33,13 +34,14 @@ function logTabs(tabs) { windowIndex++; createContainer(tab); } else { + createContainer(tab); windowIndex = 1; } } newWinId = currentWinId; } - newWinId = undefined; + newWinId = undefined; // Set poped-out-window position and 100px up from selected elm oldElm.scrollIntoView(); window.scrollBy(0, -100); @@ -84,7 +86,7 @@ function createContainer(tab) { // Set oldElm so eventListeners.js has starting ref if (tab.active == true) { - spanTag.className = "block block-focused"; + spanTag.className = "block block-focused"; if (oldElm) { oldElm.setAttribute("class", "block"); } @@ -104,15 +106,49 @@ function createTab() { function onError(error) { console.log(`Error: ${error}`); } function getTabs() { - var elm = document.getElementById("searchMode"); - var currentMode = (elm.getAttribute("searchwindowsmode") == "false"); + clearNodes(listZone); - if (currentMode == false) { - tabsAction.query({}).then(logTabs, onError) - .then(resetWinIndex, onError); - } else { - tabsAction.query({currentWindow: currentMode}) - .then(logTabs, onError) + 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); } } diff --git a/src/scripts/searchTabs.js b/src/scripts/searchTabs.js index 514c1ea..0eded92 100644 --- a/src/scripts/searchTabs.js +++ b/src/scripts/searchTabs.js @@ -39,10 +39,19 @@ function searchTabs() { var currentMode = (elm.getAttribute("searchwindowsmode") == "false"); clearNodes(listZone); - if (currentMode == false) { - tabsAction.query({}).then(findTabs, onError); - } else { - tabsAction.query({currentWindow: currentMode}) - .then(findTabs, onError) - } + storageArea.get("searchMode").then((results) => { + if (Object.keys(results).length > 0) { + var fileKeys = Object.keys(results); + for (let fileKey of fileKeys) { + var key = results[fileKey]; + if (key) { + tabsAction.query({}).then(findTabs, onError) + .then(resetWinIndex, onError); + } else { + tabsAction.query({currentWindow: true}) + .then(findTabs, onError) + } + } + } + }); }