Deprecate atom.views.getView and store view registry on WorkspaceElement

This separates the role of the ViewFactory from the ViewRegistry.
The ViewFactory creates *new* views. The ViewRegistry maintains a
persistent 1:1 mapping from models to views, and is owned by the
workspace rather than being a global service. If someone wants to 
*create* a view, they use atom.views.createView. If someone wants to
get the workspace’s view element for a given model, they call .getView
on the workspace.
Esse commit está contido em:
Nathan Sobo
2014-11-30 17:12:35 -07:00
commit 1e6e724be7
30 arquivos alterados com 152 adições e 138 exclusões
+1 -1
Ver Arquivo
@@ -9,7 +9,7 @@ describe "editorView.", ->
beforeEach ->
atom.workspaceViewParentSelector = '#jasmine-content'
atom.workspaceView = atom.views.getView(atom.workspace).__spacePenView
atom.workspaceView = atom.views.createView(atom.workspace).__spacePenView
atom.workspaceView.attachToDom()
atom.workspaceView.width(1024)
+2 -1
Ver Arquivo
@@ -33,7 +33,8 @@ unless process.env.ATOM_SHELL_INTERNAL_RUN_AS_NODE
Object.defineProperty module.exports, 'WorkspaceView', get: ->
deprecate """
Requiring `WorkspaceView` from `atom` is no longer supported.
Use `atom.views.getView(atom.workspace)` instead.
Use `document.querySelector('atom-workspace')` if you need to access
the workspace element.
"""
require '../src/workspace-view'
@@ -9,6 +9,6 @@ module.exports =
atom.commands.add 'atom-workspace', 'activation-command', =>
@activationCommandCallCount++
editorView = atom.views.getView(atom.workspace.getActiveEditor())?.__spacePenView
editorView = document.querySelector('atom-workspace').getView(atom.workspace.getActiveEditor())?.__spacePenView
editorView?.command 'activation-command', =>
@legacyActivationCommandCallCount++
+2 -2
Ver Arquivo
@@ -4,7 +4,7 @@ Package = require '../src/package'
describe "PackageManager", ->
workspaceElement = null
beforeEach ->
workspaceElement = atom.views.getView(atom.workspace)
workspaceElement = atom.views.createView(atom.workspace)
describe "::loadPackage(name)", ->
it "continues if the package has an invalid package.json", ->
@@ -144,7 +144,7 @@ describe "PackageManager", ->
atom.workspace.open()
runs ->
editorView = atom.views.getView(atom.workspace.getActiveEditor()).__spacePenView
editorView = workspaceElement.getView(atom.workspace.getActiveEditor()).__spacePenView
legacyCommandListener = jasmine.createSpy("legacyCommandListener")
editorView.command 'activation-command', legacyCommandListener
editorCommandListener = jasmine.createSpy("editorCommandListener")
+9 -7
Ver Arquivo
@@ -5,9 +5,10 @@ PaneContainerView = require '../src/pane-container-view'
PaneView = require '../src/pane-view'
{Disposable} = require 'event-kit'
{$, View, $$} = require '../src/space-pen-extensions'
ViewRegistry = require '../src/view-registry'
describe "PaneContainerView", ->
[TestView, container, pane1, pane2, pane3, deserializerDisposable] = []
[viewRegistry, TestView, container, pane1, pane2, pane3, deserializerDisposable] = []
beforeEach ->
class TestView extends View
@@ -22,7 +23,8 @@ describe "PaneContainerView", ->
onDidChangeTitle: -> new Disposable(->)
onDidChangeModified: -> new Disposable(->)
container = atom.views.getView(atom.workspace.paneContainer).__spacePenView
viewRegistry = new ViewRegistry(atom.views)
container = atom.views.createView(atom.workspace.paneContainer, {viewRegistry}).__spacePenView
pane1 = container.getRoot()
pane1.activateItem(new TestView('1'))
pane2 = pane1.splitRight(new TestView('2'))
@@ -76,7 +78,7 @@ describe "PaneContainerView", ->
describe "serialization", ->
it "can be serialized and deserialized, and correctly adjusts dimensions of deserialized panes after attach", ->
newContainer = atom.views.getView(container.model.testSerialization()).__spacePenView
newContainer = atom.views.createView(container.model.testSerialization(), {viewRegistry}).__spacePenView
expect(newContainer.find('atom-pane-axis.horizontal > :contains(1)')).toExist()
expect(newContainer.find('atom-pane-axis.horizontal > atom-pane-axis.vertical > :contains(2)')).toExist()
expect(newContainer.find('atom-pane-axis.horizontal > atom-pane-axis.vertical > :contains(3)')).toExist()
@@ -92,14 +94,14 @@ describe "PaneContainerView", ->
describe "if the 'core.destroyEmptyPanes' config option is false (the default)", ->
it "leaves the empty panes intact", ->
newContainer = atom.views.getView(container.model.testSerialization()).__spacePenView
newContainer = atom.views.createView(container.model.testSerialization(), {viewRegistry}).__spacePenView
expect(newContainer.find('atom-pane-axis.horizontal > :contains(1)')).toExist()
expect(newContainer.find('atom-pane-axis.horizontal > atom-pane-axis.vertical > atom-pane').length).toBe 2
describe "if the 'core.destroyEmptyPanes' config option is true", ->
it "removes empty panes on deserialization", ->
atom.config.set('core.destroyEmptyPanes', true)
newContainer = atom.views.getView(container.model.testSerialization()).__spacePenView
newContainer = atom.views.createView(container.model.testSerialization(), {viewRegistry}).__spacePenView
expect(newContainer.find('atom-pane-axis.horizontal, atom-pane-axis.vertical')).not.toExist()
expect(newContainer.find('> :contains(1)')).toExist()
@@ -112,7 +114,7 @@ describe "PaneContainerView", ->
item2b = new TestView('2b')
item3a = new TestView('3a')
container = atom.views.getView(new PaneContainer).__spacePenView
container = atom.views.createView(new PaneContainer, {viewRegistry}).__spacePenView
pane1 = container.getRoot()
pane1.activateItem(item1a)
container.attachToDom()
@@ -262,7 +264,7 @@ describe "PaneContainerView", ->
# |7|8|9|
# -------
container = atom.views.getView(new PaneContainer).__spacePenView
container = atom.views.createView(new PaneContainer, {viewRegistry}).__spacePenView
pane1 = container.getRoot()
pane1.activateItem(new TestView('1'))
pane4 = pane1.splitDown(new TestView('4'))
+10 -8
Ver Arquivo
@@ -1,5 +1,6 @@
PaneContainer = require '../src/pane-container'
PaneView = require '../src/pane-view'
ViewRegistry = require '../src/view-registry'
fs = require 'fs-plus'
{Emitter, Disposable} = require 'event-kit'
{$, View} = require '../src/space-pen-extensions'
@@ -7,7 +8,7 @@ path = require 'path'
temp = require 'temp'
describe "PaneView", ->
[container, containerModel, view1, view2, editor1, editor2, pane, paneModel, deserializerDisposable] = []
[viewRegistry, container, containerModel, view1, view2, editor1, editor2, pane, paneModel, deserializerDisposable] = []
class TestView extends View
@deserialize: ({id, text}) -> new TestView({id, text})
@@ -27,7 +28,8 @@ describe "PaneView", ->
jasmine.snapshotDeprecations()
deserializerDisposable = atom.deserializers.add(TestView)
container = atom.views.getView(new PaneContainer).__spacePenView
viewRegistry = new ViewRegistry(atom.views)
container = atom.views.createView(new PaneContainer, {viewRegistry}).__spacePenView
containerModel = container.model
view1 = new TestView(id: 'view-1', text: 'View 1')
view2 = new TestView(id: 'view-2', text: 'View 2')
@@ -229,7 +231,7 @@ describe "PaneView", ->
beforeEach ->
pane2Model = paneModel.splitRight() # Can't destroy the last pane, so we add another
pane2 = atom.views.getView(pane2Model).__spacePenView
pane2 = viewRegistry.getView(pane2Model).__spacePenView
it "triggers a 'pane:removed' event with the pane", ->
removedHandler = jasmine.createSpy("removedHandler")
@@ -262,7 +264,7 @@ describe "PaneView", ->
beforeEach ->
pane2Model = paneModel.splitRight(items: [pane.copyActiveItem()])
pane2 = atom.views.getView(pane2Model).__spacePenView
pane2 = viewRegistry.getView(pane2Model).__spacePenView
expect(pane2Model.isActive()).toBe true
it "adds or removes the .active class as appropriate", ->
@@ -309,8 +311,8 @@ describe "PaneView", ->
pane2Model = pane1Model.splitRight(items: [pane1Model.copyActiveItem()])
pane3Model = pane2Model.splitDown(items: [pane2Model.copyActiveItem()])
pane2 = pane2Model._view
pane2 = atom.views.getView(pane2Model).__spacePenView
pane3 = atom.views.getView(pane3Model).__spacePenView
pane2 = viewRegistry.getView(pane2Model).__spacePenView
pane3 = viewRegistry.getView(pane3Model).__spacePenView
expect(container.find('> atom-pane-axis.horizontal > atom-pane').toArray()).toEqual [pane1[0]]
expect(container.find('> atom-pane-axis.horizontal > atom-pane-axis.vertical > atom-pane').toArray()).toEqual [pane2[0], pane3[0]]
@@ -323,13 +325,13 @@ describe "PaneView", ->
container.attachToDom()
pane.focus()
container2 = atom.views.getView(container.model.testSerialization()).__spacePenView
container2 = viewRegistry.getView(container.model.testSerialization()).__spacePenView
pane2 = container2.getRoot()
container2.attachToDom()
expect(pane2).toMatchSelector(':has(:focus)')
$(document.activeElement).blur()
container3 = atom.views.getView(container.model.testSerialization()).__spacePenView
container3 = viewRegistry.getView(container.model.testSerialization()).__spacePenView
pane3 = container3.getRoot()
container3.attachToDom()
expect(pane3).not.toMatchSelector(':has(:focus)')
+20 -17
Ver Arquivo
@@ -2,9 +2,10 @@ Panel = require '../src/panel'
PanelElement = require '../src/panel-element'
PanelContainer = require '../src/panel-container'
PanelContainerElement = require '../src/panel-container-element'
ViewRegistry = require '../src/view-registry'
describe "PanelContainerElement", ->
[jasmineContent, element, container] = []
[jasmineContent, element, container, viewRegistry] = []
class TestPanelContainerItem
constructior: ->
@@ -28,8 +29,10 @@ describe "PanelContainerElement", ->
modelConstructor: TestPanelContainerItem
viewConstructor: TestPanelContainerItemElement
container = new PanelContainer({location: 'left'})
element = atom.views.getView(container)
viewRegistry = new ViewRegistry(atom.views)
element = viewRegistry.getView(container, {viewRegistry})
jasmineContent.appendChild(element)
it 'has a location class with value from the model', ->
@@ -71,8 +74,8 @@ describe "PanelContainerElement", ->
container.addPanel(panel2)
expect(element.childNodes.length).toBe 2
expect(atom.views.getView(panel1).style.display).not.toBe 'none'
expect(atom.views.getView(panel2).style.display).not.toBe 'none'
expect(viewRegistry.getView(panel1).style.display).not.toBe 'none'
expect(viewRegistry.getView(panel2).style.display).not.toBe 'none'
panel1.destroy()
expect(element.childNodes.length).toBe 1
@@ -83,7 +86,7 @@ describe "PanelContainerElement", ->
describe "when the container is at the bottom location", ->
beforeEach ->
container = new PanelContainer({location: 'bottom'})
element = atom.views.getView(container)
element = viewRegistry.getView(container)
jasmineContent.appendChild(element)
it "adds atom-panel elements when a new panel is added to the container; removes them when the panels are destroyed", ->
@@ -96,12 +99,12 @@ describe "PanelContainerElement", ->
expect(element.childNodes[0]).toHaveClass 'tool-panel' # legacy selector support
expect(element.childNodes[0]).toHaveClass 'panel-bottom' # legacy selector support
expect(element.childNodes[0].tagName).toBe 'ATOM-PANEL'
expect(atom.views.getView(panel1)).toHaveClass 'one'
expect(viewRegistry.getView(panel1)).toHaveClass 'one'
panel2 = new Panel({item: new TestPanelContainerItem(), className: 'two'})
container.addPanel(panel2)
expect(element.childNodes.length).toBe 2
expect(atom.views.getView(panel2)).toHaveClass 'two'
expect(viewRegistry.getView(panel2)).toHaveClass 'two'
panel1.destroy()
expect(element.childNodes.length).toBe 1
@@ -112,33 +115,33 @@ describe "PanelContainerElement", ->
describe "when the container is modal", ->
beforeEach ->
container = new PanelContainer({location: 'modal'})
element = atom.views.getView(container)
element = viewRegistry.getView(container)
jasmineContent.appendChild(element)
it "allows only one panel to be visible at a time", ->
panel1 = new Panel({item: new TestPanelContainerItem()})
container.addPanel(panel1)
expect(atom.views.getView(panel1).style.display).not.toBe 'none'
expect(viewRegistry.getView(panel1).style.display).not.toBe 'none'
panel2 = new Panel({item: new TestPanelContainerItem()})
container.addPanel(panel2)
expect(atom.views.getView(panel1).style.display).toBe 'none'
expect(atom.views.getView(panel2).style.display).not.toBe 'none'
expect(viewRegistry.getView(panel1).style.display).toBe 'none'
expect(viewRegistry.getView(panel2).style.display).not.toBe 'none'
panel1.show()
expect(atom.views.getView(panel1).style.display).not.toBe 'none'
expect(atom.views.getView(panel2).style.display).toBe 'none'
expect(viewRegistry.getView(panel1).style.display).not.toBe 'none'
expect(viewRegistry.getView(panel2).style.display).toBe 'none'
it "adds the 'modal' class to panels", ->
panel1 = new Panel({item: new TestPanelContainerItem()})
container.addPanel(panel1)
expect(atom.views.getView(panel1)).toHaveClass 'modal'
expect(viewRegistry.getView(panel1)).toHaveClass 'modal'
# legacy selector support
expect(atom.views.getView(panel1)).not.toHaveClass 'tool-panel'
expect(atom.views.getView(panel1)).toHaveClass 'overlay'
expect(atom.views.getView(panel1)).toHaveClass 'from-top'
expect(viewRegistry.getView(panel1)).not.toHaveClass 'tool-panel'
expect(viewRegistry.getView(panel1)).toHaveClass 'overlay'
expect(viewRegistry.getView(panel1)).toHaveClass 'from-top'
+14 -5
Ver Arquivo
@@ -1,8 +1,9 @@
Panel = require '../src/panel'
PanelElement = require '../src/panel-element'
ViewRegistry = require '../src/view-registry'
describe "PanelElement", ->
[jasmineContent, element, panel] = []
[jasmineContent, element, panel, viewRegistry] = []
class TestPanelItem
constructior: ->
@@ -23,9 +24,17 @@ describe "PanelElement", ->
modelConstructor: TestPanelItem
viewConstructor: TestPanelItemElement
viewRegistry = new ViewRegistry(atom.views)
it "renders a view for the panel's item", ->
panel = new Panel({item: new TestPanelItem})
element = atom.views.createView(panel, {viewRegistry})
jasmineContent.appendChild(element)
expect(element.firstChild).toBe viewRegistry.getView(panel.getItem())
it 'removes the element when the panel is destroyed', ->
panel = new Panel({item: new TestPanelItem})
element = atom.views.getView(panel)
element = atom.views.createView(panel, {viewRegistry})
jasmineContent.appendChild(element)
expect(element.parentNode).toBe jasmineContent
@@ -35,14 +44,14 @@ describe "PanelElement", ->
describe "changing panel visibility", ->
it 'initially renders panel created with visibile: false', ->
panel = new Panel({visible: false, item: new TestPanelItem})
element = atom.views.getView(panel)
element = atom.views.createView(panel, {viewRegistry})
jasmineContent.appendChild(element)
expect(element.style.display).toBe 'none'
it 'hides and shows the panel element when Panel::hide() and Panel::show() are called', ->
panel = new Panel({item: new TestPanelItem})
element = atom.views.getView(panel)
element = atom.views.createView(panel, {viewRegistry})
jasmineContent.appendChild(element)
expect(element.style.display).not.toBe 'none'
@@ -56,7 +65,7 @@ describe "PanelElement", ->
describe "when a class name is specified", ->
it 'initially renders panel created with visibile: false', ->
panel = new Panel({className: 'some classes', item: new TestPanelItem})
element = atom.views.getView(panel)
element = atom.views.createView(panel, {viewRegistry})
jasmineContent.appendChild(element)
expect(element).toHaveClass 'some'
+10 -5
Ver Arquivo
@@ -3,10 +3,12 @@ _ = require 'underscore-plus'
TextEditorView = require '../src/text-editor-view'
TextEditorComponent = require '../src/text-editor-component'
ViewRegistry = require '../src/view-registry'
nbsp = String.fromCharCode(160)
describe "TextEditorComponent", ->
[contentNode, editor, wrapperView, wrapperNode, component, componentNode, verticalScrollbarNode, horizontalScrollbarNode] = []
[viewRegistry, contentNode, editor, wrapperView, wrapperNode, component, componentNode, verticalScrollbarNode, horizontalScrollbarNode] = []
[lineHeightInPixels, charWidth, nextAnimationFrame, noAnimationFrame, lineOverdrawMargin] = []
beforeEach ->
@@ -31,19 +33,22 @@ describe "TextEditorComponent", ->
atom.project.open('sample.js').then (o) -> editor = o
runs ->
viewRegistry = new ViewRegistry(atom.views)
contentNode = document.querySelector('#jasmine-content')
contentNode.style.width = '1000px'
wrapperView = new TextEditorView(editor, {lineOverdrawMargin})
wrapperView.attachToDom()
wrapperNode = wrapperView.element
wrapperNode = atom.views.createView(editor, {viewRegistry, lineOverdrawMargin})
wrapperNode.setUpdatedSynchronously(false)
jasmine.attachToDOM(wrapperNode)
{component} = wrapperView
{component} = wrapperNode
component.setFontFamily('monospace')
component.setLineHeight(1.3)
component.setFontSize(20)
wrapperView = wrapperNode.__spacePenView
lineHeightInPixels = editor.getLineHeightInPixels()
charWidth = editor.getDefaultCharWidth()
componentNode = component.getDOMNode()
+1 -1
Ver Arquivo
@@ -228,7 +228,7 @@ describe "ThemeManager", ->
beforeEach ->
jasmine.snapshotDeprecations()
workspaceElement = atom.views.getView(atom.workspace)
workspaceElement = atom.views.createView(atom.workspace)
jasmine.attachToDOM(workspaceElement)
workspaceElement.appendChild document.createElement('atom-text-editor')
+1
Ver Arquivo
@@ -44,6 +44,7 @@ describe "ViewFactory", ->
expect(view instanceof TestView).toBe true
expect(view.params.a).toBe 1
expect(view.params.model).toBe model
expect(view.params.viewFactory).toBe factory
subclassModel = new TestModelSubclass
view2 = factory.createView(subclassModel)
-31
Ver Arquivo
@@ -460,17 +460,6 @@ describe "Workspace", ->
describe "adding panels", ->
class TestItem
class TestItemElement extends HTMLElement
constructor: ->
initialize: ({@model}) ->
getModel: -> @model
beforeEach ->
atom.views.addViewProvider(
modelConstructor: TestItem
viewConstructor: TestItemElement
)
describe '::addLeftPanel(model)', ->
it 'adds a panel to the correct panel container', ->
expect(atom.workspace.getLeftPanels().length).toBe(0)
@@ -482,10 +471,6 @@ describe "Workspace", ->
expect(panel).toBeDefined()
expect(addPanelSpy).toHaveBeenCalledWith({panel, index: 0})
itemView = atom.views.getView(atom.workspace.getLeftPanels()[0].getItem())
expect(itemView instanceof TestItemElement).toBe(true)
expect(itemView.getModel()).toBe(model)
describe '::addRightPanel(model)', ->
it 'adds a panel to the correct panel container', ->
expect(atom.workspace.getRightPanels().length).toBe(0)
@@ -497,10 +482,6 @@ describe "Workspace", ->
expect(panel).toBeDefined()
expect(addPanelSpy).toHaveBeenCalledWith({panel, index: 0})
itemView = atom.views.getView(atom.workspace.getRightPanels()[0].getItem())
expect(itemView instanceof TestItemElement).toBe(true)
expect(itemView.getModel()).toBe(model)
describe '::addTopPanel(model)', ->
it 'adds a panel to the correct panel container', ->
expect(atom.workspace.getTopPanels().length).toBe(0)
@@ -512,10 +493,6 @@ describe "Workspace", ->
expect(panel).toBeDefined()
expect(addPanelSpy).toHaveBeenCalledWith({panel, index: 0})
itemView = atom.views.getView(atom.workspace.getTopPanels()[0].getItem())
expect(itemView instanceof TestItemElement).toBe(true)
expect(itemView.getModel()).toBe(model)
describe '::addBottomPanel(model)', ->
it 'adds a panel to the correct panel container', ->
expect(atom.workspace.getBottomPanels().length).toBe(0)
@@ -527,10 +504,6 @@ describe "Workspace", ->
expect(panel).toBeDefined()
expect(addPanelSpy).toHaveBeenCalledWith({panel, index: 0})
itemView = atom.views.getView(atom.workspace.getBottomPanels()[0].getItem())
expect(itemView instanceof TestItemElement).toBe(true)
expect(itemView.getModel()).toBe(model)
describe '::addModalPanel(model)', ->
it 'adds a panel to the correct panel container', ->
expect(atom.workspace.getModalPanels().length).toBe(0)
@@ -541,7 +514,3 @@ describe "Workspace", ->
expect(panel).toBeDefined()
expect(addPanelSpy).toHaveBeenCalledWith({panel, index: 0})
itemView = atom.views.getView(atom.workspace.getModalPanels()[0].getItem())
expect(itemView instanceof TestItemElement).toBe(true)
expect(itemView.getModel()).toBe(model)
+3 -3
Ver Arquivo
@@ -15,7 +15,7 @@ describe "WorkspaceView", ->
atom.project.setPaths([atom.project.resolve('dir')])
pathToOpen = atom.project.resolve('a')
atom.workspace = new Workspace
atom.workspaceView = atom.views.getView(atom.workspace).__spacePenView
atom.workspaceView = atom.views.createView(atom.workspace).__spacePenView
atom.workspaceView.enableKeymap()
atom.workspaceView.focus()
@@ -34,7 +34,7 @@ describe "WorkspaceView", ->
atom.workspaceView.remove()
atom.project = atom.deserializers.deserialize(projectState)
atom.workspace = Workspace.deserialize(workspaceState)
atom.workspaceView = atom.views.getView(atom.workspace).__spacePenView
atom.workspaceView = atom.views.createView(atom.workspace).__spacePenView
atom.workspaceView.attachToDom()
describe "when the serialized WorkspaceView has an unsaved buffer", ->
@@ -279,7 +279,7 @@ describe "WorkspaceView", ->
describe 'panel containers', ->
workspaceElement = null
beforeEach ->
workspaceElement = atom.views.getView(atom.workspace)
workspaceElement = atom.views.createView(atom.workspace)
it 'inserts panel container elements in the correct places in the DOM', ->
leftContainer = workspaceElement.querySelector('atom-panel-container.left')
+2 -2
Ver Arquivo
@@ -39,7 +39,7 @@ class Atom extends Model
atom.workspaceView is no longer available.
In most cases you will not need the view. See the Workspace docs for
alternatives: https://atom.io/docs/api/latest/Workspace.
If you do need the view, please use `atom.views.getView(atom.workspace)`,
If you do need the view, please use `document.querySelector('atom-workspace')`,
which returns an HTMLElement.
"""
@@ -681,7 +681,7 @@ class Atom extends Model
startTime = Date.now()
@workspace = Workspace.deserialize(@state.workspace) ? new Workspace
workspaceElement = @views.getView(@workspace)
workspaceElement = @views.createView(@workspace)
@__workspaceView = workspaceElement.__spacePenView
@deserializeTimings.workspace = Date.now() - startTime
+2 -2
Ver Arquivo
@@ -66,10 +66,10 @@ LinesComponent = React.createClass
insertionPoint = document.createElement('content')
insertionPoint.setAttribute('select', 'atom-overlay')
@overlayManager = new OverlayManager(@props.hostElement)
@overlayManager = new OverlayManager(@props.hostElement, @props.hostElement.viewRegistry)
@getDOMNode().appendChild(insertionPoint)
else
@overlayManager = new OverlayManager(@getDOMNode())
@overlayManager = new OverlayManager(@getDOMNode(), @props.hostElement.viewRegistry)
shouldComponentUpdate: (newProps) ->
return true unless isEqualForProperties(newProps, @props,
+2 -2
Ver Arquivo
@@ -1,6 +1,6 @@
module.exports =
class OverlayManager
constructor: (@container) ->
constructor: (@container, @viewRegistry) ->
@overlays = {}
render: (props) ->
@@ -25,7 +25,7 @@ class OverlayManager
return
renderOverlay: (editor, decoration, pixelPosition, lineHeightInPixels) ->
item = atom.views.getView(decoration.item)
item = @viewRegistry.getView(decoration.item)
unless overlay = @overlays[decoration.id]
overlay = @overlays[decoration.id] = document.createElement('atom-overlay')
overlay.appendChild(item)
+3 -3
Ver Arquivo
@@ -8,7 +8,7 @@ class PaneAxisElement extends HTMLElement
detachedCallback: ->
@subscriptions.dispose()
initialize: ({@model}) ->
initialize: ({@viewRegistry, @model}) ->
@subscriptions.add @model.onDidAddChild(@childAdded.bind(this))
@subscriptions.add @model.onDidRemoveChild(@childRemoved.bind(this))
@subscriptions.add @model.onDidReplaceChild(@childReplaced.bind(this))
@@ -22,12 +22,12 @@ class PaneAxisElement extends HTMLElement
@classList.add('vertical', 'pane-column')
childAdded: ({child, index}) ->
view = atom.views.getView(child)
view = @viewRegistry.getView(child)
@insertBefore(view, @children[index])
callAttachHooks(view) # for backward compatibility with SpacePen views
childRemoved: ({child}) ->
view = atom.views.getView(child)
view = @viewRegistry.getView(child)
view.remove()
childReplaced: ({index, oldChild, newChild}) ->
+3 -3
Ver Arquivo
@@ -11,7 +11,7 @@ class PaneContainerElement extends HTMLElement
PaneContainerView ?= require './pane-container-view'
@__spacePenView = new PaneContainerView(this)
initialize: ({@model}) ->
initialize: ({@viewRegistry, @model}) ->
@subscriptions.add @model.observeRoot(@rootChanged.bind(this))
@__spacePenView.setModel(@model)
@@ -19,7 +19,7 @@ class PaneContainerElement extends HTMLElement
focusedElement = document.activeElement if @hasFocus()
@firstChild?.remove()
if root?
view = atom.views.getView(root)
view = @viewRegistry.getView(root)
@appendChild(view)
callAttachHooks(view)
focusedElement?.focus()
@@ -45,7 +45,7 @@ class PaneContainerElement extends HTMLElement
y = pointB.y - pointA.y
Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2))
paneView = atom.views.getView(@model.getActivePane())
paneView = @viewRegistry.getView(@model.getActivePane())
box = @boundingBoxForPaneView(paneView)
paneViews = _.toArray(@querySelectorAll('atom-pane'))
+3 -3
Ver Arquivo
@@ -23,7 +23,7 @@ class PaneContainerView extends View
@subscriptions.add @model.onDidChangeActivePaneItem(@onActivePaneItemChanged)
getRoot: ->
view = atom.views.getView(@model.getRoot())
view = @element.viewRegistry.getView(@model.getRoot())
view.__spacePenView ? view
onActivePaneItemChanged: (activeItem) =>
@@ -55,7 +55,7 @@ class PaneContainerView extends View
@getActivePaneView()
getActivePaneView: ->
atom.views.getView(@model.getActivePane()).__spacePenView
@element.viewRegistry.getView(@model.getActivePane()).__spacePenView
getActivePaneItem: ->
@model.getActivePaneItem()
@@ -64,7 +64,7 @@ class PaneContainerView extends View
@getActivePaneView()?.activeView
paneForUri: (uri) ->
atom.views.getView(@model.paneForUri(uri)).__spacePenView
@element.viewRegistry.getView(@model.paneForUri(uri)).__spacePenView
focusNextPaneView: ->
@model.activateNextPane()
+4 -4
Ver Arquivo
@@ -43,7 +43,7 @@ class PaneElement extends HTMLElement
createSpacePenShim: ->
@__spacePenView = new PaneView(this)
initialize: ({@model}) ->
initialize: ({@viewRegistry, @model}) ->
@subscriptions.add @model.onDidActivate(@activated.bind(this))
@subscriptions.add @model.observeActive(@activeStatusChanged.bind(this))
@subscriptions.add @model.observeActiveItem(@activeItemChanged.bind(this))
@@ -66,7 +66,7 @@ class PaneElement extends HTMLElement
return unless item?
hasFocus = @hasFocus()
itemView = atom.views.getView(item)
itemView = @viewRegistry.getView(item)
unless @itemViews.contains(itemView)
@itemViews.appendChild(itemView)
@@ -94,14 +94,14 @@ class PaneElement extends HTMLElement
itemView.style.display = 'none'
itemRemoved: ({item, index, destroyed}) ->
if viewToRemove = atom.views.getView(item)
if viewToRemove = @viewRegistry.getView(item)
callRemoveHooks(viewToRemove) if destroyed
viewToRemove.remove()
paneDestroyed: ->
@subscriptions.dispose()
getActiveView: -> atom.views.getView(@model.getActiveItem())
getActiveView: -> @viewRegistry.getView(@model.getActiveItem())
hasFocus: ->
this is document.activeElement or @contains(document.activeElement)
+5 -5
Ver Arquivo
@@ -153,15 +153,15 @@ class PaneView extends View
activeItemModifiedChanged: =>
@trigger 'pane:active-item-modified-status-changed'
@::accessor 'activeView', -> atom.views.getView(@activeItem)?.__spacePenView
@::accessor 'activeView', -> @element.viewRegistry.getView(@activeItem)?.__spacePenView
splitLeft: (items...) -> atom.views.getView(@model.splitLeft({items})).__spacePenView
splitLeft: (items...) -> @element.viewRegistry.getView(@model.splitLeft({items})).__spacePenView
splitRight: (items...) -> atom.views.getView(@model.splitRight({items})).__spacePenView
splitRight: (items...) -> @element.viewRegistry.getView(@model.splitRight({items})).__spacePenView
splitUp: (items...) -> atom.views.getView(@model.splitUp({items})).__spacePenView
splitUp: (items...) -> @element.viewRegistry.getView(@model.splitUp({items})).__spacePenView
splitDown: (items...) -> atom.views.getView(@model.splitDown({items})).__spacePenView
splitDown: (items...) -> @element.viewRegistry.getView(@model.splitDown({items})).__spacePenView
getContainer: -> @closest('atom-pane-container').view()
+3 -3
Ver Arquivo
@@ -6,14 +6,14 @@ class PanelContainerElement extends HTMLElement
getModel: -> @model
initialize: ({@model}) ->
initialize: ({@viewRegistry, @model}) ->
@subscriptions.add @model.onDidAddPanel(@panelAdded.bind(this))
@subscriptions.add @model.onDidRemovePanel(@panelRemoved.bind(this))
@subscriptions.add @model.onDidDestroy(@destroyed.bind(this))
@classList.add(@model.getLocation())
panelAdded: ({panel, index}) ->
panelElement = atom.views.getView(panel)
panelElement = @viewRegistry.getView(panel)
panelElement.classList.add(@model.getLocation())
if @model.isModal()
panelElement.classList.add("overlay", "from-top")
@@ -32,7 +32,7 @@ class PanelContainerElement extends HTMLElement
@hideAllPanelsExcept(panel) if visible
panelRemoved: ({panel, index}) ->
@removeChild(atom.views.getView(panel))
@removeChild(@viewRegistry.getView(panel))
destroyed: ->
@subscriptions.dispose()
+2 -2
Ver Arquivo
@@ -7,7 +7,7 @@ class PanelElement extends HTMLElement
getModel: -> @model
initialize: ({@model}) ->
initialize: ({@viewRegistry, @model}) ->
@appendChild(@getItemView())
@classList.add(@model.getClassName().split(' ')...) if @model.getClassName()?
@@ -15,7 +15,7 @@ class PanelElement extends HTMLElement
@subscriptions.add @model.onDidDestroy(@destroyed.bind(this))
getItemView: ->
atom.views.getView(@model.getItem())
@viewRegistry.getView(@model.getItem())
attachedCallback: ->
callAttachHooks(@getItemView()) # for backward compatibility with SpacePen views
+1 -1
Ver Arquivo
@@ -63,7 +63,7 @@ class TextEditorElement extends HTMLElement
@component.checkForVisibilityChange()
@focus() if @focusOnAttach
initialize: ({model}) ->
initialize: ({@viewRegistry, @lineOverdrawMargin, model}) ->
@setModel(model)
setModel: (model) ->
+8 -6
Ver Arquivo
@@ -333,16 +333,18 @@ class ThemeManager
isInitialLoadComplete: -> @initialLoadComplete
# FIXME: This should be moved to WorkspaceElement
addActiveThemeClasses: ->
workspaceElement = atom.views.getView(atom.workspace)
for pack in @getActiveThemes()
workspaceElement.classList.add("theme-#{pack.name}")
if workspaceElement = document.querySelector('atom-workspace')
for pack in @getActiveThemes()
workspaceElement.classList.add("theme-#{pack.name}")
return
# FIXME: This should be moved to WorkspaceElement
removeActiveThemeClasses: ->
workspaceElement = atom.views.getView(atom.workspace)
for pack in @getActiveThemes()
workspaceElement.classList.remove("theme-#{pack.name}")
if workspaceElement = document.querySelector('atom-workspace')
for pack in @getActiveThemes()
workspaceElement.classList.remove("theme-#{pack.name}")
return
refreshLessCache: ->
+5 -9
Ver Arquivo
@@ -1,5 +1,6 @@
{Disposable} = require 'event-kit'
Grim = require 'grim'
ViewRegistry = require './view-registry'
# Essential: `ViewFactory` handles the association between model and view
# types in Atom. We call this association a View Provider. As in, for a given
@@ -42,8 +43,8 @@ Grim = require 'grim'
module.exports =
class ViewFactory
constructor: ->
@views = new WeakMap
@providers = []
@deprecatedViewRegistry = new ViewRegistry(this)
# Essential: Add a provider that will be used to construct views in the
# workspace's view layer based on model objects in its model layer.
@@ -113,14 +114,8 @@ class ViewFactory
#
# Returns a DOM element.
getView: (object) ->
return unless object?
if view = @views.get(object)
view
else
view = @createView(object)
@views.set(object, view)
view
Grim.deprecate("Call ::getView on the workspace element instead. The atom.views global is only intended to create views.")
@deprecatedViewRegistry.getView(object)
createView: (object, params) ->
if object instanceof HTMLElement
@@ -130,6 +125,7 @@ class ViewFactory
object[0]
else if provider = @findProvider(object)
params ?= {}
params.viewFactory = this
params.model = object
element = provider.createView?(params)
unless element?
+14
Ver Arquivo
@@ -0,0 +1,14 @@
module.exports =
class ViewRegistry
constructor: (@viewFactory) ->
@views = new WeakMap
getView: (object) ->
return unless object?
if view = @views.get(object)
view
else
view = @viewFactory.createView(object, viewRegistry: this)
@views.set(object, view)
view
+4 -2
Ver Arquivo
@@ -32,12 +32,14 @@ class WindowEventHandler
# FIXME: Remove this when deprecations are removed
{releaseVersion, releaseNotes} = detail
detail = [releaseVersion, releaseNotes]
atom.commands.dispatch atom.views.getView(atom.workspace), "window:update-available", detail
if workspaceElement = document.querySelector('atom-workspace')
atom.commands.dispatch workspaceElement, "window:update-available", detail
@subscribe ipc, 'command', (command, args...) ->
activeElement = document.activeElement
# Use the workspace element view if body has focus
if activeElement is document.body and workspaceElement = atom.views.getView(atom.workspace)
if activeElement is document.body and workspaceElement = document.querySelector('atom-workspace')
activeElement = workspaceElement
atom.commands.dispatch(activeElement, command, args[0])
+16 -8
Ver Arquivo
@@ -9,6 +9,8 @@ WorkspaceView = null
module.exports =
class WorkspaceElement extends HTMLElement
globalTextEditorStyleSheet: null
viewRegistry: null
model: null
createdCallback: ->
@subscriptions = new CompositeDisposable
@@ -62,19 +64,20 @@ class WorkspaceElement extends HTMLElement
WorkspaceView ?= require './workspace-view'
@__spacePenView = new WorkspaceView(this)
getModel: -> @model
initialize: ({@viewFactory, @model}) ->
@viewRegistry = @viewFactory.deprecatedViewRegistry
atom.views.deprecatedViewRegistry = @viewRegistry
initialize: ({@model}) ->
@paneContainer = atom.views.getView(@model.paneContainer)
@paneContainer = @viewRegistry.getView(@model.paneContainer)
@verticalAxis.appendChild(@paneContainer)
@addEventListener 'focus', @handleFocus.bind(this)
@panelContainers =
top: atom.views.getView(@model.panelContainers.top)
left: atom.views.getView(@model.panelContainers.left)
right: atom.views.getView(@model.panelContainers.right)
bottom: atom.views.getView(@model.panelContainers.bottom)
modal: atom.views.getView(@model.panelContainers.modal)
top: @viewRegistry.getView(@model.panelContainers.top)
left: @viewRegistry.getView(@model.panelContainers.left)
right: @viewRegistry.getView(@model.panelContainers.right)
bottom: @viewRegistry.getView(@model.panelContainers.bottom)
modal: @viewRegistry.getView(@model.panelContainers.modal)
@horizontalAxis.insertBefore(@panelContainers.left, @verticalAxis)
@horizontalAxis.appendChild(@panelContainers.right)
@@ -86,6 +89,11 @@ class WorkspaceElement extends HTMLElement
@__spacePenView.setModel(@model)
getModel: -> @model
getView: (item) ->
@viewRegistry.getView(item)
setTextEditorFontSize: (fontSize) ->
@updateGlobalEditorStyle('font-size', fontSize + 'px')
+1 -1
Ver Arquivo
@@ -59,7 +59,7 @@ class WorkspaceView extends View
constructor: (@element) ->
unless @element?
return atom.views.getView(atom.workspace).__spacePenView
return atom.views.createView(atom.workspace).__spacePenView
super
@deprecateViewEvents()