mirror of
https://github.com/pulsar-edit/pulsar.git
synced 2024-09-20 15:37:46 +03:00
Add pane-container:active-item-changed event
This commit is contained in:
parent
44de8fe2d3
commit
7fd0d934ef
@ -205,3 +205,132 @@ describe "PaneContainer", ->
|
|||||||
newContainer = deserialize(container.serialize())
|
newContainer = deserialize(container.serialize())
|
||||||
expect(newContainer.find('.row, .column')).not.toExist()
|
expect(newContainer.find('.row, .column')).not.toExist()
|
||||||
expect(newContainer.find('> :contains(1)')).toExist()
|
expect(newContainer.find('> :contains(1)')).toExist()
|
||||||
|
|
||||||
|
describe "pane-container:active-item-changed", ->
|
||||||
|
[pane1, item1a, item1b, item2a, item2b, item3a, container, activeItemChangedHandler] = []
|
||||||
|
beforeEach ->
|
||||||
|
item1a = new TestView('1a')
|
||||||
|
item1b = new TestView('1b')
|
||||||
|
item2a = new TestView('2a')
|
||||||
|
item2b = new TestView('2b')
|
||||||
|
item3a = new TestView('3a')
|
||||||
|
|
||||||
|
container = new PaneContainer
|
||||||
|
container.attachToDom()
|
||||||
|
pane1 = new Pane(item1a)
|
||||||
|
container.setRoot(pane1)
|
||||||
|
|
||||||
|
activeItemChangedHandler = jasmine.createSpy("activeItemChangedHandler")
|
||||||
|
container.on 'pane-container:active-item-changed', activeItemChangedHandler
|
||||||
|
|
||||||
|
describe "when there are no panes", ->
|
||||||
|
it "is triggered when a new pane item is added", ->
|
||||||
|
container.setRoot()
|
||||||
|
expect(container.getPanes().length).toBe 0
|
||||||
|
activeItemChangedHandler.reset()
|
||||||
|
|
||||||
|
pane = new Pane(item1a)
|
||||||
|
container.setRoot(pane)
|
||||||
|
expect(activeItemChangedHandler.callCount).toBe 1
|
||||||
|
expect(activeItemChangedHandler.argsForCall[0][1]).toEqual item1a
|
||||||
|
|
||||||
|
describe "when there is one pane", ->
|
||||||
|
it "is triggered when a new pane item is added", ->
|
||||||
|
pane1.showItem(item1b)
|
||||||
|
expect(activeItemChangedHandler.callCount).toBe 1
|
||||||
|
expect(activeItemChangedHandler.argsForCall[0][1]).toEqual item1b
|
||||||
|
|
||||||
|
it "is not triggered when the active pane item is shown again", ->
|
||||||
|
pane1.showItem(item1a)
|
||||||
|
expect(activeItemChangedHandler).not.toHaveBeenCalled()
|
||||||
|
|
||||||
|
it "is triggered when switching to an existing pane item", ->
|
||||||
|
pane1.showItem(item1b)
|
||||||
|
activeItemChangedHandler.reset()
|
||||||
|
|
||||||
|
pane1.showItem(item1a)
|
||||||
|
expect(activeItemChangedHandler.callCount).toBe 1
|
||||||
|
expect(activeItemChangedHandler.argsForCall[0][1]).toEqual item1a
|
||||||
|
|
||||||
|
it "is triggered when the active pane item is removed", ->
|
||||||
|
pane1.showItem(item1b)
|
||||||
|
activeItemChangedHandler.reset()
|
||||||
|
|
||||||
|
pane1.removeItem(item1b)
|
||||||
|
expect(activeItemChangedHandler.callCount).toBe 1
|
||||||
|
expect(activeItemChangedHandler.argsForCall[0][1]).toEqual item1a
|
||||||
|
|
||||||
|
it "is not triggered when an inactive pane item is removed", ->
|
||||||
|
pane1.showItem(item1b)
|
||||||
|
activeItemChangedHandler.reset()
|
||||||
|
|
||||||
|
pane1.removeItem(item1a)
|
||||||
|
expect(activeItemChangedHandler).not.toHaveBeenCalled()
|
||||||
|
|
||||||
|
it "is triggered when all pane items are removed", ->
|
||||||
|
pane1.removeItem(item1a)
|
||||||
|
expect(activeItemChangedHandler.callCount).toBe 1
|
||||||
|
expect(activeItemChangedHandler.argsForCall[0][1]).toBe undefined
|
||||||
|
|
||||||
|
it "is triggered when the pane is removed", ->
|
||||||
|
pane1.remove()
|
||||||
|
expect(activeItemChangedHandler.callCount).toBe 1
|
||||||
|
expect(activeItemChangedHandler.argsForCall[0][1]).toBe undefined
|
||||||
|
|
||||||
|
describe "when there are two panes", ->
|
||||||
|
[pane2] = []
|
||||||
|
|
||||||
|
beforeEach ->
|
||||||
|
pane2 = pane1.splitLeft(item2a)
|
||||||
|
activeItemChangedHandler.reset()
|
||||||
|
|
||||||
|
it "is triggered when a new pane item is added to the active pane", ->
|
||||||
|
pane2.showItem(item2b)
|
||||||
|
expect(activeItemChangedHandler.callCount).toBe 1
|
||||||
|
expect(activeItemChangedHandler.argsForCall[0][1]).toEqual item2b
|
||||||
|
|
||||||
|
it "is not triggered when a new pane item is added to an inactive pane", ->
|
||||||
|
pane1.showItem(item1b)
|
||||||
|
expect(activeItemChangedHandler).not.toHaveBeenCalled()
|
||||||
|
|
||||||
|
it "is triggered when the active pane item removed from the active pane", ->
|
||||||
|
pane2.showItem(item2b)
|
||||||
|
activeItemChangedHandler.reset()
|
||||||
|
|
||||||
|
pane2.removeItem(item2b)
|
||||||
|
expect(activeItemChangedHandler.callCount).toBe 1
|
||||||
|
expect(activeItemChangedHandler.argsForCall[0][1]).toEqual item2a
|
||||||
|
|
||||||
|
it "is not triggered when the active pane item removed from an inactive pane", ->
|
||||||
|
pane1.showItem(item1b)
|
||||||
|
activeItemChangedHandler.reset()
|
||||||
|
|
||||||
|
pane1.removeItem(item1b)
|
||||||
|
expect(activeItemChangedHandler).not.toHaveBeenCalled()
|
||||||
|
|
||||||
|
it "is triggered when the active pane is removed", ->
|
||||||
|
pane2.remove()
|
||||||
|
expect(activeItemChangedHandler.callCount).toBe 1
|
||||||
|
expect(activeItemChangedHandler.argsForCall[0][1]).toEqual item1a
|
||||||
|
|
||||||
|
it "is not triggered when an inactive pane is removed", ->
|
||||||
|
pane1.remove()
|
||||||
|
expect(activeItemChangedHandler).not.toHaveBeenCalled()
|
||||||
|
|
||||||
|
describe "when there are multiple panes", ->
|
||||||
|
beforeEach ->
|
||||||
|
pane2 = pane1.splitRight(item2a)
|
||||||
|
activeItemChangedHandler.reset()
|
||||||
|
|
||||||
|
it "is triggered when a new pane is added", ->
|
||||||
|
pane2.splitDown(item3a)
|
||||||
|
expect(activeItemChangedHandler.callCount).toBe 1
|
||||||
|
expect(activeItemChangedHandler.argsForCall[0][1]).toEqual item3a
|
||||||
|
|
||||||
|
it "is not triggered when the non active pane is removed", ->
|
||||||
|
pane3 = pane2.splitDown(item3a)
|
||||||
|
activeItemChangedHandler.reset()
|
||||||
|
|
||||||
|
pane1.remove()
|
||||||
|
pane2.remove()
|
||||||
|
expect(activeItemChangedHandler).not.toHaveBeenCalled()
|
||||||
|
@ -35,6 +35,7 @@ class PaneAxis extends View
|
|||||||
|
|
||||||
parent = @parent().view()
|
parent = @parent().view()
|
||||||
container = @getContainer()
|
container = @getContainer()
|
||||||
|
childWasInactive = not child.isActive?()
|
||||||
|
|
||||||
primitiveRemove = (child) =>
|
primitiveRemove = (child) =>
|
||||||
node = child[0]
|
node = child[0]
|
||||||
@ -48,8 +49,9 @@ class PaneAxis extends View
|
|||||||
sibling = @children().view()
|
sibling = @children().view()
|
||||||
siblingFocused = sibling.is(':has(:focus)')
|
siblingFocused = sibling.is(':has(:focus)')
|
||||||
sibling.detach()
|
sibling.detach()
|
||||||
|
|
||||||
if parent.setRoot?
|
if parent.setRoot?
|
||||||
parent.setRoot(sibling, options)
|
parent.setRoot(sibling, suppressPaneItemChangeEvents: childWasInactive)
|
||||||
else
|
else
|
||||||
parent.insertChildBefore(this, sibling, options)
|
parent.insertChildBefore(this, sibling, options)
|
||||||
parent.removeChild(this, options)
|
parent.removeChild(this, options)
|
||||||
|
@ -92,14 +92,18 @@ class PaneContainer extends View
|
|||||||
@destroyedItemStates = @destroyedItemStates.filter (itemState) ->
|
@destroyedItemStates = @destroyedItemStates.filter (itemState) ->
|
||||||
itemState.uri isnt itemUri
|
itemState.uri isnt itemUri
|
||||||
|
|
||||||
|
triggerActiveItemChange: (item) ->
|
||||||
|
@trigger 'pane-container:active-item-changed', [item]
|
||||||
|
|
||||||
getRoot: ->
|
getRoot: ->
|
||||||
@children().first().view()
|
@children().first().view()
|
||||||
|
|
||||||
setRoot: (root) ->
|
setRoot: (root, {suppressPaneItemChangeEvents}={}) ->
|
||||||
@empty()
|
@empty()
|
||||||
if root?
|
if root?
|
||||||
@append(root)
|
@append(root)
|
||||||
@itemAdded(root.activeItem) if root.activeItem
|
@itemAdded(root.activeItem) if root.activeItem
|
||||||
|
@triggerActiveItemChange(root?.getActivePaneItem()) unless suppressPaneItemChangeEvents
|
||||||
@state.set(root: root?.getState())
|
@state.set(root: root?.getState())
|
||||||
|
|
||||||
removeChild: (child) ->
|
removeChild: (child) ->
|
||||||
|
@ -113,7 +113,7 @@ class Pane extends View
|
|||||||
|
|
||||||
# Public: Returns whether this pane is currently focused.
|
# Public: Returns whether this pane is currently focused.
|
||||||
isActive: ->
|
isActive: ->
|
||||||
@hasClass('active')
|
@getContainer()?.getActivePane() == this
|
||||||
|
|
||||||
# Public: Returns the next pane, ordered by creation.
|
# Public: Returns the next pane, ordered by creation.
|
||||||
getNextPane: ->
|
getNextPane: ->
|
||||||
@ -175,6 +175,7 @@ class Pane extends View
|
|||||||
view.focus() if isFocused
|
view.focus() if isFocused
|
||||||
@activeItem = item
|
@activeItem = item
|
||||||
@activeView = view
|
@activeView = view
|
||||||
|
@getContainer()?.triggerActiveItemChange(item) if @isActive()
|
||||||
@trigger 'pane:active-item-changed', [item]
|
@trigger 'pane:active-item-changed', [item]
|
||||||
|
|
||||||
@state.set('activeItemUri', item.getUri?())
|
@state.set('activeItemUri', item.getUri?())
|
||||||
@ -425,6 +426,7 @@ class Pane extends View
|
|||||||
when 'after' then parent.insertChildAfter(this, newPane)
|
when 'after' then parent.insertChildAfter(this, newPane)
|
||||||
@getContainer().adjustPaneDimensions()
|
@getContainer().adjustPaneDimensions()
|
||||||
newPane.focus()
|
newPane.focus()
|
||||||
|
@getContainer().triggerActiveItemChange(newPane.getActivePaneItem())
|
||||||
newPane
|
newPane
|
||||||
|
|
||||||
# Private:
|
# Private:
|
||||||
|
Loading…
Reference in New Issue
Block a user