// Copyright (c) 2017 kroppy. All rights reserved. // Use of this source code is governed by a Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0) license // that can be found at https://creativecommons.org/licenses/by-nc-nd/4.0/ // ********** TABS FUNCTIONS *************** async function UpdateData() { setInterval(function() { if (schedule_update_data > 1) { schedule_update_data = 1; } if (schedule_update_data > 0) { $(".pin").each(function() { chrome.runtime.sendMessage({ command: "update_tab", tabId: parseInt(this.id), tab: { parent: "pin_list", index: $(this).index(), expand: "n" } }); }); $(".tab").each(function() { chrome.runtime.sendMessage({ command: "update_tab", tabId: parseInt(this.id), tab: { parent: $(this).parent().parent()[0].id, index: $(this).index(), expand: ($(this).is(".n") ? "n" : ($(this).is(".c") ? "c" : "o")) } }); }); schedule_update_data--; } }, 1000); } function RearrangeBrowserTabs() { setInterval(function() { if (schedule_rearrange_tabs > 0) { schedule_rearrange_tabs--; let tabIds = $(".pin, .tab").map(function(){return parseInt(this.id);}).toArray(); RearrangeBrowserTabsLoop(tabIds, tabIds.length-1); } }, 1000); } async function RearrangeBrowserTabsLoop(tabIds, tabIndex) { if (tabIndex >= 0 && schedule_rearrange_tabs == 0){ chrome.tabs.get(tabIds[tabIndex], function(tab1) { if (tabIndex != tab1.index) { chrome.tabs.move(tabIds[tabIndex], {index: tabIndex}); } RearrangeBrowserTabsLoop( tabIds, (tabIndex-1) ); }); } } function RearrangeTreeTabs(tabs, bgtabs, first_loop) { tabs.forEach(function(Tab) { if (bgtabs[Tab.id] && $("#"+Tab.id)[0] && $("#"+Tab.id).parent().children().eq(bgtabs[Tab.id].index)[0]) { if ($("#"+Tab.id).index() > bgtabs[Tab.id].index) { $("#"+Tab.id).insertBefore($("#"+Tab.id).parent().children().eq(bgtabs[Tab.id].index)); } else { $("#"+Tab.id).insertAfter($("#"+Tab.id).parent().children().eq(bgtabs[Tab.id].index)); } } if (bgtabs[Tab.id] && $("#"+Tab.id).index() != bgtabs[Tab.id].index && first_loop) { RearrangeTreeTabs(tabs, bgtabs, false); } }); } // param - tuple object with paramenters: param.tab - tab object, param.ParentId - Parent tabId, param.InsertAfterId - insert tab after this tabId (on same level), // param.Append - if true Appends tab at the end of tree if false or prepends function AppendTab(param) { if ($("#"+param.tab.id).length > 0) { GetFaviconAndTitle(param.tab.id, param.addCounter); return; } var ClassList = param.tab.pinned ? "pin" : "tab n"; if (param.tab.discarded) { ClassList = ClassList + " discarded"; } if (param.AdditionalClass) { ClassList = ClassList +" "+ param.AdditionalClass; } var tb = document.createElement("div"); tb.className = ClassList; tb.id = param.tab.id; // TAB var dc = document.createElement("div"); dc.className = "drop_target drag_enter_center"; dc.id = "dc"+param.tab.id; tb.appendChild(dc); // DROP TARGET CENTER var dt = document.createElement("div"); dt.className = "drop_target drag_entered_top"; dt.id = "du"+param.tab.id; tb.appendChild(dt); // DROP TARGET TOP var db = document.createElement("div"); db.className = "drop_target drag_entered_bottom"; db.id = "dd"+param.tab.id; tb.appendChild(db); // DROP TARGET BOTTOM var th = document.createElement("div"); th.className = opt.always_show_close ? "tab_header close_show" : "tab_header"; th.id = "tab_header"+param.tab.id; th.draggable = true; tb.appendChild(th); // HEADER var ex = document.createElement("div"); ex.className = "expand"; ex.id = "exp"+param.tab.id; th.appendChild(ex); // EXPAND ARROW var tt = document.createElement("div"); tt.className = "tab_title"; tt.id = "tab_title"+param.tab.id; th.appendChild(tt); // TITLE // var tc = document.createElement("div"); tc.className = "tab_counter"; tc.id = "tab_counter"+param.tab.id; th.appendChild(tc); // TABS COUNTER if (!opt.never_show_close) { var cl = document.createElement("div"); cl.className = "close"; cl.id = "close"+param.tab.id; th.appendChild(cl); // CLOSE BUTTON var ci = document.createElement("div"); ci.className = "close_img"; ci.id = "close_img"+param.tab.id; cl.appendChild(ci); } var mi = document.createElement("div"); mi.className = "tab_mediaicon"; mi.id = "tab_mediaicon"+param.tab.id; th.appendChild(mi); var ch = document.createElement("div"); ch.className = "children"; ch.id = "ch"+param.tab.id; tb.appendChild(ch); if (param.tab.pinned) { param.ParentId = "pin_list"; } else { if (param.ParentId == undefined || $("#"+param.ParentId).is(".pin, #pin_list") || $("#"+param.ParentId).length == 0) { param.ParentId = "ch"+active_group; } else { if ($("#ch"+param.ParentId).children().length == 0) { $("#"+param.ParentId).addClass("o").removeClass("n").removeClass("c"); } param.ParentId = "ch"+param.ParentId; } } if (param.Append) { $("#"+param.ParentId).append(tb); } if (!param.Append) { $("#"+param.ParentId).prepend(tb); } if (param.InsertBeforeId != undefined && $("#"+param.InsertBeforeId)[0]) { if ((param.tab.pinned && $("#"+param.InsertBeforeId).is(".pin")) || (!param.tab.pinned && $("#"+param.InsertBeforeId).is(".tab"))) { $("#"+param.tab.id).insertBefore($("#"+param.InsertBeforeId)); } } if (param.InsertAfterId != undefined && $("#"+param.InsertAfterId)[0]) { if ((param.tab.pinned && $("#"+param.InsertAfterId).is(".pin")) || (!param.tab.pinned && $("#"+param.InsertAfterId).is(".tab"))) { $("#"+param.tab.id).insertAfter($("#"+param.InsertAfterId)); } } GetFaviconAndTitle(param.tab.id, param.addCounter); RefreshMediaIcon(param.tab.id); if (param.tab.active && param.SkipSetActive == undefined) { SetActiveTab(param.tab.id); } if (param.Scroll) { ScrollToTab(param.tab.id); } } function RemoveTabFromList(tabId) { if ($("#"+tabId)[0]) { $("#"+tabId).remove(); } } function SetTabClass(param) { // param - tuple object with paramenters: param.pin - true for pinned, param.id - tabId if (param.pin) { $("#pin_list").append($("#"+param.id)); if ($("#ch"+param.id).children().length > 0) { // flatten out children $($("#"+param.id).children().find(".pin, .tab").get().reverse()).each(function() { $(this).removeClass("tab").removeClass("n").removeClass("o").removeClass("c").addClass("pin"); $(this).insertAfter($("#"+param.id)); chrome.tabs.update(parseInt(this.id), {pinned: true}); }); } $("#"+param.id).removeClass("tab").removeClass("n").removeClass("o").removeClass("c").addClass("pin"); } else { $("#ch"+active_group).prepend($("#"+param.id)); $("#"+param.id).removeClass("pin").removeClass("attention").addClass("tab"); RefreshExpandStates(); } chrome.tabs.update(parseInt(param.id), {pinned: param.pin}); RefreshGUI(); } function SetActiveTab(tabId) { if ($("#"+tabId).length > 0) { if ($("#"+tabId).is(".tab")) { SetActiveTabInGroup($("#"+tabId).parents(".group")[0].id, tabId); } $(".selected_folder").removeClass("selected_folder"); $(".pin, #"+active_group+" .tab").removeClass("active_tab").removeClass("selected_tab").removeClass("selected_frozen").removeClass("selected_temporarly").removeClass("tab_header_hover"); $(".highlighted_drop_target").removeClass("highlighted_drop_target"); $("#"+tabId).removeClass("attention").addClass("active_tab"); ScrollToTab(tabId); } } function ScrollToTab(tabId) { if ($("#"+tabId)[0]) { if ($("#"+tabId).is(".pin")) { if ($("#"+tabId).position().left+$("#"+tabId).outerWidth() > $("#pin_list").innerWidth()) { $("#pin_list").scrollLeft($("#pin_list").scrollLeft()+$("#"+tabId).position().left+$("#"+tabId).outerWidth()-$("#pin_list").innerWidth()); } else { if ($("#"+tabId).position().left < 0) { $("#pin_list").scrollLeft($("#pin_list").scrollLeft()+$("#"+tabId).position().left); } } } if ($("#"+tabId).is(".tab")) { if ($("#"+active_group+" #"+tabId)[0]) { if ($("#"+tabId).is(":not(:visible)")) { $("#"+tabId).parents(".folder, .tab").removeClass("c").addClass("o"); } if ($("#"+tabId).offset().top - $("#"+active_group).offset().top < 0) { $("#"+active_group).scrollTop($("#"+active_group).scrollTop() + $("#"+tabId).offset().top - $("#"+active_group).offset().top); } else { if ($("#"+tabId).offset().top - $("#"+active_group).offset().top > $("#"+active_group).innerHeight() - $(".tab_header").outerHeight()) { $("#"+active_group).scrollTop($("#"+active_group).scrollTop() + $("#"+tabId).offset().top - $("#"+active_group).offset().top - $("#"+active_group).innerHeight() + $(".tab_header").outerHeight() + 4); } } } } } } function DetachTabs(tabsIds, Folders) { chrome.windows.get(CurrentWindowId, {populate : true}, function(window) { if (window.tabs.length == 1 || tabsIds.length == 0 || tabsIds.length == window.tabs.length) { return; } chrome.windows.create({state:window.state}, function(new_window) { let Indexes = []; let Parents = []; let Expands = []; let NewIds = []; let NewTabs = []; tabsIds.forEach(function(tabId) { Indexes.push($("#"+tabId).index()); Parents.push($("#"+tabId).parent().parent()[0].id); Expands.push($("#"+tabId).is(".n") ? "n" : ($("#"+tabId).is(".c") ? "c" : "o")); }); let Ind = 0; tabsIds.forEach(function(tabId) { chrome.tabs.move(tabId, {windowId: new_window.id, index:-1}, function(MovedTab) { NewIds.push(MovedTab[0].id); if (browserId == "F") { // AGAIN BUG 1398272 - MOZILLA! NewTabs.push({id: NewIds[Ind], index: Indexes[Ind], parent: ((tabsIds.indexOf(parseInt(Parents[Ind])) != -1) ? NewIds[tabsIds.indexOf(parseInt(Parents[Ind]))] : Parents[Ind]), expand: Expands[Ind]}); } else { NewTabs.push({id: NewIds[Ind], index: Indexes[Ind], parent: Parents[Ind], expand: Expands[Ind]}); } Ind++; }); }); chrome.tabs.remove(new_window.tabs[0].id, null); let Loop = 0; var Append = setInterval(function() { chrome.runtime.sendMessage({command: "remote_update", groups: {}, folders: Folders, tabs: NewTabs, windowId: new_window.id}, function(response) { log("Detach - Remote Append and Update Loop, giving half second to attach each tab"); }); Loop++; if (Loop > tabsIds.length) { clearInterval(Append); } }, 500); if (Object.keys(Folders).length > 0) { for (var folder in Folders) { RemoveFolder(Folders[folder].id); } } }); }); } function FindTab(input) { // find and select tabs $(".filtered").removeClass("filtered").removeClass("selected_tab"); $(".highlighted_search").removeClass("highlighted_search"); if (input.length == 0) { $("#filter_box")[0].value = ""; $("#button_filter_clear").css({"opacity": "0"}).attr("title", ""); return; } else { $("#button_filter_clear").css({"opacity": "1"}); $("#button_filter_clear").attr("title", caption_clear_filter); } SearchIndex = 0; chrome.tabs.query({windowId: CurrentWindowId, pinned: false}, function(tabs) { tabs.forEach(function(Tab) { if ($("#button_filter_type").is(".url") && Tab.url.toLowerCase().match(input.toLowerCase())) { $("#"+Tab.id).addClass("filtered").addClass("selected_tab"); } if ($("#button_filter_type").is(".title") && Tab.title.toLowerCase().match(input.toLowerCase())) { $("#"+Tab.id).addClass("filtered").addClass("selected_tab"); } }); }); } function CloseTabs(tabsIds) { if ($("#"+active_group+" .active_tab")[0] && tabsIds.indexOf(parseInt($("#"+active_group+" .active_tab")[0].id)) != -1) { ActionBeforeTabsClose(); } tabsIds.forEach(function(tabId) { if ($("#"+tabId).is(".pin") && opt.allow_pin_close) { $("#"+tabId).remove(); chrome.tabs.update(tabId, {pinned: false}); } }); setTimeout(function() { chrome.tabs.remove(tabsIds, null); }, 50); } function DiscardTabs(tabsIds) { var delay = 100; if ($("#"+tabsIds[0]).is(".discarded")) { delay = 5; } else { chrome.tabs.discard(tabsIds[0]); } tabsIds.splice(0, 1); if (tabsIds.length > 0) { setTimeout(function() { DiscardTabs(tabsIds); }, delay); } } function ActionBeforeTabsClose() { log("function: ActionBeforeTabsClose"); if ($("#"+active_group+" .tab").length == 1) { log("there is only one tab"); if (opt.after_closing_active_tab == "above" || opt.after_closing_active_tab == "above_seek_in_parent") { log("activate group above"); if ($("#"+active_group).prev(".group")[0]) { SetActiveGroup(($("#"+active_group).prev(".group")[0].id), true, true); } else { if ($("#"+active_group).next(".group")[0]) { SetActiveGroup(($("#"+active_group).next(".group")[0].id), true, true); } else { SetActiveGroup("tab_list", true, true); } } } else { log("activate group below"); if ($("#"+active_group).next(".group")[0]) { SetActiveGroup(($("#"+active_group).next(".group")[0].id), true, true); } else { if ($("#"+active_group).prev(".group")[0]) { SetActiveGroup(($("#"+active_group).prev(".group")[0].id), true, true); } else { SetActiveGroup("tab_list", true, true); } } } } else { log("there are more tabs"); if (opt.after_closing_active_tab == "above") { ActivatePrevTab(); } if (opt.after_closing_active_tab == "below") { ActivateNextTab(); } if (opt.after_closing_active_tab == "above_seek_in_parent") { ActivatePrevTabBeforeClose(); } if (opt.after_closing_active_tab == "below_seek_in_parent") { ActivateNextTabBeforeClose(); } } } function ActivateNextTabBeforeClose() { log("function: ActivateNextTabBeforeClose"); if ($(".pin.active_tab:visible")[0]) { if ($(".pin.active_tab").next(".pin")[0]) { chrome.tabs.update(parseInt($(".pin.active_tab").next(".pin")[0].id), { active: true }); } else { if ($(".pin.active_tab").prev(".pin")[0]) { chrome.tabs.update(parseInt($(".pin.active_tab").prev(".pin")[0].id), { active: true }); } } } if ($("#"+active_group+" .tab.active_tab")[0] && $("#"+active_group+" .tab").length > 1) { if ($("#"+active_group+" .tab.active_tab").children().last().children(".tab")[0]) { chrome.tabs.update(parseInt($("#"+active_group+" .tab.active_tab").children().last().children(".tab")[0].id), { active: true }); } else { if ($("#"+active_group+" .tab.active_tab").next(".tab")[0]) { chrome.tabs.update(parseInt($("#"+active_group+" .tab.active_tab").next(".tab")[0].id), { active: true }); } else { if ($("#"+active_group+" .tab.active_tab").prev(".tab")[0]) { chrome.tabs.update(parseInt($("#"+active_group+" .tab.active_tab").prev(".tab")[0].id), { active: true }); } else { if ($("#"+active_group+" .tab.active_tab").parent().is(".children") && $("#"+active_group+" .tab.active_tab").parent().parent(".tab")[0]) { chrome.tabs.update(parseInt($("#"+active_group+" .tab.active_tab").parent().parent(".tab")[0].id), { active: true }); } else { if ($("#"+active_group+" .tab.active_tab").parents(".tab").last().next(".tab")[0]) { chrome.tabs.update(parseInt($("#"+active_group+" .tab.active_tab").parents(".tab").last().next(".tab")[0].id), { active: true }); } else { ActivatePrevTab(); } } } } } } } function ActivatePrevTabBeforeClose() { log("function: ActivatePrevTabBeforeClose"); if ($(".pin.active_tab")[0]) { log("active_tab is pin"); if ($(".pin.active_tab").prev(".pin")[0]) { chrome.tabs.update(parseInt($(".pin.active_tab").prev(".pin")[0].id), { active: true }); } else { if ($(".pin.active_tab").next(".pin")[0]) { chrome.tabs.update(parseInt($(".pin.active_tab").next(".pin")[0].id), { active: true }); } } } if ($("#"+active_group+" .tab.active_tab")[0] && $("#"+active_group+" .tab").length > 1) { log("active_group tabs length is > 1"); if ($("#"+active_group+" .tab.active_tab").children().last().children(".tab")[0]) { log("activating first child, because active tab is root"); chrome.tabs.update(parseInt($("#"+active_group+" .tab.active_tab").children().last().children(".tab")[0].id), { active: true }); } else { if ($("#"+active_group+" .tab.active_tab").prev(".tab")[0]) { log("activating previous tab on same level"); chrome.tabs.update(parseInt($("#"+active_group+" .tab.active_tab").prev(".tab")[0].id), { active: true }); } else { if ($("#"+active_group+" .tab.active_tab").next(".tab")[0]) { log("previous tab not found, activating next one on same level"); chrome.tabs.update(parseInt($("#"+active_group+" .tab.active_tab").next(".tab")[0].id), { active: true }); } else { if ($("#"+active_group+" .tab.active_tab").parent().is(".children") && $(".tab.active_tab").parent().parent(".tab")[0]) { log("previous and next tab not found, which means active tab is last on same level, activating parent"); chrome.tabs.update(parseInt($("#"+active_group+" .tab.active_tab").parent().parent(".tab")[0].id), { active: true }); } else { if ($("#"+active_group+" .tab.active_tab").parents(".tab").last().prev(".tab")[0]) { log("parent tab not found, which means we are on top in hierarchy, activating previous on top level"); chrome.tabs.update(parseInt($("#"+active_group+" .tab.active_tab").parents(".tab").last().prev(".tab")[0].id), { active: true }); } else { log("all attempts to find previous tab failed, lets activate next tab"); ActivateNextTab(); } } } } } } } function ActivateNextTab() { log("function: ActivateNextTab"); if ($(".pin.active_tab")[0]) { log("active_tab is pin"); if ($(".pin.active_tab").next(".pin")[0]) { chrome.tabs.update(parseInt($(".pin.active_tab").next(".pin")[0].id), { active: true }); } else { if ($(".pin.active_tab").prev(".pin")[0]) { chrome.tabs.update(parseInt($(".pin.active_tab").prev(".pin")[0].id), { active: true }); } } } if ($("#"+active_group+" .tab.active_tab")[0] && $("#"+active_group+" .tab").length > 1) { if ($("#"+active_group+" .tab.active_tab").children().last().children(".tab")[0]) { chrome.tabs.update(parseInt($("#"+active_group+" .tab.active_tab").children().last().children(".tab")[0].id), { active: true }); } else { if ($("#"+active_group+" .tab.active_tab").next(".tab")[0]) { chrome.tabs.update(parseInt($("#"+active_group+" .tab.active_tab").next(".tab")[0].id), { active: true }); } else { if ($("#"+active_group+" .tab.active_tab").parent().parent().next("#"+active_group+" .tab")[0]) { chrome.tabs.update(parseInt($("#"+active_group+" .tab.active_tab").parent().parent().next(".tab")[0].id), { active: true }); } else { if ($("#"+active_group+" .tab.active_tab").parents(".tab").last().next(".tab")[0]) { chrome.tabs.update(parseInt($("#"+active_group+" .tab.active_tab").parents(".tab").last().next(".tab")[0].id), { active: true }); } } } } } } function ActivatePrevTab() { log("function: ActivatePrevTab"); if ($(".pin.active_tab")[0]) { log("active_tab is pin"); if ($(".pin.active_tab").prev(".pin")[0]) { chrome.tabs.update(parseInt($(".pin.active_tab").prev(".pin")[0].id), { active: true }); } else { if ($(".pin.active_tab").next(".pin")[0]) { chrome.tabs.update(parseInt($(".pin.active_tab").next(".pin")[0].id), { active: true }); } } } if ($("#"+active_group+" .tab.active_tab")[0] && $("#"+active_group+" .tab").length > 1) { if ($("#"+active_group+" .tab.active_tab").prev().find(".tab").length > 0) { chrome.tabs.update(parseInt($("#"+active_group+" .tab.active_tab").prev().find(".tab").last()[0].id), { active: true }); } else { if ($("#"+active_group+" .tab.active_tab").prev(".tab")[0]) { chrome.tabs.update(parseInt($("#"+active_group+" .tab.active_tab").prev(".tab")[0].id), { active: true }); } else { if ($("#"+active_group+" .tab.tab.active_tab").parent().is(".children") && $("#"+active_group+" .tab.active_tab").parent().parent(".tab")[0]) { chrome.tabs.update(parseInt($("#"+active_group+" .tab.active_tab").parent().parent(".tab")[0].id), { active: true }); } } } } } // ********** TABS EVENTS *************** function SetTabEvents() { $(document).on("dblclick", ".group, #pin_list, .tab", function(event) { // double click to create tab if (event.button == 0 && $(event.target).is(this)) { if (event.target.id == "pin_list") { chrome.tabs.create({ pinned: true }); } else { chrome.tabs.create({}); } } }); $(document).on("mouseenter", ".close", function(event) { $(this).addClass("close_hover"); }); $(document).on("mouseleave", ".close", function(event) { $(".close_hover").removeClass("close_hover"); }); $(document).on("mouseenter", ".expand", function(event) { $(this).addClass("hover"); }); $(document).on("mouseleave", ".expand", function(event) { $(".expand.hover").removeClass("hover"); }); $(document).on("mouseover", ".tab_header", function(event) { $(this).addClass("tab_header_hover"); if (opt.always_show_close == false) { $(this).addClass("close_show"); } }); $(document).on("mouseleave", ".tab_header", function(event) { $(this).removeClass("tab_header_hover"); if (opt.always_show_close == false) { $(this).removeClass("close_show"); } }); $(document).on("mousedown", ".expand", function(event) { // EXPAND BOX - EXPAND / COLLAPSE if (event.button == 0) { if ($(this).parent().parent().is(".o")) { $(this).parent().parent().removeClass("o").addClass("c"); chrome.runtime.sendMessage({ command: "update_tab", tabId: parseInt($(this).parent().parent()[0].id), tab: { expand: "c" } }); } else { if ($(this).parent().parent().is(".c")) { $(this).parent().parent().removeClass("c").addClass("o"); chrome.runtime.sendMessage({command: "update_tab", tabId: parseInt($(this).parent().parent()[0].id), tab: { expand: "o" } }); if (opt.close_other_trees) { $(".o:visible:not(#"+$(this).parent().parent()[0].id+")").removeClass("o").addClass("c"); $(this).parents(".tab").each(function() { $(this).removeClass("n").removeClass("c").addClass("o"); chrome.runtime.sendMessage({ command: "update_tab", tabId: parseInt(this.id), tab: { expand: "o" } }); }); $(".c").each(function() { chrome.runtime.sendMessage({ command: "update_tab", tabId: parseInt(this.id), tab: { expand: "c" } }); }); } } } } }); $(document).on("mousedown", ".tab, .pin", function(event) { // SELECT TAB/PIN if ($(".menu").is(":visible")) { return; } event.stopPropagation(); if (event.button == 0) { $("#"+active_group+" .folder").removeClass("selected_folder"); let tabId = parseInt(this.id); if (event.shiftKey) { // SET SELECTION WITH SHIFT $(".pin, .tab:visible").removeClass("selected_tab").removeClass("selected_frozen").removeClass("selected_temporarly"); if ($(this).index() >= $(".active_tab:visible").index()) { $(".active_tab:visible").nextUntil($(this), ":visible").add($(".active_tab:visible")).add($(this)).addClass("selected_tab"); } else { $(".active_tab:visible").prevUntil($(this), ":visible").add($(".active_tab:visible")).add($(this)).addClass("selected_tab"); } } if (event.ctrlKey) { // TOGGLE SELECTION WITH CTRL // if ($(".active_tab:visible").is(":not(.selected_tab)")) { // $(".active_tab:visible").addClass("selected_tab"); // } $(this).toggleClass("selected_tab"); } } }); $(document).on("mousedown", ".tab_header", function(event) { // CLOSE TAB/PIN let tabId = parseInt($(this).parent()[0].id); if ((event.button == 1 && opt.close_with_MMB == true && $(this).parent().is(".tab")) || (event.button == 1 && opt.close_with_MMB == true && $(this).parent().is(".pin") && opt.allow_pin_close == true) || (event.button == 0 && $(event.target).is(".close, .close_img"))) { if ($(this).parent().is(".active_tab:visible") && opt.after_closing_active_tab != "browser") { ActionBeforeTabsClose(); } // hide pin before it will be closed by listener $(".pin#"+tabId).css({ "width": "0px", "height": "0px", "border": "none", "overflow": "hidden" }); chrome.tabs.update(tabId, {pinned: false}); setTimeout(function() { if ($("#"+tabId)[0]) { chrome.tabs.remove(tabId); } }, 100); } if (event.button == 2) { event.stopPropagation(); ShowTabMenu($(this).parent(), event); } }); $(document).on("click", ".tab_header", function(event) { // SINGLE CLICK TO ACTIVATE TAB if ($(".menu").is(":visible") || ($(this).parent().is(".c, .o") && $(event.target).is(".expand")) || $(event.target).is(".close, .close_img, .tab_mediaicon")) { return; } event.stopPropagation(); if (event.button == 0 && !event.shiftKey && !event.ctrlKey) { SetActiveTab($(this).parent()[0].id); chrome.tabs.update(parseInt($(this).parent()[0].id), { active: true }); } }); }