Move actual opener logic back to project.

Not all specs create a workspace and workspaceView, so there were
failures. They probably SHOULD all have workspace and workspaceView
but that is beyond the scope of this PR.
This commit is contained in:
probablycorey
2014-02-13 10:52:07 -08:00
parent 6428d1cb60
commit f473bfdb95
2 changed files with 27 additions and 13 deletions

View File

@@ -30,6 +30,8 @@ class Project extends Model
constructor: ({path, @buffers}={}) ->
@buffers ?= []
@openers = []
for buffer in @buffers
do (buffer) =>
buffer.once 'destroyed', => @removeBuffer(buffer)
@@ -309,8 +311,19 @@ class Project extends Model
else
@on 'buffer-created', (buffer) -> callback(buffer)
# Deprecated: delegates
registerOpener: -> atom.workspaceView.model.registerOpener(arguments...)
unregisterOpener: -> atom.workspaceView.model.unregisterOpener(arguments...)
eachEditor: -> atom.workspaceView.model.eachEditor(arguments...)
getEditors: -> atom.workspaceView.model.getEditors(arguments...)
# Deprecated: delegate
registerOpener: (opener) ->
@openers.push(opener)
# Deprecated: delegate
unregisterOpener: (opener) ->
_.remove(@openers, opener)
# Deprecated: delegate
eachEditor: (callback) ->
callback(editor) for editor in @getEditors()
@on 'editor-created', (editor) -> callback(editor)
# Deprecated: delegate
getEditors: ->
new Array(@editors...)

View File

@@ -26,7 +26,6 @@ class Workspace extends Model
constructor: ->
super
@openers = []
@subscribe @paneContainer, 'item-destroyed', @onPaneItemDestroyed
@registerOpener (filePath) =>
switch filePath
@@ -54,12 +53,11 @@ class Workspace extends Model
#
# callback - A {Function} with an {Editor} as its only argument
eachEditor: (callback) ->
callback(editor) for editor in @getEditors()
@on 'editor-created', (editor) -> callback(editor)
atom.project.eachEditor(callback)
# Public: Returns an {Array} of all open {Editor}s.
getEditors: ->
new Array(atom.project.editors...)
atom.project.getEditors()
# Public: Asynchronously opens a given a filepath in Atom.
#
@@ -100,7 +98,7 @@ class Workspace extends Model
uri = atom.project.relativize(uri) ? ''
if uri?
item = opener(uri, options) for opener in @openers when !item
item = opener(atom.project.resolve(uri), options) for opener in @getOpeners() when !item
editor = item ? @activePane.itemForUri(uri) ? atom.project.openSync(uri, {initialLine})
else
editor = atom.project.openSync()
@@ -112,7 +110,7 @@ class Workspace extends Model
openUriInPane: (uri, pane, options={}) ->
changeFocus = options.changeFocus ? true
item = opener(uri, options) for opener in @openers when !item
item = opener(atom.project.resolve(uri), options) for opener in @getOpeners() when !item
promise = Q(item ? pane.itemForUri(uri) ? atom.project.open(uri, options))
promise
@@ -146,11 +144,14 @@ class Workspace extends Model
#
# opener - A {Function} to be called when a path is being opened.
registerOpener: (opener) ->
@openers.push(opener)
atom.project.registerOpener(opener)
# Public: Remove a registered opener.
unregisterOpener: (opener) ->
_.remove(@openers, opener)
atom.project.unregisterOpener(opener)
getOpeners: ->
atom.project.openers
# Public: save the active item.
saveActivePaneItem: ->