This commit is contained in:
karol@jagiello.it 2017-07-26 22:23:39 +02:00
commit c17ad45027
49 changed files with 6649 additions and 0 deletions

441
_locales/en/messages.json Normal file
View File

@ -0,0 +1,441 @@
{
"extensionName": {
"message": "Tree Tabs"
},
"extDesc": {
"message": "Manage your tabs in the sidebar!"
},
"button_new": {
"message": "Press left mouse button to open new tab. \nPress middle mouse button to clone the active tab. \nPress right mouse button to scroll the list to the active tab."
},
"button_pin": {
"message": "Pin / Unpin current tab"
},
"button_undo": {
"message": "Reopen last closed"
},
"button_move": {
"message": "Detach tab"
},
"button_search": {
"message": "Search tabs"
},
"button_tools": {
"message": "Tools"
},
"filter_search_go_prev": {
"message": "Previous search result"
},
"filter_search_go_next": {
"message": "Next search result"
},
"button_filter_type": {
"message": "Search titles or urls"
},
"button_bookmarks": {
"message": "Unsorted bookmarks"
},
"button_downloads": {
"message": "Downloads"
},
"button_history": {
"message": "History"
},
"button_settings": {
"message": "Settings"
},
"button_options": {
"message": "Tree Tabs settings"
},
"button_extensions": {
"message": "Extensions"
},
"button_discard": {
"message": "Unload tabs"
},
"tabs_menu_expand_all": {
"message": "Expand all trees"
},
"tabs_menu_collapse_all": {
"message": "Collapse all trees"
},
"tabs_menu_new": {
"message": "New tab"
},
"tabs_menu_clone": {
"message": "Duplicate"
},
"tabs_menu_move": {
"message": "Detach"
},
"tabs_menu_reload": {
"message": "Reload"
},
"tabs_menu_pin": {
"message": "Pin"
},
"tabs_menu_mute": {
"message": "Mute"
},
"tabs_menu_unmute": {
"message": "Unmute"
},
"tabs_menu_mute_other": {
"message": "Mute other"
},
"tabs_menu_unmute_other": {
"message": "Unmute other"
},
"tabs_menu_unpin": {
"message": "Unpin"
},
"tabs_menu_close": {
"message": "Close"
},
"tabs_menu_close_other": {
"message": "Close other"
},
"tabs_menu_undo": {
"message": "Undo close"
},
"tabs_menu_settings": {
"message": "Settings"
},
"tabs_menu_discard": {
"message": "Unload"
},
"options_vivaldi": {
"message": " Vivaldi "
},
"opt_url_for_web_panel": {
"message": "Url for the Web Panel"
},
"options_pinned": {
"message": " Pinned tabs bar "
},
"options_pin_list_multi_row": {
"message": "multi row list"
},
"option_allow_pin_close": {
"message": "allow to close pinned tabs"
},
"options_tabs": {
"message": " Tabs "
},
"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."
},
"options_close_with_MMB": {
"message": "close tabs with middle mouse button"
},
"options_always_show_close": {
"message": "show close button on all tabs"
},
"options_close_other_trees": {
"message": "automatically collapse other trees on expand"
},
"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)"
},
"options_open_tree_on_hover": {
"message": "auto expand collapsed trees when dragging and holding for a second over them"
},
"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"
},
"options_append_child_tab": {
"message": "append children tabs at the"
},
"options_append_child_tab_top": {
"message": "top (reverse hierarchy)"
},
"options_append_child_tab_bottom": {
"message": "bottom"
},
"options_append_child_tab_after_limit": {
"message": "once reached tree depth, place tab on the same level, but"
},
"options_append_child_tab_after_limit_top": {
"message": "at the top"
},
"options_append_child_tab_after_limit_after": {
"message": "after parent"
},
"options_append_child_tab_after_limit_bottom": {
"message": "at the bottom"
},
"options_append_orphan_tab": {
"message": "append orphan tabs (opened from +, shortcut or bookmark)"
},
"options_append_orphan_tab_top": {
"message": "at the top"
},
"options_append_orphan_tab_after_active": {
"message": "after active"
},
"options_append_orphan_tab_bottom": {
"message": "at the bottom"
},
"options_append_orphan_tab_as_child": {
"message": "treat as active's tab child"
},
"options_after_closing_active_tab": {
"message": "after closing active tab,"
},
"options_after_closing_active_tab_go_up": {
"message": "activate tab above"
},
"options_after_closing_active_tab_go_down": {
"message": "activate tab below"
},
"options_after_closing_active_tab_go_browser": {
"message": "let browser handle which tab to activate"
},
"options_theme": {
"message": "Theme"
},
"options_theme_tabs": {
"message": " Tabs look "
},
"options_theme_tabs_sample_text_normal": {
"message": "Normal"
},
"options_theme_tabs_sample_text_active_selected": {
"message": "Active and selected"
},
"options_theme_tabs_sample_text_discarded": {
"message": "Unloaded (discarded)"
},
"options_theme_tabs_sample_text_search_result": {
"message": "Search result"
},
"options_theme_tabs_sample_text_search_result_higlighted": {
"message": "Search result higlighted"
},
"options_theme_tabs_sample_text_search_result_selected": {
"message": "Search result, selected"
},
"options_theme_tabs_sample_text_search_result_selected_active": {
"message": "Search result, selected, active"
},
"options_toolbar": {
"message": " Toolbar "
},
"options_available_buttons": {
"message": "Drag and drop buttons to arrange them, drop to the green box, buttons you don't want to use"
},
"options_scrollbars": {
"message": " Scrollbars "
},
"options_scrollbar_pin_list": {
"message": "pinned tabs bar scrollbar height"
},
"options_scrollbar_tab_list": {
"message": "tabs list scrollbar width"
},
"options_tabs_size": {
"message": "Tabs size"
},
"options_add_theme_button": {
"message": "Add new"
},
"options_remove_theme_button": {
"message": "Remove"
},
"options_export_theme_button": {
"message": "Export"
},
"options_import_theme_button": {
"message": "Import"
},
"options_rename_theme_button": {
"message": "Rename"
},
"options_there_is_a_theme_with_this_name": {
"message": "Theme with this name already exists, try a new name"
},
"options_theme_name_cannot_be_empty": {
"message": "Theme name cannot be empty, enter some name"
},
"options_no_theme_to_export": {
"message": "No theme to export, maybe add a new one :)"
},
"options_loaded_theme_older_version": {
"message": "Looks like loaded theme was saved in older version of the extension, some colors or options might be missing"
},
"options_loaded_theme_newer_version": {
"message": "Looks like loaded theme was saved in a newer version of the extension, can't load!"
},
"options_color_theme_toolbar_background": {
"message": " toolbar background"
},
"options_color_toolbar_border_bottom": {
"message": " toolbar borders"
},
"options_color_button_icons": {
"message": " button icon"
},
"options_color_button_border": {
"message": " button borders"
},
"options_color_button_background": {
"message": " button background"
},
"options_color_button_hover_border": {
"message": " button hover border"
},
"options_color_button_hover_background": {
"message": " button hover background"
},
"options_color_filter_box_background": {
"message": " searchbox background"
},
"options_color_filter_box_border": {
"message": " searchbox borders"
},
"options_color_filter_box_font": {
"message": " searchbox font"
},
"options_color_filter_clear_icon": {
"message": " searchbox clear button"
},
"options_color_pin_list_border_bottom": {
"message": " pin list separator line"
},
"options_color_pin_list_background": {
"message": " pin list background"
},
"options_color_tab_list_background": {
"message": " tab list background"
},
"options_color_tab_background": {
"message": " tab background"
},
"options_color_tab_border": {
"message": " tab border"
},
"options_color_tab_hover_background": {
"message": " hover over tab, background"
},
"options_color_tab_hover_border": {
"message": " hover over tab, border"
},
"options_color_drag_indicator": {
"message": " drag&drop indicator"
},
"options_color_tab_title": {
"message": " tab title font"
},
"options_color_tab_title_active": {
"message": " active tab title font"
},
"options_color_tab_title_discarded": {
"message": " unloaded tab title font"
},
"options_color_tab_selected_background": {
"message": " selected tab background"
},
"options_color_tab_selected_border": {
"message": " active/selected tab border"
},
"options_color_tab_selected_hover_border": {
"message": " hover over active/selected tab border"
},
"options_color_tab_selected_hover_background": {
"message": " hover over active/selected tab background"
},
"options_color_tab_filtered": {
"message": " search result"
},
"options_color_tab_filtered_highlighted": {
"message": " search result highlighted"
},
"options_color_tab_filtered_selected": {
"message": " search result selected"
},
"options_color_tab_filtered_selected_active": {
"message": " search result selected active"
},
"options_color_close_x": {
"message": " close button (x)"
},
"options_color_close_hover_x": {
"message": " hover over close button, x color"
},
"options_color_close_hover_border": {
"message": " hover over close button, border"
},
"options_color_close_hover_background": {
"message": " hover over close button, background"
},
"options_color_expand_open_border": {
"message": " open tab expand box, border"
},
"options_color_expand_open_background": {
"message": " open tab expand box, background"
},
"options_color_expand_closed_border": {
"message": " closed tab expand box, border"
},
"options_color_expand_closed_background": {
"message": " closed tab expand box, background"
},
"options_color_expand_lines": {
"message": " tree hierarchy lines"
},
"options_color_scrollbar_thumb": {
"message": " scrollbar thumb"
},
"options_color_scrollbar_thumb_hover": {
"message": " scrollbar thumb hover"
},
"options_color_scrollbar_track": {
"message": " scrollbar background"
},
"options_color_tabs_menu_background": {
"message": " background"
},
"options_color_tabs_menu_border": {
"message": " border"
},
"options_color_tabs_menu_hover_background": {
"message": " hover over item, background"
},
"options_color_tabs_menu_hover_border": {
"message": " hover over item, border"
},
"options_color_tabs_menu_font": {
"message": " font"
},
"options_color_tabs_menu_separator": {
"message": " separator"
},
"options_example_menu_item": {
"message": "menu item"
},
"options_menu": {
"message": " Menu "
},
"options_active_tab_font_bold": {
"message": "bold font for active tab"
},
"caption_clear_filter": {
"message": "Clear search results"
},
"caption_loading": {
"message": "Loading..."
},
"caption_searchbox": {
"message": " Search tabs..."
},
"options_never_show_close": {
"message": "don't show close button (option above will be ignored)"
},
"tabs_menu_close_tree": {
"message": "Close tree"
},
"options_faster_scroll": {
"message": "Faster scrolling"
}
}

431
_locales/ru/messages.json Normal file
View File

@ -0,0 +1,431 @@
{
"button_bookmarks": {
"message": "Закладки"
},
"button_discard": {
"message": "Выгрузить все вкладки"
},
"button_downloads": {
"message": "Загрузки"
},
"button_extensions": {
"message": "Расширения"
},
"button_filter_type": {
"message": "Поиск заголовков или URL-адресов"
},
"button_history": {
"message": "История"
},
"button_move": {
"message": "Отсоединить текущую вкладку"
},
"button_new": {
"message": "ЛКМ - открыть новую вкладку \nСКМ - дублировать активную вкладку \nПКМ - прокрутка списка к активной вкладке"
},
"button_options": {
"message": "Настройки Tree Tabs"
},
"button_pin": {
"message": "Закрепить / Открепить текущую вкладку"
},
"button_search": {
"message": "Поиск вкладок"
},
"button_settings": {
"message": "Настройки браузера"
},
"button_tools": {
"message": "Дополнительные инструменты"
},
"button_undo": {
"message": "Открыть последнюю закрытую вкладку"
},
"caption_clear_filter": {
"message": "Очистить результаты поиска"
},
"caption_loading": {
"message": "Загрузка…"
},
"caption_searchbox": {
"message": " Поиск вкладок…"
},
"extDesc": {
"message": "Управляйте своими вкладками с боковой панели!"
},
"extensionName": {
"message": "Tree Tabs"
},
"filter_search_go_next": {
"message": "Следующий результат поиска"
},
"filter_search_go_prev": {
"message": "Предыдущий результат поиска"
},
"option_allow_pin_close": {
"message": "закрывать закреплённые вкладки из контекстного меню"
},
"options_add_theme_button": {
"message": "Новая"
},
"options_always_show_close": {
"message": "показывать кнопку закрытия на вкладках"
},
"options_append_child_tab": {
"message": "добавлять новые дочерние вкладки"
},
"options_append_child_tab_after_limit": {
"message": "при достижении максимальной глубины дерева, установить вкладку на том же уровне, но"
},
"options_append_child_tab_after_limit_after": {
"message": "после родительской"
},
"options_append_child_tab_after_limit_bottom": {
"message": "ниже предыдущей"
},
"options_append_child_tab_after_limit_top": {
"message": "выше предыдущей"
},
"options_append_child_tab_bottom": {
"message": "ниже предыдущих"
},
"options_append_child_tab_top": {
"message": "выше предыдущих (обратная иерархия)"
},
"options_append_orphan_tab": {
"message": "открывать недавно закрытые вкладки"
},
"options_append_orphan_tab_after_active": {
"message": "после активной вкладки"
},
"options_append_orphan_tab_as_child": {
"message": "как дочерние для активной вкладки"
},
"options_after_closing_active_tab": {
"message": "После закрытия активной вкладки"
},
"options_after_closing_active_tab_go_up": {
"message": "активировать вкладку выше"
},
"options_after_closing_active_tab_go_down": {
"message": "активировать вкладку ниже"
},
"options_after_closing_active_tab_go_browser": {
"message": "активация вкладок согласно настройкам браузера"
},
"options_append_orphan_tab_bottom": {
"message": "в конце списка"
},
"options_append_orphan_tab_top": {
"message": "в начале списка"
},
"options_close_other_trees": {
"message": "автоматически сворачивать другие деревья при раскрывании дерева"
},
"options_close_with_MMB": {
"message": "закрывать вкладки средней кнопкой мыши"
},
"options_color_button_background": {
"message": " фон кнопки"
},
"options_color_button_border": {
"message": " рамка кнопки"
},
"options_color_button_hover_background": {
"message": " фон при наведении на кнопку"
},
"options_color_button_hover_border": {
"message": " рамка при наведении на кнопку"
},
"options_color_button_icons": {
"message": " иконка кнопки"
},
"options_color_close_hover_background": {
"message": " фон при наведении на кнопку закрытия"
},
"options_color_close_hover_border": {
"message": " рамка при наведении на кнопку закрытия"
},
"options_color_close_hover_x": {
"message": " иконка при наведении на кнопку закрытия"
},
"options_color_close_x": {
"message": " кнопка закрытия [x]"
},
"options_color_drag_indicator": {
"message": " индикатор drag&drop"
},
"options_color_expand_closed_background": {
"message": " фон указателя свёрнутого дерева"
},
"options_color_expand_closed_border": {
"message": " рамка указателя свёрнутого дерева"
},
"options_color_expand_lines": {
"message": " линии ветвей дерева"
},
"options_color_expand_open_background": {
"message": " фон указателя раскрытого дерева"
},
"options_color_expand_open_border": {
"message": " рамка указателя раскрытого дерева"
},
"options_color_filter_box_background": {
"message": " фон окна поиска"
},
"options_color_filter_box_border": {
"message": " рамка окна поиска"
},
"options_color_filter_box_font": {
"message": " шрифт в окне поиска"
},
"options_color_filter_clear_icon": {
"message": " кнопка очистки в окне поиска"
},
"options_color_pin_list_background": {
"message": " фон списка закреплённых вкладок"
},
"options_color_pin_list_border_bottom": {
"message": " разделитель списка закреплённых вкладок"
},
"options_color_scrollbar_thumb": {
"message": " полоса прокрутки"
},
"options_color_scrollbar_thumb_hover": {
"message": " полоса прокрутки при наведении"
},
"options_color_scrollbar_track": {
"message": " фон полосы прокрутки"
},
"options_color_tab_background": {
"message": " фон вкладки"
},
"options_color_tab_border": {
"message": " рамка вкладки"
},
"options_color_tab_filtered": {
"message": " результат поиска"
},
"options_color_tab_filtered_highlighted": {
"message": " выделенный результат поиска"
},
"options_color_tab_filtered_selected": {
"message": " выбранный результат поиска"
},
"options_color_tab_filtered_selected_active": {
"message": " активный результат поиска"
},
"options_color_tab_hover_background": {
"message": " фон при наведении на вкладку"
},
"options_color_tab_hover_border": {
"message": " рамка при наведении на вкладку"
},
"options_color_tab_list_background": {
"message": " фон списка вкладок"
},
"options_color_tab_selected_background": {
"message": " фон активной вкладки"
},
"options_color_tab_selected_border": {
"message": " рамка активной вкладки"
},
"options_color_tab_selected_hover_background": {
"message": " фон при наведении на активную вкладку"
},
"options_color_tab_selected_hover_border": {
"message": " рамка при наведении на активную вкладку"
},
"options_color_tab_title": {
"message": " шрифт заголовка вкладки"
},
"options_color_tab_title_active": {
"message": " шрифт заголовка активной вкладки"
},
"options_color_tab_title_discarded": {
"message": " шрифт заголовка выгруженной вкладки"
},
"options_color_tabs_menu_background": {
"message": " фон"
},
"options_color_tabs_menu_border": {
"message": " рамка"
},
"options_color_tabs_menu_font": {
"message": " шрифт"
},
"options_color_tabs_menu_hover_background": {
"message": " фон при наведении на пункт"
},
"options_color_tabs_menu_hover_border": {
"message": " рамка при наведении на пункт"
},
"options_color_tabs_menu_separator": {
"message": " разделитель"
},
"options_color_theme_toolbar_background": {
"message": " фон панели инструментов"
},
"options_color_toolbar_border_bottom": {
"message": " рамка панели инструментов"
},
"options_example_menu_item": {
"message": "пункт меню"
},
"options_export_theme_button": {
"message": "Экспорт"
},
"options_import_theme_button": {
"message": "Импорт"
},
"options_loaded_theme_newer_version": {
"message": "Похоже, загружаемая тема была сохранена в более новой версии расширения; её невозможно загрузить!"
},
"options_loaded_theme_older_version": {
"message": "Похоже, загружаемая тема была сохранена в более старой версии расширения; некоторые цвета или параметры могут отсутствовать."
},
"options_max_tree_depth": {
"message": "максимальная глубина дерева (-1 - неограниченное количество ветвей; 0 - отключить древовидную структуру вкладок)"
},
"options_menu": {
"message": " Контекстное меню "
},
"options_no_theme_to_export": {
"message": "Нет темы для экспорта, можете добавить новую :)"
},
"options_open_tree_on_hover": {
"message": "автоматически раскрывать свёрнутые деревья при перетаскивании вкладки с удерживанием курсора над ними"
},
"options_pin_list_multi_row": {
"message": "список закреплённых вкладок в несколько строк"
},
"options_pinned": {
"message": " Панель закреплённых вкладок "
},
"options_promote_children": {
"message": "оставлять дочерние вкладки при закрытии родительской. (Если отключено, то при закрытии родительской вкладки все дочерние вкладки дерева будут закрыты. Будьте осторожны, так как отмена закрытия вкладки не восстановит структуру дерева)"
},
"options_remove_theme_button": {
"message": "Удалить"
},
"options_rename_theme_button": {
"message": "Переименовать"
},
"options_scrollbar_pin_list": {
"message": "высота полосы прокрутки закреплённых вкладок"
},
"options_scrollbar_tab_list": {
"message": "ширина полосы прокрутки списка вкладок"
},
"options_scrollbars": {
"message": " Полоса прокрутки "
},
"options_skip_load": {
"message": "отменить древовидную структуру после перезапуска браузера. Это предназначено для тех, кто не использует сохранение сессии (опция отключает загрузку базы данных при запуске браузера)"
},
"options_tabs": {
"message": " Вкладки "
},
"options_tabs_size": {
"message": "Размер вкладок"
},
"options_theme": {
"message": "Тема"
},
"options_theme_name_cannot_be_empty": {
"message": "Введите название темы."
},
"options_theme_tabs": {
"message": " Внешний вид вкладок "
},
"options_theme_tabs_sample_text_active_selected": {
"message": "Активная"
},
"options_theme_tabs_sample_text_discarded": {
"message": "Выгруженная"
},
"options_theme_tabs_sample_text_normal": {
"message": "Обычная"
},
"options_theme_tabs_sample_text_search_result": {
"message": "Результат поиска"
},
"options_theme_tabs_sample_text_search_result_higlighted": {
"message": "Выделенный результат поиска"
},
"options_theme_tabs_sample_text_search_result_selected": {
"message": "Выбранный результат поиска"
},
"options_theme_tabs_sample_text_search_result_selected_active": {
"message": "Активный результат поиска"
},
"options_there_is_a_theme_with_this_name": {
"message": "Такое название темы уже существует, введите новое."
},
"options_toolbar": {
"message": " Панель инструментов "
},
"options_available_buttons": {
"message": "Настраивайте панель управления перетаскиванием элементов. Чтобы скрыть элемент, переместите его на зелёное поле."
},
"options_vivaldi": {
"message": " Vivaldi "
},
"opt_url_for_web_panel": {
"message": "Вставить этот URL в веб-панель"
},
"tabs_menu_clone": {
"message": "Дублировать вкладку"
},
"tabs_menu_close": {
"message": "Закрыть вкладку"
},
"tabs_menu_close_other": {
"message": "Закрыть другие вкладки"
},
"tabs_menu_collapse_all": {
"message": "Свернуть все деревья"
},
"tabs_menu_discard": {
"message": "Выгрузить вкладку"
},
"tabs_menu_expand_all": {
"message": "Раскрыть все деревья"
},
"tabs_menu_move": {
"message": "Отсоединить вкладку"
},
"tabs_menu_mute": {
"message": "Выключить звук на вкладке"
},
"tabs_menu_mute_other": {
"message": "Выключить звук (на других)"
},
"tabs_menu_new": {
"message": "Новая вкладка"
},
"tabs_menu_pin": {
"message": "Закрепить вкладку"
},
"tabs_menu_reload": {
"message": "Обновить вкладку"
},
"tabs_menu_settings": {
"message": "Настройки Tree Tabs"
},
"tabs_menu_undo": {
"message": "Отменить закрытие"
},
"tabs_menu_unmute": {
"message": "Включить звук на вкладке"
},
"tabs_menu_unmute_other": {
"message": "Включить звук (на других)"
},
"tabs_menu_unpin": {
"message": "Открепить вкладку"
},
"options_active_tab_font_bold": {
"message": "жирный шрифт для активной вкладки"
}
}

