From 14742ed4ad98e7e524c2e3a15f0cda7b9a9266b2 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Wed, 4 Nov 2020 22:56:28 +0700 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20=D0=BD?= =?UTF-8?q?=D0=B0=D0=B4=20BookmarkSettings?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BookmarkSettings/BookmarkSettings.vue | 55 ++++++++++++++++++- 1 file changed, 53 insertions(+), 2 deletions(-) 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() {