From d1ad4f83b4acfa26c209dc88a6f987737612a05b Mon Sep 17 00:00:00 2001 From: Alon Swartz Date: Sun, 13 Jul 2025 12:50:16 +0300 Subject: [PATCH 1/2] web/app: tabs - apply and reflect tab reordering during drag --- web/app/nav-tabs.js | 45 +++++++++++++++++++++------------------------ 1 file changed, 21 insertions(+), 24 deletions(-) diff --git a/web/app/nav-tabs.js b/web/app/nav-tabs.js index 32ea2bc..cc9f1e8 100644 --- a/web/app/nav-tabs.js +++ b/web/app/nav-tabs.js @@ -4,12 +4,13 @@ var t = `
-
@@ -24,17 +25,7 @@ var t = `
- - - | + |
` @@ -46,19 +37,25 @@ export default { emits: ['tab-activate', 'tab-move', 'tab-close', 'note-close'], data() { return { - dragTab: null, - dragOver: null, + dragIndex: null, } }, methods: { - dragStart(index, event) { + onDragStart(index) { this.$emit('tab-activate', this.tabs[index].id) - this.dragTab = index; - event.dataTransfer.dropEffect = 'move'; + this.dragIndex = index; }, - dragDrop(index) { - index = (index > this.dragTab) ? index : index + 1; - this.$emit('tab-move', this.tabs[this.dragTab].id, index); + onDragOver(overIndex) { + if (this.dragIndex === null || this.dragIndex === overIndex) return; + + this.$emit('tab-move', this.tabs[this.dragIndex].id, overIndex); + this.dragIndex = overIndex; + }, + onDrop() { + this.dragIndex = null; + }, + onDragEnd() { + this.dragIndex = null; }, isActive(tabId) { return this.activeTabId == tabId; From 65f05bf9cb2dc2ad88cd1963d02ccd2697ebb07c Mon Sep 17 00:00:00 2001 From: Alon Swartz Date: Sun, 13 Jul 2025 13:23:04 +0300 Subject: [PATCH 2/2] web/app: tabs - animate tab reordering for visual clarity --- web/app/nav-tabs.js | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/web/app/nav-tabs.js b/web/app/nav-tabs.js index cc9f1e8..2dfa0fc 100644 --- a/web/app/nav-tabs.js +++ b/web/app/nav-tabs.js @@ -1,6 +1,10 @@ var t = ` -
- -
+ | + + ` import Icon from './icon.js' @@ -38,6 +42,7 @@ export default { data() { return { dragIndex: null, + dragOverEnabled: true, } }, methods: { @@ -46,10 +51,14 @@ export default { this.dragIndex = index; }, onDragOver(overIndex) { + if (!this.dragOverEnabled) return; if (this.dragIndex === null || this.dragIndex === overIndex) return; this.$emit('tab-move', this.tabs[this.dragIndex].id, overIndex); this.dragIndex = overIndex; + + this.dragOverEnabled = false; + setTimeout(() => { this.dragOverEnabled = true; }, 300); }, onDrop() { this.dragIndex = null;