From 867e8d5678b3f4e469e0b780505c0f20a210a103 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 11 Feb 2013 20:03:28 -0800 Subject: [PATCH] Add spec for dragging/dropping tab in the same editor --- src/packages/tabs/lib/tab-view.coffee | 41 ++++++++++++++----------- src/packages/tabs/spec/tabs-spec.coffee | 23 ++++++++++++++ 2 files changed, 46 insertions(+), 18 deletions(-) diff --git a/src/packages/tabs/lib/tab-view.coffee b/src/packages/tabs/lib/tab-view.coffee index 5e7aefbbb..b86fa61fb 100644 --- a/src/packages/tabs/lib/tab-view.coffee +++ b/src/packages/tabs/lib/tab-view.coffee @@ -79,29 +79,34 @@ class TabView extends SortableList fromEditor = fromPane.find('.editor').view() if fromPaneIndex == toPaneIndex - toPane = fromPane - toEditor = fromEditor + droppedNearTab = @getSortableElement(event) + draggedTab = fromPane.find(".#{TabView.viewClass()} .sortable:eq(#{previousDraggedTabIndex})") + unless draggedTab.is(droppedNearTab) + fromIndex = draggedTab.index() + toIndex = droppedNearTab.index() + toIndex++ if fromIndex > toIndex + fromEditor.moveEditSessionAtIndex(fromIndex, toIndex) else toPane = $(rootView.find('.pane')[toPaneIndex]) toEditor = toPane.find('.editor').view() - droppedNearTab = @getSortableElement(event) - draggedTab = fromPane.find(".#{TabView.viewClass()} .sortable:eq(#{previousDraggedTabIndex})") + droppedNearTab = @getSortableElement(event) + draggedTab = fromPane.find(".#{TabView.viewClass()} .sortable:eq(#{previousDraggedTabIndex})") - return if draggedTab.is(droppedNearTab) - if fromPaneIndex != toPaneIndex - return if @containsEditSession(toEditor, fromEditor.editSessions[draggedTab.index()]) + return if draggedTab.is(droppedNearTab) + if fromPaneIndex != toPaneIndex + return if @containsEditSession(toEditor, fromEditor.editSessions[draggedTab.index()]) - draggedTab.remove() - draggedTab.insertAfter(droppedNearTab) - currentDraggedTabIndex = draggedTab.index() - fromEditor.transferEditSessionAtIndex(previousDraggedTabIndex, currentDraggedTabIndex, toEditor) + draggedTab.remove() + draggedTab.insertAfter(droppedNearTab) + currentDraggedTabIndex = draggedTab.index() + fromEditor.transferEditSessionAtIndex(previousDraggedTabIndex, currentDraggedTabIndex, toEditor) - if !fromPane.find('.tab').length - fromPane.view().remove() - else if fromPaneIndex != toPaneIndex && draggedTab.hasClass('active') - fromEditor.setActiveEditSessionIndex(0) + if !fromPane.find('.tab').length + fromPane.view().remove() + else if fromPaneIndex != toPaneIndex && draggedTab.hasClass('active') + fromEditor.setActiveEditSessionIndex(0) - @setActiveTab(currentDraggedTabIndex) - toEditor.setActiveEditSessionIndex(currentDraggedTabIndex) - toEditor.focus() + @setActiveTab(currentDraggedTabIndex) + toEditor.setActiveEditSessionIndex(currentDraggedTabIndex) + toEditor.focus() diff --git a/src/packages/tabs/spec/tabs-spec.coffee b/src/packages/tabs/spec/tabs-spec.coffee index 1eae8f321..2fbb3cef7 100644 --- a/src/packages/tabs/spec/tabs-spec.coffee +++ b/src/packages/tabs/spec/tabs-spec.coffee @@ -157,3 +157,26 @@ describe "TabView", -> editor.moveEditSessionAtIndex(1, 0) expect(tabs.find('.tab:eq(0) .file-name').text()).toBe "sample.js" expect(tabs.find('.tab:eq(1) .file-name').text()).toBe "sample.txt" + + describe "dragging and dropping tabs", -> + describe "when a tab is dragged from and dropped onto the same editor", -> + it "moves the edit session and updates the order of the tabs", -> + expect(tabs.find('.tab:eq(0) .file-name').text()).toBe "sample.js" + expect(tabs.find('.tab:eq(1) .file-name').text()).toBe "sample.txt" + + sortableElement = [tabs.find('.tab:eq(0)')] + spyOn(tabs, 'getSortableElement').andCallFake -> sortableElement[0] + event = $.Event() + event.target = tabs[0] + event.originalEvent = + dataTransfer: + data: {} + setData: (key, value) -> @data[key] = value + getData: (key) -> @data[key] + + tabs.onDragStart(event) + sortableElement = [tabs.find('.tab:eq(1)')] + tabs.onDrop(event) + + expect(tabs.find('.tab:eq(0) .file-name').text()).toBe "sample.txt" + expect(tabs.find('.tab:eq(1) .file-name').text()).toBe "sample.js"