bumpt to v1.3

This commit is contained in:
karol@jagiello.it 2018-01-01 19:50:56 +01:00
parent 87b6ffa9a7
commit ac290a8319
97 changed files with 3717 additions and 2431 deletions

BIN
..Screenshots/001.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

BIN
..Screenshots/002.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

BIN
..Screenshots/003.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

BIN
..Screenshots/004.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

BIN
..Screenshots/005.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

BIN
..Screenshots/006.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

View File

Before

Width:  |  Height:  |  Size: 169 KiB

After

Width:  |  Height:  |  Size: 169 KiB

View File

Before

Width:  |  Height:  |  Size: 166 KiB

After

Width:  |  Height:  |  Size: 166 KiB

View File

Before

Width:  |  Height:  |  Size: 7.3 KiB

After

Width:  |  Height:  |  Size: 7.3 KiB

View File

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 43 KiB

View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

Before

Width:  |  Height:  |  Size: 96 KiB

After

Width:  |  Height:  |  Size: 96 KiB

View File

Before

Width:  |  Height:  |  Size: 7.6 KiB

After

Width:  |  Height:  |  Size: 7.6 KiB

View File

Before

Width:  |  Height:  |  Size: 7.7 KiB

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

View File

@ -32,6 +32,7 @@ menu: copy urls of the selected tabs
menu: bookmark selected tabs/tree
menu: select all
menu: invert selection
menu: close above/close below
options: Customising the context menu

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -14,7 +14,7 @@
"19": "icons/16.png",
"16": "icons/16.png"
},
"permissions": [ "tabs", "sessions", "<all_urls>" ],
"permissions": [ "tabs", "sessions", "<all_urls>", "storage" ],
"sidebar_action": {
"default_icon": {
@ -39,5 +39,5 @@
"page": "options.html",
"open_in_tab": true
},
"version": "1.1"
"version": "100"
}

View File

@ -3,6 +3,5 @@
<head><meta charset="utf-8"/></head>
<body></body>
<script type="text/javascript" src="../scripts/global.js"></script>
<script type="text/javascript" src="../legacy.js"></script>
<script type="text/javascript" src="../bg_ff.js"></script>
</html>

View File

@ -14,8 +14,7 @@
"19": "icons/16.png",
"16": "icons/16.png"
},
"permissions": [ "tabs", "sessions", "<all_urls>" ],
"permissions": [ "tabs", "sessions", "<all_urls>", "storage" ],
"sidebar_action": {
"default_icon": {
"16": "icons/16.png",
@ -29,6 +28,12 @@
"browser_action": {
"default_icon": "icons/24.png"
},
"commands": {
"_execute_browser_action": {
"suggested_key": { "default": "F2" },
"description": "toggle Tree Tabs"
}
},
"applications": {
"gecko": {
"id": "TreeTabs@jagiello.it",
@ -39,5 +44,5 @@
"page": "options.html",
"open_in_tab": true
},
"version": "0.0.16"
"version": "1.3"
}

View File

@ -15,7 +15,7 @@
"19": "icons/16.png",
"16": "icons/16.png"
},
"permissions": [ "tabs", "sessions", "<all_urls>" ],
"permissions": [ "tabs", "sessions", "<all_urls>", "storage" ],
"sidebar_action": {
"default_icon": {
"19": "icons/16.png",

View File

@ -14,7 +14,7 @@
"19": "icons/16.png",
"16": "icons/16.png"
},
"permissions": [ "tabs", "sessions", "<all_urls>" ],
"permissions": [ "tabs", "sessions", "<all_urls>", "storage" ],
"options_ui": {
"page": "options.html",
"open_in_tab": false

View File

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="24"
height="16"
viewBox="0 0 24 16"
id="svg4216"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="expand_closed_0.svg">
<defs
id="defs4218">
<pattern
y="0"
x="0"
height="6"
width="6"
patternUnits="userSpaceOnUse"
id="EMFhbasepattern" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="16"
inkscape:cx="6.5114579"
inkscape:cy="8.289342"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1028"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:object-paths="true"
inkscape:snap-intersection-paths="true"
inkscape:object-nodes="true"
inkscape:snap-smooth-nodes="true" />
<metadata
id="metadata4221">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1036.3622)">
<rect
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
id="rect4145"
width="4"
height="4"
x="1"
y="1042.3622" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

77
..theme/expand_open_0.svg Normal file
View File

@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="24"
height="24"
viewBox="0 0 24 24"
id="svg4216"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="expand_open_0.svg">
<defs
id="defs4218">
<pattern
y="0"
x="0"
height="6"
width="6"
patternUnits="userSpaceOnUse"
id="EMFhbasepattern" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="16"
inkscape:cx="14.269042"
inkscape:cy="8.1175815"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1028"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:object-paths="true"
inkscape:snap-intersection-paths="true"
inkscape:object-nodes="true"
inkscape:snap-smooth-nodes="true" />
<metadata
id="metadata4221">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1028.3622)">
<rect
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
id="rect4145"
width="6"
height="6"
x="1"
y="1037.3622" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

File diff suppressed because one or more lines are too long

BIN
Tree Tabs.zip Normal file

Binary file not shown.

View File

@ -76,7 +76,7 @@
"message": "Remove group.\nHold shift key to close tabs from this group"
},
"button_edit_group": {
"message": "Edit group"
"message": "Rename group"
},
"button_import_group": {
@ -109,6 +109,23 @@
},
"button_folders": {
"message": "Folders"
},
"button_new_folder": {
"message": "New folder"
},
"button_remove_folder": {
"message": "Remove selected folder/s"
},
"button_edit_folder": {
"message": "Rename folder"
},
"tabs_menu_expand_all": {
@ -168,6 +185,35 @@
"folders_menu_new_folder": {
"message": "New folder"
},
"folders_menu_rename_folder": {
"message": "Rename folder"
},
"folders_menu_delete": {
"message": "Delete"
},
"groups_menu_new_group": {
"message": "New group"
},
"groups_menu_rename": {
"message": "Rename group"
},
"groups_menu_delete": {
"message": "Delete group"
},
"groups_menu_delete_tabs_close": {
"message": "Delete group with tabs"
},
"groups_menu_unload": {
"message": "Unload group"
},
@ -183,49 +229,49 @@
"message": " Pinned tabs bar "
},
"options_pin_list_multi_row": {
"message": "multi row list"
"message": "Multi row list"
},
"option_allow_pin_close": {
"message": "allow to close pinned tabs"
"message": "Allow to close pinned tabs"
},
"options_tabs": {
"message": " Tabs "
},
"options_syncro_tabbar_tabs_order": {
"message": "synchronise browser tabs order with Tree Tabs, tabs can be unresponsive for a second after drag&drop, but this option is needed for correct ctrl+tab switching"
"message": "Synchronize browser tabs order with Tree Tabs, tabs can be unresponsive for a second after drag&drop. This option is needed for correct ctrl+tab switching"
},
"options_switch_with_scroll": {
"message": "switch tabs with mouse wheel"
"message": "Switch tabs with mouse wheel"
},
"options_close_with_MMB": {
"message": "close tabs with middle mouse button"
"message": "Close tabs with middle mouse button"
},
"options_always_show_close": {
"message": "show close button on all tabs"
"message": "Show close button on all tabs"
},
"options_never_show_close": {
"message": "don't show close button (option above will be ignored)"
"message": "Don't show close button (option above will be ignored)"
},
"options_close_other_trees": {
"message": "automatically collapse other trees on expand"
"message": "Automatically collapse other trees on expand"
},
"options_open_tree_on_hover": {
"message": "auto expand collapsed trees when dragging and holding for a second over them"
"message": "Auto expand collapsed trees when dragging and holding for a second over them"
},
"options_promote_children": {
"message": "promote children tabs on close, if disabled, when closing the parent of a tree structure, all tabs will be closed (be careful, because undo close tab will not recover the trees structure)"
"message": "Promote children tabs on close, if disabled, when closing the parent of a tree structure, all tabs will be closed (be careful, because undo close tab will not recover the trees structure)"
},
"options_promote_children_in_first_child": {
"message": "promote first child tab as a parent"
"message": "Promote first child tab as a parent"
},
"options_skip_load": {
"message": "discard tree structure after browser's restart, this option is for those who don't use browser's session. Basically it disables loading database at startup."
"message": "Discard tree structure after browser's restart, this option is for those who don't use browser's session. Basically it disables loading database at startup."
},
"options_append_child_tab": {
"message": "append children tabs at the"
"message": "Append children tabs at the"
},
"options_append_child_tab_top": {
"message": "top (reverse hierarchy)"
@ -233,9 +279,12 @@
"options_append_child_tab_bottom": {
"message": "bottom"
},
"options_append_child_tab_after_active": {
"message": "after active"
},
"options_append_orphan_tab": {
"message": "append orphan tabs (new tabs, tabs opened from shortcuts or from bookmarks)"
"message": "Append orphan tabs (new tabs, tabs opened from shortcuts or from bookmarks)"
},
"options_append_orphan_tab_top": {
"message": "at the top"
@ -251,7 +300,7 @@
},
"options_after_closing_active_tab": {
"message": "after closing active tab,"
"message": "After closing active tab,"
},
"options_after_closing_active_tab_go_up": {
"message": "activate tab above"
@ -259,12 +308,18 @@
"options_after_closing_active_tab_go_down": {
"message": "activate tab below"
},
"options_after_closing_active_tab_go_up_seek_in_parent": {
"message": "activate tab above if on the same level"
},
"options_after_closing_active_tab_go_down_seek_in_parent": {
"message": "activate tab below if on the same level"
},
"options_after_closing_active_tab_go_browser": {
"message": "let browser handle which tab to activate"
"message": "let browser activate tab"
},
"options_append_child_tab_after_limit": {
"message": "once reached tree depth, place tab on the same level, but"
"message": "Once reached tree depth, place tab on the same level, but"
},
"options_append_child_tab_after_limit_top": {
"message": "at the top"
@ -276,17 +331,17 @@
"message": "at the bottom"
},
"options_max_tree_drag_drop": {
"message": "limit Drag&Drop to tree's maximum depth as well"
"message": "Limit Drag&Drop to tree's maximum depth as well"
},
"options_show_counter_tabs": {
"message": "show children tabs count on tab's title"
"message": "Show children tabs count on tab's title"
},
"options_show_counter_tabs_hints": {
"message": "show children tabs count in tab's hint"
"message": "Show children tabs count in tab's hint"
},
"options_max_tree_depth": {
"message": "maximum tree depth: set it to -1 for unlimited branches, 0 for flat tabs placement (no trees), any number above 0 will be its maximum"
"message": "Maximum tree depth: set it to -1 for unlimited branches, 0 for flat tabs placement (no trees), any number above 0 will be its maximum"
},
@ -296,11 +351,14 @@
},
"options_show_counter_groups": {
"message": "show tabs count on groups"
"message": "Show tabs count on groups"
},
"options_groups_toolbar_default": {
"message": "show groups toolbar in new windows"
"message": "Show groups toolbar in new windows"
},
"options_syncro_tabbar_groups_tabs_order": {
"message": "Synchronize browser tabs order after drag&drop of the group tabs. Tabs will sort for a long time, if browser has a lot of tabs open. This option is needed for correct ctrl+tab switching"
},
@ -334,6 +392,9 @@
"options_export_theme_button": {
"message": "Export"
},
"options_share_theme_link": {
"message": "Get more!"
},
@ -475,6 +536,12 @@
"message": "Clear search result x button color"
},
"close_x": {
"message": "x inside the close button"
},
"close_hover_x": {
"message": "x inside the close button on hover"
},
"options_color_pick_hover": {
"message": "On hover"
},
@ -587,6 +654,14 @@
},
"options_development": {
"message": "Development"
},
"options_debug": {
"message": "Debug"
},
@ -606,10 +681,23 @@
"folder_edit_button_cancel": {
"message": "Cancel"
},
"folder_edit_button_confirm": {
"message": "Ok"
},
"warning_exporting_big_amount_of_tabs": {
"message": "Importing big amount of tabs can make your browser unresponsive even for hours! Consider dividing your tabs to groups and exporting each group separately."
},
"caption_ungrouped_group": {
"message": "Ungrouped"
},

View File

@ -5,5 +5,4 @@
<script type="text/javascript" src="../scripts/global.js"></script>
<script type="text/javascript" src="../legacy.js"></script>
<script type="text/javascript" src="../bg_ch.js"></script>
<script type="text/javascript" src="../bg_ff.js"></script>
</html>

267
bg_ch.js
View File

@ -3,112 +3,118 @@
// that can be found at https://creativecommons.org/licenses/by-nc-nd/4.0/
if (browserId != "F") {
ConvertLegacyStorage();
LoadPreferences();
GetCurrentTheme();
ChromeLoadTabs(0);
ChromeMessageListeners();
}
function ChromeLoadTabs(retry) {
chrome.windows.getAll({windowTypes: ['normal'], populate: true}, function(w) {
var refTabs = {};
var tabs_matched = 0;
// load tabs and windows from hdd
var w_count = LoadData("w_count", 0);
var t_count = LoadData("t_count", 0);
var LoadedWindows = LoadData("windows", []);
var LoadedTabs = LoadData("tabs", []);
// if loaded tabs mismatch by 50%, then try to load back
if (LoadedTabs.length < t_count*0.5 || retry > 0) {
LoadedTabs = LoadData("tabs_BAK"+retry, []);
}
// if loaded windows mismatch, then try to load back
if (LoadedWindows.length < w_count || retry > 0) {
LoadedWindows = LoadData("windows_BAK"+retry, []);
}
// CACHED COUNTS
var WinCount = w.length;
var LoadedWinCount = LoadedWindows.length;
var LoadedTabsCount = LoadedTabs.length;
for (var wIndex = 0; wIndex < WinCount; wIndex++) {
if (w[wIndex].tabs[0].url != "chrome://videopopout/") { // this is for opera for their extra video popup, which is weirdly queried as a "normal" window
let winId = w[wIndex].id;
let url1 = w[wIndex].tabs[0].url;
let url2 = w[wIndex].tabs[w[wIndex].tabs.length-1].url;
windows[winId] = {group_bar: opt.groups_toolbar_default, search_filter: "url", active_shelf: "", active_group: "tab_list", groups: {tab_list: {id: "tab_list", index: 0, activetab: 0, name: caption_ungrouped_group, font: ""}}, folders: {}};
for (var LwIndex = 0; LwIndex < LoadedWinCount; LwIndex++) {
if (LoadedWindows[LwIndex].url1 == url1 || LoadedWindows[LwIndex].url2 == url2) {
if (LoadedWindows[LwIndex].group_bar) { windows[winId].group_bar = LoadedWindows[LwIndex].group_bar; }
if (LoadedWindows[LwIndex].search_filter) { windows[winId].search_filter = LoadedWindows[LwIndex].search_filter; }
if (LoadedWindows[LwIndex].active_shelf) { windows[winId].active_shelf = LoadedWindows[LwIndex].active_shelf; }
if (LoadedWindows[LwIndex].active_group) { windows[winId].active_group = LoadedWindows[LwIndex].active_group; }
if (Object.keys(LoadedWindows[LwIndex].groups).length > 0) { windows[winId].groups = Object.assign({}, LoadedWindows[LwIndex].groups); }
if (Object.keys(LoadedWindows[LwIndex].folders).length > 0) { windows[winId].folders = Object.assign({}, LoadedWindows[LwIndex].folders); }
LoadedWindows[LwIndex].url1 = "";
LoadedWindows[LwIndex].url2 = "";
break;
}
}
chrome.storage.local.get(null, function(storage) {
var refTabs = {};
var tabs_matched = 0;
// load tabs and windows from storage.local
var w_count = storage.w_count ? storage.w_count : 0;
var t_count = storage.t_count ? storage.t_count : 0;
var LoadedWindows = storage.windows ? storage.windows : [];
var LoadedTabs = storage.tabs ? storage.tabs : [];
// if loaded tabs mismatch by 50%, then try to load back
if (LoadedTabs.length < t_count*0.5 || retry > 0) {
LoadedTabs = storage["tabs_BAK"+retry] ? storage["tabs_BAK"+retry] : [];
}
}
for (var wIndex = 0; wIndex < WinCount; wIndex++) {
var TabsCount = w[wIndex].tabs.length;
for (var tabIndex = 0; tabIndex < TabsCount; tabIndex++) {
ChromeHashURL(w[wIndex].tabs[tabIndex]);
// if loaded windows mismatch, then try to load back
if (LoadedWindows.length < w_count || retry > 0) {
LoadedWindows = storage["windows_BAK"+retry] ? storage["windows_BAK"+retry] : [];
}
}
// compare saved tabs from storage to current session tabs, but can be skipped if set in options
if (opt.skip_load == false && LoadedTabs.length > 0) {
// match loaded tabs
// CACHED COUNTS
var WinCount = w.length;
var LoadedWinCount = LoadedWindows.length;
var LoadedTabsCount = LoadedTabs.length;
for (var wIndex = 0; wIndex < WinCount; wIndex++) {
var TabsCount = w[wIndex].tabs.length;
for (var tabIndex = 0; tabIndex < TabsCount; tabIndex++) {
for (var LtabIndex = 0; LtabIndex < LoadedTabsCount; LtabIndex++) {
let tabId = w[wIndex].tabs[tabIndex].id;
if (LoadedTabs[LtabIndex].hash == tabs[tabId].hash && refTabs[LoadedTabs[LtabIndex].id] == undefined) {
refTabs[LoadedTabs[LtabIndex].id] = tabId;
if (LoadedTabs[LtabIndex].parent) { tabs[tabId].parent = LoadedTabs[LtabIndex].parent; }
if (LoadedTabs[LtabIndex].index) { tabs[tabId].index = LoadedTabs[LtabIndex].index; }
if (LoadedTabs[LtabIndex].expand) { tabs[tabId].expand = LoadedTabs[LtabIndex].expand; }
LoadedTabs[LtabIndex].hash = undefined;
tabs_matched++;
if (w[wIndex].tabs[0].url != "chrome://videopopout/") { // this is for opera for their extra video popup, which is weirdly queried as a "normal" window
let winId = w[wIndex].id;
let url1 = w[wIndex].tabs[0].url;
let url2 = w[wIndex].tabs[w[wIndex].tabs.length-1].url;
windows[winId] = {group_bar: opt.groups_toolbar_default, search_filter: "url", active_shelf: "", active_group: "tab_list", groups: {tab_list: {id: "tab_list", index: 0, active_tab: 0, name: caption_ungrouped_group, font: ""}}, folders: {}};
for (var LwIndex = 0; LwIndex < LoadedWinCount; LwIndex++) {
if (LoadedWindows[LwIndex].url1 == url1 || LoadedWindows[LwIndex].url2 == url2) {
if (LoadedWindows[LwIndex].group_bar) { windows[winId].group_bar = LoadedWindows[LwIndex].group_bar; }
if (LoadedWindows[LwIndex].search_filter) { windows[winId].search_filter = LoadedWindows[LwIndex].search_filter; }
if (LoadedWindows[LwIndex].active_shelf) { windows[winId].active_shelf = LoadedWindows[LwIndex].active_shelf; }
if (LoadedWindows[LwIndex].active_group) { windows[winId].active_group = LoadedWindows[LwIndex].active_group; }
if (Object.keys(LoadedWindows[LwIndex].groups).length > 0) { windows[winId].groups = Object.assign({}, LoadedWindows[LwIndex].groups); }
if (Object.keys(LoadedWindows[LwIndex].folders).length > 0) { windows[winId].folders = Object.assign({}, LoadedWindows[LwIndex].folders); }
LoadedWindows[LwIndex].url1 = "";
LoadedWindows[LwIndex].url2 = "";
break;
}
}
}
}
// replace parents tabIds for new ones, for that purpose refTabs was made before
for (var tabId in tabs) {
if (refTabs[tabs[tabId].parent] != undefined) {
tabs[tabId].parent = refTabs[tabs[tabId].parent];
for (var wIndex = 0; wIndex < WinCount; wIndex++) {
var TabsCount = w[wIndex].tabs.length;
for (var tabIndex = 0; tabIndex < TabsCount; tabIndex++) {
ChromeHashURL(w[wIndex].tabs[tabIndex]);
}
}
}
// replace active tab ids for each group using refTabs
for (var windowId in windows) {
for (var group in windows[windowId].groups) {
if (refTabs[windows[windowId].groups[group].activetab]) {
windows[windowId].groups[group].activetab = refTabs[windows[windowId].groups[group].activetab];
if (opt.skip_load == false && LoadedTabs.length > 0) { // compare saved tabs from storage to current session tabs, but can be skipped if set in options
for (var wIndex = 0; wIndex < WinCount; wIndex++) { // match loaded tabs
var TabsCount = w[wIndex].tabs.length;
for (var tabIndex = 0; tabIndex < TabsCount; tabIndex++) {
for (var LtabIndex = 0; LtabIndex < LoadedTabsCount; LtabIndex++) {
let tabId = w[wIndex].tabs[tabIndex].id;
if (LoadedTabs[LtabIndex].hash == tabs[tabId].hash && refTabs[LoadedTabs[LtabIndex].id] == undefined) {
refTabs[LoadedTabs[LtabIndex].id] = tabId;
if (LoadedTabs[LtabIndex].parent) { tabs[tabId].parent = LoadedTabs[LtabIndex].parent; }
if (LoadedTabs[LtabIndex].index) { tabs[tabId].index = LoadedTabs[LtabIndex].index; }
if (LoadedTabs[LtabIndex].expand) { tabs[tabId].expand = LoadedTabs[LtabIndex].expand; }
LoadedTabs[LtabIndex].hash = undefined;
tabs_matched++;
break;
}
}
}
}
// replace parents tabIds for new ones, for that purpose refTabs was made before
for (var tabId in tabs) {
if (refTabs[tabs[tabId].parent] != undefined) {
tabs[tabId].parent = refTabs[tabs[tabId].parent];
}
}
}
}
// will try to find tabs for 3 times
if (opt.skip_load == true || retry > 2 || (tabs_matched > t_count*0.5)) {
schedule_save++;
running = true;
ChromeAutoSaveData("", 1000);
ChromeAutoSaveData("_BAK1", 300000);
ChromeAutoSaveData("_BAK2", 600000);
ChromeAutoSaveData("_BAK3", 1800000);
ChromeListeners();
} else {
setTimeout(function() {ChromeLoadTabs(retry+1);}, 2000);
}
// replace active tab ids for each group using refTabs
for (var windowId in windows) {
for (var group in windows[windowId].groups) {
if (refTabs[windows[windowId].groups[group].active_tab]) {
windows[windowId].groups[group].active_tab = refTabs[windows[windowId].groups[group].active_tab];
}
}
}
// will try to find tabs for 3 times
if (opt.skip_load == true || retry > 2 || (tabs_matched > t_count*0.5)) {
schedule_save = 1;
running = true;
ChromeAutoSaveData(0, 1000);
ChromeAutoSaveData(1, 300000);
ChromeAutoSaveData(2, 600000);
ChromeAutoSaveData(3, 1800000);
ChromeListeners();
} else {
setTimeout(function() {
ChromeLoadTabs(retry+1);
}, 2000);
}
});
});
}
// You maybe are asking yourself why I save tabs in array? It's because, instead of, keeping 2 index numbers (one for browser tabs on top and one for my index in tree), it's easier to just arrange them in order and save it in localstorage.
// Another reason is that Object does not preserve order in chrome, I've been told that in Firefox it is. But I can't trust that.
async function ChromeAutoSaveData(BackupName, LoopTimer) {
async function ChromeAutoSaveData(BAK, LoopTimer) {
setInterval(function() {
if (schedule_save > 1 || BackupName != "") {schedule_save = 1;}
if (schedule_save > 1 || BAK > 0) {
schedule_save = 1;
}
if (running && schedule_save > 0 && Object.keys(tabs).length > 1) {
chrome.windows.getAll({windowTypes: ['normal'], populate: true}, function(w) {
var WinCount = w.length;
@ -116,17 +122,14 @@ async function ChromeAutoSaveData(BackupName, LoopTimer) {
var counter = 0;
var Windows = [];
var Tabs = [];
for (var wIndex = 0; wIndex < WinCount; wIndex++) {
t_count += w[wIndex].tabs.length;
}
for (var wIndex = 0; wIndex < WinCount; wIndex++) {
let winId = w[wIndex].id;
if (windows[winId] != undefined && windows[winId].group_bar != undefined && windows[winId].search_filter != undefined && windows[winId].active_shelf != undefined && windows[winId].active_group != undefined && windows[winId].groups != undefined && windows[winId].folders != undefined) {
Windows.push({url1: w[wIndex].tabs[0].url, url2: w[wIndex].tabs[w[wIndex].tabs.length-1].url, group_bar: windows[winId].group_bar, search_filter: windows[winId].search_filter, active_shelf: windows[winId].active_shelf, active_group: windows[winId].active_group, groups: windows[winId].groups, folders: windows[winId].folders});
}
let TabsCount = w[wIndex].tabs.length;
for (var tabIndex = 0; tabIndex < TabsCount; tabIndex++) {
let tabId = w[wIndex].tabs[tabIndex].id;
@ -136,10 +139,28 @@ async function ChromeAutoSaveData(BackupName, LoopTimer) {
}
}
if (counter == t_count) {
localStorage["t_count"] = JSON.stringify(t_count);
localStorage["w_count"] = JSON.stringify(WinCount);
localStorage["windows"+BackupName] = JSON.stringify(Windows);
localStorage["tabs"+BackupName] = JSON.stringify(Tabs);
chrome.storage.local.set({t_count: t_count});
chrome.storage.local.set({w_count: WinCount});
if (BAK == 0) {
chrome.storage.local.set({windows: Windows});
chrome.storage.local.set({tabs: Tabs});
}
if (BAK == 1) {
chrome.storage.local.set({windows_BAK1: Windows});
chrome.storage.local.set({tabs_BAK1: Tabs});
chrome.runtime.sendMessage({command: "backup_available", bak: 1});
}
if (BAK == 2) {
chrome.storage.local.set({windows_BAK2: Windows});
chrome.storage.local.set({tabs_BAK2: Tabs});
chrome.runtime.sendMessage({command: "backup_available", bak: 2});
}
if (BAK == 3) {
chrome.storage.local.set({windows_BAK3: Windows});
chrome.storage.local.set({tabs_BAK3: Tabs});
chrome.runtime.sendMessage({command: "backup_available", bak: 3});
}
}
}
schedule_save--;
@ -147,53 +168,44 @@ async function ChromeAutoSaveData(BackupName, LoopTimer) {
}
}, LoopTimer);
}
function ChromeHashURL(tab){
function ChromeHashURL(tab) {
if (tabs[tab.id] == undefined) {
tabs[tab.id] = {hash: 0, parent: tab.pinned ? "pin_list" : "tab_list", index: tab.index, expand: "n"};
}
var hash = 0;
for (var charIndex = 0; charIndex < tab.url.length; charIndex++){
for (var charIndex = 0; charIndex < tab.url.length; charIndex++) {
hash += tab.url.charCodeAt(charIndex);
}
tabs[tab.id].hash = hash;
}
function ReplaceParents(oldTabId, newTabId) {
for (var tabId in tabs) {
if (tabs[tabId].parent == oldTabId) {
tabs[tabId].parent = newTabId;
}
}
// TO DO FOLDERS
}
// start all listeners
function ChromeListeners() {
function ChromeListeners() { // start all listeners
chrome.tabs.onCreated.addListener(function(tab) {
ChromeHashURL(tab);
chrome.runtime.sendMessage({command: "tab_created", windowId: tab.windowId, tab: tab, tabId: tab.id});
schedule_save++;
});
chrome.tabs.onRemoved.addListener(function(tabId, removeInfo) {
setTimeout(function() { chrome.runtime.sendMessage({command: "tab_removed", windowId: removeInfo.windowId, tabId: tabId}); },5);
delete tabs[tabId];
schedule_save++;
});
chrome.tabs.onAttached.addListener(function(tabId, attachInfo) {
chrome.tabs.get(tabId, function(tab) {
chrome.runtime.sendMessage({command: "tab_attached", windowId: attachInfo.newWindowId, tab: tab, tabId: tabId, ParentId: tabs[tabId].parent});
});
schedule_save++;
});
chrome.tabs.onDetached.addListener(function(tabId, detachInfo) {
chrome.runtime.sendMessage({command: "tab_detached", windowId: detachInfo.oldWindowId, tabId: tabId});
schedule_save++;
});
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
if (tabs[tabId] == undefined || changeInfo.url != undefined) {
ChromeHashURL(tab);
@ -209,11 +221,9 @@ function ChromeListeners() {
}
chrome.runtime.sendMessage({command: "tab_updated", windowId: tab.windowId, tab: tab, tabId: tabId, changeInfo: changeInfo});
});
chrome.tabs.onMoved.addListener(function(tabId, moveInfo) {
schedule_save++;
});
chrome.tabs.onReplaced.addListener(function(addedTabId, removedTabId) {
chrome.tabs.get(addedTabId, function(tab) {
if (addedTabId == removedTabId) {
@ -232,35 +242,48 @@ function ChromeListeners() {
schedule_save++;
});
});
chrome.tabs.onActivated.addListener(function(activeInfo) {
chrome.runtime.sendMessage({command: "tab_activated", windowId: activeInfo.windowId, tabId: activeInfo.tabId});
});
chrome.windows.onCreated.addListener(function(window) {
windows[window.id] = {group_bar: opt.groups_toolbar_default, search_filter: "url", active_shelf: "", active_group: "tab_list", groups: {tab_list: {id: "tab_list", index: 0, activetab: 0, name: caption_ungrouped_group, font: ""}}, folders: {}};
windows[window.id] = {group_bar: opt.groups_toolbar_default, search_filter: "url", active_shelf: "", active_group: "tab_list", groups: {tab_list: {id: "tab_list", index: 0, active_tab: 0, name: caption_ungrouped_group, font: ""}}, folders: {}};
schedule_save++;
});
chrome.windows.onRemoved.addListener(function(windowId) {
delete windows[windowId];
schedule_save++;
});
chrome.runtime.onSuspend.addListener(function() {
running = false;
});
}
function ChromeMessageListeners() {
chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
log("message to background: ");
log(message);
switch(message.command) {
case "reload":
window.location.reload();
break;
case "get_preferences":
sendResponse(opt);
break;
case "save_preferences":
opt = Object.assign({}, message.opt);
chrome.storage.local.set({preferences: message.opt});
break;
case "get_windows":
sendResponse(windows);
break;
case "get_folders":
if (windows[message.windowId]) {
sendResponse(windows[message.windowId].folders);
}
break;
case "save_folders":
windows[message.windowId].folders = Object.assign({}, message.folders);
schedule_save++;
break;
case "get_groups":
if (windows[message.windowId]) {
sendResponse(windows[message.windowId].groups);
@ -270,7 +293,6 @@ function ChromeMessageListeners() {
windows[message.windowId].groups = Object.assign({}, message.groups);
schedule_save++;
break;
case "set_active_group":
windows[message.windowId].active_group = message.active_group;
schedule_save++;
@ -280,11 +302,6 @@ function ChromeMessageListeners() {
sendResponse(windows[message.windowId].active_group);
}
break;
case "set_search_filter":
windows[message.windowId].search_filter = message.search_filter;
schedule_save++;
@ -294,10 +311,6 @@ function ChromeMessageListeners() {
sendResponse(windows[message.windowId].search_filter);
}
break;
case "set_active_shelf":
windows[message.windowId].active_shelf = message.active_shelf;
schedule_save++;
@ -316,13 +329,13 @@ function ChromeMessageListeners() {
sendResponse(windows[message.windowId].group_bar);
}
break;
case "console_log":
console.log(message.m);
break;
// case "console_log":
// console.log(message.m);
// break;
case "get_browser_tabs":
sendResponse(tabs);
break;
case "is_bg_running":
case "is_bg_ready":
sendResponse(running);
break;
case "update_tab":
@ -334,9 +347,11 @@ function ChromeMessageListeners() {
}
break;
case "get_theme":
let theme = LoadData(("theme"+localStorage["current_theme"]), {"TabsSizeSetNumber": 2, "ToolbarShow": true, "toolbar": DefaultToolbar});
sendResponse(theme);
break;
case "reload_theme":
GetCurrentTheme();
break;
}
});
}
}

219
bg_ff.js
View File

@ -3,42 +3,29 @@
// that can be found at https://creativecommons.org/licenses/by-nc-nd/4.0/
if (browserId == "F") {
ConvertLegacyStorage();
FirefoxStart(0);
LoadPreferences();
FirefoxStart();
GetCurrentTheme();
FirefoxMessageListeners();
}
function FirefoxStart() {
var SafeToRun = true;
chrome.tabs.query({}, function(t) {
// will loop forever if session restore tab is found
for (var tabIndex = 0; tabIndex < t.length; tabIndex++) {
if (t[tabIndex].url.match("about:sessionrestore") && t.length < 10) {
SafeToRun = false;
chrome.tabs.update(t[tabIndex].id, { active: true });
}
if (tabIndex == t.length-1) {
if (SafeToRun) {
if (localStorage.getItem("t0") !== null){
LoadV015(0);
} else {
if (localStorage.getItem("tabs") !== null){
FirefoxLoadV100(0);
} else {
FirefoxLoadTabs(0);
}
}
} else {
setTimeout(function() {
FirefoxStart();
}, 1000);
}
function FirefoxStart(retry) {
chrome.windows.getAll({windowTypes: ["normal"], populate: true}, function(w) {
FirefoxLoadTabs(0);
if (w[0].tabs.length == 1 && (w[0].tabs[0].url == "about:blank" || w[0].tabs[0].url == "about:sessionrestore")) {
setTimeout(function() {
FirefoxStart(retry+1);
}, 2000);
} else {
if (retry > 0) {
chrome.runtime.sendMessage({command: "reload_sidebar"});
}
setTimeout(function() {
schedule_save = 0;
}, 2000);
}
});
});
}
function FirefoxLoadTabs(retry) {
chrome.windows.getAll({windowTypes: ["normal"], populate: true}, function(w) {
var tt_ids = {};
@ -47,12 +34,10 @@ function FirefoxLoadTabs(retry) {
for (var wIndex = 0; wIndex < w.length; wIndex++) {
tabs_count += w[wIndex].tabs.length;
}
// CACHED COUNTS AND STUFF
var lastWinId = w[w.length-1].id;
var lastTabId = w[w.length-1].tabs[w[w.length-1].tabs.length-1].id;
var WinCount = w.length;
for (var wIndex = 0; wIndex < WinCount; wIndex++) {
let winIndex = wIndex;
let winId = w[winIndex].id;
@ -60,18 +45,15 @@ function FirefoxLoadTabs(retry) {
// LOAD TTID FROM FIREFOX GET WINDOW VALUE
let win = Promise.resolve(browser.sessions.getWindowValue(winId, "TTdata")).then(function(WindowData) {
if (opt.skip_load == false && WindowData != undefined) {
windows[winId] = Object.assign({}, WindowData);
} else {
windows[winId] = {ttid: "", group_bar: opt.groups_toolbar_default, search_filter: "url", active_shelf: "", active_group: "tab_list", groups: {tab_list: {id: "tab_list", index: 0, activetab: 0, activetab_ttid: "", name: caption_ungrouped_group, font: ""}}, folders: {}};
windows[winId] = {ttid: "", group_bar: opt.groups_toolbar_default, search_filter: "url", active_shelf: "", active_group: "tab_list", groups: {tab_list: {id: "tab_list", index: 0, active_tab: 0, active_tab_ttid: "", name: caption_ungrouped_group, font: ""}}, folders: {}};
}
for (var tIndex = 0; tIndex < tabsCount; tIndex++) {
let tabIndex = tIndex;
let tabId = w[winIndex].tabs[tabIndex].id;
let tabPinned = w[winIndex].tabs[tabIndex].pinned;
// LOAD TTID FROM FIREFOX GET TAB VALUE
let tab = Promise.resolve(browser.sessions.getTabValue(tabId, "TTdata")).then(function(TabData) {
if (opt.skip_load == false && TabData != undefined) {
@ -81,17 +63,16 @@ function FirefoxLoadTabs(retry) {
} else {
tabs[tabId] = {ttid: "", parent_ttid: "", parent: tabPinned ? "pin_list" : "tab_list", index: tabIndex, expand: "n"};
}
// IF ON LAST TAB AND LAST WINDOW, START MATCHING LOADED DATA
if (tabId == lastTabId && winId == lastWinId) {
for (var ThisSessonWinId in windows) {
if (windows[ThisSessonWinId].ttid == ""){
if (windows[ThisSessonWinId].ttid == "") {
AppendWinTTId(parseInt(ThisSessonWinId));
}
}
// OK, DONE WITH WINDOWS, START TABS LOOP
for (var ThisSessonTabId in tabs) {
if (tabs[ThisSessonTabId].ttid == ""){
if (tabs[ThisSessonTabId].ttid == "") {
AppendTabTTId(parseInt(ThisSessonTabId));
}
}
@ -101,28 +82,26 @@ function FirefoxLoadTabs(retry) {
tabs[ThisSessonTabId].parent = tt_ids[tabs[ThisSessonTabId].parent_ttid];
}
}
// OK, SAME THING FOR ACTIVE TABS IN GROUPS
for (var ThisSessonWinId in windows) {
for (var group in windows[ThisSessonWinId].groups) {
if (tt_ids[windows[ThisSessonWinId].groups[group].activetab_ttid] != undefined) {
windows[ThisSessonWinId].groups[group].activetab = tt_ids[windows[ThisSessonWinId].groups[group].activetab_ttid];
if (tt_ids[windows[ThisSessonWinId].groups[group].active_tab_ttid] != undefined) {
windows[ThisSessonWinId].groups[group].active_tab = tt_ids[windows[ThisSessonWinId].groups[group].active_tab_ttid];
}
}
}
// TODO
// replace parent tab ids for each folder using reference_tabs, unless tabs will be nested ONLY in tabs and folders ONLY in folders, I did not decide yet
// will try to find tabs for 3 times
if (opt.skip_load == true || retry > 2 || (tabs_matched > tabs_count*0.5)) {
running = true;
// setInterval(function() {
FirefoxAutoSaveData();
// }, 10000);
FirefoxListeners();
} else {
setTimeout(function() {FirefoxLoadTabs(retry+1);}, 2000);
setTimeout(function() {
FirefoxLoadTabs(retry+1);
}, 2000);
}
}
});
}
@ -130,11 +109,12 @@ function FirefoxLoadTabs(retry) {
}
});
}
// save every second if there is anything to save obviously
async function FirefoxAutoSaveData() {
setInterval(function() {
if (schedule_save > 1) {schedule_save = 1;}
if (schedule_save > 1) {
schedule_save = 1;
}
if (running && schedule_save > 0 && Object.keys(tabs).length > 1) {
chrome.windows.getAll({windowTypes: ['normal'], populate: true}, function(w) {
var WinCount = w.length;
@ -156,8 +136,7 @@ async function FirefoxAutoSaveData() {
}
}, 1000);
}
function GenerateNewWindowID(){
function GenerateNewWindowID() {
var newID = "w_"+GenerateRandomID();
var newIdAvailable = true;
for (var windowId in windows) {
@ -171,8 +150,7 @@ function GenerateNewWindowID(){
GenerateNewWindowID();
}
}
function GenerateNewTabID(){
function GenerateNewTabID() {
var newID = "t_"+GenerateRandomID();
var newIdAvailable = true;
for (var tabId in tabs) {
@ -186,97 +164,85 @@ function GenerateNewTabID(){
GenerateNewTabID();
}
}
function AppendTabTTId(tabId){
function AppendTabTTId(tabId) {
let NewTTTabId = GenerateNewTabID();
if (tabs[tabId] != undefined) {
tabs[tabId].ttid = NewTTTabId;
} else {
tabs[tabId] = {ttid: NewTTTabId, parent: "tab_list", parent_ttid: "", index: 0, expand: "n"};
}
browser.sessions.setTabValue( tabId, "TTdata", tabs[tabId] );
// if (schedule_save > 0) browser.sessions.setTabValue( tabId, "TTdata", tabs[tabId] );
}
function AppendWinTTId(windowId){
function AppendWinTTId(windowId) {
let NewTTWindowId = GenerateNewWindowID();
if (windows[windowId] != undefined) {
windows[windowId].ttid = NewTTWindowId;
} else {
windows[windowId] = {ttid: NewTTWindowId, group_bar: opt.groups_toolbar_default, search_filter: "url", active_shelf: "", active_group: "tab_list", groups: {tab_list: {id: "tab_list", index: 0, activetab: 0, activetab_ttid: "", name: caption_ungrouped_group, font: ""}}, folders: {}};
windows[windowId] = {ttid: NewTTWindowId, group_bar: opt.groups_toolbar_default, search_filter: "url", active_shelf: "", active_group: "tab_list", groups: {tab_list: {id: "tab_list", index: 0, active_tab: 0, active_tab_ttid: "", name: caption_ungrouped_group, font: ""}}, folders: {}};
}
browser.sessions.setWindowValue( windowId, "TTdata", windows[windowId] );
// if (schedule_save > 0) browser.sessions.setWindowValue( windowId, "TTdata", windows[windowId] );
}
function ReplaceParents(oldTabId, newTabId) {
for (var tabId in tabs) {
if (tabs[tabId].parent == oldTabId) {
console.log("replaced tab id "+oldTabId+" with "+newTabId);
tabs[tabId].parent = newTabId;
}
}
// TO DO FOLDERS
}
var DETACHED_TABS___Bug1398272___WTF_ARE_YOU_DOING_MOZILLA = {};
// start all listeners
function FirefoxListeners() {
// browser.commands.onCommand.addListener(function(command) {
// if (command == "open_sidebar") {
// browser.sidebarAction.setPanel({panel: (browser.extension.getURL("/sidebar.html")) });
// browser.sidebarAction.open();
// }
// chrome.windows.getLastFocused({windowTypes: ["normal"]}, function(window) {
// if (CurrentWindowId == window.id) {
// if (command == "open_sidebar") {
// ActivatePrevTab();
// }
// }
// });
// });
browser.browserAction.onClicked.addListener(function() {
browser.sidebarAction.setPanel({panel: (browser.extension.getURL("/sidebar.html")) });
browser.sidebarAction.open();
});
chrome.tabs.onCreated.addListener(function(tab) {
AppendTabTTId(tab.id);
let t = Promise.resolve(browser.sessions.getTabValue(tab.id, "TTdata")).then(function(TabData) {
if (TabData != undefined) {
tabs[tab.id] = Object.assign({}, TabData);
} else {
AppendTabTTId(tab.id);
}
schedule_save++;
});
chrome.runtime.sendMessage({command: "tab_created", windowId: tab.windowId, tab: tab, tabId: tab.id});
schedule_save++;
});
chrome.tabs.onAttached.addListener(function(tabId, attachInfo) {
chrome.tabs.get(tabId, function(tab) {
ReplaceParents(tabId, tab.id);
DETACHED_TABS___Bug1398272___WTF_ARE_YOU_DOING_MOZILLA[tabId] = tab.id;
tabs[tab.id] = tabs[tabId];
AppendTabTTId(tab.id);
// let ParentId = DETACHED_TABS___Bug1398272___WTF_ARE_YOU_DOING_MOZILLA[tabs[tabId].parent] ? DETACHED_TABS___Bug1398272___WTF_ARE_YOU_DOING_MOZILLA[tabs[tabId].parent] : tabs[tabId].parent;
// chrome.runtime.sendMessage({command: "tab_attached", windowId: attachInfo.newWindowId, tab: tab, tabId: tabId, ParentId: ParentId});
chrome.runtime.sendMessage({command: "tab_attached", windowId: attachInfo.newWindowId, tab: tab, tabId: tabId, ParentId: tabs[tabId].parent});
let oldId = tabId;
chrome.tabs.get(oldId, function(tab) {
ReplaceParents(oldId, tab.id);
tabs[tab.id] = tabs[oldId];
DETACHED_TABS___Bug1398272___WTF_ARE_YOU_DOING_MOZILLA[oldId] = tab.id;
DETACHED_TABS___Bug1398272___WTF_ARE_YOU_DOING_MOZILLA[tab.id] = oldId;
browser.sessions.setTabValue( tab.id, "TTdata", tabs[oldId] );
chrome.runtime.sendMessage({command: "tab_attached", windowId: attachInfo.newWindowId, tab: tab, tabId: tab.id, ParentId: tabs[tab.id].parent});
schedule_save++;
});
});
chrome.tabs.onDetached.addListener(function(tabId, detachInfo) {
let detachTabId = tabId;
chrome.runtime.sendMessage({command: "tab_detached", windowId: detachInfo.oldWindowId, tabId: tabId});
let detachTabId = tabId;
if (DETACHED_TABS___Bug1398272___WTF_ARE_YOU_DOING_MOZILLA[tabId] != undefined) {
detachTabId = DETACHED_TABS___Bug1398272___WTF_ARE_YOU_DOING_MOZILLA[tabId];
setTimeout(function() {
delete DETACHED_TABS___Bug1398272___WTF_ARE_YOU_DOING_MOZILLA[tabId];
},2000);
chrome.runtime.sendMessage({command: "tab_detached", windowId: detachInfo.oldWindowId, tabId: DETACHED_TABS___Bug1398272___WTF_ARE_YOU_DOING_MOZILLA[tabId]});
}
chrome.runtime.sendMessage({command: "tab_detached", windowId: detachInfo.oldWindowId, tabId: detachTabId});
});
chrome.tabs.onRemoved.addListener(function(tabId, removeInfo) {
setTimeout(function() { chrome.runtime.sendMessage({command: "tab_removed", windowId: removeInfo.windowId, tabId: tabId}); },5);
delete tabs[tabId];
setTimeout(function() {
if (DETACHED_TABS___Bug1398272___WTF_ARE_YOU_DOING_MOZILLA[tabId] != undefined) {
chrome.runtime.sendMessage({command: "tab_removed", windowId: removeInfo.windowId, tabId: DETACHED_TABS___Bug1398272___WTF_ARE_YOU_DOING_MOZILLA[tabId]});
}
chrome.runtime.sendMessage({command: "tab_removed", windowId: removeInfo.windowId, tabId: tabId});
}, 5);
// setTimeout(function() {
// delete tabs[tabId];
// },60000);
schedule_save++;
});
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
if (changeInfo.pinned == true) {
tabs[tabId].parent = "pin_list";
@ -288,7 +254,6 @@ function FirefoxListeners() {
}
chrome.runtime.sendMessage({command: "tab_updated", windowId: tab.windowId, tab: tab, tabId: tabId, changeInfo: changeInfo});
});
chrome.tabs.onReplaced.addListener(function(addedTabId, removedTabId) {
chrome.tabs.get(addedTabId, function(tab) {
if (addedTabId == removedTabId) {
@ -300,7 +265,7 @@ function FirefoxListeners() {
ReplaceParents(tabId, tab.id);
chrome.runtime.sendMessage({command: "tab_removed", windowId: tab.windowId, tabId: removedTabId});
chrome.runtime.sendMessage({command: "tab_attached", windowId: tab.windowId, tab: tab, tabId: addedTabId, ParentId: tabs[addedTabId].parent});
delete tabs[removedTabId];
// delete tabs[removedTabId];
}
setTimeout(function() {
AppendTabTTId(addedTabId);
@ -309,31 +274,51 @@ function FirefoxListeners() {
});
});
chrome.tabs.onActivated.addListener(function(activeInfo) {
chrome.runtime.sendMessage({command: "tab_activated", windowId: activeInfo.windowId, tabId: activeInfo.tabId});
});
chrome.windows.onCreated.addListener(function(window) {
AppendWinTTId(window.id);
schedule_save++;
let win = Promise.resolve(browser.sessions.getWindowValue(window.id, "TTdata")).then(function(WindowData) {
if (WindowData != undefined) {
windows[winId] = Object.assign({}, WindowData);
} else {
AppendWinTTId(window.id);
}
schedule_save++;
});
});
chrome.windows.onRemoved.addListener(function(windowId) {
delete windows[windowId];
// delete windows[windowId];
schedule_save++;
});
}
function FirefoxMessageListeners() {
chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
log("message to background: ");
log(message);
switch(message.command) {
case "reload":
window.location.reload();
break;
case "get_preferences":
sendResponse(opt);
break;
case "save_preferences":
opt = Object.assign({}, message.opt);
chrome.storage.local.set({preferences: message.opt});
break;
case "get_windows":
sendResponse(windows);
break;
case "get_folders":
if (windows[message.windowId]) {
sendResponse(windows[message.windowId].folders);
}
break;
case "save_folders":
windows[message.windowId].folders = Object.assign({}, message.folders);
schedule_save++;
break;
case "get_groups":
if (windows[message.windowId]) {
sendResponse(windows[message.windowId].groups);
@ -342,8 +327,8 @@ function FirefoxMessageListeners() {
case "save_groups":
windows[message.windowId].groups = Object.assign({}, message.groups);
for (var group in windows[message.windowId].groups) {
if (tabs[windows[message.windowId].groups[group].activetab]) {
windows[message.windowId].groups[group].activetab_ttid = tabs[windows[message.windowId].groups[group].activetab].ttid;
if (tabs[windows[message.windowId].groups[group].active_tab]) {
windows[message.windowId].groups[group].active_tab_ttid = tabs[windows[message.windowId].groups[group].active_tab].ttid;
}
}
schedule_save++;
@ -384,13 +369,13 @@ function FirefoxMessageListeners() {
sendResponse(windows[message.windowId].group_bar);
}
break;
case "console_log":
console.log(message.m);
break;
// case "console_log":
// console.log(message.m);
// break;
case "get_browser_tabs":
sendResponse(tabs);
break;
case "is_bg_running":
case "is_bg_ready":
sendResponse(running);
break;
case "update_tab":
@ -413,9 +398,11 @@ function FirefoxMessageListeners() {
}
break;
case "get_theme":
let theme = LoadData(("theme"+localStorage["current_theme"]), {"TabsSizeSetNumber": 2, "ToolbarShow": true, "toolbar": DefaultToolbar});
sendResponse(theme);
break;
case "reload_theme":
GetCurrentTheme();
break;
}
});
}
}

View File

@ -1,8 +0,0 @@
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"/></head>
<body></body>
<script type="text/javascript" src="../scripts/global.js"></script>
<script type="text/javascript" src="../bg_v015_to_v1.js"></script>
<script type="text/javascript" src="../bg_ch.js"></script>
</html>

View File

@ -1,341 +0,0 @@
// 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/
if (localStorage.getItem("t0") !== null){
LoadV015(0);
} else {
LoadPreferences();
ChromeLoadTabs(0);
ChromeMessageListeners();
}
function ChromeLoadTabs(retry) {
chrome.windows.getAll({windowTypes: ['normal'], populate: true}, function(w) {
var refTabs = {};
var tabs_matched = 0;
// load tabs and windows from hdd
var w_count = LoadData("w_count", 0);
var t_count = LoadData("t_count", 0);
var LoadedWindows = LoadData("windows", []);
var LoadedTabs = LoadData("tabs", []);
// if loaded tabs mismatch by 50%, then try to load back
if (LoadedTabs.length < t_count*0.5 || retry > 0) {
LoadedTabs = LoadData("tabs_BAK"+retry, []);
}
// if loaded windows mismatch, then try to load back
if (LoadedWindows.length < w_count || retry > 0) {
LoadedWindows = LoadData("windows_BAK"+retry, []);
}
// CACHED COUNTS
var WinCount = w.length;
var LoadedWinCount = LoadedWindows.length;
var LoadedTabsCount = LoadedTabs.length;
for (var wIndex = 0; wIndex < WinCount; wIndex++) {
if (w[wIndex].tabs[0].url != "chrome://videopopout/") { // this is for opera for their extra video popup, which is weirdly queried as a "normal" window
let winId = w[wIndex].id;
let url1 = w[wIndex].tabs[0].url;
let url2 = w[wIndex].tabs[w[wIndex].tabs.length-1].url;
windows[winId] = {group_bar: true, active_shelf: "", active_group: "tab_list", groups: {tab_list: {id: "tab_list", index: 0, activetab: 0, name: caption_ungrouped_group, font: ""}}, folders: {}};
for (var LwIndex = 0; LwIndex < LoadedWinCount; LwIndex++) {
if (LoadedWindows[LwIndex].url1 == url1 || LoadedWindows[LwIndex].url2 == url2) {
windows[winId].group_bar = LoadedWindows[LwIndex].group_bar;
windows[winId].active_shelf = LoadedWindows[LwIndex].active_shelf;
windows[winId].active_group = LoadedWindows[LwIndex].active_group;
if (Object.keys(LoadedWindows[LwIndex].groups).length > 0) { windows[winId].groups = Object.assign({}, LoadedWindows[LwIndex].groups); }
if (Object.keys(LoadedWindows[LwIndex].folders).length > 0) { windows[winId].folders = Object.assign({}, LoadedWindows[LwIndex].folders); }
LoadedWindows[LwIndex].url1 = "";
LoadedWindows[LwIndex].url2 = "";
break;
}
}
}
}
for (var wIndex = 0; wIndex < WinCount; wIndex++) {
var TabsCount = w[wIndex].tabs.length;
for (var tabIndex = 0; tabIndex < TabsCount; tabIndex++) {
ChromeHashURL(w[wIndex].tabs[tabIndex]);
}
}
// compare saved tabs from storage to current session tabs, but can be skipped if set in options
if (opt.skip_load == false && LoadedTabs.length > 0) {
// match loaded tabs
for (var wIndex = 0; wIndex < WinCount; wIndex++) {
var TabsCount = w[wIndex].tabs.length;
for (var tabIndex = 0; tabIndex < TabsCount; tabIndex++) {
for (var LtabIndex = 0; LtabIndex < LoadedTabsCount; LtabIndex++) {
let tabId = w[wIndex].tabs[tabIndex].id;
if (LoadedTabs[LtabIndex].hash == tabs[tabId].hash && refTabs[LoadedTabs[LtabIndex].id] == undefined) {
refTabs[LoadedTabs[LtabIndex].id] = tabId;
tabs[tabId].parent = LoadedTabs[LtabIndex].parent;
tabs[tabId].index = LoadedTabs[LtabIndex].index;
tabs[tabId].expand = LoadedTabs[LtabIndex].expand;
LoadedTabs[LtabIndex].hash = undefined;
tabs_matched++;
break;
}
}
}
}
// replace parents tabIds for new ones, for that purpose refTabs was made before
for (var tabId in tabs) {
if (refTabs[tabs[tabId].parent] != undefined) {
tabs[tabId].parent = refTabs[tabs[tabId].parent];
}
}
}
// replace active tab ids for each group using refTabs
for (var windowId in windows) {
for (var group in windows[windowId].groups) {
if (refTabs[windows[windowId].groups[group].activetab]) {
windows[windowId].groups[group].activetab = refTabs[windows[windowId].groups[group].activetab];
}
}
}
// will try to find tabs for 3 times
if (opt.skip_load == true || retry > 2 || (tabs_matched > t_count*0.5)) {
schedule_save++;
hold = false;
ChromeAutoSaveData("", 1000);
ChromeAutoSaveData("_BAK1", 300000);
ChromeAutoSaveData("_BAK2", 600000);
ChromeAutoSaveData("_BAK3", 1800000);
ChromeListeners();
} else {
setTimeout(function() {ChromeLoadTabs(retry+1);}, 2000);
}
});
}
// You maybe are asking yourself why I save tabs in array? It's because, instead of, keeping 2 index numbers (one for browser tabs on top and one for my index in tree), it's easier to just arrange them in order and save it in localstorage.
// Another reason is that Object does not preserve order in chrome, I've been told that in Firefox it is. But I can't trust that.
async function ChromeAutoSaveData(BackupName, LoopTimer) {
setTimeout(function() {
ChromeAutoSaveData(BackupName, LoopTimer);
if (schedule_save > 1 || BackupName != "") {schedule_save = 1;}
if (!hold && schedule_save > 0 && Object.keys(tabs).length > 1) {
chrome.windows.getAll({windowTypes: ['normal'], populate: true}, function(w) {
var WinCount = w.length;
var t_count = 0;
var counter = 0;
var Windows = [];
var Tabs = [];
for (var wIndex = 0; wIndex < WinCount; wIndex++) {
t_count += w[wIndex].tabs.length;
}
for (var wIndex = 0; wIndex < WinCount; wIndex++) {
let winId = w[wIndex].id;
if (windows[winId] != undefined && windows[winId].group_bar != undefined && windows[winId].active_shelf != undefined && windows[winId].active_group != undefined && windows[winId].groups != undefined && windows[winId].folders != undefined) {
Windows.push({url1: w[wIndex].tabs[0].url, url2: w[wIndex].tabs[w[wIndex].tabs.length-1].url, group_bar: windows[winId].group_bar, active_shelf: windows[winId].active_shelf, active_group: windows[winId].active_group, groups: windows[winId].groups, folders: windows[winId].folders});
}
let TabsCount = w[wIndex].tabs.length;
for (var tabIndex = 0; tabIndex < TabsCount; tabIndex++) {
let tabId = w[wIndex].tabs[tabIndex].id;
if (tabs[tabId] != undefined && tabs[tabId].hash != undefined && tabs[tabId].parent != undefined && tabs[tabId].index != undefined && tabs[tabId].expand != undefined) {
Tabs.push({id: tabId, hash: tabs[tabId].hash, parent: tabs[tabId].parent, index: tabs[tabId].index, expand: tabs[tabId].expand});
counter++;
}
}
if (counter == t_count) {
localStorage["t_count"] = JSON.stringify(t_count);
localStorage["w_count"] = JSON.stringify(WinCount);
localStorage["windows"+BackupName] = JSON.stringify(Windows);
localStorage["tabs"+BackupName] = JSON.stringify(Tabs);
}
}
schedule_save--;
});
}
}, LoopTimer);
}
function ChromeHashURL(tab){
if (tabs[tab.id] == undefined) {
tabs[tab.id] = {hash: 0, parent: tab.pinned ? "pin_list" : "tab_list", index: tab.index, expand: "n"};
}
var hash = 0;
for (var charIndex = 0; charIndex < tab.url.length; charIndex++){
hash += tab.url.charCodeAt(charIndex);
}
tabs[tab.id].hash = hash;
}
function ReplaceParents(oldTabId, newTabId) {
for (var tabId in tabs) {
if (tabs[tabId].parent == oldTabId) {
tabs[tabId].parent = newTabId;
}
}
// TO DO FOLDERS
}
// start all listeners
function ChromeListeners() {
chrome.tabs.onCreated.addListener(function(tab) {
ChromeHashURL(tab);
chrome.runtime.sendMessage({command: "tab_created", windowId: tab.windowId, tab: tab, tabId: tab.id});
schedule_save++;
});
chrome.tabs.onRemoved.addListener(function(tabId, removeInfo) {
chrome.runtime.sendMessage({command: "tab_removed", windowId: removeInfo.windowId, tabId: tabId});
delete tabs[tabId];
schedule_save++;
});
chrome.tabs.onAttached.addListener(function(tabId, attachInfo) {
chrome.tabs.get(tabId, function(tab) {
chrome.runtime.sendMessage({command: "tab_attached", windowId: attachInfo.newWindowId, tab: tab, tabId: tabId, ParentId: tabs[tabId].parent});
});
schedule_save++;
});
chrome.tabs.onDetached.addListener(function(tabId, detachInfo) {
chrome.runtime.sendMessage({command: "tab_detached", windowId: detachInfo.oldWindowId, tabId: tabId});
schedule_save++;
});
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
if (tabs[tabId] == undefined || changeInfo.url != undefined) {
ChromeHashURL(tab);
}
if (changeInfo.pinned != undefined) {
schedule_save++;
}
if (changeInfo.pinned == true) {
tabs[tabId].parent = "pin_list";
}
if (changeInfo.title != undefined && !tab.active) {
chrome.runtime.sendMessage({command: "tab_attention", windowId: tab.windowId, tabId: tabId});
}
chrome.runtime.sendMessage({command: "tab_updated", windowId: tab.windowId, tab: tab, tabId: tabId, changeInfo: changeInfo});
});
chrome.tabs.onMoved.addListener(function(tabId, moveInfo) {
schedule_save++;
});
chrome.tabs.onReplaced.addListener(function(addedTabId, removedTabId) {
chrome.tabs.get(addedTabId, function(tab) {
if (addedTabId == removedTabId) {
chrome.runtime.sendMessage({command: "tab_updated", windowId: tab.windowId, tab: tab, tabId: tab.id, changeInfo: {status: tab.status, url: tab.url, title: tab.title, audible: tab.audible, mutedInfo: tab.mutedInfo}});
} else {
ReplaceParents(tabId, tab.id);
if (tabs[removedTabId]) {
tabs[addedTabId] = tabs[removedTabId];
} else {
ChromeHashURL(tab);
}
chrome.runtime.sendMessage({command: "tab_removed", windowId: tab.windowId, tabId: removedTabId});
chrome.runtime.sendMessage({command: "tab_attached", windowId: tab.windowId, tab: tab, tabId: addedTabId});
delete tabs[removedTabId];
}
schedule_save++;
});
});
chrome.tabs.onActivated.addListener(function(activeInfo) {
chrome.runtime.sendMessage({command: "tab_activated", windowId: activeInfo.windowId, tabId: activeInfo.tabId});
});
chrome.windows.onCreated.addListener(function(window) {
windows[window.id] = {group_bar: true, active_shelf: "", active_group: "tab_list", groups: {tab_list: {id: "tab_list", index: 0, activetab: 0, name: caption_ungrouped_group, font: ""}}, folders: {}};
schedule_save++;
});
chrome.windows.onRemoved.addListener(function(windowId) {
delete windows[windowId];
schedule_save++;
});
chrome.runtime.onSuspend.addListener(function() {
hold = true;
});
}
function ChromeMessageListeners() {
chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
switch(message.command) {
case "reload":
window.location.reload();
break;
case "get_windows":
sendResponse(windows);
break;
case "get_groups":
if (windows[message.windowId]) {
sendResponse(windows[message.windowId].groups);
}
break;
case "save_groups":
windows[message.windowId].groups = Object.assign({}, message.groups);
schedule_save++;
break;
case "set_active_group":
windows[message.windowId].active_group = message.active_group;
schedule_save++;
break;
case "get_active_group":
if (windows[message.windowId]) {
sendResponse(windows[message.windowId].active_group);
}
break;
case "set_active_shelf":
windows[message.windowId].active_shelf = message.active_shelf;
schedule_save++;
break;
case "get_active_shelf":
if (windows[message.windowId]) {
sendResponse(windows[message.windowId].active_shelf);
}
break;
case "set_group_bar":
windows[message.windowId].group_bar = message.group_bar;
schedule_save++;
break;
case "get_group_bar":
if (windows[message.windowId]) {
sendResponse(windows[message.windowId].group_bar);
}
break;
case "console_log":
console.log(message.m);
break;
case "get_browser_tabs":
sendResponse(tabs);
break;
case "is_bg_busy":
sendResponse(hold);
break;
case "update_tab":
if (tabs[message.tabId]) {
for (var parameter in message.tab) {
tabs[message.tabId][parameter] = message.tab[parameter];
}
schedule_save++;
}
break;
}
});
}

100
legacy.js
View File

@ -105,8 +105,6 @@ function LoadV015(retry){
});
}
function FirefoxLoadV100(retry) {
chrome.windows.getAll({windowTypes: ["normal"], populate: true}, function(w) {
@ -250,4 +248,100 @@ function FirefoxLoadV100(retry) {
});
}
});
}
}
function ConvertLegacyStorage() {
if (localStorage.getItem("current_theme") != null || localStorage.getItem("preferences") != null || localStorage.getItem("tabs") != null || localStorage.getItem("windows") != null) {
let current_theme = "";
if (localStorage.getItem("current_theme") != null) {
current_theme = localStorage["current_theme"];
}
let LSthemes = [];
if (localStorage.getItem("themes") != null) {
LSthemes = LoadData("themes", []);
}
SLThemes = {};
LSthemes.forEach(function(themeName) {
let them = LoadData("theme"+themeName, {"TabsSizeSetNumber": 2, "ToolbarShow": true, "toolbar": DefaultToolbar});
SLThemes[themeName] = them;
});
let LSpreferences = Object.assign({}, DefaultPreferences);
if (localStorage.getItem("preferences") != null) {
LSpreferences = LoadData("preferences", {});
}
if (browserId != "F") {
let LStabs = {};
if (localStorage.getItem("tabs") != null) {
LStabs = LoadData("tabs", {});
}
let LSwindows = {};
if (localStorage.getItem("windows") != null) {
LSwindows = LoadData("windows", {});
}
let LStabs_BAK1 = {};
if (localStorage.getItem("tabs_BAK1") != null) {
LStabs_BAK1 = LoadData("tabs_BAK1", {});
}
let LStabs_BAK2 = {};
if (localStorage.getItem("tabs_BAK2") != null) {
LStabs_BAK2 = LoadData("tabs_BAK2", {});
}
let LStabs_BAK3 = {};
if (localStorage.getItem("tabs_BAK3") != null) {
LStabs_BAK3 = LoadData("tabs_BAK3", {});
}
let LSwindows_BAK1 = {};
if (localStorage.getItem("windows_BAK1") != null) {
LSwindows_BAK1 = LoadData("windows_BAK1", {});
}
let LSwindows_BAK2 = {};
if (localStorage.getItem("windows_BAK2") != null) {
LSwindows_BAK2 = LoadData("windows_BAK2", {});
}
let LSwindows_BAK3 = {};
if (localStorage.getItem("windows_BAK3") != null) {
LSwindows_BAK3 = LoadData("windows_BAK3", {});
}
let LSt_count = 0;
if (localStorage.getItem("t_count") != null) {
LSt_count = LoadData("t_count", {});
}
let LSw_count = 0;
if (localStorage.getItem("w_count") != null) {
LSw_count = LoadData("w_count", {});
}
chrome.storage.local.set({tabs: LStabs});
chrome.storage.local.set({windows: LSwindows});
chrome.storage.local.set({tabs_BAK1: LStabs_BAK1});
chrome.storage.local.set({tabs_BAK2: LStabs_BAK2});
chrome.storage.local.set({tabs_BAK3: LStabs_BAK3});
chrome.storage.local.set({windows_BAK1: LSwindows_BAK1});
chrome.storage.local.set({windows_BAK2: LSwindows_BAK2});
chrome.storage.local.set({windows_BAK3: LSwindows_BAK3});
chrome.storage.local.set({t_count: LSt_count});
chrome.storage.local.set({w_count: LSw_count});
}
chrome.storage.local.set({preferences: LSpreferences});
chrome.storage.local.set({current_theme: current_theme});
chrome.storage.local.set({themes: SLThemes});
localStorage.clear();
window.location.reload();
}
}
function LoadData(KeyName, ExpectReturnDefaultType) {
var data = ExpectReturnDefaultType;
try {
data = JSON.parse(localStorage[KeyName]);
return data;
} catch(e) {
return ExpectReturnDefaultType;
}
}

View File

@ -14,30 +14,10 @@
"19": "icons/16.png",
"16": "icons/16.png"
},
"permissions": [ "tabs", "sessions", "<all_urls>" ],
"sidebar_action": {
"default_icon": {
"16": "icons/16.png",
"19": "icons/16.png",
"38": "icons/38.png"
},
"default_panel": "sidebar.html",
"default_title": "Tree Tabs",
"browser_style": false
},
"browser_action": {
"default_icon": "icons/24.png"
},
"applications": {
"gecko": {
"id": "TreeTabs@jagiello.it",
"strict_min_version": "57.0"
}
},
"permissions": [ "tabs", "sessions", "<all_urls>", "storage" ],
"options_ui": {
"page": "options.html",
"open_in_tab": true
"open_in_tab": false
},
"version": "1.1"
}
"version": "1.0"
}

View File

@ -67,6 +67,11 @@
<td style="position:relative;left:2px;width:3px;">-</td>
<td class="label" id="options_show_counter_groups"></td>
</tr>
<tr>
<td><input type="checkbox" class="opt_checkbox bg_opt" id="syncro_tabbar_groups_tabs_order"></input></td>
<td style="position:relative;left:2px;width:3px;">-</td>
<td class="label" id="options_syncro_tabbar_groups_tabs_order"></td>
</tr>
</table>
</fieldset>
@ -151,6 +156,7 @@
<select id="append_child_tab">
<option class="bg_opt_drop_down_menu" id="options_append_child_tab_top" value="top"></option>
<option class="bg_opt_drop_down_menu" id="options_append_child_tab_bottom" value="bottom"></option>
<option class="bg_opt_drop_down_menu" id="options_append_child_tab_after_active" value="after_active"></option>
</select>
</li>
<li>
@ -167,6 +173,8 @@
<select id="after_closing_active_tab">
<option class="bg_opt_drop_down_menu" id="options_after_closing_active_tab_go_up" value="above"></option>
<option class="bg_opt_drop_down_menu" id="options_after_closing_active_tab_go_down" value="below"></option>
<option class="bg_opt_drop_down_menu" id="options_after_closing_active_tab_go_up_seek_in_parent" value="above_seek_in_parent"></option>
<option class="bg_opt_drop_down_menu" id="options_after_closing_active_tab_go_down_seek_in_parent" value="below_seek_in_parent"></option>
<option class="bg_opt_drop_down_menu" id="options_after_closing_active_tab_go_browser" value="browser"></option>
</select>
</li>
@ -194,15 +202,17 @@
<fieldset class="field" id="field_theme" style="width:850px;">
<legend class="label" id="options_theme"></legend>
<select id="theme_list" style="padding-right:6px;"></select>
<input type="text" id="new_theme_name" name="untitled" value="untitled"></input>
<button class="set_button" type="button" id="options_rename_theme_button" style="margin:10px;">Rename</button>
<button class="set_button" type="button" id="options_add_theme_button" style="margin:10px;">Add new</button>
<button class="set_button" type="button" id="options_remove_theme_button" style="margin:10px;">Remove</button>
<button class="set_button" type="button" id="options_import_theme_button" style="margin:10px;">Import</button>
<button class="set_button" type="button" id="options_export_theme_button" style="margin:10px;">Export</button>
<button class="set_button" type="button" id="options_rename_theme_button" style="margin:6px;">Rename</button>
<button class="set_button" type="button" id="options_add_theme_button" style="margin:6px;">Add new</button>
<button class="set_button" type="button" id="options_remove_theme_button" style="margin:6px;">Remove</button>
<button class="set_button" type="button" id="options_import_theme_button" style="margin:6px;">Import</button>
<button class="set_button" type="button" id="options_export_theme_button" style="margin:6px;">Export</button>
<button class="set_button" type="button" id="options_share_theme_link" style="margin:6px;">Export</button>
<br>
<br>
<fieldset class="field" id="field_show_toolbar" style="position: relative; width:816px;">
<legend id="toolbar_legend">
<input type="checkbox" style="position:relative; top:-1px;" id="show_toolbar"></input>
@ -285,7 +295,10 @@
<div class="pick_col color_bucket" id="scrollbar_track"></div>
<div class="pin_list" id="pin_list"></div>
<div class="group" id="tab_list"></div>
<div class="group" id="tab_list">
<div class="children_folders" id="cftab_list"></div>
<div class="children_tabs" id="chtab_list"></div>
</div>
<div id="pin_list_scrollbar"><div id="pin_list_scrollbar_thumb"></div></div>
<div id="group_scrollbar"><div id="group_scrollbar_thumb"></div></div>
@ -356,6 +369,18 @@
</fieldset>
</fieldset>
<fieldset class="field"">
<legend class="label" id="options_development"></legend>
<table style="display:inline-block;">
<tr>
<td><input type="checkbox" class="opt_checkbox bg_opt" id="debug"></input></td>
<td style="position:relative;left:2px;width:3px;">-</td>
<td class="label" id="options_debug"></td>
</tr>
</table>
</fieldset>
<button class="set_button" type="button" id="options_clear_data" style="margin:10px;"></button>
<input type="color" id="color_picker" style="position:absolute; left:-500px; top:-500px; overflow:hidden; user-select: none; -moz-user-select: none;">

View File

@ -88,11 +88,11 @@ body {
overflow: hidden;
margin-bottom:15px;
}
ul:not(#tabs_menu) {
ul:not(.menu) {
padding-left: 22px;
}
ul:not(#tabs_menu) li {
ul:not(.menu) li {
margin: 5px;
}
.label {

View File

@ -4,33 +4,37 @@
// ********** OPTIONS ***************
var current_theme = "";
var themes = [];
var SelectedTheme = Object.assign({}, DefaultTheme);
var dragged_button;
active_group = "tab_list";
document.addEventListener("DOMContentLoaded", function() {
LoadPreferences();
document.title = "Tree Tabs";
themes = LoadData("themes", []);
if (localStorage.getItem("current_theme") != null) {
LoadTheme(localStorage["current_theme"]);
}
GetOptions();
RefreshFields();
SetEvents();
SetToolbarShelfToggle("click");
AppendGroupToList("tab_list", caption_ungrouped_group, "");
AppendGroupToList("tab_list2", caption_ungrouped_group, "");
AppendSampleTabs();
chrome.runtime.sendMessage({command: "get_preferences"}, function(response) {
opt = Object.assign({}, response);
chrome.storage.local.get(null, function(items) {
if (items["themes"]) {
for (var themeName in items["themes"]) {
themes.push(themeName);
}
}
if (items["current_theme"]) {
current_theme = items["current_theme"];
LoadTheme(items["current_theme"]);
}
GetOptions();
RefreshFields();
SetEvents();
SetToolbarShelfToggle("click");
AppendGroupToList("tab_list", caption_ungrouped_group, "");
AppendGroupToList("tab_list2", caption_noname_group, "");
AppendSampleTabs();
});
});
});
// document events
function GetOptions() {
// get language labels
@ -59,10 +63,10 @@ function GetOptions() {
$(this)[0].textContent = chrome.i18n.getMessage(this.id);
});
// get language for color pick labels
$("#close_x, #close_hover_x").each(function() {
$(this).attr("title", chrome.i18n.getMessage(this.id));
});
$(".color_border").each(function() {
$(this).attr("title", chrome.i18n.getMessage("options_color_pick_border"));
});
@ -82,9 +86,6 @@ function GetOptions() {
$("#filter_clear_icon").each(function() {
$(this).attr("title", chrome.i18n.getMessage("options_color_pick_filter_clear_icon"));
});
// get options for append child tab
for (var i = 0; i < $("#append_child_tab")[0].options.length; i++) {
@ -132,15 +133,13 @@ function GetOptions() {
// select current theme in dropdown list
for (var i = 0; i < $("#theme_list")[0].options.length; i++) {
if ($("#theme_list")[0].options[i].value == localStorage["current_theme"]) {
if ($("#theme_list")[0].options[i].value == current_theme) {
$("#theme_list")[0].selectedIndex = i;
break;
}
}
}
function RemoveRedPreview() {
if (document.styleSheets[document.styleSheets.length-1].cssRules.length) {
document.styleSheets[document.styleSheets.length-1].deleteRule(document.styleSheets[document.styleSheets.length-1].cssRules.length-1);
@ -153,6 +152,10 @@ function SetEvents() {
// --------------------------------DONATIONS------------------------------------------------------------------------------
// Donate
$(document).on("click", "#options_share_theme_link", function(event) {
chrome.tabs.create({url: "https://drive.google.com/drive/folders/0B3jXQpRtOfvSelFrTEVHZEx3Nms?usp=sharing"});
});
$(document).on("click", "#donate_paypal", function(event) {
chrome.tabs.create({url: "https://www.paypal.me/KarolJagiello/1"});
});
@ -168,8 +171,6 @@ function SetEvents() {
});
// --------------------------------COPY VIVALDI LINK----------------------------------------------------------------------
$(document).on("click", "#copy_vivaldi_url_for_web_panel", function(event) {
@ -239,7 +240,7 @@ function SetEvents() {
// filter_box_font
// filter_box_font
$(document).on("mouseenter", "#options_tab_list_scrollbar_width_up, #options_tab_list_scrollbar_width_down", function(event) {
$("#group_scrollbar, #group_scrollbar_thumb").css({ "background-color": "red" });
@ -279,7 +280,6 @@ function SetEvents() {
// show color picker
$(document).on("click", ".pick_col", function(event) {
RemoveRedPreview();
// if (event.shiftKey || event.ctrlKey) return;
event.stopPropagation();
PickColor = this.id;
let bod = document.getElementById("body");
@ -294,8 +294,6 @@ function SetEvents() {
SaveTheme($("#theme_list").val());
});
// ----------------------------------EVENTS FOR CHECKBOXES AND DROPDOWN MENUS---------------------------------------------
// set checkbox options on/off and save
@ -305,7 +303,7 @@ function SetEvents() {
});
// options that need reload
$(document).on("click", "#syncro_tabbar_tabs_order, #allow_pin_close, #switch_with_scroll, #always_show_close, #never_show_close, #close_other_trees, #show_counter_tabs, #show_counter_tabs_hints", function(event) {
$(document).on("click", "#syncro_tabbar_tabs_order, #allow_pin_close, #switch_with_scroll, #always_show_close, #never_show_close, #close_other_trees, #show_counter_tabs, #show_counter_tabs_hints, #syncro_tabbar_tabs_order, #syncro_tabbar_groups_tabs_order", function(event) {
chrome.runtime.sendMessage({command: "reload_sidebar"});
});
@ -435,8 +433,8 @@ function SetEvents() {
// select theme from list
$("#theme_list").change(function() {
localStorage["current_theme"] = $(this).val();
LoadTheme($(this).val());
chrome.storage.local.set({current_theme: $(this).val()});
});
// import theme preset button
@ -462,9 +460,6 @@ function SetEvents() {
});
// -------------------------------INDENTATION ADJUSTMENT------------------------------------------------------------------
// change tabs size preset(down)
@ -595,43 +590,13 @@ function SetEvents() {
// ----------------------CLEAR DATA BUTTON--------------------------------------------------------------------------------
// clear data
$(document).on("click", "#options_clear_data", function(event) {
localStorage.clear();
chrome.storage.local.clear();
chrome.runtime.sendMessage({command: "reload"});
chrome.runtime.sendMessage({command: "reload_sidebar"});
location.reload();
});
// THIIIIIIIIIIIS IS TO MOVE ICONS FOR SETUP OPTIONS PAGE
// $(document).bind("contextmenu", function(event) {
// if (event.ctrlKey || event.shiftKey) {
// event.preventDefault();
// }
// });
// $(document).on("mousedown", "*", function(event) {
// $(document).on("mousedown", ".pick_col", function(event) {
// event.stopPropagation();
// if (event.button == 0 && event.shiftKey) {
// $(this).css({ "left": $(this).position().left-1 });
// }
// if (event.button == 2 && event.shiftKey) {
// $(this).css({ "left": $(this).position().left+1 });
// }
// if (event.button == 0 && event.ctrlKey) {
// $(this).css({ "top": $(this).position().top-1 });
// }
// if (event.button == 2 && event.ctrlKey) {
// $(this).css({ "top": $(this).position().top+1 });
// }
// console.log(this.id + " top: " + $(this).position().top + "px; left: " + $(this).position().left + "px;");
// console.log(this.id);
// });
}

View File

@ -9,16 +9,12 @@ function RefreshFields() {
} else {
$("#field_theme").css({"height": ""});
}
if (browserId != "F") {
$("#faster_scroll_for_firefox").hide();
}
if (browserId == "F") {
$("#scrollbar_size_indicator").hide();
$("#scrollbar_size_indicator, #scrollbar_thumb, #scrollbar_thumb_hover, #scrollbar_track").hide();
}
if (browserId == "V") {
$("#url_for_web_panel").val(chrome.runtime.getURL("sidebar.html"));
$("#url_for_web_panel").prop("readonly", true);
// $("#url_for_web_panel").select();
} else{
$("#field_vivaldi").hide();
}

View File

@ -19,26 +19,26 @@ function AppendSampleTabs() {
$("#tab_title11")[0].textContent = chrome.i18n.getMessage("options_theme_tabs_sample_text_normal_hover");
$("#tab_header11").addClass("tab_header_hover").addClass("close_show");
AppendTab({tab: {id: 12, pinned: false}, Append: true, ParentId: "2", AdditionalClass: "selected"});
AppendTab({tab: {id: 12, pinned: false}, Append: true, ParentId: "2", AdditionalClass: "selected_tab"});
$("#tab_title12")[0].textContent = chrome.i18n.getMessage("options_theme_tabs_sample_text_normal_selected");
AppendTab({tab: {id: 13, pinned: false}, Append: true, ParentId: "2", AdditionalClass: "selected"});
AppendTab({tab: {id: 13, pinned: false}, Append: true, ParentId: "2", AdditionalClass: "selected_tab"});
$("#tab_title13")[0].textContent = chrome.i18n.getMessage("options_theme_tabs_sample_text_normal_selected_hover");
$("#tab_header13").addClass("tab_header_hover").addClass("close_show");
$("#close13").addClass("close_hover");
// regular active tabs
AppendTab({tab: {id: 3, pinned: false}, Append: true, ParentId: "2", AdditionalClass: "active"});
AppendTab({tab: {id: 3, pinned: false}, Append: true, ParentId: "2", AdditionalClass: "active_tab"});
$("#tab_title3")[0].textContent = chrome.i18n.getMessage("options_theme_tabs_sample_text_active");
AppendTab({tab: {id: 15, pinned: false}, Append: true, ParentId: "2", AdditionalClass: "active"});
AppendTab({tab: {id: 15, pinned: false}, Append: true, ParentId: "2", AdditionalClass: "active_tab"});
$("#tab_title15")[0].textContent = chrome.i18n.getMessage("options_theme_tabs_sample_text_active_hover");
$("#tab_header15").addClass("tab_header_hover");
AppendTab({tab: {id: 14, pinned: false}, Append: true, ParentId: "2", AdditionalClass: "c selected active"});
AppendTab({tab: {id: 14, pinned: false}, Append: true, ParentId: "2", AdditionalClass: "c selected_tab active_tab"});
$("#tab_title14")[0].textContent = chrome.i18n.getMessage("options_theme_tabs_sample_text_active_selected");
AppendTab({tab: {id: 16, pinned: false}, Append: true, ParentId: "2", AdditionalClass: "c selected active"});
AppendTab({tab: {id: 16, pinned: false}, Append: true, ParentId: "2", AdditionalClass: "c selected_tab active_tab"});
$("#tab_title16")[0].textContent = chrome.i18n.getMessage("options_theme_tabs_sample_text_active_selected_hover");
$("#tab_header16").addClass("tab_header_hover");
$("#exp16").addClass("hover");
@ -51,10 +51,10 @@ function AppendSampleTabs() {
$("#tab_title17")[0].textContent = chrome.i18n.getMessage("options_theme_tabs_sample_text_discarded_hover");
$("#tab_header17").addClass("tab_header_hover");
AppendTab({tab: {id: 19, pinned: false, discarded: true}, Append: true, ParentId: "5", AdditionalClass: "selected"});
AppendTab({tab: {id: 19, pinned: false, discarded: true}, Append: true, ParentId: "5", AdditionalClass: "selected_tab"});
$("#tab_title19")[0].textContent = chrome.i18n.getMessage("options_theme_tabs_sample_text_discarded_selected");
AppendTab({tab: {id: 20, pinned: false, discarded: true}, Append: true, ParentId: "5", AdditionalClass: "selected"});
AppendTab({tab: {id: 20, pinned: false, discarded: true}, Append: true, ParentId: "5", AdditionalClass: "selected_tab"});
$("#tab_title20")[0].textContent = chrome.i18n.getMessage("options_theme_tabs_sample_text_discarded_selected_hover");
$("#tab_header20").addClass("tab_header_hover");
@ -66,27 +66,27 @@ function AppendSampleTabs() {
$("#tab_title21")[0].textContent = chrome.i18n.getMessage("options_theme_tabs_sample_text_search_result_hover");
$("#tab_header21").addClass("tab_header_hover");
AppendTab({tab: {id: 22, pinned: false}, Append: true, ParentId: "6", AdditionalClass: "filtered active"});
AppendTab({tab: {id: 22, pinned: false}, Append: true, ParentId: "6", AdditionalClass: "filtered active_tab"});
$("#tab_title22")[0].textContent = chrome.i18n.getMessage("options_theme_tabs_sample_text_search_result_active");
AppendTab({tab: {id: 23, pinned: false}, Append: true, ParentId: "6", AdditionalClass: "filtered active"});
AppendTab({tab: {id: 23, pinned: false}, Append: true, ParentId: "6", AdditionalClass: "filtered active_tab"});
$("#tab_title23")[0].textContent = chrome.i18n.getMessage("options_theme_tabs_sample_text_search_result_active_hover");
$("#tab_header23").addClass("tab_header_hover");
// search result selected
AppendTab({tab: {id: 8, pinned: false}, Append: true, ParentId: "6", AdditionalClass: "selected filtered"});
AppendTab({tab: {id: 8, pinned: false}, Append: true, ParentId: "6", AdditionalClass: "selected_tab filtered"});
$("#tab_title8")[0].textContent = chrome.i18n.getMessage("options_theme_tabs_sample_text_search_result_selected");
AppendTab({tab: {id: 18, pinned: false}, Append: true, ParentId: "6", AdditionalClass: "selected filtered"});
AppendTab({tab: {id: 18, pinned: false}, Append: true, ParentId: "6", AdditionalClass: "selected_tab filtered"});
$("#tab_title18")[0].textContent = chrome.i18n.getMessage("options_theme_tabs_sample_text_search_result_selected_hover");
$("#tab_header18").addClass("tab_header_hover");
AppendTab({tab: {id: 25, pinned: false}, Append: true, ParentId: "6", AdditionalClass: "selected filtered active"});
AppendTab({tab: {id: 25, pinned: false}, Append: true, ParentId: "6", AdditionalClass: "selected_tab filtered active_tab"});
$("#tab_title25")[0].textContent = chrome.i18n.getMessage("options_theme_tabs_sample_text_search_result_selected_active");
AppendTab({tab: {id: 26, pinned: false}, Append: true, ParentId: "6", AdditionalClass: "selected filtered active"});
AppendTab({tab: {id: 26, pinned: false}, Append: true, ParentId: "6", AdditionalClass: "selected_tab filtered active_tab"});
$("#tab_title26")[0].textContent = chrome.i18n.getMessage("options_theme_tabs_sample_text_search_result_selected_active_hover");
$("#tab_header26").addClass("tab_header_hover");
@ -98,25 +98,25 @@ function AppendSampleTabs() {
$("#tab_title31")[0].textContent = chrome.i18n.getMessage("options_theme_tabs_sample_text_search_result_highlighted_hover");
$("#tab_header31").addClass("tab_header_hover");
AppendTab({tab: {id: 32, pinned: false}, Append: true, ParentId: "30", AdditionalClass: "filtered highlighted_search active"});
AppendTab({tab: {id: 32, pinned: false}, Append: true, ParentId: "30", AdditionalClass: "filtered highlighted_search active_tab"});
$("#tab_title32")[0].textContent = chrome.i18n.getMessage("options_theme_tabs_sample_text_search_result_highlighted_active");
AppendTab({tab: {id: 33, pinned: false}, Append: true, ParentId: "30", AdditionalClass: "filtered highlighted_search active"});
AppendTab({tab: {id: 33, pinned: false}, Append: true, ParentId: "30", AdditionalClass: "filtered highlighted_search active_tab"});
$("#tab_title33")[0].textContent = chrome.i18n.getMessage("options_theme_tabs_sample_text_search_result_highlighted_active_hover");
$("#tab_header33").addClass("tab_header_hover");
AppendTab({tab: {id: 34, pinned: false}, Append: true, ParentId: "30", AdditionalClass: "selected filtered highlighted_search"});
AppendTab({tab: {id: 34, pinned: false}, Append: true, ParentId: "30", AdditionalClass: "selected_tab filtered highlighted_search"});
$("#tab_title34")[0].textContent = chrome.i18n.getMessage("options_theme_tabs_sample_text_search_result_highlighted_selected");
AppendTab({tab: {id: 35, pinned: false}, Append: true, ParentId: "30", AdditionalClass: "selected filtered highlighted_search"});
AppendTab({tab: {id: 35, pinned: false}, Append: true, ParentId: "30", AdditionalClass: "selected_tab filtered highlighted_search"});
$("#tab_title35")[0].textContent = chrome.i18n.getMessage("options_theme_tabs_sample_text_search_result_highlighted_selected_hover");
$("#tab_header35").addClass("tab_header_hover");
AppendTab({tab: {id: 36, pinned: false}, Append: true, ParentId: "30", AdditionalClass: "selected filtered highlighted_search active"});
AppendTab({tab: {id: 36, pinned: false}, Append: true, ParentId: "30", AdditionalClass: "selected_tab filtered highlighted_search active_tab"});
$("#tab_title36")[0].textContent = chrome.i18n.getMessage("options_theme_tabs_sample_text_search_result_highlighted_selected_active");
AppendTab({tab: {id: 37, pinned: false}, Append: true, ParentId: "30", AdditionalClass: "selected filtered highlighted_search active"});
AppendTab({tab: {id: 37, pinned: false}, Append: true, ParentId: "30", AdditionalClass: "selected_tab filtered highlighted_search active_tab"});
$("#tab_title37")[0].textContent = chrome.i18n.getMessage("options_theme_tabs_sample_text_search_result_highlighted_selected_active_hover");
$("#tab_header37").addClass("tab_header_hover");

View File

@ -3,115 +3,118 @@
// that can be found at https://creativecommons.org/licenses/by-nc-nd/4.0/
function LoadTheme(themeName) {
if (localStorage.getItem("theme"+themeName) != null) {
SelectedTheme = JSON.parse(localStorage["theme"+themeName]);
$("#new_theme_name")[0].value = themeName;
chrome.storage.local.get(null, function(items) {
if (items.themes[themeName]) {
SelectedTheme = Object.assign({}, items.themes[themeName]);
current_theme = themeName;
} else {
SelectedTheme = Object.assign({}, DefaultTheme);
current_theme = "";
}
setTimeout(function() {
ApplySizeSet(SelectedTheme["TabsSizeSetNumber"]);
ApplyColorsSet(SelectedTheme["ColorsSet"]);
ApplySizeOptionsSet(SelectedTheme["TabsSizeSetNumber"]);
$("#toolbar").html(SelectedTheme.toolbar);
$("#toolbar_unused_buttons").html(SelectedTheme.unused_buttons);
if (browserId == "F") {
$(".button#button_load_bak1, .button#button_load_bak2, .button#button_load_bak3").remove();
}
// expand toolbar options
SelectedTheme.ToolbarShow = $("#show_toolbar")[0].checked = SelectedTheme.ToolbarShow;
$("#field_show_toolbar").css({"height": $("#show_toolbar")[0].checked ? "" : "6"});
SelectedTheme.ToolbarShow ? $("#options_available_buttons, #toolbar, #toolbar_colors").show() : $("#options_available_buttons, #toolbar, #toolbar_colors").hide();
$(".on").removeClass("on");
RefreshGUI();
chrome.runtime.sendMessage({command: "reload_theme", themeName: "theme"+themeName});
$("#new_theme_name")[0].value = themeName;
setTimeout(function() {
ApplySizeSet(SelectedTheme["TabsSizeSetNumber"]);
ApplyColorsSet(SelectedTheme["ColorsSet"]);
ApplySizeOptionsSet(SelectedTheme["TabsSizeSetNumber"]);
$("#toolbar").html(SelectedTheme.toolbar);
$("#toolbar_unused_buttons").html(SelectedTheme.unused_buttons);
if (browserId == "F") {
$(".button#button_load_bak1, .button#button_load_bak2, .button#button_load_bak3").remove();
}
SelectedTheme.ToolbarShow = $("#show_toolbar")[0].checked = SelectedTheme.ToolbarShow;
$("#field_show_toolbar").css({"height": $("#show_toolbar")[0].checked ? "" : "6"});
SelectedTheme.ToolbarShow ? $("#options_available_buttons, #toolbar, #toolbar_colors").show() : $("#options_available_buttons, #toolbar, #toolbar_colors").hide();
$(".on").removeClass("on");
RefreshGUI();
chrome.runtime.sendMessage({command: "reload_theme", themeName: "theme"+themeName});
}, 200);
}, 200);
}
});
}
function SaveTheme(themeName) {
localStorage["theme"+themeName] = JSON.stringify(SelectedTheme);
chrome.runtime.sendMessage({command: "reload_theme", themeName: "theme"+themeName});
return SelectedTheme;
chrome.storage.local.get(null, function(items) {
let LSthemes = items.themes ? Object.assign({}, items.themes) : {};
LSthemes[themeName] = Object.assign({}, SelectedTheme);
chrome.storage.local.set({themes: LSthemes});
chrome.runtime.sendMessage({command: "reload_theme", themeName: "theme"+themeName});
return SelectedTheme;
});
}
function AddNewTheme() {
if (themes.indexOf($("#new_theme_name")[0].value) != -1) {
alert(chrome.i18n.getMessage("options_there_is_a_theme_with_this_name"));
return;
}
if ($("#new_theme_name")[0].value == "") {
alert(chrome.i18n.getMessage("options_theme_name_cannot_be_empty"));
return;
}
$("#toolbar").html(DefaultToolbar);
SelectedTheme = Object.assign({}, DefaultTheme);
SelectedTheme["ColorsSet"] = {};
DefaultTheme["ColorsSet"] = {};
themes.push($("#new_theme_name")[0].value);
var t_list = document.getElementById("theme_list");
var theme_name = document.createElement("option");
theme_name.value = $("#new_theme_name")[0].value;
theme_name.text = theme_name.value;
t_list.add(theme_name);
$("#theme_list")[0].selectedIndex = $("#theme_list")[0].options.length-1;
SaveTheme(theme_name.value);
LoadTheme(theme_name.value);
localStorage["themes"] = JSON.stringify(themes);
localStorage["current_theme"] = $("#theme_list").val();
setTimeout(function() {
LoadTheme(theme_name.value);
}, 500);
chrome.storage.local.set({current_theme: $("#theme_list").val()});
RefreshFields();
}
function DeleteSelectedTheme() {
if ($("#theme_list")[0].options.length == 0) {
localStorage["current_theme"] = "Default";
chrome.storage.local.get(null, function(items) {
let LSthemes = items.themes ? Object.assign({}, items.themes) : {};
themes.splice(themes.indexOf($("#theme_list").val()), 1);
if (LSthemes[current_theme]) {
delete LSthemes[current_theme];
}
chrome.storage.local.set({themes: LSthemes});
var x = document.getElementById("theme_list");
x.remove(x.selectedIndex);
current_theme = ($("#theme_list")[0].options.length > 0) ? $("#theme_list").val() : "Default";
chrome.storage.local.set({current_theme: current_theme});
if ($("#theme_list")[0].options.length == 0) {
SelectedTheme = Object.assign({}, DefaultTheme);
SelectedTheme["ColorsSet"] = {};
chrome.storage.local.set({themes: {}});
setTimeout(function() {
chrome.runtime.sendMessage({command: "reload_theme", themeName: ""});
}, 500);
}
LoadTheme(current_theme);
RefreshFields();
});
}
function RenameSelectedTheme() {
if (themes.indexOf($("#new_theme_name")[0].value) != -1) {
alert(chrome.i18n.getMessage("options_there_is_a_theme_with_this_name"));
return;
}
themes.splice(themes.indexOf($("#theme_list").val()), 1);
localStorage["themes"] = JSON.stringify(themes);
// localStorage.removeItem("theme"+($("#theme_list").val()));
localStorage.removeItem("theme"+SelectedTheme["theme_name"]);
var x = document.getElementById("theme_list");
x.remove(x.selectedIndex);
localStorage["current_theme"] = ($("#theme_list")[0].options.length > 0) ? $("#theme_list").val() : "Default";
LoadTheme(localStorage["current_theme"]);
RefreshFields();
if ($("#theme_list")[0].options.length == 0) {
SelectedTheme = Object.assign({}, DefaultTheme);
SelectedTheme["ColorsSet"] = {};
chrome.runtime.sendMessage({command: "reload_theme", themeName: "themeDefault"});
if ($("#new_theme_name")[0].value == "") {
alert(chrome.i18n.getMessage("options_theme_name_cannot_be_empty"));
return;
}
}
function RenameSelectedTheme() {
if (themes.indexOf($("#new_theme_name")[0].value) != -1) {
alert(chrome.i18n.getMessage("options_there_is_a_theme_with_this_name"));
return;
}
if ($("#new_theme_name")[0].value == "") {
alert(chrome.i18n.getMessage("options_theme_name_cannot_be_empty"));
return;
}
var t_list = document.getElementById("theme_list");
localStorage.removeItem("theme"+SelectedTheme["theme_name"]);
chrome.storage.local.get(null, function(items) {
let LSthemes = items.themes ? Object.assign({}, items.themes) : {};
SelectedTheme["theme_name"] = $("#new_theme_name")[0].value;
themes[themes.indexOf(t_list.options[t_list.selectedIndex].value)] = SelectedTheme["theme_name"];
let t_list = document.getElementById("theme_list");
t_list.options[t_list.selectedIndex].value = t_list.options[t_list.selectedIndex].text = SelectedTheme["theme_name"];
localStorage["current_theme"] = SelectedTheme["theme_name"];
localStorage["themes"] = JSON.stringify(themes);
SaveTheme(SelectedTheme["theme_name"]);
LSthemes[SelectedTheme["theme_name"]] = SelectedTheme;
if (LSthemes[current_theme]) {
delete LSthemes[current_theme];
}
current_theme = SelectedTheme["theme_name"];
chrome.storage.local.set({themes: LSthemes});
chrome.storage.local.set({current_theme: current_theme});
});
}
function ImportTheme() {
var file = document.getElementById("import_theme");
var fr = new FileReader();
@ -121,27 +124,21 @@ function ImportTheme() {
var data = fr.result;
file.remove();
var themeObj = JSON.parse(data);
if (themeObj.theme_version > DefaultTheme["theme_version"]) {
alert(chrome.i18n.getMessage("options_loaded_theme_newer_version"));
}
if (themeObj.theme_version < DefaultTheme["theme_version"]) {
alert(chrome.i18n.getMessage("options_loaded_theme_older_version"));
}
if (themeObj.theme_version <= DefaultTheme["theme_version"]) {
SelectedTheme = Object.assign({}, DefaultTheme);
SelectedTheme["ColorsSet"] = {};
for (var val in themeObj.ColorsSet) {
SelectedTheme["ColorsSet"][val] = themeObj.ColorsSet[val];
}
SelectedTheme["ToolbarShow"] = themeObj.ToolbarShow;
SelectedTheme["TabsSizeSetNumber"] = themeObj.TabsSizeSetNumber;
SelectedTheme["theme_version"] = DefaultTheme["theme_version"];
if (themeObj.theme_version == 1) {
SelectedTheme["ColorsSet"]["scrollbar_height"] = themeObj.ScrollbarPinList + "px";
SelectedTheme["ColorsSet"]["scrollbar_width"] = themeObj.ScrollbarTabList + "px";
@ -149,39 +146,30 @@ function ImportTheme() {
if (themeObj.theme_version == 2) {
SelectedTheme["unused_buttons"] = themeObj["unused_buttons"];
}
if (themes.indexOf(themeObj.theme_name) == -1) {
SelectedTheme["theme_name"] = themeObj.theme_name;
} else {
SelectedTheme["theme_name"] = themeObj.theme_name + "(1)";
}
themes.push(SelectedTheme["theme_name"]);
SaveTheme(SelectedTheme["theme_name"]);
var t_list = document.getElementById("theme_list");
var theme_name = document.createElement("option");
theme_name.value = SelectedTheme["theme_name"];
theme_name.text = theme_name.value;
t_list.add(theme_name);
localStorage["themes"] = JSON.stringify(themes);
localStorage["current_theme"] = themeObj.theme_name;
$("#theme_list")[0].selectedIndex = $("#theme_list")[0].options.length-1;
LoadTheme(SelectedTheme["theme_name"]);
current_theme = SelectedTheme["theme_name"];
$("#new_theme_name")[0].value = current_theme;
setTimeout(function() {
LoadTheme(current_theme);
}, 500);
RefreshFields();
DefaultTheme["ColorsSet"] = {};
chrome.storage.local.set({current_theme: current_theme});
}
}
}
function ApplySizeOptionsSet(size){
for (let si = 0; si < document.styleSheets.length; si++) {
if ((document.styleSheets[si].ownerNode.id).match("size_settings") != null) {
@ -191,6 +179,5 @@ function ApplySizeOptionsSet(size){
document.styleSheets.item(si).disabled = true;
}
}
}
}
}

View File

@ -138,9 +138,9 @@
/* CLOSE TAB BUTTON OPTIONS */
#expand_hover_background { top: 1px; left: calc(var(--children_padding_left) + 4px); background-size: var(--row_image_size);}
#expand_closed_background { top: 1px; left: calc(var(--children_padding_left) + 4px); background-size: var(--row_image_size);}
#expand_open_background { top: 1px; left: 4px; background-size: var(--row_image_size);}
#expand_hover_background { top: 1px; left: calc(var(--children_padding_left) - 18px); background-size: var(--row_image_size);}
#expand_closed_background { top: 1px; left: calc(var(--children_padding_left) - 18px); background-size: var(--row_image_size);}
#expand_open_background { top: 1px; left: -12px; background-size: var(--row_image_size);}
#tab_list_background { top: 835px; left: 50px; }

View File

@ -138,9 +138,9 @@
/* CLOSE TAB BUTTON OPTIONS */
#expand_hover_background { top: 1px; left: calc(var(--children_padding_left) + 4px); background-size: var(--row_image_size);}
#expand_closed_background { top: 1px; left: calc(var(--children_padding_left) + 4px); background-size: var(--row_image_size);}
#expand_open_background { top: 1px; left: 4px; background-size: var(--row_image_size);}
#expand_hover_background { top: 1px; left: calc(var(--children_padding_left) - 18px); background-size: var(--row_image_size);}
#expand_closed_background { top: 1px; left: calc(var(--children_padding_left) - 18px); background-size: var(--row_image_size);}
#expand_open_background { top: 1px; left: -12px; background-size: var(--row_image_size);}
#tab_list_background { top: 835px; left: 50px; }

View File

@ -138,9 +138,9 @@
/* CLOSE TAB BUTTON OPTIONS */
#expand_hover_background { top: 1px; left: calc(var(--children_padding_left) + 4px); background-size: var(--row_image_size);}
#expand_closed_background { top: 1px; left: calc(var(--children_padding_left) + 4px); background-size: var(--row_image_size);}
#expand_open_background { top: 1px; left: 4px; background-size: var(--row_image_size);}
#expand_hover_background { top: 1px; left: calc(var(--children_padding_left) - 18px); background-size: var(--row_image_size);}
#expand_closed_background { top: 1px; left: calc(var(--children_padding_left) - 18px); background-size: var(--row_image_size);}
#expand_open_background { top: 1px; left: -12px; background-size: var(--row_image_size);}
#tab_list_background { top: 835px; left: 50px; }

View File

@ -138,9 +138,9 @@
/* CLOSE TAB BUTTON OPTIONS */
#expand_hover_background { top: 2px; left: calc(var(--children_padding_left) + 4px); background-size: var(--row_image_size);}
#expand_closed_background { top: 2px; left: calc(var(--children_padding_left) + 4px); background-size: var(--row_image_size);}
#expand_open_background { top: 2px; left: 4px; background-size: var(--row_image_size);}
#expand_hover_background { top: 2px; left: calc(var(--children_padding_left) - 18px); background-size: var(--row_image_size);}
#expand_closed_background { top: 2px; left: calc(var(--children_padding_left) - 18px); background-size: var(--row_image_size);}
#expand_open_background { top: 2px; left: -12px; background-size: var(--row_image_size);}
#tab_list_background { top: 835px; left: 50px; }

View File

@ -138,9 +138,9 @@
/* CLOSE TAB BUTTON OPTIONS */
#expand_hover_background { top: 0px; left: calc(var(--children_padding_left) + 4px); background-size: var(--row_image_size);}
#expand_closed_background { top: 0px; left: calc(var(--children_padding_left) + 4px); background-size: var(--row_image_size);}
#expand_open_background { top: 0px; left: 4px; background-size: var(--row_image_size);}
#expand_hover_background { top: 0px; left: calc(var(--children_padding_left) - 18px); background-size: var(--row_image_size);}
#expand_closed_background { top: 0px; left: calc(var(--children_padding_left) - 18px); background-size: var(--row_image_size);}
#expand_open_background { top: 0px; left: -12px; background-size: var(--row_image_size);}
#tab_list_background { top: 835px; left: 50px; }

View File

@ -40,21 +40,21 @@ function SetIOEvents() {
if (MouseHoverOver == "pin_list") {
// ctrl+a to select all
if (event.ctrlKey && event.which == 65) {
$(".pin").addClass("selected");
$(".pin").addClass("selected_tab");
}
// ctrl+i to invert selection
if (event.ctrlKey && event.which == 73) {
$(".pin").toggleClass("selected");
$(".pin").toggleClass("selected_tab");
}
}
if (MouseHoverOver.match("g_|tab_list") !== null) {
// ctrl+a to select all
if (event.ctrlKey && event.which == 65) {
$("#"+active_group).children(".tab:visible").addClass("selected");
$("#ch"+active_group).children(".tab:visible").addClass("selected_tab");
}
// ctrl+i to invert selection
if (event.ctrlKey && event.which == 73) {
$(".tab:visible").toggleClass("selected");
$(".tab:visible").toggleClass("selected_tab");
}
}
RefreshGUI();

View File

@ -3,20 +3,32 @@
// that can be found at https://creativecommons.org/licenses/by-nc-nd/4.0/
function ExportGroup(filename) {
let GroupToSave = [0,[]];
GroupToSave[0] = bggroups[active_group];
let GroupToSave = { group: bggroups[active_group], folders: {}, tabs: [] };
let lastId = parseInt($("#"+active_group+" .tab").last()[0].id);
$("#"+active_group+" .folder").each(function() {
if (bgfolders[this.id]) {
GroupToSave.folders[this.id] = bgfolders[this.id];
}
})
$("#"+active_group+" .tab").each(function() {
chrome.tabs.get(parseInt(this.id), function(tab) {
GroupToSave[1].push([tab.id, ($("#"+tab.id).parent(".group")[0] ? $("#"+tab.id).parent()[0].id : $("#"+tab.id).parent().parent(".tab")[0].id), $("#"+tab.id).index(), ($("#"+tab.id).is(".n") ? "n" : ($("#"+tab.id).is(".c") ? "c" : "o")), tab.url]);
if ((tab.url).startsWith("www") || (tab.url).startsWith("http") || (tab.url).startsWith("ftp")) {
(GroupToSave.tabs).push(
{
id: tab.id,
parent: $("#"+tab.id).parent().parent()[0].id,
index: $("#"+tab.id).index(),
expand: ($("#"+tab.id).is(".n") ? "n" : ($("#"+tab.id).is(".c") ? "c" : "o")),
url: tab.url
}
);
}
if (tab.id == lastId) {
SaveFile(filename, GroupToSave);
}
});
})
}
function ImportGroup() {
let file = document.getElementById("file_import_group");
let fr = new FileReader();
@ -26,69 +38,77 @@ function ImportGroup() {
let data = fr.result;
file.remove();
let LoadedGroup = JSON.parse(data);
let NewFolders = {};
let RefsTabs = {};
let newTabs = {};
let lastId = LoadedGroup[1][LoadedGroup[1].length-1][0];
let NewGroupId = AddNewGroup({name: LoadedGroup[0].name, font: LoadedGroup[0].font});
let NewTabs = [];
let NewGroupId = AddNewGroup({name: LoadedGroup.group.name, font: LoadedGroup.group.font});
SetActiveGroup(NewGroupId, false, false);
LoadedGroup[1].forEach(function(LTab){
chrome.tabs.create({url: LTab[4]}, function(tab) {
RefsTabs[LTab[0]] = tab.id;
newTabs[tab.id] = {i: LTab[2]};
if (LTab[0] == lastId) {
for (var folder in LoadedGroup.folders) {
let newId = GenerateNewFolderID();
NewFolders[folder] = { id: newId, parent: NewGroupId, index: (LoadedGroup.folders[folder].index), name: (LoadedGroup.folders[folder].name), expand: (LoadedGroup.folders[folder].expand) };
}
for (var folder in NewFolders) {
if (NewFolders[LoadedGroup.folders[folder].parent]) {
NewFolders[folder].parent = NewFolders[LoadedGroup.folders[folder].parent].id;
}
}
(LoadedGroup.tabs).forEach(function(Tab){
chrome.tabs.create({url: Tab.url, active: false}, function(new_tab) {
if (new_tab) {
RefsTabs[Tab.id] = new_tab.id;
Tab.id = new_tab.id;
NewTabs.push(Tab);
}
if (NewTabs.length == LoadedGroup.tabs.length-1) {
setTimeout(function() {
LoadedGroup[1].forEach(function(LTab){
$("#"+NewGroupId).append($("#"+LTab[0]));
});
}, 2000);
setTimeout(function() {
LoadedGroup[1].forEach(function(LTab){
if ($("#"+RefsTabs[LTab[1]])[0] && $("#"+LTab[0])[0]) {
$("#ch"+RefsTabs[LTab[1]]).append($("#"+LTab[0]));
NewTabs.forEach(function(LTab) {
if (LTab.parent == LoadedGroup.group.id) {
LTab.parent = NewGroupId;
}
if (NewFolders[LTab.parent]) {
LTab.parent = NewFolders[LTab.parent].id;
}
if (RefsTabs[LTab.parent]) {
LTab.parent = RefsTabs[LTab.parent];
}
});
LoadedGroup[1].forEach(function(LTab){
$("#"+LTab[0]).addClass(LTab[3]);
});
chrome.tabs.query({currentWindow: true}, function(tabs) {
RearrangeTreeTabs(tabs, newTabs, true);
RefreshExpandStates();
RefreshGUI();
});
}, 4000);
}
LTab[0] = tab.id;
RearrangeTreeStructure({}, NewFolders, NewTabs);
}, 2000);
}
});
});
}
}
function ExportTabs(filename) {
function ExportSession(filename) {
chrome.windows.getAll({windowTypes: ['normal'], populate: true}, function(w) {
chrome.runtime.sendMessage({command: "get_browser_tabs"}, function(response) {
let tabs = Object.assign({}, response);
chrome.runtime.sendMessage({command: "get_windows"}, function(response) {
let windows = Object.assign({}, response);
let WindowsToSave = [];
w.forEach(function(CWin){
if (windows[CWin.id] != undefined && windows[CWin.id].group_bar != undefined && windows[CWin.id].active_shelf != undefined && windows[CWin.id].active_group != undefined && windows[CWin.id].groups != undefined && windows[CWin.id].folders != undefined) {
WindowsToSave.push([[], CWin.id, CWin.tabs[0].url, CWin.tabs[CWin.tabs.length-1].url, windows[CWin.id].group_bar, windows[CWin.id].group_bar, windows[CWin.id].active_shelf, windows[CWin.id].active_group, windows[CWin.id].groups, windows[CWin.id].folders, 0]);
}
CWin.tabs.forEach(function(CTab){
if (tabs[CTab.id] != undefined && tabs[CTab.id].parent != undefined && tabs[CTab.id].index != undefined && tabs[CTab.id].expand != undefined) {
WindowsToSave[WindowsToSave.length-1][0].push([CTab.id, CTab.url, tabs[CTab.id].parent, tabs[CTab.id].index, tabs[CTab.id].expand]);
let warn = true;
let ExportWindows = [];
w.forEach(function(CWin) {
if (CWin.tabs.length > 0) {
if (CWin.tabs.length > 100 && warn) {
alert(chrome.i18n.getMessage("warning_exporting_big_amount_of_tabs"));
warn = false;
}
});
windows[CWin.id]["id"] = CWin.id;
windows[CWin.id]["tabs"] = [];
CWin.tabs.forEach(function(CTab) {
if ((CTab.url).startsWith("www") || (CTab.url).startsWith("http") || (CTab.url).startsWith("ftp")) {
windows[CWin.id]["tabs"].push({id: CTab.id, url: CTab.url, parent: tabs[CTab.id].parent, index: tabs[CTab.id].index, expand: tabs[CTab.id].expand});
}
});
ExportWindows.push(windows[CWin.id]);
}
});
SaveFile(filename, WindowsToSave);
SaveFile(filename, ExportWindows);
});
});
});
}
function ImportTabs() {
function ImportSession() {
let file = document.getElementById("file_import_backup");
let fr = new FileReader();
if (file.files[0] == undefined) return;
@ -96,63 +116,80 @@ function ImportTabs() {
fr.onload = function() {
let data = fr.result;
file.remove();
chrome.windows.getAll({windowTypes: ['normal'], populate: true}, function(w) {
//make global variables
LoadedWindows = JSON.parse(data);
RefsTabs = {};
TotalTabsCount = 0;
LoadedWindows.forEach(function(LWin){
TotalTabsCount += LWin[0].length;
let LoadedWindows = JSON.parse(data);
let RefsTabs = {};
log(LoadedWindows);
LoadedWindows.forEach(function(LWin) {
let NewTabs = [];
let urls = [];
(LWin.tabs).forEach(function(Tab) {
urls.push(Tab.url);
NewTabs.push(Tab);
});
LoadedWindows.forEach(function(LWin){
chrome.windows.create({}, function(new_window) {
LWin[1] = new_window.id;
LWin[2] = "";
LWin[3] = "";
setTimeout(function() {
chrome.runtime.sendMessage({command: "save_groups", groups: LWin[8], windowId: new_window.id});
}, 1000);
LWin[0].forEach(function(LTab){
chrome.tabs.create({url: LTab[1], pinned: (LTab[2] == "pin_list" ? true : false), windowId: new_window.id}, function(tab) {
RefsTabs[LTab[0]] = tab.id;
LTab[0] = tab.id;
LTab[1] = "";
TotalTabsCount--;
if (TotalTabsCount < 2) {
setTimeout(function() {
chrome.runtime.sendMessage({command: "get_windows"}, function(response) {
let windows = Object.assign({}, response);
LoadedWindows.forEach(function(LWin){
LWin[0].forEach(function(LTab){
schedule_update_data -= 2;
chrome.runtime.sendMessage({command: "update_tab", tabId: LTab[0], tab: {parent: (RefsTabs[LTab[2]] ? RefsTabs[LTab[2]] : LTab[2]), index: LTab[3], expand: LTab[4]}});
});
});
setTimeout(function() {
chrome.runtime.sendMessage({command: "reload_sidebar"});
location.reload();
}, 3000);
});
chrome.tabs.remove(new_window.tabs[0].id, null);
}, 1000);
}
});
chrome.windows.create({url: urls}, function(new_window) {
for (let tInd = 0; tInd < new_window.tabs.length; tInd++) {
RefsTabs[NewTabs[tInd].id] = new_window.tabs[tInd].id;
NewTabs[tInd].id = new_window.tabs[tInd].id;
}
for (let tInd = 0; tInd < new_window.tabs.length; tInd++) {
if (RefsTabs[NewTabs[tInd].parent] != undefined) {
NewTabs[tInd].parent = RefsTabs[NewTabs[tInd].parent];
}
}
let HaveResponse;
let GiveUp = 0;
var Append = setInterval(function() {
chrome.runtime.sendMessage({command: "remote_update", groups: LWin.groups, folders: LWin.folders, tabs: NewTabs, windowId: new_window.id}, function(response) {
HaveResponse = response;
});
});
if (HaveResponse || GiveUp > 900) {
clearInterval(Append);
}
GiveUp++;
}, 2000);
});
});
}
}
function RearrangeTreeStructure(groups, folders, tabs) { // groups and folders are in object, just like bggroups and bgfolders, but tabs are in array of bgtreetabs objects
log("function: RearrangeTreeStructure");
chrome.tabs.query({currentWindow: true}, function(ChromeTabs) {
if (Object.keys(groups).length > 0) {
for (var group in groups) {
bggroups[groups[group].id] = Object.assign({}, groups[group]);
}
AppendGroups(bggroups);
}
if (Object.keys(folders).length > 0) {
for (var folder in folders) {
bgfolders[folders[folder].id] = Object.assign({}, folders[folder]);
}
AppendFolders(bgfolders);
}
let bgtabs = {};
tabs.forEach(function(Tab) {
if (Tab.parent == "pin_list") {
chrome.tabs.update(Tab.id, {pinned: true});
}
if ($("#"+Tab.id)[0] && $("#ch"+Tab.parent)[0]) {
$("#ch"+Tab.parent).append($("#"+Tab.id));
$("#"+Tab.id).addClass(Tab.expand);
}
bgtabs[Tab.id] = {index: Tab.index, parent: Tab.parent, expand: Tab.expand};
});
RearrangeTreeTabs(ChromeTabs, bgtabs, true);
RearrangeFolders(true);
UpdateBgGroupsOrder();
setTimeout(function() {
RefreshExpandStates();
RefreshCounters();
schedule_update_data++;
SaveFolders();
}, 1000);
});
}
function ImportMergeTabs() {
log("function: ImportMergeTabs");
let file = document.getElementById("file_import_merge_backup");
let fr = new FileReader();
if (file.files[0] == undefined) return;
@ -160,105 +197,107 @@ function ImportMergeTabs() {
fr.onload = function() {
let data = fr.result;
file.remove();
//make global variables
LoadedWindows = JSON.parse(data);
RefsTabs = {};
RefsWins = {};
TotalTabsCount = 0;
LoadedWindows.forEach(function(LWin){
TotalTabsCount += LWin[0].length;
});
chrome.windows.getAll({windowTypes: ['normal'], populate: true}, function(w) {
w.forEach(function(CWin){ // loop Current Windows (CWin)
LoadedWindows.forEach(function(LWin){ // loop Loaded Windows (LWin)
CWin.tabs.forEach(function(CTab){ // loop Tabs of each Current Window
schedule_update_data -= 2;
for (let LWinTabInd = 0; LWinTabInd < LWin[0].length; LWinTabInd++) { // loop Tabs of each Loaded Window
if (CTab.url == LWin[0][LWinTabInd][1]) {
// TabsMatched++;
RefsTabs[LWin[0][LWinTabInd][0]] = CTab.id;
LWin[0][LWinTabInd][0] = CTab.id;
LWin[0][LWinTabInd][1] = "";
LWin[10]++;
TotalTabsCount--;
let lw = JSON.parse(data);
let RefsWins = {};
let RefsTabs = {};
for (let LWI = 0; LWI < lw.length; LWI++) { // clear previous window ids
lw[LWI].id = "";
}
log(lw);
chrome.windows.getAll({windowTypes: ['normal'], populate: true}, function(cw) {
for (let CWI = 0; CWI < cw.length; CWI++) { // loop Windows
for (let LWI = 0; LWI < lw.length; LWI++) { // loop Loaded Windows
let tabsMatch = 0;
for (let CTI = 0; CTI < cw[CWI].tabs.length; CTI++) { // loop Tabs of each Current Window
for (let LTI = 0; LTI < lw[LWI].tabs.length; LTI++) { // loop Tabs of each Loaded Window
if (cw[CWI].tabs[CTI].url == lw[LWI].tabs[LTI].url) {
RefsTabs[lw[LWI].tabs[LTI].id] = cw[CWI].tabs[CTI].id;
lw[LWI].tabs[LTI].id = cw[CWI].tabs[CTI].id;
lw[LWI].tabs[LTI].url = "";
tabsMatch++;
break;
}
}
});
if (CWin.tabs[0].url == LWin[2] && CWin.tabs[CWin.tabs.length-1].url == LWin[3] && LWin[10] > LWin[0].length*0.5) {
RefsWins[LWin[1]] = CWin.id;
LWin[1] = CWin.id;
LWin[2] = "";
LWin[3] = "";
}
});
});
LoadedWindows.forEach(function(LWin){
if (LWin[2] != "" && LWin[3] != "") { // missing window, lets make one
chrome.windows.create({}, function(new_window) {
RefsWins[LWin[1]] = new_window.id;
LWin[1] = new_window.id;
LWin[2] = "";
LWin[3] = "";
LWin[0].forEach(function(LTab){
if (LTab[1] != "") { // missing tab of missing window, lets make one
chrome.tabs.create({url: LTab[1], windowId: new_window.id}, function(tab) {
// chrome.tabs.executeScript(tab.id, {code: "setTimeout(function() { window.stop(); }, 5000);", runAt: "document_start"}, function(){});
RefsTabs[LTab[0]] = tab.id;
LTab[0] = tab.id;
LTab[1] = "";
TotalTabsCount--;
});
}
});
chrome.tabs.remove(new_window.tabs[0].id, null);
log(tabsMatch);
if (tabsMatch > lw[LWI].tabs.length*0.8) {
lw[LWI].id = cw[CWI].id;
break;
}
}
}
log(lw);
lw.forEach(function(w) {
if (w.id == "") { // missing window, lets make one
log("missing window");
let NewTabs = [];
let urls = [];
(w.tabs).forEach(function(Tab) {
urls.push(Tab.url);
NewTabs.push(Tab);
});
} else {
LWin[0].forEach(function(LTab){
if (LTab[1] != "") { // missing tab, lets make one
chrome.tabs.create({url: LTab[1], windowId: LWin[1]}, function(tab) {
RefsTabs[LTab[0]] = tab.id;
LTab[0] = tab.id;
LTab[1] = "";
TotalTabsCount--;
if (TotalTabsCount < 2) {
setTimeout(function() {
chrome.runtime.sendMessage({command: "get_windows"}, function(response) {
let windows = Object.assign({}, response);
LoadedWindows.forEach(function(LWin){
for (let lGroup in LWin[8]) {
if (windows[LWin[1]] && windows[LWin[1]].groups[lGroup] == undefined) {
windows[LWin[1]].groups[lGroup] = Object.assign({}, LWin[8][lGroup]);
chrome.runtime.sendMessage({command: "save_groups", groups: windows[LWin[1]].groups, windowId: LWin[1]});
}
}
LWin[0].forEach(function(LTab){
schedule_update_data -= 2;
chrome.runtime.sendMessage({command: "update_tab", tabId: LTab[0], tab: {parent: (RefsTabs[LTab[2]] ? RefsTabs[LTab[2]] : LTab[2]), index: LTab[3], expand: LTab[4]}});
});
});
setTimeout(function() {
chrome.runtime.sendMessage({command: "reload_sidebar"});
location.reload();
}, 1000);
});
}, 1000);
}
chrome.windows.create({url: urls}, function(new_window) {
for (let tInd = 0; tInd < new_window.tabs.length; tInd++) {
RefsTabs[NewTabs[tInd].id] = new_window.tabs[tInd].id;
NewTabs[tInd].id = new_window.tabs[tInd].id;
}
for (let tInd = 0; tInd < new_window.tabs.length; tInd++) {
if (RefsTabs[NewTabs[tInd].parent] != undefined) {
NewTabs[tInd].parent = RefsTabs[NewTabs[tInd].parent];
}
}
let HaveResponse;
let GiveUp = 0;
var Append = setInterval(function() {
chrome.runtime.sendMessage({command: "remote_update", groups: w.groups, folders: w.folders, tabs: NewTabs, windowId: new_window.id}, function(response) {
HaveResponse = response;
});
if (HaveResponse || GiveUp > 900) {
clearInterval(Append);
}
GiveUp++;
}, 2000);
});
}
else
{ // window exists, lets add missing tabs
log("window exists");
let NewTabs = [];
(w.tabs).forEach(function(Tab) {
if (Tab.url != "") { // missing tab, lets make one
chrome.tabs.create({url: Tab.url, windowId: w.id}, function(tab) {
Tab.id = tab.id;
RefsTabs[tab.id] = tab.id;
NewTabs.push(Tab);
});
} else {
NewTabs.push(Tab);
}
});
setTimeout(function() {
for (let tInd = 0; tInd < NewTabs.length; tInd++) {
if (RefsTabs[NewTabs[tInd].parent] != undefined) {
NewTabs[tInd].parent = RefsTabs[NewTabs[tInd].parent];
}
}
}, 4000);
setTimeout(function() {
if (w.id == CurrentWindowId) {
RearrangeTreeStructure(w.groups, w.folders, NewTabs);
} else {
let HaveResponse;
let GiveUp = 0;
var Append = setInterval(function() {
chrome.runtime.sendMessage({command: "remote_update", groups: w.groups, folders: w.folders, tabs: NewTabs, windowId: w.id}, function(response) {
HaveResponse = response;
});
if (HaveResponse || GiveUp > 900) {
clearInterval(Append);
}
GiveUp++;
}, 2000);
}
}, 6000);
}
});
});

View File

@ -4,69 +4,90 @@
// ********** CHROME EVENTS ***************
function StartChromeListeners(){
function StartChromeListeners() {
if (browserId == "F") {
browser.browserAction.onClicked.addListener(function(tab) {
if (tab.windowId == CurrentWindowId) {
browser.sidebarAction.close();
}
});
}
chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
log("message to sidebar "+CurrentWindowId+": ");
log(message);
if (message.command == "backup_available") {
$("#button_load_bak"+message.bak).removeClass("disabled");
}
if (message.command == "drag_drop") {
DragAndDrop.DragNodeClass = message.DragNodeClass;
DragAndDrop.SelectedTabsIds = message.SelectedTabsIds;
DragAndDrop.TabsIds = message.TabsIds;
DragAndDrop.Parents = message.Parents;
DragAndDrop.ComesFromWindowId = message.ComesFromWindowId;
DragAndDrop.DragNodeClass = message.DragNodeClass;
DragAndDrop.Depth = message.Depth;
DragAndDrop.Folders = Object.assign({}, message.Folders);
DragAndDrop.FoldersSelected = message.FoldersSelected;
DragAndDrop.TabsIds = message.TabsIds;
DragAndDrop.TabsIdsParents = message.TabsIdsParents;
DragAndDrop.TabsIdsSelected = message.TabsIdsSelected;
}
if (message.command == "dropped") {
DragAndDrop.DroppedToWindowId = message.DroppedToWindowId;
if (Object.keys(DragAndDrop.Folders).length > 0 && message.DroppedToWindowId != CurrentWindowId) {
for (var folder in DragAndDrop.Folders)
{
RemoveFolder(DragAndDrop.Folders[folder].id);
}
}
}
if (message.command == "reload_sidebar") {
window.location.reload();
}
if (message.command == "reload_options") {
LoadPreferences();
setTimeout(function() {
RestorePinListRowSettings();
},200);
chrome.runtime.sendMessage({command: "get_preferences"}, function(response) {
opt = Object.assign({}, response);
setTimeout(function() {
RestorePinListRowSettings();
}, 200);
});
}
if (message.command == "reload_theme") {
let theme = LoadData(message.themeName, DefaultTheme);
ApplySizeSet(theme["TabsSizeSetNumber"]);
ApplyColorsSet(theme["ColorsSet"]);
if (theme.ToolbarShow) {
$("#toolbar").html(theme.toolbar);
} else {
$("#toolbar").html("");
}
RestoreToolbarSearchFilter();
RestoreToolbarShelf();
setTimeout(function() {
chrome.runtime.sendMessage({command: "get_theme", windowId: CurrentWindowId}, function(response) {
RestorePinListRowSettings();
let theme = response;
ApplyTheme(theme);
});
}, 300);
}
if (message.windowId == CurrentWindowId) {
switch(message.command) {
case "tab_created":
// if set to treat unparented tabs as active tab's child
if (opt.append_orphan_tab == "as_child" && message.tab.openerTabId == undefined && $(".active:visible")[0]) {
message.tab.openerTabId = $(".active:visible")[0].id;
case "tab_created": // if set to treat unparented tabs as active tab's child
if (opt.append_orphan_tab == "as_child" && message.tab.openerTabId == undefined && $("#"+active_group+" .active_tab")[0]) {
message.tab.openerTabId = $("#"+active_group+" .active_tab")[0].id;
}
// child case
if (message.tab.openerTabId) {
// append to tree
if (opt.max_tree_depth < 0 || (opt.max_tree_depth > 0 && $("#"+message.tab.openerTabId).parents(".tab").length < opt.max_tree_depth)) {
if (opt.append_child_tab == "top") {
AppendTab({ tab: message.tab, ParentId: message.tab.openerTabId, Append: false, Scroll: true });
if (message.tab.openerTabId) { // child case
if (opt.append_child_tab == "after_active") {
AppendTab({ tab: message.tab, InsertAfterId: $("#"+active_group+" .active_tab")[0] ? $("#"+active_group+" .active_tab")[0].id : undefined, Append: false, Scroll: true });
} else {
if (opt.max_tree_depth < 0 || (opt.max_tree_depth > 0 && $("#"+message.tab.openerTabId).parents(".tab").length < opt.max_tree_depth)) { // append to tree
if (opt.append_child_tab == "top") {
AppendTab({ tab: message.tab, ParentId: message.tab.openerTabId, Append: false, Scroll: true });
}
if (opt.append_child_tab == "bottom") {
AppendTab({ tab: message.tab, ParentId: message.tab.openerTabId, Append: true, Scroll: true });
}
}
if (opt.append_child_tab == "bottom") {
AppendTab({ tab: message.tab, ParentId: message.tab.openerTabId, Append: true, Scroll: true });
if (opt.max_tree_depth > 0 && $("#"+message.tab.openerTabId).parents(".tab").length >= opt.max_tree_depth) { // if reached depth limit of the tree
if (opt.append_child_tab_after_limit == "after") {
AppendTab({ tab: message.tab, InsertAfterId: message.tab.openerTabId, Append: true, Scroll: true });
}
if (opt.append_child_tab_after_limit == "top") {
AppendTab({ tab: message.tab, ParentId: $("#"+message.tab.openerTabId).parent().parent()[0].id, Append: false, Scroll: true });
}
if (opt.append_child_tab_after_limit == "bottom") {
AppendTab({ tab: message.tab, ParentId: $("#"+message.tab.openerTabId).parent().parent()[0].id, Append: true, Scroll: true });
}
}
}
// if reached depth limit of the tree
if (opt.max_tree_depth > 0 && $("#"+message.tab.openerTabId).parents(".tab").length >= opt.max_tree_depth) {
if (opt.append_child_tab_after_limit == "after") {
AppendTab({ tab: message.tab, InsertAfterId: message.tab.openerTabId, Append: true, Scroll: true });
}
if (opt.append_child_tab_after_limit == "top") {
AppendTab({ tab: message.tab, ParentId: $("#"+message.tab.openerTabId).parent().parent()[0].id, Append: false, Scroll: true });
}
if (opt.append_child_tab_after_limit == "bottom") {
AppendTab({ tab: message.tab, ParentId: $("#"+message.tab.openerTabId).parent().parent()[0].id, Append: true, Scroll: true });
}
}
// place tabs flat, (should I merge it with orphans case?)
if (opt.max_tree_depth == 0) {
if (opt.max_tree_depth == 0) { // place tabs flat, (should I merge it with orphans case?)
if (opt.append_child_tab_after_limit == "after") {
AppendTab({ tab: message.tab, InsertAfterId: message.tab.openerTabId, Append: false, Scroll: true });
}
@ -77,10 +98,9 @@ function StartChromeListeners(){
AppendTab({ tab: message.tab, Append: true, Scroll: true });
}
}
// orphan case
} else {
} else { // orphan case
if (opt.append_orphan_tab == "after_active") {
AppendTab({ tab: message.tab, InsertAfterId: $(".active:visible")[0] ? $(".active:visible")[0].id : undefined, Append: false });
AppendTab({ tab: message.tab, InsertAfterId: $("#"+active_group+" .active_tab")[0] ? $("#"+active_group+" .active_tab")[0].id : undefined, Append: false });
}
if (opt.append_orphan_tab == "top") {
AppendTab({ tab: message.tab, Append: false });
@ -92,12 +112,17 @@ function StartChromeListeners(){
if ($("#"+message.tab.openerTabId).is(".c")) {
$("#"+message.tab.openerTabId).removeClass("c").addClass("o");
}
if (opt.syncro_tabbar_tabs_order) {
let TTtabsIndexes = $(".pin, .tab").map(function(){return parseInt(this.id);}).toArray();
chrome.tabs.move(message.tab.id, {index: TTtabsIndexes.indexOf(message.tab.id)});
}
RefreshExpandStates();
schedule_update_data++;
RefreshGUI();
RefreshCounters();
break;
case "tab_attached":
AppendTab({ tab: message.tab, ParentId: message.ParentId, Append: true});
AppendTab({tab: message.tab, ParentId: message.ParentId, Append: true});
RefreshGUI();
break;
case "tab_detached":
@ -117,7 +142,9 @@ function StartChromeListeners(){
}
}
RemoveTabFromList(message.tabId);
setTimeout(function() { schedule_update_data++; },300);
setTimeout(function() {
schedule_update_data++;
}, 300);
RefreshGUI();
break;
case "tab_removed":
@ -138,11 +165,16 @@ function StartChromeListeners(){
}
RemoveTabFromList(message.tabId);
RefreshExpandStates();
setTimeout(function() { schedule_update_data++; },300);
setTimeout(function() {
schedule_update_data++;
}, 300);
RefreshGUI();
RefreshCounters();
break;
case "tab_activated":
setTimeout(function() { SetActiveTab(message.tabId); },100);
setTimeout(function() {
SetActiveTab(message.tabId);
}, 200);
break;
case "tab_attention":
SetAttentionIcon(message.tabId);
@ -151,12 +183,12 @@ function StartChromeListeners(){
if (message.changeInfo.favIconUrl != undefined || message.changeInfo.url != undefined) {
setTimeout(function() {
GetFaviconAndTitle(message.tabId, true);
},100);
}, 100);
}
if (message.changeInfo.title != undefined) {
setTimeout(function() {
GetFaviconAndTitle(message.tabId, true);
},1000);
}, 1000);
}
if (message.changeInfo.audible != undefined || message.changeInfo.mutedInfo != undefined) {
RefreshMediaIcon(message.tabId);
@ -172,6 +204,10 @@ function StartChromeListeners(){
RefreshExpandStates();
}
break;
case "remote_update":
RearrangeTreeStructure(message.groups, message.folders, message.tabs);
sendResponse(true);
break;
}
}

View File

@ -4,8 +4,43 @@
// ********** TABS EVENTS ***************
function GetSelectedFolders() {
log("function: GetSelectedFolders");
let res = {Folders: {}, FoldersSelected: [], TabsIds: [], TabsIdsParents: []};
$("#"+active_group+" .selected_folder").each(function() {
res.FoldersSelected.push(this.id);
res.Folders[this.id] = Object.assign({}, bgfolders[this.id]);
if ($("#cf" + this.id).children().length > 0) {
$($("#cf" + this.id).find(".folder")).each(function() {
res.Folders[this.id] = Object.assign({}, bgfolders[this.id]);
});
}
$($(this).find(".tab")).each(function() {
res.TabsIds.push(parseInt(this.id));
res.TabsIdsParents.push($(this).parent()[0].id);
});
});
log(res);
return res;
}
function GetSelectedTabs() {
log("function: GetSelectedTabs");
let res = {TabsIds: [], TabsIdsParents: [], TabsIdsSelected: []};
$("#"+active_group+" .selected_tab").each(function() {
res.TabsIds.push(parseInt(this.id));
res.TabsIdsParents.push($(this).parent()[0].id);
res.TabsIdsSelected.push(parseInt(this.id));
if ($("#ch" + this.id).children().length > 0) {
$($("#ch" + this.id).find(".tab")).each(function() {
res.TabsIds.push(parseInt(this.id));
res.TabsIdsParents.push($(this).parent()[0].id);
});
}
});
log(res);
return res;
}
function SetDragAndDropEvents() {
$(document).on("mouseleave", window, function(event) {
MouseHoverOver = "";
});
@ -18,145 +53,144 @@ function SetDragAndDropEvents() {
$(document).on("dragover", "#toolbar_groups, #toolbar, #pin_list, .group", function(event) {
MouseHoverOver = this.id;
});
$(document).on("mouseover", "#toolbar_groups, #toolbar, #pin_list, .group", function(event) { // set mouse over id
$(document).on("mouseover", "#toolbar_groups, #toolbar, #pin_list, .group", function(event) {
MouseHoverOver = this.id;
});
// PREVENT THE DEFAULT BROWSER DROP ACTION
$(document).bind("drop dragover", function(event) {
$(document).bind("drop dragover", function(event) { // PREVENT THE DEFAULT BROWSER DROP ACTION
event.preventDefault();
});
// bring to front drop zones
$(document).on("dragenter", ".tab_header, .folder", function(event) {
DropTargetsSendToFront();
$(document).on("mousedown", ".drop_target", function(event) { // deny drag enter on drop_targets and allow clicks below them
$(".drop_target").css({"pointer-events": "none"});
});
// SET FOLDER DRAG SOURCE
$(document).on("dragstart", ".folder_header", function(event) {
DragAndDrop.DragNodeClass = "folder";
$(document).on("dragenter", ".tab_header, .folder_header", function(event) { // allow drag enter on drop_targets
$(".drop_target").css({"pointer-events": "all"});
});
$(document).on("dragstart", ".tab_header, .folder_header", function(event) { // SET DRAG SOURCE
event.stopPropagation();
event.originalEvent.dataTransfer.setDragImage(document.getElementById("DragImage"), 0, 0);
event.originalEvent.dataTransfer.setData("text", "");
DragAndDrop.DroppedToWindowId = 0;
DragAndDrop.ComesFromWindowId = CurrentWindowId;
DragAndDrop.SelectedTabsIds.splice(0, DragAndDrop.SelectedTabsIds.length);
DragAndDrop.TabsIds.splice(0, DragAndDrop.TabsIds.length);
DragAndDrop.Parents.splice(0, DragAndDrop.Parents.length);
});
// SET TAB DRAG SOURCE
$(document).on("dragstart", ".tab_header", function(event) {
DragAndDrop.DragNodeClass = "tab";
event.stopPropagation();
event.originalEvent.dataTransfer.setDragImage(document.getElementById("DragImage"), 0, 0);
event.originalEvent.dataTransfer.setData("text", "");
if ($(this).parent().is(".active")) {
$(this).parent().addClass("selected_temporarly").addClass("selected");
}
$(".close").removeClass("show");
$(".tab_header_hover").removeClass("tab_header_hover");
if ($(this).parent().is(":not(.selected)")) {
$(".selected").addClass("selected_frozen").removeClass("selected");
$(this).parent().addClass("selected_temporarly").addClass("selected");
}
$(".selected:not(:visible)").addClass("selected_frozen").removeClass("selected");
DragAndDrop.ComesFromWindowId = CurrentWindowId;
DragAndDrop.SelectedTabsIds.splice(0, DragAndDrop.SelectedTabsIds.length);
DragAndDrop.TabsIds.splice(0, DragAndDrop.TabsIds.length);
DragAndDrop.Parents.splice(0, DragAndDrop.Parents.length);
DragAndDrop.Depth = 0;
$(".selected:visible").find(".pin, .tab").each(function() {
if ($(this).parents(".pin, .tab").length > DragAndDrop.Depth) { DragAndDrop.Depth = $(this).parents(".pin, .tab").length; }
});
DragAndDrop.Depth -= $(this).parents(".pin, .tab").length-1;
if (DragAndDrop.Depth < 0) {
DragAndDrop.Depth = 0;
}
console.log(DragAndDrop.Depth);
$(".selected:visible").each(function() {
DragAndDrop.SelectedTabsIds.push(parseInt(this.id));
DragAndDrop.TabsIds.push(parseInt(this.id));
DragAndDrop.Parents.push($(this).parent()[0].id);
if ($("#ch" + this.id).children().length > 0) {
$($("#ch" + this.id).find(".tab")).each(function() {
DragAndDrop.TabsIds.push(parseInt(this.id));
DragAndDrop.Parents.push($(this).parent()[0].id);
});
if ($(this)[0].classList[0] == "folder_header") {
DragAndDrop.DragNodeClass = "folder";
if ($(this).parent().is(":not(.selected_folder)")) {
$(".selected_folder").addClass("selected_folder_frozen").removeClass("selected_folder");
$(this).parent().addClass("selected_folder_temporarly").addClass("selected_folder");
}
$(".selected_folder:not(:visible)").addClass("selected_folder_frozen").removeClass("selected_folder");
let Folders = GetSelectedFolders();
DragAndDrop.TabsIds = Object.assign([], Folders.TabsIds);
DragAndDrop.TabsIdsParents = Object.assign([], Folders.TabsIdsParents);
DragAndDrop.TabsIdsSelected = Object.assign([], []);
DragAndDrop.Folders = Object.assign({}, Folders.Folders);
DragAndDrop.FoldersSelected = Object.assign([], Folders.FoldersSelected);
}
if ($(this)[0].classList[0] == "tab_header") {
DragAndDrop.DragNodeClass = "tab";
if ($(this).parent().is(".active_tab")) {
$(this).parent().addClass("selected_temporarly").addClass("selected_tab");
}
$(".close").removeClass("show");
$(".tab_header_hover").removeClass("tab_header_hover");
if ($(this).parent().is(":not(.selected_tab)")) {
$(".selected_tab").addClass("selected_frozen").removeClass("selected_tab");
$(this).parent().addClass("selected_temporarly").addClass("selected_tab");
}
$(".selected_tab:not(:visible)").addClass("selected_frozen").removeClass("selected_tab");
$("#"+active_group+" .selected_tab").find(".pin, .tab").each(function() {
if ($(this).parents(".pin, .tab").length > DragAndDrop.Depth) {
DragAndDrop.Depth = $(this).parents(".pin, .tab").length;
}
});
DragAndDrop.Depth -= $(this).parents(".pin, .tab").length-1;
if (DragAndDrop.Depth < 0) {
DragAndDrop.Depth = 0;
}
let Tabs = GetSelectedTabs();
DragAndDrop.TabsIds = Object.assign([], Tabs.TabsIds);
DragAndDrop.TabsIdsParents = Object.assign([], Tabs.TabsIdsParents);
DragAndDrop.TabsIdsSelected = Object.assign([], Tabs.TabsIdsSelected);
DragAndDrop.Folders = Object.assign({}, {});
DragAndDrop.FoldersSelected = Object.assign([], []);
}
chrome.runtime.sendMessage({
command: "drag_drop",
DragNodeClass: DragAndDrop.DragNodeClass,
TabsIds: DragAndDrop.TabsIds,
TabsIdsParents: DragAndDrop.TabsIdsParents,
TabsIdsSelected: DragAndDrop.TabsIdsSelected,
ComesFromWindowId: CurrentWindowId,
Depth: DragAndDrop.Depth,
Folders: DragAndDrop.Folders,
FoldersSelected: DragAndDrop.FoldersSelected
});
chrome.runtime.sendMessage({command: "drag_drop", DragNodeClass: "tab", SelectedTabsIds: DragAndDrop.SelectedTabsIds, TabsIds: DragAndDrop.TabsIds, Parents: DragAndDrop.Parents, ComesFromWindowId: CurrentWindowId, Depth: DragAndDrop.Depth});
});
// REMOVE DROP TARGET WHEN DRAG LEAVES
$(document).on("dragleave", ".highlighted_drop_target", function(event) {
$(document).on("dragleave", ".highlighted_drop_target", function(event) { // REMOVE DROP TARGET WHEN DRAG LEAVES
$(".highlighted_drop_target").removeClass("highlighted_drop_target");
});
// SET DROP TARGET WHEN ENTERING PINS
$(document).on("dragenter", ".pin>.drag_entered_top:not(.highlighted_drop_target), .pin>.drag_entered_bottom:not(.highlighted_drop_target)", function(event) {
$(document).on("dragenter", ".pin>.drag_entered_top:not(.highlighted_drop_target), .pin>.drag_entered_bottom:not(.highlighted_drop_target)", function(event) { // SET DROP TARGET WHEN ENTERING PINS
event.stopPropagation();
if (DragAndDrop.DragNodeClass == "tab") {
$(".highlighted_drop_target").removeClass("highlighted_drop_target");
$(this).addClass("highlighted_drop_target");
}
});
// SET DROP TARGET WHEN ENTERING TABS
$(document).on("dragenter", ".tab>.drag_entered_top:not(.highlighted_drop_target), .tab>.drag_entered_bottom:not(.highlighted_drop_target)", function(event) {
$(document).on("dragenter", ".tab>.drag_entered_top:not(.highlighted_drop_target), .tab>.drag_entered_bottom:not(.highlighted_drop_target)", function(event) { // SET DROP TARGET WHEN ENTERING TABS
event.stopPropagation();
if ($(".selected:visible").find($(this)).length == 0 && DragAndDrop.DragNodeClass == "tab") {
if (opt.max_tree_drag_drop && opt.max_tree_depth >= 0) {
if ($(this).parents(".tab").length + DragAndDrop.Depth > opt.max_tree_depth+1) { return; }
if (DragAndDrop.DragNodeClass == "tab") {
if ($(".selected_tab:visible").find($(this)).length == 0) {
if (opt.max_tree_drag_drop && opt.max_tree_depth >= 0) {
if ($(this).parents(".tab").length + DragAndDrop.Depth-1 > opt.max_tree_depth) {
return;
}
}
$(".highlighted_drop_target").removeClass("highlighted_drop_target");
$(this).addClass("highlighted_drop_target");
}
$(".highlighted_drop_target").removeClass("highlighted_drop_target");
$(this).addClass("highlighted_drop_target");
}
});
$(document).on("dragenter", ".tab>.drag_enter_center:not(.highlighted_drop_target)", function(event) {
event.stopPropagation();
if ($(".selected:visible").find($(this)).length == 0 && DragAndDrop.DragNodeClass == "tab" && opt.max_tree_depth != 0) {
if (opt.max_tree_drag_drop) {
if (opt.max_tree_depth == 0) { return; }
if ($(this).parents(".tab").length + DragAndDrop.Depth > opt.max_tree_depth) { return; }
if (DragAndDrop.DragNodeClass == "tab") {
if ($(".selected_tab:visible").find($(this)).length == 0 && opt.max_tree_depth != 0) {
if (opt.max_tree_drag_drop && opt.max_tree_depth > 0) {
if ($(this).parents(".tab").length + DragAndDrop.Depth > opt.max_tree_depth) {
return;
}
}
$(".highlighted_drop_target").removeClass("highlighted_drop_target");
$(this).addClass("highlighted_drop_target");
}
$(".highlighted_drop_target").removeClass("highlighted_drop_target");
$(this).addClass("highlighted_drop_target");
}
});
// SET DROP TARGET WHEN ENTERING FOLDERS
$(document).on("dragenter", ".folder>.drag_entered_top:not(.highlighted_drop_target), .folder>.drag_entered_bottom:not(.highlighted_drop_target), .folder>.drag_enter_center:not(.highlighted_drop_target)", function(event) {
$(document).on("dragenter", ".folder>.drag_entered_top:not(.highlighted_drop_target), .folder>.drag_entered_bottom:not(.highlighted_drop_target), .folder>.drag_enter_center:not(.highlighted_drop_target)", function(event) { // SET DROP TARGET WHEN ENTERING FOLDERS
event.stopPropagation();
if (DragAndDrop.DragNodeClass != "group") {
// if (/* $(".selected:visible").find($(this)).length > 0 || */ DragAndDrop.DragNodeClass != "folder") { return; }
if (DragAndDrop.DragNodeClass == "folder") {
$(".highlighted_drop_target").removeClass("highlighted_drop_target");
$(this).addClass("highlighted_drop_target");
}
});
// SET DROP TARGET, PIN_LIST, TAB_LIST, GROUP OR GROUP_BUTTON
$(document).on("dragover", "#pin_list, .group, .group_drag_box", function(event) {
if (DragAndDrop.DragNodeClass != "group" && $(".highlighted_drop_target").length == 0 && event.target.className == $(this)[0].className) {
$(document).on("dragenter", ".folder>.drag_enter_center:not(.highlighted_drop_target)", function(event) {
event.stopPropagation();
if (DragAndDrop.DragNodeClass == "tab") {
$(".highlighted_drop_target").removeClass("highlighted_drop_target");
$(this).addClass("highlighted_drop_target");
}
});
$(document).on("dragover", "#pin_list, .group, .group_drag_box", function(event) { // SET DROP TARGET, PIN_LIST, TAB_LIST, GROUP OR GROUP_BUTTON
if (DragAndDrop.DragNodeClass != "group") {
if ($(".highlighted_drop_target").length == 0 && event.target.className == $(this)[0].className) {
$(this).addClass("highlighted_drop_target");
}
}
});
// TIMER FOR FOR AUTO EXPAND
$(document).on("dragenter", ".drag_enter_center", function(event) {
$(document).on("dragenter", ".drag_enter_center", function(event) { // TIMER FOR FOR AUTO EXPAND
event.stopPropagation();
DragAndDrop.timeout = false;
setTimeout(function() { DragAndDrop.timeout = true; }, 1800);
setTimeout(function() {
DragAndDrop.timeout = true;
}, 1800);
});
$(document).on("dragleave", ".drag_enter_center", function(event) {
DragAndDrop.timeout = false;
@ -167,190 +201,212 @@ function SetDragAndDropEvents() {
DragAndDrop.timeout = false;
}
});
// DROP
$(document).on("drop", "*", function(event) {
$(document).on("drop", "*", function(event) { // DROP
chrome.runtime.sendMessage({command: "dropped", DroppedToWindowId: CurrentWindowId});
event.stopPropagation();
if (DragAndDrop.ComesFromWindowId == CurrentWindowId /* && ($(window).width() > event.clientX || $(window).height() > event.clientY) */) {
if (DragAndDrop.ComesFromWindowId == CurrentWindowId) {
DropToTarget($(".highlighted_drop_target"));
} else {
$(".selected").addClass("selected_frozen").removeClass("selected");
if (Object.keys(DragAndDrop.Folders).length > 0) {
for (var folder in DragAndDrop.Folders) {
bgfolders[DragAndDrop.Folders[folder].id] = Object.assign({}, DragAndDrop.Folders[folder]);
}
AppendFolders(bgfolders);
}
$(".selected_tab").addClass("selected_frozen").removeClass("selected_tab");
let target = $(".highlighted_drop_target");
let counter = DragAndDrop.TabsIds.length;
let counter = 0;
(DragAndDrop.TabsIds).forEach(function(TabId) {
chrome.tabs.move(TabId, { windowId: CurrentWindowId, index: -1 }, function(MovedTab) {
counter--;
setTimeout(function() {
if (counter == 0) {
setTimeout(function() {
(DragAndDrop.SelectedTabsIds).forEach(function(selectedTabId) {
if ($("#"+selectedTabId)[0]){
$("#"+selectedTabId).addClass("selected_temporarly").addClass("selected");
}
});
if (browserId != "F") { // I HAVE TO EXLUDE THIS IN FIREFOX SINCE MOVED TAB LOSES ITS ORIGINAL ID - WHAT IN THE ACTUAL F*CK MOZILLA!
for (var tabsIdsIndex = 1; tabsIdsIndex < (DragAndDrop.TabsIds).length; tabsIdsIndex++) {
if ($("#"+DragAndDrop.TabsIds[tabsIdsIndex])[0] && $("#"+DragAndDrop.Parents[tabsIdsIndex])[0]){
$("#"+DragAndDrop.Parents[tabsIdsIndex]).append($("#"+DragAndDrop.TabsIds[tabsIdsIndex]));
}
}
}
DropToTarget(target);
},300);
if (browserId == "F") { // FIRFOX BUG 1398272 - HAVE TO REPLACE ORIGINAL ID
if ((DragAndDrop.TabsIdsParents).indexOf("ch"+DragAndDrop.TabsIds[counter]) != -1) {
DragAndDrop.TabsIdsParents[(DragAndDrop.TabsIdsParents).indexOf("ch"+DragAndDrop.TabsIds[counter])] = "ch"+MovedTab[0].id;
}
},300);
if ((DragAndDrop.TabsIdsSelected).indexOf(DragAndDrop.TabsIds[counter]) != -1) {
DragAndDrop.TabsIdsSelected[(DragAndDrop.TabsIdsSelected).indexOf(DragAndDrop.TabsIds[counter])] = MovedTab[0].id;
}
DragAndDrop.TabsIds[counter] = MovedTab[0].id;
}
counter++;
if (counter == DragAndDrop.TabsIds.length) {
setTimeout(function() {
(DragAndDrop.TabsIdsSelected).forEach(function(selectedTabId) {
if ($("#"+selectedTabId)[0]) {
$("#"+selectedTabId).addClass("selected_temporarly").addClass("selected_tab");
}
});
for (var tabsIdsIndex = 1; tabsIdsIndex < (DragAndDrop.TabsIds).length; tabsIdsIndex++) {
if ($("#"+DragAndDrop.TabsIds[tabsIdsIndex])[0] && $("#"+DragAndDrop.TabsIdsParents[tabsIdsIndex])[0]) {
$("#"+DragAndDrop.TabsIdsParents[tabsIdsIndex]).append($("#"+DragAndDrop.TabsIds[tabsIdsIndex]));
}
}
for (var FolderSelectedIndex = 0; FolderSelectedIndex < (DragAndDrop.FoldersSelected).length; FolderSelectedIndex++) {
if ($("#"+DragAndDrop.FoldersSelected[FolderSelectedIndex])[0]) {
$("#"+DragAndDrop.FoldersSelected[FolderSelectedIndex]).addClass("selected_folder_temporarly").addClass("selected_folder");
}
}
DropToTarget(target);
}, 300);
}
});
});
}
$(".drop_target").css({"pointer-events": "none"});
});
// DETACH
$(document).on("dragend", ".tab_header", function(event) {
if (DragAndDrop.ComesFromWindowId == CurrentWindowId) {
if (browserId == "F" && (event.screenX < event.view.mozInnerScreenX || event.screenX > (event.view.mozInnerScreenX + $(window).width()) || (event.screenY < event.view.mozInnerScreenY || event.screenY > (event.view.mozInnerScreenY + $(window).height())))) {
DetachTabs(DragAndDrop.TabsIds);
$(document).on("dragend", ".tab_header, .folder_header", function(event) { // DETACH TABS
setTimeout(function() {
if (DragAndDrop.ComesFromWindowId == CurrentWindowId && DragAndDrop.DroppedToWindowId == 0) {
if ( (browserId == "F" && (event.screenX < event.view.mozInnerScreenX || event.screenX > (event.view.mozInnerScreenX + $(window).width()) || (event.screenY < event.view.mozInnerScreenY || event.screenY > (event.view.mozInnerScreenY + $(window).height()))))
|| (browserId != "F" && (event.pageX < 0 || event.pageX > $(window).width() || event.pageY < 0 || event.pageY > $(window).height()))
) {
if (DragAndDrop.DragNodeClass == "tab") {
DetachTabs(DragAndDrop.TabsIds, {});
}
if (DragAndDrop.DragNodeClass == "folder") {
DetachTabs(DragAndDrop.TabsIds, DragAndDrop.Folders);
setTimeout(function() {
SaveFolders();
}, 500);
}
}
}
if (browserId != "F" && (event.pageX < 0 || event.pageX > $(window).width() || event.pageY < 0 || event.pageY > $(window).height())) {
DetachTabs(DragAndDrop.TabsIds);
}
}
}, 200);
$(".drop_target").css({"pointer-events": "none"});
});
// dragging groups
$(document).on("dragstart", ".group_drag_box", function(event) {
$(document).on("dragstart", ".group_drag_box", function(event) { // DRAGGING GROUPS
event.originalEvent.dataTransfer.setData("null", "null");
event.originalEvent.dataTransfer.setDragImage(document.getElementById("DragImage"), 0, 0);
DragAndDrop.DragNodeClass = "group";
DragAndDrop.DragNode = $(this).parent();
$(".highlighted_drop_target").removeClass("highlighted_drop_target");
});
// when dragging the group, move it up or down
$(document).on("dragenter", ".group_drag_box", function(event) {
if (DragAndDrop.DragNode != undefined && DragAndDrop.DragNodeClass == "group" && $(this).parent() != DragAndDrop.DragNode) {
if ( $(this).parent().index() <= DragAndDrop.DragNode.index() ) {
DragAndDrop.DragNode.insertBefore($(this).parent());
} else {
if ($(this).parent().index() > DragAndDrop.DragNode.index()) {
DragAndDrop.DragNode.insertAfter($(this).parent());
$(document).on("dragenter", ".group_drag_box", function(event) { // WHEN DRAGGING THE GROUP, MOVE IT UP OR DOWN
if (DragAndDrop.DragNodeClass == "group") {
if (DragAndDrop.DragNode != undefined && $(this).parent() != DragAndDrop.DragNode) {
if ($(this).parent().index() <= DragAndDrop.DragNode.index()) {
DragAndDrop.DragNode.insertBefore($(this).parent());
} else {
if ($(this).parent().index() > DragAndDrop.DragNode.index()) {
DragAndDrop.DragNode.insertAfter($(this).parent());
}
}
$(".highlighted_drop_target").removeClass("highlighted_drop_target");
}
$(".highlighted_drop_target").removeClass("highlighted_drop_target");
}
});
// when finished dragging the group
$(document).on("dragend", ".group_drag_box", function(event) {
DragAndDrop.DragNodeClass = "";
$(document).on("dragend", ".group_drag_box", function(event) { // WHEN FINISHED DRAGGING THE GROUP
DragAndDrop.DragNode = undefined;
UpdateBgGroupsOrder();
$(".highlighted_drop_target").removeClass("highlighted_drop_target");
RearrangeGroupsLists();
$(".drop_target").css({"pointer-events": "none"});
if (opt.syncro_tabbar_groups_tabs_order) {
schedule_rearrange_tabs++;
}
});
}
function DropToTarget(TargetNode) {
// dropped on pin
if (TargetNode.parent().is(".pin")) {
$(".selected").each(function() {
SetTabClass({ id: this.id, pin: true });
if (DragAndDrop.DragNodeClass == "tab") {
if (TargetNode.parent().is(".pin")) { // dropped on pin
$(".selected_tab").each(function() {
SetTabClass({ id: this.id, pin: true });
if (TargetNode.is(".drag_entered_top")) {
$(this).insertBefore(TargetNode.parent());
} else {
$(this).insertAfter(TargetNode.parent());
}
});
}
if (TargetNode.is("#pin_list")) { // dropped on pin_list
$(".selected_tab").each(function() {
SetTabClass({ id: this.id, pin: true });
});
TargetNode.append($(".selected_tab"));
}
if (TargetNode.parent().is(".tab, .folder")) { // dropped on tab or folder
if (TargetNode.parent().is(".selected_tab")) {
TargetNode.parent().addClass("highlighted_selected").removeClass("selected_tab");
}
$(".selected_tab").each(function() {
SetTabClass({ id: this.id, pin: false });
});
if (TargetNode.is(".drag_entered_top")) {
$(this).insertBefore(TargetNode.parent());
} else {
$(this).insertAfter(TargetNode.parent());
$($(".selected_tab").get().reverse()).insertBefore(TargetNode.parent());
}
});
}
// dropped on pin_list
if (TargetNode.is("#pin_list")) {
$(".selected").each(function() {
SetTabClass({ id: this.id, pin: true });
});
TargetNode.append($(".selected"));
}
// dropped on tab
if (TargetNode.parent().is(".tab, .folder")) {
if (TargetNode.parent().is(".selected")) {
TargetNode.parent().addClass("highlighted_selected").removeClass("selected");
}
$(".selected").each(function() {
SetTabClass({ id: this.id, pin: false });
});
if (TargetNode.is(".drag_entered_top")) {
$($(".selected").get().reverse()).insertBefore(TargetNode.parent());
}
if (TargetNode.is(".drag_entered_bottom")) {
$($(".selected").get().reverse()).insertAfter(TargetNode.parent());
}
if (TargetNode.is(".drag_enter_center")) {
if (opt.append_child_tab == "bottom") {
$("#ch" + TargetNode[0].id.substr(2)).append($($(".selected").get().reverse()));
} else {
$("#ch" + TargetNode[0].id.substr(2)).prepend($($(".selected").get().reverse()));
if (TargetNode.is(".drag_entered_bottom")) {
$($(".selected_tab").get().reverse()).insertAfter(TargetNode.parent());
}
if (TargetNode.is(".drag_enter_center")) {
if (opt.append_child_tab == "bottom") {
$("#ch" + TargetNode[0].id.substr(2)).append($($(".selected_tab").get().reverse()));
} else {
$("#ch" + TargetNode[0].id.substr(2)).prepend($($(".selected_tab").get().reverse()));
}
}
}
}
// dropped on group (tab list)
if (TargetNode.is(".group")) {
$(".selected").each(function() {
SetTabClass({ id: this.id, pin: false });
});
TargetNode.append($($(".selected").get().reverse()));
}
// dropped on group button (group list)
if (TargetNode.is(".group_drag_box")) {
$(".selected").each(function() {
SetTabClass({ id: this.id, pin: false });
});
$("#"+TargetNode[0].id.substr(1)).append($($(".selected").get().reverse()));
if (TargetNode.is(".group")) { // dropped on group (tab list)
$(".selected_tab").each(function() {
SetTabClass({ id: this.id, pin: false });
});
$("#ch"+TargetNode[0].id).append($($(".selected_tab").get().reverse()));
}
if (TargetNode.is(".group_drag_box")) { // dropped on group button (group list)
$(".selected_tab").each(function() {
SetTabClass({ id: this.id, pin: false });
});
$("#ch"+TargetNode[0].id.substr(1)).append($($(".selected_tab").get().reverse()));
}
$(".highlighted_selected").addClass("selected_tab").removeClass("highlighted_selected");
$(".selected_frozen").addClass("selected_tab").removeClass("selected_frozen");
$(".selected_temporarly").removeClass("selected_tab").removeClass("selected_temporarly");
}
$(".highlighted_selected").addClass("selected").removeClass("highlighted_selected");
// if ($(".tab.active:visible")[0] == undefined) {
// bggroups[$("#"+tabId).parents(".group")[0].id].activetab = parseInt(tabId);
// if ($("#"+tabId).parents(".group")[0].id != active_group) {
// SetActiveGroup($("#"+tabId).parents(".group")[0].id, false, true);
// }
// chrome.runtime.sendMessage({command: "save_groups", groups: bggroups, windowId: CurrentWindowId});
// }
if (DragAndDrop.DragNodeClass == "folder") { // dropped on group button (group list)
if (TargetNode.is(".group_drag_box")) {
$("#cf"+TargetNode[0].id.substr(1)).append($($(".selected_folder").get().reverse()));
}
if (TargetNode.parent().is(".folder")) { // dropped on folder
if (TargetNode.parent().is(".selected_folder")) {
TargetNode.parent().addClass("highlighted_selected").removeClass("selected_folder");
}
if (TargetNode.is(".drag_entered_top")) {
$($(".selected_folder").get().reverse()).insertBefore(TargetNode.parent());
}
if (TargetNode.is(".drag_entered_bottom")) {
$($(".selected_folder").get().reverse()).insertAfter(TargetNode.parent());
}
if (TargetNode.is(".drag_enter_center")) {
if (opt.append_child_tab == "bottom") {
$("#cf" + TargetNode[0].id.substr(2)).append($($(".selected_folder").get().reverse()));
} else {
$("#cf" + TargetNode[0].id.substr(2)).prepend($($(".selected_folder").get().reverse()));
}
}
}
$(".highlighted_selected").addClass("selected_folder").removeClass("highlighted_selected");
$(".selected_folder_frozen").addClass("selected_folder").removeClass("selected_folder_frozen");
$(".selected_folder_temporarly").removeClass("selected_folder").removeClass("selected_folder_temporarly");
setTimeout(function() {
SaveFolders();
}, 300);
}
RefreshExpandStates();
DragAndDrop.timeout = false;
RefreshGUI();
RefreshCounters();
if (opt.syncro_tabbar_tabs_order) {
let TTtabsIndexes = $(".pin, .tab").map(function(){return parseInt(this.id);}).toArray();
chrome.tabs.move(DragAndDrop.TabsIds, {index: TTtabsIndexes.indexOf(DragAndDrop.TabsIds[0])});
setTimeout(function() {
schedule_rearrange_tabs++;
}, 500);
}
setTimeout(function() {
DropTargetsSendToBack();
schedule_update_data++;
schedule_rearrange_tabs++;
}, 500);
TargetNode.removeClass("highlighted_drop_target");
$(".tab_header_hover").removeClass("tab_header_hover");
$(".selected_frozen").addClass("selected").removeClass("selected_frozen");
$(".selected_temporarly").removeClass("selected").removeClass("selected_temporarly");
// this is group dragover indicator
$(".dragover_highlight").removeClass("dragover_highlight");
}
$(".folder_header").removeClass("folder_header_hover");
$(".dragover_highlight").removeClass("dragover_highlight"); // this is group dragover indicator
}

View File

@ -3,70 +3,193 @@
// that can be found at https://creativecommons.org/licenses/by-nc-nd/4.0/
function AddNewFolder() {
var ID = GenerateNewFolderID();
AppendFolder({id: ID, name: "untitled"});
function AddNewFolder(p) {
var newId = GenerateNewFolderID();
bgfolders[newId] = { id: newId, parent: (p.ParentId ? p.ParentId : ""), index: (p.index ? p.index : 0), name: (p.name ? p.name : caption_noname_group), expand: (p.expand ? p.expand : "n") };
AppendFolder({id: newId, ParentId: (p.ParentId ? p.ParentId : ""), name: caption_noname_group});
SaveFolders();
RefreshCounters();
return newId;
}
function AppendFolder(param) {
var fd = document.createElement("div"); fd.className = "folder c"; fd.id = param.id;// FOLDER
var dc = document.createElement("div"); dc.className = "drop_target drag_enter_center"; dc.id = "dc"+param.id; fd.appendChild(dc); // DROP TARGET CENTER
var dt = document.createElement("div"); dt.className = "drop_target drag_entered_top"; dt.id = "du"+param.id; fd.appendChild(dt); // DROP TARGET TOP
var db = document.createElement("div"); db.className = "drop_target drag_entered_bottom"; db.id = "dd"+param.id; fd.appendChild(db); // DROP TARGET BOTTOM
var fh = document.createElement("div"); fh.className = "folder_header"; fh.id = "tab_header"+param.id; fh.draggable = true; fd.appendChild(fh); // HEADER
var ex = document.createElement("div"); ex.className = "folder_icon"; ex.id = "fop"+param.id; fh.appendChild(ex);
var ft = document.createElement("div"); ft.className = "folder_title"; ft.id = "folder_title"+param.id; ft.textContent = param.name; fh.appendChild(ft); // TITLE
// $("#tab_title" + tab.id)[0].textContent = title;
// $("#tab_header" + tab.id).attr("title", title);
var ch = document.createElement("div"); ch.className = "children"; ch.id = "ch"+param.id; fd.appendChild(ch);
// var tt = document.createElement("div"); tt.className = "tab_title"; tt.id = "tab_title"+param.tab.id; th.appendChild(tt); // TITLE
$("#"+active_group).append(fd);
if ($("#"+param.id).length == 0) {
var fd = document.createElement("div"); fd.className = "folder "; if (param.expand) { fd.className += param.expand } fd.id = param.id;// FOLDER
var dc = document.createElement("div"); dc.className = "drop_target drag_enter_center"; dc.id = "dc"+param.id; fd.appendChild(dc); // DROP TARGET CENTER
var dt = document.createElement("div"); dt.className = "drop_target drag_entered_top"; dt.id = "du"+param.id; fd.appendChild(dt); // DROP TARGET TOP
var db = document.createElement("div"); db.className = "drop_target drag_entered_bottom"; db.id = "dd"+param.id; fd.appendChild(db); // DROP TARGET BOTTOM
var fh = document.createElement("div"); fh.className = opt.always_show_close ? "folder_header close_show" : "folder_header"; fh.id = "folder_header"+param.id; fh.draggable = true; fd.appendChild(fh); // HEADER
var ex = document.createElement("div"); ex.className = "folder_icon"; ex.id = "fop"+param.id; fh.appendChild(ex);
var ft = document.createElement("div"); ft.className = "folder_title"; ft.id = "folder_title"+param.id; ft.textContent = param.name; fh.appendChild(ft); // TITLE
var cf = document.createElement("div"); cf.className = "children"; cf.id = "cf"+param.id; fd.appendChild(cf);
var ch = document.createElement("div"); ch.className = "children"; ch.id = "ch"+param.id; fd.appendChild(ch);
if (!opt.never_show_close) {
var cl = document.createElement("div"); cl.className = "close"; cl.id = "close"+param.id; fh.appendChild(cl); // CLOSE BUTTON
var ci = document.createElement("div"); ci.className = "close_img"; ci.id = "close_img"+param.id; cl.appendChild(ci);
}
if (param.ParentId == "" || param.ParentId == undefined || $("#cf"+param.ParentId).length == 0) {
$("#cf"+active_group).append(fd);
} else {
$("#cf"+param.ParentId).append(fd);
}
}
}
function GenerateNewFolderID(){
function GenerateNewFolderID() {
var newID = "f_"+GenerateRandomID();
console.log("generating "+newID);
if ($("#"+newID)[0]) {
GenerateNewFolderID();
console.log("exists "+newID);
} else {
console.log("yay this is ok "+newID);
return newID;
}
}
function AppendFolders(Folders) {
for (var folderId in Folders) {
AppendFolder({id: folderId, ParentId: Folders[folderId].parent, name: Folders[folderId].name, expand: Folders[folderId].expand});
}
// APPEND FOLDERS TO PARENTS
for (var folderId in Folders) {
if ($("#"+folderId)[0] && Folders[folderId].parent != $("#"+folderId).parent().parent()[0].id) {
$("#cf"+Folders[folderId].parent).append($("#"+folderId));
}
}
}
function SaveFolders() {
$(".folder").each(function() {
bgfolders[this.id].parent = $(this).parent().parent()[0].id;
bgfolders[this.id].index = $(this).index();
bgfolders[this.id].expand = ($(this).is(".n") ? "n" : ($(this).is(".c") ? "c" : "o"));
});
chrome.runtime.sendMessage({command: "save_folders", folders: bgfolders, windowId: CurrentWindowId});
}
function RearrangeFolders(first_loop) {
$(".folder").each(function() {
if (bgfolders[this.id] && $(this).parent().children().eq(bgfolders[this.id].index)[0]) {
if ($(this).index() > bgfolders[this.id].index) {
$(this).insertBefore($(this).parent().children().eq(bgfolders[this.id].index));
} else {
$(this).insertAfter($(this).parent().children().eq(bgfolders[this.id].index));
}
}
if (bgfolders[this.id] && $(this).index() != bgfolders[this.id].index && first_loop) {
RearrangeFolders(false);
}
});
}
function RemoveFolder(FolderId) {
if ($("#"+FolderId)[0]) {
if (opt.promote_children == true) {
if (opt.promote_children_in_first_child == true && $("#cf"+FolderId).children().length > 0) {
let FirstChild = $("#cf"+FolderId).children()[0];
$(FirstChild).insertAfter($("#"+FolderId));
$("#cf"+FirstChild.id).append($("#cf"+FolderId).children());
if ($("#ch"+FolderId).children().length > 0) {
$("#ch"+FirstChild.id).append($("#ch"+FolderId).children());
}
} else {
$("#ch"+($("#"+FolderId).parent().parent()[0].id)).append($("#ch"+FolderId).children());
$("#cf"+FolderId).children().insertAfter($("#"+FolderId));
}
} else {
$("#"+FolderId+" .tab").each(function() {
chrome.tabs.remove(parseInt(this.id), null);
});
$("#"+FolderId+" .folder").each(function() {
delete bgfolders[this.id];
});
}
$("#"+FolderId).remove();
delete bgfolders[FolderId];
RefreshExpandStates();
chrome.runtime.sendMessage({command: "save_folders", folders: bgfolders, windowId: CurrentWindowId});
}
}
function SetActiveFolder(FolderId) {
if ($("#"+FolderId).length > 0) {
$(".selected_folder").removeClass("selected_folder");
$("#"+FolderId).addClass("selected_folder");
}
}
// Rename folder popup
function ShowRenameFolderDialog(FolderId) {
$("#folder_edit_name")[0].value = bgfolders[FolderId].name;
$("#folder_edit_name").data("FolderId", FolderId);
$("#folder_edit").css({"display": "block", "top": $("#toolbar_groups").offset().top + 8, "left": 22});
}
// when pressed OK in folder popup
function FolderRenameConfirm() {
$("#folder_edit_name")[0].value = $("#folder_edit_name")[0].value.replace(/[\f\n\r\v\t\<\>\+\-\(\)\.\,\;\:\~\/\|\?\@\!\"\'\£\$\%\&\^\#\=\*\[\]]?/gi, "");
bgfolders[$("#folder_edit_name").data("FolderId")].name = $("#folder_edit_name")[0].value;
$("#folder_title"+$("#folder_edit_name").data("FolderId"))[0].innerText = $("#folder_edit_name")[0].value;
$(".edit_dialog").hide(0);
chrome.runtime.sendMessage({command: "save_folders", folders: bgfolders, windowId: CurrentWindowId});
RefreshCounters();
}
function SetFolderEvents() {
// EXPAND BOX - EXPAND / COLLAPSE
$(document).on("mousedown", ".folder_icon", function(event) {
$(document).on("click", ".folder_icon", function(event) {
event.stopPropagation();
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" } });
// });
// }
}
}
RefreshExpandStates();
RefreshCounters();
SaveFolders();
}
});
// SINGLE CLICK TO ACTIVATE FOLDER
$(document).on("click", ".folder_header", function(event) {
event.stopPropagation();
if (event.button == 0 && !event.shiftKey) {
$("#"+active_group+" .tab").removeClass("selected_tab");
if (!event.ctrlKey) {
$(".selected_folder:not(#"+($(this).parent()[0].id)+")").removeClass("selected_folder");
}
// SetActiveFolder();
$(this).parent().toggleClass("selected_folder");
}
});
// CLOSE TAB/PIN
$(document).on("mousedown", ".folder_header", function(event) {
if ((event.button == 1 && opt.close_with_MMB == true) || (event.button == 0 && $(event.target).is(".close, .close_img"))) {
RemoveFolder($(this).parent()[0].id);
}
if (event.button == 2) {
event.stopPropagation();
ShowFolderMenu($(this).parent(), event);
}
});
// edit folder dialog box
$(document).on("mousedown", "#folder_edit_discard", function(event) {
$(".edit_dialog").hide(0);
});
$("#folder_edit_name").keyup(function(e) {
if (e.keyCode == 13) {
FolderRenameConfirm();
}
});
$(document).on("mousedown", "#folder_edit_confirm", function(event) {
FolderRenameConfirm();
});
// edit folder
$(document).on("dblclick", ".folder_title", function(event) {
if (event.button == 0) {
ShowRenameFolderDialog($(this).parent().parent()[0].id);
}
});
$(document).on("mouseover", ".folder_header", function(event) {
$(this).addClass("folder_header_hover");
if (opt.always_show_close == false) {
$(this).addClass("close_show");
}
});
$(document).on("mouseleave", ".folder_header", function(event) {
$(this).removeClass("folder_header_hover");
if (opt.always_show_close == false) {
$(this).removeClass("close_show");
}
});
}

View File

@ -4,41 +4,42 @@
// ********** GLOBAL VARIABLES FOR BACKGROUND, OPTIONS AND SIDEBAR ***************
var running = false;
var schedule_save = 0;
var schedule_update_indexes = 0;
var schedule_save = -999;
var schedule_update_data = 0;
var schedule_rearrange_tabs = 0;
var schedule_rearrange_reverse = false;
var windows = {};
var tabs = {};
var MouseHoverOver = "";
var DragAndDrop = {timeout: false, DragNode: undefined, DragNodeClass: "", SelectedTabsIds: [], TabsIds: [], Parents: [], ComesFromWindowId: 0, Depth: 0};
var DropTargetsInFront = false;
var menuTabId = 0;
var DragAndDrop = {
timeout: false,
DragNode: undefined,
DragNodeClass: "",
TabsIds: [],
TabsIdsParents: [],
TabsIdsSelected: [],
Folders: {},
FoldersSelected: [],
ComesFromWindowId: 0,
DroppedToWindowId: 0,
Depth: 0
};
var menuItemId = 0;
var CurrentWindowId = 0;
var SearchIndex = 0;
var schedule_update_data = 0;
var active_group = "tab_list";
var PickColor = "";
var opt = {};
var browserId = navigator.userAgent.match("Opera") !== null ? "O" : ( navigator.userAgent.match("Vivaldi") !== null ? "V" : (navigator.userAgent.match("Firefox") !== null ? "F" : "C" ) );
var bgtabs = {};
var bggroups = {};
var bgfolders = {};
var caption_clear_filter = chrome.i18n.getMessage("caption_clear_filter");
var caption_loading = chrome.i18n.getMessage("caption_loading");
var caption_searchbox = chrome.i18n.getMessage("caption_searchbox");
var caption_ungrouped_group = chrome.i18n.getMessage("caption_ungrouped_group");
var caption_noname_group = chrome.i18n.getMessage("caption_noname_group");
var DefaultToolbar =
'<div id=toolbar_main>'+
'<div class=button id=button_new><div class=button_img></div></div>'+
@ -48,7 +49,7 @@ var DefaultToolbar =
'<div class=button id=button_tools><div class=button_img></div></div>'+
'<div class=button id=button_groups><div class=button_img></div></div>'+
'<div class=button id=button_backup><div class=button_img></div></div>'+
// '<div class=button id=button_folders><div class=button_img></div></div>'+
'<div class=button id=button_folders><div class=button_img></div></div>'+
'</div>'+
'<div class=toolbar_shelf id=toolbar_search>'+
'<div id=toolbar_search_input_box>'+
@ -68,9 +69,9 @@ var DefaultToolbar =
'<div class=button id=button_downloads><div class=button_img></div></div>'+
'<div class=button id=button_history><div class=button_img></div></div>'+
'<div class=button id=button_settings><div class=button_img></div></div>'+
'<div class=button id=button_extensions><div class=button_img></div></div>'+
'<div class=button id=button_discard><div class=button_img></div></div>'
'<div class=button id=button_extensions><div class=button_img></div></div>'
: '')+
'<div class=button id=button_discard><div class=button_img></div></div>'+
'<div class=button id=button_move><div class=button_img></div></div>'+
'</div>'+
'<div class=toolbar_shelf id=toolbar_shelf_groups>'+
@ -90,31 +91,54 @@ var DefaultToolbar =
'<div class=button id=button_load_bak2><div class=button_img></div></div>'+
'<div class=button id=button_load_bak3><div class=button_img></div></div>'
: '')+
'</div>'+
'<div class=toolbar_shelf id=toolbar_shelf_folders>'+
'<div class=button id=button_new_folder><div class=button_img></div></div>'+
'<div class=button id=button_remove_folder><div class=button_img></div></div>'+
'<div class=button id=button_edit_folder><div class=button_img></div></div>'+
'</div>';
// '<div class=toolbar_shelf id=toolbar_shelf_folders>'+
// '</div>'+
var DefaultTheme = { "ToolbarShow": true, "ColorsSet": {}, "TabsSizeSetNumber": 2, "theme_name": "untitled", "theme_version": 2, "toolbar": DefaultToolbar, "unused_buttons": "" };
var DefaultPreferences = { "skip_load": false, "new_open_below": false, "pin_list_multi_row": false, "close_with_MMB": true, "always_show_close": false, "allow_pin_close": false, "append_child_tab": "bottom", "append_child_tab_after_limit": "after", "append_orphan_tab": "bottom", "after_closing_active_tab": "below", "close_other_trees": false, "promote_children": true, "promote_children_in_first_child": true, "open_tree_on_hover": true, "max_tree_depth": -1, "max_tree_drag_drop": true, "never_show_close": false, "switch_with_scroll": false, "syncro_tabbar_tabs_order": true, "show_counter_groups": true, "show_counter_tabs": true, "show_counter_tabs_hints": true, "groups_toolbar_default": true };
var DefaultTheme = {
"ToolbarShow": true,
"ColorsSet": {},
"TabsSizeSetNumber": 2,
"theme_name": "untitled",
"theme_version": 2,
"toolbar": DefaultToolbar,
"unused_buttons": ""
};
var DefaultPreferences = {
"skip_load": false,
"pin_list_multi_row": false,
"close_with_MMB": true,
"always_show_close": false,
"allow_pin_close": false,
"append_child_tab": "bottom",
"append_child_tab_after_limit": "after",
"append_orphan_tab": "bottom",
"after_closing_active_tab": "below_seek_in_parent",
"close_other_trees": false,
"promote_children": true,
"promote_children_in_first_child": true,
"open_tree_on_hover": true,
"max_tree_depth": -1,
"max_tree_drag_drop": true,
"never_show_close": false,
"switch_with_scroll": false,
"syncro_tabbar_tabs_order": true,
"show_counter_groups": true,
"show_counter_tabs": true,
"show_counter_tabs_hints": true,
"groups_toolbar_default": true,
"syncro_tabbar_groups_tabs_order": true,
"debug": false
};
var theme = {
"TabsSizeSetNumber": 2,
"ToolbarShow": true,
"toolbar": DefaultToolbar
};
// ******************* GLOBAL FUNCTIONS ************************
// function LoadData(KeyName, ExpectReturnDefaultType) {
// chrome.runtime.sendMessage({command: "load_data", K: KeyName, T: ExpectReturnDefaultType}, function(response) {
// return response;
// });
// }
function LoadData(KeyName, ExpectReturnDefaultType) {
var data = ExpectReturnDefaultType;
try {
data = JSON.parse(localStorage[KeyName]);
return data;
} catch(e) {
return ExpectReturnDefaultType;
}
}
// generate random id
function GenerateRandomID(){
@ -128,10 +152,41 @@ function RGBtoHex(color){
}
function HexToRGB(hex, alpha){
hex = hex.replace('#', ''); let r = parseInt(hex.length == 3 ? hex.slice(0, 1).repeat(2) : hex.slice(0, 2), 16); let g = parseInt(hex.length == 3 ? hex.slice(1, 2).repeat(2) : hex.slice(2, 4), 16); let b = parseInt(hex.length == 3 ? hex.slice(2, 3).repeat(2) : hex.slice(4, 6), 16); if (alpha) { return 'rgba('+r+', '+g+', '+b+', '+alpha+')'; } else { return 'rgb('+r+', '+g+', '+b+')'; }
hex = hex.replace('#', '');
let r = parseInt(hex.length == 3 ? hex.slice(0, 1).repeat(2) : hex.slice(0, 2), 16);
let g = parseInt(hex.length == 3 ? hex.slice(1, 2).repeat(2) : hex.slice(2, 4), 16);
let b = parseInt(hex.length == 3 ? hex.slice(2, 3).repeat(2) : hex.slice(4, 6), 16);
if (alpha) { return 'rgba('+r+', '+g+', '+b+', '+alpha+')'; } else { return 'rgb('+r+', '+g+', '+b+')'; }
}
function GetCurrentTheme() {
chrome.storage.local.get(null, function(items) {
if (items["current_theme"] && items["themes"] && items["themes"][items["current_theme"]]) {
theme = items["themes"][items["current_theme"]];
} else {
theme = Object.assign({}, DefaultTheme);
}
});
}
function ApplyTheme(theme) {
RestoreStateOfGroupsToolbar();
ApplySizeSet(theme["TabsSizeSetNumber"]);
ApplyColorsSet(theme["ColorsSet"]);
if (theme.ToolbarShow) {
if (theme.theme_version == DefaultTheme.theme_version) {
$("#toolbar").html(theme.toolbar);
if (browserId == "F") {
$(".button#button_load_bak1, .button#button_load_bak2, .button#button_load_bak3").remove();
}
} else {
$("#toolbar").html(DefaultToolbar);
}
}
RestoreToolbarShelf();
RestoreToolbarSearchFilter();
Loadi18n();
}
/* theme colors is an object with css variables (but without --), for example; {"button_background": "#f2f2f2", "filter_box_border": "#cccccc"} */
function ApplyColorsSet(ThemeColors){
let css_variables = "";
@ -157,7 +212,7 @@ function ApplySizeSet(size){
}
}
if (browserId == "F") {
// I have no idea what is going on, but why top position for various things is different in firefox?????
// for some reason top position for various things is different in firefox?????
if (size > 1) {
document.styleSheets[document.styleSheets.length-1].insertRule(".tab_header>.tab_title { margin-top: -1px; }", document.styleSheets[document.styleSheets.length-1].cssRules.length);
} else {
@ -167,27 +222,26 @@ function ApplySizeSet(size){
}
function LoadPreferences() {
var LoadedPreferences = LoadData("preferences", {});
for (var parameter in DefaultPreferences) {
opt[parameter] = DefaultPreferences[parameter];
}
for (var parameter in LoadedPreferences) {
if (opt[parameter] != undefined) {
opt[parameter] = LoadedPreferences[parameter];
opt = Object.assign({}, DefaultPreferences);
chrome.storage.local.get(null, function(items) {
if (items["preferences"]) {
for (var parameter in items["preferences"]) {
if (opt[parameter] != undefined) {
opt[parameter] = items["preferences"][parameter];
}
}
}
}
});
}
function LoadDefaultPreferences() {
for (var parameter in DefaultPreferences) {
opt[parameter] = DefaultPreferences[parameter];
}
opt = Object.assign({}, DefaultPreferences);
}
function SavePreferences() {
localStorage["preferences"] = JSON.stringify(opt);
setTimeout(function() {
chrome.runtime.sendMessage({command: "reload_options"});
}, 200);
chrome.runtime.sendMessage({command: "save_preferences", opt: opt}, function(response) {
setTimeout(function() {
chrome.runtime.sendMessage({command: "reload_options"});
}, 300);
});
}
function ShowOpenFileDialog(id, extension) {
let body = document.getElementById("body");
@ -211,3 +265,9 @@ function SaveFile(filename, data) {
link.remove();
}
function log(m) {
if (opt.debug) {
console.log(m);
}
// chrome.runtime.sendMessage({command: "console_log", m: m});
}

View File

@ -4,32 +4,52 @@
// ********** GROUPS FUNCTIONS ***************
function AppendAllGroups() {
function SaveGroups() {
chrome.runtime.sendMessage({command: "save_groups", groups: bggroups, windowId: CurrentWindowId});
}
function AppendGroups(Groups) {
// var scroll = $("#group_list").scrollTop();
for (var group in bggroups) {
AppendGroupToList(bggroups[group].id, bggroups[group].name, bggroups[group].font);
for (var group in Groups) {
AppendGroupToList(Groups[group].id, Groups[group].name, Groups[group].font);
}
RearrangeGroups(0);
setTimeout(function() {
RearrangeGroupsButtons(0);
}, 1000);
}
function RearrangeGroups(stack) {
function RearrangeGroupsButtons(stack) {
$(".group_button").each(function() {
if ($("#group_list").children().eq(bggroups[(this.id).substr(1)].index)[0] && $(this).index() > bggroups[(this.id).substr(1)].index) {
$(this).insertBefore($("#group_list").children().eq(bggroups[(this.id).substr(1)].index)[0]);
} else {
if ($("#group_list").children().eq(bggroups[(this.id).substr(1)].index)[0] && $(this).index() < bggroups[(this.id).substr(1)].index) {
$(this).insertAfter($("#group_list").children().eq(bggroups[(this.id).substr(1)].index)[0]);
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);
}
}
if ($(this).index() != bggroups[(this.id).substr(1)].index && stack < 10) {
RearrangeGroups(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);
@ -57,11 +77,10 @@ function GenerateNewGroupID(){
function AddNewGroup(p) {
var newId = GenerateNewGroupID();
bggroups[newId] = { id: newId, index: 0, activetab: 0, activetab_ttid: "", name: (p.name ? p.name : caption_noname_group), font: (p.font ? p.font : "") };
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;
// chrome.runtime.sendMessage({command: "save_groups", groups: bggroups, windowId: CurrentWindowId});
}
// function AppendTabsToGroup(p) {
@ -70,23 +89,34 @@ function AddNewGroup(p) {
// remove group, delete tabs if close_tabs is true
function GroupRemove(groupId, close_tabs) {
if (close_tabs) {
CloseTabs($("#"+active_group).find(".tab").map(function() {return parseInt(this.id);}).toArray());
} else {
$("#"+groupId).children().each(function() {
$("#tab_list").append(this);
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).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);
if ($("#"+groupId)[0].id == active_group) {
if ($("#_"+groupId).prev(".group_button")[0]) {
SetActiveGroup(($("#_"+groupId).prev(".group_button")[0].id).substr(1), true, true);
} else {
SetActiveGroup("tab_list", true, true);
if ($("#_"+groupId).next(".group_button")[0]) {
SetActiveGroup(($("#_"+groupId).next(".group_button")[0].id).substr(1), true, true);
} else {
SetActiveGroup("tab_list", true, true);
}
}
}
chrome.runtime.sendMessage({command: "save_groups", groups: bggroups, windowId: CurrentWindowId});
SaveGroups();
$("#"+groupId).remove();
$("#_"+groupId).remove();
schedule_update_data++;
@ -94,44 +124,53 @@ function GroupRemove(groupId, close_tabs) {
function UpdateBgGroupsOrder() {
$(".group_button").each(function() {
bggroups[(this.id).substr(1)].index = $(this).index();
if (bggroups[(this.id).substr(1)]) {
bggroups[(this.id).substr(1)].index = $(this).index();
}
});
chrome.runtime.sendMessage({command: "save_groups", groups: bggroups, windowId: CurrentWindowId});
SaveGroups();
}
function SetActiveGroup(groupId, switch_to_active_in_group, scroll_to_active) {
if ($("#"+groupId)[0] == undefined) {
return;
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();
}
$(".group_button").removeClass("active_group");
$("#_"+groupId).addClass("active_group");
$(".tab, .group").hide();
$("#"+groupId).show();
$("#"+groupId+" .tab").show();
active_group = groupId;
RefreshGUI();
$("#group_edit").hide();
if (switch_to_active_in_group && $("#"+groupId+" .active")[0]){
chrome.tabs.update(parseInt($("#"+groupId+" .active")[0].id), {active: true});
}
if (scroll_to_active && $("#"+groupId+" .active")[0]){
ScrollToTab($("#"+groupId+" .active")[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});
}
function SetActiveTabInActiveGroup(tabId) {
if ($("#"+tabId).parents(".group")[0] && bggroups[active_group] != undefined) {
bggroups[$("#"+tabId).parents(".group")[0].id].activetab = parseInt(tabId);
if ($("#"+tabId).parents(".group")[0].id != active_group) {
SetActiveGroup($("#"+tabId).parents(".group")[0].id, false, true);
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);
}
chrome.runtime.sendMessage({command: "save_groups", groups: bggroups, windowId: CurrentWindowId});
if (bggroups[groupId]) {
bggroups[groupId].active_tab = parseInt(tabId);
}
SaveGroups();
}
}
@ -159,21 +198,25 @@ function SetActiveTabInActiveGroup(tabId) {
// }
// Edit group popup
function ShowGroupEditWindow(GroupId) {
$("#group_edit_name")[0].value = bggroups[GroupId].name;
$("#group_edit").css({"display": "block", "top": $("#toolbar_groups").offset().top + 8, "left": 22});
$("#group_edit_font").css({"background-color": bggroups[GroupId].font == "" ? "var(--button_icons, #808080)" : "#"+bggroups[GroupId].font});
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() {
$("#group_edit_name")[0].value = $("#group_edit_name")[0].value.replace(/[\f\n\r\v\t\<\>\+\-\(\)\.\,\;\:\~\/\|\?\@\!\"\'\£\$\%\&\^\#\=\*\[\]]?/gi, "");
bggroups[active_group].name = $("#group_edit_name")[0].value;
bggroups[active_group].font = RGBtoHex($("#group_edit_font").css("background-color"));
$("#group_edit").hide(0);
$(".group_title#_gte" +active_group).css({"color": "#"+bggroups[active_group].font});
RefreshGUI();
chrome.runtime.sendMessage({command: "save_groups", groups: bggroups, windowId: CurrentWindowId});
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
@ -216,8 +259,8 @@ function RestoreStateOfGroupsToolbar() {
function SetGroupEvents() {
// activate group
$(document).on("mousedown", ".group_button", function(event) {
menuGroupId = (this.id).substr(1);
$(document).on("click", ".group_button", function(event) {
// menuGroupId = (this.id).substr(1);
if (event.button == 0) {
SetActiveGroup((this.id).substr(1), true, true);
}
@ -241,7 +284,7 @@ function SetGroupEvents() {
// edit group dialog box
$(document).on("mousedown", "#group_edit_discard", function(event) {
$("#group_edit").hide(0);
$(".edit_dialog").hide(0);
});
$("#group_edit_name").keyup(function(e) {
if (e.keyCode == 13) {
@ -269,7 +312,8 @@ function SetGroupEvents() {
// edit group
$(document).on("dblclick", ".group_button:not(#_tab_list)", function(event) {
if (event.button == 0) {
ShowGroupEditWindow((this.id).substr(1));
menuItemId = (this.id).substr(1);
ShowGroupEditWindow();
}
});
@ -287,7 +331,7 @@ function SetGroupEvents() {
// 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:visible").map(function() {return parseInt(this.id);}).toArray(), groupId: "ut", SwitchTabIfHasActive: true, insertAfter: true, moveTabs: true});
// AppendTabsToGroup({tabsIds: $(".tab.selected_tab:visible").map(function() {return parseInt(this.id);}).toArray(), groupId: "ut", SwitchTabIfHasActive: true, insertAfter: true, moveTabs: true});
// }
// });

View File

@ -4,6 +4,61 @@
// ********** MENU ***************
function ShowTabMenu(TabNode, event) {
$(".menu").hide(0);
menuItemId = parseInt(TabNode[0].id);
// MUTE TABS
if (TabNode.is(".muted")) {
$("#tabs_menu_mute").css({ "display": "none" });
$("#tabs_menu_unmute").css({ "display": "" });
} else {
$("#tabs_menu_mute").css({ "display": "" });
$("#tabs_menu_unmute").css({ "display": "none" });
}
if (TabNode.is(".pin")) {
if (!opt.allow_pin_close) {
$("#tabs_menu_close").css({ "display": "none" });
}
// show contextmenu with correct size position
if ($("#pins_menu").outerWidth() > $(window).width() - 10) {
$("#pins_menu").css({ "width": $(window).width() - 10 });
} else {
$("#pins_menu").css({ "width": "" });
}
var x = event.pageX >= $(window).width() - $("#pins_menu").outerWidth() ? $(window).width() - $("#pins_menu").outerWidth() : event.pageX;
var y = event.pageY >= $(window).height() - $("#pins_menu").outerHeight() - 10 ? $(window).height() - $("#pins_menu").outerHeight() - 10 : event.pageY;
$("#pins_menu").css({ "display": "block", "top": y - 15, "left": x - 5 });
}
if (TabNode.is(".tab")) {
if ($("#" + menuItemId).is(".o, .c")) {
$("#tabs_menu_close_tree").css({ "display": "" });
} else {
$("#tabs_menu_close_tree").css({ "display": "none" });
}
if ($("#tabs_menu").outerWidth() > $(window).width() - 10) {
$("#tabs_menu").css({ "width": $(window).width() - 10 });
} else {
$("#tabs_menu").css({ "width": "" });
}
var x = event.pageX >= $(window).width() - $("#tabs_menu").outerWidth() ? $(window).width() - $("#tabs_menu").outerWidth() : event.pageX;
var y = event.pageY >= $(window).height() - $("#tabs_menu").outerHeight() - 10 ? $(window).height() - $("#tabs_menu").outerHeight() - 10 : event.pageY;
$("#tabs_menu").css({ "display": "block", "top": y - 15, "left": x - 5 });
}
}
function ShowFolderMenu(FolderNode, event) {
$(".menu").hide(0);
menuItemId = FolderNode[0].id;
if ($("#folders_menu").outerWidth() > $(window).width() - 10) {
$("#folders_menu").css({ "width": $(window).width() - 10 });
} else {
$("#folders_menu").css({ "width": "" });
}
var x = event.pageX >= $(window).width() - $("#folders_menu").outerWidth() ? $(window).width() - $("#folders_menu").outerWidth() : event.pageX;
var y = event.pageY >= $(window).height() - $("#folders_menu").outerHeight() - 10 ? $(window).height() - $("#folders_menu").outerHeight() - 10 : event.pageY;
$("#folders_menu").css({ "display": "block", "top": y - 15, "left": x - 5 });
}
function SetMenu() {
// trigger action when the contexmenu is about to be shown
$(document).bind("contextmenu", function(event) {
@ -12,117 +67,95 @@ function SetMenu() {
}
});
// show menu
$(document).on("mousedown", "#groups, .tab, .pin", function(event) {
// show global menu
$(document).on("mousedown", "#pin_list, .group", function(event) {
event.stopPropagation();
if (event.button == 2) {
$(".menu").hide(0);
menuItemId = active_group;
if ($(this).is(".tab, .pin")) {
menuTabId = parseInt($(this)[0].id);
} else {
if ($(".active:visible")[0]) {
menuTabId = parseInt($(".active:visible")[0].id);
} else {
if ($(".active")[0]) {
menuTabId = parseInt($(".active")[0].id);
}
}
}
if ($("#" + menuTabId).is(".pin")) {
$("#tabs_menu_pin").text(chrome.i18n.getMessage("tabs_menu_unpin"));
$("#tabs_menu_close").prev().css({ "display": "none" });
$("#tabs_menu_close_other").css({ "display": "none" });
$("#tabs_menu_expand_all, #tabs_menu_collapse_all").css({ "display": "none" });
$("#tabs_menu_collapse_all").next().css({ "display": "none" });
if (!opt.allow_pin_close) {
$("#tabs_menu_close").css({ "display": "none" });
}
} else {
$("#tabs_menu_pin").text(chrome.i18n.getMessage("tabs_menu_pin"));
$("#tabs_menu_close").prev().css({ "display": "" });
$("#tabs_menu_close, #tabs_menu_close_other").css({ "display": "" });
$("#tabs_menu_expand_all, #tabs_menu_collapse_all").css({ "display": "" });
$("#tabs_menu_collapse_all").next().css({ "display": "" });
}
if ($("#" + menuTabId).is(".o, .c")) {
$("#tabs_menu_close_tree").css({ "display": "" });
} else {
$("#tabs_menu_close_tree").css({ "display": "none" });
}
// MUTE TABS
if ($("#" + menuTabId).is(".muted")) {
$("#tabs_menu_mute").css({ "display": "none" });
$("#tabs_menu_unmute").css({ "display": "" });
} else {
$("#tabs_menu_mute").css({ "display": "" });
$("#tabs_menu_unmute").css({ "display": "none" });
}
// show contextmenu with correct size position
if ($("#tabs_menu").outerWidth() > $(window).width() - 10) {
$("#tabs_menu").css({ "width": $(window).width() - 10 });
} else {
$("#tabs_menu").css({ "width": "" });
}
var x = event.pageX >= $(window).width() - $("#tabs_menu").outerWidth() ? $(window).width() - $("#tabs_menu").outerWidth() : event.pageX;
var y = event.pageY >= $(window).height() - $("#tabs_menu").outerHeight() - 10 ? $(window).height() - $("#tabs_menu").outerHeight() - 10 : event.pageY;
$("#tabs_menu").css({ "display": "block", "top": y - 15, "left": x - 5 });
var x = event.pageX >= $(window).width() - $("#global_menu").outerWidth() ? $(window).width() - $("#global_menu").outerWidth() : event.pageX;
var y = event.pageY >= $(window).height() - $("#global_menu").outerHeight() - 10 ? $(window).height() - $("#global_menu").outerHeight() - 10 : event.pageY;
$("#global_menu").css({ "display": "block", "top": y - 15, "left": x - 5 });
}
});
// show global menu
$(document).on("mousedown", ".group_drag_box", function(event) {
// event.stopPropagation();
if (event.button == 2) {
$(".menu").hide(0);
if (this.id == "-tab_list") {
menuItemId = "tab_list";
$("#groups_menu_rename, #groups_menu_delete, #groups_menu_delete_tabs_close").hide();
} else {
menuItemId = (this.id).substr(1);
$("#groups_menu_rename, #groups_menu_delete, #groups_menu_delete_tabs_close").show();
}
var x = event.pageX >= $(window).width() - $("#groups_menu").outerWidth() ? $(window).width() - $("#groups_menu").outerWidth() : event.pageX;
var y = event.pageY >= $(window).height() - $("#groups_menu").outerHeight() - 10 ? $(window).height() - $("#groups_menu").outerHeight() - 10 : event.pageY;
$("#groups_menu").css({ "display": "block", "top": y - 15, "left": x - 5 });
}
});
// if the menu element is clicked
$(document).on("mousedown", "#tabs_menu li", function(event) {
$(document).on("mousedown", ".menu li", function(event) {
event.stopPropagation();
if (event.button != 0) {
return;
}
event.stopPropagation();
switch ($(this).attr("data-action")) {
case "tab_new":
chrome.tabs.create({});
break;
break;
case "tab_clone":
if ($("#" + menuTabId).is(".selected")) {
$(".selected:visible").each(function() {
if ($("#" + menuItemId).is(".selected_tab")) {
$(".selected_tab:visible").each(function() {
chrome.tabs.duplicate(parseInt(this.id));
});
} else {
chrome.tabs.duplicate(menuTabId);
chrome.tabs.duplicate(menuItemId);
}
break;
break;
case "tab_move":
if ($("#" + menuTabId).is(".selected")) {
DetachTabs($(".selected:visible").map(function() { return parseInt(this.id); }).toArray());
if ($("#" + menuItemId).is(".selected_tab, .active_tab")) {
let tabsArr = [];
$(".active_tab:visible, .selected_tab:visible").each(function() {
tabsArr.push(parseInt(this.id));
if ($("#ch"+this.id).children().length > 0) {
$($("#ch"+this.id).find(".tab")).each(function() {
tabsArr.push(parseInt(this.id));
});
}
});
DetachTabs(tabsArr);
} else {
DetachTabs([menuTabId]);
DetachTabs([menuItemId]);
}
break;
break;
case "tab_reload":
if ($("#" + menuTabId).is(".selected")) {
$(".selected:visible").each(function() {
if ($("#" + menuItemId).is(".selected_tab")) {
$(".selected_tab:visible").each(function() {
chrome.tabs.reload(parseInt(this.id));
});
} else {
chrome.tabs.reload(menuTabId);
chrome.tabs.reload(menuItemId);
}
break;
break;
case "tab_pin":
if ($("#" + menuTabId).is(".selected")) {
$(".selected:visible").each(function() {
chrome.tabs.update(parseInt(this.id), { pinned: ($("#" + menuTabId).is(".pin") ? false : true) });
if ($("#" + menuItemId).is(".selected_tab")) {
$(".selected_tab:visible").each(function() {
chrome.tabs.update(parseInt(this.id), { pinned: ($("#" + menuItemId).is(".pin") ? false : true) });
});
} else {
chrome.tabs.update(menuTabId, { pinned: ($("#" + menuTabId).is(".pin") ? false : true) });
chrome.tabs.update(menuItemId, { pinned: ($("#" + menuItemId).is(".pin") ? false : true) });
}
break;
break;
case "tab_mute":
if ($("#" + menuTabId).is(".selected")) {
$(".selected:visible").each(function() {
if ($("#" + menuItemId).is(".selected_tab")) {
$(".selected_tab:visible").each(function() {
chrome.tabs.get(parseInt(this.id), function(tab) {
if (tab) {
chrome.tabs.update(tab.id, { muted: true });
@ -130,16 +163,16 @@ function SetMenu() {
});
});
} else {
chrome.tabs.get(menuTabId, function(tab) {
chrome.tabs.get(menuItemId, function(tab) {
if (tab) {
chrome.tabs.update(tab.id, { muted: true });
}
});
}
break;
break;
case "tab_unmute":
if ($("#" + menuTabId).is(".selected")) {
$(".selected:visible").each(function() {
if ($("#" + menuItemId).is(".selected_tab")) {
$(".selected_tab:visible").each(function() {
chrome.tabs.get(parseInt(this.id), function(tab) {
if (tab) {
chrome.tabs.update(tab.id, { muted: false });
@ -147,72 +180,105 @@ function SetMenu() {
});
});
} else {
chrome.tabs.get(menuTabId, function(tab) {
chrome.tabs.get(menuItemId, function(tab) {
chrome.tabs.update(tab.id, { muted: false });
});
}
break;
break;
case "tab_mute_other":
if ($("#" + menuTabId).is(".selected")) {
$(".tab:visible:not(.selected)").each(function() {
if ($("#" + menuItemId).is(".selected_tab")) {
$(".tab:visible:not(.selected_tab)").each(function() {
chrome.tabs.update(parseInt(this.id), { muted: true });
});
} else {
$(".tab:visible:not(#" + menuTabId + ")").each(function() {
$(".tab:visible:not(#" + menuItemId + ")").each(function() {
chrome.tabs.update(parseInt(this.id), { muted: true });
});
}
break;
break;
case "tab_unmute_other":
if ($("#" + menuTabId).is(".selected")) {
$(".tab:visible:not(.selected)").each(function() {
if ($("#" + menuItemId).is(".selected_tab")) {
$(".tab:visible:not(.selected_tab)").each(function() {
chrome.tabs.update(parseInt(this.id), { muted: false });
});
} else {
$(".tab:visible:not(#" + menuTabId + ")").each(function() {
$(".tab:visible:not(#" + menuItemId + ")").each(function() {
chrome.tabs.update(parseInt(this.id), { muted: false });
});
}
break;
break;
case "tab_close":
CloseTabs($("#" + menuTabId).is(".selected") ? $(".selected:visible").map(function() { return parseInt(this.id); }).toArray() : [menuTabId]);
break;
CloseTabs($("#" + menuItemId).is(".selected_tab") ? $(".selected_tab:visible").map(function() { return parseInt(this.id); }).toArray() : [menuItemId]);
break;
case "tab_close_tree":
CloseTabs($("#" + menuTabId).find(".tab").map(function() { return parseInt(this.id); }).toArray());
CloseTabs([menuTabId]);
break;
CloseTabs($("#" + menuItemId).find(".tab").map(function() { return parseInt(this.id); }).toArray());
CloseTabs([menuItemId]);
break;
case "tab_close_other":
CloseTabs($(".tab:visible:not(#" + menuTabId + ")").map(function() { return parseInt(this.id); }).toArray());
break;
CloseTabs($(".tab:visible:not(#" + menuItemId + ")").map(function() { return parseInt(this.id); }).toArray());
break;
case "tab_undo_close":
chrome.sessions.getRecentlyClosed(null, function(sessions) {
if (sessions.length > 0) {
chrome.sessions.restore(null, function() {});
}
});
break;
break;
case "tab_discard":
DiscardTabs($("#" + menuTabId).is(".selected") ? $(".tab.selected:visible").map(function() { return parseInt(this.id); }).toArray() : [menuTabId]);
break;
DiscardTabs($("#" + menuItemId).is(".selected_tab") ? $(".tab.selected_tab:visible").map(function() { return parseInt(this.id); }).toArray() : [menuItemId]);
break;
case "tab_settings":
chrome.tabs.create({ "url": "options.html" });
break;
break;
case "tab_expand_all":
$(".tab.c").addClass("o").removeClass("c");
schedule_update_data++;
break;
break;
case "tab_collapse_all":
$(".tab.o").addClass("c").removeClass("o");
schedule_update_data++;
break;
break;
case "folder_new":
AddNewFolder({});
break;
case "folder_rename":
if ($("#" + menuItemId).is(".selected_folder")) {
$(".selected_folder:visible").each(function() {
ShowRenameFolderDialog(this.id);
});
} else {
ShowRenameFolderDialog(menuItemId);
}
break;
case "folder_delete":
if ($("#" + menuItemId).is(".selected_folder")) {
$(".selected_folder:visible").each(function() {
RemoveFolder(this.id);
});
} else {
RemoveFolder(menuItemId);
}
break;
case "group_new":
AddNewGroup({});
break;
case "group_rename":
ShowGroupEditWindow();
break;
case "group_delete":
GroupRemove(menuItemId, false);
break;
case "group_delete_tabs_close":
GroupRemove(menuItemId, true);
break;
case "group_unload":
DiscardTabs($("#"+menuItemId+" .tab").map(function() { return parseInt(this.id); }).toArray());
break;
}
$(".menu").hide(0);
});
// move tabs to group
@ -220,11 +286,11 @@ function SetMenu() {
// var tabsIds
// if ($(this).is("#tabs_menu_move_to_new_group")) {
// bg.dt.DropToGroup = AddNewGroup(575757);
// GetColorFromMiddlePixel(vt.menuTabId, bg.dt.DropToGroup);
// GetColorFromMiddlePixel(vt.menuItemId, bg.dt.DropToGroup);
// } else {
// bg.dt.DropToGroup = this.id.substr(8);
// }
// AppendTabsToGroup({tabsIds: DragAndDrop.tabsIds, groupId: bg.dt.DropToGroup, SwitchTabIfHasActive: true, insertAfter: true, RemoveClass: "selected", moveTabs: true});
// AppendTabsToGroup({tabsIds: DragAndDrop.tabsIds, groupId: bg.dt.DropToGroup, SwitchTabIfHasActive: true, insertAfter: true, RemoveClass: "selected_tab", moveTabs: true});
// });

View File

@ -45,18 +45,12 @@ function RefreshGUI() {
$(".group_title").each(function(){
$(this)[0].innerText = (bggroups[(this.id).substr(4)] ? bggroups[(this.id).substr(4)].name : caption_noname_group) + (opt.show_counter_groups ? " (" + $("#" + (this.id).substr(4) +" .tab").length + ")" : "");
});
$("#_gtetab_list")[0].innerText = caption_ungrouped_group + (opt.show_counter_groups ? " (" + $("#tab_list .tab").length + ")" : "");
$(".group_button").each(function(){
$(this).css({ "height": $(this).children(0).innerWidth() });
});
$("#groups").css({ "top": $("#toolbar")[0].getBoundingClientRect().height + $("#pin_list")[0].getBoundingClientRect().height, "left": $("#toolbar_groups").outerWidth(), "height": $(window).height() - $("#pin_list")[0].getBoundingClientRect().height - $("#toolbar").outerHeight(), "width": $(window).width() - $("#toolbar_groups").outerWidth() });
// $(".c, .o").each(function(){
// RefreshTabCounter(this.id);
// $("#tab_title" + this.id)[0].textContent = $("#tab_title" + this.id).attr( "title" ) + " ("+$("#ch"+this.id).children().length+")";
// });
}
// set discarded class
@ -146,7 +140,7 @@ function GetFaviconAndTitle(tabId, addCounter) {
$("#tab_header" + tab.id).css({ "background-image": "url(" + tab.favIconUrl + ")" });
};
img.onerror = function() {
$("#tab_header" + tab.id).css({ "background-image": ((tab.url == "" || browserId == "F") ? "url(./theme/empty.svg)" : ("url(chrome://favicon/" + tab.url + ")")) });
$("#tab_header" + tab.id).css({ "background-image": ((tab.url == "" || browserId == "F") ? "url(./theme/icon_empty.svg)" : ("url(chrome://favicon/" + tab.url + ")")) });
// $("#tab_header" + tab.id).css({ "background-image": "url(" + tab.url + ")" });
}
}
@ -163,8 +157,8 @@ function GetFaviconAndTitle(tabId, addCounter) {
if ($("#" + tabId)[0]) GetFaviconAndTitle(tabId, addCounter);
}, 1000);
}
if (addCounter) {
RefreshTabCounter(tabId && (opt.show_counter_tabs || opt.show_counter_tabs_hints));
if (addCounter && (opt.show_counter_tabs || opt.show_counter_tabs_hints)) {
RefreshTabCounter(tabId);
}
}
@ -174,43 +168,70 @@ function GetFaviconAndTitle(tabId, addCounter) {
// refresh open closed trees states
function RefreshExpandStates() {
$(".children").each(function() {
if ($(this).children().length > 0) {
$(this).parent().removeClass("n");
if ($(this).parent().is(":not(.o, .c)")) {
$(this).parent().addClass("o");
}
if ($("#tab_title"+$(this).parent()[0].id)[0]) {
if (opt.show_counter_tabs) {
$("#tab_title"+$(this).parent()[0].id)[0].textContent = $(this).parent().data("title") + " ("+$("#"+this.id+" .tab").length+")";
}
if (opt.show_counter_tabs_hints) {
$("#tab_header"+$(this).parent()[0].id).attr("title", $(this).parent().data("title") + " ("+$("#"+this.id+" .tab").length+")");
}
}
$(".folder:visible").each(function() {
if ($("#ch"+this.id).children().length == 0 && $("#cf"+this.id).children().length == 0) {
$(this).removeClass("o").removeClass("c").addClass("n");
} else {
$(this).parent().removeClass("o").removeClass("c").addClass("n");
if ($("#tab_title"+$(this).parent()[0].id)[0]) {
$("#tab_title"+$(this).parent()[0].id)[0].textContent = $(this).parent().data("title");
if ($(this).is(":not(.o, .c)")) {
$(this).addClass("o").removeClass("n");
}
}
});
$(".tab:visible").each(function() {
if ($("#ch"+this.id).children().length == 0) {
$(this).removeClass("o").removeClass("c").addClass("n");
} else {
if ($(this).is(":not(.o, .c)")) {
$(this).addClass("o").removeClass("n");
}
}
});
}
function RefreshTabCounter(tabId) {
if ($("#"+tabId).data("title")) {
if (opt.show_counter_tabs) {
if ($(".c#"+tabId+", .o#"+tabId)[0]) {
$("#tab_title"+tabId)[0].textContent = $("#"+tabId).data("title") + " ("+$("#ch"+tabId+" .tab").length+")";
} else {
$("#tab_title"+tabId)[0].textContent = $("#"+tabId).data("title");
function RefreshCounters() {
if (opt.show_counter_tabs || opt.show_counter_tabs_hints) {
$(".tab.n:visible").each(function() {
if ($("#tab_title"+this.id)[0]) {
$("#tab_title"+this.id)[0].textContent = $(this).data("title");
$("#tab_header"+this.id).attr("title", $(this).data("title"));
}
}
if (opt.show_counter_tabs_hints) {
if ($(".c#"+tabId+", .o#"+tabId)[0]) {
$("#tab_header"+tabId).attr("title", $("#"+tabId).data("title") + " ("+$("#ch"+tabId+" .tab").length+")");
} else {
$("#tab_header"+tabId).attr("title", $("#"+tabId).data("title"));
});
$(".tab.c:visible, .tab.o:visible").each(function() {
if (opt.show_counter_tabs) {
$("#tab_title"+this.id)[0].textContent = ("("+$("#"+this.id+" .tab").length+") ") + $(this).data("title");
}
if (opt.show_counter_tabs_hints) {
$("#tab_header"+this.id).attr("title", ("("+$("#"+this.id+" .tab").length+") ") + $(this).data("title"));
}
});
$(".folder:visible").each(function() {
if (opt.show_counter_tabs) {
$("#folder_title"+this.id)[0].textContent = ("("+$("#"+this.id+" .tab").length+") ") + bgfolders[this.id].name;
}
if (opt.show_counter_tabs_hints) {
$("#folder_header"+this.id).attr("title", ("("+$("#"+this.id+" .tab").length+") ") + bgfolders[this.id].name);
}
});
}
}
function RefreshTabCounter(tabId) {
if (opt.show_counter_tabs || opt.show_counter_tabs_hints) {
if ($("#"+tabId).data("title")) {
if (opt.show_counter_tabs) {
if ($(".c#"+tabId+", .o#"+tabId)[0]) {
$("#tab_title"+tabId)[0].textContent = ("("+$("#ch"+tabId+" .tab").length+") ") + $("#"+tabId).data("title");
} else {
$("#tab_title"+tabId)[0].textContent = $("#"+tabId).data("title");
}
}
if (opt.show_counter_tabs_hints) {
if ($(".c#"+tabId+", .o#"+tabId)[0]) {
$("#tab_header"+tabId).attr("title", ("("+$("#ch"+tabId+" .tab").length+") ") + $("#"+tabId).data("title"));
} else {
$("#tab_header"+tabId).attr("title", $("#"+tabId).data("title"));
}
}
}
}

View File

@ -6,7 +6,9 @@
async function UpdateData() {
setInterval(function() {
if (schedule_update_data > 1) {schedule_update_data = 1;}
if (schedule_update_data > 1) {
schedule_update_data = 1;
}
if (schedule_update_data > 0) {
$(".pin").each(function() {
chrome.runtime.sendMessage({
@ -21,47 +23,39 @@ async function UpdateData() {
});
$(".tab").each(function() {
chrome.runtime.sendMessage({
command: "update_tab",
tabId: parseInt(this.id),
tab: {
parent: $(this).parent(".group")[0] ? $(this).parent()[0].id : $(this).parent().parent(".tab, .folder")[0].id,
index: $(this).index(),
expand: ($(this).is(".n") ? "n" : ($(this).is(".c") ? "c" : "o"))
}
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 RearrangeBrowserTabsCheck() {
function RearrangeBrowserTabs() {
setInterval(function() {
if (opt.syncro_tabbar_tabs_order) {
if (schedule_rearrange_tabs > 1) {schedule_rearrange_tabs = 1;}
if (schedule_rearrange_tabs > 0) {
let tabIds = $(".pin, .tab").map(function(){return parseInt(this.id);}).toArray();
RearrangeBrowserTabs(tabIds, tabIds.length-1);
schedule_rearrange_tabs--;
}
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 RearrangeBrowserTabs(tabIds, tabIndex) {
if (tabIndex > 0){
chrome.tabs.get(tabIds[tabIndex], function(tab) {
if (tab && tabIndex != tab.index) {
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});
}
setTimeout(function() {
RearrangeBrowserTabs( tabIds, (tabIndex-1) );
}, 1);
RearrangeBrowserTabsLoop( tabIds, (tabIndex-1) );
});
}
}
function RearrangeTreeTabs(tabs, bgtabs, first_run) {
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) {
@ -70,12 +64,11 @@ function RearrangeTreeTabs(tabs, bgtabs, first_run) {
$("#"+Tab.id).insertAfter($("#"+Tab.id).parent().children().eq(bgtabs[Tab.id].index));
}
}
if (bgtabs[Tab.id] && $("#"+Tab.id).index() != bgtabs[Tab.id].index && first_run) {
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) {
@ -83,7 +76,6 @@ function AppendTab(param) {
GetFaviconAndTitle(param.tab.id, param.addCounter);
return;
}
var ClassList = param.tab.pinned ? "pin" : "tab n";
if (param.tab.discarded) {
ClassList = ClassList + " discarded";
@ -91,7 +83,6 @@ function AppendTab(param) {
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
@ -99,38 +90,31 @@ function AppendTab(param) {
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 = active_group;
param.ParentId = "ch"+active_group;
} else {
if($("#"+param.ParentId).is(".tab")) {
if ($("#ch"+param.ParentId).children().length == 0) {
$("#"+param.ParentId).addClass("o").removeClass("n").removeClass("c");
}
param.ParentId = "ch"+param.ParentId;
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));
@ -141,32 +125,25 @@ function AppendTab(param) {
$("#"+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();
}
}
// param - tuple object with paramenters: param.pin - true for pinned, param.id - tabId
function SetTabClass(param) {
function SetTabClass(param) { // param - tuple object with paramenters: param.pin - true for pinned, param.id - tabId
if (param.pin) {
$("#pin_list").append($("#"+param.id));
// flatten out children
if ($("#ch"+param.id).children().length > 0) {
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));
@ -175,68 +152,103 @@ function SetTabClass(param) {
}
$("#"+param.id).removeClass("tab").removeClass("n").removeClass("o").removeClass("c").addClass("pin");
} else {
$("#"+active_group).prepend($("#"+param.id));
$("#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) {
$(".active:visible").removeClass("active").removeClass("selected");
$(".pin, .tab:visible").removeClass("active").removeClass("selected").removeClass("selected_frozen").removeClass("selected_temporarly").removeClass("tab_header_hover");
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");
$("#"+tabId).removeClass("attention").addClass("active_tab");
ScrollToTab(tabId);
SetActiveTabInActiveGroup(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)[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 ($("#"+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);
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) {
function DetachTabs(tabsIds, Folders) {
chrome.windows.get(CurrentWindowId, {populate : true}, function(window) {
if (window.tabs.length == 1) {
if (window.tabs.length == 1 || tabsIds.length == 0 || tabsIds.length == window.tabs.length) {
return;
}
chrome.windows.create({tabId: tabsIds[0], state:window.state}, function(new_window) {
(tabsIds).forEach(function(tabId) {
chrome.tabs.move(tabId, {windowId: new_window.id, index:-1});
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);
}
}
});
});
}
// find and select tabs
function FindTab(input) {
$(".filtered").removeClass("filtered").removeClass("selected");
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 = "";
@ -250,33 +262,30 @@ function FindTab(input) {
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.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.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});
}
if ($("#"+tabId).is(".tab")) {
$("#"+tabId).remove();
}
});
setTimeout(function() {
chrome.tabs.remove(tabsIds, null);
}, 100);
}, 50);
}
function DiscardTabs(tabsIds) {
var delay = 400;
var delay = 100;
if ($("#"+tabsIds[0]).is(".discarded")) {
delay = 5;
} else {
@ -289,32 +298,76 @@ function DiscardTabs(tabsIds) {
}, delay);
}
}
function ActivateNextTab() {
if ($(".pin.active:visible")[0]) {
if ($(".pin.active").next(".pin")[0]) {
chrome.tabs.update(parseInt($(".pin.active").next(".pin")[0].id), { active: true });
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 {
if ($(".pin.active").prev(".pin")[0]) {
chrome.tabs.update(parseInt($(".pin.active").prev(".pin")[0].id), { active: true });
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 ($(".tab.active:visible")[0]) {
if ($(".active:visible").children().last().children(".tab")[0]) {
chrome.tabs.update(parseInt($(".active:visible").children().last().children(".tab")[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:visible").next(".tab")[0]) {
chrome.tabs.update(parseInt($(".active:visible").next(".tab")[0].id), { active: true });
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:visible").parent().parent().next(".tab")[0]) {
chrome.tabs.update(parseInt($(".active:visible").parent().parent().next(".tab")[0].id), { active: true });
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:visible").parents(".tab").last().next(".tab")[0]) {
chrome.tabs.update(parseInt($(".active:visible").parents(".tab").last().next(".tab")[0].id), { active: true });
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 ($(".tab:visible").length > 1) {
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();
}
}
@ -323,57 +376,108 @@ function ActivateNextTab() {
}
}
}
function ActivatePrevTab() {
if ($(".pin.active")[0]) {
if ($(".pin.active").prev(".pin")[0]) {
chrome.tabs.update(parseInt($(".pin.active").prev(".pin")[0].id), { active: true });
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").next(".pin")[0]) {
chrome.tabs.update(parseInt($(".pin.active").next(".pin")[0].id), { active: true });
if ($(".pin.active_tab").next(".pin")[0]) {
chrome.tabs.update(parseInt($(".pin.active_tab").next(".pin")[0].id), { active: true });
}
}
}
if ($(".tab.active:visible")[0]) {
if ($(".active:visible").prev().find(".tab").length > 0) {
chrome.tabs.update(parseInt($(".active:visible").prev().find(".tab").last()[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:visible").prev(".tab")[0]) {
chrome.tabs.update(parseInt($(".active:visible").prev(".tab")[0].id), { active: true });
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 ($(".tab.active:visible").parent().is(".children") && $(".tab.active:visible").parent().parent(".tab")[0]) {
chrome.tabs.update(parseInt($(".tab.active:visible").parent().parent(".tab")[0].id), { active: true });
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 ($(".tab:visible").length > 1) {
ActivateNextTab();
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 DropTargetsSendToFront() {
if (DropTargetsInFront == false) {
$(".drop_target").show();
DropTargetsInFront = 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 });
}
}
}
}
}
function DropTargetsSendToBack() {
if (DropTargetsInFront) {
$(".drop_target").hide();
DropTargetsInFront = false;
}
}
// ********** TABS EVENTS ***************
function SetTabEvents() {
// double click to create tab
$(document).on("dblclick", ".group, #pin_list, .tab", function(event) {
$(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 });
@ -382,42 +486,31 @@ function SetTabEvents() {
}
}
});
$(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");
}
});
// EXPAND BOX - EXPAND / COLLAPSE
$(document).on("mousedown", ".expand", function(event) {
// event.stopPropagation();
$(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");
@ -425,7 +518,7 @@ function SetTabEvents() {
} 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" } });
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() {
@ -440,67 +533,55 @@ function SetTabEvents() {
}
}
});
// SELECT TAB/PIN
$(document).on("mousedown", ".tab, .pin", function(event) {
$(document).on("mousedown", ".tab, .pin", function(event) { // SELECT TAB/PIN
if ($(".menu").is(":visible")) {
return;
}
event.stopPropagation();
if (event.button == 0) {
DropTargetsSendToBack();
$("#"+active_group+" .folder").removeClass("selected_folder");
let tabId = parseInt(this.id);
// SET SELECTION WITH SHIFT
if (event.shiftKey) {
$(".pin, .tab:visible").removeClass("selected").removeClass("selected_frozen").removeClass("selected_temporarly");
if ($(this).index() >= $(".active:visible").index()) {
$(".active:visible").nextUntil($(this), ":visible").add($(".active:visible")).add($(this)).addClass("selected");
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:visible").prevUntil($(this), ":visible").add($(".active:visible")).add($(this)).addClass("selected");
$(".active_tab:visible").prevUntil($(this), ":visible").add($(".active_tab:visible")).add($(this)).addClass("selected_tab");
}
}
// TOGGLE SELECTION WITH CTRL
if (event.ctrlKey) {
// if ($(".active:visible").is(":not(.selected)")) {
// $(".active:visible").addClass("selected");
if (event.ctrlKey) { // TOGGLE SELECTION WITH CTRL
// if ($(".active_tab:visible").is(":not(.selected_tab)")) {
// $(".active_tab:visible").addClass("selected_tab");
// }
$(this).toggleClass("selected");
$(this).toggleClass("selected_tab");
}
}
});
// CLOSE TAB/PIN
$(document).on("mousedown", ".tab_header", function(event) {
if ($(".menu").is(":visible")) {
return;
}
$(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:visible") && opt.after_closing_active_tab != "browser") {
if (opt.after_closing_active_tab == "above") {
ActivatePrevTab();
}
if (opt.after_closing_active_tab == "below") {
ActivateNextTab();
}
}
// hide pin before it will be closed by listener
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});
if ($("#"+tabId)[0]) chrome.tabs.remove(tabId);
setTimeout(function() {
if ($("#"+tabId)[0]) {
chrome.tabs.remove(tabId);
}
}, 100);
}
if (event.button == 2) {
event.stopPropagation();
ShowTabMenu($(this).parent(), event);
}
});
// SINGLE CLICK TO ACTIVATE TAB
$(document).on("click", ".tab_header", function(event) {
if ($(".menu").is(":visible")) {
$(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 && $(event.target).is(":not(.close, .close_img, .expand, .tab_mediaicon)")) {
if (event.button == 0 && !event.shiftKey && !event.ctrlKey) {
SetActiveTab($(this).parent()[0].id);
chrome.tabs.update(parseInt($(this).parent()[0].id), { active: true });
}

View File

@ -4,22 +4,6 @@
// ********** TOOLBAR ***************
function RestoreToolbarSearchFilterBAK() {
let filter_type = "url";
if (localStorage.getItem("filter_type") !== null) {
filter_type = localStorage["filter_type"];
}
if (filter_type == "url") {
$("#button_filter_type").addClass("url").removeClass("title");
} else {
$("#button_filter_type").addClass("title").removeClass("url");
}
}
function RestoreToolbarSearchFilter() {
chrome.runtime.sendMessage({command: "get_search_filter", windowId: CurrentWindowId}, function(response) {
if (response == "url") {
@ -30,10 +14,6 @@ function RestoreToolbarSearchFilter() {
});
}
function RestoreToolbarShelf() {
chrome.runtime.sendMessage({command: "get_active_shelf", windowId: CurrentWindowId}, function(response) {
$("#filter_box").attr("placeholder", caption_searchbox);
@ -92,39 +72,38 @@ function RestoreToolbarShelf() {
function SetToolbarShelfToggle(click_type) {
// tools and search buttons toggle
$(document).on(click_type, "#button_tools, #button_search, #button_groups, #button_backup, #button_folders", function(event) {
if (event.button != 0) {
return;
if (event.button == 0) {
if ($(this).is(".on")) {
$(".on").removeClass("on");
$(".toolbar_shelf").addClass("hidden");
chrome.runtime.sendMessage({command: "set_active_shelf", active_shelf: "", windowId: CurrentWindowId});
} else {
$(".toolbar_shelf").addClass("hidden");
if ($(this).is("#button_tools")) {
$("#toolbar_shelf_tools").removeClass("hidden");
chrome.runtime.sendMessage({command: "set_active_shelf", active_shelf: "tools", windowId: CurrentWindowId});
}
if ($(this).is("#button_search")) {
$("#toolbar_search").removeClass("hidden");
chrome.runtime.sendMessage({command: "set_active_shelf", active_shelf: "search", windowId: CurrentWindowId});
}
if ($(this).is("#button_groups")) {
$("#toolbar_shelf_groups").removeClass("hidden");
chrome.runtime.sendMessage({command: "set_active_shelf", active_shelf: "groups", windowId: CurrentWindowId});
}
if ($(this).is("#button_backup")) {
$("#toolbar_shelf_backup").removeClass("hidden");
chrome.runtime.sendMessage({command: "set_active_shelf", active_shelf: "backup", windowId: CurrentWindowId});
}
if ($(this).is("#button_folders")) {
$("#toolbar_shelf_folders").removeClass("hidden");
chrome.runtime.sendMessage({command: "set_active_shelf", active_shelf: "folders", windowId: CurrentWindowId});
}
$(".button").removeClass("on");
$(this).addClass("on");
}
RefreshGUI();
}
if ($(this).is(".on")) {
$(".on").removeClass("on");
$(".toolbar_shelf").addClass("hidden");
chrome.runtime.sendMessage({command: "set_active_shelf", active_shelf: "", windowId: CurrentWindowId});
} else {
$(".toolbar_shelf").addClass("hidden");
if ($(this).is("#button_tools")) {
$("#toolbar_shelf_tools").removeClass("hidden");
chrome.runtime.sendMessage({command: "set_active_shelf", active_shelf: "tools", windowId: CurrentWindowId});
}
if ($(this).is("#button_search")) {
$("#toolbar_search").removeClass("hidden");
chrome.runtime.sendMessage({command: "set_active_shelf", active_shelf: "search", windowId: CurrentWindowId});
}
if ($(this).is("#button_groups")) {
$("#toolbar_shelf_groups").removeClass("hidden");
chrome.runtime.sendMessage({command: "set_active_shelf", active_shelf: "groups", windowId: CurrentWindowId});
}
if ($(this).is("#button_backup")) {
$("#toolbar_shelf_backup").removeClass("hidden");
chrome.runtime.sendMessage({command: "set_active_shelf", active_shelf: "backup", windowId: CurrentWindowId});
}
if ($(this).is("#button_folders")) {
$("#toolbar_shelf_folders").removeClass("hidden");
chrome.runtime.sendMessage({command: "set_active_shelf", active_shelf: "folders", windowId: CurrentWindowId});
}
$(".button").removeClass("on");
$(this).addClass("on");
}
RefreshGUI();
});
}
@ -153,20 +132,20 @@ function SetToolbarEvents() {
ScrollToTab($(".tab.filtered")[SearchIndex].id);
$($(".tab.filtered")[SearchIndex]).addClass("highlighted_search");
});
// new tab
$(document).on("mousedown", "#button_new", function(event) {
if (event.button == 1 && $(".active:visible")[0]) {
chrome.tabs.duplicate(parseInt($(".active:visible")[0].id), function(tab) {
if (event.button == 1 && $(".active_tab:visible")[0]) {
chrome.tabs.duplicate(parseInt($(".active_tab:visible")[0].id), function(tab) {
setTimeout(function() {
$("#"+tab.id).insertAfter($(".active:visible")[0]);
$("#"+tab.id).insertAfter($(".active_tab:visible")[0]);
RefreshExpandStates();
schedule_update_data++;
RefreshCounters();
}, 100);
});
}
if (event.button == 2 && $(".active:visible")[0]) {
ScrollToTab($(".active:visible")[0].id);
if (event.button == 2 && $("#"+active_group+" .active_tab")[0]) {
ScrollToTab($("#"+active_group+" .active_tab")[0].id);
}
});
$(document).on("click", "#button_new", function(event) {
@ -176,55 +155,50 @@ function SetToolbarEvents() {
});
// pin tab
$(document).on("mousedown", "#button_pin", function(event) {
if (event.button != 0) {
return;
if (event.button == 0) {
$(".active_tab:visible, .selected_tab:visible").each(function() {
chrome.tabs.update(parseInt(this.id), { pinned: ($(this).is(".pin") ? false : true) });
});
}
$(".active:visible, .selected:visible").each(function() {
chrome.tabs.update(parseInt(this.id), { pinned: ($(this).is(".pin") ? false : true) });
});
});
// undo close
$(document).on("mousedown", "#button_undo", function(event) {
if (event.button != 0) {
return;
}
chrome.sessions.getRecentlyClosed( null, function(sessions) {
if (sessions.length > 0) {
chrome.sessions.restore(null, function(restored) {
// if (browserId == "F") {
// if (restored.tab != undefined) {
// let t = Promise.resolve(browser.sessions.getTabValue(restored.tab.id, "TTId")).then(function(TTId) {
// TODO RESTORE TREE IF POSSIBLE
// console.log(TTId);
// });
if (event.button == 0) {
chrome.sessions.getRecentlyClosed( null, function(sessions) {
if (sessions.length > 0) {
chrome.sessions.restore(null, function(restored) {
// if (browserId == "F") {
// if (restored.tab != undefined) {
// let t = Promise.resolve(browser.sessions.getTabValue(restored.tab.id, "TTId")).then(function(TTId) {
// TODO RESTORE TREE IF POSSIBLE
// console.log(TTId);
// });
// }
// }
// }
});
}
});
});
}
});
}
});
// move tab to new window (detach)
$(document).on("mousedown", "#button_move", function(event) {
if (event.button != 0) {
return;
}
var tabsArr = [];
$(".active:visible, .selected:visible").each(function() {
tabsArr.push(parseInt(this.id));
if ($("#ch"+this.id).children().length > 0) {
$($("#ch"+this.id).find(".tab")).each(function() {
tabsArr.push(parseInt(this.id));
});
if (event.button == 0) {
if ($("#"+active_group+" .selected_tab")[0]){
let detach = GetSelectedTabs();
DetachTabs(detach.TabsIds, {});
} else {
if ($("#"+active_group+" .selected_folder")[0]){
let detach = GetSelectedFolders();
DetachTabs(detach.TabsIds, detach.Folders);
}
}
});
DetachTabs(tabsArr);
}
});
// move tab to new window (detach)
$(document).on("mousedown", "#repeat_search", function(event) {
if (event.button != 0) {
return;
if (event.button == 0) {
FindTab($("#filter_box")[0].value);
}
FindTab($("#filter_box")[0].value);
});
// filter on input
$("#filter_box").on("input", function() {
@ -232,101 +206,42 @@ function SetToolbarEvents() {
});
// change filtering type
$(document).on("mousedown", "#button_filter_type", function(event) {
if (event.button != 0) {
return;
if (event.button == 0) {
if ($("#button_filter_type").is(".url")) {
$("#button_filter_type").removeClass("url").addClass("title");
} else {
$("#button_filter_type").addClass("url").removeClass("title");
}
FindTab($("#filter_box")[0].value);
chrome.runtime.sendMessage({command: "set_search_filter", search_filter: ($(this).is(".url") ? "url" : "title"), windowId: CurrentWindowId});
}
$("#button_filter_type").toggleClass("url").toggleClass("title");
FindTab($("#filter_box")[0].value);
chrome.runtime.sendMessage({command: "set_search_filter", search_filter: ($(this).is(".url") ? "url" : "title"), windowId: CurrentWindowId});
// localStorage["filter_type"] = $(this).is(".url") ? "url" : "title";
});
// clear filter button
$(document).on("mousedown", "#button_filter_clear", function(event) {
if (event.button != 0) {
return;
if (event.button == 0) {
$("#button_filter_clear").css({"opacity": "0"}).attr("title", "");
FindTab("");
}
$("#button_filter_clear").css({"opacity": "0"}).attr("title", "");
FindTab("");
});
// sort tabs
$(document).on("mousedown", "#button_sort", function(event) {
if (event.button != 0) {
return;
}
SortTabs();
});
// bookmarks
$(document).on("mousedown", "#button_bookmarks", function(event) {
if (event.button != 0) {
return;
}
chrome.tabs.create({url: "chrome://bookmarks/"});
});
// downloads
$(document).on("mousedown", "#button_downloads", function(event) {
if (event.button != 0) {
return;
}
chrome.tabs.create({url: "chrome://downloads/"});
});
// history
$(document).on("mousedown", "#button_history", function(event) {
if (event.button != 0) {
return;
}
chrome.tabs.create({url: "chrome://history/"});
});
// extensions
$(document).on("mousedown", "#button_extensions", function(event) {
if (event.button != 0) {
return;
}
chrome.tabs.create({url: "chrome://extensions"});
});
// settings
$(document).on("mousedown", "#button_settings", function(event) {
if (event.button != 0) {
return;
}
chrome.tabs.create({url: "chrome://settings/"});
});
// $(document).on("mousedown", "#button_sort", function(event) {
// if (event.button == 0) {
// SortTabs();
// }
// });
// vertical tabs options
$(document).on("mousedown", "#button_options", function(event) {
if (event.button != 0) {
return;
if (event.button == 0) {
chrome.tabs.create({url: "options.html" });
}
chrome.tabs.create({url: "options.html" });
});
// discard tabs
$(document).on("mousedown", "#button_discard", function(event) {
if (event.button != 0) {
return;
}
chrome.tabs.query({windowId: CurrentWindowId, pinned: false}, function(tabs) {
var tabsIds = [];
tabs.forEach(function(Tab) {
tabsIds.push(Tab.id);
});
DiscardTabs(tabsIds);
});
});
// new group button
// new group
$(document).on("mousedown", "#button_new_group", function(event) {
if (event.button == 0) {
AddNewGroup({});
}
});
// new group button
// remove group
$(document).on("mousedown", "#button_remove_group", function(event) {
let close_tabs = event.shiftKey;
if (event.button == 0) {
@ -335,62 +250,112 @@ function SetToolbarEvents() {
}
}
});
// EDIT GROUP
// edit group
$(document).on("mousedown", "#button_edit_group", function(event) {
if (active_group != "tab_list") {
ShowGroupEditWindow(active_group);
if (event.button == 0 && active_group != "tab_list") {
menuItemId = active_group;
ShowGroupEditWindow();
}
});
// import-export group
$(document).on("mousedown", "#button_export_group", function(event) {
ExportGroup(bggroups[active_group].name+".tt_group");
if (event.button == 0) {
ExportGroup(bggroups[active_group].name+".tt_group");
}
});
$(document).on("mousedown", "#button_import_group", function(event) {
ShowOpenFileDialog("file_import_group", ".tt_group");
if (event.button == 0) {
ShowOpenFileDialog("file_import_group", ".tt_group");
}
});
$(document).on("change", "#file_import_group", function(event) {
ImportGroup();
});
// new folder
$(document).on("mousedown", "#button_new_folder", function(event) {
if (event.button == 0) {
AddNewFolder({});
}
});
// rename folder
$(document).on("mousedown", "#button_edit_folder", function(event) {
if (event.button == 0 && $(".selected_folder:visible")[0]) {
ShowRenameFolderDialog($(".selected_folder:visible")[0].id);
}
});
// remove folder
$(document).on("mousedown", "#button_remove_folder", function(event) {
// let close_tabs = event.shiftKey;
if (event.button == 0 && $(".selected_folder:visible")[0]) {
$("#"+active_group+" .selected_folder").each(function() {
RemoveFolder(this.id);
});
// RemoveFolder($(".selected_folder:visible")[0].id);
}
});
// discard tabs
$(document).on("mousedown", "#button_discard", function(event) {
if (event.button == 0) {
DiscardTabs($(".selected_tab")[0] ? ($(".selected_tab").map(function() { return parseInt(this.id); }).toArray()) : ($(".pin, .tab").map(function() { return parseInt(this.id); }).toArray()) );
}
});
if (browserId != "F") {
// bookmarks
$(document).on("mousedown", "#button_bookmarks", function(event) {
if (event.button == 0) {
chrome.tabs.create({url: "chrome://bookmarks/"});
}
});
// downloads
$(document).on("mousedown", "#button_downloads", function(event) {
if (event.button == 0) {
chrome.tabs.create({url: "chrome://downloads/"});
}
});
// history
$(document).on("mousedown", "#button_history", function(event) {
if (event.button == 0) {
chrome.tabs.create({url: "chrome://history/"});
}
});
// extensions
$(document).on("mousedown", "#button_extensions", function(event) {
if (event.button == 0) {
chrome.tabs.create({url: "chrome://extensions"});
}
});
// settings
$(document).on("mousedown", "#button_settings", function(event) {
if (event.button == 0) {
chrome.tabs.create({url: "chrome://settings/"});
}
});
// load backups
$(document).on("mousedown", "#button_load_bak1:not(.disabled), #button_load_bak2:not(.disabled), #button_load_bak3:not(.disabled)", function(event) {
if (event.button != 0) {
return;
if (event.button == 0) {
let BakN = (this.id).substr(15);
chrome.storage.local.get(null, function(items) {
if (Object.keys(items["windows_BAK"+BakN]).length > 0) { chrome.storage.local.set({"windows": items["windows_BAK"+BakN]}); }
if (Object.keys(items["tabs_BAK"+BakN]).length > 0) { chrome.storage.local.set({"tabs": items["tabs_BAK"+BakN]}); alert("Loaded backup"); }
chrome.runtime.sendMessage({command: "reload"}); chrome.runtime.sendMessage({command: "reload_sidebar"}); location.reload();
});
}
let wins = LoadData("windows_BAK"+(this.id).substr(15), []);
let tabs = LoadData("tabs_BAK"+(this.id).substr(15), []);
if (wins.length) {
localStorage["windows"] = JSON.stringify(wins);
}
if (tabs.length) {
localStorage["tabs"] = JSON.stringify(tabs);
alert("Loaded backup");
}
chrome.runtime.sendMessage({command: "reload"});
chrome.runtime.sendMessage({command: "reload_sidebar"});
location.reload();
});
}
// import-export backups
$(document).on("mousedown", "#button_export_bak", function(event) {
ExportTabs("Session.tt_session");
ExportSession("Session.tt_session");
});
$(document).on("mousedown", "#button_import_bak", function(event) {
ShowOpenFileDialog("file_import_backup", ".tt_session");
});
$(document).on("change", "#file_import_backup", function(event) {
ImportTabs();
ImportSession();
});

114
scripts/utils.js Normal file
View File

@ -0,0 +1,114 @@
// 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/
// sort tabs main function
function SortTabs(){
if ($(".tab").find(":visible:first")[0]){
chrome.tabs.query({windowId: vt.windowId}, function(tabs){
tabs.sort(function(tab_a, tab_b){
return SplitUrl(tab_a).localeCompare( SplitUrl(tab_b) );
});
var first_tabId;
if ($(".selected:visible")[0]){
first_tabId = parseInt($(".selected:visible")[0].id);
} else {
first_tabId = parseInt($(".tab").find(":visible:first")[0].parentNode.id);
}
chrome.tabs.get(first_tabId, function(tab){
var new_index = tab.index;
tabs.forEach(function(Tab){
// sort selected when more than 1 tab is selected
if (($(".selected:visible").length > 1 && $("#"+Tab.id).is(":visible") && !Tab.pinned && $("#"+Tab.id).is(".selected")) || ($(".selected:visible").length < 2 && $("#"+Tab.id).is(":visible") && !Tab.pinned)){
chrome.tabs.move(Tab.id, {"index": new_index});
new_index++;
}
});
});
if (bg.opt.scroll_to_active){
setTimeout(function(){
ScrollTabList($(".active:visible")[0].id);
},1000);
}
});
}
}
// sort tabs sub function
function SplitUrl(tab){
var tmp_url = new URL(tab.url);
if (tmp_url.protocol != "http:"){
tmp_url.protocol == "http:";
}
var url_parts = [];
if (tab.pinned){
url_parts.push("#"+tab.index);
} else {
url_parts.push("~");
}
var parts = tmp_url.host.split(".");
parts.reverse();
if (parts.length > 1){
parts = parts.slice(1);
}
parts.join(".");
url_parts.push(parts);
url_parts.push(tab.title.toLowerCase());
return url_parts.join(" ! ");
}
// bookmark main function
function BookmarkTabs(tabs_array, FolderName){
var rootId;
var vertical_tabs_folderId;
chrome.bookmarks.getRootByName("bookmarks_bar", function(tree){
rootId = tree.id;
chrome.bookmarks.search("VerticalTabs", function(list){
for (var elem in list) {
if (list[elem].parentId == rootId){
vertical_tabs_folderId = list[elem].id;
break;
}
}
if (vertical_tabs_folderId == undefined){
chrome.bookmarks.create({parentId: rootId, title: "VerticalTabs"}, function(vertical_tabs_new){
vertical_tabs_folderId = vertical_tabs_new.id;
});
}
chrome.bookmarks.search(FolderName, function(list){
for (var elem in list) {
if (list[elem].parentId == vertical_tabs_folderId){
SlowlyBookmarkTabs(tabs_array, list[elem].id);
return;
}
}
chrome.bookmarks.create({parentId: vertical_tabs_folderId, title: FolderName}, function(active_group_folderId_new){
SlowlyBookmarkTabs(tabs_array, active_group_folderId_new.id);
});
});
});
});
}
// bookmark sub function
function SlowlyBookmarkTabs(tabs_array, group_folderId){
if (tabs_array.length > 0){
chrome.tabs.get(tabs_array[0], function(tab){
chrome.bookmarks.search({url: tab.url}, function(list){
tabs_array.splice(0, 1);
setTimeout(function(){
SlowlyBookmarkTabs(tabs_array, group_folderId);
},10);
for (var elem in list){
if (list[elem].parentId == group_folderId){
bookmarkId = list[elem].id;
return;
}
}
chrome.bookmarks.create({parentId: group_folderId, title: tab.title, url: tab.url});
});
});
}
}

View File

@ -49,30 +49,38 @@
<div id="groups">
<div class="group" id="tab_list">
<div class="children_folders" id="cftab_list"></div>
<div class="children_tabs" id="chtab_list"></div>
</div>
</div>
<input type="color" id="color_picker" style="position:absolute; left:-1000px; top:-1000px; width:1px; height:1px; overflow:hidden;">
<ul class="group_edit" id="group_edit">
<input id="group_edit_name" type="text"></input>
<ul class="edit_dialog" id="group_edit">
<input class="edit_dialog_edit_name" id="group_edit_name" type="text"></input>
<div class="group_edit_color" id="group_edit_font"></div>
<br>
<div id="group_edit_discard"><span class="group_edit_button" id="group_edit_button_cancel"></span></div>
<div id="group_edit_confirm"><span class="group_edit_button" id="group_edit_button_confirm"></span></div>
<div class="edit_dialog_discard" id="group_edit_discard"><span class="edit_dialog_button" id="group_edit_button_cancel"></span></div>
<div class="edit_dialog_confirm" id="group_edit_confirm"><span class="edit_dialog_button" id="group_edit_button_confirm"></span></div>
</ul>
<ul class="edit_dialog" id="folder_edit">
<input class="edit_dialog_edit_name" id="folder_edit_name" type="text"></input>
<br>
<div class="edit_dialog_discard" id="folder_edit_discard"><span class="edit_dialog_button" id="folder_edit_button_cancel"></span></div>
<div class="edit_dialog_confirm" id="folder_edit_confirm"><span class="edit_dialog_button" id="folder_edit_button_confirm"></span></div>
</ul>
<ul class="menu" id="tabs_menu">
<li data-action="tab_new" class="menu_item" id="tabs_menu_new"></li>
<ul class="menu" id="pins_menu">
<li data-action="tab_pin" class="menu_item" id="tabs_menu_unpin"></li>
<div class="separator"></div>
<li data-action="tab_clone" class="menu_item" id="tabs_menu_clone"></li>
<div class="separator"></div>
<li data-action="tab_move" class="menu_item" id="tabs_menu_move"></li>
<li data-action="tab_reload" class="menu_item" id="tabs_menu_reload"></li>
<li data-action="tab_discard" class="menu_item" id="tabs_menu_discard"></li>
<div class="separator"></div>
<li data-action="tab_expand_all" class="menu_item" id="tabs_menu_expand_all"></li>
<li data-action="tab_collapse_all" class="menu_item" id="tabs_menu_collapse_all"></li>
<div class="separator"></div>
<li data-action="tab_pin" class="menu_item" id="tabs_menu_pin"></li>
<li data-action="tab_close" class="menu_item" id="tabs_menu_close"></li>
<div class="separator"></div>
<li data-action="tab_mute" class="menu_item" id="tabs_menu_mute"></li>
<li data-action="tab_unmute" class="menu_item" id="tabs_menu_unmute"></li>
@ -80,23 +88,82 @@
<li data-action="tab_mute_other" class="menu_item" id="tabs_menu_mute_other"></li>
<li data-action="tab_unmute_other" class="menu_item" id="tabs_menu_unmute_other"></li>
<div class="separator"></div>
<li data-action="tab_undo_close" class="menu_item" id="tabs_menu_undo"></li>
<div class="separator"></div>
<li data-action="tab_settings" class="menu_item" id="tabs_menu_settings"></li>
</ul>
<ul class="menu" id="tabs_menu">
<li data-action="tab_new" class="menu_item" id="tabs_menu_new"></li>
<div class="separator"></div>
<li data-action="tab_pin" class="menu_item" id="tabs_menu_pin"></li>
<div class="separator"></div>
<li data-action="folder_new" class="menu_item" id="folders_menu_new_folder"></li>
<li data-action="group_new" class="menu_item" id="groups_menu_new_group"></li>
<div class="separator"></div>
<li data-action="tab_clone" class="menu_item" id="tabs_menu_clone"></li>
<div class="separator"></div>
<li data-action="tab_expand_all" class="menu_item" id="tabs_menu_expand_all"></li>
<li data-action="tab_collapse_all" class="menu_item" id="tabs_menu_collapse_all"></li>
<div class="separator"></div>
<li data-action="tab_move" class="menu_item" id="tabs_menu_move"></li>
<li data-action="tab_reload" class="menu_item" id="tabs_menu_reload"></li>
<li data-action="tab_discard" class="menu_item" id="tabs_menu_discard"></li>
<div class="separator"></div>
<li data-action="tab_close" class="menu_item" id="tabs_menu_close"></li>
<li data-action="tab_close_tree" class="menu_item" id="tabs_menu_close_tree"></li>
<li data-action="tab_close_other" class="menu_item" id="tabs_menu_close_other"></li>
<div class="separator"></div>
<li data-action="tab_mute" class="menu_item" id="tabs_menu_mute"></li>
<li data-action="tab_unmute" class="menu_item" id="tabs_menu_unmute"></li>
<div class="separator"></div>
<li data-action="tab_mute_other" class="menu_item" id="tabs_menu_mute_other"></li>
<li data-action="tab_unmute_other" class="menu_item" id="tabs_menu_unmute_other"></li>
<div class="separator"></div>
<li data-action="tab_undo_close" class="menu_item" id="tabs_menu_undo"></li>
<div class="separator"></div>
<li data-action="tab_settings" class="menu_item" id="tabs_menu_settings"></li>
</ul>
<ul class="menu" id="folders_menu">
<li data-action="tab_new" class="menu_item" id="tabs_menu_new"></li>
<li data-action="folder_new" class="menu_item" id="folders_menu_new_folder"></li>
<li data-action="group_new" class="menu_item" id="groups_menu_new_group"></li>
<div class="separator"></div>
<li data-action="folder_rename" class="menu_item" id="folders_menu_rename_folder"></li>
<div class="separator"></div>
<li data-action="folder_delete" class="menu_item" id="folders_menu_delete"></li>
<div class="separator"></div>
<li data-action="tab_settings" class="menu_item" id="tabs_menu_settings"></li>
</ul>
<ul class="menu" id="global_menu">
<li data-action="tab_new" class="menu_item" id="tabs_menu_new"></li>
<li data-action="folder_new" class="menu_item" id="folders_menu_new_folder"></li>
<li data-action="group_new" class="menu_item" id="groups_menu_new_group"></li>
<div class="separator"></div>
<li data-action="tab_expand_all" class="menu_item" id="tabs_menu_expand_all"></li>
<li data-action="tab_collapse_all" class="menu_item" id="tabs_menu_collapse_all"></li>
<div class="separator"></div>
<li data-action="tab_undo_close" class="menu_item" id="tabs_menu_undo"></li>
<div class="separator"></div>
<li data-action="tab_settings" class="menu_item" id="tabs_menu_settings"></li>
</ul>
<ul class="menu" id="groups_menu">
<li data-action="group_new" class="menu_item" id="groups_menu_new_group"></li>
<li data-action="group_rename" class="menu_item" id="groups_menu_rename"></li>
<li data-action="group_delete" class="menu_item" id="groups_menu_delete"></li>
<li data-action="group_delete_tabs_close" class="menu_item" id="groups_menu_delete_tabs_close"></li>
<div class="separator"></div>
<li data-action="group_unload" class="menu_item" id="groups_menu_unload"></li>
</ul>
<!--
<ul class="menu" id="move_to_group_menu">
<li data-action="move_to_new_group" class="menu_item" id="tabs_menu_move_to_new_group"></li>
<div class="separator"></div>
</ul>
<ul class="menu" id="groups_menu">
<li data-action="group_new" class="groups_menu_item" id="groups_menu_new"></li>
<li data-action="group_edit" class="groups_menu_item" id="groups_menu_edit"></li>
<li data-action="group_bookmark" class="groups_menu_item" id="groups_menu_bookmark"></li>
<div class="separator"></div>
<li data-action="group_mute" class="groups_menu_item" id="groups_menu_mute"></li>
@ -106,7 +173,6 @@
<div class="separator"></div>
<li data-action="group_close" class="groups_menu_item" id="groups_menu_close"></li>
<li data-action="group_close_with_tabs" class="groups_menu_item" id="groups_menu_close_with_tabs"></li>
<li data-action="group_discard" class="groups_menu_item" id="groups_menu_discard"></li>
<li data-action="group_suspend" class="groups_menu_item" id="groups_menu_suspend"></li>
<div class="separator"></div>
</ul>
@ -118,6 +184,7 @@
<script type="text/javascript" src="../scripts/toolbar.js"></script>
<script type="text/javascript" src="../scripts/chrome.js"></script>
<script type="text/javascript" src="../scripts/refresh.js"></script>
<script type="text/javascript" src="../scripts/utils.js"></script>
<script type="text/javascript" src="../scripts/drag_and_drop.js"></script>
<script type="text/javascript" src="../scripts/backup.js"></script>

View File

@ -13,7 +13,7 @@ function Loadi18n() {
$(this).text(chrome.i18n.getMessage(this.id));
});
// edit group dialog labels
$(".group_edit_button").each(function() {
$(".edit_dialog_button").each(function() {
$(this)[0].textContent = chrome.i18n.getMessage(this.id);
});
}
@ -26,24 +26,31 @@ function RestorePinListRowSettings() {
RefreshGUI();
}
function Run() {
LoadPreferences();
chrome.runtime.sendMessage({command: "is_bg_ready"}, function(response) {
setTimeout(function() {
if (response == true) {
Load();
} else {
Run();
}
},200);
});
}
function Load() {
chrome.windows.getCurrent({populate: false}, function(window) {
CurrentWindowId = window.id;
chrome.runtime.sendMessage({command: "is_bg_running"}, function(response) {
running = response;
chrome.runtime.sendMessage({command: "get_preferences"}, function(response) {
opt = Object.assign({}, response);
chrome.runtime.sendMessage({command: "get_browser_tabs"}, function(response) {
bgtabs = Object.assign({}, response);
chrome.runtime.sendMessage({command: "get_groups", windowId: CurrentWindowId}, function(response) {
bggroups = Object.assign({}, response);
chrome.runtime.sendMessage({command: "get_theme", windowId: CurrentWindowId}, function(response) {
theme = response;
setTimeout(function() {
if (opt != undefined && browserId != undefined && bgtabs != undefined && bggroups != undefined && running == true) {
Initialize();
} else {
Run();
}
},200);
chrome.runtime.sendMessage({command: "get_folders", windowId: CurrentWindowId}, function(response) {
bgfolders = Object.assign({}, response);
chrome.runtime.sendMessage({command: "get_groups", windowId: CurrentWindowId}, function(response) {
bggroups = Object.assign({}, response);
chrome.runtime.sendMessage({command: "get_theme", windowId: CurrentWindowId}, function(response) {
ApplyTheme(response);
Initialize();
});
});
});
});
@ -51,46 +58,19 @@ function Run() {
});
}
function Initialize() {
// THEME
RestoreStateOfGroupsToolbar();
// var theme = LoadData(("theme"+localStorage["current_theme"]), {"TabsSizeSetNumber": 2, "ToolbarShow": true, "toolbar": DefaultToolbar});
// I have no idea what is going on in latest build, but why top position for various things is different in firefox?????
if (browserId == "F") {
if (theme.TabsSizeSetNumber > 1) {
document.styleSheets[document.styleSheets.length-1].insertRule(".tab_header>.tab_title { margin-top: -1px; }", document.styleSheets[document.styleSheets.length-1].cssRules.length);
}
}
ApplySizeSet(theme["TabsSizeSetNumber"]);
ApplyColorsSet(theme["ColorsSet"]);
if (theme.ToolbarShow) {
if (theme.theme_version == DefaultTheme.theme_version) {
$("#toolbar").html(theme.toolbar);
if (browserId == "F") {
$(".button#button_load_bak1, .button#button_load_bak2, .button#button_load_bak3").remove();
}
} else {
$("#toolbar").html(DefaultToolbar);
}
}
// APPEND GROUPS
AppendAllGroups();
AppendGroups(bggroups);
chrome.tabs.query({currentWindow: true}, function(tabs) {
// AddNewFolder();AddNewFolder();AddNewFolder();AddNewFolder();AddNewFolder();
// APPEND FOLDERS
AppendFolders(bgfolders);
// APPEND TABS
let tc = tabs.length;
for (var ti = 0; ti < tc; ti++) {
AppendTab({tab: tabs[ti], Append: true, SkipSetActive: true});
}
for (var ti = 0; ti < tc; ti++) {
if (bgtabs[tabs[ti].id] && !tabs[ti].pinned && $("#"+bgtabs[tabs[ti].id].parent)[0] && $("#"+bgtabs[tabs[ti].id].parent).is(".group")) {
$("#"+bgtabs[tabs[ti].id].parent).append($("#"+tabs[ti].id));
}
}
for (var ti = 0; ti < tc; ti++) {
if (bgtabs[tabs[ti].id] && !tabs[ti].pinned) {
if ($("#"+bgtabs[tabs[ti].id].parent).length > 0 && $("#"+bgtabs[tabs[ti].id].parent).is(".tab") && $("#"+tabs[ti].id).find($("#ch"+bgtabs[tabs[ti].id].parent)).length == 0) {
if ($("#"+bgtabs[tabs[ti].id].parent).length > 0 && $("#"+tabs[ti].id).find($("#ch"+bgtabs[tabs[ti].id].parent)).length == 0) {
$("#ch"+bgtabs[tabs[ti].id].parent).append($("#"+tabs[ti].id));
}
}
@ -100,18 +80,17 @@ function Initialize() {
$("#"+tabs[ti].id).addClass(bgtabs[tabs[ti].id].expand);
}
}
// SET ACTIVE IN EACH GROUP
// SET ACTIVE TAB FOR EACH GROUP
for (var group in bggroups) {
if ($("#"+group+" #"+bggroups[group].activetab)[0]) {
$("#"+bggroups[group].activetab).addClass("active");
if ($("#"+group+" #"+bggroups[group].active_tab)[0]) {
$("#"+bggroups[group].active_tab).addClass("active_tab");
}
}
}
chrome.runtime.sendMessage({command: "get_active_group", windowId: CurrentWindowId}, function(response) {
SetActiveGroup(response, true, true);
SetActiveGroup(response, false, true);
});
RearrangeTreeTabs(tabs, bgtabs, true);
RestoreToolbarShelf();
RestoreToolbarSearchFilter();
RearrangeFolders(true);
SetToolbarShelfToggle("mousedown");
StartChromeListeners();
SetIOEvents();
@ -122,29 +101,40 @@ function Initialize() {
SetFolderEvents();
SetMenu();
SetDragAndDropEvents();
RearrangeBrowserTabsCheck();
Loadi18n();
if (opt.syncro_tabbar_tabs_order || opt.syncro_tabbar_groups_tabs_order) {
RearrangeBrowserTabs();
}
RestorePinListRowSettings();
if (browserId == "V") {
VivaldiRefreshMediaIcons();
}
var SetActiveLoop = setInterval(function() {
log("SetActiveTab");
chrome.tabs.query({currentWindow: true, active: true}, function(tabs) {
if (tabs[0].pinned && $("#"+active_group+" .active_tab")[0]) {
SetActiveTab(tabs[0].id);
} else {
clearInterval(SetActiveLoop);
}
});
}, 1000);
setTimeout(function() {
RefreshExpandStates();
RefreshCounters();
}, 1000);
setTimeout(function() {
UpdateData();
delete bgtabs;
delete theme;
}, 5000);
if ($(".active:visible").length == 0) {
chrome.tabs.query({currentWindow: true, active: true}, function(tabs) {
if (tabs[0]) {
SetActiveTab(tabs[0].id);
}
if (browserId != "F") {
chrome.storage.local.get(null, function(items) {
if (Object.keys(items["windows_BAK1"]).length > 0) { $("#button_load_bak1").removeClass("disabled"); }
if (Object.keys(items["windows_BAK2"]).length > 0) { $("#button_load_bak2").removeClass("disabled"); }
if (Object.keys(items["windows_BAK3"]).length > 0) { $("#button_load_bak3").removeClass("disabled"); }
});
}
if (browserId == "V") {
VivaldiRefreshMediaIcons();
}
});
}
function log(m) {
chrome.runtime.sendMessage({command: "console_log", m: m});
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 161 B

75
theme/expand_c.svg Normal file
View File

@ -0,0 +1,75 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="20"
height="20"
viewBox="0 0 20 20"
id="svg4216"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="expand_closed.svg">
<defs
id="defs4218">
<pattern
y="0"
x="0"
height="6"
width="6"
patternUnits="userSpaceOnUse"
id="EMFhbasepattern" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="16"
inkscape:cx="-7.637165"
inkscape:cy="10.163524"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1028"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:object-paths="true"
inkscape:snap-intersection-paths="true"
inkscape:object-nodes="true"
inkscape:snap-smooth-nodes="true" />
<metadata
id="metadata4221">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1032.3622)">
<path
inkscape:connector-curvature="0"
id="path4159"
d="m 2,1051.3622 0,-18 18,9 z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

75
theme/expand_o.svg Normal file
View File

@ -0,0 +1,75 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="20"
height="20"
viewBox="0 0 20 20"
id="svg4216"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="expand_open.svg">
<defs
id="defs4218">
<pattern
y="0"
x="0"
height="6"
width="6"
patternUnits="userSpaceOnUse"
id="EMFhbasepattern" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="16"
inkscape:cx="-7.480915"
inkscape:cy="12.038524"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1028"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:object-paths="true"
inkscape:snap-intersection-paths="true"
inkscape:object-nodes="true"
inkscape:snap-smooth-nodes="true" />
<metadata
id="metadata4221">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1032.3622)">
<path
inkscape:connector-curvature="0"
id="path4159"
d="m 1,1034.3622 18,0 -9,18 z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

87
theme/icon_audio.svg Normal file
View File

@ -0,0 +1,87 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg3347"
version="1.1"
inkscape:version="0.91 r13725"
width="32"
height="32"
viewBox="0 0 32 32"
sodipodi:docname="icon_audio.svg">
<metadata
id="metadata3353">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs3351" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1058"
id="namedview3349"
showgrid="false"
inkscape:zoom="22.627418"
inkscape:cx="26.09653"
inkscape:cy="12.511364"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg3347"
inkscape:snap-page="true"
inkscape:snap-center="true"
inkscape:snap-midpoints="true"
inkscape:snap-bbox="true"
inkscape:bbox-paths="true"
inkscape:bbox-nodes="true"
inkscape:snap-bbox-edge-midpoints="true"
inkscape:snap-bbox-midpoints="true"
inkscape:object-paths="true"
inkscape:snap-smooth-nodes="true"
inkscape:object-nodes="true"
inkscape:snap-intersection-paths="true" />
<circle
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#e7e7e7;fill-opacity:1;fill-rule:evenodd;stroke:#747474;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
id="path4367"
cx="16"
cy="16"
r="15.5" />
<path
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#747474;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m 19.822266,4.0009397 c -0.625024,0.01859 -1.306528,0.3134121 -1.885254,1.0019749 l -5.025879,4.9966908 -2.411133,0 c -0.831,0 -1.5,0.6690136 -1.5,1.5000316 l 0,9.000195 c 0,0.831018 0.669,1.500032 1.5,1.500032 l 2.411133,0 5.025879,4.99669 C 19.48028,28.832722 21.75,27.874085 21.75,26.318316 l 0,-20.6371641 c 0,-0.9723541 -0.88603,-1.7111944 -1.927734,-1.6802122 z"
id="path4363"
inkscape:connector-curvature="0" />
<circle
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#e7e7e7;fill-opacity:1;fill-rule:evenodd;stroke:#484848;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
id="path4367-3"
cx="62.667339"
cy="15.648156"
r="16" />
<path
id="path4363-9"
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#303030;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m 66.303216,20.605411 c -0.225509,-0.102094 -0.495003,-0.362337 -0.588623,-0.568416 -0.11076,-0.243808 -0.11375,-0.680744 -0.0063,-0.90738 0.04467,-0.09413 0.292516,-0.382316 0.550781,-0.640411 0.51028,-0.509948 0.737221,-0.819847 0.985761,-1.346109 0.259965,-0.550451 0.327078,-0.870101 0.322535,-1.53619 -0.0034,-0.506294 -0.02163,-0.640094 -0.133799,-0.984374 -0.237499,-0.729013 -0.494106,-1.127977 -1.175815,-1.828126 -0.263574,-0.270702 -0.513301,-0.559694 -0.55495,-0.642203 -0.044,-0.08718 -0.07572,-0.264947 -0.07572,-0.424391 0,-0.681928 0.572223,-1.199134 1.229117,-1.110941 0.277004,0.03719 0.765098,0.369614 1.232371,0.83933 0.778247,0.782315 1.268599,1.656516 1.552552,2.767894 0.160972,0.630041 0.204648,1.758965 0.09289,2.401104 -0.157395,0.904373 -0.522568,1.779381 -1.045997,2.50636 -0.311231,0.432261 -0.963328,1.076335 -1.349017,1.332418 -0.235034,0.156054 -0.311177,0.181368 -0.581042,0.193169 -0.193063,0.0085 -0.365145,-0.01113 -0.45483,-0.05174 z m 2.605205,4.114373 c -0.718996,-0.310949 -0.905938,-1.291431 -0.344136,-1.80494 0.07326,-0.06696 0.312497,-0.256091 0.531636,-0.420287 1.390626,-1.041951 2.497218,-2.643242 3.018195,-4.367466 0.278134,-0.920516 0.332662,-1.335382 0.331239,-2.520186 -0.0011,-0.962797 -0.01219,-1.105824 -0.126576,-1.641626 -0.464149,-2.174031 -1.622081,-3.9891005 -3.373891,-5.2886095 -0.487395,-0.361554 -0.614982,-0.522675 -0.697715,-0.881088 -0.147449,-0.638785 0.387329,-1.295818 1.054702,-1.295818 0.310709,0 0.564314,0.11453 1.036234,0.467972 2.00977,1.505203 3.448923,3.6933425 4.054802,6.1650645 0.226209,0.922836 0.295459,1.642879 0.269143,2.798493 -0.01886,0.828481 -0.0452,1.127341 -0.145537,1.651351 -0.437652,2.285744 -1.503415,4.265256 -3.151939,5.854304 -0.560462,0.540242 -1.269621,1.096555 -1.588969,1.246496 -0.273428,0.128383 -0.620709,0.142935 -0.867188,0.03633 z M 61.489605,3.6490955 c -0.625024,0.01859 -1.306528,0.313412 -1.885254,1.001975 l -5.025879,4.99669 -2.411133,0 c -0.831,0 -1.5,0.6690135 -1.5,1.5000315 l 0,9.000195 c 0,0.831018 0.669,1.500032 1.5,1.500032 l 2.411133,0 5.025879,4.99669 c 1.543268,1.836168 3.812988,0.877531 3.812988,-0.678238 l 0,-20.6371635 c 0,-0.972354 -0.88603,-1.711194 -1.927734,-1.680212 z"
inkscape:connector-curvature="0" />
</svg>

After

Width:  |  Height:  |  Size: 6.9 KiB

View File

@ -0,0 +1,87 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg3347"
version="1.1"
inkscape:version="0.91 r13725"
width="32"
height="32"
viewBox="0 0 32 32"
sodipodi:docname="icon_audio_hover.svg">
<metadata
id="metadata3353">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs3351" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1058"
id="namedview3349"
showgrid="false"
inkscape:zoom="11.313709"
inkscape:cx="8.3336413"
inkscape:cy="25.450376"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg3347"
inkscape:snap-page="true"
inkscape:snap-center="true"
inkscape:snap-midpoints="true"
inkscape:snap-bbox="true"
inkscape:bbox-paths="true"
inkscape:bbox-nodes="true"
inkscape:snap-bbox-edge-midpoints="true"
inkscape:snap-bbox-midpoints="true"
inkscape:object-paths="true"
inkscape:snap-smooth-nodes="true"
inkscape:object-nodes="true"
inkscape:snap-intersection-paths="true" />
<circle
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#e7e7e7;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.89411765;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
id="path4367"
cx="16"
cy="16"
r="15.5" />
<path
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:0.89320385;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m 19.822266,4.0009397 c -0.625024,0.01859 -1.306528,0.3134121 -1.885254,1.0019749 l -5.025879,4.9966908 -2.411133,0 c -0.831,0 -1.5,0.6690136 -1.5,1.5000316 l 0,9.000195 c 0,0.831018 0.669,1.500032 1.5,1.500032 l 2.411133,0 5.025879,4.99669 C 19.48028,28.832722 21.75,27.874085 21.75,26.318316 l 0,-20.6371641 c 0,-0.9723541 -0.88603,-1.7111944 -1.927734,-1.6802122 z"
id="path4363"
inkscape:connector-curvature="0" />
<circle
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#e7e7e7;fill-opacity:1;fill-rule:evenodd;stroke:#484848;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
id="path4367-3"
cx="62.667339"
cy="15.648156"
r="16" />
<path
id="path4363-9"
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#303030;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m 66.303216,20.605411 c -0.225509,-0.102094 -0.495003,-0.362337 -0.588623,-0.568416 -0.11076,-0.243808 -0.11375,-0.680744 -0.0063,-0.90738 0.04467,-0.09413 0.292516,-0.382316 0.550781,-0.640411 0.51028,-0.509948 0.737221,-0.819847 0.985761,-1.346109 0.259965,-0.550451 0.327078,-0.870101 0.322535,-1.53619 -0.0034,-0.506294 -0.02163,-0.640094 -0.133799,-0.984374 -0.237499,-0.729013 -0.494106,-1.127977 -1.175815,-1.828126 -0.263574,-0.270702 -0.513301,-0.559694 -0.55495,-0.642203 -0.044,-0.08718 -0.07572,-0.264947 -0.07572,-0.424391 0,-0.681928 0.572223,-1.199134 1.229117,-1.110941 0.277004,0.03719 0.765098,0.369614 1.232371,0.83933 0.778247,0.782315 1.268599,1.656516 1.552552,2.767894 0.160972,0.630041 0.204648,1.758965 0.09289,2.401104 -0.157395,0.904373 -0.522568,1.779381 -1.045997,2.50636 -0.311231,0.432261 -0.963328,1.076335 -1.349017,1.332418 -0.235034,0.156054 -0.311177,0.181368 -0.581042,0.193169 -0.193063,0.0085 -0.365145,-0.01113 -0.45483,-0.05174 z m 2.605205,4.114373 c -0.718996,-0.310949 -0.905938,-1.291431 -0.344136,-1.80494 0.07326,-0.06696 0.312497,-0.256091 0.531636,-0.420287 1.390626,-1.041951 2.497218,-2.643242 3.018195,-4.367466 0.278134,-0.920516 0.332662,-1.335382 0.331239,-2.520186 -0.0011,-0.962797 -0.01219,-1.105824 -0.126576,-1.641626 -0.464149,-2.174031 -1.622081,-3.9891005 -3.373891,-5.2886095 -0.487395,-0.361554 -0.614982,-0.522675 -0.697715,-0.881088 -0.147449,-0.638785 0.387329,-1.295818 1.054702,-1.295818 0.310709,0 0.564314,0.11453 1.036234,0.467972 2.00977,1.505203 3.448923,3.6933425 4.054802,6.1650645 0.226209,0.922836 0.295459,1.642879 0.269143,2.798493 -0.01886,0.828481 -0.0452,1.127341 -0.145537,1.651351 -0.437652,2.285744 -1.503415,4.265256 -3.151939,5.854304 -0.560462,0.540242 -1.269621,1.096555 -1.588969,1.246496 -0.273428,0.128383 -0.620709,0.142935 -0.867188,0.03633 z M 61.489605,3.6490955 c -0.625024,0.01859 -1.306528,0.313412 -1.885254,1.001975 l -5.025879,4.99669 -2.411133,0 c -0.831,0 -1.5,0.6690135 -1.5,1.5000315 l 0,9.000195 c 0,0.831018 0.669,1.500032 1.5,1.500032 l 2.411133,0 5.025879,4.99669 c 1.543268,1.836168 3.812988,0.877531 3.812988,-0.678238 l 0,-20.6371635 c 0,-0.972354 -0.88603,-1.711194 -1.927734,-1.680212 z"
inkscape:connector-curvature="0" />
</svg>

After

Width:  |  Height:  |  Size: 6.9 KiB

View File

@ -0,0 +1,95 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg3347"
version="1.1"
inkscape:version="0.91 r13725"
width="32"
height="32"
viewBox="0 0 32 32"
sodipodi:docname="icon_audio_muted.svg">
<metadata
id="metadata3353">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs3351" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1058"
id="namedview3349"
showgrid="false"
inkscape:zoom="16"
inkscape:cx="12.977065"
inkscape:cy="17.431941"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg3347"
inkscape:snap-page="true"
inkscape:snap-center="true"
inkscape:snap-midpoints="true"
inkscape:snap-bbox="true"
inkscape:bbox-paths="true"
inkscape:bbox-nodes="true"
inkscape:snap-bbox-edge-midpoints="true"
inkscape:snap-bbox-midpoints="true"
inkscape:object-paths="true"
inkscape:snap-smooth-nodes="true"
inkscape:object-nodes="true"
inkscape:snap-intersection-paths="true" />
<circle
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#e7e7e7;fill-opacity:1;fill-rule:evenodd;stroke:#747474;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
id="path4367"
cx="16"
cy="16"
r="15.5" />
<path
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#747474;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m 19.822266,4.0009397 c -0.625024,0.01859 -1.306528,0.3134121 -1.885254,1.0019749 l -5.025879,4.9966908 -2.411133,0 c -0.831,0 -1.5,0.6690136 -1.5,1.5000316 l 0,9.000195 c 0,0.831018 0.669,1.500032 1.5,1.500032 l 2.411133,0 5.025879,4.99669 C 19.48028,28.832722 21.75,27.874085 21.75,26.318316 l 0,-20.6371641 c 0,-0.9723541 -0.88603,-1.7111944 -1.927734,-1.6802122 z"
id="path4363"
inkscape:connector-curvature="0" />
<circle
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#e7e7e7;fill-opacity:1;fill-rule:evenodd;stroke:#484848;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
id="path4367-3"
cx="62.667339"
cy="15.648156"
r="16" />
<path
id="path4363-9"
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#303030;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m 66.303216,20.605411 c -0.225509,-0.102094 -0.495003,-0.362337 -0.588623,-0.568416 -0.11076,-0.243808 -0.11375,-0.680744 -0.0063,-0.90738 0.04467,-0.09413 0.292516,-0.382316 0.550781,-0.640411 0.51028,-0.509948 0.737221,-0.819847 0.985761,-1.346109 0.259965,-0.550451 0.327078,-0.870101 0.322535,-1.53619 -0.0034,-0.506294 -0.02163,-0.640094 -0.133799,-0.984374 -0.237499,-0.729013 -0.494106,-1.127977 -1.175815,-1.828126 -0.263574,-0.270702 -0.513301,-0.559694 -0.55495,-0.642203 -0.044,-0.08718 -0.07572,-0.264947 -0.07572,-0.424391 0,-0.681928 0.572223,-1.199134 1.229117,-1.110941 0.277004,0.03719 0.765098,0.369614 1.232371,0.83933 0.778247,0.782315 1.268599,1.656516 1.552552,2.767894 0.160972,0.630041 0.204648,1.758965 0.09289,2.401104 -0.157395,0.904373 -0.522568,1.779381 -1.045997,2.50636 -0.311231,0.432261 -0.963328,1.076335 -1.349017,1.332418 -0.235034,0.156054 -0.311177,0.181368 -0.581042,0.193169 -0.193063,0.0085 -0.365145,-0.01113 -0.45483,-0.05174 z m 2.605205,4.114373 c -0.718996,-0.310949 -0.905938,-1.291431 -0.344136,-1.80494 0.07326,-0.06696 0.312497,-0.256091 0.531636,-0.420287 1.390626,-1.041951 2.497218,-2.643242 3.018195,-4.367466 0.278134,-0.920516 0.332662,-1.335382 0.331239,-2.520186 -0.0011,-0.962797 -0.01219,-1.105824 -0.126576,-1.641626 -0.464149,-2.174031 -1.622081,-3.9891005 -3.373891,-5.2886095 -0.487395,-0.361554 -0.614982,-0.522675 -0.697715,-0.881088 -0.147449,-0.638785 0.387329,-1.295818 1.054702,-1.295818 0.310709,0 0.564314,0.11453 1.036234,0.467972 2.00977,1.505203 3.448923,3.6933425 4.054802,6.1650645 0.226209,0.922836 0.295459,1.642879 0.269143,2.798493 -0.01886,0.828481 -0.0452,1.127341 -0.145537,1.651351 -0.437652,2.285744 -1.503415,4.265256 -3.151939,5.854304 -0.560462,0.540242 -1.269621,1.096555 -1.588969,1.246496 -0.273428,0.128383 -0.620709,0.142935 -0.867188,0.03633 z M 61.489605,3.6490955 c -0.625024,0.01859 -1.306528,0.313412 -1.885254,1.001975 l -5.025879,4.99669 -2.411133,0 c -0.831,0 -1.5,0.6690135 -1.5,1.5000315 l 0,9.000195 c 0,0.831018 0.669,1.500032 1.5,1.500032 l 2.411133,0 5.025879,4.99669 c 1.543268,1.836168 3.812988,0.877531 3.812988,-0.678238 l 0,-20.6371635 c 0,-0.972354 -0.88603,-1.711194 -1.927734,-1.680212 z"
inkscape:connector-curvature="0" />
<rect
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#747474;fill-opacity:1;fill-rule:evenodd;stroke:#e7e7e7;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
id="rect4393"
width="40.959385"
height="2.2954471"
x="-20.479692"
y="21.479692"
transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,0,0)" />
</svg>

After

Width:  |  Height:  |  Size: 7.6 KiB

View File

@ -0,0 +1,95 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg3347"
version="1.1"
inkscape:version="0.91 r13725"
width="32"
height="32"
viewBox="0 0 32 32"
sodipodi:docname="icon_audio_muted_hover.svg">
<metadata
id="metadata3353">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs3351" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1058"
id="namedview3349"
showgrid="false"
inkscape:zoom="16"
inkscape:cx="20.156418"
inkscape:cy="21.255344"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg3347"
inkscape:snap-page="true"
inkscape:snap-center="true"
inkscape:snap-midpoints="true"
inkscape:snap-bbox="true"
inkscape:bbox-paths="true"
inkscape:bbox-nodes="true"
inkscape:snap-bbox-edge-midpoints="true"
inkscape:snap-bbox-midpoints="true"
inkscape:object-paths="true"
inkscape:snap-smooth-nodes="true"
inkscape:object-nodes="true"
inkscape:snap-intersection-paths="true" />
<circle
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#e7e7e7;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.89411765;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
id="path4367"
cx="16"
cy="16"
r="15.5" />
<path
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:0.89411765;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m 19.822266,4.0009397 c -0.625024,0.01859 -1.306528,0.3134121 -1.885254,1.0019749 l -5.025879,4.9966908 -2.411133,0 c -0.831,0 -1.5,0.6690136 -1.5,1.5000316 l 0,9.000195 c 0,0.831018 0.669,1.500032 1.5,1.500032 l 2.411133,0 5.025879,4.99669 C 19.48028,28.832722 21.75,27.874085 21.75,26.318316 l 0,-20.6371641 c 0,-0.9723541 -0.88603,-1.7111944 -1.927734,-1.6802122 z"
id="path4363"
inkscape:connector-curvature="0" />
<circle
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#e7e7e7;fill-opacity:1;fill-rule:evenodd;stroke:#484848;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
id="path4367-3"
cx="62.667339"
cy="15.648156"
r="16" />
<path
id="path4363-9"
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#303030;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m 66.303216,20.605411 c -0.225509,-0.102094 -0.495003,-0.362337 -0.588623,-0.568416 -0.11076,-0.243808 -0.11375,-0.680744 -0.0063,-0.90738 0.04467,-0.09413 0.292516,-0.382316 0.550781,-0.640411 0.51028,-0.509948 0.737221,-0.819847 0.985761,-1.346109 0.259965,-0.550451 0.327078,-0.870101 0.322535,-1.53619 -0.0034,-0.506294 -0.02163,-0.640094 -0.133799,-0.984374 -0.237499,-0.729013 -0.494106,-1.127977 -1.175815,-1.828126 -0.263574,-0.270702 -0.513301,-0.559694 -0.55495,-0.642203 -0.044,-0.08718 -0.07572,-0.264947 -0.07572,-0.424391 0,-0.681928 0.572223,-1.199134 1.229117,-1.110941 0.277004,0.03719 0.765098,0.369614 1.232371,0.83933 0.778247,0.782315 1.268599,1.656516 1.552552,2.767894 0.160972,0.630041 0.204648,1.758965 0.09289,2.401104 -0.157395,0.904373 -0.522568,1.779381 -1.045997,2.50636 -0.311231,0.432261 -0.963328,1.076335 -1.349017,1.332418 -0.235034,0.156054 -0.311177,0.181368 -0.581042,0.193169 -0.193063,0.0085 -0.365145,-0.01113 -0.45483,-0.05174 z m 2.605205,4.114373 c -0.718996,-0.310949 -0.905938,-1.291431 -0.344136,-1.80494 0.07326,-0.06696 0.312497,-0.256091 0.531636,-0.420287 1.390626,-1.041951 2.497218,-2.643242 3.018195,-4.367466 0.278134,-0.920516 0.332662,-1.335382 0.331239,-2.520186 -0.0011,-0.962797 -0.01219,-1.105824 -0.126576,-1.641626 -0.464149,-2.174031 -1.622081,-3.9891005 -3.373891,-5.2886095 -0.487395,-0.361554 -0.614982,-0.522675 -0.697715,-0.881088 -0.147449,-0.638785 0.387329,-1.295818 1.054702,-1.295818 0.310709,0 0.564314,0.11453 1.036234,0.467972 2.00977,1.505203 3.448923,3.6933425 4.054802,6.1650645 0.226209,0.922836 0.295459,1.642879 0.269143,2.798493 -0.01886,0.828481 -0.0452,1.127341 -0.145537,1.651351 -0.437652,2.285744 -1.503415,4.265256 -3.151939,5.854304 -0.560462,0.540242 -1.269621,1.096555 -1.588969,1.246496 -0.273428,0.128383 -0.620709,0.142935 -0.867188,0.03633 z M 61.489605,3.6490955 c -0.625024,0.01859 -1.306528,0.313412 -1.885254,1.001975 l -5.025879,4.99669 -2.411133,0 c -0.831,0 -1.5,0.6690135 -1.5,1.5000315 l 0,9.000195 c 0,0.831018 0.669,1.500032 1.5,1.500032 l 2.411133,0 5.025879,4.99669 c 1.543268,1.836168 3.812988,0.877531 3.812988,-0.678238 l 0,-20.6371635 c 0,-0.972354 -0.88603,-1.711194 -1.927734,-1.680212 z"
inkscape:connector-curvature="0" />
<rect
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:0.89411765;fill-rule:evenodd;stroke:#e7e7e7;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
id="rect4393"
width="40.959385"
height="2.2954471"
x="-20.479692"
y="21.479692"
transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,0,0)" />
</svg>

After

Width:  |  Height:  |  Size: 7.6 KiB

View File

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -39,16 +39,16 @@
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1552"
inkscape:window-height="811"
inkscape:window-width="1920"
inkscape:window-height="1058"
id="namedview3349"
showgrid="false"
inkscape:zoom="11.313709"
inkscape:cx="-6.6202105"
inkscape:cy="14.42908"
inkscape:window-x="185"
inkscape:window-y="94"
inkscape:window-maximized="0"
inkscape:cx="-2.4116637"
inkscape:cy="6.1185819"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg3347"
inkscape:snap-page="true"
inkscape:snap-center="true"
@ -59,36 +59,16 @@
inkscape:snap-bbox-edge-midpoints="true"
inkscape:snap-bbox-midpoints="true"
inkscape:object-paths="true" />
<rect
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#cccccc;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect3365"
width="6.99999"
height="6.99999"
x="20.687504"
y="-13.625002" />
<rect
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect3367"
width="4.99999"
height="4.99999"
x="36.187504"
y="0.74999785" />
<rect
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect3369"
width="4.99999"
height="4.99999"
x="32.812504"
y="13.812496" />
<path
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 0,5 0,15 13,15 13,5 Z"
id="path4138"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 12.3125,4.8504126 12.28125,2.0625 6.34375,2.125 5.71875,1.03125 2.6875,1.09375 1.96875,2.78125 0.53125,2.84375 0.50457646,15.003657"
d="m 12.499937,5.5 1.25e-4,-2 -6.156187,0 L 5.71875,1.5 0.5,1.5 0.5,15"
id="path4149"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 0.50520155,14.718693 12.15104845,0 0,-10.343693 -12.12855679,0.090218"
id="path4151"
inkscape:connector-curvature="0" />
sodipodi:nodetypes="cccccc" />
</svg>

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -24,7 +24,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@ -39,16 +39,16 @@
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1552"
inkscape:window-height="811"
inkscape:window-width="1920"
inkscape:window-height="1058"
id="namedview3349"
showgrid="false"
inkscape:zoom="11.313709"
inkscape:cx="-15.841251"
inkscape:cy="9.3738536"
inkscape:window-x="185"
inkscape:window-y="94"
inkscape:window-maximized="0"
inkscape:cx="-3.2022799"
inkscape:cy="9.440858"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg3347"
inkscape:snap-page="true"
inkscape:snap-center="true"
@ -59,37 +59,16 @@
inkscape:snap-bbox-edge-midpoints="true"
inkscape:snap-bbox-midpoints="true"
inkscape:object-paths="true" />
<rect
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#cccccc;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect3365"
width="6.99999"
height="6.99999"
x="20.687504"
y="-13.625002" />
<rect
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect3367"
width="4.99999"
height="4.99999"
x="36.187504"
y="0.74999785" />
<rect
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect3369"
width="4.99999"
height="4.99999"
x="32.812504"
y="13.812496" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 6,5.3125 5.3378538,5.4893868 4.875,5.9375 0.78125,14.5 11.90625,14.40625 14.894908,5.9394164 14.802966,5.5366117 14.40816,5.1698614 Z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 3,5 0,15 13,15 16,5 Z"
id="path4138"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccc" />
sodipodi:nodetypes="ccccc" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 12.3125,4.8504126 12.28125,2.0625 6.34375,2.125 5.71875,1.03125 2.6875,1.09375 1.96875,2.78125 0.53125,2.84375 0.50457646,15.003657"
d="m 12.499937,5.5 1.25e-4,-2 -6.156187,0 L 5.71875,1.5 0.5,1.5 0.5,15"
id="path4149"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc" />
sodipodi:nodetypes="cccccc" />
</svg>

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -25,6 +25,8 @@
div {
background-repeat: no-repeat;
-webkit-mask-repeat:no-repeat;
mask-repeat: no-repeat;
}
.sidebar_body {
background-color: var(--tab_list_background);
@ -108,144 +110,164 @@ div {
/* MAIN TOOLBAR BUTTONS */
#button_bookmarks>.button_img {
-webkit-mask-box-image: url(../theme/toolbar_bookmarks.svg);
-webkit-mask-image: url(../theme/toolbar_bookmarks.svg);
mask-image: url(../theme/toolbar_bookmarks.svg);
}
#button_options>.button_img {
-webkit-mask-box-image: url(../theme/toolbar_options.svg);
-webkit-mask-image: url(../theme/toolbar_options.svg);
mask-image: url(../theme/toolbar_options.svg);
}
#button_settings>.button_img {
-webkit-mask-box-image: url(../theme/toolbar_settings.svg);
-webkit-mask-image: url(../theme/toolbar_settings.svg);
mask-image: url(../theme/toolbar_settings.svg);
}
#button_move .button_img {
-webkit-mask-box-image: url(../theme/toolbar_move.svg);
-webkit-mask-image: url(../theme/toolbar_move.svg);
mask-image: url(../theme/toolbar_move.svg);
}
#button_pin>.button_img {
-webkit-mask-box-image: url(../theme/toolbar_pin.svg);
-webkit-mask-image: url(../theme/toolbar_pin.svg);
mask-image: url(../theme/toolbar_pin.svg);
}
#button_history>.button_img {
-webkit-mask-box-image: url(../theme/toolbar_history.svg);
-webkit-mask-image: url(../theme/toolbar_history.svg);
mask-image: url(../theme/toolbar_history.svg);
}
#button_undo>.button_img {
-webkit-mask-box-image: url(../theme/toolbar_undo.svg);
-webkit-mask-image: url(../theme/toolbar_undo.svg);
mask-image: url(../theme/toolbar_undo.svg);
}
#button_downloads>.button_img {
-webkit-mask-box-image: url(../theme/toolbar_downloads.svg);
-webkit-mask-image: url(../theme/toolbar_downloads.svg);
mask-image: url(../theme/toolbar_downloads.svg);
}
#button_extensions>.button_img {
-webkit-mask-box-image: url(../theme/toolbar_extensions.svg);
-webkit-mask-image: url(../theme/toolbar_extensions.svg);
mask-image: url(../theme/toolbar_extensions.svg);
}
#button_discard>.button_img {
-webkit-mask-box-image: url(../theme/toolbar_discard.svg);
-webkit-mask-image: url(../theme/toolbar_discard.svg);
mask-image: url(../theme/toolbar_discard.svg);
}
#button_new>.button_img {
-webkit-mask-box-image: url(../theme/toolbar_plus_big.svg);
-webkit-mask-image: url(../theme/toolbar_plus_big.svg);
mask-image: url(../theme/toolbar_plus_big.svg);
}
#button_tools>.button_img {
-webkit-mask-box-image: url(../theme/toolbar_wrench.svg);
-webkit-mask-image: url(../theme/toolbar_wrench.svg);
mask-image: url(../theme/toolbar_wrench.svg);
}
#button_search>.button_img {
-webkit-mask-box-image: url(../theme/toolbar_search.svg);
-webkit-mask-image: url(../theme/toolbar_search.svg);
mask-image: url(../theme/toolbar_search.svg);
}
#button_groups>.button_img {
-webkit-mask-box-image: url(../theme/toolbar_groups.svg);
-webkit-mask-image: url(../theme/toolbar_groups.svg);
mask-image: url(../theme/toolbar_groups.svg);
}
#button_groups_toolbar_hide>.button_img {
-webkit-mask-box-image: url(../theme/toolbar_groups_hide.svg);
-webkit-mask-image: url(../theme/toolbar_groups_hide.svg);
mask-image: url(../theme/toolbar_groups_hide.svg);
}
#button_new_group>.button_img {
-webkit-mask-box-image: url(../theme/toolbar_plus_small.svg);
-webkit-mask-image: url(../theme/toolbar_plus_small.svg);
mask-image: url(../theme/toolbar_plus_small.svg);
}
#button_edit_group>.button_img {
-webkit-mask-box-image: url(../theme/toolbar_edit.svg);
-webkit-mask-image: url(../theme/toolbar_edit.svg);
mask-image: url(../theme/toolbar_edit.svg);
}
#button_remove_group>.button_img {
-webkit-mask-box-image: url(../theme/toolbar_trashcan.svg);
-webkit-mask-image: url(../theme/toolbar_trashcan.svg);
mask-image: url(../theme/toolbar_trashcan.svg);
}
#button_import_group>.button_img {
-webkit-mask-box-image: url(../theme/toolbar_import.svg);
-webkit-mask-image: url(../theme/toolbar_import.svg);
mask-image: url(../theme/toolbar_import.svg);
}
#button_load_bak1>.button_img {
-webkit-mask-box-image: url(../theme/toolbar_load_bak1.svg);
-webkit-mask-image: url(../theme/toolbar_load_bak1.svg);
mask-image: url(../theme/toolbar_load_bak1.svg);
}
#button_load_bak2>.button_img {
-webkit-mask-box-image: url(../theme/toolbar_load_bak2.svg);
-webkit-mask-image: url(../theme/toolbar_load_bak2.svg);
mask-image: url(../theme/toolbar_load_bak2.svg);
}
#button_load_bak3>.button_img {
-webkit-mask-box-image: url(../theme/toolbar_load_bak3.svg);
-webkit-mask-image: url(../theme/toolbar_load_bak3.svg);
mask-image: url(../theme/toolbar_load_bak3.svg);
}
#button_backup>.button_img {
-webkit-mask-box-image: url(../theme/toolbar_save.svg);
-webkit-mask-image: url(../theme/toolbar_save.svg);
mask-image: url(../theme/toolbar_save.svg);
}
#button_export_bak>.button_img {
-webkit-mask-box-image: url(../theme/toolbar_save.svg);
-webkit-mask-image: url(../theme/toolbar_save.svg);
mask-image: url(../theme/toolbar_save.svg);
}
#button_import_merge_bak>.button_img {
-webkit-mask-box-image: url(../theme/toolbar_merge.svg);
-webkit-mask-image: url(../theme/toolbar_merge.svg);
mask-image: url(../theme/toolbar_merge.svg);
}
#button_import_bak>.button_img {
-webkit-mask-box-image: url(../theme/toolbar_import.svg);
-webkit-mask-image: url(../theme/toolbar_import.svg);
mask-image: url(../theme/toolbar_import.svg);
}
#button_export_group>.button_img {
-webkit-mask-box-image: url(../theme/toolbar_save.svg);
-webkit-mask-image: url(../theme/toolbar_save.svg);
mask-image: url(../theme/toolbar_save.svg);
}
#button_folders>.button_img {
-webkit-mask-image: url(../theme/toolbar_folder.svg);
mask-image: url(../theme/toolbar_folder.svg);
}
#button_new_folder>.button_img {
-webkit-mask-image: url(../theme/toolbar_plus_small.svg);
mask-image: url(../theme/toolbar_plus_small.svg);
}
#button_edit_folder>.button_img {
-webkit-mask-image: url(../theme/toolbar_edit.svg);
mask-image: url(../theme/toolbar_edit.svg);
}
#button_remove_folder>.button_img {
-webkit-mask-image: url(../theme/toolbar_trashcan.svg);
mask-image: url(../theme/toolbar_trashcan.svg);
}
/* MAIN TOOLBAR SEARCHBOX */
#button_filter_type.url>.button_img {
-webkit-mask-box-image: url(../theme/toolbar_filter_url.svg);
-webkit-mask-image: url(../theme/toolbar_filter_url.svg);
mask-image: url(../theme/toolbar_filter_url.svg);
}
#button_filter_type.title>.button_img {
-webkit-mask-box-image: url(../theme/toolbar_filter_title.svg);
-webkit-mask-image: url(../theme/toolbar_filter_title.svg);
mask-image: url(../theme/toolbar_filter_title.svg);
}
@ -255,14 +277,14 @@ div {
}
#filter_search_go_prev>.button_img {
-webkit-mask-box-image: url(../theme/toolbar_filter_search_go_prev.svg);
-webkit-mask-image: url(../theme/toolbar_filter_search_go_prev.svg);
mask-image: url(../theme/toolbar_filter_search_go_prev.svg);
width: 16px;
background-size: 16px 22px;
}
#filter_search_go_next>.button_img {
-webkit-mask-box-image: url(../theme/toolbar_filter_search_go_next.svg);
-webkit-mask-image: url(../theme/toolbar_filter_search_go_next.svg);
mask-image: url(../theme/toolbar_filter_search_go_next.svg);
width: 16px;
background-size: 16px 22px;
@ -299,7 +321,7 @@ div {
#button_filter_clear {
display: inline-block;
vertical-align: top;
-webkit-mask-box-image: url(../theme/toolbar_filter_clear.svg);
-webkit-mask-image: url(../theme/toolbar_filter_clear.svg);
mask-image: url(../theme/toolbar_filter_clear.svg);
top: 5.5px;
right: 4px;
@ -430,89 +452,88 @@ div {
/* GROUP EDIT DIALOG */
/* GROUP AND FOLDER EDIT DIALOG */
#group_edit {
.edit_dialog {
z-index: 1000;
position: absolute;
overflow: hidden;
width: calc(100% - 28px);
height: 53px;
background-color: #efefef;
background-color: var(--tabs_menu_background);
display: none;
word-wrap: normal;
white-space: initial;
font-family: Arial, Helvetica, "Nimbus Sans L", "Liberation Sans", FreeSans, Sans-serif; font-size: 12px;
border: 1px solid #bebebe;
border: 1px solid var(--tabs_menu_border);
padding: 0px 0px 0px 0px;
background: #ffffff;
color: var(--tabs_menu_font);
}
#group_edit_font,
#group_edit_name,
#group_edit_confirm,
#group_edit_discard {
.edit_dialog_confirm,
.edit_dialog_discard {
position: absolute;
}
#group_edit_font {
display: inline-block;
top: 5px;
width: 19px; height: 19px;
border: 1px solid #bebebe;
background-color: #000000;
color: var(--tabs_menu_font);
}
#group_edit_font {
right: 5px;
}
#group_edit_name {
display: inline-block;
vertical-align: top;
top: 5px; left: 5px; width: calc(100% - 37px);
}
#group_edit_confirm,
#group_edit_discard {
.edit_dialog_confirm,
.edit_dialog_discard {
line-height: 17px;
font-family: Arial, Helvetica, "Nimbus Sans L", "Liberation Sans", FreeSans, Sans-serif;
font-size: 11px;
color: #000000;
text-overflow: ellipsis;
background: transparent;
text-align: center;
vertical-align: middle;
overflow: hidden;
display: inline-block;
top: 30px;
width: calc(50% - 8px); height: 17px;
border: 1px solid #bebebe;
border: 1px solid var(--tabs_menu_border);
color: var(--tabs_menu_font);
}
#group_edit_confirm {
.edit_dialog_confirm {
left: 5px;
}
#group_edit_discard {
.edit_dialog_discard {
left: calc(50% + 1px);
}
.edit_dialog_confirm:hover,
.edit_dialog_discard:hover {
border: 1px solid var(--tabs_menu_hover_border);
background-color: var(--tabs_menu_hover_background);
}
.edit_dialog_edit_name {
position: absolute;
display: inline-block;
vertical-align: top;
top: 4px; left: 5px;
width: calc(100% - 38px); height: 19px;
background-color: var(--filter_box_background);
border: solid 1px var(--filter_box_border);
color: var(--filter_box_font);
}
.edit_dialog_edit_name:focus {
outline: none;
}
#folder_edit_name {
width: calc(100% - 14px);
}
#group_edit_font {
position: absolute;
display: inline-block;
top: 5px;
right: 5px;
width: 19px; height: 19px;
border: 1px solid var(--tabs_menu_border);
background-color: #000000;
color: var(--tabs_menu_font);
}
#group_edit_font:hover {
opacity: 0.8;
}
#group_edit_confirm:hover,
#group_edit_discard:hover {
background-color: #dcdcdc;
}
@ -541,61 +562,61 @@ div {
font-weight:var(--tab_hover_title_font_weight);
}
/* normal selected */
.selected>.tab_header{
.selected_tab>.tab_header{
border:1px solid var(--tab_selected_border);
background-color:var(--tab_selected_background);
}
.tab.selected>.tab_header>.tab_title{
.tab.selected_tab>.tab_header>.tab_title{
color:var(--tab_selected_title_font_color);
font-style:var(--tab_selected_title_font_style);
font-weight:var(--tab_selected_title_font_weight);
}
/* normal selected hover */
.selected>.tab_header_hover{
.selected_tab>.tab_header_hover{
border:1px solid var(--tab_selected_hover_border);
background-color:var(--tab_selected_hover_background);
}
.tab.selected>.tab_header_hover>.tab_title{
.tab.selected_tab>.tab_header_hover>.tab_title{
color:var(--tab_selected_hover_title_font_color);
font-style:var(--tab_selected_hover_title_font_style);
font-weight:var(--tab_selected_hover_title_font_weight);
}
/* normal active */
.active>.tab_header{
.active_tab>.tab_header{
border:1px solid var(--tab_active_border);
background-color:var(--tab_active_background);
}
.tab.active>.tab_header>.tab_title{
.tab.active_tab>.tab_header>.tab_title{
color:var(--tab_active_title_font_color);
font-style:var(--tab_active_title_font_style);
font-weight:var(--tab_active_title_font_weight);
}
/* normal active hover */
.active>.tab_header_hover{
.active_tab>.tab_header_hover{
border:1px solid var(--tab_active_hover_border);
background-color:var(--tab_active_hover_background);
}
.tab.active>.tab_header_hover>.tab_title{
.tab.active_tab>.tab_header_hover>.tab_title{
color:var(--tab_active_hover_title_font_color);
font-style:var(--tab_active_hover_title_font_style);
font-weight:var(--tab_active_hover_title_font_weight);
}
/* normal selected active */
.selected.active>.tab_header{
.selected_tab.active_tab>.tab_header{
border:1px solid var(--tab_active_selected_border);
background-color:var(--tab_active_selected_background);
}
.tab.selected.active>.tab_header>.tab_title{
.tab.selected_tab.active_tab>.tab_header>.tab_title{
color:var(--tab_active_selected_title_font_color);
font-style:var(--tab_active_selected_title_font_style);
font-weight:var(--tab_active_selected_title_font_weight);
}
/* normal selected active hover */
.selected.active>.tab_header_hover{
.selected_tab.active_tab>.tab_header_hover{
border:1px solid var(--tab_selected_active_hover_border);
background-color:var(--tab_selected_active_hover_background);
}
.tab.selected.active>.tab_header_hover>.tab_title{
.tab.selected_tab.active_tab>.tab_header_hover>.tab_title{
color:var(--tab_selected_active_hover_title_font_color);
font-style:var(--tab_selected_active_hover_title_font_style);
font-weight:var(--tab_selected_active_hover_title_font_weight);
@ -621,21 +642,21 @@ div {
font-weight:var(--tab_discarded_hover_title_font_weight);
}
/* unloaded selected */
.selected.discarded>.tab_header{
.selected_tab.discarded>.tab_header{
border:1px solid var(--tab_selected_discarded_border);
background-color:var(--tab_selected_discarded_background);
}
.tab.selected.discarded>.tab_header>.tab_title{
.tab.selected_tab.discarded>.tab_header>.tab_title{
color:var(--tab_selected_discarded_title_font_color);
font-style:var(--tab_selected_discarded_title_font_style);
font-weight:var(--tab_selected_discarded_title_font_weight);
}
/* unloaded selected hover */
.selected.discarded>.tab_header_hover{
.selected_tab.discarded>.tab_header_hover{
border:1px solid var(--tab_selected_discarded_hover_border);
background-color:var(--tab_selected_discarded_hover_background);
}
.tab.selected.discarded>.tab_header_hover>.tab_title{
.tab.selected_tab.discarded>.tab_header_hover>.tab_title{
color:var(--tab_selected_discarded_hover_title_font_color);
font-style:var(--tab_selected_discarded_hover_title_font_style);
font-weight:var(--tab_selected_discarded_hover_title_font_weight);
@ -661,61 +682,61 @@ div {
font-weight:var(--tab_filtered_hover_title_font_weight);
}
/* search result active */
.filtered.active>.tab_header{
.filtered.active_tab>.tab_header{
border:1px solid var(--tab_filtered_active_border);
background-color:var(--tab_filtered_active_background);
}
.tab.filtered.active>.tab_header>.tab_title{
.tab.filtered.active_tab>.tab_header>.tab_title{
color:var(--tab_filtered_active_title_font_color);
font-style:var(--tab_filtered_active_title_font_style);
font-weight:var(--tab_filtered_active_title_font_weight);
}
/* search result active hover */
.filtered.active>.tab_header_hover{
.filtered.active_tab>.tab_header_hover{
border:1px solid var(--tab_filtered_active_hover_border);
background-color:var(--tab_filtered_active_hover_background);
}
.tab.filtered.active>.tab_header_hover>.tab_title{
.tab.filtered.active_tab>.tab_header_hover>.tab_title{
color:var(--tab_filtered_active_hover_title_font_color);
font-style:var(--tab_filtered_active_hover_title_font_style);
font-weight:var(--tab_filtered_active_hover_title_font_weight);
}
/* search result selected */
.selected.filtered>.tab_header{
.selected_tab.filtered>.tab_header{
border:1px solid var(--tab_filtered_selected_border);
background-color:var(--tab_filtered_selected_background);
}
.tab.selected.filtered>.tab_header>.tab_title{
.tab.selected_tab.filtered>.tab_header>.tab_title{
color:var(--tab_filtered_selected_title_font_color);
font-style:var(--tab_filtered_selected_title_font_style);
font-weight:var(--tab_filtered_selected_title_font_weight);
}
/* search result selected hover */
.selected.filtered>.tab_header_hover{
.selected_tab.filtered>.tab_header_hover{
border:1px solid var(--tab_filtered_selected_hover_border);
background-color:var(--tab_filtered_selected_hover_background);
}
.tab.selected.filtered>.tab_header_hover>.tab_title{
.tab.selected_tab.filtered>.tab_header_hover>.tab_title{
color:var(--tab_filtered_selected_hover_title_font_color);
font-style:var(--tab_filtered_selected_hover_title_font_style);
font-weight:var(--tab_filtered_selected_hover_title_font_weight);
}
/* search result active selected */
.selected.filtered.active>.tab_header{
.selected_tab.filtered.active_tab>.tab_header{
border:1px solid var(--tab_filtered_selected_active_border);
background-color:var(--tab_filtered_selected_active_background);
}
.tab.selected.filtered.active>.tab_header>.tab_title{
.tab.selected_tab.filtered.active_tab>.tab_header>.tab_title{
color:var(--tab_filtered_selected_active_title_font_color);
font-style:var(--tab_filtered_selected_active_title_font_style);
font-weight:var(--tab_filtered_selected_active_title_font_weight);
}
/* search result active selected hover */
.selected.filtered.active>.tab_header_hover{
.selected_tab.filtered.active_tab>.tab_header_hover{
border:1px solid var(--tab_filtered_selected_active_hover_border);
background-color:var(--tab_filtered_selected_active_hover_background);
}
.tab.filtered.selected.active>.tab_header_hover>.tab_title{
.tab.filtered.selected_tab.active_tab>.tab_header_hover>.tab_title{
color:var(--tab_filtered_selected_active_hover_title_font_color);
font-style:var(--tab_filtered_selected_active_hover_title_font_style);
font-weight:var(--tab_filtered_selected_active_hover_title_font_weight);
@ -741,61 +762,61 @@ div {
font-weight:var(--tab_filtered_highlighted_search_hover_title_font_weight);
}
/* search result active highlighted */
.active.filtered.highlighted_search>.tab_header{
.active_tab.filtered.highlighted_search>.tab_header{
border:1px solid var(--tab_filtered_active_highlighted_search_border);
background-color:var(--tab_filtered_active_highlighted_search_background);
}
.tab.active.filtered.highlighted_search>.tab_header>.tab_title{
.tab.active_tab.filtered.highlighted_search>.tab_header>.tab_title{
color:var(--tab_filtered_active_highlighted_search_title_font_color);
font-style:var(--tab_filtered_active_highlighted_search_title_font_style);
font-weight:var(--tab_filtered_active_highlighted_search_title_font_weight);
}
/* search result active highlighted hover */
.active.filtered.highlighted_search>.tab_header_hover{
.active_tab.filtered.highlighted_search>.tab_header_hover{
border:1px solid var(--tab_filtered_active_highlighted_search_hover_border);
background-color:var(--tab_filtered_active_highlighted_search_hover_background);
}
.tab.active.filtered.highlighted_search>.tab_header_hover>.tab_title{
.tab.active_tab.filtered.highlighted_search>.tab_header_hover>.tab_title{
color:var(--tab_filtered_active_highlighted_search_hover_title_font_color);
font-style:var(--tab_filtered_active_highlighted_search_hover_title_font_style);
font-weight:var(--tab_filtered_active_highlighted_search_hover_title_font_weight);
}
/* search result selected highlighted */
.selected.filtered.highlighted_search>.tab_header{
.selected_tab.filtered.highlighted_search>.tab_header{
border:1px solid var(--tab_filtered_selected_highlighted_search_border);
background-color:var(--tab_filtered_selected_highlighted_search_background);
}
.tab.selected.filtered.highlighted_search>.tab_header>.tab_title{
.tab.selected_tab.filtered.highlighted_search>.tab_header>.tab_title{
color:var(--tab_filtered_selected_highlighted_search_title_font_color);
font-style:var(--tab_filtered_selected_highlighted_search_title_font_style);
font-weight:var(--tab_filtered_selected_highlighted_search_title_font_weight);
}
/* search result selected highlighted hover */
.selected.filtered.highlighted_search>.tab_header_hover{
.selected_tab.filtered.highlighted_search>.tab_header_hover{
border:1px solid var(--tab_filtered_selected_highlighted_search_hover_border);
background-color:var(--tab_filtered_selected_highlighted_search_hover_background);
}
.tab.selected.filtered.highlighted_search>.tab_header_hover>.tab_title{
.tab.selected_tab.filtered.highlighted_search>.tab_header_hover>.tab_title{
color:var(--tab_filtered_selected_highlighted_search_hover_title_font_color);
font-style:var(--tab_filtered_selected_highlighted_search_hover_title_font_style);
font-weight:var(--tab_filtered_selected_highlighted_search_hover_title_font_weight);
}
/* search result selected active highlighted */
.active.selected.filtered.highlighted_search>.tab_header{
.active_tab.selected_tab.filtered.highlighted_search>.tab_header{
border:1px solid var(--tab_filtered_selected_active_highlighted_search_border);
background-color:var(--tab_filtered_selected_active_highlighted_search_background);
}
.tab.active.selected.filtered.highlighted_search>.tab_header>.tab_title{
.tab.active_tab.selected_tab.filtered.highlighted_search>.tab_header>.tab_title{
color:var(--tab_filtered_selected_active_highlighted_search_title_font_color);
font-style:var(--tab_filtered_selected_active_highlighted_search_title_font_style);
font-weight:var(--tab_filtered_selected_active_highlighted_search_title_font_weight);
}
/* search result selected active highlighted hover */
.active.selected.filtered.highlighted_search>.tab_header_hover{
.active_tab.selected_tab.filtered.highlighted_search>.tab_header_hover{
border:1px solid var(--tab_filtered_selected_active_highlighted_search_hover_border);
background-color:var(--tab_filtered_selected_active_highlighted_search_hover_background);
}
.tab.active.selected.filtered.highlighted_search>.tab_header_hover>.tab_title{
.tab.active_tab.selected_tab.filtered.highlighted_search>.tab_header_hover>.tab_title{
color:var(--tab_filtered_selected_active_highlighted_search_hover_title_font_color);
font-style:var(--tab_filtered_selected_active_highlighted_search_hover_title_font_style);
font-weight:var(--tab_filtered_selected_active_highlighted_search_hover_title_font_weight);
@ -844,8 +865,8 @@ div {
height: var(--tab_height);
line-height: var(--tab_height_line);
width: calc(100% - 4px);
background-image: url(../theme/empty.svg);
background-size: var(--favicon_size);
background-image: url(../theme/icon_empty.svg);
background-size: var(--favicon_width) var(--favicon_height);
background-position: var(--favicon_left), center;
}
@ -853,8 +874,8 @@ div {
/* DRAG AND DROP TARGETS */
.drop_target {
display: none;
position: absolute;
pointer-events: none;
}
.tab>.drag_enter_center {
@ -919,28 +940,24 @@ div {
/* TABS WITH CHILDREN, OPEN AND CLOSED */
.tab.c>.tab_header,
.tab.o>.tab_header {
background-position: calc(var(--favicon_left) + 8px), center;
}
.tab.c>.tab_header>.tab_title,
.tab.o>.tab_header>.tab_title {
padding-left: calc(var(--tab_title_text_padding_left) + 8px);
}
.expand {
z-index: 200;
position: absolute;
top: calc(var(--tab_height)/2 - 8px);
top: 0px;
left: 0px;
width: 24px;
height: 16px;
height: var(--expand_height);
width: var(--expand_width);
-webkit-mask-position: var(--expand_mask_left) var(--expand_mask_top);
-webkit-mask-size: var(--expand_mask_width) var(--expand_mask_height);
mask-size: var(--expand_mask_width) var(--expand_mask_height);
mask-position: var(--expand_mask_left) var(--expand_mask_top);
}
/* CHILDREN TABS */
.tab>.children {
position: relative;
padding-left: var(--children_padding_left);
/* padding-left: 4%; */
}
.tab.o>.children {
@ -958,25 +975,29 @@ div {
}
.tab.c>.tab_header>.expand {
background-size: 24px 16px;
background-position: 0px center;
background-color: var(--expand_closed_background);
-webkit-mask-box-image: url(../theme/expand_closed.svg);
mask-image: url(../theme/expand_closed.svg);
-webkit-mask-image: url(../theme/expand_c.svg);
}
.tab.o>.tab_header>.expand {
background-size: 24px 16px;
background-position: 0px center;
background-color: var(--expand_open_background);
-webkit-mask-box-image: url(../theme/expand_open.svg);
mask-image: url(../theme/expand_open.svg);
-webkit-mask-image: url(../theme/expand_o.svg);
}
.o.tab>.tab_header>.tab_title,
.c.tab>.tab_header>.tab_title {
padding-left: var(--tab_title_text_padding_exp_left);
}
/* FOLDERS */
/* .group>.children_folders{
background-color: var(--folder_list_background);
} */
.folder_title {
z-index: 5;
font-family: Arial, Helvetica, "Nimbus Sans L", "Liberation Sans", FreeSans, Sans-serif;
@ -1009,13 +1030,10 @@ div {
height: var(--tab_height);
line-height: var(--tab_height_line);
width: calc(100% - 4px);
border-radius:var(--tab_header_border_radius);
border:1px solid var(--tab_border);
background-color:var(--tab_background);
}
/* .drop_target {
display: none;
position: absolute;
} */
.folder>.drag_enter_center {
border-radius: var(--tab_header_border_radius);
z-index: 11;
@ -1084,41 +1102,74 @@ div {
.folder.o>.folder_header {
background-position: calc(var(--favicon_left) + 8px), center;
}
.folder.c>.folder_header>.folder_title,
.folder.o>.folder_header>.folder_title {
padding-left: calc(var(--tab_title_text_padding_left) + 8px);
}
.folder_icon {
z-index: 200;
position: absolute;
top: calc(var(--tab_height)/2 - 8px);
top: calc(var(--tab_height)/2 - var(--favicon_height)/2);
left: var(--favicon_left);
width: 16px;
height: 16px;
background-size: 16px 16px;
background-position: 0px center;
width: var(--favicon_width);
height: var(--favicon_height);
mask-size: var(--favicon_width) var(--favicon_height);
mask-position: 0px 0px;
-webkit-mask-size: var(--favicon_width) var(--favicon_height);
-webkit-mask-position: 0px 0px;
}
.folder.c>.folder_header>.folder_icon.hover,
.folder.o>.folder_header>.folder_icon.hover {
.folder.c>.folder_header>.folder_icon:hover,
.folder.o>.folder_header>.folder_icon:hover {
background-color: var(--expand_hover_background);
}
.folder>.folder_header>.folder_icon,
.folder.n>.folder_header>.folder_icon,
.folder.c>.folder_header>.folder_icon {
/* background-color: #b2b2b2; */
background-color: var(--expand_closed_background);
-webkit-mask-box-image: url(../theme/folder_closed.svg);
mask-image: url(../theme/folder_closed.svg);
-webkit-mask-image: url(../theme/icon_folder_closed.svg);
mask-image: url(../theme/icon_folder_closed.svg);
}
.folder.o>.folder_header>.folder_icon {
background-color: var(--expand_open_background);
-webkit-mask-box-image: url(../theme/folder_open.svg);
mask-image: url(../theme/folder_open.svg);
-webkit-mask-image: url(../theme/icon_folder_open.svg);
mask-image: url(../theme/icon_folder_open.svg);
}
/* normal hover */
.folder>.folder_header_hover{
border-radius:var(--tab_header_border_radius);
border:1px solid var(--tab_hover_border);
background-color:var(--tab_hover_background);
}
/* normal selected */
.selected_folder>.folder_header{
border:1px solid var(--tab_selected_border);
background-color:var(--tab_selected_background);
}
.selected_folder>.folder_header>.folder_title{
color:var(--tab_selected_title_font_color);
font-style:var(--tab_selected_title_font_style);
font-weight:var(--tab_selected_title_font_weight);
}
/* normal selected hover */
.selected_folder>.folder_header_hover{
border:1px solid var(--tab_selected_hover_border);
background-color:var(--tab_selected_hover_background);
}
.selected_folder>.folder_header_hover>.folder_title{
color:var(--tab_selected_hover_title_font_color);
font-style:var(--tab_selected_hover_title_font_style);
font-weight:var(--tab_selected_hover_title_font_weight);
}
.children_folders>:last-child {
margin-bottom: 1px;
}
/* PINS */
@ -1152,8 +1203,8 @@ div {
.pin>.tab_header {
height: calc(100% - 3px);
width: calc(100% - 3px);
background-image: url(../theme/empty.svg);
background-size: var(--favicon_size);
background-image: url(../theme/icon_empty.svg);
background-size: var(--favicon_width) var(--favicon_height);
background-position: center, center;
}
@ -1198,34 +1249,41 @@ div {
/* MEDIA */
.tab.c>.tab_header>.tab_mediaicon,
/* .tab.c>.tab_header>.tab_mediaicon,
.tab.o>.tab_header>.tab_mediaicon {
left: calc(var(--pin_width) - 4px);
}
} */
.tab_mediaicon {
position: absolute;
display: inline-block;
vertical-align: top;
z-index: 999;
bottom: 2px;
left: calc(var(--pin_width) - 12px);
left: var(--tab_mediaicon_left);
bottom: var(--tab_mediaicon_bottom);
height: 0px;
width: 0px;
background-size: 0px 0px;
}
.audible>.tab_header>.tab_mediaicon {
height: 10px;
width: 10px;
background-image: url(../theme/media.gif);
background-size: 10px 10px;
height: var(--tab_mediaicon_height);
width: var(--tab_mediaicon_width);
background-image: url(../theme/icon_audio.svg);
background-size: var(--tab_mediaicon_width) var(--tab_mediaicon_height);
}
.audible>.tab_header>.tab_mediaicon:hover {
background-image: url(../theme/icon_audio_hover.svg);
}
.muted>.tab_header>.tab_mediaicon {
height: 10px;
width: 10px;
background-image: url(../theme/media_muted.gif);
background-size: 10px 10px;
height: var(--tab_mediaicon_height);
width: var(--tab_mediaicon_width);
background-image: url(../theme/icon_audio_muted.svg);
background-size: var(--tab_mediaicon_width) var(--tab_mediaicon_height);
}
.muted>.tab_header>.tab_mediaicon:hover {
background-image: url(../theme/icon_audio_muted_hover.svg);
}
@ -1258,7 +1316,7 @@ div {
height: 100%;
width: 100%;
background-color: var(--close_x);
-webkit-mask-box-image: url(../theme/close.svg);
-webkit-mask-image: url(../theme/close.svg);
mask-image: url(../theme/close.svg);
mask-size: 100%;
mask-position: center, center;
@ -1290,7 +1348,7 @@ div {
/* MENU */
#tabs_menu {
.menu {
position: absolute;
overflow: hidden;
display: none;
@ -1305,18 +1363,18 @@ div {
color: var(--tabs_menu_font);
}
#tabs_menu li {
.menu li {
padding: 3px 8px;
border: 1px solid var(--tabs_menu_background);
list-style-type: none;
}
#tabs_menu li:hover {
.menu li:hover {
border: 1px solid var(--tabs_menu_hover_border);
background-color: var(--tabs_menu_hover_background);
}
#tabs_menu .separator {
.menu .separator {
height: 1px;
width: 80%;
background-color: var(--tabs_menu_separator);

View File

@ -247,8 +247,10 @@ body {
--tab_filtered_selected_active_highlighted_search_hover_title_font_style: italic;
--tab_filtered_selected_active_highlighted_search_hover_title_font_weight: bold;
/* folders */
/* --folder_list_background: #fafafa; */
--expand_hover_background: #ffa500;
--expand_closed_background: #969696;
--expand_open_background: #339bf3;

View File

@ -12,12 +12,21 @@ body {
--title_font_size: 10.5px;
--tab_title_text_padding_left: 19px;
--tab_title_text_padding_left: 18px;
--tab_title_text_padding_exp_left: 25px;
--tab_title_text_padding_right_with_close_button: 20px;
--favicon_size: 13px 13px;
--favicon_left: 4px;
--favicon_width: 13px;
--favicon_height: 13px;
--favicon_left: 1px;
--expand_height: 15px;
--expand_width: 26px;
--expand_mask_top: 6px;
--expand_mask_left: 18px;
--expand_mask_height: 4px;
--expand_mask_width: 4px;
--drag_area_top: 6px;
--drag_area_bottom: 4px;
@ -27,4 +36,9 @@ body {
--close_right: 1px;
--close_height: 11px;
--close_width: 11px;
--tab_mediaicon_height: 8px;
--tab_mediaicon_width: 8px;
--tab_mediaicon_left: 1px;
--tab_mediaicon_bottom: 1px;
}

View File

@ -12,12 +12,21 @@ body {
--title_font_size: 10.5px;
--tab_title_text_padding_left: 23px;
--tab_title_text_padding_left: 21px;
--tab_title_text_padding_exp_left: 30px;
--tab_title_text_padding_right_with_close_button: 20px;
--favicon_size: 14px 14px;
--favicon_left: 5px;
--favicon_width: 15px;
--favicon_height: 15px;
--favicon_left: 1px;
--expand_height: 17px;
--expand_width: 30px;
--expand_mask_top: 7px;
--expand_mask_left: 21px;
--expand_mask_height: 5px;
--expand_mask_width: 5px;
--drag_area_top: 6px;
--drag_area_bottom: 4px;
@ -27,4 +36,9 @@ body {
--close_right: 2px;
--close_height: 11px;
--close_width: 11px;
--tab_mediaicon_height: 11px;
--tab_mediaicon_width: 11px;
--tab_mediaicon_left: 1px;
--tab_mediaicon_bottom: 1px;
}

View File

@ -13,11 +13,20 @@ body {
--title_font_size: 12px;
--tab_title_text_padding_left: 26px;
--tab_title_text_padding_exp_left: 35px;
--tab_title_text_padding_right_with_close_button: 19px;
--favicon_size: 16px 16px;
--favicon_left: 5px;
--favicon_width: 17px;
--favicon_height: 17px;
--favicon_left: 1px;
--expand_height: 19px;
--expand_width: 36px;
--expand_mask_top: 7px;
--expand_mask_left: 24px;
--expand_mask_height: 6px;
--expand_mask_width: 6px;
--drag_area_top: 7px;
--drag_area_bottom: 5px;
@ -27,4 +36,9 @@ body {
--close_right: 2px;
--close_height: 13px;
--close_width: 13px;
--tab_mediaicon_height: 11px;
--tab_mediaicon_width: 11px;
--tab_mediaicon_left: 1px;
--tab_mediaicon_bottom: 1px;
}

View File

@ -12,12 +12,21 @@ body {
--title_font_size: 12px;
--tab_title_text_padding_left: 26px;
--tab_title_text_padding_left: 25px;
--tab_title_text_padding_exp_left: 37px;
--tab_title_text_padding_right_with_close_button: 24px;
--favicon_size: 16px 16px;
--favicon_left: 6px;
--favicon_width: 17px;
--favicon_height: 17px;
--favicon_left: 2px;
--expand_height: 21px;
--expand_width: 38px;
--expand_mask_top: 8px;
--expand_mask_left: 25px;
--expand_mask_height: 7px;
--expand_mask_width: 7px;
--drag_area_top: 8px;
--drag_area_bottom: 5px;
@ -27,4 +36,9 @@ body {
--close_right: 3px;
--close_height: 13px;
--close_width: 13px;
--tab_mediaicon_height: 12px;
--tab_mediaicon_width: 12px;
--tab_mediaicon_left: 1px;
--tab_mediaicon_bottom: 1px;
}

View File

@ -12,12 +12,21 @@ body {
--title_font_size: 14px;
--tab_title_text_padding_left: 26px;
--tab_title_text_padding_left: 27px;
--tab_title_text_padding_exp_left: 39px;
--tab_title_text_padding_right_with_close_button: 24px;
--favicon_size: 16px 16px;
--favicon_left: 6px;
--favicon_width: 17px;
--favicon_height: 17px;
--favicon_left: 3px;
--expand_height: 23px;
--expand_width: 41px;
--expand_mask_top: 9px;
--expand_mask_left: 27px;
--expand_mask_height: 7px;
--expand_mask_width: 7px;
--drag_area_top: 9px;
--drag_area_bottom: 6px;
@ -27,4 +36,9 @@ body {
--close_right: 4px;
--close_height: 14px;
--close_width: 14px;
--tab_mediaicon_height: 12px;
--tab_mediaicon_width: 12px;
--tab_mediaicon_left: 1px;
--tab_mediaicon_bottom: 1px;
}

74
theme/toolbar_folder.svg Normal file
View File

@ -0,0 +1,74 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg3347"
version="1.1"
inkscape:version="0.91 r13725"
width="22"
height="22"
viewBox="0 0 22 22"
sodipodi:docname="toolbar_folder.svg">
<metadata
id="metadata3353">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs3351" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1058"
id="namedview3349"
showgrid="false"
inkscape:zoom="22.627417"
inkscape:cx="14.698991"
inkscape:cy="11.544138"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg3347"
inkscape:snap-page="true"
inkscape:snap-center="true"
inkscape:snap-midpoints="true"
inkscape:snap-bbox="true"
inkscape:bbox-paths="true"
inkscape:bbox-nodes="true"
inkscape:snap-bbox-edge-midpoints="true"
inkscape:snap-bbox-midpoints="true"
inkscape:object-paths="true" />
<path
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 4.9999998,7.9999928 0,10.0000002 13.0000002,0 0,-10.0000002 z"
id="path4138"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 17.499937,8.4999928 1.25e-4,-2 -6.156187,0 -0.625125,-2 -5.2187502,0 0,13.5000002"
id="path4149"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccc" />
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB