Add spec for dragging/dropping tab in the same editor

This commit is contained in:
Kevin Sawicki
2013-02-11 20:03:28 -08:00
parent 8b61c0d8f7
commit 867e8d5678
2 changed files with 46 additions and 18 deletions

View File

@@ -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()

View File

@@ -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"