UNPKG

dockview

Version:

Zero dependency layout manager supporting tabs, grids and splitviews with ReactJS support

73 lines (72 loc) 2.86 kB
import { CompositeDisposable, MutableDisposable, } from '../../lifecycle'; import { Emitter } from '../../events'; import { trackFocus } from '../../dom'; export class ContentContainer extends CompositeDisposable { constructor() { super(); this.disposable = new MutableDisposable(); this._onDidFocus = new Emitter(); this.onDidFocus = this._onDidFocus.event; this._onDidBlur = new Emitter(); this.onDidBlur = this._onDidBlur.event; this._element = document.createElement('div'); this._element.className = 'content-container'; this._element.tabIndex = -1; // for hosted containers // 1) register a drop target on the host // 2) register window dragStart events to disable pointer events // 3) register dragEnd events // 4) register mouseMove events (if no buttons are present we take this as a dragEnd event) } get element() { return this._element; } show() { this.element.style.display = ''; } hide() { this.element.style.display = 'none'; } openPanel(panel) { var _a; if (this.panel === panel) { return; } if (this.panel) { if ((_a = this.panel.view) === null || _a === void 0 ? void 0 : _a.content) { this._element.removeChild(this.panel.view.content.element); } this.panel = undefined; } this.panel = panel; const disposable = new CompositeDisposable(); if (this.panel.view) { const _onDidFocus = this.panel.view.content.onDidFocus; const _onDidBlur = this.panel.view.content.onDidBlur; const { onDidFocus, onDidBlur } = trackFocus(this._element); disposable.addDisposables(onDidFocus(() => this._onDidFocus.fire()), onDidBlur(() => this._onDidBlur.fire())); if (_onDidFocus) { disposable.addDisposables(_onDidFocus(() => this._onDidFocus.fire())); } if (_onDidBlur) { disposable.addDisposables(_onDidBlur(() => this._onDidBlur.fire())); } this._element.appendChild(this.panel.view.content.element); } this.disposable.value = disposable; } layout(width, height) { // noop } closePanel() { var _a, _b, _c; if ((_c = (_b = (_a = this.panel) === null || _a === void 0 ? void 0 : _a.view) === null || _b === void 0 ? void 0 : _b.content) === null || _c === void 0 ? void 0 : _c.element) { this._element.removeChild(this.panel.view.content.element); this.panel = undefined; } } dispose() { this.disposable.dispose(); super.dispose(); } }