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
-- Added all window search and list with toggling functionality.
+- Fixed search type persistence.
+- Fixed missing starting tabs in list.
***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)
+ }
+ }
+ }
+ });
}