292
background.js Normal file
View File

@ -0,0 +1,292 @@
var opt = {
"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, "open_tree_on_hover": true, "max_tree_depth": -1, "never_show_close": false, "faster_scroll": false
};
var opt_toolbar = {
"active_toolbar_tool": "", "filter_type": "url"
};
var hold = true,
started = false,
schedule_save = 0,
tabs = {},
dt = {tabsIds: [], DropAfter: true, DropToTabId: 0, DropToIndex: 0, CameFromWindowId: 0, DroppedToWindowId: 0},
caption_clear_filter = chrome.i18n.getMessage("caption_clear_filter"),
caption_loading = chrome.i18n.getMessage("caption_loading"),
caption_searchbox = chrome.i18n.getMessage("caption_searchbox");
function Start(){
started = true;
// open options to set defaults
if (localStorage.getItem("themeDefault") === null){
chrome.tabs.create({url: "options.html" });
}
// all variables needed to load data
var loaded_options = {}, loaded_opt_toolbar = {};
// set loaded options
if (localStorage.getItem("current_options") !== null){
loaded_options = JSON.parse(localStorage["current_options"]);
}
for (var parameter in opt) {
if (loaded_options[parameter] != undefined && opt[parameter] != undefined){
opt[parameter] = loaded_options[parameter];
}
}
// toolbar shelfs options (search url-title and which shelf is active)
if (localStorage.getItem("current_toolbar_options") !== null){
loaded_opt_toolbar = JSON.parse(localStorage["current_toolbar_options"]);
}
for (var parameter in opt_toolbar) {
if (loaded_opt_toolbar[parameter] != undefined && opt_toolbar[parameter] != undefined){
opt_toolbar[parameter] = loaded_opt_toolbar[parameter];
}
}
LoadTabs(0);
}
function LoadTabs(retry){
chrome.tabs.query({windowType: "normal"}, function(qtabs){
// will loop forever if session restore tab is found
if (navigator.userAgent.match("Firefox") !== null){
var halt = false;
for (var t = 0; t < qtabs.length; t++){
if (qtabs[t].url.match("sessionrestore")){
halt = true;
chrome.tabs.update(qtabs[t].id, { active: true });
break;
}
}
if (halt){
setTimeout(function(){
LoadTabs(retry);
}, 2000);
return;
}
}
// create current tabs object
qtabs.forEach(function(Tab){
HashTab(Tab);
});
var reference_tabs = {};
var tabs_matched = 0;
// compare saved tabs from storage to current session tabs, but can be skipped if set in options
if (opt.skip_load == false){
qtabs.forEach(function(Tab){
for (var t = 0; t < 9999; t++){
if (localStorage.getItem("t"+t) !== null){
var LoadedTab = JSON.parse(localStorage["t"+t]);
if (LoadedTab[1] === tabs[Tab.id].h && reference_tabs[LoadedTab[0]] == undefined){
reference_tabs[LoadedTab[0]] = Tab.id;
tabs[Tab.id].p = LoadedTab[2];
tabs[Tab.id].n = LoadedTab[3];
tabs[Tab.id].o = LoadedTab[4];
tabs_matched++;
break;
}
} else {
break;
}
}
});
// replace parents tabIds to new ones, for that purpose reference_tabs was made before
for (var tabId in tabs){
if (reference_tabs[tabs[tabId].p] != undefined){
tabs[tabId].p = reference_tabs[tabs[tabId].p];
}
}
}
// will try to find tabs for 10 times, roughly 30 seconds
if (opt.skip_load == true || retry > 10 || localStorage.getItem("t0") === null || localStorage.getItem("t_count") === null || (tabs_matched > JSON.parse(localStorage["t_count"]))){
hold = false;
StartChromeListeners();
PeriodicCheck();
AutoSaveData();
} else {
setTimeout(function(){
LoadTabs(retry+1);
}, 3000);
}
});
}
// once a minute checking for missing tabs
function PeriodicCheck(){
setTimeout(function(){
PeriodicCheck();
if (!hold){
chrome.tabs.query({windowType: "normal"}, function(qtabs){
qtabs.forEach(function(Tab){
if (tabs[Tab.id] == undefined){
HashTab(Tab);
setTimeout(function(){
chrome.runtime.sendMessage({command: "recheck_tabs"});
},300);
setTimeout(function(){
schedule_save++;
},600);
}
});
});
}
},60000);
}
// save every 2 seconds if there is anything to save obviously
function AutoSaveData(){
setTimeout(function(){
AutoSaveData();
if (schedule_save > 0){
schedule_save = 1;
}
if (!hold && schedule_save > 0 && Object.keys(tabs).length > 1){
chrome.tabs.query({windowType: "normal"}, function(qtabs){
localStorage["t_count"] = qtabs.length*0.5;
for (var t = 0; t < qtabs.length; t++){
if (tabs[qtabs[t].id] != undefined && tabs[qtabs[t].id].h != undefined && tabs[qtabs[t].id].p != undefined && tabs[qtabs[t].id].n != undefined && tabs[qtabs[t].id].o != undefined){
var Tab = JSON.stringify([qtabs[t].id, tabs[qtabs[t].id].h, tabs[qtabs[t].id].p, tabs[qtabs[t].id].n, tabs[qtabs[t].id].o]);
if (localStorage.getItem("t"+t) == null || localStorage["t"+t] !== Tab){
localStorage["t"+t] = Tab;
}
}
}
schedule_save--;
});
}
}, 1000);
}
function SaveOptions(){
localStorage["current_options"] = JSON.stringify(opt);
}
function SaveToolbarOptions(){
localStorage["current_toolbar_options"] = JSON.stringify(opt_toolbar);
}
function HashTab(tab){
if (tabs[tab.id] == undefined){
tabs[tab.id] = {h: 0, p: tab.pinned ? "pin_list" : "tab_list", n: tab.index, o: "n"};
}
var hash = 0;
if (tab.url.length === 0){
return 0;
}
for (var i = 0; i < tab.url.length; i++){
hash = (hash << 5)-hash;
hash = hash+tab.url.charCodeAt(i);
hash |= 0;
}
tabs[tab.id].h = hash;
}
// start all listeners
function StartChromeListeners(){
chrome.tabs.onCreated.addListener(function(tab){
HashTab(tab);
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){
if (tabs[tabId] == undefined){ HashTab(tab); }
chrome.runtime.sendMessage({command: "tab_attached", windowId: attachInfo.newWindowId, tab: tab, tabId: tabId});
});
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.onDetached.addListener(function(tabId, detachInfo){
if (tabs[tabId] == undefined){ HashTab(tab); }
chrome.runtime.sendMessage({command: "tab_removed", windowId: detachInfo.oldWindowId, tabId: tabId});
schedule_save++;
});
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab){
if (tabs[tabId] == undefined || changeInfo.url != undefined){ HashTab(tab); }
if (changeInfo.pinned == true){ tabs[tabId].p = "pin_list"; }
if (changeInfo.pinned == false){ tabs[tabId].p = "tab_list"; }
chrome.runtime.sendMessage({command: "tab_updated", windowId: tab.windowId, tab: tab, tabId: tabId, changeInfo: changeInfo});
if (changeInfo.url != undefined || changeInfo.pinned != undefined){schedule_save++;}
});
chrome.tabs.onMoved.addListener(function(tabId, moveInfo){
if (tabs[tabId] == undefined){ HashTab(tab); }
chrome.runtime.sendMessage({command: "tab_moved", windowId: moveInfo.windowId, tabId: tabId, moveInfo: 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 {
if (tabs[removedTabId]){
tabs[addedTabId] = {h: GetHash(tab.url), p: tabs[removedTabId].p, n: tabs[removedTabId].n, o: tabs[removedTabId].o};
} else {
HashTab(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.runtime.onMessage.addListener(function(message, sender, sendResponse){
switch(message.command){
case "background_start":
if (!started){
Start();
}
break;
case "reload":
window.location.reload();
break;
case "options_save":
SaveOptions();
break;
case "toolbar_options_save":
SaveToolbarOptions();
break;
}
});
function log(m){
console.log(m);
}
chrome.runtime.onStartup.addListener(function(){
Start();
});
if (navigator.userAgent.match("Firefox") === null){
chrome.runtime.onSuspend.addListener(function(){
hold = true;
});
}

298
defaults.js Normal file
View File

@ -0,0 +1,298 @@
var ColorsSet = {
// scrolls
"scrollbar_thumb": "#cdcdcd",
"scrollbar_thumb_hover": "#a6a6a6",
"scrollbar_track": "#e4e4e4",
// toolbar
"toolbar_background": "#f2f2f2",
"toolbar_border_bottom": "#cccccc",
"button_border": "#f2f2f2",
"button_background": "#f2f2f2",
"button_hover_border": "#bebebe",
"button_hover_background": "#dcdcdc",
"button_icons": "#808080",
"filter_box_background": "#fafafa",
"filter_box_border": "#cccccc",
"filter_box_font": "#333333",
"filter_clear_icon": "#808080",
// lists
"pin_list_border_bottom": "#cccccc",
"pin_list_background": "#fafafa",
"tab_list_background": "#fafafa",
// tabs
"tab_background": "#f2f2f2",
"tab_border": "#bebebe",
"tab_hover_background": "#d7d7d7",
"tab_hover_border": "#878787",
"tab_selected_background": "#e5f3fb",
"tab_selected_border": "#70c0e7",
"tab_selected_hover_border": "#78aee5",
"tab_selected_hover_background": "#d0e2f0",
"tab_filtered": "#e8e000",
"tab_filtered_highlighted": "#ffa500",
"tab_filtered_selected": "#0f8079",
"tab_filtered_selected_active": "#1299a9",
"active_font_weight": "bold",
// tabs title
"tab_title": "#000000",
"tab_title_active": "#000000",
"tab_title_discarded": "#7e7e7e",
// drag&drop placeholder indicator
"drag_indicator": "#339bf3",
// close button
"close_x": "#7d7d7d",
"close_hover_x": "#fbfcfe",
"close_hover_border": "#757676",
"close_hover_background": "#939394",
// trees expand
"expand_open_border": "#339bf3",
"expand_open_background": "#d0e2f0",
"expand_closed_border": "#969696",
"expand_closed_background": "#eaeaea",
"expand_lines": "#cccccc",
"tabs_menu_font": "#333333",
"tabs_menu_background": "#fafafa",
"tabs_menu_border": "#bebebe",
"tabs_menu_hover_background": "#efefef",
"tabs_menu_hover_border": "#bebebe",
"tabs_menu_separator": "#efefef"
}
var TabsSizeSets = [
//0
{
"pin_width": "22px",
"pin_height": "20px",
"tab_height": "15px",
"tab_height_line": "17px",
"expand_box_size": "5px",
"expand_box_top": "4px",
"expand_box_left": "3px",
"expand_line_h_top": "7px",
"expand_line_h_width": "12px",
"expand_line_h_oc_width": "3px",
"expand_line_v_top": "-7px",
"expand_line_v_left": "0px",
"expand_line_v_last_height": "15px",
"title_padding_with_close": "20px",
"title_font_size": "10.5px",
"title_padding_left": "19px",
"drag_area_top": "6px",
"drag_area_bottom": "4px",
"close_top": "1px",
"close_right": "1px",
"close_size": "11px",
"favicon_size": "13px 13px",
"favicon_pos": "2px center"
},
//1
{
"pin_width": "24px",
"pin_height": "22px",
"tab_height": "17px",
"tab_height_line": "19px",
"expand_box_size": "5px",
"expand_box_top": "5px",
"expand_box_left": "3px",
"expand_line_h_top": "8px",
"expand_line_h_width": "12px",
"expand_line_h_oc_width": "3px",
"expand_line_v_top": "-8px",
"expand_line_v_left": "0px",
"expand_line_v_last_height": "17px",
"title_padding_with_close": "20px",
"title_font_size": "10.5px",
"title_padding_left": "20px",
"drag_area_top": "7px",
"drag_area_bottom": "5px",
"close_top": "2px",
"close_right": "2px",
"close_size": "11px",
"favicon_size": "14px 14px",
"favicon_pos": "3px center"
},
//2
{
"pin_width": "26px",
"pin_height": "24px",
"tab_height": "19px",
"tab_height_line": "23px",
"expand_box_size": "5px",
"expand_box_top": "6px",
"expand_box_left": "3px",
"expand_line_h_top": "9px",
"expand_line_h_width": "12px",
"expand_line_h_oc_width": "3px",
"expand_line_v_top": "-9px",
"expand_line_v_left": "0px",
"expand_line_v_last_height": "19px",
"title_padding_with_close": "24px",
"title_font_size": "12px",
"title_padding_left": "25px",
"drag_area_top": "7px",
"drag_area_bottom": "5px",
"close_top": "2px",
"close_right": "2px",
"close_size": "13px",
"favicon_size": "16px 16px",
"favicon_pos": "4px center"
},
//3
{
"pin_width": "28px",
"pin_height": "26px",
"tab_height": "21px",
"tab_height_line": "25px",
"expand_box_size": "5px",
"expand_box_top": "7px",
"expand_box_left": "3px",
"expand_line_h_top": "10px",
"expand_line_h_width": "12px",
"expand_line_h_oc_width": "3px",
"expand_line_v_top": "-10px",
"expand_line_v_left": "0px",
"expand_line_v_last_height": "21px",
"title_padding_with_close": "24px",
"title_font_size": "12px",
"title_padding_left": "25px",
"drag_area_top": "8px",
"drag_area_bottom": "5px",
"close_top": "3px",
"close_right": "3px",
"close_size": "13px",
"favicon_size": "16px 16px",
"favicon_pos": "4px center"
},
//4
{
"pin_width": "30px",
"pin_height": "28px",
"tab_height": "23px",
"tab_height_line": "26px",
"expand_box_size": "5px",
"expand_box_top": "8px",
"expand_box_left": "3px",
"expand_line_h_top": "11px",
"expand_line_h_width": "12px",
"expand_line_h_oc_width": "3px",
"expand_line_v_top": "-11px",
"expand_line_v_left": "0px",
"expand_line_v_last_height": "23px",
"title_padding_with_close": "24px",
"title_font_size": "12.5px",
"title_padding_left": "25px",
"drag_area_top": "9px",
"drag_area_bottom": "6px",
"close_top": "4px",
"close_right": "4px",
"close_size": "14px",
"favicon_size": "16px 16px",
"favicon_pos": "4px center"
}
];
var CurrentThemeVersion = 1;
var TabsSizeSet = 2;
var ScrollbarPinList = 4;
var ScrollbarTabList = 16;
var ToolbarShow = true;
var ToolbarSet = $("#toolbar").html();
function SaveTheme(themeName){
var themeObj = {
"toolbar": ToolbarSet,
"ToolbarShow": ToolbarShow,
"ColorsSet": ColorsSet,
"TabsSizeSetNumber": TabsSizeSet,
"TabsSizeSet": TabsSizeSets[TabsSizeSet],
"ScrollbarPinList": ScrollbarPinList,
"ScrollbarTabList": ScrollbarTabList,
"theme_version": CurrentThemeVersion
};
localStorage["theme"+themeName] = JSON.stringify(themeObj);
return themeObj;
}
if (localStorage.getItem("themeDefault") === null){
SaveTheme("Default");
localStorage["current_theme"] = "Default";
} else {
var theme = JSON.parse(localStorage["themeDefault"]);
if (theme.theme_version != CurrentThemeVersion){
SaveTheme("Default");
}
}

BIN
icons/128.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 359 B

BIN
icons/16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 B

BIN
icons/24.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 B

BIN
icons/38.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 B

BIN
icons/48.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 181 B

BIN
icons/64.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 B

4
lib_jquery/jquery-3.2.1.min.js vendored Normal file

File diff suppressed because one or more lines are too long

51
manifest.json Normal file
View File

@ -0,0 +1,51 @@
{
"manifest_version": 2,
"default_locale": "en",
"background": {
"scripts": [ "background.js" ],
"persistent": true
},
"name": "Tree Tabs",
"description": "__MSG_extDesc__",
"icons": {
"128": "icons/128.png",
"48": "icons/48.png",
"38": "icons/24.png",
"19": "icons/16.png",
"16": "icons/16.png"
},
"permissions": [ "tabs", "sessions", "chrome://favicon/" ],
"commands": {
"goto_tab_above": {
"suggested_key": {
"default": "Alt+1"
},
"description": "Go to tab above"
},
"goto_tab_below": {
"suggested_key": {
"default": "Alt+2"
},
"description": "Go to tab below"
}
},
"sidebar_action": {
"default_icon": {
"19": "icons/16.png",
"38": "icons/38.png"
},
"default_panel": "sidebar.html",
"default_title": "Tree Tabs"
},
"options_page": "options.html",
"applications": {
"gecko": {
"id": "TreeTabs@jagiello.it"
}
},
"options_ui": {
"page": "options.html",
"open_in_tab":true
},
"version": "0.0.16"
}

498
options.html Normal file
View File

@ -0,0 +1,498 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title></title>
<style rel="stylesheet">
body:hover #donate {
animation: shake 0.82s cubic-bezier(.36,.07,.19,.97) both;
transform: translate3d(0, 0, 0);
backface-visibility: hidden;
perspective: 1000px;
}
@keyframes shake {
10%, 90% {
transform: translate3d(-1px, 0, 0);
}
20%, 80% {
transform: translate3d(2px, 0, 0);
}
30%, 50%, 70% {
transform: translate3d(-4px, 0, 0);
}
40%, 60% {
transform: translate3d(4px, 0, 0);
}
}
body {
margin: 20px;
background-color: transparent;
border: none;
width: auto;
height: auto;
overflow: auto;
padding: 0;
font-family: Arial;
font-size: 13px;
cursor: default;
}
.field {
width: 850px;
word-wrap: break-word;
overflow: hidden;
margin-bottom:15px;
}
ul {
padding-left: 22px;
}
ul li {
margin: 5px;
}
.label {
padding-left: 6px;
padding-right: 6px;
}
.cp {
position:relative;
left:-10px;
top:-10px;
width:40px;
height:40px;
border:none;
margin:none;
}
.cb {
border:1px solid #636363;
overflow:hidden;
width:20px;
height:20px;
margin-bottom:2px;
}
</style>
<link type="text/css" rel="stylesheet" media="all" href="../theme/theme.css" id="theme" />
</head>
<body id="body">
<div style="width:850px; align:left;"><span style="width:100%; font-size:20px; display:inline-block; text-align:center; ">Tree Tabs</span></div>
<br>
<fieldset class="field" id="field_vivaldi">
<legend class="label" id="options_vivaldi"></legend>
<table>
<tr>
<td class="label" id="opt_url_for_web_panel"></td>
<td><input style="position:relative;width:450px;left:8px;" type="text" id="url_for_web_panel" value="test"></input></td>
</tr>
</table>
</fieldset>
<fieldset class="field" id="field_pins">
<legend class="label" id="options_pinned" ></legend>
<table style="display:inline-block;">
<tr>
<td><input type="checkbox" class="opt_checkbox bg_opt" id="pin_list_multi_row"></input></td>
<td style="position:relative;left:2px;width:3px;">-</td>
<td class="label" id="options_pin_list_multi_row"></td>
</tr>
<tr>
<td><input type="checkbox" class="opt_checkbox bg_opt" id="allow_pin_close"></input></td>
<td style="position:relative;left:2px;width:3px;">-</td>
<td class="label" id="option_allow_pin_close"></td>
</tr>
</table>
</fieldset>
<fieldset class="field" id="field_tabs">
<legend class="label" id="options_tabs"></legend>
<table style="display:vinline-block;">
<tr>
<td><input type="checkbox" class="opt_checkbox bg_opt" id="close_with_MMB"></input></td>
<td style="position:relative;left:2px;width:3px;">-</td>
<td class="label" id="options_close_with_MMB"></td>
</tr>
<tr>
<td><input type="checkbox" class="opt_checkbox bg_opt" id="always_show_close"></input></td>
<td style="position:relative;left:2px;width:3px;">-</td>
<td class="label" id="options_always_show_close"></td>
</tr>
<tr>
<td><input type="checkbox" class="opt_checkbox bg_opt" id="never_show_close"></input></td>
<td style="position:relative;left:2px;width:3px;">-</td>
<td class="label" id="options_never_show_close"></td>
</tr>
<tr>
<td><input type="checkbox" class="opt_checkbox bg_opt" id="close_other_trees"></input></td>
<td style="position:relative;left:2px;width:3px;">-</td>
<td class="label" id="options_close_other_trees"></td>
</tr>
<tr>
<td><input type="checkbox" class="opt_checkbox bg_opt" id="open_tree_on_hover"></input></td>
<td style="position:relative;left:2px;width:3px;">-</td>
<td class="label" id="options_open_tree_on_hover"></td>
</tr>
<tr>
<td style="position:relative;top:-5px;"><input type="checkbox" class="opt_checkbox bg_opt" id="promote_children"></input></td>
<td style="position:relative;top:-5px;left:2px;width:3px;">-</td>
<td class="label" id="options_promote_children"></td>
</tr>
<tr>
<td style="position:relative;top:-1px;"><input type="checkbox" class="opt_checkbox bg_opt" id="skip_load"></input></td>
<td style="position:relative;top:-1px;left:2px;width:3px;">-</td>
<td class="label" id="options_skip_load"></td>
</tr>
</table>
<table id="faster_scroll_for_firefox" style="display:vinline-block;">
<tr>
<td><input type="checkbox" class="opt_checkbox bg_opt" id="faster_scroll"></input></td>
<td style="position:relative;left:2px;width:3px;">-</td>
<td class="label" id="options_faster_scroll"></td>
</tr>
</table>
<ul>
<li>
<label class="label" id="options_append_child_tab"></label>
<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>
</select>
</li>
<li>
<label class="label" id="options_append_orphan_tab"></label>
<select id="append_orphan_tab">
<option class="bg_opt_drop_down_menu" id="options_append_orphan_tab_top" value="top"></option>
<option class="bg_opt_drop_down_menu" id="options_append_orphan_tab_after_active" value="after_active"></option>
<option class="bg_opt_drop_down_menu" id="options_append_orphan_tab_bottom" value="bottom"></option>
<option class="bg_opt_drop_down_menu" id="options_append_orphan_tab_as_child" value="as_child"></option>
</select>
</li>
<li>
<label class="label" id="options_after_closing_active_tab"></label>
<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_browser" value="browser"></option>
</select>
</li>
<li>
<label class="label" id="options_append_child_tab_after_limit"></label>
<select id="append_child_tab_after_limit">
<option class="bg_opt_drop_down_menu" id="options_append_child_tab_after_limit_top" value="top"></option>
<option class="bg_opt_drop_down_menu" id="options_append_child_tab_after_limit_after" value="after"></option>
<option class="bg_opt_drop_down_menu" id="options_append_child_tab_after_limit_bottom" value="bottom"></option>
</select>
</li>
</ul>
<table style="display:vinline-block;">
<tr>
<td>
<input type="number" style="width:80px;" min="-1" max="9999" step="1" id="max_tree_depth"></input>
</td>
<td style="position:relative;left:2px;width:3px;">-</td>
<td class="label" id="options_max_tree_depth"></td>
</tr>
</table>
</fieldset>
<fieldset class="field" id="field_theme" style="width:850px;">
<legend class="label" id="options_theme"></legend>
<select id="theme_list" style="padding-right:6px;"></select>
<input type="text" id="new_theme_name" name="untitled" value="untitled"></input>
<button class="set_button" type="button" id="options_rename_theme_button" style="margin:10px;">Rename</button>
<button class="set_button" type="button" id="options_add_theme_button" style="margin:10px;">Add new</button>
<button class="set_button" type="button" id="options_remove_theme_button" style="margin:10px;">Remove</button>
<button class="set_button" type="button" id="options_import_theme_button" style="margin:10px;">Import</button>
<button class="set_button" type="button" id="options_export_theme_button" style="margin:10px;">Export</button>
<input type="file" multiple id="import_theme" style="display:none"></input>
<fieldset class="field" id="field_show_toolbar" style="width:816px;">
<legend id="toolbar_legend">
<input type="checkbox" style="position:relative; top:-1px;" id="show_toolbar"></input>
<label class="label" style="position:relative; top:-3px;" id="options_toolbar"></label>
</legend>
<label class="label" style="margin-bottom: 10px; margin-top: 4px; display: inline-block;" id="options_available_buttons"></label>
<div class="toolbar" id="toolbar" style="height: 94px; width: 250px;">
<div class="toolbar_int" id="toolbar_main">
<div class="button" id="button_new"><div class="button_img"></div></div>
<div class="button" id="button_pin"><div class="button_img"></div></div>
<div class="button" id="button_undo"><div class="button_img"></div></div>
<div class="button" id="button_search"><div class="button_img"></div></div>
<div class="button" id="button_tools"><div class="button_img"></div></div>
</div>
<div class="toolbar_int" id="toolbar_search">
<div id="toolbar_search_input_box">
<input id="filter_box" type="text" placeholder="Search tabs..."></input>
<div id="button_filter_clear" style="opacity:0;" type="reset"></div>
</div>
<div id="toolbar_search_buttons">
<div class="button" id="button_filter_type"><div class="button_img"></div></div>
<div class="button" id="filter_search_go_prev"><div class="button_img"></div></div>
<div class="button" id="filter_search_go_next"><div class="button_img"></div></div>
</div>
</div>
<div class="toolbar_int" id="toolbar_tools">
<div class="button" id="button_options"><div class="button_img"></div></div>
<div class="button" id="button_bookmarks"><div class="button_img"></div></div>
<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_move"><div class="button_img"></div></div>
</div>
<div id="toolbar_separator">
</div>
<div class="toolbar_int" id="toolbar_unused_buttons">
</div>
</div>
<br>
<table id="toolbar_colors" style="margin: 10px; vertical-align: top;">
<tr>
<td><div class="cb"><input class="cp" id="toolbar_background" type="color"></div></td>
<td class="cpl" id="options_color_theme_toolbar_background"></td>
<td><div class="cb"><input class="cp" id="toolbar_border_bottom" type="color"></div></td>
<td class="cpl" id="options_color_toolbar_border_bottom"></td>
</tr>
<tr>
<td><div class="cb"><input class="cp" id="button_icons" type="color"></div></td>
<td class="cpl" id="options_color_button_icons"></td>
<td><div class="cb"><input class="cp" id="button_border" type="color"></div></td>
<td class="cpl" id="options_color_button_border"></td>
<td><div class="cb"><input class="cp" id="button_background" type="color"></div></td>
<td class="cpl" id="options_color_button_background"></td>
</tr>
<tr>
<td><div class="cb"><input class="cp" id="button_hover_border" type="color"></div></td>
<td class="cpl" id="options_color_button_hover_border"></td>
<td><div class="cb"><input class="cp" id="button_hover_background" type="color"></div></td>
<td class="cpl" id="options_color_button_hover_background"></td>
<td><div class="cb"><input class="cp" id="filter_box_background" type="color"></div></td>
<td class="cpl" id="options_color_filter_box_background"></td>
</tr>
<tr>
<td><div class="cb"><input class="cp" id="filter_box_border" type="color"></div></td>
<td class="cpl" id="options_color_filter_box_border"></td>
<td><div class="cb"><input class="cp" id="filter_box_font" type="color"></div></td>
<td class="cpl" id="options_color_filter_box_font"></td>
<td><div class="cb"><input class="cp" id="filter_clear_icon" type="color"></div></td>
<td class="cpl" id="options_color_filter_clear_icon"></td>
</tr>
</table>
</fieldset>
<fieldset class="field" id="Tabs" style="width:816px;">
<legend class="label" id="options_theme_tabs"></legend>
<table style="display: inline-block;">
<tr>
<td>
<div class="pin_list" id="pin_list" style="height: 30px; width: 250px;">
</div>
<br>
<div class="tab_list" id="tab_list" style="height: 80px; width: 250px;">
</div>
</td>
<table style="position:relative;top:-35px;display: inline-block;">
<tr>
<td>
<button id="options_tabs_size_down" style="margin-top:10px;margin-left:10px;">-</button>
<label class="label" id="options_tabs_size"></label>
<button id="options_tabs_size_up" style="margin-top:10px;">+</button>
</td>
</tr>
<tr>
<td style="position:relative;left:10px">
<input style="position:relative;top:2px;" type="checkbox" id="active_tab_font_bold"></input> - <label class="label" id="options_active_tab_font_bold"></label>
</td>
</tr>
</table>
</tr>
</table>
<table style="display: inline-block; margin-top: 10px;margin-left: 10px;vertical-align: top;">
<tr>
<td><div class="cb"><input class="cp" id="pin_list_border_bottom" type="color"></div></td>
<td class="cpl" id="options_color_pin_list_border_bottom"></td>
<td><div class="cb"><input class="cp" id="pin_list_background" type="color"></div></td>
<td class="cpl" id="options_color_pin_list_background"></td>
<td><div class="cb"><input class="cp" id="tab_list_background" type="color"></div></td>
<td class="cpl" id="options_color_tab_list_background"></td>
<td><div class="cb"><input class="cp" id="expand_lines" type="color"></div></td>
<td class="cpl" id="options_color_expand_lines"></td>
</tr>
<tr>
<td><div class="cb"><input class="cp" id="tab_background" type="color"></div></td>
<td class="cpl" id="options_color_tab_background"></td>
<td><div class="cb"><input class="cp" id="tab_border" type="color"></div></td>
<td class="cpl" id="options_color_tab_border"></td>
<td><div class="cb"><input class="cp" id="tab_hover_background" type="color"></div></td>
<td class="cpl" id="options_color_tab_hover_background"></td>
<td><div class="cb"><input class="cp" id="tab_hover_border" type="color"></div></td>
<td class="cpl" id="options_color_tab_hover_border"></td>
</tr>
<tr>
<td><div class="cb"><input class="cp" id="drag_indicator" type="color"></div></td>
<td class="cpl" id="options_color_drag_indicator"></td>
<td><div class="cb"><input class="cp" id="tab_title" type="color"></div></td>
<td class="cpl" id="options_color_tab_title"></td>
<td><div class="cb"><input class="cp" id="tab_title_active" type="color"></div></td>
<td class="cpl" id="options_color_tab_title_active"></td>
<td><div class="cb"><input class="cp" id="tab_title_discarded" type="color"></div></td>
<td class="cpl" id="options_color_tab_title_discarded"></td>
</tr>
<tr>
<td><div class="cb"><input class="cp" id="tab_selected_background" type="color"></div></td>
<td class="cpl" id="options_color_tab_selected_background"></td>
<td><div class="cb"><input class="cp" id="tab_selected_border" type="color"></div></td>
<td class="cpl" id="options_color_tab_selected_border"></td>
<td><div class="cb"><input class="cp" id="tab_selected_hover_border" type="color"></div></td>
<td class="cpl" id="options_color_tab_selected_hover_border"></td>
<td><div class="cb"><input class="cp" id="tab_selected_hover_background" type="color"></div></td>
<td class="cpl" id="options_color_tab_selected_hover_background"></td>
</tr>
<tr>
<td><div class="cb"><input class="cp" id="tab_filtered" type="color"></div></td>
<td class="cpl" id="options_color_tab_filtered"></td>
<td><div class="cb"><input class="cp" id="tab_filtered_highlighted" type="color"></div></td>
<td class="cpl" id="options_color_tab_filtered_highlighted"></td>
<td><div class="cb"><input class="cp" id="tab_filtered_selected" type="color"></div></td>
<td class="cpl" id="options_color_tab_filtered_selected"></td>
<td><div class="cb"><input class="cp" id="tab_filtered_selected_active" type="color"></div></td>
<td class="cpl" id="options_color_tab_filtered_selected_active"></td>
</tr>
<tr>
<td><div class="cb"><input class="cp" id="close_x" type="color"></div></td>
<td class="cpl" id="options_color_close_x"></td>
<td><div class="cb"><input class="cp" id="close_hover_x" type="color"></div></td>
<td class="cpl" id="options_color_close_hover_x"></td>
<td><div class="cb"><input class="cp" id="close_hover_border" type="color"></div></td>
<td class="cpl" id="options_color_close_hover_border"></td>
<td><div class="cb"><input class="cp" id="close_hover_background" type="color"></div></td>
<td class="cpl" id="options_color_close_hover_background"></td>
</tr>
<tr>
<td><div class="cb"><input class="cp" id="expand_open_border" type="color"></div></td>
<td class="cpl" id="options_color_expand_open_border"></td>
<td><div class="cb"><input class="cp" id="expand_open_background" type="color"></div></td>
<td class="cpl" id="options_color_expand_open_background"></td>
<td><div class="cb"><input class="cp" id="expand_closed_border" type="color"></div></td>
<td class="cpl" id="options_color_expand_closed_border"></td>
<td><div class="cb"><input class="cp" id="expand_closed_background" type="color"></div></td>
<td class="cpl" id="options_color_expand_closed_background"></td>
</tr>
</table>
</fieldset>
<fieldset class="field" id="field_scrollbars" style="width:816px;">
<legend class="label" id="options_scrollbars"></legend>
<table style="display:inline-block;margin-top:10px;margin-left:0px;vertical-align:top;">
<tr>
<td>
<div class="scrollbar" id="scrollbar" style="height:20px;width:25px;overflow:auto;">
<div style="height: 1px; width: 200px;"></div>
</div>
<br>
<div class="scrollbar" id="scrollbar" style="height:20px;width:25px;overflow:auto;">
<div style="height:1000px;width:5px;"></div>
</div>
</td>
<td>
<table style="display:inline-block;vertical-align:top;">
<tr>
<td><input type="number" style="width:40px;" min="0" max="20" step="1" id="scrollbar_pin_list"></input></td>
<td style="position:relative;left:2px;width:3px;">-</td>
<td class="label" id="options_scrollbar_pin_list"></td>
<td><div class="cb"><input class="cp" id="scrollbar_thumb" type="color"></div></td>
<td class="cpl" id="options_color_scrollbar_thumb"></td>
<td><div class="cb"><input class="cp" id="scrollbar_thumb_hover" type="color"></div></td>
<td class="cpl" id="options_color_scrollbar_thumb_hover"></td>
</tr>
<tr>
<td><input type="number" style="width:40px;" min="0" max="20" step="1" id="scrollbar_tab_list"></input></td>
<td style="position:relative;left:2px;width:3px;">-</td>
<td class="label" id="options_scrollbar_tab_list"></td>
<td><div class="cb"><input class="cp" id="scrollbar_track" type="color"></div></td>
<td class="cpl" id="options_color_scrollbar_track"></td>
</tr>
</table>
</td>
</tr>
</table>
</fieldset>
<fieldset class="field" style="width:816px;">
<legend class="label" id="options_menu"></legend>
<ul class="menu" id="tabs_menu" style="display:inline-block;position:relative;top:0px;left:0px;">
<li class="menu_item"></li>
<div class="separator"></div>
<li class="menu_item"></li>
<div class="separator"></div>
<li class="menu_item"></li>
</ul>
<table style="display:inline-block;vertical-align:top;margin-left:10px;margin-top:16px;">
<tr>
<td><div class="cb"><input class="cp" id="tabs_menu_background" type="color"></div></td>
<td class="cpl" id="options_color_tabs_menu_background"></td>
<td><div class="cb"><input class="cp" id="tabs_menu_border" type="color"></div></td>
<td class="cpl" id="options_color_tabs_menu_border"></td>
</tr>
<tr>
<td><div class="cb"><input class="cp" id="tabs_menu_hover_background" type="color"></div></td>
<td class="cpl" id="options_color_tabs_menu_hover_background"></td>
<td><div class="cb"><input class="cp" id="tabs_menu_hover_border" type="color"></div></td>
<td class="cpl" id="options_color_tabs_menu_hover_border"></td>
</tr>
<tr>
<td><div class="cb"><input class="cp" id="tabs_menu_font" type="color"></div></td>
<td class="cpl" id="options_color_tabs_menu_font"></td>
<td><div class="cb"><input class="cp" id="tabs_menu_separator" type="color"></div></td>
<td class="cpl" id="options_color_tabs_menu_separator"></td>
</tr>
</table>
</fieldset>
</fieldset>
<script type="text/javascript" src="../lib_jquery/jquery-3.2.1.min.js"></script>
<script type="text/javascript" src="../defaults.js"></script>
<script type="text/javascript" src="../scripts/events_refresh.js"></script>
<script type="text/javascript" src="../scripts/tabs.js"></script>
<script type="text/javascript" src="../options.js"></script>
<div id="donate" style="position:absolute; top:10px; left:700px;">
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
<input type="hidden" name="cmd" value="_donations">
<input type="hidden" name="business" value="karol@jagiello.it">
<input type="hidden" name="lc" value="US">
<input type="hidden" name="item_number" value="Vertical Tabs Support">
<input type="hidden" name="no_note" value="0">
<input type="hidden" name="currency_code" value="USD">
<input type="hidden" name="bn" value="PP-DonationsBF:btn_donateCC_LG.gif:NonHostedGuest">
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>
</div>
</body>
</html>

581
options.js Normal file
View File

@ -0,0 +1,581 @@
// ********** OPTIONS ***************
var bg;
if (navigator.userAgent.match("Firefox") !== null){
bg = browser.extension.getBackgroundPage();
} else {
bg = chrome.extension.getBackgroundPage();
}
var themes = [];
var theme = {};
document.addEventListener("DOMContentLoaded", function(){
document.title = "Tree Tabs";
if (bg.opt == undefined){
setTimeout(function(){
location.reload();
}, 3000);
}
if (localStorage.getItem("themes") != null){
themes = JSON.parse(localStorage["themes"]);
}
if (localStorage.getItem("current_theme") != null){
LoadTheme(localStorage["current_theme"]);
}
GetOptions();
RefreshFields();
SetEvents();
});
// AppendCSSSheets from theme
function AppendCSSSheets(theme){
var css_variables = "";
for (var css_variable in theme.TabsSizeSet){
css_variables = css_variables + "--" + css_variable + ":" + theme.TabsSizeSet[css_variable] + ";";
}
for (var css_variable in theme.ColorsSet){
ColorsSet[css_variable] = theme.ColorsSet[css_variable];
if ($("#"+css_variable)[0]) $("#"+css_variable)[0].value = theme.ColorsSet[css_variable];
css_variables = css_variables + "--" + css_variable + ":" + theme.ColorsSet[css_variable] + ";";
}
// remove previous css rules in css sheet 0
for (var r = 0; r < document.styleSheets[0].cssRules.length; r++){
if (document.styleSheets[0].cssRules[r].cssText.match("--pin_width") !== null){
document.styleSheets[0].deleteRule(r);
}
if (document.styleSheets[0].cssRules[r].cssText.match("::-webkit-scrollbar") !== null){
document.styleSheets[0].deleteRule(r);
}
}
document.styleSheets[0].insertRule("body { "+css_variables+" }", 0);
// scrollbars
if (navigator.userAgent.match("Firefox") === null){
document.styleSheets[0].insertRule("::-webkit-scrollbar { width:"+theme.ScrollbarTabList+"px; height:"+theme.ScrollbarPinList+"px; }", 3);
}
}
function LoadTheme(themeName){
var theme = JSON.parse(localStorage["theme"+themeName]);
TabsSizeSet = theme.TabsSizeSetNumber;
// append toolbar from theme
$("#toolbar").html(theme.toolbar);
AppendCSSSheets(theme);
$("#button_filter_type").addClass("url").removeClass("title");
// expand toolbar options
ToolbarShow = $("#show_toolbar")[0].checked = theme.ToolbarShow;
$("#field_show_toolbar").css({"height": $("#show_toolbar")[0].checked ? "" : "6"});
ToolbarShow ? $("#options_available_buttons, #toolbar, #toolbar_colors").show() : $("#options_available_buttons, #toolbar, #toolbar_colors").hide();
// append example tabs
$("#pin_list, #tab_list").html("");
// pins
AppendTab({tab: {id: "p0", pinned: true}, Append: true});
AppendTab({tab: {id: "p1", pinned: true, active: true}, Append: true});
// tabs
AppendTab({tab: {id: "t2", pinned: false}, Append: true});
$("#tab_titlet2")[0].textContent = chrome.i18n.getMessage("options_theme_tabs_sample_text_normal");
AppendTab({tab: {id: "t3", pinned: false, active: true}, Append: true, ParentId: "t2"});
$("#tab_titlet3")[0].textContent = chrome.i18n.getMessage("options_theme_tabs_sample_text_active_selected");
$(".tab#t3").addClass("c selected");
AppendTab({tab: {id: "t5", pinned: false, discarded: true}, Append: true});
$("#tab_titlet5")[0].textContent = chrome.i18n.getMessage("options_theme_tabs_sample_text_discarded");
AppendTab({tab: {id: "t6", pinned: false}, Append: true});
$("#tab_titlet6")[0].textContent = chrome.i18n.getMessage("options_theme_tabs_sample_text_search_result");
$(".tab#t6").addClass("filtered");
AppendTab({tab: {id: "t7", pinned: false}, Append: true});
$("#tab_titlet7")[0].textContent = chrome.i18n.getMessage("options_theme_tabs_sample_text_search_result_higlighted");
$(".tab#t7").addClass("filtered highlighted_search");
AppendTab({tab: {id: "t8", pinned: false}, Append: true});
$("#tab_titlet8")[0].textContent = chrome.i18n.getMessage("options_theme_tabs_sample_text_search_result_selected");
$(".tab#t8").addClass("selected filtered");
AppendTab({tab: {id: "t9", pinned: false}, Append: true});
$("#tab_titlet9")[0].textContent = chrome.i18n.getMessage("options_theme_tabs_sample_text_search_result_selected_active");
$(".tab#t9").addClass("active selected filtered");
// drag&drop indicator
$(".drag_entered_bottom").first().addClass("highlighted_drop_target");
// toolbar events
$("#toolbar_tools, #toolbar_search").addClass("hidden");
$(".on").removeClass("on");
ScrollbarPinList = $("#scrollbar_pin_list")[0].value = theme.ScrollbarPinList;
ScrollbarTabList = $("#scrollbar_tab_list")[0].value = theme.ScrollbarTabList;
$("#active_tab_font_bold")[0].checked = theme.ColorsSet.active_font_weight == "normal" ? false : true;
$("#body").css({"background-color": "transparent"});
}
// document events
function GetOptions(){
// get language labels
$(".label").each(function(){
$(this).text(chrome.i18n.getMessage(this.id));
});
// get language for color pick labels
$(".cpl").each(function(){
$(this).text(chrome.i18n.getMessage(this.id));
});
// get language for menu labels
$(".menu_item").each(function(){
$(this).text(chrome.i18n.getMessage("options_example_menu_item"));
});
// get checkboxes from saved states
$(".opt_checkbox").each(function(){
$(this)[0].checked = bg.opt[this.id];
});
$(".set_button").each(function(){
$(this)[0].textContent = chrome.i18n.getMessage(this.id);
});
// get language dropdown menus
$(".bg_opt_drop_down_menu").each(function(){
$(this)[0].textContent = chrome.i18n.getMessage(this.id);
});
// 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 === bg.opt.append_child_tab){
$("#append_child_tab")[0].selectedIndex = i;
break;
}
}
// get options for append child tab after limit
for (var i = 0; i < $("#append_child_tab_after_limit")[0].options.length; i++){
if ($("#append_child_tab_after_limit")[0].options[i].value === bg.opt.append_child_tab_after_limit){
$("#append_child_tab_after_limit")[0].selectedIndex = i;
break;
}
}
// get options for append orphan tab
for (var i = 0; i < $("#append_orphan_tab")[0].options.length; i++){
if ($("#append_orphan_tab")[0].options[i].value === bg.opt.append_orphan_tab){
$("#append_orphan_tab")[0].selectedIndex = i;
break;
}
}
// get options for action after closing active tab
for (var i = 0; i < $("#after_closing_active_tab")[0].options.length; i++){
if ($("#after_closing_active_tab")[0].options[i].value === bg.opt.after_closing_active_tab){
$("#after_closing_active_tab")[0].selectedIndex = i;
break;
}
}
// get options for tabs tree depth option
$("#max_tree_depth")[0].value = bg.opt.max_tree_depth;
// append themes to dropdown menu
for (var i = 0; i < themes.length; i++){
var t_list = document.getElementById("theme_list");
var theme_name = document.createElement("option");
theme_name.value = themes[i];
theme_name.text = themes[i];
t_list.add(theme_name);
}
// 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"]){
$("#theme_list")[0].selectedIndex = i;
break;
}
}
}
function ExportTheme(filename) {
var themeObj = {
"ToolbarShow": ToolbarShow,
"ColorsSet": ColorsSet,
"TabsSizeSetNumber": TabsSizeSet,
"TabsSizeSet": TabsSizeSets[TabsSizeSet],
"ScrollbarPinList": ScrollbarPinList,
"ScrollbarTabList": ScrollbarTabList,
"theme_name": $("#theme_list").val(),
"theme_version": CurrentThemeVersion,
"toolbar": ToolbarSet
};
var data = JSON.stringify(themeObj);
var body = document.getElementById("body");
var link = document.createElement("a");
link.target = "_blank";
link.download = filename;
link.href = "data:text/csv;charset=utf-8," + encodeURIComponent(data);
body.appendChild(link);
link.click();
link.remove();
}
function ImportTheme(){
var file = document.getElementById("import_theme");
var fr = new FileReader();
if (file.files[0] == undefined) return;
fr.readAsText(file.files[0]);
fr.onload = function(){
var data = fr.result;
var themeObj = JSON.parse(data);
if (themeObj.theme_version > CurrentThemeVersion){
alert(chrome.i18n.getMessage("options_loaded_theme_newer_version"));
}
if (themeObj.theme_version < CurrentThemeVersion){
alert(chrome.i18n.getMessage("options_loaded_theme_older_version"));
}
if (themeObj.theme_version <= CurrentThemeVersion){
for (var val in ColorsSet){
ColorsSet[val] = themeObj.ColorsSet[val];
}
ToolbarShow = themeObj.ToolbarShow;
TabsSizeSet = themeObj.TabsSizeSetNumber;
ScrollbarPinList = themeObj.ScrollbarPinList;
ScrollbarTabList = themeObj.ScrollbarTabList;
$("#toolbar").html(themeObj.toolbar);
ToolbarSet = themeObj.toolbar;
if (themes.indexOf(themeObj.theme_name) != -1){
themeObj.theme_name = themeObj.theme_name + "(1)";
}
themes.push(themeObj.theme_name);
SaveTheme(themeObj.theme_name);
var t_list = document.getElementById("theme_list");
var theme_name = document.createElement("option");
theme_name.value = themeObj.theme_name;
theme_name.text = theme_name.value;
t_list.add(theme_name);
$("#theme_list")[0].selectedIndex = $("#theme_list")[0].options.length-1;
localStorage["themes"] = JSON.stringify(themes);
localStorage["current_theme"] = themeObj.theme_name;
LoadTheme(themeObj.theme_name);
RefreshFields();
}
}
}
// document events
function SetEvents(){
// import theme preset button
$(document).on("click", "#options_import_theme_button", function(event){
$("#import_theme").click();
});
$(document).on("change", "#import_theme", function(event){
ImportTheme();
});
// export theme preset button
$(document).on("click", "#options_export_theme_button", function(event){
if ($("#theme_list")[0].options.length == 0){
alert(chrome.i18n.getMessage("options_no_theme_to_export"));
} else {
ExportTheme($("#theme_list").val() + ".tt_theme");
}
});
// rename theme preset button
$(document).on("click", "#options_rename_theme_button", function(event){
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;
}
localStorage["theme"+($("#new_theme_name")[0].value)] = localStorage["theme"+($("#theme_list").val())];
localStorage.removeItem("theme"+($("#theme_list").val()));
var t_list = document.getElementById("theme_list");
themes[themes.indexOf(t_list.options[t_list.selectedIndex].value)] = $("#new_theme_name")[0].value;
t_list.options[t_list.selectedIndex].value = t_list.options[t_list.selectedIndex].text = $("#new_theme_name")[0].value;
localStorage["themes"] = JSON.stringify(themes);
localStorage["current_theme"] = $("#theme_list").val();
});
// set checkbox options on/off and save
$(document).on("click", ".bg_opt", function(event){
bg.opt[this.id] = $(this)[0].checked ? true : false;
chrome.runtime.sendMessage({command: "options_save"});
});
// set dropdown menu options
$("#append_child_tab, #append_child_tab_after_limit, #after_closing_active_tab, #append_orphan_tab").change(function(){
bg.opt[this.id] = $(this).val();
chrome.runtime.sendMessage({command: "options_save"});
});
// set tabs tree depth option
$(document).on("input", "#max_tree_depth", function(event){
bg.opt.max_tree_depth = $(this)[0].value;
chrome.runtime.sendMessage({command: "options_save"});
});
// set toolbar on/off and show/hide all toolbar options
$(document).on("click", "#show_toolbar", function(event){
ToolbarShow = $("#show_toolbar")[0].checked ? true : false;
SaveTheme($("#theme_list").val());
$("#field_show_toolbar").css({"height": $("#show_toolbar")[0].checked ? "" : "6"});
ToolbarShow ? $("#options_available_buttons, #toolbar, #toolbar_colors").show() : $("#options_available_buttons, #toolbar, #toolbar_colors").hide();
});
// block system dragging
$(document).bind("drop dragover", function(event){
event.preventDefault();
});
var dragged_button;
$(document).on("mousedown", ".button", function(event){
if ($(this).is("#button_filter_type, #filter_search_go_prev, #filter_search_go_next")){
return;
}
$(this).attr("draggable", "true");
dragged_button = this;
});
// set dragged button node
$(document).on("dragstart", ".button", function(event){
event.originalEvent.dataTransfer.setData(" "," ");
event.originalEvent.dataTransfer.setDragImage(document.getElementById("DragImage"), 0, 0);
});
// remove draggable attribute to clean html which will be saved in the toolbar
$(document).on("mouseleave", ".button", function(event){
$(".button").removeAttr("draggable");
});
// save toolbar
$(document).on("dragend", ".button", function(event){
ToolbarSet = $("#toolbar").html();
SaveTheme($("#theme_list").val());
});
// drag&drop buttons to lists
$(document).on("dragenter", "#toolbar_main, #toolbar_tools, #toolbar_unused_buttons", function(event){
if ($(dragged_button).is("#button_tools, #button_search") && $(this).is("#toolbar_tools")){
return;
}
if (dragged_button.parentNode.id != this.id){
$("#"+dragged_button.id).appendTo($(this));
}
});
// move (flip) buttons
$(document).on("dragenter", ".button", function(event){
if ($(dragged_button).is("#button_tools, #button_search") && $(this).parent().is("#toolbar_tools")){
return;
}
if ($(this).parent().is("#toolbar_search, #toolbar_search_buttons")){
return;
}
if ( $(this).index() <= $("#"+dragged_button.id).index()){
$("#"+dragged_button.id).insertBefore($(this));
} else {
$("#"+dragged_button.id).insertAfter($(this));
}
});
// add new theme preset button
$(document).on("click", "#options_add_theme_button", function(event){
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;
}
LoadTheme("Default");
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);
localStorage["themes"] = JSON.stringify(themes);
localStorage["current_theme"] = $("#theme_list").val();
RefreshFields();
});
// remove theme preset button
$(document).on("click", "#options_remove_theme_button", function(event){
if ($("#theme_list")[0].options.length == 0){
localStorage["current_theme"] = "Default";
return;
}
themes.splice(themes.indexOf($("#theme_list").val()), 1);
localStorage["themes"] = JSON.stringify(themes);
localStorage.removeItem("theme"+($("#theme_list").val()));
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();
});
// select theme from list
$("#theme_list").change(function(){
localStorage["current_theme"] = $(this).val();
LoadTheme($(this).val());
});
// change colors with color pickers
$(document).on("input", ".cp", function(event){
ColorsSet[this.id] = $(this)[0].value;
AppendCSSSheets(SaveTheme($("#theme_list").val()));
});
// set scrollbar sizes
$(document).on("input", "#scrollbar_pin_list, #scrollbar_tab_list", function(event){
ScrollbarPinList = $("#scrollbar_pin_list")[0].value;
ScrollbarTabList = $("#scrollbar_tab_list")[0].value;
SaveTheme($("#theme_list").val());
document.styleSheets[0].addRule("::-webkit-scrollbar", "width:"+ScrollbarTabList+"px; height:"+ScrollbarPinList+"px;");
});
// change tabs size preset(up)
$(document).on("click", "#options_tabs_size_up", function(event){
if (TabsSizeSet < TabsSizeSets.length-1){
TabsSizeSet++;
AppendCSSSheets(SaveTheme($("#theme_list").val()));
}
});
// change tabs size preset(down)
$(document).on("click", "#options_tabs_size_down", function(event){
if (TabsSizeSet > 0){
TabsSizeSet--;
AppendCSSSheets(SaveTheme($("#theme_list").val()));
}
});
// change active_tab_font_bold
$(document).on("click", "#active_tab_font_bold", function(event){
ColorsSet.active_font_weight = $(this)[0].checked ? "bold" : "normal";
AppendCSSSheets(SaveTheme($("#theme_list").val()));
});
// show close button on hover
$(document).on("mouseenter", ".close", function(event){
$(this).addClass("close_hover");
});
$(document).on("mouseleave", ".close", function(event){
$(".close_hover").removeClass("close_hover");
});
// tabs on hover
$(document).on("mouseover", ".tab_header", function(event){
$(this).addClass("tab_header_hover").addClass("close_show");
});
$(document).on("mouseleave", ".tab_header", function(event){
$(this).removeClass("tab_header_hover").removeClass("close_show");
});
$(document).on("click", "#button_tools, #button_search", function(event){
if (event.button != 0){
return;
}
if ($(this).is(".on")){
$("#button_tools, #button_search").removeClass("on");
$("#toolbar_tools, #toolbar_search").addClass("hidden");
} else {
$(this).addClass("on");
if ($(this).is("#button_tools")){
$("#button_search").removeClass("on");
$("#toolbar_search").addClass("hidden");
$("#toolbar_tools").removeClass("hidden");
} else {
$("#button_tools").removeClass("on");
$("#toolbar_tools").addClass("hidden");
$("#toolbar_search").removeClass("hidden");
}
}
});
}
// shrink or expand theme field
function RefreshFields(){
if ($("#theme_list")[0].options.length == 0){
$("#field_theme").css({"height": "45px"});
} else {
$("#field_theme").css({"height": ""});
}
if (navigator.userAgent.match("Firefox") !== null){
$("#field_scrollbars").hide();
} else {
$("#faster_scroll_for_firefox").hide();
}
if (navigator.userAgent.match("Vivaldi") !== null){
$("#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();
}
}

92
scripts/IO.js Normal file
View File

@ -0,0 +1,92 @@
// ********** KEYBOARD AND MOUSE ***************
function SetIOEvents(){
// scroll horizontally on pin list
$("#pin_list").bind("mousewheel DOMMouseScroll", function(event) {
event = event.originalEvent;
var delta = event.wheelDelta > 0 || event.detail < 0 ? -1 : 1;
var multiplier = 1;
for (var t = 1; t < 20; t++){
setTimeout(function(){
$("#pin_list").scrollLeft($("#pin_list").scrollLeft()+(delta*multiplier));
}, t);
multiplier++;
}
multiplier = 20;
for (var t = 21; t < 40; t++){
setTimeout(function(){
$("#pin_list").scrollLeft($("#pin_list").scrollLeft()+(delta*multiplier));
}, t);
multiplier--;
}
});
// this is for faster scrolling in firefox, for some reason its default scrolling is slow
if (bg.opt.faster_scroll){
$("#tab_list").bind("mousewheel DOMMouseScroll", function(event) {
event = event.originalEvent;
var delta = event.wheelDelta > 0 || event.detail < 0 ? -1.5 : 1.5;
var multiplier = 1;
for (var t = 1; t < 40; t++){
setTimeout(function(){
$("#tab_list").scrollTop($("#tab_list").scrollTop()+(delta*multiplier));
}, t);
multiplier++;
}
multiplier = 40;
for (var t = 41; t < 80; t++){
setTimeout(function(){
$("#tab_list").scrollTop($("#tab_list").scrollTop()+(delta*multiplier));
}, t);
multiplier--;
}
});
}
// catch keyboard keys
$(document).keydown(function(event){
if (MouseHoverOver == "pin_list"){
// ctrl+a to select all
if (event.ctrlKey && event.which == 65){
$(".pin").addClass("selected");
}
// ctrl+i to invert selection
if (event.ctrlKey && event.which == 73){
$(".pin").toggleClass("selected");
}
}
if (MouseHoverOver == "tab_list"){
// ctrl+a to select all
if (event.ctrlKey && event.which == 65){
$(".tab").addClass("selected");
}
// ctrl+i to invert selection
if (event.ctrlKey && event.which == 73){
$(".tab").toggleClass("selected");
}
}
RefreshGUI();
});
$(document).on("dragenter", "#toolbar", function(event){ // set mouse over id
MouseHoverOver = this.id;
});
$(document).on("mouseenter", "#pin_list, #tab_list, #toolbar", function(event){ // set mouse over id
MouseHoverOver = this.id;
});
$(document).on("mouseleave", window, function(event){
MouseHoverOver = "";
});
// remove middle mouse and set hiding menu
document.body.onmousedown = function(event){
if (event.button == 1 && bg.opt.close_with_MMB == true){
event.preventDefault();
}
if (event.button == 0 && !$(event.target).is(".menu_item")){
$(".menu").hide(0);
}
};
}

150
scripts/events_chrome.js Normal file
View File

@ -0,0 +1,150 @@
// ********** CHROME EVENTS ***************
chrome.commands.onCommand.addListener(function(command) {
chrome.windows.getLastFocused({windowTypes: ["normal"]}, function(window) {
if (CurrentWindowId == window.id){
if (command == "goto_tab_above"){
ActivatePrevTab();
}
if (command == "goto_tab_below"){
ActivateNextTab();
}
}
});
});
chrome.runtime.onMessage.addListener(function(message, sender, sendResponse){
if (message.command == "reload"){
window.location.reload();
}
if (message.command == "recheck_tabs"){
schedule_update_data++;
}
if (message.command == "drag_end"){
DropTargetsSendToBack();
}
if (message.windowId == CurrentWindowId){
switch(message.command){
case "tab_created":
// if set to treat unparented tabs as active tab's child
if (bg.opt.append_orphan_tab == "as_child" && message.tab.openerTabId == undefined){
message.tab.openerTabId = $(".active")[0].id;
}
// child case
if (message.tab.openerTabId){
// append to tree
if (bg.opt.max_tree_depth < 0 || (bg.opt.max_tree_depth > 0 && $("#"+message.tab.openerTabId).parents(".tab").length < bg.opt.max_tree_depth)){
if (bg.opt.append_child_tab == "top"){
AppendTab({ tab: message.tab, ParentId: message.tab.openerTabId, Append: false });
}
if (bg.opt.append_child_tab == "bottom"){
AppendTab({ tab: message.tab, ParentId: message.tab.openerTabId, Append: true });
}
}
// if reached depth limit of the tree
if (bg.opt.max_tree_depth > 0 && $("#"+message.tab.openerTabId).parents(".tab").length >= bg.opt.max_tree_depth){
if (bg.opt.append_child_tab_after_limit == "after"){
AppendTab({ tab: message.tab, InsertAfterId: message.tab.openerTabId, Append: true });
}
if (bg.opt.append_child_tab_after_limit == "top"){
AppendTab({ tab: message.tab, ParentId: $("#"+message.tab.openerTabId).parent().parent()[0].id, Append: false });
}
if (bg.opt.append_child_tab_after_limit == "bottom"){
AppendTab({ tab: message.tab, ParentId: $("#"+message.tab.openerTabId).parent().parent()[0].id, Append: true });
}
}
// place tabs flat, (should I merge it with orphans case?)
if (bg.opt.max_tree_depth == 0){
if (bg.opt.append_child_tab_after_limit == "after"){
AppendTab({ tab: message.tab, InsertAfterId: message.tab.openerTabId, Append: false });
}
if (bg.opt.append_child_tab_after_limit == "top"){
AppendTab({ tab: message.tab, Append: false });
}
if (bg.opt.append_child_tab_after_limit == "bottom"){
AppendTab({ tab: message.tab, Append: true });
}
}
// orphan case
} else {
if (bg.opt.append_orphan_tab == "after_active"){
AppendTab({ tab: message.tab, InsertAfterId: $(".active")[0].id, Append: false });
}
if (bg.opt.append_orphan_tab == "top"){
AppendTab({ tab: message.tab, Append: false });
}
if (bg.opt.append_orphan_tab == "bottom"){
AppendTab({ tab: message.tab, Append: true });
}
}
if ($("#"+message.tab.openerTabId).is(".c")){
$("#"+message.tab.openerTabId).removeClass("c").addClass("o");
}
RefreshExpandStates();
schedule_update_data++;
RefreshGUI();
break;
case "tab_attached":
AppendTab({ tab: message.tab, ParentId: bg.tabs[message.tabId].p, Append: true});
if ($("#"+message.tabId).parent().children().eq(bg.dt.DropToIndex)){
if (bg.dt.DropAfter){
$("#"+message.tabId).insertAfter($("#"+message.tabId).parent().children().eq(bg.dt.DropToIndex));
} else {
$("#"+message.tabId).insertBefore($("#"+message.tabId).parent().children().eq(bg.dt.DropToIndex));
}
}
RefreshExpandStates();
setTimeout(function(){
DropTargetsSendToBack();
schedule_update_data++;
},300);
RefreshGUI();
break;
case "tab_removed":
if (bg.opt.promote_children && $("#"+message.tabId).is(".tab")){
$("#ch"+message.tabId).children().insertAfter($("#"+message.tabId));
} else {
$("#"+message.tabId).find(".tab").each(function(){
chrome.tabs.remove(parseInt(this.id));
});
}
RemoveTabFromList(message.tabId);
RefreshExpandStates();
setTimeout(function(){ schedule_update_data++; },300);
RefreshGUI();
break;
case "tab_activated":
setTimeout(function(){ SetActiveTab(message.tabId); },100);
break;
case "tab_updated":
if (message.changeInfo.favIconUrl != undefined || message.changeInfo.url != undefined){
setTimeout(function(){ GetFaviconAndTitle(message.tabId); },100);
}
if (message.changeInfo.title != undefined){
setTimeout(function(){ GetFaviconAndTitle(message.tabId); },1000);
}
if (message.changeInfo.audible != undefined || message.changeInfo.mutedInfo != undefined){
RefreshMediaIcon(message.tabId);
}
if (message.changeInfo.discarded != undefined){
RefreshDiscarded(message.tabId);
}
if (message.changeInfo.pinned != undefined && DragNode == undefined){
if ((message.tab.pinned && $("#"+message.tabId).is(".tab")) || (!message.tab.pinned && $("#"+message.tabId).is(".pin"))){
SetTabClass({ id: message.tabId, pin: message.tab.pinned });
schedule_update_data++;
}
RefreshExpandStates();
}
break;
}
}
});

145
scripts/events_refresh.js Normal file
View File

@ -0,0 +1,145 @@
// ********** REFRESH GUI ***************
function SetTRefreshEvents(){
$(window).on("resize", function(event){
RefreshGUI();
});
// click on media icon
$(document).on("mousedown", ".tab_mediaicon", function(event){
event.stopPropagation();
if (event.button == 0 && $(this).parent().parent().is(".audible, .muted")){
chrome.tabs.get(parseInt(this.parentNode.parentNode.id), function(tab){
chrome.tabs.update(tab.id, {muted:!tab.mutedInfo.muted});
});
}
});
}
function RefreshGUI() {
if ($("#toolbar").children().length > 0) {
if ($("#button_tools, #button_search").is(".on")) {
$("#toolbar").css({ "height": 53 });
} else {
$("#toolbar").css({ "height": 26 });
}
} else {
$("#toolbar").css({ "height": 0 });
}
if ($("#pin_list").children().length == 0) {
$("#pin_list").addClass("hidden");
} else {
$("#pin_list").removeClass("hidden");
}
$("#tab_list").css({ "height": $(window).height() - $("#pin_list").outerHeight() - $("#toolbar").outerHeight() });
}
// set discarded class
function RefreshDiscarded(tabId) {
if ($("#" + tabId).length > 0) {
chrome.tabs.get(parseInt(tabId), function(tab) {
if (tab.discarded) {
$("#" + tabId).addClass("discarded");
} else {
$("#" + tabId).removeClass("discarded");
}
});
}
}
// change media icon
function RefreshMediaIcon(tabId) {
if ($("#" + tabId).length > 0 && bg.tabs[tabId]) {
chrome.tabs.get(parseInt(tabId), function(tab) {
if (tab) {
if (tab.mutedInfo.muted) {
$("#" + tabId).removeClass("audible").addClass("muted");
}
if (!tab.mutedInfo.muted && tab.audible) {
$("#" + tabId).removeClass("muted").addClass("audible");
}
if (!tab.mutedInfo.muted && !tab.audible) {
$("#" + tabId).removeClass("audible").removeClass("muted");
}
}
});
}
}
// Vivaldi does not have changeInfo.audible listener, this is my own implementation, hopefully this will not affect performance too much
function VivaldiRefreshMediaIcons() {
chrome.tabs.query({currentWindow: true}, function(tabs){
$(".audible, .muted").removeClass("audible").removeClass("muted");
tabs.forEach(function(Tab){
if (Tab.audible) {
$("#" + Tab.id).addClass("audible");
}
if (Tab.mutedInfo.muted) {
$("#" + Tab.id).addClass("muted");
}
});
});
setTimeout(function() {
VivaldiRefreshMediaIcons();
}, 1400);
}
function GetFaviconAndTitle(tabId) {
if ($("#" + tabId).length > 0 && bg.tabs[tabId]) {
chrome.tabs.get(parseInt(tabId), function(tab) {
if (tab && tab.status == "complete") {
$("#" + tabId).removeClass("loading");
var title = tab.title ? tab.title : tab.url;
// change title
$("#tab_title" + tab.id)[0].textContent = title;
$("#tab_header" + tab.id).attr("title", title);
// compatibility with various Tab suspender extensions
if (tab.favIconUrl != undefined && tab.favIconUrl.match("data:image/png;base64") != null) {
$("#tab_header" + tab.id).css({ "background-image": "url(" + tab.favIconUrl + ")" });
} else {
// case for internal pages, favicons don't have access, but can be loaded from url
if (tab.url.match("opera://|vivaldi://|browser://|chrome://|chrome-extension://|about:") != null) {
$("#tab_header" + tab.id).css({ "background-image": "url(chrome://favicon/" + tab.url + ")" });
} else {
// change favicon
var img = new Image();
img.src = tab.favIconUrl;
img.onload = function() {
$("#tab_header" + tab.id).css({ "background-image": "url(" + tab.favIconUrl + ")" });
};
img.onerror = function() {
$("#tab_header" + tab.id).css({ "background-image": "url(chrome://favicon/" + tab.url + ")" });
}
}
}
}
if (tab && tab.status == "loading") {
$("#" + tabId).addClass("loading");
var title = tab.title ? tab.title : bg.caption_loading;
$("#tab_title" + tab.id)[0].textContent = title;
$("#tab_header" + tab.id).attr("title", title);
setTimeout(function() {
if ($("#" + tabId).length != 0) GetFaviconAndTitle(tabId);
}, 1000);
}
});
}
}
// 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");
}
} else {
$(this).parent().removeClass("o").removeClass("c").addClass("n");
}
});
}

