mirror of
https://github.com/pulsar-edit/pulsar.git
synced 2024-11-10 18:24:09 +03:00
9a9347e3a5
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>
144 lines
5.7 KiB
CoffeeScript
144 lines
5.7 KiB
CoffeeScript
Panel = require '../src/panel'
|
|
PanelElement = require '../src/panel-element'
|
|
PanelContainer = require '../src/panel-container'
|
|
PanelContainerElement = require '../src/panel-container-element'
|
|
|
|
describe "PanelContainerElement", ->
|
|
[jasmineContent, element, container] = []
|
|
|
|
class TestPanelContainerItem
|
|
constructior: ->
|
|
|
|
class TestPanelContainerItemElement extends HTMLElement
|
|
createdCallback: ->
|
|
@classList.add('test-root')
|
|
initialize: (@model) ->
|
|
this
|
|
|
|
TestPanelContainerItemElement = document.registerElement 'atom-test-container-item-element', prototype: TestPanelContainerItemElement.prototype
|
|
|
|
beforeEach ->
|
|
jasmineContent = document.body.querySelector('#jasmine-content')
|
|
|
|
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)
|
|
jasmineContent.appendChild(element)
|
|
|
|
it 'has a location class with value from the model', ->
|
|
expect(element).toHaveClass 'left'
|
|
|
|
it 'removes the element when the container is destroyed', ->
|
|
expect(element.parentNode).toBe jasmineContent
|
|
container.destroy()
|
|
expect(element.parentNode).not.toBe jasmineContent
|
|
|
|
describe "adding and removing panels", ->
|
|
it "allows panels to be inserted at any position", ->
|
|
panel1 = new Panel({item: new TestPanelContainerItem(), priority: 10})
|
|
panel2 = new Panel({item: new TestPanelContainerItem(), priority: 5})
|
|
panel3 = new Panel({item: new TestPanelContainerItem(), priority: 8})
|
|
|
|
container.addPanel(panel1)
|
|
container.addPanel(panel2)
|
|
container.addPanel(panel3)
|
|
|
|
expect(element.childNodes[2].getModel()).toBe(panel1)
|
|
expect(element.childNodes[1].getModel()).toBe(panel3)
|
|
expect(element.childNodes[0].getModel()).toBe(panel2)
|
|
|
|
describe "when the container is at the left location", ->
|
|
it "adds atom-panel elements when a new panel is added to the container; removes them when the panels are destroyed", ->
|
|
expect(element.childNodes.length).toBe 0
|
|
|
|
panel1 = new Panel({item: new TestPanelContainerItem()})
|
|
container.addPanel(panel1)
|
|
expect(element.childNodes.length).toBe 1
|
|
expect(element.childNodes[0]).toHaveClass 'left'
|
|
expect(element.childNodes[0]).toHaveClass 'tool-panel' # legacy selector support
|
|
expect(element.childNodes[0]).toHaveClass 'panel-left' # legacy selector support
|
|
|
|
expect(element.childNodes[0].tagName).toBe 'ATOM-PANEL'
|
|
|
|
panel2 = new Panel({item: new TestPanelContainerItem()})
|
|
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'
|
|
|
|
panel1.destroy()
|
|
expect(element.childNodes.length).toBe 1
|
|
|
|
panel2.destroy()
|
|
expect(element.childNodes.length).toBe 0
|
|
|
|
describe "when the container is at the bottom location", ->
|
|
beforeEach ->
|
|
container = new PanelContainer({location: 'bottom'})
|
|
element = atom.views.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", ->
|
|
expect(element.childNodes.length).toBe 0
|
|
|
|
panel1 = new Panel({item: new TestPanelContainerItem(), className: 'one'})
|
|
container.addPanel(panel1)
|
|
expect(element.childNodes.length).toBe 1
|
|
expect(element.childNodes[0]).toHaveClass 'bottom'
|
|
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'
|
|
|
|
panel2 = new Panel({item: new TestPanelContainerItem(), className: 'two'})
|
|
container.addPanel(panel2)
|
|
expect(element.childNodes.length).toBe 2
|
|
expect(atom.views.getView(panel2)).toHaveClass 'two'
|
|
|
|
panel1.destroy()
|
|
expect(element.childNodes.length).toBe 1
|
|
|
|
panel2.destroy()
|
|
expect(element.childNodes.length).toBe 0
|
|
|
|
describe "when the container is modal", ->
|
|
beforeEach ->
|
|
container = new PanelContainer({location: 'modal'})
|
|
element = atom.views.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'
|
|
|
|
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'
|
|
|
|
panel1.show()
|
|
|
|
expect(atom.views.getView(panel1).style.display).not.toBe 'none'
|
|
expect(atom.views.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'
|
|
|
|
# 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'
|