bumpt to v1.3
BIN
..Screenshots/001.png
Normal file
After Width: | Height: | Size: 9.8 KiB |
BIN
..Screenshots/002.png
Normal file
After Width: | Height: | Size: 9.9 KiB |
BIN
..Screenshots/003.png
Normal file
After Width: | Height: | Size: 9.8 KiB |
BIN
..Screenshots/004.png
Normal file
After Width: | Height: | Size: 9.8 KiB |
BIN
..Screenshots/005.png
Normal file
After Width: | Height: | Size: 9.5 KiB |
BIN
..Screenshots/006.png
Normal file
After Width: | Height: | Size: 9.7 KiB |
Before Width: | Height: | Size: 169 KiB After Width: | Height: | Size: 169 KiB |
Before Width: | Height: | Size: 166 KiB After Width: | Height: | Size: 166 KiB |
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 7.3 KiB |
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 96 KiB After Width: | Height: | Size: 96 KiB |
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 7.6 KiB |
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 7.7 KiB |
BIN
..Screenshots/toolbar/F1Search.png
Normal file
After Width: | Height: | Size: 37 KiB |
BIN
..Screenshots/toolbar/F1Search.psd
Normal file
BIN
..Screenshots/toolbar/F2Settings.png
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
..Screenshots/toolbar/F2Settings.psd
Normal file
BIN
..Screenshots/toolbar/F3Groups.png
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
..Screenshots/toolbar/F3Groups.psd
Normal file
BIN
..Screenshots/toolbar/F4Sessions.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
..Screenshots/toolbar/F4Sessions.psd
Normal file
BIN
..Screenshots/toolbar/F5Folders.png
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
..Screenshots/toolbar/F5Folders.psd
Normal 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
|
||||
|
1
..Themes/dark2 by kroppy.tt_theme
Normal file
1
..Themes/dark3 by kroppy.tt_theme
Normal 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"
|
||||
}
|
@ -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>
|
@ -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"
|
||||
}
|
@ -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",
|
@ -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
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB |
77
..theme/expand_closed_0.svg
Normal 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 |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
77
..theme/expand_open_0.svg
Normal 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 |
BIN
Tree Tabs.zip
Normal 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"
|
||||
},
|
||||
|
@ -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>
|
139
bg_ch.js
@ -3,26 +3,29 @@
|
||||
// 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) {
|
||||
chrome.storage.local.get(null, function(storage) {
|
||||
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", []);
|
||||
// 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 = LoadData("tabs_BAK"+retry, []);
|
||||
LoadedTabs = storage["tabs_BAK"+retry] ? storage["tabs_BAK"+retry] : [];
|
||||
}
|
||||
// if loaded windows mismatch, then try to load back
|
||||
if (LoadedWindows.length < w_count || retry > 0) {
|
||||
LoadedWindows = LoadData("windows_BAK"+retry, []);
|
||||
LoadedWindows = storage["windows_BAK"+retry] ? storage["windows_BAK"+retry] : [];
|
||||
}
|
||||
// CACHED COUNTS
|
||||
var WinCount = w.length;
|
||||
@ -33,7 +36,7 @@ function ChromeLoadTabs(retry) {
|
||||
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: {}};
|
||||
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; }
|
||||
@ -55,10 +58,8 @@ function ChromeLoadTabs(retry) {
|
||||
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++) {
|
||||
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++) {
|
||||
@ -85,30 +86,35 @@ function ChromeLoadTabs(retry) {
|
||||
// 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 (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++;
|
||||
schedule_save = 1;
|
||||
running = true;
|
||||
ChromeAutoSaveData("", 1000);
|
||||
ChromeAutoSaveData("_BAK1", 300000);
|
||||
ChromeAutoSaveData("_BAK2", 600000);
|
||||
ChromeAutoSaveData("_BAK3", 1800000);
|
||||
ChromeAutoSaveData(0, 1000);
|
||||
ChromeAutoSaveData(1, 300000);
|
||||
ChromeAutoSaveData(2, 600000);
|
||||
ChromeAutoSaveData(3, 1800000);
|
||||
ChromeListeners();
|
||||
} else {
|
||||
setTimeout(function() {ChromeLoadTabs(retry+1);}, 2000);
|
||||
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--;
|
||||
@ -157,43 +178,34 @@ function ChromeHashURL(tab){
|
||||
}
|
||||
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;
|
||||
}
|
||||
});
|
||||
}
|
191
bg_ff.js
@ -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 {
|
||||
function FirefoxStart(retry) {
|
||||
chrome.windows.getAll({windowTypes: ["normal"], populate: true}, function(w) {
|
||||
FirefoxLoadTabs(0);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (w[0].tabs.length == 1 && (w[0].tabs[0].url == "about:blank" || w[0].tabs[0].url == "about:sessionrestore")) {
|
||||
setTimeout(function() {
|
||||
FirefoxStart();
|
||||
}, 1000);
|
||||
}
|
||||
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,7 +63,6 @@ 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) {
|
||||
@ -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,7 +136,6 @@ async function FirefoxAutoSaveData() {
|
||||
}
|
||||
}, 1000);
|
||||
}
|
||||
|
||||
function GenerateNewWindowID() {
|
||||
var newID = "w_"+GenerateRandomID();
|
||||
var newIdAvailable = true;
|
||||
@ -171,7 +150,6 @@ function GenerateNewWindowID(){
|
||||
GenerateNewWindowID();
|
||||
}
|
||||
}
|
||||
|
||||
function GenerateNewTabID() {
|
||||
var newID = "t_"+GenerateRandomID();
|
||||
var newIdAvailable = true;
|
||||
@ -186,7 +164,6 @@ function GenerateNewTabID(){
|
||||
GenerateNewTabID();
|
||||
}
|
||||
}
|
||||
|
||||
function AppendTabTTId(tabId) {
|
||||
let NewTTTabId = GenerateNewTabID();
|
||||
if (tabs[tabId] != undefined) {
|
||||
@ -194,7 +171,7 @@ function AppendTabTTId(tabId){
|
||||
} 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) {
|
||||
@ -202,81 +179,70 @@ function AppendWinTTId(windowId){
|
||||
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) {
|
||||
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) {
|
||||
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) {
|
||||
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;
|
||||
}
|
||||
});
|
||||
}
|
@ -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>
|
@ -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;
|
||||
}
|
||||
});
|
||||
}
|
98
legacy.js
@ -105,8 +105,6 @@ function LoadV015(retry){
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
function FirefoxLoadV100(retry) {
|
||||
chrome.windows.getAll({windowTypes: ["normal"], populate: true}, function(w) {
|
||||
|
||||
@ -251,3 +249,99 @@ 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;
|
||||
}
|
||||
}
|
||||
|
@ -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"
|
||||
}
|
39
options.html
@ -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>
|
||||
@ -197,12 +205,14 @@
|
||||
|
||||
<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;">
|
||||
|
@ -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 {
|
||||
|
@ -4,32 +4,36 @@
|
||||
|
||||
// ********** 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"]);
|
||||
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_ungrouped_group, "");
|
||||
|
||||
AppendGroupToList("tab_list2", caption_noname_group, "");
|
||||
AppendSampleTabs();
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
// document events
|
||||
function GetOptions() {
|
||||
@ -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"));
|
||||
});
|
||||
@ -83,9 +87,6 @@ function GetOptions() {
|
||||
$(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++) {
|
||||
if ($("#append_child_tab")[0].options[i].value === opt.append_child_tab) {
|
||||
@ -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) {
|
||||
@ -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");
|
||||
@ -295,8 +295,6 @@ function SetEvents() {
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
// ----------------------------------EVENTS FOR CHECKBOXES AND DROPDOWN MENUS---------------------------------------------
|
||||
// set checkbox options on/off and save
|
||||
$(document).on("click", ".bg_opt", function(event) {
|
||||
@ -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);
|
||||
// });
|
||||
}
|
||||
|
||||
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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");
|
||||
|
||||
|
115
options/theme.js
@ -3,95 +3,95 @@
|
||||
// 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]);
|
||||
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() {
|
||||
$("#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();
|
||||
}
|
||||
// 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});
|
||||
}, 200);
|
||||
}, 200);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function SaveTheme(themeName) {
|
||||
localStorage["theme"+themeName] = JSON.stringify(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);
|
||||
setTimeout(function() {
|
||||
LoadTheme(theme_name.value);
|
||||
|
||||
localStorage["themes"] = JSON.stringify(themes);
|
||||
localStorage["current_theme"] = $("#theme_list").val();
|
||||
}, 500);
|
||||
chrome.storage.local.set({current_theme: $("#theme_list").val()});
|
||||
RefreshFields();
|
||||
}
|
||||
|
||||
function DeleteSelectedTheme() {
|
||||
if ($("#theme_list")[0].options.length == 0) {
|
||||
localStorage["current_theme"] = "Default";
|
||||
return;
|
||||
}
|
||||
chrome.storage.local.get(null, function(items) {
|
||||
let LSthemes = items.themes ? Object.assign({}, items.themes) : {};
|
||||
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"]);
|
||||
|
||||
if (LSthemes[current_theme]) {
|
||||
delete LSthemes[current_theme];
|
||||
}
|
||||
chrome.storage.local.set({themes: LSthemes});
|
||||
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();
|
||||
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.runtime.sendMessage({command: "reload_theme", themeName: "themeDefault"});
|
||||
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"));
|
||||
@ -101,17 +101,20 @@ function RenameSelectedTheme() {
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -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; }
|
||||
|
@ -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; }
|
||||
|
@ -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; }
|
||||
|
@ -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; }
|
||||
|
@ -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; }
|
||||
|
@ -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();
|
||||
|
@ -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]));
|
||||
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];
|
||||
}
|
||||
});
|
||||
RearrangeTreeStructure({}, NewFolders, NewTabs);
|
||||
}, 2000);
|
||||
setTimeout(function() {
|
||||
LoadedGroup[1].forEach(function(LTab){
|
||||
if ($("#"+RefsTabs[LTab[1]])[0] && $("#"+LTab[0])[0]) {
|
||||
$("#ch"+RefsTabs[LTab[1]]).append($("#"+LTab[0]));
|
||||
}
|
||||
});
|
||||
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;
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
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 = [];
|
||||
let warn = true;
|
||||
let ExportWindows = [];
|
||||
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]);
|
||||
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 (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]);
|
||||
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;
|
||||
|
||||
let LoadedWindows = JSON.parse(data);
|
||||
let RefsTabs = {};
|
||||
log(LoadedWindows);
|
||||
LoadedWindows.forEach(function(LWin) {
|
||||
TotalTabsCount += LWin[0].length;
|
||||
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] = "";
|
||||
|
||||
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() {
|
||||
chrome.runtime.sendMessage({command: "save_groups", groups: LWin[8], windowId: new_window.id});
|
||||
RefreshExpandStates();
|
||||
RefreshCounters();
|
||||
schedule_update_data++;
|
||||
SaveFolders();
|
||||
}, 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);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
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--;
|
||||
});
|
||||
|
||||
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);
|
||||
});
|
||||
chrome.tabs.remove(new_window.tabs[0].id, null);
|
||||
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 {
|
||||
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) {
|
||||
NewTabs.push(Tab);
|
||||
}
|
||||
});
|
||||
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]});
|
||||
for (let tInd = 0; tInd < NewTabs.length; tInd++) {
|
||||
if (RefsTabs[NewTabs[tInd].parent] != undefined) {
|
||||
NewTabs[tInd].parent = RefsTabs[NewTabs[tInd].parent];
|
||||
}
|
||||
}
|
||||
|
||||
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]}});
|
||||
});
|
||||
});
|
||||
|
||||
}, 4000);
|
||||
setTimeout(function() {
|
||||
chrome.runtime.sendMessage({command: "reload_sidebar"});
|
||||
location.reload();
|
||||
}, 1000);
|
||||
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;
|
||||
});
|
||||
}, 1000);
|
||||
if (HaveResponse || GiveUp > 900) {
|
||||
clearInterval(Append);
|
||||
}
|
||||
});
|
||||
GiveUp++;
|
||||
}, 2000);
|
||||
}
|
||||
});
|
||||
}, 6000);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
@ -5,47 +5,69 @@
|
||||
// ********** CHROME EVENTS ***************
|
||||
|
||||
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();
|
||||
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 (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 });
|
||||
}
|
||||
@ -53,8 +75,7 @@ function StartChromeListeners(){
|
||||
AppendTab({ tab: message.tab, ParentId: message.tab.openerTabId, 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.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 });
|
||||
}
|
||||
@ -65,8 +86,8 @@ function StartChromeListeners(){
|
||||
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,9 +112,14 @@ 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});
|
||||
@ -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);
|
||||
@ -172,6 +204,10 @@ function StartChromeListeners(){
|
||||
RefreshExpandStates();
|
||||
}
|
||||
break;
|
||||
case "remote_update":
|
||||
RearrangeTreeStructure(message.groups, message.folders, message.tabs);
|
||||
sendResponse(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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.Depth = 0;
|
||||
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";
|
||||
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");
|
||||
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)")) {
|
||||
$(".selected").addClass("selected_frozen").removeClass("selected");
|
||||
$(this).parent().addClass("selected_temporarly").addClass("selected");
|
||||
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;
|
||||
}
|
||||
|
||||
$(".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);
|
||||
});
|
||||
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 (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 > opt.max_tree_depth+1) { return; }
|
||||
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");
|
||||
}
|
||||
}
|
||||
});
|
||||
$(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");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
// 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");
|
||||
}
|
||||
});
|
||||
|
||||
// TIMER FOR FOR AUTO EXPAND
|
||||
$(document).on("dragenter", ".drag_enter_center", function(event) {
|
||||
$(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");
|
||||
}
|
||||
}
|
||||
});
|
||||
$(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,70 +201,88 @@ 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--;
|
||||
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;
|
||||
}
|
||||
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() {
|
||||
if (counter == 0) {
|
||||
setTimeout(function() {
|
||||
(DragAndDrop.SelectedTabsIds).forEach(function(selectedTabId) {
|
||||
(DragAndDrop.TabsIdsSelected).forEach(function(selectedTabId) {
|
||||
if ($("#"+selectedTabId)[0]) {
|
||||
$("#"+selectedTabId).addClass("selected_temporarly").addClass("selected");
|
||||
$("#"+selectedTabId).addClass("selected_temporarly").addClass("selected_tab");
|
||||
}
|
||||
});
|
||||
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]));
|
||||
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);
|
||||
}
|
||||
},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 (browserId != "F" && (event.pageX < 0 || event.pageX > $(window).width() || event.pageY < 0 || event.pageY > $(window).height())) {
|
||||
DetachTabs(DragAndDrop.TabsIds);
|
||||
if (DragAndDrop.DragNodeClass == "folder") {
|
||||
DetachTabs(DragAndDrop.TabsIds, DragAndDrop.Folders);
|
||||
setTimeout(function() {
|
||||
SaveFolders();
|
||||
}, 500);
|
||||
}
|
||||
}
|
||||
}
|
||||
}, 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) {
|
||||
$(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 {
|
||||
@ -240,22 +292,23 @@ function SetDragAndDropEvents() {
|
||||
}
|
||||
$(".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() {
|
||||
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());
|
||||
@ -264,93 +317,96 @@ function DropToTarget(TargetNode) {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// dropped on pin_list
|
||||
if (TargetNode.is("#pin_list")) {
|
||||
$(".selected").each(function() {
|
||||
if (TargetNode.is("#pin_list")) { // dropped on pin_list
|
||||
$(".selected_tab").each(function() {
|
||||
SetTabClass({ id: this.id, pin: true });
|
||||
});
|
||||
TargetNode.append($(".selected"));
|
||||
TargetNode.append($(".selected_tab"));
|
||||
}
|
||||
|
||||
// dropped on tab
|
||||
if (TargetNode.parent().is(".tab, .folder")) {
|
||||
if (TargetNode.parent().is(".selected")) {
|
||||
TargetNode.parent().addClass("highlighted_selected").removeClass("selected");
|
||||
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").each(function() {
|
||||
$(".selected_tab").each(function() {
|
||||
SetTabClass({ id: this.id, pin: false });
|
||||
});
|
||||
if (TargetNode.is(".drag_entered_top")) {
|
||||
$($(".selected").get().reverse()).insertBefore(TargetNode.parent());
|
||||
$($(".selected_tab").get().reverse()).insertBefore(TargetNode.parent());
|
||||
}
|
||||
if (TargetNode.is(".drag_entered_bottom")) {
|
||||
$($(".selected").get().reverse()).insertAfter(TargetNode.parent());
|
||||
$($(".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").get().reverse()));
|
||||
$("#ch" + TargetNode[0].id.substr(2)).append($($(".selected_tab").get().reverse()));
|
||||
} else {
|
||||
$("#ch" + TargetNode[0].id.substr(2)).prepend($($(".selected").get().reverse()));
|
||||
$("#ch" + TargetNode[0].id.substr(2)).prepend($($(".selected_tab").get().reverse()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// dropped on group (tab list)
|
||||
if (TargetNode.is(".group")) {
|
||||
$(".selected").each(function() {
|
||||
if (TargetNode.is(".group")) { // dropped on group (tab list)
|
||||
$(".selected_tab").each(function() {
|
||||
SetTabClass({ id: this.id, pin: false });
|
||||
});
|
||||
TargetNode.append($($(".selected").get().reverse()));
|
||||
$("#ch"+TargetNode[0].id).append($($(".selected_tab").get().reverse()));
|
||||
}
|
||||
|
||||
// dropped on group button (group list)
|
||||
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");
|
||||
}
|
||||
if (DragAndDrop.DragNodeClass == "folder") { // 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()));
|
||||
$("#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);
|
||||
}
|
||||
|
||||
$(".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});
|
||||
|
||||
|
||||
|
||||
// }
|
||||
|
||||
|
||||
|
||||
|
||||
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() {
|
||||
DropTargetsSendToBack();
|
||||
schedule_update_data++;
|
||||
schedule_rearrange_tabs++;
|
||||
}, 500);
|
||||
}
|
||||
|
||||
|
||||
setTimeout(function() {
|
||||
schedule_update_data++;
|
||||
}, 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
|
||||
}
|
@ -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
|
||||
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 = "folder_header"; fh.id = "tab_header"+param.id; fh.draggable = true; fd.appendChild(fh); // HEADER
|
||||
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
|
||||
// $("#tab_title" + tab.id)[0].textContent = title;
|
||||
// $("#tab_header" + tab.id).attr("title", 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);
|
||||
// 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 (!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() {
|
||||
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");
|
||||
}
|
||||
});
|
||||
}
|
@ -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) {
|
||||
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] = LoadedPreferences[parameter];
|
||||
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);
|
||||
chrome.runtime.sendMessage({command: "save_preferences", opt: opt}, function(response) {
|
||||
setTimeout(function() {
|
||||
chrome.runtime.sendMessage({command: "reload_options"});
|
||||
}, 200);
|
||||
}, 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});
|
||||
}
|
@ -4,32 +4,52 @@
|
||||
|
||||
// ********** GROUPS FUNCTIONS ***************
|
||||
|
||||
function AppendAllGroups() {
|
||||
// var scroll = $("#group_list").scrollTop();
|
||||
for (var group in bggroups) {
|
||||
AppendGroupToList(bggroups[group].id, bggroups[group].name, bggroups[group].font);
|
||||
function SaveGroups() {
|
||||
chrome.runtime.sendMessage({command: "save_groups", groups: bggroups, windowId: CurrentWindowId});
|
||||
}
|
||||
RearrangeGroups(0);
|
||||
function AppendGroups(Groups) {
|
||||
// var scroll = $("#group_list").scrollTop();
|
||||
for (var group in Groups) {
|
||||
AppendGroupToList(Groups[group].id, Groups[group].name, Groups[group].font);
|
||||
}
|
||||
setTimeout(function() {
|
||||
RearrangeGroupsButtons(0);
|
||||
}, 1000);
|
||||
}
|
||||
|
||||
function 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]);
|
||||
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[(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]);
|
||||
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[(this.id).substr(1)].index && stack < 10) {
|
||||
RearrangeGroups(stack+1);
|
||||
if ($(this).index() != bggroups[groupId].index && stack < 10) {
|
||||
RearrangeGroupsButtons(stack+1);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
function RearrangeGroupsLists() {
|
||||
let scroll = $("#"+active_group).scrollTop();
|
||||
$(".group_button").each(function() {
|
||||
let groupId = (this.id).substr(1);
|
||||
if ($("#"+groupId)[0]) {
|
||||
$("#groups").append($("#"+groupId));
|
||||
}
|
||||
});
|
||||
$("#"+active_group).scrollTop(scroll);
|
||||
}
|
||||
|
||||
function AppendGroupToList(groupId, group_name, font_color) {
|
||||
if ($("#"+groupId).length == 0 && $("#groups")[0]) {
|
||||
var grp = document.createElement("div"); grp.className = "group"; grp.id = groupId; $("#groups")[0].appendChild(grp);
|
||||
var gcf = document.createElement("div"); gcf.className = "children_folders"; gcf.id = "cf"+groupId; grp.appendChild(gcf);
|
||||
var gct = document.createElement("div"); gct.className = "children_tabs"; gct.id = "ch"+groupId; grp.appendChild(gct);
|
||||
}
|
||||
if ($("#_"+groupId).length == 0) {
|
||||
var gbn = document.createElement("div"); gbn.className = "group_button"; gbn.id = "_"+groupId; $("#group_list")[0].appendChild(gbn);
|
||||
@ -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,13 +89,23 @@ 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)[0].id == active_group) {
|
||||
if ($("#_"+groupId).prev(".group_button")[0]) {
|
||||
SetActiveGroup(($("#_"+groupId).prev(".group_button")[0].id).substr(1), true, true);
|
||||
} else {
|
||||
@ -86,7 +115,8 @@ function GroupRemove(groupId, close_tabs) {
|
||||
SetActiveGroup("tab_list", true, true);
|
||||
}
|
||||
}
|
||||
chrome.runtime.sendMessage({command: "save_groups", groups: bggroups, windowId: CurrentWindowId});
|
||||
}
|
||||
SaveGroups();
|
||||
$("#"+groupId).remove();
|
||||
$("#_"+groupId).remove();
|
||||
schedule_update_data++;
|
||||
@ -94,28 +124,29 @@ function GroupRemove(groupId, close_tabs) {
|
||||
|
||||
function UpdateBgGroupsOrder() {
|
||||
$(".group_button").each(function() {
|
||||
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();
|
||||
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 (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")[0]){
|
||||
ScrollToTab($("#"+groupId+" .active")[0].id);
|
||||
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");
|
||||
@ -123,15 +154,23 @@ function SetActiveGroup(groupId, switch_to_active_in_group, scroll_to_active) {
|
||||
$("#button_remove_group, #button_edit_group").removeClass("disabled");
|
||||
}
|
||||
chrome.runtime.sendMessage({command: "set_active_group", active_group: groupId, windowId: CurrentWindowId});
|
||||
RefreshExpandStates();
|
||||
RefreshCounters();
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
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[GroupId].font == "" ? "var(--button_icons, #808080)" : "#"+bggroups[GroupId].font});
|
||||
$("#group_edit_font").css({"background-color": bggroups[menuItemId].font == "" ? "var(--button_icons, #808080)" : "#"+bggroups[menuItemId].font});
|
||||
}
|
||||
}
|
||||
|
||||
// when pressed OK in group popup
|
||||
function GroupEditConfirm() {
|
||||
if (bggroups[menuItemId]) {
|
||||
$("#group_edit_name")[0].value = $("#group_edit_name")[0].value.replace(/[\f\n\r\v\t\<\>\+\-\(\)\.\,\;\:\~\/\|\?\@\!\"\'\£\$\%\&\^\#\=\*\[\]]?/gi, "");
|
||||
bggroups[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});
|
||||
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();
|
||||
chrome.runtime.sendMessage({command: "save_groups", groups: bggroups, windowId: CurrentWindowId});
|
||||
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});
|
||||
// }
|
||||
// });
|
||||
|
||||
|
244
scripts/menu.js
@ -4,67 +4,37 @@
|
||||
|
||||
// ********** MENU ***************
|
||||
|
||||
function SetMenu() {
|
||||
// trigger action when the contexmenu is about to be shown
|
||||
$(document).bind("contextmenu", function(event) {
|
||||
if (!event.ctrlKey) {
|
||||
event.preventDefault();
|
||||
}
|
||||
});
|
||||
|
||||
// show menu
|
||||
$(document).on("mousedown", "#groups, .tab, .pin", function(event) {
|
||||
event.stopPropagation();
|
||||
if (event.button == 2) {
|
||||
function ShowTabMenu(TabNode, event) {
|
||||
$(".menu").hide(0);
|
||||
|
||||
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" });
|
||||
}
|
||||
|
||||
menuItemId = parseInt(TabNode[0].id);
|
||||
// MUTE TABS
|
||||
if ($("#" + menuTabId).is(".muted")) {
|
||||
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 {
|
||||
@ -74,55 +44,118 @@ function SetMenu() {
|
||||
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) {
|
||||
if (!event.ctrlKey) {
|
||||
event.preventDefault();
|
||||
}
|
||||
});
|
||||
|
||||
// show global menu
|
||||
$(document).on("mousedown", "#pin_list, .group", function(event) {
|
||||
event.stopPropagation();
|
||||
if (event.button == 2) {
|
||||
$(".menu").hide(0);
|
||||
menuItemId = active_group;
|
||||
|
||||
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;
|
||||
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;
|
||||
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;
|
||||
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;
|
||||
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;
|
||||
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,7 +163,7 @@ function SetMenu() {
|
||||
});
|
||||
});
|
||||
} else {
|
||||
chrome.tabs.get(menuTabId, function(tab) {
|
||||
chrome.tabs.get(menuItemId, function(tab) {
|
||||
if (tab) {
|
||||
chrome.tabs.update(tab.id, { muted: true });
|
||||
}
|
||||
@ -138,8 +171,8 @@ function SetMenu() {
|
||||
}
|
||||
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,42 +180,42 @@ function SetMenu() {
|
||||
});
|
||||
});
|
||||
} else {
|
||||
chrome.tabs.get(menuTabId, function(tab) {
|
||||
chrome.tabs.get(menuItemId, function(tab) {
|
||||
chrome.tabs.update(tab.id, { muted: false });
|
||||
});
|
||||
}
|
||||
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;
|
||||
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;
|
||||
case "tab_close":
|
||||
CloseTabs($("#" + menuTabId).is(".selected") ? $(".selected:visible").map(function() { return parseInt(this.id); }).toArray() : [menuTabId]);
|
||||
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]);
|
||||
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());
|
||||
CloseTabs($(".tab:visible:not(#" + menuItemId + ")").map(function() { return parseInt(this.id); }).toArray());
|
||||
break;
|
||||
case "tab_undo_close":
|
||||
chrome.sessions.getRecentlyClosed(null, function(sessions) {
|
||||
@ -192,7 +225,7 @@ function SetMenu() {
|
||||
});
|
||||
break;
|
||||
case "tab_discard":
|
||||
DiscardTabs($("#" + menuTabId).is(".selected") ? $(".tab.selected:visible").map(function() { return parseInt(this.id); }).toArray() : [menuTabId]);
|
||||
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" });
|
||||
@ -205,6 +238,42 @@ function SetMenu() {
|
||||
$(".tab.o").addClass("c").removeClass("o");
|
||||
schedule_update_data++;
|
||||
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);
|
||||
});
|
||||
@ -212,19 +281,16 @@ function SetMenu() {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// move tabs to group
|
||||
// $(document).on("mousedown", "#tabs_menu_move_to_new_group, .move_to_group_menu_entry", function(event) {
|
||||
// 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});
|
||||
// });
|
||||
|
||||
|
||||
|
@ -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,44 +168,71 @@ 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 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"));
|
||||
}
|
||||
});
|
||||
$(".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 = $("#"+tabId).data("title") + " ("+$("#ch"+tabId+" .tab").length+")";
|
||||
$("#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", $("#"+tabId).data("title") + " ("+$("#ch"+tabId+" .tab").length+")");
|
||||
$("#tab_header"+tabId).attr("title", ("("+$("#ch"+tabId+" .tab").length+") ") + $("#"+tabId).data("title"));
|
||||
} else {
|
||||
$("#tab_header"+tabId).attr("title", $("#"+tabId).data("title"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
429
scripts/tabs.js
@ -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({
|
||||
@ -24,7 +26,7 @@ async function UpdateData() {
|
||||
command: "update_tab",
|
||||
tabId: parseInt(this.id),
|
||||
tab: {
|
||||
parent: $(this).parent(".group")[0] ? $(this).parent()[0].id : $(this).parent().parent(".tab, .folder")[0].id,
|
||||
parent: $(this).parent().parent()[0].id,
|
||||
index: $(this).index(),
|
||||
expand: ($(this).is(".n") ? "n" : ($(this).is(".c") ? "c" : "o"))
|
||||
}
|
||||
@ -34,34 +36,26 @@ async function UpdateData() {
|
||||
}
|
||||
}, 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--;
|
||||
}
|
||||
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 (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,32 +152,27 @@ 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)[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());
|
||||
@ -211,6 +183,10 @@ function ScrollToTab(tabId) {
|
||||
}
|
||||
}
|
||||
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 {
|
||||
@ -220,23 +196,59 @@ function ScrollToTab(tabId) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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 ($(".pin.active").prev(".pin")[0]) {
|
||||
chrome.tabs.update(parseInt($(".pin.active").prev(".pin")[0].id), { active: true });
|
||||
if ($("#"+active_group).next(".group")[0]) {
|
||||
SetActiveGroup(($("#"+active_group).next(".group")[0].id), true, true);
|
||||
} else {
|
||||
SetActiveGroup("tab_list", true, true);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
log("activate group below");
|
||||
if ($("#"+active_group).next(".group")[0]) {
|
||||
SetActiveGroup(($("#"+active_group).next(".group")[0].id), true, true);
|
||||
} else {
|
||||
if ($("#"+active_group).prev(".group")[0]) {
|
||||
SetActiveGroup(($("#"+active_group).prev(".group")[0].id), true, true);
|
||||
} else {
|
||||
SetActiveGroup("tab_list", true, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
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 });
|
||||
} else {
|
||||
if ($(".active:visible").next(".tab")[0]) {
|
||||
chrome.tabs.update(parseInt($(".active:visible").next(".tab")[0].id), { active: true });
|
||||
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 ($(".active:visible").parent().parent().next(".tab")[0]) {
|
||||
chrome.tabs.update(parseInt($(".active:visible").parent().parent().next(".tab")[0].id), { active: true });
|
||||
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: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").next(".tab")[0]) {
|
||||
chrome.tabs.update(parseInt($("#"+active_group+" .tab.active_tab").next(".tab")[0].id), { active: true });
|
||||
} else {
|
||||
if ($("#"+active_group+" .tab.active_tab").prev(".tab")[0]) {
|
||||
chrome.tabs.update(parseInt($("#"+active_group+" .tab.active_tab").prev(".tab")[0].id), { active: true });
|
||||
} else {
|
||||
if ($("#"+active_group+" .tab.active_tab").parent().is(".children") && $("#"+active_group+" .tab.active_tab").parent().parent(".tab")[0]) {
|
||||
chrome.tabs.update(parseInt($("#"+active_group+" .tab.active_tab").parent().parent(".tab")[0].id), { active: true });
|
||||
} else {
|
||||
if ($("#"+active_group+" .tab.active_tab").parents(".tab").last().next(".tab")[0]) {
|
||||
chrome.tabs.update(parseInt($("#"+active_group+" .tab.active_tab").parents(".tab").last().next(".tab")[0].id), { active: true });
|
||||
} else {
|
||||
if ($(".tab:visible").length > 1) {
|
||||
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) {
|
||||
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 DropTargetsSendToFront() {
|
||||
if (DropTargetsInFront == false) {
|
||||
$(".drop_target").show();
|
||||
DropTargetsInFront = true;
|
||||
}
|
||||
function ActivateNextTab() {
|
||||
log("function: ActivateNextTab");
|
||||
if ($(".pin.active_tab")[0]) {
|
||||
log("active_tab is pin");
|
||||
if ($(".pin.active_tab").next(".pin")[0]) {
|
||||
chrome.tabs.update(parseInt($(".pin.active_tab").next(".pin")[0].id), { active: true });
|
||||
} else {
|
||||
if ($(".pin.active_tab").prev(".pin")[0]) {
|
||||
chrome.tabs.update(parseInt($(".pin.active_tab").prev(".pin")[0].id), { active: true });
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($("#"+active_group+" .tab.active_tab")[0] && $("#"+active_group+" .tab").length > 1) {
|
||||
if ($("#"+active_group+" .tab.active_tab").children().last().children(".tab")[0]) {
|
||||
chrome.tabs.update(parseInt($("#"+active_group+" .tab.active_tab").children().last().children(".tab")[0].id), { active: true });
|
||||
} else {
|
||||
if ($("#"+active_group+" .tab.active_tab").next(".tab")[0]) {
|
||||
chrome.tabs.update(parseInt($("#"+active_group+" .tab.active_tab").next(".tab")[0].id), { active: true });
|
||||
} else {
|
||||
if ($("#"+active_group+" .tab.active_tab").parent().parent().next("#"+active_group+" .tab")[0]) {
|
||||
chrome.tabs.update(parseInt($("#"+active_group+" .tab.active_tab").parent().parent().next(".tab")[0].id), { active: true });
|
||||
} else {
|
||||
if ($("#"+active_group+" .tab.active_tab").parents(".tab").last().next(".tab")[0]) {
|
||||
chrome.tabs.update(parseInt($("#"+active_group+" .tab.active_tab").parents(".tab").last().next(".tab")[0].id), { active: true });
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
function ActivatePrevTab() {
|
||||
log("function: ActivatePrevTab");
|
||||
if ($(".pin.active_tab")[0]) {
|
||||
log("active_tab is pin");
|
||||
if ($(".pin.active_tab").prev(".pin")[0]) {
|
||||
chrome.tabs.update(parseInt($(".pin.active_tab").prev(".pin")[0].id), { active: true });
|
||||
} else {
|
||||
if ($(".pin.active_tab").next(".pin")[0]) {
|
||||
chrome.tabs.update(parseInt($(".pin.active_tab").next(".pin")[0].id), { active: true });
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($("#"+active_group+" .tab.active_tab")[0] && $("#"+active_group+" .tab").length > 1) {
|
||||
if ($("#"+active_group+" .tab.active_tab").prev().find(".tab").length > 0) {
|
||||
chrome.tabs.update(parseInt($("#"+active_group+" .tab.active_tab").prev().find(".tab").last()[0].id), { active: true });
|
||||
} else {
|
||||
if ($("#"+active_group+" .tab.active_tab").prev(".tab")[0]) {
|
||||
chrome.tabs.update(parseInt($("#"+active_group+" .tab.active_tab").prev(".tab")[0].id), { active: true });
|
||||
} else {
|
||||
if ($("#"+active_group+" .tab.tab.active_tab").parent().is(".children") && $("#"+active_group+" .tab.active_tab").parent().parent(".tab")[0]) {
|
||||
chrome.tabs.update(parseInt($("#"+active_group+" .tab.active_tab").parent().parent(".tab")[0].id), { active: true });
|
||||
}
|
||||
}
|
||||
}
|
||||
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");
|
||||
@ -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 });
|
||||
}
|
||||
|
@ -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,9 +72,7 @@ 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");
|
||||
@ -125,6 +103,7 @@ function SetToolbarShelfToggle(click_type) {
|
||||
$(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,18 +155,15 @@ function SetToolbarEvents() {
|
||||
});
|
||||
// pin tab
|
||||
$(document).on("mousedown", "#button_pin", function(event) {
|
||||
if (event.button != 0) {
|
||||
return;
|
||||
}
|
||||
$(".active:visible, .selected:visible").each(function() {
|
||||
if (event.button == 0) {
|
||||
$(".active_tab:visible, .selected_tab: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;
|
||||
}
|
||||
if (event.button == 0) {
|
||||
chrome.sessions.getRecentlyClosed( null, function(sessions) {
|
||||
if (sessions.length > 0) {
|
||||
chrome.sessions.restore(null, function(restored) {
|
||||
@ -202,29 +178,27 @@ function SetToolbarEvents() {
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
// move tab to new window (detach)
|
||||
$(document).on("mousedown", "#button_move", function(event) {
|
||||
if (event.button != 0) {
|
||||
return;
|
||||
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);
|
||||
}
|
||||
}
|
||||
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));
|
||||
});
|
||||
}
|
||||
});
|
||||
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);
|
||||
}
|
||||
});
|
||||
// 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");
|
||||
}
|
||||
$("#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("");
|
||||
}
|
||||
});
|
||||
// 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" });
|
||||
});
|
||||
// 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) {
|
||||
if (event.button == 0) {
|
||||
ExportGroup(bggroups[active_group].name+".tt_group");
|
||||
}
|
||||
});
|
||||
|
||||
$(document).on("mousedown", "#button_import_group", function(event) {
|
||||
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
@ -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});
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
93
sidebar.html
@ -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="menu" id="tabs_menu">
|
||||
<li data-action="tab_new" class="menu_item" id="tabs_menu_new"></li>
|
||||
<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="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>
|
||||
|
120
sidebar.js
@ -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,71 +26,51 @@ function RestorePinListRowSettings() {
|
||||
RefreshGUI();
|
||||
}
|
||||
function Run() {
|
||||
LoadPreferences();
|
||||
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_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;
|
||||
chrome.runtime.sendMessage({command: "is_bg_ready"}, function(response) {
|
||||
setTimeout(function() {
|
||||
if (opt != undefined && browserId != undefined && bgtabs != undefined && bggroups != undefined && running == true) {
|
||||
Initialize();
|
||||
if (response == true) {
|
||||
Load();
|
||||
} else {
|
||||
Run();
|
||||
}
|
||||
},200);
|
||||
});
|
||||
}
|
||||
function Load() {
|
||||
chrome.windows.getCurrent({populate: false}, function(window) {
|
||||
CurrentWindowId = window.id;
|
||||
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_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();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
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});
|
||||
}
|
BIN
theme/empty.png
Before Width: | Height: | Size: 161 B |
75
theme/expand_c.svg
Normal 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
@ -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
@ -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 |
87
theme/icon_audio_hover.svg
Normal 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 |
95
theme/icon_audio_muted.svg
Normal 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 |
95
theme/icon_audio_muted_hover.svg
Normal 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 |
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
@ -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 |
@ -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 |
416
theme/theme.css
@ -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);
|
||||
|
@ -247,6 +247,8 @@ 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;
|
||||
|
@ -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;
|
||||
}
|
@ -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;
|
||||
}
|
@ -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;
|
||||
}
|
@ -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;
|
||||
}
|
@ -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
@ -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 |