323
scripts/events_tabs.js Normal file
View File

@ -0,0 +1,323 @@
// ********** TABS EVENTS ***************
function SetTabEvents() {
// double click to create tab
$(document).on("dblclick", "#tab_list, #pin_list, .expand", function(event) {
if (event.button == 0 && $(this).parent().is(".n")) {
chrome.tabs.create({});
}
if (event.button == 0 && event.target.id == "tab_list") {
chrome.tabs.create({});
}
if (event.button == 0 && event.target.id == "pin_list") {
chrome.tabs.create({ pinned: true });
}
});
$(document).on("mouseenter", ".close", function(event) {
$(this).addClass("close_hover");
});
$(document).on("mouseleave", ".close", function(event) {
$(".close_hover").removeClass("close_hover");
});
$(document).on("mouseover", ".tab_header", function(event) {
$(this).addClass("tab_header_hover");
if (bg.opt.always_show_close == false) {
$(this).addClass("close_show");
}
});
$(document).on("mouseleave", ".tab_header", function(event) {
$(this).removeClass("tab_header_hover");
if (bg.opt.always_show_close == false) {
$(this).removeClass("close_show");
}
});
// PREVENT THE DEFAULT BROWSER DROP ACTION
$(document).bind("drop dragover", function(event) {
event.preventDefault();
});
// bring to front drop zones
$(document).on("dragover", ".tab_header", function(event) {
DropTargetsSendToFront();
});
// SET DRAG SOURCE
$(document).on("dragstart", ".tab_header", function(event) {
event.stopPropagation();
bg.dt.tabsIds.splice(0, bg.dt.tabsIds.length);
event.originalEvent.dataTransfer.setData("null", "null");
event.originalEvent.dataTransfer.setDragImage(document.getElementById("DragImage"), 0, 0);
DragNode = $(this).parent()[0];
$(".close").removeClass("show");
$(".tab_header_hover").removeClass("tab_header_hover");
$(this).parent().addClass("tab_header_hover");
if ($(this).parent().is(":not(.selected)")) {
$(".selected").addClass("frozen").removeClass("selected");
$(this).parent().addClass("temporary").addClass("selected");
}
$(".selected").each(function() {
bg.dt.tabsIds.push(parseInt(this.id));
if ($("#ch" + this.id).children().length > 0) {
$($("#ch" + this.id).find(".tab")).each(function() {
bg.dt.tabsIds.push(parseInt(this.id));
});
}
});
bg.dt.CameFromWindowId = CurrentWindowId;
});
// SET DROP TARGET
$(document).on("dragenter", ".drag_entered_top, .drag_entered_bottom, .drag_enter_center", function(event) {
event.stopPropagation();
if ($(".selected").find($(this)).length > 0) return;
$(".highlighted_drop_target").removeClass("highlighted_drop_target");
$(this).addClass("highlighted_drop_target");
});
$(document).on("dragenter", ".drag_enter_center", function(event) {
timeout = false;
setTimeout(function() { timeout = true; }, 1800);
});
$(document).on("dragleave", ".drag_enter_center", function(event) {
timeout = false;
});
$(document).on("dragover", ".drag_enter_center", function(event) {
if (timeout && bg.opt.open_tree_on_hover && $(this).parent().is(".c")) {
$(this).parent().addClass("o").removeClass("c");
timeout = false;
}
});
$(document).on("dragend", ".tab_header", function(event) {
if (bg.dt.CameFromWindowId == CurrentWindowId && bg.dt.DroppedToWindowId == 0) {
DetachTabs(bg.dt.tabsIds);
}
if (bg.dt.CameFromWindowId == CurrentWindowId && bg.dt.DroppedToWindowId != CurrentWindowId && bg.dt.DroppedToWindowId != 0) {
bg.tabs[bg.dt.tabsIds[0]].p = bg.dt.DropToTabId;
bg.tabs[bg.dt.tabsIds[0]].n = bg.dt.DropToIndex;
chrome.tabs.move(bg.dt.tabsIds, { windowId: bg.dt.DroppedToWindowId, index: -1 });
}
if (bg.dt.CameFromWindowId == CurrentWindowId && bg.dt.DroppedToWindowId == CurrentWindowId) {
if ($(".highlighted_drop_target").parent().is(".pin")) {
$(".selected").each(function() {
SetTabClass({ id: this.id, pin: true });
if ($(".highlighted_drop_target").is(".drag_entered_top")) {
$(this).insertBefore($(".highlighted_drop_target").parent());
} else {
$(this).insertAfter($(".highlighted_drop_target").parent());
}
});
}
if ($(".highlighted_drop_target").parent().is(".tab")) {
$(".selected").each(function() {
SetTabClass({ id: this.id, pin: false });
});
if ($(".highlighted_drop_target").is(".drag_entered_top")) {
$(".selected").insertBefore($(".highlighted_drop_target").parent());
}
if ($(".highlighted_drop_target").is(".drag_entered_bottom")) {
$(".selected").insertAfter($(".highlighted_drop_target").parent());
}
if (($(".highlighted_drop_target").is(".drag_enter_center") && $("#" + DragNode.id).parent()[0].id != "ch" + $(".highlighted_drop_target")[0].id.substr(2))) {
if (bg.opt.append_at_end) {
$("#ch" + $(".highlighted_drop_target")[0].id.substr(2)).append($(".selected"));
} else {
$("#ch" + $(".highlighted_drop_target")[0].id.substr(2)).prepend($(".selected"));
}
}
}
}
RefreshExpandStates();
setTimeout(function() {
timeout = false;
DragNode = undefined;
schedule_update_data++;
DropTargetsSendToBack();
}, 500);
$(".highlighted_drop_target").removeClass("highlighted_drop_target");
$(".tab_header_hover").removeClass("tab_header_hover");
$(".frozen").addClass("selected").removeClass("frozen");
$(".temporary").removeClass("selected").removeClass("temporary");
chrome.runtime.sendMessage({command: "drag_end"});
});
$(document).on("click", ".exp_box", function(event) {
event.stopPropagation();
if (event.button == 0) {
if ($(this).parent().parent().is(".o")) {
$(this).parent().parent().removeClass("o").addClass("c");
if (bg.tabs[$(this).parent().parent()[0].id]) {
bg.tabs[$(this).parent().parent()[0].id].o = "c";
}
} else {
if ($(this).parent().parent().is(".c")) {
if (bg.opt.close_other_trees) {
$(".o").removeClass("o").addClass("c");
$(this).parents(".tab").each(function() {
$(this).removeClass("n").removeClass("c").addClass("o");
if (bg.tabs[this.id]) {
bg.tabs[this.id].o = "o";
}
});
$(".c").each(function() {
if (bg.tabs[this.id]) {
bg.tabs[this.id].o = "c";
}
});
}
$(this).parent().parent().removeClass("c").addClass("o");
if (bg.tabs[$(this).parent().parent()[0].id]) {
bg.tabs[$(this).parent().parent()[0].id].o = "o";
}
}
}
bg.schedule_save++;
}
});
// SELECT OR CLOSE TAB/PIN
$(document).on("mousedown", ".tab, .pin", function(event) {
DropTargetsSendToBack();
event.stopPropagation();
if (event.button == 0) {
// SET SELECTION WITH SHIFT
if (event.shiftKey) {
$(".pin, .tab").removeClass("selected").removeClass("frozen").removeClass("temporary");
if ($(this).index() >= $(".active").index()) {
$(".active").nextUntil($(this), ":visible").add($(".active")).add($(this)).addClass("selected");
} else {
$(".active").prevUntil($(this), ":visible").add($(".active")).add($(this)).addClass("selected");
}
}
// TOGGLE SELECTION WITH CTRL
if (event.ctrlKey) {
$(this).toggleClass("selected");
}
}
// CLOSE TAB
if (
(($(this).is(".tab") && $(event.target).is(":not(.expand)")) && ((event.button == 1 && bg.opt.close_with_MMB == true) || (event.button == 0 && $(event.target).is(".close, .close_img"))))
||
($(this).is(".pin") && event.button == 1 && bg.opt.close_with_MMB == true && bg.opt.allow_pin_close == true)
) {
if ($(this).is(".active") && bg.opt.after_closing_active_tab != "browser") {
var tabId;
var Prev = $(this).prev();
var Next = $(this).next();
// if in root, seek for closest, in order set in options, first next then prev, or prev then next
if ($(this).parent().is("#pin_list, #tab_list, .children")) {
if (bg.opt.after_closing_active_tab == "above") {
if (Prev[0]) {
tabId = Prev[0].id;
} else {
if (Next[0]) {
tabId = Next[0].id;
}
}
}
if (bg.opt.after_closing_active_tab == "below") {
if (Next[0]) {
tabId = Next[0].id;
} else {
if (Prev[0]) {
tabId = Prev[0].id;
}
}
}
}
// if no tabs left in the tree, go to parent
if (tabId == undefined && $(this).parent().parent().is(".tab")) {
tabId = $(this).parent().parent()[0].id;
}
// if found a matching condition a new tab will be activated
if (tabId) {
SetActiveTab(tabId);
chrome.tabs.update(parseInt(tabId), { active: true });
}
}
if ($("#" + this.id).is(".pin")) {
$("#" + this.id).remove();
chrome.tabs.update(parseInt(this.id), { pinned: false });
}
chrome.tabs.remove(parseInt(this.id));
}
});
// single click to activate tab
$(document).on("click", ".tab_header", function(event) {
event.stopPropagation();
if (!event.shiftKey && !event.ctrlKey && $(event.target).is(":not(.close, .close_img, .expand, .tab_mediaicon)")) {
SetActiveTab($(this).parent()[0].id);
chrome.tabs.update(parseInt($(this).parent()[0].id), { active: true });
}
});
// set bg.dt to detach tabs when drag ends outside the window
$(document).on("dragleave", "body", function(event) {
bg.dt.DroppedToWindowId = 0;
});
// set bg.dt to attach tabs when drag ends inside the window
$(document).on("dragover", "*", function(event) {
bg.dt.DroppedToWindowId = CurrentWindowId;
});
$(document).on("drag", ".tab_header", function(event) {
event.stopPropagation();
bg.dt.DroppedToWindowId = CurrentWindowId;
});
$(document).on("drop", "#pin_list, #tab_list", function(event) {
bg.dt.DroppedToWindowId = CurrentWindowId;
});
// set bg.dt to attach tabs and append them to tabId
$(document).on("drop", ".drag_enter_center", function(event) {
event.stopPropagation();
bg.dt.DroppedToWindowId = CurrentWindowId;
bg.dt.DropToTabId = $(this).parent()[0].id;
});
// set bg.dt to attach tabs and move them above or below highligted tab
$(document).on("drop", ".drag_entered_top, .drag_entered_bottom", function(event) {
event.stopPropagation();
bg.dt.DroppedToWindowId = CurrentWindowId;
if ($(this).parent().parent().is("#tab_list, #pin_list")){
bg.dt.DropToTabId = $(this).parent().parent()[0].id;
} else {
bg.dt.DropToTabId = $(this).parent().parent().parent()[0].id;
}
bg.dt.DropToIndex = $(this).parent().index();
bg.dt.DropAfter = $(this).is(".drag_entered_bottom") ? true : false;
});
}

