Merge pull request #255 from github/rearrange-tabs

Drag and drop tabs
This commit is contained in:
Kevin Sawicki
2013-02-12 08:38:52 -08:00
15 changed files with 375 additions and 59 deletions

View File

@@ -549,6 +549,20 @@ class Editor extends View
"Cancel"
)
moveEditSessionToIndex: (fromIndex, toIndex) ->
return if fromIndex is toIndex
editSession = @editSessions.splice(fromIndex, 1)
@editSessions.splice(toIndex, 0, editSession[0])
@trigger 'editor:edit-session-order-changed', [editSession, fromIndex, toIndex]
@setActiveEditSessionIndex(toIndex)
moveEditSessionToEditor: (fromIndex, toEditor, toIndex) ->
fromEditSession = @editSessions[fromIndex]
toEditSession = fromEditSession.copy()
@destroyEditSessionIndex(fromIndex)
toEditor.edit(toEditSession)
toEditor.moveEditSessionToIndex(toEditor.getActiveEditSessionIndex(), toIndex)
activateEditSessionForPath: (path) ->
for editSession, index in @editSessions
if editSession.buffer.getPath() == path

View File

@@ -73,6 +73,7 @@ class Keymap
return true unless bindingSetsForFirstKeystroke?
currentNode = $(event.target)
currentNode = rootView if currentNode is $('body')[0]
while currentNode.length
candidateBindingSets = @bindingSetsForNode(currentNode, bindingSetsForFirstKeystroke)
for bindingSet in candidateBindingSets
@@ -99,6 +100,7 @@ class Keymap
b.specificity - a.specificity
triggerCommandEvent: (keyEvent, commandName) ->
keyEvent.target = rootView[0] if keyEvent.target == document.body and window.rootView
commandEvent = $.Event(commandName)
commandEvent.keyEvent = keyEvent
aborted = false

View File

@@ -18,7 +18,7 @@ class RootView extends View
disabledPackages: []
@content: ->
@div id: 'root-view', tabindex: 0, =>
@div id: 'root-view', =>
@div id: 'horizontal', outlet: 'horizontal', =>
@div id: 'vertical', outlet: 'vertical', =>
@div id: 'panes', outlet: 'panes'
@@ -261,3 +261,11 @@ class RootView extends View
eachBuffer: (callback) ->
@project.eachBuffer(callback)
indexOfPane: (pane) ->
index = -1
for p, idx in @panes.find('.pane')
if pane.is(p)
index = idx
break
index

View File

@@ -0,0 +1,53 @@
{View} = require 'space-pen'
$ = require 'jquery'
module.exports =
class SortableList extends View
@viewClass: -> 'sortable-list'
initialize: ->
@on 'dragstart', '.sortable', @onDragStart
@on 'dragend', '.sortable', @onDragEnd
@on 'dragover', '.sortable', @onDragOver
@on 'dragenter', '.sortable', @onDragEnter
@on 'dragleave', '.sortable', @onDragLeave
@on 'drop', '.sortable', @onDrop
onDragStart: (event) =>
return false if !@shouldAllowDrag(event)
el = @getSortableElement(event)
el.addClass 'is-dragging'
event.originalEvent.dataTransfer.setData 'sortable-index', el.index()
onDragEnd: (event) =>
@getSortableElement(event).removeClass 'is-dragging'
onDragEnter: (event) =>
event.preventDefault()
onDragOver: (event) =>
event.preventDefault()
@getSortableElement(event).addClass 'is-drop-target'
onDragLeave: (event) =>
@getSortableElement(event).removeClass 'is-drop-target'
onDrop: (event) =>
return false if !@shouldAllowDrop(event)
event.stopPropagation()
@find('.is-drop-target').removeClass 'is-drop-target'
shouldAllowDrag: (event) ->
true
shouldAllowDrop: (event) ->
true
getDroppedElement: (event) ->
idx = event.originalEvent.dataTransfer.getData 'sortable-index'
@find ".sortable:eq(#{idx})"
getSortableElement: (event) ->
el = $(event.target)
if !el.hasClass('sortable') then el.closest('.sortable') else el