class Menu_ttMenu { constructor(MenuItem) { let SeparatorDIV = DOM_New("div", tt.DOMmenu, {id: MenuItem[0], className: "separator"}); let MenuLI = DOM_New("li", tt.DOMmenu, {id: MenuItem[1], className: "menu_item"}); this.id = MenuLI.id; this.Menu = MenuLI; this.Separator = SeparatorDIV; if (this.id == "menu_new_pin") { this.Menu.onmousedown = function(event) { if (event.which == 1) { if (tt.menuItemNode.classList.contains("pin")) { console.log(tt.menuItemNode) Tabs_OpenNewTab(true, tt.menuItemNode, undefined); } else { Tabs_OpenNewTab(true, undefined, undefined); } }}} if (this.id == "menu_new_tab") { this.Menu.onmousedown = function(event) { if (event.which == 1) { if (tt.menuItemNode.classList.contains("folder")) { Tabs_OpenNewTab(false, undefined, tt.menuItemNode.childNodes[1]); } else { if (tt.menuItemNode.classList.contains("pin")) { Tabs_OpenNewTab(true, tt.menuItemNode, undefined); } else { if (tt.menuItemNode.classList.contains("tab")) { Tabs_OpenNewTab(false, tt.menuItemNode, undefined); } else { Tabs_OpenNewTab(false, undefined, document.getElementById("°"+tt.active_group)); } } } }}} if (this.id == "menu_unpin_tab" || this.id == "menu_pin_tab") { this.Menu.onmousedown = function(event) { if (event.which == 1) { if (tt.menuItemNode.classList.contains("selected")) { let query = document.querySelectorAll(".pin.selected, [id='" + tt.active_group + "'] .selected"); for (let s of query) { chrome.tabs.update(parseInt(s.id), {pinned: (tt.menuItemNode.classList.contains("tab"))}); } } else { chrome.tabs.update(parseInt(tt.menuItemNode.id), {pinned: (tt.menuItemNode.classList.contains("tab"))}); } }}} if (this.id == "menu_duplicate_tab") { this.Menu.onmousedown = function(event) { if (event.which == 1) { if (tt.menuItemNode.classList.contains("selected")) { let query = document.querySelectorAll(".pin.selected, [id='" + tt.active_group + "'] .selected"); for (let s of query) { tt.tabs[s.id].DuplicateTab(); } } else { tt.tabs[tt.menuItemNode.id].DuplicateTab(); } }}} if (this.id == "menu_detach_tab") { this.Menu.onmousedown = function(event) { if (event.which == 1) { DOM_FreezeSelection(false); let Nodes = []; let NodesTypes = {DraggingPin: false, DraggingTab: false, DraggingFolder: false}; let query = []; if (tt.menuItemNode.classList.contains("selected")) { query = document.querySelectorAll(".selected, .selected .tab, .selected .folder"); } else { query = document.querySelectorAll("[id='" + tt.menuItemNode.id + "'], [id='" + tt.menuItemNode.id + "'] .tab, [id='" + tt.menuItemNode.id + "'] .folder"); } for (let s of query) { if (s.classList.contains("pin")) { NodesTypes.DraggingPin = true; Nodes.push({id: s.id, parent: s.parentNode.id, selected: s.classList.contains("selected"), temporary: s.classList.contains("selected_temporarly"), NodeClass: "pin"}); } if (s.classList.contains("tab")) { NodesTypes.DraggingTab = true; Nodes.push({id: s.id, parent: s.parentNode.id, selected: s.classList.contains("selected"), temporary: s.classList.contains("selected_temporarly"), NodeClass: "tab"}); } if (s.classList.contains("folder")) { NodesTypes.DraggingFolder = true; Nodes.push({id: s.id, parent: s.parentNode.id, selected: s.classList.contains("selected"), temporary: s.classList.contains("selected_temporarly"), NodeClass: "folder", index: (tt.folders[s.id] ? tt.folders[s.id].index : 0), name: (tt.folders[s.id] ? tt.folders[s.id].name : labels.noname_group), expand: (tt.folders[s.id] ? tt.folders[s.id].expand : "")}); } } Tabs_Detach(Nodes, NodesTypes, {}); }}} if (this.id == "menu_reload_tab") { this.Menu.onmousedown = function(event) { if (event.which == 1) { if (tt.menuItemNode.classList.contains("selected")) { let query = document.querySelectorAll(".pin.selected, [id='" + tt.active_group + "'] .selected"); for (let s of query) { chrome.tabs.reload(parseInt(s.id)); } } else { chrome.tabs.reload(parseInt(tt.menuItemNode.id)); } }}} if (this.id == "menu_unload") { this.Menu.onmousedown = function(event) { if (event.which == 1) { if (tt.menuItemNode.classList.contains("pin") || tt.menuItemNode.classList.contains("tab")) { if (tt.menuItemNode.classList.contains("selected")) { let tabsArr = []; let query = document.querySelectorAll(".pin.selected, [id='" + tt.active_group + "'] .selected"); for (let s of query) { tabsArr.push(parseInt(s.id)); let children = document.querySelectorAll("[id='" + s.id + "'] .tab"); if (children.length > 0) { for (let t of children) { tabsArr.push(parseInt(t.id)); } } } Tabs_DiscardTabs(tabsArr); } else { Tabs_DiscardTabs([parseInt(tt.menuItemNode.id)]); } } if (tt.menuItemNode.classList.contains("folder")) { let tabsArr = []; let query = document.querySelectorAll("[id='"+ tt.menuItemNode.id + "'] .tab"); for (let s of query) { tabsArr.push(parseInt(s.id)); } Tabs_DiscardTabs(tabsArr); } }}} if (this.id == "menu_unload_tree") { this.Menu.onmousedown = function(event) { if (event.which == 1) { if (tt.menuItemNode.classList.contains("pin") || tt.menuItemNode.classList.contains("tab")) { if (tt.menuItemNode.classList.contains("selected")) { let tabsArr = []; let query = document.querySelectorAll(".pin.selected, [id='" + tt.active_group + "'] .selected"); for (let s of query) { tabsArr.push(parseInt(s.id)); let children = document.querySelectorAll("[id='" + s.id + "'] .tab"); if (children.length > 0) { for (let t of children) { tabsArr.push(parseInt(t.id)); } } } Tabs_DiscardTabs(tabsArr); } else { let tabsArr = []; tabsArr.push(parseInt(tt.menuItemNode.id)); let children = document.querySelectorAll("[id='" + tt.menuItemNode.id + "'] .tab"); if (children.length > 0) { for (let t of children) { tabsArr.push(parseInt(t.id)); } } Tabs_DiscardTabs(tabsArr); } } if (tt.menuItemNode.classList.contains("folder")) { let tabsArr = []; let query = document.querySelectorAll("[id='" + tt.menuItemNode.id + "'] .tab"); for (let s of query) { tabsArr.push(parseInt(s.id)); } Tabs_DiscardTabs(tabsArr); } }}} if (this.id == "menu_close") { this.Menu.onmousedown = function(event) { if (event.which == 1) { if (tt.menuItemNode.classList.contains("selected")) { let tabsArr = []; let query = document.querySelectorAll(".pin.selected, [id='" + tt.active_group + "'] .selected"); for (let s of query) { tabsArr.push(parseInt(s.id)); } Tabs_CloseTabs(tabsArr); } else { Tabs_CloseTabs([parseInt(tt.menuItemNode.id)]); } }}} if (this.id == "menu_mute_tab") { this.Menu.onmousedown = function(event) { if (event.which == 1) { if (tt.menuItemNode.classList.contains("pin") || tt.menuItemNode.classList.contains("tab")) { if (tt.menuItemNode.classList.contains("selected")) { let query = document.querySelectorAll(".pin.selected, [id='" + tt.active_group + "'] .selected"); for (let s of query) { chrome.tabs.update(parseInt(s.id), {muted: true}); } } else { chrome.tabs.update(parseInt(tt.menuItemNode.id), {muted: true}); } } if (tt.menuItemNode.classList.contains("folder")) { let query = document.querySelectorAll("[id='" + tt.menuItemNode.id + "'] .tab"); for (let s of query) { chrome.tabs.update(parseInt(s.id), {muted: true}); } } }}} if (this.id == "menu_mute_tree") { this.Menu.onmousedown = function(event) { if (event.which == 1) { let query = document.querySelectorAll("[id='" + tt.menuItemNode.id + "'], [id='" + tt.menuItemNode.id + "'] .tab"); for (let s of query) { chrome.tabs.update(parseInt(s.id), {muted: true}); } }}} if (this.id == "menu_unmute_tab") { this.Menu.onmousedown = function(event) { if (event.which == 1) { if (tt.menuItemNode.classList.contains("pin") || tt.menuItemNode.classList.contains("tab")) { if (tt.menuItemNode.classList.contains("selected")) { let query = document.querySelectorAll(".pin.selected, [id='" + tt.active_group + "'] .selected"); for (let s of query) { chrome.tabs.update(parseInt(s.id), {muted: false}); } } else { chrome.tabs.update(parseInt(tt.menuItemNode.id), {muted: false}); } } if (tt.menuItemNode.classList.contains("folder")) { let query = document.querySelectorAll("[id='" + tt.menuItemNode.id + "'] .tab"); for (let s of query) { chrome.tabs.update(parseInt(s.id), {muted: false}); } } }}} if (this.id == "menu_unmute_tree") { this.Menu.onmousedown = function(event) { if (event.which == 1) { let query = document.querySelectorAll("[id='" + tt.menuItemNode.id + "'], [id='" + tt.menuItemNode.id + "'] .tab"); for (let s of query) { chrome.tabs.update(parseInt(s.id), {muted: false}); } }}} if (this.id == "menu_mute_other") { this.Menu.onmousedown = function(event) { if (event.which == 1) { if (tt.menuItemNode.classList.contains("selected")) { let query = document.querySelectorAll(".pin:not(.selected), [id='" + tt.active_group + "'] .tab:not(.selected)"); for (let s of query) { chrome.tabs.update(parseInt(s.id), {muted: true}); } } else { let query = document.querySelectorAll(".pin:not([id='" + tt.menuItemNode.id + "']), [id='" + tt.active_group + "'] .tab:not([id='" + tt.menuItemNode.id + "'])"); for (let s of query) { chrome.tabs.update(parseInt(s.id), {muted: true}); } } }}} if (this.id == "menu_unmute_other") { this.Menu.onmousedown = function(event) { if (event.which == 1) { if (tt.menuItemNode.classList.contains("selected")) { let query = document.querySelectorAll(".pin:not(.selected), [id='" + tt.active_group + "'] .tab:not(.selected)"); for (let s of query) { chrome.tabs.update(parseInt(s.id), {muted: false}); } } else { let query = document.querySelectorAll(".pin:not([id='" + tt.menuItemNode.id + "']), [id='" + tt.active_group + "'] .tab:not([id='" + tt.menuItemNode.id + "'])"); for (let s of query) { chrome.tabs.update(parseInt(s.id), {muted: false}); } } }}} if (this.id == "menu_undo_close_tab") { this.Menu.onmousedown = function(event) { if (event.which == 1) { chrome.sessions.getRecentlyClosed(null, function(sessions) { if (sessions.length > 0) { chrome.sessions.restore(null, function() {}); } }); }}} if (this.id == "menu_new_folder") { this.Menu.onmousedown = function(event) { if (event.which == 1) { if (tt.menuItemNode.classList.contains("tab")) { let FolderId = Folders_AddNewFolder({ParentId: tt.menuItemNode.parentNode.parentNode.id, InsertAfterId: tt.menuItemNode.id}); Folders_ShowRenameFolderDialog(FolderId); } else { if (tt.menuItemNode.classList.contains("folder")) { let FolderId = Folders_AddNewFolder({ParentId: tt.menuItemNode.id}); Folders_ShowRenameFolderDialog(FolderId); } else { let FolderId = Folders_AddNewFolder({}); Folders_ShowRenameFolderDialog(FolderId); } } }}} if (this.id == "menu_expand_tree") { this.Menu.onmousedown = function(event) { if (event.which == 1) { let query = document.querySelectorAll("[id='" + tt.menuItemNode.id + "'], [id='" + tt.menuItemNode.id + "'] .folder.c, [id='" + tt.menuItemNode.id + "'] .tab.c"); for (let s of query) { DOM_SetClasses(s, ["o"], ["c"], []); } tt.schedule_update_data++; Folders_SaveFolders(); }}} if (this.id == "menu_collapse_tree") { this.Menu.onmousedown = function(event) { if (event.which == 1) { let query = document.querySelectorAll("[id='" + tt.menuItemNode.id + "'], [id='" + tt.menuItemNode.id + "'] .folder.c, [id='" + tt.menuItemNode.id + "'] .tab.c"); for (let s of query) { DOM_SetClasses(s, ["c"], ["o"], []); } tt.schedule_update_data++; Folders_SaveFolders(); }}} if (this.id == "menu_expand_all") { this.Menu.onmousedown = function(event) { if (event.which == 1) { let query = document.querySelectorAll("[id='" + tt.active_group + "'] .folder.c, [id='" + tt.active_group + "'] .tab.c"); for (let s of query) { DOM_SetClasses(s, ["o"], ["c"], []); } tt.schedule_update_data++; Folders_SaveFolders(); }}} if (this.id == "menu_collapse_all") { this.Menu.onmousedown = function(event) { if (event.which == 1) { let query = document.querySelectorAll("[id='" + tt.active_group + "'] .folder.o, [id='" + tt.active_group + "'] .tab.o"); for (let s of query) { DOM_SetClasses(s, ["c"], ["o"], []); } tt.schedule_update_data++; Folders_SaveFolders(); }}} if (this.id == "menu_close_tree") { this.Menu.onmousedown = function(event) { if (event.which == 1) { let tabsArr = []; let query = document.querySelectorAll("[id='" + tt.menuItemNode.id + "'] .tab, [id='" + tt.menuItemNode.id + "']"); for (let s of query) { tabsArr.push(parseInt(s.id)); } Tabs_CloseTabs(tabsArr); }}} if (this.id == "menu_rename_folder") { this.Menu.onmousedown = function(event) { if (event.which == 1) { Folders_ShowRenameFolderDialog(tt.menuItemNode.id); }}} if (this.id == "menu_delete_folder") { this.Menu.onmousedown = function(event) { if (event.which == 1) { if (tt.menuItemNode.classList.contains("selected")) { let query = document.querySelectorAll("[id='" + tt.menuItemNode.id + "'] .selected, [id='" + tt.menuItemNode.id + "']"); for (let s of query) { Folders_RemoveFolder(s.id); } } else { Folders_RemoveFolder(tt.menuItemNode.id); } }}} if (this.id == "menu_close_other") { this.Menu.onmousedown = function(event) { if (event.which == 1) { let tabsArr = []; let query = []; if (tt.menuItemNode.classList.contains("selected")) { if (tt.menuItemNode.classList.contains("pin")) query = document.querySelectorAll(".pin:not(.selected)"); if (tt.menuItemNode.classList.contains("tab")) query = document.querySelectorAll("[id='" + tt.active_group + "'] .tab:not(.selected)"); for (let s of query) { let children = document.querySelectorAll("[id='" + s.id + "'] .selected"); if (children.length == 0 || opt.promote_children) tabsArr.push(parseInt(s.id)); } Tabs_CloseTabs(tabsArr); } else { if (tt.menuItemNode.classList.contains("pin")) query = document.querySelectorAll(".pin:not([id='" + tt.menuItemNode.id + "'])"); if (tt.menuItemNode.classList.contains("tab")) { query = document.querySelectorAll("[id='°" + tt.active_group + "'] .tab:not([id='" + tt.menuItemNode.id + "'])"); document.getElementById("°" + tt.active_group).appendChild(tt.menuItemNode); } for (let s of query) { tabsArr.push(parseInt(s.id)); } Tabs_CloseTabs(tabsArr); } }}} if (this.id == "menu_bookmark_tree") { this.Menu.onmousedown = function(event) { if (event.which == 1) { Bookmark(tt.menuItemNode); }}} if (this.id == "menu_rename_group") { this.Menu.onmousedown = function(event) { if (event.which == 1) { Groups_ShowGroupEditWindow(tt.menuItemNode.id); }}} if (this.id == "menu_delete_group") { this.Menu.onmousedown = function(event) { if (event.which == 1) { Groups_GroupRemove(tt.menuItemNode.id, false); }}} if (this.id == "menu_delete_group_tabs_close") { this.Menu.onmousedown = function(event) { if (event.which == 1) { Groups_GroupRemove(tt.menuItemNode.id, true); }}} if (this.id == "menu_groups_unload") { this.Menu.onmousedown = function(event) { if (event.which == 1) { let tabsArr = []; let query = document.querySelectorAll("[id='" + tt.menuItemNode.id + "'] .tab"); for (let s of query) { tabsArr.push(parseInt(s.id)); } Tabs_DiscardTabs(tabsArr); }}} if (this.id == "menu_group_tabs_close") { this.Menu.onmousedown = function(event) { if (event.which == 1) { let tabsArr = []; let query = document.querySelectorAll("[id='" + tt.menuItemNode.id + "'] .tab"); for (let s of query) { tabsArr.push(parseInt(s.id)); } Tabs_CloseTabs(tabsArr); }}} if (this.id == "menu_manager_window") { this.Menu.onmousedown = function(event) { if (event.which == 1) { Manager_OpenManagerWindow(); }}} if (this.id == "menu_groups_hibernate") { this.Menu.onmousedown = function(event) { if (event.which == 1) { Manager_ExportGroup(tt.menuItemNode.id, false, true); setTimeout(function() {Groups_GroupRemove(tt.menuItemNode.id, true);}, 100); }}} if (this.id == "menu_bookmark_group") { this.Menu.onmousedown = function(event) { if (event.which == 1) { Bookmark(tt.menuItemNode); }}} if (this.id == "menu_new_group") { this.Menu.onmousedown = function(event) { if (event.which == 1) { let NewGroupId = Groups_AddNewGroup(); Groups_ShowGroupEditWindow(NewGroupId); }}} if (this.id == "menu_treetabs_settings") { this.Menu.onmousedown = function(event) { if (event.which == 1) { chrome.tabs.create({"url": "options/options.html"}); }}} } MenuHide() { this.Menu.style.display = "none"; } MenuShow() { this.Menu.style.display = ""; } SeparatorHide() { this.Separator.style.display = "none"; } SeparatorShow() { this.Separator.style.display = ""; } } function Menu_HideMenus() { for (let MenuItem of DefaultMenu.all_entries) { tt.menu[MenuItem[1]].MenuHide(); tt.menu[MenuItem[1]].SeparatorHide(); } DOM_SetStyle(tt.menu[DefaultMenu.all_entries[0][1]].Menu.parentNode, {display: "none", top: "-1000px", left: "-1000px"}); } function Menu_ShowMenu(MenuItems, event, ) { for (i = 0; i < DefaultMenu.all_entries.length; i++) { if (MenuItems[i][1]) { tt.menu[DefaultMenu.all_entries[i][1]].MenuShow(); } else { tt.menu[DefaultMenu.all_entries[i][1]].MenuHide(); } if (MenuItems[i][0]) { tt.menu[DefaultMenu.all_entries[i][1]].SeparatorShow(); } else { tt.menu[DefaultMenu.all_entries[i][1]].SeparatorHide(); } } setTimeout(function() { tt.DOMmenu.style.display = "block"; let x = event.pageX >= (document.body.clientWidth - tt.DOMmenu.getBoundingClientRect().width - 5) ? (document.body.clientWidth - tt.DOMmenu.getBoundingClientRect().width - 5) : (event.pageX - 5); let y = event.pageY >= (document.body.clientHeight - tt.DOMmenu.getBoundingClientRect().height - 20) ? (document.body.clientHeight - tt.DOMmenu.getBoundingClientRect().height - 20) : (event.pageY - 20); DOM_SetStyle(tt.DOMmenu, {top: y + "px", left: x + "px"}); }, 10); } function Menu_ShowTabMenu(TabNode, event) { tt.menuItemNode = TabNode; if (TabNode.classList.contains("pin")) { Menu_ShowMenu(DefaultMenu.pin, event); if (opt.allow_pin_close) tt.menu["menu_close"].MenuShow(); } if (TabNode.classList.contains("tab")) { Menu_ShowMenu(DefaultMenu.tab, event); if (TabNode.classList.contains("o")) { tt.menu["menu_collapse_tree"].SeparatorShow(); tt.menu["menu_collapse_tree"].MenuShow(); } if (TabNode.classList.contains("c")) { tt.menu["menu_expand_tree"].SeparatorShow(); tt.menu["menu_expand_tree"].MenuShow(); } if (TabNode.classList.contains("c") || TabNode.classList.contains("o")) { tt.menu["menu_close_tree"].MenuShow(); tt.menu["menu_mute_tree"].SeparatorShow(); tt.menu["menu_mute_tree"].MenuShow(); tt.menu["menu_unmute_tree"].MenuShow(); tt.menu["menu_unload_tree"].MenuShow(); } } if (TabNode.classList.contains("muted")) { tt.menu["menu_unmute_tab"].MenuShow(); } else { tt.menu["menu_mute_tab"].MenuShow(); } if (!TabNode.classList.contains("discarded")) tt.menu["menu_unload"].MenuShow(); } function Menu_ShowFolderMenu(FolderNode, event) { tt.menuItemNode = FolderNode; Menu_ShowMenu(DefaultMenu.folder, event); if (FolderNode.classList.contains("o")) tt.menu["menu_collapse_tree"].MenuShow(); if (FolderNode.classList.contains("c")) tt.menu["menu_expand_tree"].MenuShow(); if (document.querySelectorAll("[id='" + FolderNode.id + "'] .tab").length == 0) { tt.menu["menu_detach_tab"].SeparatorShow(); tt.menu["menu_detach_tab"].MenuShow(); } } function Menu_ShowFGlobalMenu(event) { tt.menuItemNode = event.target; Menu_ShowMenu(DefaultMenu.global, event); } function Menu_ShowFGroupMenu(GroupNode, event) { tt.menuItemNode = GroupNode; Menu_ShowMenu(DefaultMenu.group, event); if (tt.menuItemNode.id == "tab_list") { tt.menu["menu_groups_hibernate"].MenuHide(); tt.menu["menu_rename_group"].MenuHide(); tt.menu["menu_delete_group"].MenuHide(); tt.menu["menu_delete_group_tabs_close"].MenuHide(); } } function Menu_CreateMenu() { tt.DOMmenu = document.getElementById("main_menu"); tt.DOMmenu.onmousedown = function(event) { event.preventDefault(); event.stopPropagation(); event.stopImmediatePropagation(); } tt.DOMmenu.onclick = function(event) { Menu_HideMenus(); } for (let MenuItem of DefaultMenu.all_entries) { tt.menu[MenuItem[1]] = new Menu_ttMenu(MenuItem); } }