View File

@ -0,0 +1,17 @@
// ********** GLOBAL VARIABLES ***************
var bg;
if (navigator.userAgent.match("Firefox") !== null){
bg = browser.extension.getBackgroundPage();
} else {
bg = chrome.extension.getBackgroundPage();
}
var MouseHoverOver = "";
var DragNode;
var DropTargetsInFront = false;
var timeout = false;
var menuTabId = 0;
var CurrentWindowId = 0;
var SearchIndex = 0;
var schedule_update_data = 0;

213
scripts/menu_tabs.js Normal file
View File

@ -0,0 +1,213 @@
// ********** TABS MENU ***************
function SetMenu() {
// set menu labels
$(".menu_item").each(function() {
$(this).text(chrome.i18n.getMessage(this.id));
});
// trigger action when the contexmenu is about to be shown
$(document).bind("contextmenu", function(event) {
event.preventDefault();
});
// show menu
$(document).on("mousedown", "#pin_list, #tab_list, .tab, .pin", function(event) {
event.stopPropagation();
if (event.button == 2) {
$(".menu").hide(0);
if ($(this).is(".tab, .pin")) {
menuTabId = parseInt($(this)[0].id);
} else {
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 (!bg.opt.allow_pin_close) {
$("#tabs_menu_close").css({ "display": "none" });
}
} else {
$("#tabs_menu_pin").text(chrome.i18n.getMessage("tabs_menu_pin"));
$("#tabs_menu_close").prev().css({ "display": "" });
$("#tabs_menu_close, #tabs_menu_close_other").css({ "display": "" });
$("#tabs_menu_expand_all, #tabs_menu_collapse_all").css({ "display": "" });
$("#tabs_menu_collapse_all").next().css({ "display": "" });
}
if ($("#" + menuTabId).is(".o, .c")) {
$("#tabs_menu_close_tree").css({ "display": "" });
} else {
$("#tabs_menu_close_tree").css({ "display": "none" });
}
// MUTE TABS
if ($("#" + menuTabId).is(".muted")) {
$("#tabs_menu_mute").css({ "display": "none" });
$("#tabs_menu_unmute").css({ "display": "" });
} else {
$("#tabs_menu_mute").css({ "display": "" });
$("#tabs_menu_unmute").css({ "display": "none" });
}
// APPEND TABS TO BG.DATA ARRAY
bg.dt.tabsIds = $("#" + menuTabId).is(".selected") ? $(".tab.selected:visible").map(function() { return parseInt(this.id); }).toArray() : [menuTabId];
// show contextmenu with correct size position
if ($("#tabs_menu").outerWidth() > $(window).width() - 10) {
$("#tabs_menu").css({ "width": $(window).width() - 10 });
} else {
$("#tabs_menu").css({ "width": "" });
}
var x = event.pageX >= $(window).width() - $("#tabs_menu").outerWidth() ? $(window).width() - $("#tabs_menu").outerWidth() : event.pageX;
var y = event.pageY >= $(window).height() - $("#tabs_menu").outerHeight() - 10 ? $(window).height() - $("#tabs_menu").outerHeight() - 10 : event.pageY;
$("#tabs_menu").css({ "display": "block", "top": y - 15, "left": x - 5 });
}
});
// hide menu
$(document).on("mousedown", "body", function(event) {
if (event.button != 2) {
$(".menu").hide(300);
}
});
$(document).on("mouseleave", "body", function(event) {
$(".menu").hide(300);
});
// if the menu element is clicked
$(document).on("mousedown", "#tabs_menu li", function(event) {
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() {
chrome.tabs.duplicate(parseInt(this.id));
});
} else {
chrome.tabs.duplicate(menuTabId);
}
break;
case "tab_move":
if ($("#" + menuTabId).is(".selected")) {
DetachTabs($(".selected:visible").map(function() { return parseInt(this.id); }).toArray());
} else {
DetachTabs([menuTabId]);
}
break;
case "tab_reload":
if ($("#" + menuTabId).is(".selected")) {
$(".selected:visible").each(function() {
chrome.tabs.reload(parseInt(this.id));
});
} else {
chrome.tabs.reload(menuTabId);
}
break;
case "tab_pin":
if ($("#" + menuTabId).is(".selected")) {
$(".selected:visible").each(function() {
chrome.tabs.update(parseInt(this.id), { pinned: ($("#" + menuTabId).is(".pin") ? false : true) });
});
} else {
chrome.tabs.update(menuTabId, { pinned: ($("#" + menuTabId).is(".pin") ? false : true) });
}
break;
case "tab_mute":
if ($("#" + menuTabId).is(".selected")) {
$(".selected:visible").each(function() {
chrome.tabs.get(parseInt(this.id), function(tab) {
chrome.tabs.update(tab.id, { muted: true });
});
});
} else {
chrome.tabs.get(menuTabId, function(tab) {
chrome.tabs.update(tab.id, { muted: true });
});
}
break;
case "tab_unmute":
if ($("#" + menuTabId).is(".selected")) {
$(".selected:visible").each(function() {
chrome.tabs.get(parseInt(this.id), function(tab) {
chrome.tabs.update(tab.id, { muted: false });
});
});
} else {
chrome.tabs.get(menuTabId, function(tab) {
chrome.tabs.update(tab.id, { muted: false });
});
}
break;
case "tab_mute_other":
if ($("#" + menuTabId).is(".selected")) {
$(".tab:visible:not(.selected)").each(function() {
chrome.tabs.update(parseInt(this.id), { muted: true });
});
} else {
$(".tab:visible:not(#" + menuTabId + ")").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() {
chrome.tabs.update(parseInt(this.id), { muted: false });
});
} else {
$(".tab:visible:not(#" + menuTabId + ")").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]);
break;
case "tab_close_tree":
CloseTabs($("#" + menuTabId).find(".tab").map(function() { return parseInt(this.id); }).toArray());
CloseTabs([menuTabId]);
break;
case "tab_close_other":
CloseTabs($(".tab:visible:not(#" + menuTabId + ")").map(function() { return parseInt(this.id); }).toArray());
break;
case "tab_undo_close":
chrome.sessions.getRecentlyClosed(null, function(sessions) {
if (sessions.length > 0) {
chrome.sessions.restore(null, function() {});
}
});
break;
case "tab_discard":
DiscardTabs(bg.dt.tabsIds);
break;
case "tab_settings":
chrome.tabs.create({ "url": "options.html" });
break;
case "tab_expand_all":
$(".tab.c").addClass("o").removeClass("c");
schedule_update_data++;
break;
case "tab_collapse_all":
$(".tab.o").addClass("c").removeClass("o");
schedule_update_data++;
break;
}
$(".menu").hide(0);
});
}

