diff --git a/client/components/ExternalLibs/BookmarkSettings/BookmarkSettings.vue b/client/components/ExternalLibs/BookmarkSettings/BookmarkSettings.vue
index a1ff69cd..0094cd83 100644
--- a/client/components/ExternalLibs/BookmarkSettings/BookmarkSettings.vue
+++ b/client/components/ExternalLibs/BookmarkSettings/BookmarkSettings.vue
@@ -9,7 +9,7 @@
Открыть выбранную закладку
-
+
@@ -194,7 +194,58 @@ class BookmarkSettings extends BookmarkSettingsProps {
}
}
- moveBookmark() {
+ moveBookmark(down = false) {
+ const newLibs = _.cloneDeep(this.libs);
+
+ const ticked = new Set(this.ticked);
+ let moved = false;
+ let prevFull = false;
+ if (!down) {
+ for (let i = 0; i < newLibs.groups.length; i++) {
+ const g = newLibs.groups[i];
+ let count = 0;
+ for (let j = 0; j < g.list.length; j++) {
+ if (ticked.has(g.list[j].l)) {
+ if (j > 0 && !ticked.has(g.list[j - 1].l)) {
+ [g.list[j], g.list[j - 1]] = [g.list[j - 1], g.list[j]];
+ moved = true;
+ }
+ count++;
+ }
+ }
+
+ if (count == g.list.length && !prevFull && i > 0) {
+ const gs = newLibs.groups;
+ [gs[i], gs[i - 1]] = [gs[i - 1], gs[i]];
+ moved = true;
+ } else
+ prevFull = (count == g.list.length);
+ }
+ } else {
+ for (let i = newLibs.groups.length - 1; i >= 0; i--) {
+ const g = newLibs.groups[i];
+ let count = 0;
+ for (let j = g.list.length - 1; j >= 0; j--) {
+ if (ticked.has(g.list[j].l)) {
+ if (j < g.list.length - 1 && !ticked.has(g.list[j + 1].l)) {
+ [g.list[j], g.list[j + 1]] = [g.list[j + 1], g.list[j]];
+ moved = true;
+ }
+ count++;
+ }
+ }
+
+ if (count == g.list.length && !prevFull && i < newLibs.groups.length - 1) {
+ const gs = newLibs.groups;
+ [gs[i], gs[i + 1]] = [gs[i + 1], gs[i]];
+ moved = true;
+ } else
+ prevFull = (count == g.list.length);
+ }
+ }
+
+ if (moved)
+ this.$emit('do-action', {action: 'setLibs', data: newLibs});
}
async setDefaultBookmarks() {