Enforce modal

This commit is contained in:
Ben Ogle
2014-11-04 14:58:00 -08:00
parent 8485831f40
commit 5bd028b24e
3 changed files with 38 additions and 0 deletions

View File

@@ -57,8 +57,34 @@ describe "PanelContainerElement", ->
container.addPanel(panel2)
expect(element.childNodes.length).toBe 2
expect(panel1.getView().style.display).not.toBe 'none'
expect(panel2.getView().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 modal", ->
beforeEach ->
container = new PanelContainer({viewRegistry, location: 'modal'})
element = container.getView()
jasmineContent.appendChild(element)
it "allows only one panel to be visible at a time", ->
panel1 = new Panel({viewRegistry, item: new TestPanelContainerItem()})
container.addPanel(panel1)
expect(panel1.getView().style.display).not.toBe 'none'
panel2 = new Panel({viewRegistry, item: new TestPanelContainerItem()})
container.addPanel(panel2)
expect(panel1.getView().style.display).toBe 'none'
expect(panel2.getView().style.display).not.toBe 'none'
panel1.show()
expect(panel1.getView().style.display).not.toBe 'none'
expect(panel2.getView().style.display).toBe 'none'

View File

@@ -22,6 +22,11 @@ class PanelContainerElement extends HTMLElement
referenceItem = @childNodes[index + 1]
@insertBefore(panelElement, referenceItem)
if @model.isModal()
@enforceModalityFor(panel)
@subscriptions.add panel.onDidChangeVisible (visible) =>
@enforceModalityFor(panel) if visible
panelRemoved: ({panel, index}) ->
@removeChild(@childNodes[index])
@@ -29,4 +34,9 @@ class PanelContainerElement extends HTMLElement
@subscriptions.dispose()
@parentNode?.removeChild(this)
enforceModalityFor: (excludedPanel) ->
for panel in @model.getPanels()
panel.hide() unless panel is excludedPanel
return
module.exports = PanelContainerElement = document.registerElement 'atom-panel-container', prototype: PanelContainerElement.prototype

View File

@@ -34,6 +34,8 @@ class PanelContainer
getLocation: -> @location
isModal: -> @location is 'modal'
getPanels: -> @panels
addPanel: (panel) ->