-
+
+ {{parent.title}} ({{filteredGroups.filter(it => it.parentId === parent.id).length}} groups)
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+ :title="getTabTitle(tab, true)"
+ @contextmenu.stop.prevent="!group.isArchive && $refs.contextMenuTab.open($event, {tab, group})"
+
+ @click.stop="!group.isArchive && clickOnTab($event, tab, group)"
+
+ :draggable="String(!group.isArchive)"
+ @dragstart="dragHandle($event, 'tab', ['tab', 'group'], {item: tab, group})"
+ @dragenter="dragHandle($event, 'tab', ['tab', 'group'], {item: tab, group})"
+ @dragover="dragHandle($event, 'tab', ['tab', 'group'], {item: tab, group})"
+ @dragleave="dragHandle($event, 'tab', ['tab', 'group'], {item: tab, group})"
+ @drop="dragHandle($event, 'tab', ['tab', 'group'], {item: tab, group})"
+ @dragend="dragHandle($event, 'tab', ['tab', 'group'], {item: tab, group})"
+ >
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
-
-
+
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+ + +
+ Tab Groups ({{filteredGroups.filter(it => !it.parentId).length}}
+ {{filteredGroups.filter(it => !it.parentId).length > 1 ? 'groups' : 'group'}})
+
+
Tab Groups
++ + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1291,52 +1619,63 @@
+
applyGroup(group, tab, true)"
- @sort="sortGroups"
- @discard="discardGroup"
- @discard-other="discardOtherGroups"
- @export-to-bookmarks="exportGroupToBookmarks"
- @unload="unloadGroup"
- @archive="toggleArchiveGroup"
- @unarchive="toggleArchiveGroup"
- @reload-all-tabs="reloadAllTabsInGroup"
- >
+ :menu="options.contextMenuGroup"
+ :groups="groups"
+ :parents="parents"
+ :opened-windows="openedWindows"
+ :show-rename="false"
+ :show-settings="false"
+ :show-remove="false"
+ @open-in-new-window="(group, tab) => applyGroup(group, tab, true)"
+ @sort="sortGroups"
+ @discard="discardGroup"
+ @discard-other="discardOtherGroups"
+ @export-to-bookmarks="exportGroupToBookmarks"
+ @unload="unloadGroup"
+ @archive="toggleArchiveGroup"
+ @unarchive="toggleArchiveGroup"
+ @reload-all-tabs="reloadAllTabsInGroup"
+ @move-group="moveGroup"
+ @move-group-new-parent="moveGroupToNewParent"
+ @transcend-group="toggleTranscendGroup"
+ >
applyGroup(group, tab, true)"
- @reload="reloadTab"
- @discard="discardTab"
- @remove="removeTab"
- @update-thumbnail="updateTabThumbnail"
- @set-group-icon="setTabIconAsGroupIcon"
- @move-tab="moveTabs"
- @move-tab-new-group="moveTabToNewGroup"
- >
+ :menu="options.contextMenuTab"
+ :groups="groups"
+ :multiple-tab-ids="multipleTabIds"
+ :show-update-thumbnail="options.showTabsWithThumbnailsInManageGroups"
+ @open-in-new-window="(group, tab) => applyGroup(group, tab, true)"
+ @reload="reloadTab"
+ @discard="discardTab"
+ @remove="removeTab"
+ @update-thumbnail="updateTabThumbnail"
+ @set-group-icon="setTabIconAsGroupIcon"
+ @move-tab="moveTabs"
+ @move-tab-new-group="moveTabToNewGroup"
+ >
$refs.editDefaultGroup.triggerChanges()"
- @close-popup="openEditDefaultGroup = false"
- >
+ @save-group="() => $refs.editDefaultGroup.triggerChanges()"
+ @close-popup="openEditDefaultGroup = false"
+ >
+ ref="editDefaultGroup"
+ :group-to-edit="defaultGroup"
+ :is-default-group="true"
+ :group-to-compare="defaultCleanGroup"
+ @changes="saveDefaultGroup">
$refs.editGroup.triggerChanges()"
- >
+ @close-popup="groupToEdit = null"
+ @save-group="() => $refs.editGroup.triggerChanges()"
+ >
saveEditedGroup(groupToEdit.id, changes)">
+ ref="editGroup"
+ :group-to-edit="groupToEdit.$data"
+ :group-to-compare="groupToEdit.$data"
+ @changes="changes => saveEditedGroup(groupToEdit.id, changes)">
+ promptResolveFunc(true, groups)"
+ @close-popup-parent="(groups) => promptResolveFunc(false, groups)"
+ @show-popup="$refs.promptInput.focus(); $refs.promptInput.select()"
+ :buttons="
+ [{
+ event: 'resolve',
+ classList: 'is-success',
+ lang: 'ok',
+ focused: false,
+ }, {
+ event: 'close-popup-parent',
+ lang: 'cancel',
+ }]
+ ">
+
- :root {
- --margin: 5px;
- --is-in-multiple-drop-text-color: #ffffff;
- --border-radius: 3px;
-
- --group-bg-color: #f5f5f5;
- --group-active-shadow-color: rgba(3, 102, 214, 0.3);
- --group-active-shadow: 0 0 0 3.5px var(--group-active-shadow-color);
- --group-active-border-color: #2188ff;
- --group-active-border: 1px solid var(--group-active-border-color);
-
- --tab-active-shadow: var(--group-active-shadow);
- --tab-active-border: var(--group-active-border);
- // --tab-hover-outline-color: #cfcfcf;
-
- --tab-inner-padding: 3px;
- --tab-inner-border-color: #c6ced4;
- --tab-border-width: 1px;
- --tab-buttons-radius: 75%;
- --tab-buttons-size: 25px;
- --active-tab-bg-color: #e4e4e4;
- --multiple-drag-tab-bg-color: #1e88e5;
- }
-
- html[data-theme="dark"] {
- --text-color: #e0e0e0;
-
- --group-bg-color: #444444;
- --group-active-shadow-color: rgba(255, 255, 255, 0.3);
- --group-active-border-color: #e0e0e0;
-
- --discarded-text-color: #979797;
+:root {
+ --margin: 5px;
+ --is-in-multiple-drop-text-color: #ffffff;
+ --border-radius: 3px;
+
+ --group-bg-color: #f5f5f5;
+ --group-active-shadow-color: rgba(3, 102, 214, 0.3);
+ --group-active-shadow: 0 0 0 3.5px var(--group-active-shadow-color);
+ --group-active-border-color: #2188ff;
+ --group-active-border: 1px solid var(--group-active-border-color);
+
+ --tab-active-shadow: var(--group-active-shadow);
+ --tab-active-border: var(--group-active-border);
+ // --tab-hover-outline-color: #cfcfcf;
+
+ --tab-inner-padding: 3px;
+ --tab-inner-border-color: #c6ced4;
+ --tab-border-width: 1px;
+ --tab-buttons-radius: 75%;
+ --tab-buttons-size: 25px;
+ --active-tab-bg-color: #e4e4e4;
+ --multiple-drag-tab-bg-color: #1e88e5;
+}
+
+html[data-theme="dark"] {
+ --text-color: #e0e0e0;
+
+ --group-bg-color: #444444;
+ --group-active-shadow-color: rgba(255, 255, 255, 0.3);
+ --group-active-border-color: #e0e0e0;
+
+ --discarded-text-color: #979797;
+}
+
+.fade-enter-active, .fade-leave-active {
+ transition: opacity .5s;
+}
+
+.fade-enter, .fade-leave-to /* .fade-leave-active до версии 2.1.8 */
+{
+ opacity: 0;
+}
+
+#stg-manage {
+ padding: var(--indent) var(--indent) calc(var(--indent) * 10);
+
+ > header {
+ > :not(:first-child) {
+ margin-left: 20px;
}
- .fade-enter-active, .fade-leave-active {
- transition: opacity .5s;
+ .page-title {
+ font-size: 18px;
}
- .fade-enter, .fade-leave-to /* .fade-leave-active до версии 2.1.8 */ {
- opacity: 0;
+ }
+
+ > main {
+ margin-top: var(--indent);
+ }
+}
+
+#search-wrapper {
+ width: 300px;
+}
+
+.loading {
+ height: 50px;
+ width: 50px;
+ position: absolute;
+ top: calc(100vh / 2 - 25px);
+ left: calc(100vw / 2 - 25px);
+ fill: #6e6e6e;
+}
+
+#multipleTabsText {
+ position: fixed;
+ text-align: center;
+ color: #000;
+ background-color: #fff;
+ border-radius: 10px;
+ left: -1000%;
+ max-width: 450px;
+ padding: 15px;
+ pointer-events: none;
+ box-shadow: 10px 5px rgba(0, 0, 0, 0.6);
+}
+
+#result {
+ .parent {
+ background-color: #777;
+ color: white;
+ cursor: pointer;
+ padding: 18px;
+ width: 100%;
+ border: none;
+ text-align: left;
+ outline: none;
+ font-size: 15px;
+ }
+
+ .active, .parent:hover {
+ background-color: #555;
+ }
+
+ .parent:after {
+ content: url("/icons/arrow-right.svg");
+ color: white;
+ font-weight: bold;
+ float: right;
+ margin-left: 5px;
+ height: 20px;
+ width: 20px;
+ }
+
+ .parent.active:after {
+ content: url("/icons/arrow-down.svg");
+ }
+
+ .content.expanded {
+ height: auto;
+ }
+
+ .content {
+ padding: 0;
+ height: 0;
+ overflow: hidden;
+ transition: min-height 0.2s ease-out, max-height 0.2s ease-out;
+ background-color: #2c2c2c;
+ // GRID VIEW
+
+ .grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fill, minmax(400px, 1fr));
+ /* grid-template-rows: minmax(auto, 600px) minmax(auto, 600px); */
+ grid-gap: 10px;
+ padding: var(--margin);
}
- #stg-manage {
- padding: var(--indent) var(--indent) calc(var(--indent) * 10);
-
- > header {
- > :not(:first-child) {
- margin-left: 20px;
- }
-
- .page-title {
- font-size: 18px;
- }
+ .group {
+ display: flex;
+ flex-direction: column;
+ border: 1px solid rgba(0, 0, 0, 0.15);
+ max-height: 600px;
+ background-color: var(--group-bg-color);
+ border-radius: var(--border-radius);
+
+ &.drag-over {
+ outline-offset: 3px;
+ }
+
+ > .header {
+ display: flex;
+ align-items: center;
+ padding: var(--margin);
+
+ > * {
+ display: flex;
}
- > main {
- margin-top: var(--indent);
+ > .group-title {
+ flex-grow: 1;
}
- }
-
- #search-wrapper {
- width: 300px;
- }
-
- .loading {
- height: 50px;
- width: 50px;
- position: absolute;
- top: calc(100vh / 2 - 25px);
- left: calc(100vw / 2 - 25px);
- fill: #6e6e6e;
- }
- #multipleTabsText {
- position: fixed;
- text-align: center;
- color: #000;
- background-color: #fff;
- border-radius: 10px;
- left: -1000%;
- max-width: 450px;
- padding: 15px;
- pointer-events: none;
- box-shadow: 10px 5px rgba(0, 0, 0, 0.6);
- }
-
- #result {
- // GRID VIEW
- .grid {
- display: grid;
- grid-template-columns: repeat(auto-fill, minmax(400px, 1fr));
- /* grid-template-rows: minmax(auto, 600px) minmax(auto, 600px); */
- grid-gap: 10px;
+ > .delete-group-button {
+ line-height: 0;
}
- .group {
- display: flex;
- flex-direction: column;
- border: 1px solid rgba(0, 0, 0, 0.15);
- max-height: 600px;
- background-color: var(--group-bg-color);
- border-radius: var(--border-radius);
-
- &.drag-over {
- outline-offset: 3px;
- }
-
- > .header {
- display: flex;
- align-items: center;
- padding: var(--margin);
-
- > * {
- display: flex;
- }
-
- > .group-title {
- flex-grow: 1;
- }
-
- > .delete-group-button {
- line-height: 0;
- }
-
- > :not(:first-child) {
- padding-left: var(--margin);
- }
-
- > .group-icon {
- position: relative;
- }
-
- > .group-icon > *,
- > .other-icon > * {
- pointer-events: none;
- }
- }
-
- > .body {
- user-select: none;
-
- overflow-y: auto;
- padding: var(--margin);
- min-height: 110px;
- /* flex-grow: 1; */
-
- scrollbar-width: thin;
-
- &:not(.in-list-view) {
- display: grid;
- grid-gap: var(--margin);
- /* grid-gap: 10px; */
- grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
- grid-auto-rows: 100px;
- }
-
- &.in-list-view {
- display: flex;
- flex-direction: column;
- margin-bottom: 30px;
- }
- }
-
- .tab {
- position: relative;
- }
+ > :not(:first-child) {
+ padding-left: var(--margin);
+ }
- &:not(.is-archive) .tab {
- cursor: pointer;
- }
+ > .group-icon {
+ position: relative;
+ }
- > .body:not(.in-list-view) > .tab {
- padding: var(--tab-inner-padding);
- border-radius: var(--border-radius);
+ > .group-icon > *,
+ > .other-icon > * {
+ pointer-events: none;
+ }
+ }
- > * {
- border: 0 solid var(--identity-tab-color, var(--tab-inner-border-color));
- background-color: var(--group-bg-color);
- }
+ > .body {
+ user-select: none;
- > .tab-icon,
- > .delete-tab-button,
- > .cookie-container,
- > .refresh-icon,
- > .tab-title {
- position: absolute;
- }
+ overflow-y: auto;
+ padding: var(--margin);
+ min-height: 110px;
+ /* flex-grow: 1; */
- &:not(.has-thumbnail) > .tab-icon {
- display: flex;
- width: 16px;
- height: 16px;
- top: calc((calc(100% - 1em - var(--tab-inner-padding)) / 2) - 8px);
- left: calc((100% / 2) - 8px);
- }
+ scrollbar-width: thin;
- &.has-thumbnail > .tab-icon {
- display: flex;
- align-items: start;
- justify-content: left;
- top: var(--tab-inner-padding);
- left: var(--tab-inner-padding);
- width: var(--tab-buttons-size);
- height: var(--tab-buttons-size);
- border-bottom-width: var(--tab-border-width);
- border-right-width: var(--tab-border-width);
- border-bottom-right-radius: var(--tab-buttons-radius);
- }
+ &:not(.in-list-view) {
+ display: grid;
+ grid-gap: var(--margin);
+ /* grid-gap: 10px; */
+ grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
+ grid-auto-rows: 100px;
+ }
- > .delete-tab-button {
- display: flex;
- visibility: hidden;
- align-items: start;
- justify-content: right;
- top: var(--tab-inner-padding);
- right: var(--tab-inner-padding);
- height: var(--tab-buttons-size);
- width: var(--tab-buttons-size);
- line-height: 0;
- border-bottom-width: var(--tab-border-width);
- border-left-width: var(--tab-border-width);
- border-bottom-left-radius: var(--tab-buttons-radius);
- }
+ &.in-list-view {
+ display: flex;
+ flex-direction: column;
+ margin-bottom: 30px;
+ }
+ }
- &:hover > .delete-tab-button {
- visibility: visible;
- }
+ .tab {
+ position: relative;
+ }
- > .cookie-container {
- display: flex;
- align-items: end;
- justify-content: left;
- left: var(--tab-inner-padding);
- bottom: calc(1em + var(--tab-inner-padding) * 2);
- width: var(--tab-buttons-size);
- height: var(--tab-buttons-size);
- border-right-width: var(--tab-border-width);
- border-top-width: var(--tab-border-width);
- border-top-right-radius: var(--tab-buttons-radius);
- padding-bottom: 1px;
- }
+ &:not(.is-archive) .tab {
+ cursor: pointer;
+ }
- > .refresh-icon {
- display: flex;
- align-items: end;
- justify-content: right;
- bottom: calc(1em + var(--tab-inner-padding) * 2);
- right: var(--tab-inner-padding);
- width: var(--tab-buttons-size);
- height: var(--tab-buttons-size);
- border-left-width: var(--tab-border-width);
- border-top-width: var(--tab-border-width);
- border-top-left-radius: var(--tab-buttons-radius);
- }
+ > .body:not(.in-list-view) > .tab {
+ padding: var(--tab-inner-padding);
+ border-radius: var(--border-radius);
- > .tab-title {
- line-height: 1.3em;
- position: absolute;
- text-align: center;
- left: var(--tab-inner-padding);
- right: var(--tab-inner-padding);
- bottom: var(--tab-inner-padding);
- white-space: nowrap;
- }
+ > * {
+ border: 0 solid var(--identity-tab-color, var(--tab-inner-border-color));
+ background-color: var(--group-bg-color);
+ }
- > .screenshot {
- height: calc(100% - 1em - var(--tab-inner-padding) - 1px);
- overflow: hidden;
- border-width: var(--tab-border-width);
- border-radius: var(--border-radius);
+ > .tab-icon,
+ > .delete-tab-button,
+ > .cookie-container,
+ > .refresh-icon,
+ > .tab-title {
+ position: absolute;
+ }
- > img {
- width: 100%;
- height: 100%;
+ &:not(.has-thumbnail) > .tab-icon {
+ display: flex;
+ width: 16px;
+ height: 16px;
+ top: calc((calc(100% - 1em - var(--tab-inner-padding)) / 2) - 8px);
+ left: calc((100% / 2) - 8px);
+ }
- &[src=""] {
- display: none;
- }
- }
- }
+ &.has-thumbnail > .tab-icon {
+ display: flex;
+ align-items: start;
+ justify-content: left;
+ top: var(--tab-inner-padding);
+ left: var(--tab-inner-padding);
+ width: var(--tab-buttons-size);
+ height: var(--tab-buttons-size);
+ border-bottom-width: var(--tab-border-width);
+ border-right-width: var(--tab-border-width);
+ border-bottom-right-radius: var(--tab-buttons-radius);
+ }
- &.new > .screenshot {
- display: flex;
- justify-content: center;
- align-items: center;
- border-style: dashed;
- border-width: var(--tab-border-width);
+ > .delete-tab-button {
+ display: flex;
+ visibility: hidden;
+ align-items: start;
+ justify-content: right;
+ top: var(--tab-inner-padding);
+ right: var(--tab-inner-padding);
+ height: var(--tab-buttons-size);
+ width: var(--tab-buttons-size);
+ line-height: 0;
+ border-bottom-width: var(--tab-border-width);
+ border-left-width: var(--tab-border-width);
+ border-bottom-left-radius: var(--tab-buttons-radius);
+ }
- > img {
- width: 16px;
- opacity: 0.7;
- }
- }
+ &:hover > .delete-tab-button {
+ visibility: visible;
+ }
- // &:hover,
- // &:hover > * {
- // background-color: var(--active-tab-bg-color);
- // }
+ > .cookie-container {
+ display: flex;
+ align-items: end;
+ justify-content: left;
+ left: var(--tab-inner-padding);
+ bottom: calc(1em + var(--tab-inner-padding) * 2);
+ width: var(--tab-buttons-size);
+ height: var(--tab-buttons-size);
+ border-right-width: var(--tab-border-width);
+ border-top-width: var(--tab-border-width);
+ border-top-right-radius: var(--tab-buttons-radius);
+ padding-bottom: 1px;
+ }
- &.is-active-element {
- box-shadow: var(--tab-active-shadow);
- outline: var(--tab-active-border);
- outline-offset: -1px;
- -moz-outline-radius: var(--border-radius);
- }
+ > .refresh-icon {
+ display: flex;
+ align-items: end;
+ justify-content: right;
+ bottom: calc(1em + var(--tab-inner-padding) * 2);
+ right: var(--tab-inner-padding);
+ width: var(--tab-buttons-size);
+ height: var(--tab-buttons-size);
+ border-left-width: var(--tab-border-width);
+ border-top-width: var(--tab-border-width);
+ border-top-left-radius: var(--tab-buttons-radius);
+ }
- // &:not(.is-active-element):not(.drag-moving):hover {
- // outline: 1px solid var(--tab-hover-outline-color);
- // outline-offset: 1px;
- // }
+ > .tab-title {
+ line-height: 1.3em;
+ position: absolute;
+ text-align: center;
+ left: var(--tab-inner-padding);
+ right: var(--tab-inner-padding);
+ bottom: var(--tab-inner-padding);
+ white-space: nowrap;
+ }
- &.is-in-multiple-drop,
- &.is-in-multiple-drop > * {
- --fill-color: var(--is-in-multiple-drop-text-color);
- background-color: var(--multiple-drag-tab-bg-color);
- }
+ > .screenshot {
+ height: calc(100% - 1em - var(--tab-inner-padding) - 1px);
+ overflow: hidden;
+ border-width: var(--tab-border-width);
+ border-radius: var(--border-radius);
- &.drag-over {
- &.drag-moving,
- &.is-in-multiple-drop {
- outline-offset: 4px;
- }
- }
+ > img {
+ width: 100%;
+ height: 100%;
- &.is-in-multiple-drop > .tab-title {
- color: var(--is-in-multiple-drop-text-color);
- }
+ &[src=""] {
+ display: none;
}
+ }
+ }
- > .body.in-list-view > .tab {
- display: flex;
- align-items: center;
- justify-content: left;
- height: 27px;
- padding: var(--tab-inner-padding);
-
- &.new {
- justify-content: center;
- border: var(--tab-border-width) dashed var(--tab-inner-border-color);
+ &.new > .screenshot {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ border-style: dashed;
+ border-width: var(--tab-border-width);
+
+ > img {
+ width: 16px;
+ opacity: 0.7;
+ }
+ }
- > .tab-title {
- flex-grow: 0;
- }
- }
+ // &:hover,
+ // &:hover > * {
+ // background-color: var(--active-tab-bg-color);
+ // }
- &:hover {
- background-color: rgba(126, 126, 126, 0.3);
- }
+ &.is-active-element {
+ box-shadow: var(--tab-active-shadow);
+ outline: var(--tab-active-border);
+ outline-offset: -1px;
+ -moz-outline-radius: var(--border-radius);
+ }
- > .tab-icon {
- display: flex;
- }
+ // &:not(.is-active-element):not(.drag-moving):hover {
+ // outline: 1px solid var(--tab-hover-outline-color);
+ // outline-offset: 1px;
+ // }
- > .delete-tab-button {
- display: none;
- justify-content: right;
- }
+ &.is-in-multiple-drop,
+ &.is-in-multiple-drop > * {
+ --fill-color: var(--is-in-multiple-drop-text-color);
+ background-color: var(--multiple-drag-tab-bg-color);
+ }
- &:hover > .delete-tab-button {
- display: flex;
- }
+ &.drag-over {
+ &.drag-moving,
+ &.is-in-multiple-drop {
+ outline-offset: 4px;
+ }
+ }
- > .cookie-container {
- padding-left: var(--margin);
- display: flex;
- align-items: center;
- }
+ &.is-in-multiple-drop > .tab-title {
+ color: var(--is-in-multiple-drop-text-color);
+ }
+ }
+
+ > .body.in-list-view > .tab {
+ display: flex;
+ align-items: center;
+ justify-content: left;
+ height: 27px;
+ padding: var(--tab-inner-padding);
+
+ &.new {
+ justify-content: center;
+ border: var(--tab-border-width) dashed var(--tab-inner-border-color);
+
+ > .tab-title {
+ flex-grow: 0;
+ }
+ }
- > .refresh-icon {
- display: flex;
- padding-left: var(--margin);
- }
+ &:hover {
+ background-color: rgba(126, 126, 126, 0.3);
+ }
- > .tab-title {
- flex-grow: 1;
- padding: 0 var(--margin);
- white-space: nowrap;
- }
+ > .tab-icon {
+ display: flex;
+ }
- &.is-active-element {
- outline: 1px solid var(--identity-tab-color, var(--group-active-border-color));
- outline-offset: -1px;
- -moz-outline-radius: var(--border-radius);
- }
+ > .delete-tab-button {
+ display: none;
+ justify-content: right;
+ }
- &.is-in-multiple-drop,
- &.is-in-multiple-drop > * {
- --fill-color: var(--is-in-multiple-drop-text-color);
- background-color: var(--multiple-drag-tab-bg-color);
- }
+ &:hover > .delete-tab-button {
+ display: flex;
+ }
- &.is-in-multiple-drop > .tab-title {
- color: var(--is-in-multiple-drop-text-color);
- }
- }
+ > .cookie-container {
+ padding-left: var(--margin);
+ display: flex;
+ align-items: center;
+ }
- &.is-opened {
- box-shadow: var(--group-active-shadow);
- border: var(--group-active-border);
- }
+ > .refresh-icon {
+ display: flex;
+ padding-left: var(--margin);
+ }
- &.new {
- display: flex;
- align-content: center;
- justify-content: center;
- min-height: 250px;
- border: 2px dashed var(--tab-inner-border-color);
- background-color: transparent;
-
- > .body {
- display: block;
- text-align: center;
-
- > img {
- width: 100px;
- opacity: 0.7;
- }
- }
- }
+ > .tab-title {
+ flex-grow: 1;
+ padding: 0 var(--margin);
+ white-space: nowrap;
}
- .group,
- .group .tab {
- transition: opacity 0.3s;
+ &.is-active-element {
+ outline: 1px solid var(--identity-tab-color, var(--group-active-border-color));
+ outline-offset: -1px;
+ -moz-outline-radius: var(--border-radius);
}
- .drag-tab .tab > *,
- .drag-tab .group > *,
- .drag-group .group > * {
- pointer-events: none;
+ &.is-in-multiple-drop,
+ &.is-in-multiple-drop > * {
+ --fill-color: var(--is-in-multiple-drop-text-color);
+ background-color: var(--multiple-drag-tab-bg-color);
}
- .drag-tab .group > .body > *:not(.new) {
- pointer-events: all;
+ &.is-in-multiple-drop > .tab-title {
+ color: var(--is-in-multiple-drop-text-color);
+ }
+ }
+
+ &.is-opened {
+ box-shadow: var(--group-active-shadow);
+ border: var(--group-active-border);
+ }
+
+ &.new {
+ display: flex;
+ align-content: center;
+ justify-content: center;
+ min-height: 250px;
+ border: 2px dashed var(--tab-inner-border-color);
+ background-color: transparent;
+
+ > .body {
+ display: block;
+ text-align: center;
+
+ > img {
+ width: 100px;
+ opacity: 0.7;
+ }
}
+ }
+ }
+
+ .group,
+ .group .tab {
+ transition: opacity 0.3s;
+ }
- /* Drag & Drop Styles */
+ .drag-tab .tab > *,
+ .drag-tab .group > *,
+ .drag-group .group > * {
+ pointer-events: none;
+ }
- .drag-moving,
- .drag-tab .tab.is-in-multiple-drop {
- opacity: 0.4;
- }
+ .drag-tab .group > .body > *:not(.new) {
+ pointer-events: all;
+ }
+
+ /* Drag & Drop Styles */
+
+ .drag-moving,
+ .drag-tab .tab.is-in-multiple-drop {
+ opacity: 0.4;
}
+ }
+
+
+}
diff --git a/addon/src/popup/Popup.vue b/addon/src/popup/Popup.vue
index a3e22a15..813f9f35 100644
--- a/addon/src/popup/Popup.vue
+++ b/addon/src/popup/Popup.vue
@@ -1,1323 +1,1489 @@
-
-
+
-
+ :title="getTabTitle(tab, true)"
+ @contextmenu.stop.prevent="!group.isArchive && $refs.contextMenuTab.open($event, {tab, group})"
+
+ @click.stop="!group.isArchive && clickOnTab($event, tab, group)"
+
+ :draggable="String(!group.isArchive)"
+ @dragstart="dragHandle($event, 'tab', ['tab', 'group'], {item: tab, group})"
+ @dragenter="dragHandle($event, 'tab', ['tab', 'group'], {item: tab, group})"
+ @dragover="dragHandle($event, 'tab', ['tab', 'group'], {item: tab, group})"
+ @dragleave="dragHandle($event, 'tab', ['tab', 'group'], {item: tab, group})"
+ @drop="dragHandle($event, 'tab', ['tab', 'group'], {item: tab, group})"
+ @dragend="dragHandle($event, 'tab', ['tab', 'group'], {item: tab, group})"
+ >
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
-
-
+
-
-
+
+
+
-
-
-
+
+
+
-
+
+
-
-
-
+
+
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+ -
-
+
-
+
+
+
+
+ id="stg-popup"
+ :class="['no-outline', {'edit-group-popup': !!groupToEdit || openEditDefaultGroup, 'is-sidebar': isSidebar}]"
+ @contextmenu="mainContextMenu"
+ @click="multipleTabIds = []"
+ @wheel.ctrl.prevent
+
+ tabindex="-1"
+ @focus.capture="scrollToActiveElement"
+ @keydown.f3.stop.prevent="setFocusOnSearch"
+ @keydown.f2.stop.prevent="tryRenameGroup"
+ @keydown.right="setFocusOnActive"
+ @keydown.left="searchDelay.length ? null : showSectionDefault()"
+
+ >
@@ -1326,201 +1492,369 @@
+ type="text"
+ class="input search-input fill-context"
+ ref="search"
+ v-model.trim="searchDelay"
+ autocomplete="off"
+ @keydown.enter="selectFirstItemOnSearch"
+ @keydown.down="focusToNextElement"
+ @keydown.up="focusToNextElement"
+ @input="searchDelay.length ? null : showSectionDefault()"
+ :placeholder="lang('searchOrGoToActive')"/>
-
+
-
-
-
Parent Groups
+
+
+
+
+ {{parent.title}}
+
+
+
+ {{filteredGroups.filter(it => it.parentId === parent.id).length}}
+
+
+
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
-
-
+ :title="getTabTitle(tab, true)"
+ >
+
-
+
+
+
+
+
-
+ :title="tab.audible ? lang('muteTab') : lang('unMuteTab')">
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
+
+
+
+
-
-
-
-
-
-
Parent Groups
+
+
+
-
+
+
+
+ {{parent.title}}
+
+
+
+ {{groups.filter(it => it.parentId === parent.id).length}}
+
+
+
+
+
-
+
-
+
+ v-if="showMuteIconGroup(group)"
+ class="image is-16x16"
+ @click.stop="toggleMuteGroup(group)"
+ :title="group.tabs.some(tab => tab.audible) ? lang('muteGroup') : lang('unMuteGroup')"
+ >
+ :src="group.tabs.some(tab => tab.audible) ? '/icons/audio.svg' : '/icons/audio-mute.svg'"
+ class="align-text-bottom"/>
-
-
-
+
+
+
-
+
-
-
-
+
+
+
-
-
+
+
+
+
-
+
+
+
+
+
+
+
+ +
+
+
+
+ Tab Groups
+
+
+
+ {{groups.filter(it => !it.parentId).length}}
+
+
+
+
+
+
+ draggable="true"
+ @dragstart="dragHandle($event, 'group', ['group'], {item: group})"
+ @dragenter="dragHandle($event, 'group', ['group'], {item: group})"
+ @dragover="dragHandle($event, 'group', ['group'], {item: group})"
+ @dragleave="dragHandle($event, 'group', ['group'], {item: group})"
+ @drop="dragHandle($event, 'group', ['group'], {item: group})"
+ @dragend="dragHandle($event, 'group', ['group'], {item: group})"
+
+ @contextmenu="$refs.contextMenuGroup.open($event, {group})"
+ @click="!group.isArchive && applyGroup(group)"
+ @keydown.enter="!group.isArchive && applyGroup(group, undefined, true)"
+ @keydown.right.stop="showSectionGroupTabs(group);"
+ @keydown.up="focusToNextElement"
+ @keydown.down="focusToNextElement"
+ @keydown.f2.stop="renameGroup(group)"
+ tabindex="0"
+ :title="getGroupTitle(group, 'withCountTabs withTabs withContainer')"
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ @click="addParent"
+ @keydown.enter="addParent">
-
+
-
+
-
+
@@ -1532,48 +1866,60 @@
-
+
+ :title="getTabTitle(tab, true)"
+ tabindex="0"
+ >
@@ -1584,9 +1930,10 @@
-
-
+
+
-
+ :title="tab.audible ? lang('muteTab') : lang('unMuteTab')">
+
-
+
-
-
+
+
-
+
-
+
-
-
+
+
-
+
@@ -1595,38 +1942,46 @@
-
+
-
-
+
+
-
-
+
+
+ v-for="(tab, tabIndex) in groupToShow.tabs"
+ :key="tabIndex"
+ class="tab item is-unselectable"
+ :title="getTabTitle(tab, true)"
+ @mousedown.middle.prevent
+ >
@@ -1635,20 +1990,20 @@
-
+
-
+
+ draggable="true"
+ @dragstart="dragHandle($event, 'tab', ['tab'], {item: tab, group: groupToShow})"
+ @dragenter="dragHandle($event, 'tab', ['tab'], {item: tab, group: groupToShow})"
+ @dragover="dragHandle($event, 'tab', ['tab'], {item: tab, group: groupToShow})"
+ @dragleave="dragHandle($event, 'tab', ['tab'], {item: tab, group: groupToShow})"
+ @drop="dragHandle($event, 'tab', ['tab'], {item: tab, group: groupToShow})"
+ @dragend="dragHandle($event, 'tab', ['tab'], {item: tab, group: groupToShow})"
+ >
@@ -1692,7 +2051,9 @@
-
-
+
+
-
+ v-if="showMuteIconTab(tab)"
+ @click.stop="toggleMuteTab(tab)"
+ :title="tab.audible ? lang('muteTab') : lang('unMuteTab')"
+ >
+
-
+
-
-
+
+
-
+
@@ -1704,27 +2065,29 @@