Simplify ViewRegistry::addViewProvider API

It now takes two arguments, a model constructor and a create view
callback that is passed the model.

Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
Esse commit está contido em:
Nathan Sobo
2014-12-01 17:53:03 -08:00
commit de Max Brunsfeld
commit 9a9347e3a5
7 arquivos alterados com 55 adições e 85 exclusões
+6 -9
Ver Arquivo
@@ -20,15 +20,12 @@ describe "PanelContainerElement", ->
beforeEach ->
jasmineContent = document.body.querySelector('#jasmine-content')
atom.views.addViewProvider
modelConstructor: Panel
viewConstructor: PanelElement
atom.views.addViewProvider
modelConstructor: PanelContainer
viewConstructor: PanelContainerElement
atom.views.addViewProvider
modelConstructor: TestPanelContainerItem
viewConstructor: TestPanelContainerItemElement
atom.views.addViewProvider Panel, (model) ->
new PanelElement().initialize(model)
atom.views.addViewProvider PanelContainer, (model) ->
new PaneContainerElement().initialize(model)
atom.views.addViewProvider TestPanelContainerItem, (model) ->
new TestPanelContainerItemElement().initialize(model)
container = new PanelContainer({location: 'left'})
element = atom.views.getView(container)
+4 -6
Ver Arquivo
@@ -18,12 +18,10 @@ describe "PanelElement", ->
beforeEach ->
jasmineContent = document.body.querySelector('#jasmine-content')
atom.views.addViewProvider
modelConstructor: Panel
viewConstructor: PanelElement
atom.views.addViewProvider
modelConstructor: TestPanelItem
viewConstructor: TestPanelItemElement
atom.views.addViewProvider Panel, (model) ->
new PanelElement().initialize(model)
atom.views.addViewProvider TestPanelItem, (model) ->
new TestPanelItemElement().initialize(model)
it 'removes the element when the panel is destroyed', ->
panel = new Panel({item: new TestPanelItem})
+19 -39
Ver Arquivo
@@ -25,47 +25,27 @@ describe "ViewRegistry", ->
describe "when passed a model object", ->
describe "when a view provider is registered matching the object's constructor", ->
describe "when the provider has a viewConstructor property", ->
it "constructs a view element and assigns the model on it", ->
class TestModel
it "constructs a view element and assigns the model on it", ->
class TestModel
class TestModelSubclass extends TestModel
class TestModelSubclass extends TestModel
class TestView
setModel: (@model) ->
class TestView
initialize: (@model) -> this
model = new TestModel
model = new TestModel
registry.addViewProvider
modelConstructor: TestModel
viewConstructor: TestView
registry.addViewProvider TestModel, (model) ->
new TestView().initialize(model)
view = registry.getView(model)
expect(view instanceof TestView).toBe true
expect(view.model).toBe model
view = registry.getView(model)
expect(view instanceof TestView).toBe true
expect(view.model).toBe model
subclassModel = new TestModelSubclass
view2 = registry.getView(subclassModel)
expect(view2 instanceof TestView).toBe true
expect(view2.model).toBe subclassModel
describe "when the provider has a createView method", ->
it "constructs a view element by calling the createView method with the model", ->
class TestModel
class TestView
setModel: (@model) ->
registry.addViewProvider
modelConstructor: TestModel
createView: (model) ->
view = new TestView
view.setModel(model)
view
model = new TestModel
view = registry.getView(model)
expect(view instanceof TestView).toBe true
expect(view.model).toBe model
subclassModel = new TestModelSubclass
view2 = registry.getView(subclassModel)
expect(view2 instanceof TestView).toBe true
expect(view2.model).toBe subclassModel
describe "when no view provider is registered for the object's constructor", ->
describe "when the object has a .getViewClass() method", ->
@@ -97,10 +77,10 @@ describe "ViewRegistry", ->
it "returns a disposable that can be used to remove the provider", ->
class TestModel
class TestView
setModel: (@model) ->
disposable = registry.addViewProvider
modelConstructor: TestModel
viewConstructor: TestView
initialize: (@model) -> this
disposable = registry.addViewProvider TestModel, (model) ->
new TestView().initialize(model)
expect(registry.getView(new TestModel) instanceof TestView).toBe true
disposable.dispose()
+2 -4
Ver Arquivo
@@ -466,10 +466,8 @@ describe "Workspace", ->
getModel: -> @model
beforeEach ->
atom.views.addViewProvider(
modelConstructor: TestItem
viewConstructor: TestItemElement
)
atom.views.addViewProvider TestItem, (model) ->
new TestItemElement().initialize(model)
describe '::addLeftPanel(model)', ->
it 'adds a panel to the correct panel container', ->
+8 -15
Ver Arquivo
@@ -56,21 +56,14 @@ class PaneContainer extends Model
activePaneId: @activePane.id
registerViewProviders: ->
atom.views.addViewProvider
modelConstructor: PaneContainer
viewConstructor: PaneContainerElement
atom.views.addViewProvider
modelConstructor: PaneAxis
viewConstructor: PaneAxisElement
atom.views.addViewProvider
modelConstructor: Pane
viewConstructor: PaneElement
atom.views.addViewProvider
modelConstructor: TextEditor
viewConstructor: TextEditorElement
atom.views.addViewProvider PaneContainer, (model) ->
new PaneContainerElement().initialize(model)
atom.views.addViewProvider PaneAxis, (model) ->
new PaneAxisElement().initialize(model)
atom.views.addViewProvider Pane, (model) ->
new PaneElement().initialize(model)
atom.views.addViewProvider TextEditor, (model) ->
new TextEditorElement().initialize(model)
onDidChangeRoot: (fn) ->
@emitter.on 'did-change-root', fn
+10 -3
Ver Arquivo
@@ -1,3 +1,4 @@
Grim = require 'grim'
{Disposable} = require 'event-kit'
# Essential: `ViewRegistry` handles the association between model and view
@@ -76,10 +77,16 @@ class ViewRegistry
#
# Returns a {Disposable} on which `.dispose()` can be called to remove the
# added provider.
addViewProvider: (providerSpec) ->
@providers.push(providerSpec)
addViewProvider: (modelConstructor, createView) ->
if arguments.length is 1
Grim.deprecate("atom.views.addViewProvider now takes 2 arguments: a model constructor and a createView function. See docs for details.")
provider = modelConstructor
else
provider = {modelConstructor, createView}
@providers.push(provider)
new Disposable =>
@providers = @providers.filter (provider) -> provider isnt providerSpec
@providers = @providers.filter (p) -> p isnt provider
# Essential: Get the view associated with an object in the workspace.
#
+6 -9
Ver Arquivo
@@ -66,17 +66,14 @@ class Workspace extends Model
when 'atom://.atom/init-script'
@open(atom.getUserInitScriptPath())
atom.views.addViewProvider
modelConstructor: Workspace
viewConstructor: WorkspaceElement
atom.views.addViewProvider Workspace, (model) ->
new WorkspaceElement().initialize(model)
atom.views.addViewProvider
modelConstructor: PanelContainer
viewConstructor: PanelContainerElement
atom.views.addViewProvider PanelContainer, (model) ->
new PanelContainerElement().initialize(model)
atom.views.addViewProvider
modelConstructor: Panel
viewConstructor: PanelElement
atom.views.addViewProvider Panel, (model) ->
new PanelElement().initialize(model)
# Called by the Serializable mixin during deserialization
deserializeParams: (params) ->