319
scripts/tabs.js Normal file
View File

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

224
scripts/toolbar.js Normal file
View File

@ -0,0 +1,224 @@
// ********** TOOLBAR ***************
function SaveToolbarOptions(){
chrome.runtime.sendMessage({command: "toolbar_options_save"});
}
function SetToolbarEvents(){
// tools and search buttons toggle
$(document).on("mousedown", "#button_tools, #button_search", function(event){
if (event.button != 0){
return;
}
if ($(this).is(".on")){
$("#button_tools, #button_search").removeClass("on");
$("#toolbar_tools, #toolbar_search").addClass("hidden");
bg.opt_toolbar.active_toolbar_tool = "";
} else {
$(this).addClass("on");
if ($(this).is("#button_tools")){
$("#button_search").removeClass("on");
$("#toolbar_search").addClass("hidden");
$("#toolbar_tools").removeClass("hidden");
bg.opt_toolbar.active_toolbar_tool = "tools";
} else {
$("#button_tools").removeClass("on");
$("#toolbar_tools").addClass("hidden");
$("#toolbar_search").removeClass("hidden");
bg.opt_toolbar.active_toolbar_tool = "search";
}
}
RefreshGUI();
SaveToolbarOptions();
});
// go to previous search result
$(document).on("mousedown", "#filter_search_go_prev", function(event){
if (event.button != 0){
return;
}
if (SearchIndex == 0){
SearchIndex = $(".tab.filtered").length-1;
} else {
SearchIndex--;
}
$(".highlighted_search").removeClass("highlighted_search");
$($(".tab.filtered")[SearchIndex]).addClass("highlighted_search");
ScrollToTab($(".tab.filtered")[SearchIndex].id);
});
// go to next search result
$(document).on("mousedown", "#filter_search_go_next", function(event){
if (event.button != 0){
return;
}
if (SearchIndex == $(".tab.filtered").length-1){
SearchIndex = 0;
} else {
SearchIndex++;
}
$(".highlighted_search").removeClass("highlighted_search");
$($(".tab.filtered")[SearchIndex]).addClass("highlighted_search");
ScrollToTab($(".tab.filtered")[SearchIndex].id);
});
// new tab
$(document).on("mousedown", "#button_new", function(event){
if (event.button == 0){
chrome.tabs.create({});
}
if (event.button == 1){
chrome.tabs.query({windowId: CurrentWindowId, active: true}, function(tabs){
chrome.tabs.duplicate(tabs[0].id, function(tab){
setTimeout(function(){
$("#"+tab.id).insertAfter($(".active")[0]);
}, 300);
});
});
}
if (event.button == 2){
chrome.tabs.query({windowId: CurrentWindowId, active: true}, function(tabs){
ScrollToTab(tabs[0].id);
});
}
});
// pin tab
$(document).on("mousedown", "#button_pin", function(event){
if (event.button != 0){
return;
}
$(".selected:visible").each(function(){
chrome.tabs.update(parseInt(this.id), { pinned: ($(this).is(".pin") ? false : true) });
});
});
// undo close
$(document).on("mousedown", "#button_undo", function(event){
if (event.button != 0){
return;
}
chrome.sessions.getRecentlyClosed( null, function(sessions){
if (sessions.length > 0){
chrome.sessions.restore(null, function(){});
}
});
});
// move tab to new window (detach)
$(document).on("mousedown", "#button_move", function(event){
if (event.button != 0){
return;
}
var tabsArr = [];
$(".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;
}
FindTab($("#filter_box")[0].value);
});
// filter on input
$("#filter_box").on("input", function(){
if ($("#filter_box")[0].value == ""){
$("#button_filter_clear").css({"opacity": "0"}).attr("title", "");
} else {
$("#button_filter_clear").css({"opacity": "1"});
$("#button_filter_clear").attr("title", bg.caption_clear_filter);
}
FindTab($("#filter_box")[0].value);
});
// change filtering type
$(document).on("mousedown", "#button_filter_type", function(event){
if (event.button != 0){
return;
}
$("#button_filter_type").toggleClass("url").toggleClass("title");
if (bg.opt_toolbar.filter_type == "url"){
bg.opt_toolbar.filter_type = "title";
} else {
bg.opt_toolbar.filter_type = "url";
}
FindTab($("#filter_box")[0].value);
SaveToolbarOptions();
});
// clear filter button
$(document).on("mousedown", "#button_filter_clear", function(event){
if (event.button != 0){
return;
}
$("#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/"});
});
// vertical tabs options
$(document).on("mousedown", "#button_options", function(event){
if (event.button != 0){
return;
}
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);
});
});
}

