// SIDEBAR VARIABLES let tt = { CurrentWindowId: 0, active_group: "tab_list", tabs: {}, groups: {}, folders: {}, schedule_update_data: 0, schedule_rearrange_tabs: 0, Dragging: false, DraggingGroup: false, DraggingPin: false, DraggingTab: false, DraggingFolder: false, DragTreeDepth: 0, DragOverId: "", DragOverTimer: undefined, DOMmenu: undefined, menu: {}, menuItemNode: undefined, SearchIndex: 0, AutoSaveSession: undefined, pressed_keys: [] }; function StartSidebarListeners() { if (browserId == "F") { browser.browserAction.onClicked.addListener(function(tab) { if (tab.windowId == tt.CurrentWindowId) browser.sidebarAction.close(); }); } chrome.commands.onCommand.addListener(function(command) { if (command == "close_tree") { chrome.windows.getCurrent({populate: false}, function(window) { if (window.id == tt.CurrentWindowId && window.focused) { chrome.tabs.query({windowId: tt.CurrentWindowId, active: true}, function(tabs) { let tabsArr = []; let close_tree = document.querySelectorAll("[id='" + tabs[0].id + "'] .tab, [id='" + tabs[0].id + "']"); for (let s of close_tree) { tabsArr.push(parseInt(s.id)); if (s.childNodes[2].childNodes.length > 0) { let trees_children = document.querySelectorAll("#" + s.childNodes[2].id + " .tab"); for (let t of trees_children) { tabsArr.push(parseInt(t.id)); } } } Tabs_CloseTabs(tabsArr); }); } }); } }); chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) { if (message.command == "bg_started") { sendResponse(); return; } if (message.command == "backup_available") { if (opt.debug) Utils_log("message to sidebar " + tt.CurrentWindowId + ": message: " + message.command); let BAKbutton = document.getElementById("button_load_bak" + message.bak); if (BAKbutton != null) BAKbutton.classList.remove("disabled"); return; } if (message.command == "drag_start") { if (opt.debug) Utils_log("message to sidebar " + tt.CurrentWindowId + ": message: " + message.command); DOM_CleanUpDragAndDrop(); tt.DragTreeDepth = message.DragTreeDepth; tt.DraggingGroup = message.DraggingGroup; tt.DraggingPin = message.DraggingPin; tt.DraggingTab = message.DraggingTab; tt.DraggingFolder = message.DraggingFolder; return; } if (message.command == "drag_end") { if (opt.debug) Utils_log("message to sidebar " + tt.CurrentWindowId + ": message: " + message.command); tt.Dragging = false; DOM_CleanUpDragAndDrop(); DOM_RemoveHighlight(); return; } if (message.command == "remove_folder") { if (opt.debug) Utils_log("message to sidebar " + tt.CurrentWindowId + ": message: " + message.command + " folderId: " + message.folderId); Folders_RemoveFolder(message.folderId); return; } if (message.command == "remove_group") { if (opt.debug) Utils_log("message to sidebar " + tt.CurrentWindowId + ": message: " + message.command + " groupId: " + message.groupId); setTimeout(function() {Groups_GroupRemove(message.groupId, false);}, 2000); return; } if (message.command == "reload_sidebar") { if (opt.debug) Utils_log("message to sidebar " + tt.CurrentWindowId + ": message: " + message.command); window.location.reload(); return; } if (message.command == "reload_options") { if (opt.debug) Utils_log("message to sidebar " + tt.CurrentWindowId + ": message: " + message.command); opt = Object.assign({}, message.opt); setTimeout(function() { Theme_RestorePinListRowSettings(); }, 100); return; } if (message.command == "reload_toolbar") { if (opt.debug) Utils_log("message to sidebar " + tt.CurrentWindowId + ": message: " + message.command); opt = Object.assign({}, message.opt); if (opt.show_toolbar) { Toolbar_RemoveToolbar(); Toolbar_RecreateToolbar(message.toolbar); Toolbar_SetToolbarEvents(false, true, true, "mousedown", true); Toolbar_RestoreToolbarShelf(); Toolbar_RestoreToolbarSearchFilter(); } else { Toolbar_RemoveToolbar(); } DOM_RefreshGUI(); return; } if (message.command == "reload_theme") { if (opt.debug) Utils_log("message to sidebar " + tt.CurrentWindowId + ": message: " + message.command); Theme_RestorePinListRowSettings(); Theme_ApplyTheme(message.theme); return; } if (message.windowId == tt.CurrentWindowId) { if (message.command == "sidebar_started") { sendResponse(true); return; } if (message.command == "tab_created") { if (opt.debug) Utils_log("chrome event: " + message.command + ", tabId: " + message.tabId); if (tt.tabs[message.tabId] == undefined) { if (message.InsertAfterId && document.querySelectorAll("#" + tt.active_group + " .tab").length == 0) { message.InsertAfterId = undefined; message.ParentId = tt.active_group; } tt.tabs[message.tabId] = new Tabs_ttTab({tab: message.tab, ParentId: message.ParentId, InsertAfterId: message.InsertAfterId, Append: message.Append, Scroll: true}); DOM_RefreshExpandStates(); setTimeout(function() { DOM_RefreshCounters(); DOM_RefreshGUI(); }, 50); if (opt.syncro_tabbar_tabs_order) { let tabIds = Array.prototype.map.call(document.querySelectorAll(".pin, .tab"), function(s) {return parseInt(s.id);}); chrome.tabs.move(message.tab.id, {index: tabIds.indexOf(message.tab.id)}); } setTimeout(function() {tt.schedule_update_data++;}, 2000); } return; } if (message.command == "tab_attached") { if (opt.debug) Utils_log("chrome event: " + message.command + ", tabId: " + message.tabId + ", tab is pinned: " + message.tab.pinned + ", ParentId: " + message.ParentId); tt.tabs[message.tabId] = new Tabs_ttTab({tab: message.tab, ParentId: message.ParentId, Append: true, SkipSetActive: false, SkipMediaIcon: false}); DOM_RefreshGUI(); return; } if (message.command == "tab_detached") { if (opt.debug) Utils_log("chrome event: " + message.command + ", tabId: " + message.tabId); let Tab = document.getElementById(message.tabId); if (Tab != null && tt.tabs[message.tabId]) { let ctDetachedParent = Tab.childNodes[1]; if (opt.promote_children_in_first_child == true && Tab.childNodes[1].childNodes.length > 1) { DOM_PromoteChildrenToFirstChild(Tab); } else { while (ctDetachedParent.firstChild) { ctDetachedParent.parentNode.parentNode.insertBefore(ctDetachedParent.firstChild, ctDetachedParent.parentNode); } } } tt.tabs[message.tabId].RemoveTab(); setTimeout(function() {tt.schedule_update_data++;}, 300); DOM_RefreshGUI(); return; } if (message.command == "tab_removed") { if (opt.debug) Utils_log("chrome event: " + message.command + ", tabId: " + message.tabId); let mTab = document.getElementById(message.tabId); if (mTab != null && tt.tabs[message.tabId]) { let ctParent = mTab.childNodes[1]; if (opt.debug) Utils_log("tab_removed, promote children: " + opt.promote_children); if (opt.promote_children == true) { if (opt.promote_children_in_first_child == true && mTab.childNodes[1].childNodes.length > 1) { DOM_PromoteChildrenToFirstChild(mTab); } else { while (ctParent.firstChild) { ctParent.parentNode.parentNode.insertBefore(ctParent.firstChild, ctParent.parentNode); } } } else { let tab_children = document.querySelectorAll("[id='" + message.tabId + "'] .tab"); for (let s of tab_children) { chrome.tabs.remove(parseInt(s.id)); } } tt.tabs[message.tabId].RemoveTab(); DOM_RefreshExpandStates(); setTimeout(function() {tt.schedule_update_data++;}, 300); DOM_RefreshGUI(); DOM_RefreshCounters(); } return; } if (message.command == "tab_activated") { if (opt.debug) Utils_log("chrome event: " + message.command + ", tabId: " + message.tabId); Tabs_SetActiveTab(message.tabId, true); return; } if (message.command == "tab_attention") { if (opt.debug) Utils_log("chrome event: " + message.command + ", tabId: " + message.tabId); if (tt.tabs[message.tabId]) tt.tabs[message.tabId].SetAttentionIcon(); return; } if (message.command == "tab_updated") { if (opt.debug) Utils_log("chrome event: " + message.command + ", tabId: " + message.tabId); if (tt.tabs[message.tabId]) { // if (message.changeInfo.favIconUrl != undefined || message.changeInfo.url != undefined) { if (message.changeInfo.favIconUrl != undefined || message.changeInfo.title != undefined) { if (browserId == "F" && (message.changeInfo.favIconUrl == undefined || message.changeInfo.favIconUrl == "")) browser.sessions.setTabValue(message.tabId, "CachedFaviconUrl", ""); setTimeout(function() { if (tt.tabs[message.tabId]) tt.tabs[message.tabId].GetFaviconAndTitle(true); }, 100); } // if (message.changeInfo.title != undefined) { // setTimeout(function() { // if (tt.tabs[message.tabId]) tt.tabs[message.tabId].GetFaviconAndTitle(true); // }, 1000); // } if (message.changeInfo.audible != undefined || message.changeInfo.mutedInfo != undefined) tt.tabs[message.tabId].RefreshMediaIcon(); if (message.changeInfo.discarded != undefined) tt.tabs[message.tabId].RefreshDiscarded(); if (message.changeInfo.pinned != undefined) { let updateTab = document.getElementById(message.tabId); if (updateTab != null) { if (message.tab.pinned && updateTab.classList.contains("pin") == false) { tt.tabs[message.tabId].SetTabClass(true); tt.tabs[message.tabId].pinned = true; tt.schedule_update_data++; } if (!message.tab.pinned && updateTab.classList.contains("tab") == false) { tt.tabs[message.tabId].SetTabClass(false); tt.tabs[message.tabId].pinned = false; tt.schedule_update_data++; } } DOM_RefreshExpandStates(); } } return; } // if (message.command == "set_active_group") { // Groups_SetActiveGroup(message.groupId, false, false); // return; // } if (message.command == "remote_update") { if (opt.debug) { Utils_log("chrome event: " + message.command + ", tabId: " + message.tabId); Utils_log(message); } Manager_RecreateTreeStructure(message.groups, message.folders, message.tabs); sendResponse(true); tt.schedule_update_data++; return; } if (message.command == "switch_active_tab") { Tabs_SwitchActiveTabBeforeClose(tt.active_group); return; } } }); } function Initialize() { chrome.windows.getCurrent({populate: true}, function(window) { tt.CurrentWindowId = window.id; chrome.storage.local.get(null, function(storage) { Preferences_GetCurrentPreferences(storage); Menu_CreateMenu(); Theme_ApplyTheme(Theme_GetCurrentTheme(storage)); if (opt.show_toolbar) { Toolbar_RecreateToolbar(Theme_GetCurrentToolbar(storage)); Toolbar_SetToolbarEvents(false, true, true, "mousedown", true, false); Toolbar_RestoreToolbarShelf(); Toolbar_RestoreToolbarSearchFilter(); } chrome.runtime.sendMessage({command: "is_bg_safe_mode"}, function(safe_mode) { if (safe_mode) { SafeModeMessage(); } chrome.runtime.sendMessage({command: "get_browser_tabs"}, function(bgtabs) { chrome.runtime.sendMessage({command: "get_folders", windowId: tt.CurrentWindowId}, function(f) { tt.folders = Object.assign({}, f); chrome.runtime.sendMessage({command: "get_groups", windowId: tt.CurrentWindowId}, function(g) { tt.groups = Object.assign({}, g); // APPEND GROUPS Groups_AppendGroups(tt.groups); // APPEND FOLDERS TO TABLIST Folders_PreAppendFolders(tt.folders); // APPEND TABS TO TABLIST for (const tab of window.tabs) { tt.tabs[tab.id] = new Tabs_ttTab({tab: tab, Append: true, SkipSetActive: true, AdditionalClass: ((bgtabs[tab.id] && bgtabs[tab.id].expand != "") ? bgtabs[tab.id].expand : undefined)}); } // APPEND FOLDERS TO CORRECT PARENTS Folders_AppendFolders(tt.folders); // APPEND TABS TO CORRECT PARENTS if (opt.skip_load == false) { for (const tab of window.tabs) { if (bgtabs[tab.id] && !tab.pinned) { let TabParent = document.getElementById("°"+bgtabs[tab.id].parent); if (TabParent != null && document.querySelector("[id='"+tab.id+"'] #°"+bgtabs[tab.id].parent) == null && (TabParent.parentNode.classList.contains("tab") || TabParent.parentNode.classList.contains("folder") || TabParent.parentNode.classList.contains("group"))) { TabParent.appendChild(tt.tabs[tab.id].Node); } } } } // SET ACTIVE TAB FOR EACH GROUP, REARRENGE EVERYTHING AND START BROWSER LISTENERS Groups_SetActiveTabInEachGroup(); Tabs_RearrangeTree(bgtabs, tt.folders, true); StartSidebarListeners(); DOM_SetEvents(); Manager_SetManagerEvents(); Menu_HideMenus(); if (opt.switch_with_scroll) { DOM_BindTabsSwitchingToMouseWheel("pin_list"); } if (opt.syncro_tabbar_tabs_order || opt.syncro_tabbar_groups_tabs_order) { Tabs_RearrangeBrowserTabs(); } Theme_RestorePinListRowSettings(); Manager_StartAutoSaveSession(); if (browserId == "O") { DOM_AutoRefreshMediaIcons(); } setTimeout(function() { DOM_RefreshExpandStates(); DOM_RefreshCounters(); Groups_SetActiveTabInEachGroup(); }, 1000); Manager_ShowStatusBar({show: true, spinner: false, message: chrome.i18n.getMessage("status_bar_ready"), hideTimeout: 2000}); setTimeout(function() { Tabs_SaveTabs(); delete DefaultToolbar; delete DefaultTheme; delete DefaultPreferences; }, 5000); if (browserId != "F") { if (storage.windows_BAK1 && Object.keys(storage["windows_BAK1"]).length > 0 && document.getElementById("button_load_bak1") != null) { document.getElementById("button_load_bak1").classList.remove("disabled"); } if (storage.windows_BAK2 && Object.keys(storage["windows_BAK2"]).length > 0 && document.getElementById("button_load_bak2") != null) { document.getElementById("button_load_bak2").classList.remove("disabled"); } if (storage.windows_BAK3 && Object.keys(storage["windows_BAK3"]).length > 0 && document.getElementById("button_load_bak3") != null) { document.getElementById("button_load_bak3").classList.remove("disabled"); } } }); }); }); }); }); }); } function Run() { Manager_ShowStatusBar({show: true, spinner: true, message: "Starting up"}); chrome.runtime.sendMessage({command: "is_bg_ready"}, function(response) { if (response == true) { Initialize(); } else { setTimeout(function() { Run(); },100); } }); } function SafeModeMessage() { let StatusBar = document.getElementById("status_bar"); if (StatusBar) { StatusBar.onclick = function(event) { if (event.which == 1) { chrome.runtime.sendMessage({command: "reload"}); chrome.runtime.sendMessage({command: "reload_sidebar"}); location.reload(); } } setInterval(function() { Manager_ShowStatusBar({show: true, spinner: false, message: chrome.i18n.getMessage("status_bar_running_in_safe_mode")}); }, 30); } } document.addEventListener("DOMContentLoaded", Run(), false);