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 })