80
sidebar.html Normal file
View File

@ -0,0 +1,80 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title></title>
<style id="pagestyle">
html,
body {
min-width: 100px;
min-height: 250px;
width:100%;
height:100%;
border:none;
margin:0;
padding:0;
white-space:nowrap;
overflow:hidden;
font-family:Arial;
font-size:0px;
cursor:default;
-webkit-user-select:none;
-webkit-user-drag:none;
}
</style>
<link type="text/css" rel="stylesheet" media="all" href="../theme/theme.css" id="theme" />
<script type="text/javascript" src="../lib_jquery/jquery-3.2.1.min.js"></script>
</head>
<body>
<div id="DragImage" style="display: none; width:0px; height:0px;"></div>
<div class="toolbar" id="toolbar">
</div>
<div class="pin_list" id="pin_list" >
</div>
<div class="tab_list" id="tab_list">
</div>
<ul class="menu" id="tabs_menu">
<li data-action="tab_new" class="menu_item" id="tabs_menu_new"></li>
<li data-action="tab_clone" class="menu_item" id="tabs_menu_clone"></li>
<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>
<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_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_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>
<script type="text/javascript" src="../scripts/global_variables.js"></script>
<script type="text/javascript" src="../scripts/events_chrome.js"></script>
<script type="text/javascript" src="../scripts/events_tabs.js"></script>
<script type="text/javascript" src="../scripts/events_refresh.js"></script>
<script type="text/javascript" src="../scripts/tabs.js"></script>
<script type="text/javascript" src="sidebar.js"></script>
<script type="text/javascript" src="../scripts/IO.js"></script>
<script type="text/javascript" src="../scripts/menu_tabs.js"></script>
<script type="text/javascript" src="../scripts/toolbar.js"></script>
</body>
</html>

144
sidebar.js Normal file
View File

@ -0,0 +1,144 @@
document.addEventListener("DOMContentLoaded", Initialize(), false);
function Initialize(){
if (bg.hold){
setTimeout(function(){ Initialize(); },500);
chrome.runtime.sendMessage({command: "background_start"});
} else {
var theme = {
"ToolbarShow": false,
"ScrollbarPinList": 4,
"ScrollbarTabList": 16
};
if (localStorage.getItem("current_theme") != null && localStorage["theme"+localStorage["current_theme"]] != null){
theme = JSON.parse(localStorage["theme"+localStorage["current_theme"]]);
$("#toolbar").html(theme.toolbar);
var css_variables = "";
for (var css_variable in theme.ColorsSet){
css_variables = css_variables + "--" + css_variable + ":" + theme.ColorsSet[css_variable] + ";";
}
for (var css_variable in theme.TabsSizeSet){
css_variables = css_variables + "--" + css_variable + ":" + theme.TabsSizeSet[css_variable] + ";";
}
document.styleSheets[0].insertRule("body { "+css_variables+" }", 0);
}
if (navigator.userAgent.match("Firefox") === null){
document.styleSheets[0].insertRule("::-webkit-scrollbar { width:"+theme.ScrollbarTabList+"px; height:"+theme.ScrollbarPinList+"px; }", 0);
} else {
// I have no idea what is going on in latest build, but why top position for various things is different in firefox?????
if (theme.TabsSizeSetNumber > 1){
document.styleSheets[1].insertRule(".tab_header>.tab_title { margin-top: -1.5px; }", document.styleSheets[1].cssRules.length);
}
// document.styleSheets[1].insertRule("#toolbar_main { top: 1px; height: 25px; }", document.styleSheets[1].cssRules.length);
// document.styleSheets[1].insertRule(".button_img { position: relative; top: -1px; left: -1px; }", document.styleSheets[1].cssRules.length);
}
chrome.tabs.query({currentWindow: true}, function(tabs){
CurrentWindowId = tabs[0].windowId;
if (bg.opt.pin_list_multi_row){
$("#pin_list").css({"white-space": "normal", "overflow-x": "hidden"});
}
if (theme.ToolbarShow == true){
if (bg.opt_toolbar.filter_type == "url"){
$("#button_filter_type").addClass("url");
} else {
$("#button_filter_type").addClass("title");
}
$(".button").each(function(){
$(this).attr("title", chrome.i18n.getMessage(this.id));
});
$("#filter_box").attr("placeholder", bg.caption_searchbox);
$("#filter_box").css({"opacity": 1});
$(".on").removeClass("on");
$("#toolbar_tools, #toolbar_search").removeClass("hidden");
if (bg.opt_toolbar.active_toolbar_tool == ""){
$("#toolbar_tools, #toolbar_search").addClass("hidden");
}
if (bg.opt_toolbar.active_toolbar_tool == "tools" && $("#button_tools").length != 0){
$("#toolbar_search").addClass("hidden");
$("#button_tools").addClass("on");
}
if (bg.opt_toolbar.active_toolbar_tool == "search" && $("#button_search").length != 0){
$("#toolbar_tools").addClass("hidden");
$("#button_search").addClass("on");
}
$("#toolbar_separator").remove();
$("#toolbar_unused_buttons").remove();
} else {
$("#toolbar").children().remove();
}
tabs.forEach(function(Tab){
AppendTab({
tab: Tab,
Append: true
});
});
tabs.forEach(function(Tab){
if (bg.tabs[Tab.id] && !Tab.pinned){
$("#"+Tab.id).addClass(bg.tabs[Tab.id].o);
if ($("#"+bg.tabs[Tab.id].p).length > 0 && $("#"+bg.tabs[Tab.id].p).is(".tab") && $("#"+Tab.id).find( $("#ch"+bg.tabs[Tab.id].p)).length == 0){
$("#ch"+bg.tabs[Tab.id].p).append($("#"+Tab.id));
}
}
});
tabs.forEach(function(Tab){
if ($("#"+Tab.id)[0] && $("#"+Tab.id).parent().children().eq(bg.tabs[Tab.id].n)[0]){
if ($("#"+Tab.id).index() > bg.tabs[Tab.id].n){
$("#"+Tab.id).insertBefore($("#"+Tab.id).parent().children().eq(bg.tabs[Tab.id].n));
} else {
$("#"+Tab.id).insertAfter($("#"+Tab.id).parent().children().eq(bg.tabs[Tab.id].n));
}
}
});
tabs.forEach(function(Tab){
if ($("#"+Tab.id)[0] && $("#"+Tab.id).parent().children().eq(bg.tabs[Tab.id].n)[0]){
if ($("#"+Tab.id).index() < bg.tabs[Tab.id].n){
$("#"+Tab.id).insertAfter($("#"+Tab.id).parent().children().eq(bg.tabs[Tab.id].n));
}
}
});
delete theme;
SetIOEvents();
SetToolbarEvents();
SetTRefreshEvents();
SetTabEvents();
SetMenu();
RefreshGUI();
RefreshExpandStates();
UpdateData();
// Scroll to active tab
setTimeout(function(){ ScrollToTab($(".active")[0].id); },100);
if (navigator.userAgent.match("Vivaldi") !== null){
VivaldiRefreshMediaIcons();
}
});
}
}
function log(m){
bg.log(m);
}

68
theme/close.svg Normal file
View File

@ -0,0 +1,68 @@
<?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="12"
height="12"
viewBox="0 0 12 12"
id="svg4216"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="close.svg">
<defs
id="defs4218" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="44.8"
inkscape:cx="4.1559123"
inkscape:cy="4.8313983"
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,-1040.3622)">
<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: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 2.9081908,1042.7622 c 0.2324213,0 0.4647584,0.089 0.6421314,0.2661 l 0.963197,0.9631 1.4864809,1.4848 1.484707,-1.4848 0.963197,-0.9631 c 0.3546774,-0.3548 0.9313595,-0.3548 1.2860364,0 0.3546775,0.3546 0.3546775,0.9294 0,1.2842 l -0.9631972,0.9632 -1.4864805,1.4865 1.4864805,1.4848 0.9631972,0.9631 c 0.3547465,0.3548 0.3547465,0.9314 0,1.286 -0.3546552,0.3548 -0.9312909,0.3548 -1.2860364,0 l -0.963197,-0.9631 -1.484707,-1.4865 -1.4864809,1.4865 -0.963197,0.9631 c -0.354677,0.3548 -0.9295858,0.3548 -1.2842627,0 -0.354677,-0.3546 -0.354677,-0.9312 0,-1.286 l 0.963197,-0.9631 1.484707,-1.4848 -1.484707,-1.4865 -0.963197,-0.9632 c -0.354746,-0.3548 -0.354746,-0.9296 0,-1.2842 0.1773275,-0.1771 0.40971,-0.2661 0.6421313,-0.2661 z"
id="rect4134"
inkscape:connector-curvature="0"
sodipodi:nodetypes="sscccccccccscscccccccccscs" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

BIN
theme/empty.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 B

74
theme/empty.svg Normal file
View File

@ -0,0 +1,74 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg3347"
version="1.1"
inkscape:version="0.91 r13725"
width="16"
height="16"
viewBox="0 0 16 16"
sodipodi:docname="empty.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></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="1028"
id="namedview3349"
showgrid="false"
inkscape:zoom="22.627417"
inkscape:cx="4.0568809"
inkscape:cy="10.507545"
inkscape:window-x="-8"
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:#b2b2b2;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 9,0.9999962 13,5 9,5 Z"
id="rect3369"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:#b2b2b2;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 2,1 6,0 0,5 5,-3.8e-6 L 13,15 2,15 Z"
id="rect3371"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc" />
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

