319 lines
9.5 KiB
JavaScript
319 lines
9.5 KiB
JavaScript
// ********** TABS FUNCTIONS ***************
|
|
|
|
function UpdateData(){
|
|
setTimeout(function(){
|
|
// changed it from 1 to 2 if there are some more changes queued, just in case if something did not catch in the first loop
|
|
if (schedule_update_data > 1){
|
|
schedule_update_data = 2;
|
|
}
|
|
if (schedule_update_data > 0){
|
|
$(".pin").each(function(){
|
|
if (bg.tabs[this.id]){
|
|
bg.tabs[this.id].p = "pin_list";
|
|
bg.tabs[this.id].n = $(this).index();
|
|
bg.tabs[this.id].o = "n";
|
|
}
|
|
});
|
|
$(".tab").each(function(){
|
|
if (bg.tabs[this.id]){
|
|
bg.tabs[this.id].n = $(this).index();
|
|
if ($(this).parent().parent()[0].id){
|
|
bg.tabs[this.id].p = $(this).parent().parent()[0].id;
|
|
} else {
|
|
bg.tabs[this.id].p = "tab_list";
|
|
}
|
|
if ($(this).is(".n")){
|
|
bg.tabs[this.id].o = "n";
|
|
} else {
|
|
if ($(this).is(".c")){
|
|
bg.tabs[this.id].o = "c";
|
|
} else {
|
|
bg.tabs[this.id].o = "o";
|
|
}
|
|
}
|
|
}
|
|
});
|
|
bg.schedule_save++;
|
|
schedule_update_data--;
|
|
} else {
|
|
}
|
|
UpdateData();
|
|
},2000);
|
|
}
|
|
|
|
function AppendTab(p){
|
|
if ($("#"+p.tab.id).length > 0){
|
|
GetFaviconAndTitle(p.tab.id);
|
|
return;
|
|
}
|
|
|
|
var div_tab = document.createElement("div");
|
|
div_tab.id = p.tab.id;
|
|
div_tab.className = p.tab.pinned ? "pin" : "tab n";
|
|
div_tab.innerHTML =
|
|
"<div class='drop_target drag_enter_center' id=dc"+p.tab.id+"></div>"+
|
|
"<div class='drop_target drag_entered_top' id=du"+p.tab.id+"></div>"+
|
|
"<div class='drop_target drag_entered_bottom' id=dd"+p.tab.id+"></div>"+
|
|
"<div class=expand id=exp"+p.tab.id+">"+
|
|
"<div class=exp_line_v id=exp_line_v"+p.tab.id+"></div>"+
|
|
"<div class=exp_line_h id=exp_line_h"+p.tab.id+"></div>"+
|
|
"<div class=exp_box id=exp_box"+p.tab.id+"></div>"+
|
|
"</div>"+
|
|
"<div class=tab_header id=tab_header"+p.tab.id+" draggable=true>"+
|
|
"<div class=tab_title id=tab_title"+p.tab.id+"></div>"+
|
|
|
|
|
|
(bg.opt.never_show_close ? "" :
|
|
("<div class=close id=close"+p.tab.id+"><div class=close_img id=close_img"+p.tab.id+"></div></div>")
|
|
)+
|
|
|
|
|
|
"<div class=tab_mediaicon id=tab_mediaicon"+p.tab.id+"></div>"+
|
|
"</div>"+
|
|
"<div class=children id=ch"+p.tab.id+"></div>";
|
|
|
|
|
|
if (($("#"+p.InsertAfterId).is(".pin") && p.tab.pinned) || ($("#"+p.InsertAfterId).is(".tab") && !p.tab.pinned)){
|
|
$("#"+p.InsertAfterId).parent()[0].append(div_tab);
|
|
$("#"+p.tab.id).insertAfter($("#"+p.InsertAfterId));
|
|
p.ParentId = undefined;
|
|
} else {
|
|
p.InsertAfterId = undefined;
|
|
}
|
|
|
|
if ($("#"+p.ParentId).length > 0 && $("#"+p.ParentId).is(".tab") && !p.tab.pinned){
|
|
if ($("#ch"+p.ParentId).children().length == 0){
|
|
$("#"+p.ParentId).addClass("o").removeClass("n").removeClass("c");
|
|
}
|
|
if (p.Append){
|
|
$("#ch"+p.ParentId).append(div_tab);
|
|
}
|
|
if (!p.Append){
|
|
$("#ch"+p.ParentId).prepend(div_tab);
|
|
}
|
|
} else {
|
|
p.ParentId = undefined;
|
|
}
|
|
|
|
if (p.InsertAfterId == undefined && p.ParentId == undefined){
|
|
if (p.Append){
|
|
$(p.tab.pinned ? "#pin_list" : "#tab_list").append(div_tab);
|
|
}
|
|
if (!p.Append){
|
|
$(p.tab.pinned ? "#pin_list" : "#tab_list").prepend(div_tab);
|
|
}
|
|
}
|
|
|
|
|
|
if (bg.opt.always_show_close){
|
|
$("#tab_header"+p.tab.id).addClass("close_show");
|
|
}
|
|
GetFaviconAndTitle(p.tab.id);
|
|
RefreshMediaIcon(p.tab.id);
|
|
|
|
if (p.tab.discarded){
|
|
$("#"+p.tab.id).addClass("discarded");
|
|
}
|
|
if (p.tab.active){
|
|
SetActiveTab(p.tab.id);
|
|
}
|
|
}
|
|
|
|
function RemoveTabFromList(tabId){
|
|
if ($("#"+tabId).length > 0){
|
|
$("#"+tabId).remove();
|
|
}
|
|
}
|
|
|
|
function SetTabClass(p){
|
|
if (p.pin){
|
|
$("#pin_list").append($("#"+p.id));
|
|
// flatten out children
|
|
if ($("#ch"+p.id).children().length > 0){
|
|
$($("#"+p.id).children().find(".pin, .tab").get().reverse()).each(function(){
|
|
$(this).removeClass("tab").removeClass("n").removeClass("o").removeClass("c").addClass("pin");
|
|
$(this).insertAfter($("#"+p.id));
|
|
chrome.tabs.update(parseInt(this.id), {pinned: true});
|
|
});
|
|
}
|
|
$("#"+p.id).removeClass("tab").removeClass("n").removeClass("o").removeClass("c").addClass("pin");
|
|
} else {
|
|
$("#tab_list").prepend($("#"+p.id));
|
|
|
|
$("#"+p.id).removeClass("pin").addClass("tab");
|
|
RefreshExpandStates();
|
|
}
|
|
chrome.tabs.update(parseInt(p.id), {pinned: p.pin});
|
|
RefreshGUI();
|
|
}
|
|
|
|
function SetActiveTab(tabId){
|
|
if ($("#"+tabId).length > 0){
|
|
$(".active").removeClass("active").removeClass("selected");
|
|
$(".pin, .tab").removeClass("active").removeClass("selected").removeClass("frozen").removeClass("temporary").removeClass("tab_header_hover");
|
|
$(".highlighted_drop_target").removeClass("highlighted_drop_target");
|
|
$("#"+tabId).addClass("active").addClass("selected");
|
|
ScrollToTab(tabId);
|
|
}
|
|
}
|
|
|
|
function ScrollToTab(tabId){
|
|
if ($("#"+tabId).length == 0){
|
|
return false;
|
|
}
|
|
if ($("#"+tabId).is(":not(:visible)")){
|
|
$("#"+tabId).parents(".tab").removeClass("c").addClass("o");
|
|
}
|
|
|
|
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 ($("#"+tabId).offset().top - $("#tab_list").offset().top < 0){
|
|
$("#tab_list").scrollTop($("#tab_list").scrollTop() + $("#"+tabId).offset().top - $("#tab_list").offset().top);
|
|
} else {
|
|
if ($("#"+tabId).offset().top - $("#tab_list").offset().top > $("#tab_list").innerHeight() - $(".tab_header").outerHeight()){
|
|
$("#tab_list").scrollTop($("#tab_list").scrollTop() + $("#"+tabId).offset().top - $("#tab_list").offset().top - $("#tab_list").innerHeight() + $(".tab_header").outerHeight() + 4);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function DetachTabs(tabsIds){
|
|
chrome.windows.get(CurrentWindowId, {populate : true}, function(window){
|
|
if (window.tabs.length == 1){
|
|
return;
|
|
}
|
|
chrome.windows.create({state:window.state}, function(new_window){
|
|
chrome.tabs.move(tabsIds[0], {windowId: new_window.id, index:-1});
|
|
chrome.tabs.remove(new_window.tabs[0].id, null);
|
|
for (var i = 1; i < tabsIds.length; i++){
|
|
chrome.tabs.move(tabsIds[i], {windowId: new_window.id, index:-1});
|
|
}
|
|
})
|
|
});
|
|
}
|
|
|
|
// find and select tabs
|
|
function FindTab(input){
|
|
$(".filtered").removeClass("filtered").removeClass("selected");
|
|
$(".highlighted_search").removeClass("highlighted_search");
|
|
if (input.length == 0){
|
|
$("#filter_box")[0].value = "";
|
|
return;
|
|
}
|
|
SearchIndex = 0;
|
|
chrome.tabs.query({windowId: CurrentWindowId, pinned: false}, function(tabs){
|
|
tabs.forEach(function(Tab){
|
|
if (bg.opt_toolbar.filter_type == "url" && Tab.url.toLowerCase().match(input.toLowerCase())){
|
|
$("#"+Tab.id).addClass("filtered").addClass("selected");
|
|
}
|
|
if (bg.opt_toolbar.filter_type == "title" && Tab.title.toLowerCase().match(input.toLowerCase())){
|
|
$("#"+Tab.id).addClass("filtered").addClass("selected");
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
function CloseTabs(tabsIds){
|
|
tabsIds.forEach(function(tabId) {
|
|
if ($("#"+tabId).is(".pin") && bg.opt.allow_pin_close){
|
|
$("#"+tabId).remove();
|
|
chrome.tabs.update(tabId, {pinned: false});
|
|
}
|
|
if ($("#"+tabId).is(".tab")){
|
|
$("#"+tabId).remove();
|
|
}
|
|
});
|
|
setTimeout(function(){
|
|
chrome.tabs.remove(tabsIds, null);
|
|
},100);
|
|
}
|
|
|
|
|
|
function DiscardTabs(tabsIds){
|
|
var delay = 400;
|
|
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 ActivateNextTab(){
|
|
if ($(".active").is(".pin")){
|
|
if ($(".active").next()[0]){
|
|
chrome.tabs.update(parseInt($(".active").next()[0].id), { active: true });
|
|
}
|
|
}
|
|
|
|
if ($(".active").is(".tab")){
|
|
if ($(".active").children().last().children()[0]){
|
|
chrome.tabs.update(parseInt($(".active").children().last().children()[0].id), { active: true });
|
|
} else {
|
|
if ($(".active").next()[0]){
|
|
chrome.tabs.update(parseInt($(".active").next()[0].id), { active: true });
|
|
} else {
|
|
if ($(".active").parent().parent().next().is(".tab")){
|
|
chrome.tabs.update(parseInt($(".active").parent().parent().next()[0].id), { active: true });
|
|
} else {
|
|
if ($(".active").parents(".tab").eq(-2).next().is(".tab")){
|
|
chrome.tabs.update(parseInt($(".active").parents(".tab").eq(-2).next()[0].id), { active: true });
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function ActivatePrevTab(){
|
|
if ($(".active").is(".pin")){
|
|
if ($(".active").prev()[0]){
|
|
chrome.tabs.update(parseInt($(".active").prev()[0].id), { active: true });
|
|
}
|
|
}
|
|
|
|
if ($(".active").is(".tab")){
|
|
if ($(".active").prev().find(".tab").length > 0){
|
|
chrome.tabs.update(parseInt($(".active").prev().find(".tab").last()[0].id), { active: true });
|
|
} else {
|
|
if ($(".active").prev()[0]){
|
|
chrome.tabs.update(parseInt($(".active").prev()[0].id), { active: true });
|
|
} else {
|
|
if ($(".active").parent().is(".children")){
|
|
chrome.tabs.update(parseInt($(".active").parent().parent()[0].id), { active: true });
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
function DropTargetsSendToFront(){
|
|
if (DropTargetsInFront == false){
|
|
$(".drop_target").show();
|
|
DropTargetsInFront = true;
|
|
}
|
|
}
|
|
function DropTargetsSendToBack(){
|
|
if (DropTargetsInFront){
|
|
$(".drop_target").hide();
|
|
DropTargetsInFront = false;
|
|
}
|
|
} |