From 5bd028b24e17afd00cd5dbe1184b1bd8907b6956 Mon Sep 17 00:00:00 2001 From: Ben Ogle Date: Tue, 4 Nov 2014 14:58:00 -0800 Subject: [PATCH] Enforce modal --- spec/panel-container-element-spec.coffee | 26 ++++++++++++++++++++++++ src/panel-container-element.coffee | 10 +++++++++ src/panel-container.coffee | 2 ++ 3 files changed, 38 insertions(+) diff --git a/spec/panel-container-element-spec.coffee b/spec/panel-container-element-spec.coffee index 6dd6a0183..12e28e04d 100644 --- a/spec/panel-container-element-spec.coffee +++ b/spec/panel-container-element-spec.coffee @@ -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' diff --git a/src/panel-container-element.coffee b/src/panel-container-element.coffee index d6dccdcbb..0b07c1ecc 100644 --- a/src/panel-container-element.coffee +++ b/src/panel-container-element.coffee @@ -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 diff --git a/src/panel-container.coffee b/src/panel-container.coffee index 4bf7e30ba..24d48eac1 100644 --- a/src/panel-container.coffee +++ b/src/panel-container.coffee @@ -34,6 +34,8 @@ class PanelContainer getLocation: -> @location + isModal: -> @location is 'modal' + getPanels: -> @panels addPanel: (panel) ->