Tab-Search-and-Manage/src/scripts/tabsSearch.js

82 lines
2.5 KiB
JavaScript

const toFind = document.getElementById("toFind");
const tabQuery = browser.tabs.query({currentWindow: true});
const errHandler = document.getElementById("errorZone");
const listZone = document.getElementById("listZone");
const notFoundText = document.createTextNode("Search not found...");
document.getElementById("toFind").onkeypress = function(e){
searchTabs();
}
document.addEventListener("click", (e) => {
if (e.target.id != "toFind" && e.target.id != "listZone" ) {
if (e.target.tagName == "IMG") {
var parent = e.target.parentNode;
loadSelTab(parseInt(parent.id));
} else {
loadSelTab(parseInt(e.target.id));
}
}
});
function logTabs(tabs) {
var selection = [];
clearNodes(listZone);
if (toFind.value != "") {
for (let tab of tabs) {
var title = tab.title;
if (title.toLowerCase().includes(toFind.value.toLowerCase())) {
selection.push(tab);
}
}
if (selection.length > 1) {
for (let sel of selection) {
icon = document.createElement("DIV");
thumbnail = document.createElement("IMG");
title = document.createElement("P");
lineBreak = document.createElement("BR");
titleText = document.createTextNode(sel.title);
icon.id = sel.id;
icon.className = "box";
thumbnail.className = "thumbImg";
thumbnail.src = sel.favIconUrl;
title.className = "title";
icon.appendChild(thumbnail);
icon.appendChild(title);
title.appendChild(titleText);
listZone.appendChild(icon);
listZone.appendChild(lineBreak);
}
errHandler.style.display = "none";
clearNodes(errHandler);
} else {
if (selection[0] != undefined) {
errHandler.style.display = "none";
clearNodes(errHandler);
loadSelTab(selection[0].id);
} else {
errHandler.style.display = "block";
errHandler.appendChild(notFoundText);
}
}
}
}
function loadSelTab(id) {
browser.tabs.update(id, {
active: true
});
}
function clearNodes(targetNode) {
while (targetNode.firstChild) {
targetNode.removeChild(targetNode.firstChild);
}
}
function searchTabs() { tabQuery.then(logTabs, onError); }
function onError(error) { console.log(`Error: ${error}`); }