TreeTabsMigration/scripts/groups.js

350 lines
12 KiB
JavaScript

// 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/
// ********** GROUPS FUNCTIONS ***************
function SaveGroups() {
chrome.runtime.sendMessage({command: "save_groups", groups: bggroups, windowId: CurrentWindowId});
}
function AppendGroups(Groups) {
// var scroll = $("#group_list").scrollTop();
for (var group in Groups) {
AppendGroupToList(Groups[group].id, Groups[group].name, Groups[group].font);
}
setTimeout(function() {
RearrangeGroupsButtons(0);
}, 1000);
}
function RearrangeGroupsButtons(stack) {
$(".group_button").each(function() {
let groupId = (this.id).substr(1);
if (bggroups[groupId]) {
if ($("#group_list").children().eq(bggroups[groupId].index)[0] && $(this).index() > bggroups[groupId].index) {
$(this).insertBefore($("#group_list").children().eq(bggroups[groupId].index)[0]);
} else {
if ($("#group_list").children().eq(bggroups[groupId].index)[0] && $(this).index() < bggroups[groupId].index) {
$(this).insertAfter($("#group_list").children().eq(bggroups[groupId].index)[0]);
}
}
if ($(this).index() != bggroups[groupId].index && stack < 10) {
RearrangeGroupsButtons(stack+1);
}
}
});
}
function RearrangeGroupsLists() {
let scroll = $("#"+active_group).scrollTop();
$(".group_button").each(function() {
let groupId = (this.id).substr(1);
if ($("#"+groupId)[0]) {
$("#groups").append($("#"+groupId));
}
});
$("#"+active_group).scrollTop(scroll);
}
function AppendGroupToList(groupId, group_name, font_color) {
if ($("#"+groupId).length == 0 && $("#groups")[0]) {
var grp = document.createElement("div"); grp.className = "group"; grp.id = groupId; $("#groups")[0].appendChild(grp);
var gcf = document.createElement("div"); gcf.className = "children_folders"; gcf.id = "cf"+groupId; grp.appendChild(gcf);
var gct = document.createElement("div"); gct.className = "children_tabs"; gct.id = "ch"+groupId; grp.appendChild(gct);
}
if ($("#_"+groupId).length == 0) {
var gbn = document.createElement("div"); gbn.className = "group_button"; gbn.id = "_"+groupId; $("#group_list")[0].appendChild(gbn);
var gte = document.createElement("span"); gte.className = "group_title"; gte.id = "_gte"+groupId; gte.textContent = group_name; if (font_color != "") {gte.style.color = "#"+font_color;} gbn.appendChild(gte);
var gtd = document.createElement("div"); gtd.className = "group_drag_box"; gtd.draggable = true; gtd.id = "-"+groupId; gbn.appendChild(gtd);
}
if (groupId != active_group) {
$("#"+groupId).hide();
}
RefreshGUI();
if (opt.switch_with_scroll) {
BindTabsSwitchingToMouseWheel();
}
}
function GenerateNewGroupID(){
var newID = "g_"+GenerateRandomID();
if ($("#"+newID)[0]) {
GenerateNewGroupID();
} else {
return newID;
}
}
function AddNewGroup(p) {
var newId = GenerateNewGroupID();
bggroups[newId] = { id: newId, index: 0, active_tab: 0, active_tab_ttid: "", name: (p.name ? p.name : caption_noname_group), font: (p.font ? p.font : "") };
AppendGroupToList(newId, bggroups[newId].name, bggroups[newId].font);
UpdateBgGroupsOrder();
return newId;
}
// function AppendTabsToGroup(p) {
// }
// remove group, delete tabs if close_tabs is true
function GroupRemove(groupId, close_tabs) {
if (close_tabs) {
CloseTabs($("#"+groupId).find(".tab").map(function() {return parseInt(this.id);}).toArray());
$("#"+groupId+" .folder").each(function() {
RemoveFolder(this.id);
});
} else {
$("#cf"+groupId).children().each(function() {
$("#cftab_list").append(this);
});
$("#ch"+groupId).children().each(function() {
$("#chtab_list").append(this);
});
RefreshExpandStates();
RefreshCounters();
}
delete bggroups[groupId];
if ($("#"+groupId)[0].id == active_group) {
if ($("#_"+groupId).prev(".group_button")[0]) {
SetActiveGroup(($("#_"+groupId).prev(".group_button")[0].id).substr(1), true, true);
} else {
if ($("#_"+groupId).next(".group_button")[0]) {
SetActiveGroup(($("#_"+groupId).next(".group_button")[0].id).substr(1), true, true);
} else {
SetActiveGroup("tab_list", true, true);
}
}
}
SaveGroups();
$("#"+groupId).remove();
$("#_"+groupId).remove();
schedule_update_data++;
}
function UpdateBgGroupsOrder() {
$(".group_button").each(function() {
if (bggroups[(this.id).substr(1)]) {
bggroups[(this.id).substr(1)].index = $(this).index();
}
});
SaveGroups();
}
function SetActiveGroup(groupId, switch_to_active_in_group, scroll_to_active) {
log("function: SetActiveGroup");
if ($("#"+groupId)[0]) {
active_group = groupId;
$(".group_button").removeClass("active_group");
$("#_"+groupId).addClass("active_group");
$(".tab, .group").hide();
$("#"+groupId).show();
$("#"+groupId+" .tab").show();
RefreshGUI();
$("#group_edit").hide();
if (switch_to_active_in_group && $("#"+groupId+" .active_tab")[0]){
chrome.tabs.update(parseInt($("#"+groupId+" .active_tab")[0].id), {active: true});
}
if (scroll_to_active && $("#"+groupId+" .active_tab")[0]){
ScrollToTab($("#"+groupId+" .active_tab")[0].id);
}
if (groupId == "tab_list") {
$("#button_remove_group, #button_edit_group").addClass("disabled");
} else {
$("#button_remove_group, #button_edit_group").removeClass("disabled");
}
chrome.runtime.sendMessage({command: "set_active_group", active_group: groupId, windowId: CurrentWindowId});
RefreshExpandStates();
RefreshCounters();
}
}
function SetActiveTabInGroup(groupId, tabId) {
if ($(".tab#"+tabId)[0] /* && $("#"+tabId).parents(".group")[0] */ && bggroups[groupId] != undefined) {
// bggroups[$("#"+tabId).parents(".group")[0].id].active_tab = parseInt(tabId);
// if ($("#"+tabId).parents(".group")[0].id != active_group) {
if (groupId != active_group) {
// SetActiveGroup($("#"+tabId).parents(".group")[0].id, false, true);
SetActiveGroup(groupId, false, true);
}
if (bggroups[groupId]) {
bggroups[groupId].active_tab = parseInt(tabId);
}
SaveGroups();
}
}
// direction == true goes up, false goes down
// function ScrollGroupList(direction) {
// if (direction) {
// $("#group_list").scrollTop($("#group_list").scrollTop()-3);
// }
// if (!direction) {
// $("#group_list").scrollTop($("#group_list").scrollTop()+3);
// }
// if (IOKeys.LMB) {
// setTimeout(function() { ScrollGroupList(direction); },10);
// }
// }
// function ScrollToGroup(groupId) {
// if ($("#"+groupId).offset().top-$("#group_list").offset().top < 1) {
// $("#group_list").scrollTop($("#group_list").scrollTop()+$("#"+groupId).offset().top-$("#group_list").offset().top-1);
// } else {
// if ($("#"+groupId).offset().top+$("#"+groupId).outerHeight()+1 > $("#group_list").offset().top+$("#group_list").innerHeight()) {
// $("#group_list").scrollTop($("#group_list").scrollTop()+$("#"+groupId).offset().top-$("#group_list").offset().top-$("#group_list").innerHeight()+$("#"+groupId).outerHeight()-1);
// }
// }
// }
// Edit group popup
function ShowGroupEditWindow() {
if (bggroups[menuItemId]) {
$("#group_edit_name")[0].value = bggroups[menuItemId].name;
$("#group_edit").css({"display": "block", "top": $("#toolbar_groups").offset().top + 8, "left": 22});
$("#group_edit_font").css({"background-color": bggroups[menuItemId].font == "" ? "var(--button_icons, #808080)" : "#"+bggroups[menuItemId].font});
}
}
// when pressed OK in group popup
function GroupEditConfirm() {
if (bggroups[menuItemId]) {
$("#group_edit_name")[0].value = $("#group_edit_name")[0].value.replace(/[\f\n\r\v\t\<\>\+\-\(\)\.\,\;\:\~\/\|\?\@\!\"\'\£\$\%\&\^\#\=\*\[\]]?/gi, "");
bggroups[menuItemId].name = $("#group_edit_name")[0].value;
bggroups[menuItemId].font = RGBtoHex($("#group_edit_font").css("background-color"));
$(".edit_dialog").hide(0);
$(".group_title#_gte" +menuItemId).css({"color": "#"+bggroups[menuItemId].font});
RefreshGUI();
SaveGroups();
}
}
// "Move to group" popup
// function ShowMoveToGroupWindow(x, y) {
// $(".move_to_group_menu_entry").remove();
// bggroups.forEach(function(group) {
// if (vt.ActiveGroup != group.g) {
// var li = document.createElement("li");
// li.id = "move_to_"+group.g;
// li.className = "menu_item move_to_group_menu_entry";
// li.innerHTML = group.n;
// $("#move_to_group_menu")[0].appendChild(li);
// }
// });
// if (x >= $(window).width()-$("#tabs_menu").outerWidth()) {
// x = $(window).width()-$("#tabs_menu").outerWidth();
// }
// if (y >= $(window).height()-$("#move_to_group_menu").outerHeight()-20) {
// y = $(window).height()-$("#move_to_group_menu").outerHeight();
// }
// $("#move_to_group_menu").css({"display": "block", "top": y-24, "left": x-20});
// }
// ********** GROUPS EVENTS ***************
function RestoreStateOfGroupsToolbar() {
chrome.runtime.sendMessage({command: "get_group_bar", windowId: CurrentWindowId}, function(response) {
$("#toolbar_groups").css({"display": "inline-block"});
if (response == true) {
$("#toolbar_groups").removeClass("hidden");
$("#toolbar_groups").css({"width": "19px", "border-right": "1px solid var(--group_list_borders)"});
} else {
$("#toolbar_groups").addClass("hidden");
$("#toolbar_groups").css({"width": "0px", "border-right": "none"});
}
});
}
function SetGroupEvents() {
// activate group
$(document).on("click", ".group_button", function(event) {
// menuGroupId = (this.id).substr(1);
if (event.button == 0) {
SetActiveGroup((this.id).substr(1), true, true);
}
});
// show/hide groups toolbar
$(document).on("mousedown", "#button_groups_toolbar_hide", function(event) {
if (event.button == 0) {
$("#toolbar_groups").toggleClass("hidden");
if ($("#toolbar_groups").is(".hidden")) {
$("#toolbar_groups").css({"width": "0px", "border-right": "none"});
chrome.runtime.sendMessage({command: "set_group_bar", group_bar: false, windowId: CurrentWindowId});
} else {
$("#toolbar_groups").css({"width": "19px", "border-right": "1px solid var(--group_list_borders)"});
chrome.runtime.sendMessage({command: "set_group_bar", group_bar: true, windowId: CurrentWindowId});
}
RefreshGUI();
}
});
// edit group dialog box
$(document).on("mousedown", "#group_edit_discard", function(event) {
$(".edit_dialog").hide(0);
});
$("#group_edit_name").keyup(function(e) {
if (e.keyCode == 13) {
GroupEditConfirm();
}
});
$(document).on("mousedown", "#group_edit_confirm", function(event) {
GroupEditConfirm();
});
// show color picker
$(document).on("mousedown", "#group_edit_font, #group_edit_background", function(event) {
event.stopPropagation();
PickColor = this.id;
$("#color_picker")[0].value = "#"+RGBtoHex($(this).css("background-color"));
$("#color_picker").focus();
$("#color_picker").click();
});
$(document).on("input", "#color_picker", function(event) {
$("#"+PickColor).css({"background-color": $("#color_picker")[0].value});
});
// edit group
$(document).on("dblclick", ".group_button:not(#_tab_list)", function(event) {
if (event.button == 0) {
menuItemId = (this.id).substr(1);
ShowGroupEditWindow();
}
});
// scroll groups
// $(document).on("mousedown", "#scroll_group_up, #scroll_group_down", function(event) {
// IOKeys.LMB = true;
// ScrollGroupList($(this).is("#scroll_group_up"));
// });
// $(document).on("mouseleave", "#scroll_group_up, #scroll_group_down", function(event) {
// IOKeys.LMB = false;
// });
// remove tabs from group button
// $(document).on("mousedown", "#remove_tabs_from_group", function(event) {
// if (event.button == 0 && vt.ActiveGroup.match("at|ut") == null) {
// AppendTabsToGroup({tabsIds: $(".tab.selected_tab:visible").map(function() {return parseInt(this.id);}).toArray(), groupId: "ut", SwitchTabIfHasActive: true, insertAfter: true, moveTabs: true});
// }
// });
// remove group
// $(document).on("mousedown", ".group", function(event) {
// if (event.button == 1 || IOKeys.Shift) {
// if (IOKeys.Shift) {
// GroupRemove($(this)[0].id, true);
// } else {
// GroupRemove($(this)[0].id, false);
// }
// }
// });
}