Files
atom/src/pane-container-element.js
2018-02-23 14:39:57 -08:00

41 lines
1.1 KiB
JavaScript

const {CompositeDisposable} = require('event-kit')
class PaneContainerElement extends HTMLElement {
createdCallback () {
this.subscriptions = new CompositeDisposable()
this.classList.add('panes')
}
initialize (model, {views}) {
this.model = model
this.views = views
if (this.views == null) {
throw new Error('Must pass a views parameter when initializing PaneContainerElements')
}
this.subscriptions.add(this.model.observeRoot(this.rootChanged.bind(this)))
return this
}
rootChanged (root) {
const focusedElement = this.hasFocus() ? document.activeElement : null
if (this.firstChild != null) {
this.firstChild.remove()
}
if (root != null) {
const view = this.views.getView(root)
this.appendChild(view)
if (focusedElement != null) {
focusedElement.focus()
}
}
}
hasFocus () {
return this === document.activeElement || this.contains(document.activeElement)
}
}
module.exports = document.registerElement('atom-pane-container', {
prototype: PaneContainerElement.prototype
})