mirror of
https://github.com/atom/atom.git
synced 2026-01-22 21:38:10 -05:00
48 lines
1.5 KiB
CoffeeScript
48 lines
1.5 KiB
CoffeeScript
{CompositeDisposable} = require 'event-kit'
|
|
|
|
class PanelContainerElement extends HTMLElement
|
|
createdCallback: ->
|
|
@subscriptions = new CompositeDisposable
|
|
|
|
initialize: (@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())
|
|
this
|
|
|
|
getModel: -> @model
|
|
|
|
panelAdded: ({panel, index}) ->
|
|
panelElement = atom.views.getView(panel)
|
|
panelElement.classList.add(@model.getLocation())
|
|
if @model.isModal()
|
|
panelElement.classList.add("overlay", "from-top")
|
|
else
|
|
panelElement.classList.add("tool-panel", "panel-#{@model.getLocation()}")
|
|
|
|
if index >= @childNodes.length
|
|
@appendChild(panelElement)
|
|
else
|
|
referenceItem = @childNodes[index]
|
|
@insertBefore(panelElement, referenceItem)
|
|
|
|
if @model.isModal()
|
|
@hideAllPanelsExcept(panel)
|
|
@subscriptions.add panel.onDidChangeVisible (visible) =>
|
|
@hideAllPanelsExcept(panel) if visible
|
|
|
|
panelRemoved: ({panel, index}) ->
|
|
@removeChild(atom.views.getView(panel))
|
|
|
|
destroyed: ->
|
|
@subscriptions.dispose()
|
|
@parentNode?.removeChild(this)
|
|
|
|
hideAllPanelsExcept: (excludedPanel) ->
|
|
for panel in @model.getPanels()
|
|
panel.hide() unless panel is excludedPanel
|
|
return
|
|
|
|
module.exports = PanelContainerElement = document.registerElement 'atom-panel-container', prototype: PanelContainerElement.prototype
|