diff --git a/spec/app/pane-container-spec.coffee b/spec/app/pane-container-spec.coffee index bca9ed793..3a20ee3e4 100644 --- a/spec/app/pane-container-spec.coffee +++ b/spec/app/pane-container-spec.coffee @@ -57,6 +57,21 @@ describe "PaneContainer", -> container.find('.pane.active').removeClass('active') expect(container.getActivePane()).toBe pane1 + describe ".eachPane(callback)", -> + it "runs the callback with all current and future panes until the subscription is cancelled", -> + panes = [] + subscription = container.eachPane (pane) -> panes.push(pane) + expect(panes).toEqual [pane1, pane2, pane3] + + panes = [] + pane4 = pane3.splitRight() + expect(panes).toEqual [pane4] + + panes = [] + subscription.cancel() + pane4.splitDown() + expect(panes).toEqual [] + describe "serialization", -> it "can be serialized and deserialized, and correctly adjusts dimensions of deserialized panes after attach", -> newContainer = deserialize(container.serialize()) diff --git a/src/app/pane-container.coffee b/src/app/pane-container.coffee index f9471d0b8..adac275b6 100644 --- a/src/app/pane-container.coffee +++ b/src/app/pane-container.coffee @@ -39,6 +39,12 @@ class PaneContainer extends View getPanes: -> @find('.pane').toArray().map (node)-> $(node).view() + eachPane: (callback) -> + callback(pane) for pane in @getPanes() + paneAttached = (e) -> callback($(e.target).view()) + @on 'pane:attached', paneAttached + cancel: => @off 'pane:attached', paneAttached + getFocusedPane: -> @find('.pane:has(:focus)').view() diff --git a/src/app/pane.coffee b/src/app/pane.coffee index cad027c9b..9e018ab3a 100644 --- a/src/app/pane.coffee +++ b/src/app/pane.coffee @@ -30,6 +30,11 @@ class Pane extends View @on 'focus', => @currentView.focus(); false @on 'focusin', => @makeActive() + afterAttach: -> + return if @attached + @attached = true + @trigger 'pane:attached' + makeActive: -> for pane in @getContainer().getPanes() when pane isnt this pane.makeInactive() diff --git a/src/app/root-view.coffee b/src/app/root-view.coffee index 371f49fa8..f958aa5ba 100644 --- a/src/app/root-view.coffee +++ b/src/app/root-view.coffee @@ -166,6 +166,9 @@ class RootView extends View saveAll: -> editor.save() for editor in @getEditors() + eachPane: (callback) -> + @panes.eachPane(callback) + eachEditor: (callback) -> callback(editor) for editor in @getEditors() @on 'editor:attached', (e, editor) -> callback(editor)