dockview
Version:
Zero dependency layout manager supporting tabs, grids and splitviews with ReactJS support
73 lines (72 loc) • 2.86 kB
JavaScript
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();
}
}