71
theme/loading.svg Normal file
View File

@ -0,0 +1,71 @@
<?xml version="1.0" encoding="utf-8"?>
<svg width='32px' height='32px' xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid" class="uil-spin">
<rect x="0" y="0" width="100" height="100" fill="none" class="bk">
</rect>
<g transform="translate(50 50)">
<g transform="rotate(0) translate(34 0)">
<circle cx="0" cy="0" r="8" fill="#b2b2b2">
<animate attributeName="opacity" from="1" to="0.1" begin="0s" dur="1s" repeatCount="indefinite">
</animate>
<animateTransform attributeName="transform" type="scale" from="1.5,1.0" to="1.0,1.0" begin="0s" dur="1s" repeatCount="indefinite">
</animateTransform>
</circle>
</g>
<g transform="rotate(45) translate(34 0)">
<circle cx="0" cy="0" r="8" fill="#b2b2b2">
<animate attributeName="opacity" from="1" to="0.1" begin="0.12s" dur="1s" repeatCount="indefinite">
</animate>
<animateTransform attributeName="transform" type="scale" from="1.5,1.0" to="1.0,1.0" begin="0.12s" dur="1s" repeatCount="indefinite">
</animateTransform>
</circle>
</g>
<g transform="rotate(90) translate(34 0)">
<circle cx="0" cy="0" r="8" fill="#b2b2b2">
<animate attributeName="opacity" from="1" to="0.1" begin="0.25s" dur="1s" repeatCount="indefinite">
</animate>
<animateTransform attributeName="transform" type="scale" from="1.5,1.0" to="1.0,1.0" begin="0.25s" dur="1s" repeatCount="indefinite">
</animateTransform>
</circle>
</g>
<g transform="rotate(135) translate(34 0)">
<circle cx="0" cy="0" r="8" fill="#b2b2b2">
<animate attributeName="opacity" from="1" to="0.1" begin="0.37s" dur="1s" repeatCount="indefinite">
</animate>
<animateTransform attributeName="transform" type="scale" from="1.5,1.0" to="1.0,1.0" begin="0.37s" dur="1s" repeatCount="indefinite">
</animateTransform>
</circle>
</g>
<g transform="rotate(180) translate(34 0)">
<circle cx="0" cy="0" r="8" fill="#b2b2b2">
<animate attributeName="opacity" from="1" to="0.1" begin="0.5s" dur="1s" repeatCount="indefinite">
</animate>
<animateTransform attributeName="transform" type="scale" from="1.5,1.0" to="1.0,1.0" begin="0.5s" dur="1s" repeatCount="indefinite">
</animateTransform>
</circle>
</g>
<g transform="rotate(225) translate(34 0)">
<circle cx="0" cy="0" r="8" fill="#b2b2b2">
<animate attributeName="opacity" from="1" to="0.1" begin="0.62s" dur="1s" repeatCount="indefinite">
</animate>
<animateTransform attributeName="transform" type="scale" from="1.5,1.0" to="1.0,1.0" begin="0.62s" dur="1s" repeatCount="indefinite">
</animateTransform>
</circle>
</g>
<g transform="rotate(270) translate(34 0)">
<circle cx="0" cy="0" r="8" fill="#b2b2b2">
<animate attributeName="opacity" from="1" to="0.1" begin="0.75s" dur="1s" repeatCount="indefinite">
</animate>
<animateTransform attributeName="transform" type="scale" from="1.5,1.0" to="1.0,1.0" begin="0.75s" dur="1s" repeatCount="indefinite">
</animateTransform>
</circle>
</g>
<g transform="rotate(315) translate(34 0)">
<circle cx="0" cy="0" r="8" fill="#b2b2b2">
<animate attributeName="opacity" from="1" to="0.1" begin="0.87s" dur="1s" repeatCount="indefinite">
</animate>
<animateTransform attributeName="transform" type="scale" from="1.5,1.0" to="1.0,1.0" begin="0.87s" dur="1s" repeatCount="indefinite">
</animateTransform>
</circle>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

BIN
theme/media.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
theme/media_muted.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 B

762
theme/theme.css Normal file
View File

@ -0,0 +1,762 @@
::-webkit-scrollbar-thumb {
background-color: var(--scrollbar_thumb, #cdcdcd);
}
::-webkit-scrollbar-thumb:hover {
background-color: var(--scrollbar_thumb_hover, #a6a6a6);
}
::-webkit-scrollbar-track {
background-color: var(--scrollbar_track, #e4e4e4);
}
body {
background-color: var(--tab_list_background, #fafafa);
}
/* DO NOT REPEAT BACKGROUND IMAGES */
div {
background-repeat: no-repeat;
}
/* HIDE OVERFLOW */
#toolbar,
#toolbar_search,
#toolbar_tools,
#tabs_menu {
overflow: hidden;
}
/* AUTO SIZE */
#tab_list,
#pin_list {
width: auto;
height: auto;
}
/* WIDTH: 100% */
#toolbar,
#toolbar_main,
#toolbar_search,
#toolbar_tools {
width: 100%;
}
/* POSITION: RELATIVE */
#toolbar,
#toolbar_separator,
#filter_box,
#button_filter_clear,
.button,
#pin_list,
#tab_list,
.pin,
.tab {
position: relative;
}
/* POSITION: ABSOLUTE */
.tab_mediaicon,
#tabs_menu,
.toolbar_int {
position: absolute;
}
/* PLACEMENT HORIZONTAL */
#toolbar_search_input_box,
#toolbar_search_buttons,
#filter_box,
#button_filter_clear,
.button,
.tab_mediaicon,
.pin {
display: inline-block;
vertical-align: top;
}
/* PLACEMENT VERTICAL */
#toolbar,
#pin_list,
#tab_list,
.tab {
display: vinline-block;
}
/* HIDE */
.hidden {
position: absolute;
top: -1000px;
left: -1000px;
width: 0px;
height: 0px;
border: none;
margin: 0px;
overflow: hidden;
margin: 0px;
}
#pin_list.hidden {
margin-bottom: -2px;
}
/* TOOLBAR */
.toolbar {
padding-top: 1px;
background-color: var(--toolbar_background, #f2f2f2);
}
.toolbar_int {
border-bottom: 1px solid var(--toolbar_border_bottom, #cccccc);
}
#toolbar_main {
top: 0px;
height: 26px;
}
#toolbar_search,
#toolbar_tools {
top: 27px;
height: 26px;
}
#toolbar_separator {
top: 54px;
height: 15px;
width: 100%;
background-color: white;
}
#toolbar_unused_buttons {
top: 69px;
height: 26px;
width: 100%;
background-color: #b8ffbf;
}
.button {
z-index: 100;
width: 22px;
height: 22px;
bottom: -1px;
left: 1px;
margin-right: 1px;
}
.button:not(.on) {
background-color: var(--button_background, #f2f2f2);
border: 1px solid var(--button_border, #f2f2f2);
}
.button:hover:not(.on) {
background-color: var(--button_hover_background, #dcdcdc);
border: 1px solid var(--button_hover_border, #bebebe);
}
.button.on {
height: 24px;
background-color: var(--toolbar_background, #f2f2f2);
border: 1px solid var(--toolbar_border_bottom, #cccccc);
border-bottom: 1px solid var(--toolbar_background, #f2f2f2);
}
.button_img {
width: 22px;
height: 22px;
background-size: 22px 22px;
background-position: 0px 0px;
background-color: var(--button_icons, #808080);
}
/* TOOLBAR BUTTONS */
#button_bookmarks>.button_img {
-webkit-mask-box-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);
mask-image: url(../theme/toolbar_options.svg);
}
#button_settings>.button_img {
-webkit-mask-box-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);
mask-image: url(../theme/toolbar_move.svg);
}
#button_pin>.button_img {
-webkit-mask-box-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);
mask-image: url(../theme/toolbar_history.svg);
}
#button_undo>.button_img {
-webkit-mask-box-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);
mask-image: url(../theme/toolbar_downloads.svg);
}
#button_extensions>.button_img {
-webkit-mask-box-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);
mask-image: url(../theme/toolbar_discard.svg);
}
#button_new>.button_img {
-webkit-mask-box-image: url(../theme/toolbar_new.svg);
mask-image: url(../theme/toolbar_new.svg);
}
#button_tools>.button_img {
-webkit-mask-box-image: url(../theme/toolbar_tools.svg);
mask-image: url(../theme/toolbar_tools.svg);
}
#button_search>.button_img {
-webkit-mask-box-image: url(../theme/toolbar_search.svg);
mask-image: url(../theme/toolbar_search.svg);
}
/* TOOLBAR SEARCHBOX */
#button_filter_type.url>.button_img {
-webkit-mask-box-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);
mask-image: url(../theme/toolbar_filter_title.svg);
}
#filter_search_go_prev,
#filter_search_go_next {
width: 16px;
}
#filter_search_go_prev>.button_img {
-webkit-mask-box-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);
mask-image: url(../theme/toolbar_filter_search_go_next.svg);
width: 16px;
background-size: 16px 22px;
}
#toolbar_search_input_box {
position: relative;
top: 0px;
left: 2px;
height: 25px;
width: calc(100% - 67px);
overflow: hidden;
}
#filter_box {
top: 2px;
padding-left: 6px;
width: calc(100% - 10px);
height: 18px;
background-color: var(--filter_box_background, #fafafa);
border: solid 1px var(--filter_box_border, #cccccc);
color: var(--filter_box_font, #808080);
}
#filter_box:focus {
outline: none;
}
#button_filter_clear {
-webkit-mask-box-image: url(../theme/toolbar_filter_clear.svg);
mask-image: url(../theme/toolbar_filter_clear.svg);
top: 6px;
right: 17px;
width: 16px;
height: 16px;
background-color: var(--filter_clear_icon, #808080);
}
#toolbar_search_buttons {
position: relative;
left: 2px;
height: 24px;
width: 30px;
}
/* LISTS */
#pin_list {
height: auto;
overflow-x: auto;
overflow-y: hidden;
padding-right: 2px;
padding-bottom: 1px;
background-color: var(--pin_list_background, #fafafa);
border-bottom: 1px solid var(--pin_list_border_bottom, #cccccc);
}
#tab_list {
overflow-x: hidden;
overflow-y: auto;
z-index: 100;
background-color: var(--tab_list_background, #fafafa);
}
/* PINS AND TABS */
.tab_header {
border: 1px solid var(--tab_border, #bebebe);
background-color: var(--tab_background, #f2f2f2);
}
.tab_header.tab_header_hover {
border: 1px solid var(--tab_hover_border, #878787);
background-color: var(--tab_hover_background, #d7d7d7);
}
.selected>.tab_header {
border: 1px solid var(--tab_selected_border, #70c0e7);
background-color: var(--tab_selected_background, #e5f3fb);
}
.selected>.tab_header.tab_header_hover {
border: 1px solid var(--tab_selected_hover_border, #78aee5);
background-color: var(--tab_selected_hover_background, #d0e2f0);
}
/* TABS */
.tab_header>.tab_title {
z-index: 5;
font-family: Arial, Helvetica, "Nimbus Sans L", "Liberation Sans", FreeSans, Sans-serif;
white-space: nowrap;
text-overflow: ellipsis;
width: auto;
overflow: hidden;
padding-right: 3px;
padding-left: var(--title_padding_left, 25px);
color: var(--tab_title, #000000);
font-size: var(--title_font_size, 12px);
}
.tab.active>.tab_header>.tab_title {
font-weight: var(--active_font_weight, bold);
color: var(--tab_title_active, #000000);
}
.tab.discarded>.tab_header>.tab_title {
color: var(--tab_title_discarded, #7e7e7e);
}
.tab.filtered>.tab_header {
background-color: var(--tab_filtered, #e8e000);
}
.tab.selected.filtered>.tab_header {
background-color: var(--tab_filtered_selected, #0f8079);
}
.tab.selected.active.filtered>.tab_header {
background-color: var(--tab_filtered_selected_active, #1299a9);
}
.tab.filtered.highlighted_search>.tab_header {
background-color: var(--tab_filtered_highlighted, #ffa500);
}
.tab {
position: relative;
display: vinline-block;
left: 0px;
height: auto;
width: auto;
border-top: 1px solid transparent;
}
.tab>.tab_header {
/* tab size is here, all the rest is automatically calculated, adjust line-height to fix title vertical position */
z-index: 10;
position: relative;
top: 0px;
left: 13px;
height: var(--tab_height, 19px);
line-height: var(--tab_height_line, 22px);
width: calc(100% - 16px);
background-image: url(../theme/empty.svg);
background-size: var(--favicon_size, 16px 16px);
background-position: var(--favicon_pos, 4px center);
}
.drop_target {
display: none;
position: absolute;
}
.tab>.drop_target {
left: 13px;
width: calc(100% - 14px);
}
.tab>.drag_enter_center {
z-index: 11;
top: -1px;
height: calc(var(--tab_height, 21px) + 2px);
border: 1px solid transparent;
}
.tab>.drag_enter_center.highlighted_drop_target {
border: 1px solid var(--drag_indicator, #339bf3);
}
.tab>.drag_entered_top {
z-index: 15;
top: -1px;
height: var(--drag_area_top, 7px);
border-top: 1px solid transparent;
}
.tab>.drag_entered_top.highlighted_drop_target {
border-top: 1px solid var(--drag_indicator, #339bf3);
}
.tab>.drag_entered_bottom {
z-index: 20;
bottom: -1px;
height: var(--drag_area_bottom, 5px);
border-bottom: 1px solid transparent;
}
.tab>.drag_entered_bottom.highlighted_drop_target {
bottom: -1px;
border-bottom: 1px solid var(--drag_indicator, #339bf3);
}
.children>.tab:last-child>.drag_entered_bottom {
z-index: 19;
bottom: 3px;
border-bottom: 1px solid transparent;
}
.children>.tab:last-child>.drag_entered_bottom.highlighted_drop_target {
bottom: -1px;
height: calc(var(--drag_area_bottom, 9px) + 4px);
border-bottom: 1px solid var(--drag_indicator, #339bf3);
}
/* #tab_list>.tab:first-child {
margin-top: 4px;
} */
#tab_list>.tab:last-child {
margin-bottom: 12px;
}
/* TABS CHILDREN */
.children>.tab>.tab_header {
left: 13px;
}
.children {
position: relative;
padding-left: 6px;
}
.o>.children {
height: auto;
}
.c>.children {
display: none;
height: 0px;
}
.expand {
z-index: 200;
position: absolute;
top: 1px;
left: 0px;
height: 100%;
width: 16px;
}
.exp_box {
position: absolute;
top: var(--expand_box_top, 6px);
left: var(--expand_box_left, 3px);
height: var(--expand_box_size, 5px);
width: var(--expand_box_size, 5px);
}
.c>.expand>.exp_box {
border: 1px solid var(--expand_closed_border, #969696);
background-color: var(--expand_closed_background, #eaeaea);
}
.o>.expand>.exp_box {
border: 1px solid var(--expand_open_border, #339bf3);
background-color: var(--expand_open_background, #d0e2f0);
}
.children>.o>.expand>.exp_line_h,
.children>.c>.expand>.exp_line_h {
position: absolute;
top: var(--expand_line_h_top, 9px);
left: 1px;
height: 1px;
width: var(--expand_line_h_oc_width, 3px);
border-top: 1px solid var(--expand_lines, #cccccc);
}
.children>.tab:not(.o):not(.c)>.expand>.exp_line_h {
position: absolute;
top: var(--expand_line_h_top, 9px);
left: 1px;
height: 1px;
width: var(--expand_line_h_width, 12px);
border-top: 1px solid var(--expand_lines, #cccccc);
}
.children>.tab:not(:last-child)>.expand>.exp_line_v {
position: absolute;
top: var(--expand_line_v_top, -9px);
left: var(--expand_line_v_left, 0px);
height: calc(100% + 1px);
width: 1px;
border-left: 1px solid var(--expand_lines, #cccccc);
}
.children>.tab:last-child>.expand>.exp_line_v {
position: absolute;
top: var(--expand_line_v_top, -9px);
left: var(--expand_line_v_left, 0px);
height: var(--expand_line_v_last_height, 19px);
width: 1px;
border-left: 1px solid var(--expand_lines, #cccccc);
}
/* PINS */
.pin {
/* pin size is here, all the rest is automatically calculated */
top: 1px;
left: 1px;
height: var(--pin_height, 24px);
width: var(--pin_width, 26px);
/* border: 1px solid red; */
}
.pin>.tab_header>.tab_title,
.pin>.expand {
display: none;
}
.pin>.tab_header {
background-image: url(../theme/empty.svg);
background-size: var(--favicon_size, 16px 16px);
background-position: center;
height: calc(100% - 3px);
width: calc(100% - 3px);
}
.pin>.drag_entered_top {
z-index: 20;
position: absolute;
top: 1px;
left: -1px;
height: calc(100% - 4px);
width: 50%;
border-left: 1px solid transparent;
}
.pin>.drag_entered_top.highlighted_drop_target {
border-left: 1px solid var(--drag_indicator, #339bf3);
}
.pin>.drag_entered_bottom {
z-index: 21;
position: absolute;
top: 1px;
left: calc(50% - 2px);
height: calc(100% - 4px);
width: 50%;
border-left: 1px solid transparent;
}
.pin>.drag_entered_bottom.highlighted_drop_target {
border-right: 1px solid var(--drag_indicator, #339bf3);
}
.pin>.drag_enter_center {
z-index: 2;
position: absolute;
top: 0px;
height: 0px;
width: 0px;
/* border: 1px solid yellow; */
}
/* MEDIA */
.tab_mediaicon {
z-index: 999;
bottom: 0px;
left: 2px;
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;
}
.muted>.tab_header>.tab_mediaicon {
height: 10px;
width: 10px;
background-image: url(../theme/media_muted.gif);
background-size: 10px 10px;
}
/* LOADING FAVICON */
.loading>.tab_header {
background-image: url(../theme/loading.svg);
}
/* CLOSE BUTTON */
.close {
border: 1px solid transparent;
z-index: 998;
display: none;
position: absolute;
top: var(--close_top, 2px);
right: var(--close_right, 2px);
height: var(--close_size, 13px);
width: var(--close_size, 13px);
background-size: var(--close_size, 13px) var(--close_size, 13px);
}
.close_img {
z-index: -999;
position: absolute;
top: 0px;
left: 0px;
height: 100%;
width: 100%;
background-color: var(--close_x, #7d7d7d);
-webkit-mask-box-image: url(../theme/close.svg);
mask-image: url(../theme/close.svg);
mask-size: 100%;
mask-position: center, center;
}
.close_show>.tab_title {
padding-right: var(--title_padding_with_close, 24px);
}
.close_show>.close {
display: inline-block;
}
.close_show>.close_hover>.close_img {
top: 0px;
background-color: var(--close_hover_x, #fbfcfe);
}
.close_show>.close_hover {
border: 1px solid var(--close_hover_border, #757676);
background-color: var(--close_hover_background, #939394);
}
.pin>.tab_header>.close {
display: none;
z-index: -999;
}
/* MENU */
#tabs_menu {
display: none;
word-wrap: normal;
white-space: initial;
z-index: 1000;
font-family: Arial, Helvetica, "Nimbus Sans L", "Liberation Sans", FreeSans, Sans-serif;
font-size: 12px;
border: 1px solid var(--tabs_menu_border, #bebebe);
padding: 0;
background: var(--tabs_menu_background, #fafafa);
color: var(--tabs_menu_font, #333333);
}
#tabs_menu li {
padding: 3px 8px;
cursor: pointer;
list-style-type: none;
}
#tabs_menu li:hover {
padding: 2px 7px;
border: 1px solid var(--tabs_menu_hover_border, #bebebe);
background-color: var(--tabs_menu_hover_background, #efefef);
}
#tabs_menu .separator {
height: 1px;
width: 80%;
background-color: var(--tabs_menu_separator, #efefef);
margin: 0 auto;
}

View File

@ -0,0 +1,90 @@
<?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_bookmarks.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="1028"
id="namedview3349"
showgrid="false"
inkscape:zoom="16"
inkscape:cx="-5.354717"
inkscape:cy="10.016903"
inkscape:window-x="-8"
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" />
<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="5.0000048"
y="3.9999979" />
<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="13.000005"
y="3.9999979" />
<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="13.000005"
y="9.9999962" />
<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="rect3371"
width="6.99999"
height="6.99999"
x="5.0000048"
y="11.999996" />
</svg>

After

Width:  |  Height:  |  Size: 3.0 KiB

69
theme/toolbar_discard.svg Normal file
View File

@ -0,0 +1,69 @@
<?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_discard.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="16.880813"
inkscape:cy="10.493162"
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-intersection-paths="true"
inkscape:object-nodes="true"
inkscape:snap-smooth-nodes="true" />
<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:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:bevel;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 11 3 A 8 8 0 0 0 3 11 A 8 8 0 0 0 11 19 A 8 8 0 0 0 19 11 A 8 8 0 0 0 11 3 z M 13.810547 7.5019531 C 13.987006 7.5025032 14.162745 7.5718554 14.296875 7.7070312 C 14.564364 7.9757797 14.564364 8.4089828 14.296875 8.6777344 L 11.972656 11.001953 L 14.292969 13.322266 C 14.56046 13.591015 14.56046 14.02422 14.292969 14.292969 C 14.024711 14.563283 13.588297 14.56555 13.318359 14.296875 L 10.998047 11.976562 L 8.6777344 14.296875 C 8.4089822 14.564364 7.9757799 14.564363 7.7070312 14.296875 C 7.4366759 14.028614 7.4344492 13.592204 7.703125 13.322266 L 10.023438 11.001953 L 7.703125 8.6816406 C 7.4344498 8.4117025 7.4366796 7.9752899 7.7070312 7.7070312 C 7.9757812 7.4395412 8.4089849 7.4395404 8.6777344 7.7070312 L 10.998047 10.027344 L 13.322266 7.703125 C 13.457235 7.5687874 13.634088 7.501403 13.810547 7.5019531 z "
id="path4308" />
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

109
theme/toolbar_downloads.svg Normal file
View File

@ -0,0 +1,109 @@
<?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_downloads.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">
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Lend"
style="overflow:visible"
inkscape:isstock="true">
<path
id="path4159"
style="fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:#808080;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lstart"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lstart"
style="overflow:visible"
inkscape:isstock="true">
<path
id="path4138"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
style="fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:#808080;stroke-width:1pt;stroke-opacity:1"
transform="matrix(0.8,0,0,0.8,10,0)"
inkscape:connector-curvature="0" />
</marker>
</defs>
<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="32"
inkscape:cx="13.266646"
inkscape:cy="9.1075792"
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="false"
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-intersection-paths="true"
inkscape:object-nodes="true"
inkscape:snap-smooth-nodes="false"
inkscape:snap-others="false" />
<circle
style="opacity:1;fill:none;fill-opacity:0;stroke:#000000;stroke-width:1.39999998;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path6623"
cx="11"
cy="10.999992"
r="6.4082494" />
<path
id="path4444-4"
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 8.0000003,10.999993 1.9999997,0 0,-4.0000007 2,0 0,4.0000007 2,0 -3,4 z"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc" />
</svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -0,0 +1,71 @@
<?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_extensions.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="32"
inkscape:cx="9.339935"
inkscape:cy="9.659087"
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-intersection-paths="true"
inkscape:object-nodes="true"
inkscape:snap-smooth-nodes="true" />
<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:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:bevel;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 10.489408,4.2498488 C 9.6457101,4.2465748 8.9595838,4.9260453 8.9576082,5.7701287 l 0,0.9959049 -2.6674466,0 c -0.5762488,0 -0.9884464,0.4664406 -1.0401613,1.0406193 l 0,2.6728931 1.0015616,0.002 c 0.4218553,9.29e-4 0.8032137,0.171733 1.0787623,0.449126 0.2755512,0.277397 0.4424932,0.661259 0.4408492,1.0833 -0.00202,0.840359 -0.6796142,1.518302 -1.5196115,1.520281 l -1.0015616,0.004 0,2.67086 c 0,0.576541 0.4662452,0.98886 1.0401613,1.040657 l 2.6674466,0 0,-0.995905 c 0.00202,-0.844085 0.6881019,-1.523505 1.5317998,-1.520279 0.839994,0.002 1.517636,0.679915 1.519611,1.520279 l 0,0.995905 2.679635,0 c 0.57625,0 1.040163,-0.418627 1.040163,-1.04062 l 0,-2.674925 1.001563,0 c 0.839995,-0.002 1.517635,-0.67992 1.51961,-1.52028 0.0015,-0.422041 -0.165299,-0.805904 -0.440849,-1.083299 -0.27555,-0.277399 -0.656908,-0.448185 -1.078761,-0.449175 l -1.001563,0 0,-2.6749263 c 0,-0.5765031 -0.463912,-1.0406193 -1.040163,-1.0406193 l -2.679635,0 0,-0.995905 C 12.007037,4.9297649 11.329402,4.251826 10.489408,4.2498488 Z"
id="path4181"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccssccscccsscccccsscccsccssccc" />
</svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -0,0 +1,63 @@
<?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="16"
height="16"
viewBox="0 0 16 16"
id="svg4216"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="toolbar_filter_clear.svg">
<defs
id="defs4218" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="31.678384"
inkscape:cx="7.5672409"
inkscape:cy="8.7375338"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1058"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<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)">
<path
id="path4766"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 11.5,1040.8622 -7,7 m 0,-7 7,7"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -0,0 +1,73 @@
<?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="16"
height="22"
viewBox="0 0 16 22"
sodipodi:docname="toolbar_filter_search_go_next.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="5.3977768"
inkscape:cy="11.108757"
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" />
<g
id="g3078"
transform="matrix(0,-0.68965222,-0.7142857,0,17.28572,18.758609)"
style="fill:#000000;fill-opacity:1">
<path
id="path2988-4-8"
style="fill:#000000;fill-opacity:1;stroke:none"
d="M 4,20.000008 11.250063,6.0000078 18.500062,20.000008 Z"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@ -0,0 +1,73 @@
<?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="16"
height="22"
viewBox="0 0 16 22"
sodipodi:docname="toolbar_filter_search_go_prev.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="32"
inkscape:cx="9.3051622"
inkscape:cy="7.6718448"
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" />
<g
id="g3078"
transform="matrix(0,-0.68965222,0.7142857,0,-1.2857197,18.758609)"
style="fill:#000000;fill-opacity:1">
<path
id="path2988-4-8"
style="fill:#000000;fill-opacity:1;stroke:none"
d="M 4,20.000008 11.250063,6.0000078 18.500062,20.000008 Z"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@ -0,0 +1,79 @@
<?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_filter_title.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="13.986002"
inkscape:cy="5.652831"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg3347"
inkscape:snap-page="true"
inkscape:snap-center="false"
inkscape:snap-midpoints="false"
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-nodes="true"
inkscape:object-nodes="true" />
<g
id="g3078"
transform="matrix(0.99997917,0,0,0.8,8.5000937,1)"
style="fill:#808080;fill-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;"
x="1.8066418"
y="15.224604"
id="text4100"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4104"
x="1.8066418"
y="15.224604">title</tspan></text>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -0,0 +1,79 @@
<?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_filter_url.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="32.000001"
inkscape:cx="18.721089"
inkscape:cy="11.958546"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg3347"
inkscape:snap-page="true"
inkscape:snap-center="false"
inkscape:snap-midpoints="false"
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-nodes="true"
inkscape:object-nodes="true" />
<g
id="g3078"
transform="matrix(0.99997917,0,0,0.8,8.5000937,1)"
style="fill:#808080;fill-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;"
x="4.3613281"
y="15.224603"
id="text4100"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4102"
x="4.3613281"
y="15.224603">url</tspan></text>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

74
theme/toolbar_history.svg Normal file
View File

@ -0,0 +1,74 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg3347"
version="1.1"
inkscape:version="0.91 r13725"
width="22"
height="22"
viewBox="0 0 22 22"
sodipodi:docname="toolbar_history.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="25.27906"
inkscape:cx="10.240121"
inkscape:cy="13.335478"
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" />
<circle
style="opacity:1;fill:none;fill-opacity:0;stroke:#000000;stroke-width:1.39999998;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path6623"
cx="11.10825"
cy="10.891744"
r="6.4082494" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.39999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 11,6.9999935 0,4.0000005 3.383084,2.924113"
id="path7165"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

77
theme/toolbar_move.svg Normal file
View File

@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg3347"
version="1.1"
inkscape:version="0.91 r13725"
width="22"
height="22"
viewBox="0 0 22 22"
sodipodi:docname="toolbar_move.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="6.8485787"
inkscape:cy="11.817662"
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-intersection-paths="true"
inkscape:object-nodes="true"
inkscape:snap-smooth-nodes="true" />
<path
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"
d="m 3,18.999994 9.200005,0 0,-3.074584 -2.063004,1.191076 0,-3.220492 -3.0935926,0 0,-2.773184 3.0935926,-0.0038 0,-2.6974189 2.063004,1.1910785 0,-3.612676 -9.200005,0 z"
id="path7210"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccccccc" />
<path
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"
d="m 8,2.9999936 12,0 0,14.0000004 -6.799995,0 0,-1.651934 4.466986,-2.579016 -4.466986,-2.579022 0,-5.1900284 -5.200005,0 z"
id="path7229"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccc" />
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

74
theme/toolbar_new.svg Normal file
View File

@ -0,0 +1,74 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg3347"
version="1.1"
inkscape:version="0.91 r13725"
width="22"
height="22"
viewBox="0 0 22 22"
sodipodi:docname="toolbar_new.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="1028"
id="namedview3349"
showgrid="false"
inkscape:zoom="22.627417"
inkscape:cx="-2.2881438"
inkscape:cy="11.718987"
inkscape:window-x="-8"
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-intersection-paths="true"
inkscape:object-nodes="true"
inkscape:snap-smooth-nodes="true" />
<g
id="g3793"
transform="translate(14.371042,-2.0030322)" />
<path
style="fill:#000000;fill-opacity:1;stroke:none"
d="m 5.0000004,11.999994 4.9999996,0 0,5 2,0 0,-5 5,0 0,-2.0000004 -5,0 0,-4.9999999 -2,0 0,4.9999999 -4.9999996,0 z"
id="path3877"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccccccc" />
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

86
theme/toolbar_options.svg Normal file
View File

@ -0,0 +1,86 @@
<?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_options.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="2.3078185"
inkscape:cy="8.3551322"
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-intersection-paths="true"
inkscape:object-nodes="true"
inkscape:snap-smooth-nodes="true" />
<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:bevel;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="rect4133"
width="16"
height="4"
x="3"
y="2.9999936" />
<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:bevel;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="rect4133-1"
width="13"
height="4"
x="6"
y="9" />
<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:bevel;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="rect4133-1-2"
width="10"
height="4"
x="9"
y="15" />
</svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

71
theme/toolbar_pin.svg Normal file
View File

@ -0,0 +1,71 @@
<?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_pin.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="4.753406"
inkscape:cy="12.081133"
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-intersection-paths="true"
inkscape:object-nodes="true"
inkscape:snap-smooth-nodes="true" />
<path
id="path7434-5"
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"
d="m 18.571087,8.34765 -0.705226,0.705226 -2.350753,0 -2.649941,2.649941 0,3.93217 -0.918931,0.91893 -2.714052,-2.714052 -3.8253178,3.825318 -1.5416164,0.07556 0.1097934,-1.507379 3.8253179,-3.825317 -2.714052,-2.714052 0.9189303,-0.918931 3.9321696,0 2.649941,-2.6499414 0,-2.3507532 0.705226,-0.7052266 z"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccccccccccc" />
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

72
theme/toolbar_search.svg Normal file
View File

@ -0,0 +1,72 @@
<?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_search.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="3.140617"
inkscape:cy="12.732797"
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" />
<g
id="g2994"
transform="translate(2.6985113,22.999993)"
style="fill:#000000;fill-opacity:1;stroke:none">
<path
style="fill:#000000;fill-opacity:1;stroke:none"
d="m 14.235553,-4.1488458 c -0.113331,-0.10039 -0.860918,-0.914203 -1.661303,-1.808473 -2.509101,-2.803415 -3.9043677,-4.3349272 -3.9732487,-4.3612252 -0.03655,-0.01395 -0.31727,0.09688 -0.623829,0.246291 -0.811515,0.3955252 -1.582163,0.5419822 -2.612853,0.4965592 -0.984815,-0.0434 -1.595512,-0.218038 -2.435351,-0.6964162 -0.648673,-0.36949 -1.516159,-1.202891 -1.855812,-1.782897 -0.858412,-1.465856 -1.010041,-3.205698 -0.407689,-4.67794 0.293639,-0.7177 0.557895,-1.119546 1.104715,-1.679905 1.129624,-1.157592 2.466413,-1.667511 4.133998,-1.576918 1.327756,0.07213 2.468067,0.58219 3.420256,1.529871 0.8506607,0.846635 1.3199647,1.780067 1.5182297,3.019713 0.164298,1.02727 -0.08378,2.362732 -0.601604,3.238622 -0.109567,0.18533 -0.199213,0.382496 -0.199213,0.438146 0,0.05565 1.376607,1.377875 3.059128,2.9382762 1.682519,1.560401 3.098435,2.908649 3.146478,2.996106 0.128596,0.234092 0.02556,0.598048 -0.286675,1.012594 -0.542254,0.719944 -1.324438,1.022619 -1.725227,0.667596 z M 6.6596693,-10.717882 c 0.790526,-0.196973 1.321864,-0.496308 1.926372,-1.085242 0.824277,-0.803041 1.21103,-1.722794 1.22812,-2.920645 0.0264,-1.850334 -1.127518,-3.43042 -2.964081,-4.058784 -0.75255,-0.257479 -1.978756,-0.240014 -2.678928,0.03816 -1.776899,0.705943 -2.791917,2.153948 -2.791917,3.982892 0,1.562575 0.872958,2.95571 2.31454,3.693722 0.986632,0.505103 1.907161,0.613702 2.965894,0.3499 z"
id="path2996"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@ -0,0 +1,70 @@
<?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_settings.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="17.875"
inkscape:cx="12.11279"
inkscape:cy="13.006423"
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-intersection-paths="true"
inkscape:object-nodes="true"
inkscape:snap-smooth-nodes="true" />
<path
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 10.979973,3.9999947 c -0.340804,-3e-7 -0.675368,0.1770488 -0.898591,0.5268354 l 0,1.6734773 C 10.092552,7.0200438 8.9471023,7.5123666 8.2641513,6.9477209 L 7.0739289,5.7646199 C 6.2607992,5.5838734 5.6290296,6.2104494 5.7725219,7.0570985 l 1.192045,1.184924 C 7.6449018,8.9913461 7.189173,10.08276 6.2136151,10.048577 l -1.6859965,0 c -0.7034925,0.44396 -0.7034897,1.328834 0,1.826605 l 1.6859965,0 c 0.9976647,-0.02641 1.4289992,1.134544 0.7509518,1.806554 l -1.192045,1.184924 c -0.1817593,0.8086 0.450014,1.435172 1.301407,1.292479 l 1.1902224,-1.184925 c 0.636629,-0.697086 1.9509177,-0.138577 1.8190527,0.825802 l -0.0019,1.6753 c 0.499594,0.699571 1.389011,0.699574 1.835458,0 l 0,-1.6753 c -0.115161,-1.025274 0.957622,-1.496604 1.819053,-0.825802 l 1.190222,1.184925 c 0.851393,0.142693 1.483167,-0.483879 1.301407,-1.292479 l -1.19201,-1.184924 C 14.44529,12.997111 14.7706,11.925028 15.786385,11.875182 l 1.685997,0 c 0.703489,-0.497771 0.703492,-1.382645 0,-1.826605 l -1.685997,0 C 14.951598,9.9883866 14.531211,8.8551851 15.035477,8.2420225 l 1.192045,-1.184924 C 16.371014,6.2104494 15.739245,5.5838734 14.926115,5.7646199 l -1.190222,1.183101 C 13.01239,7.6325599 11.943596,7.1122758 11.918662,6.2003074 l 0,-1.6734773 C 11.668381,4.1770447 11.320775,3.9999951 10.979973,3.9999947 Z m 0.02005,4.9766804 a 2.0228891,2.0231791 0 0 1 2.0232,2.0234869 2.0228891,2.0231791 0 0 1 -2.023196,2.023486 2.0228891,2.0231791 0 0 1 -2.0231957,-2.023486 2.0228891,2.0231791 0 0 1 2.0231957,-2.0234869 z"
id="path7516"
inkscape:connector-curvature="0" />
</svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

73
theme/toolbar_tools.svg Normal file
View File

@ -0,0 +1,73 @@
<?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_tools.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="12.34313"
inkscape:cy="10.912764"
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" />
<g
id="g3777"
transform="translate(25.45274,-8.4700638)"
style="fill:#000000;fill-opacity:1">
<path
style="fill:#000000;fill-opacity:1"
d="m -9.5531924,27.44376 c 0.284107,-0.03636 0.58111,-0.103982 0.58111,-0.132317 0,-0.01376 -0.422184,-0.436012 -0.938187,-0.938339 -0.5160026,-0.502324 -0.9522186,-0.939536 -0.9693676,-0.971578 -0.03573,-0.06676 0.405788,-1.782065 0.477942,-1.856835 0.04369,-0.04527 1.6770796,-0.498161 1.7966526,-0.498161 0.04591,0 0.382528,0.309914 1.015842,0.935257 0.520949,0.51439 0.960186,0.935256 0.976085,0.935256 0.04213,0 0.09667,-0.243211 0.140004,-0.624278 0.07039,-0.618988 -0.04213,-1.251709 -0.329575,-1.853331 -0.561113,-1.174397 -1.686327,-1.917847 -2.989828,-1.975436 -0.4604506,-0.02034 -0.7484286,0.01369 -1.2095326,0.142939 l -0.307056,0.08607 c -1.453997,-1.459551 -2.962174,-2.923567 -4.346014,-4.422987 0.0081,-0.0361 0.05563,-0.213304 0.105618,-0.393792 0.08219,-0.296741 0.09111,-0.381574 0.09323,-0.886033 0.002,-0.485748 -0.0077,-0.595771 -0.07491,-0.851016 -0.275808,-1.046505 -0.944988,-1.867052 -1.891362,-2.319183 -0.601645,-0.287437 -1.234391,-0.399948 -1.853404,-0.329562 -0.37574,0.04272 -0.624302,0.09778 -0.624302,0.138274 0,0.01494 0.420882,0.454429 0.935293,0.976625 0.597519,0.606561 0.935293,0.973172 0.935293,1.015142 0,0.117798 -0.453628,1.755397 -0.498164,1.798373 -0.0744,0.0718 -1.790166,0.513694 -1.856285,0.478091 -0.03169,-0.01706 -0.468758,-0.453264 -0.971256,-0.96933 -0.502498,-0.516066 -0.924536,-0.938302 -0.937861,-0.938302 -0.03566,0 -0.09765,0.295181 -0.139778,0.665622 -0.06934,0.609804 0.04477,1.24668 0.330546,1.844803 0.449155,0.940071 1.284052,1.623196 2.311254,1.891099 0.546091,0.142426 1.343836,0.11805 1.901479,-0.0581 0.140992,-0.04453 0.281635,-0.07294 0.312541,-0.06312 0.08352,0.02654 4.33892,4.294168 4.338431,4.350902 -2.3e-4,0.02675 -0.0358,0.159409 -0.07906,0.294799 -0.183194,0.573474 -0.198194,1.377849 -0.03671,1.968919 0.162904,0.596294 0.534746,1.213947 0.98359,1.633801 0.755334,0.706549 1.813595,1.054228 2.8177356,0.925733 z"
id="path3781"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ssscsssssssscccccscsssscsssssccccsss" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.0 KiB

68
theme/toolbar_undo.svg Normal file
View File

@ -0,0 +1,68 @@
<?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_undo.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="8.2700788"
inkscape:cy="13.677086"
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:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 8.144957,11.242063 c 1.1067867,-6.8750407 12.655391,-4.8267375 6.215441,2.136305 l 1.944545,1.502602 C 25.478398,3.5563281 6.281537,1.3424514 5.8923543,11.242063 l -2.1333445,0 3.4469131,4.758928 3.2706001,-4.758928 z"
id="path4816"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc" />
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB