dockview
Version:
Zero dependency layout manager supporting tabs, grids and splitviews with ReactJS support
44 lines (43 loc) • 1.6 kB
JavaScript
export class HostedPanel {
constructor(panel, options) {
this.panel = panel;
this.options = options;
if (!options.parent) {
options.parent = document.getElementById('app');
options.parent.style.position = 'relative';
}
this._element = document.createElement('div');
this._element.style.visibility = 'hidden';
this._element.style.overflow = 'hidden';
// this._element.style.pointerEvents = 'none';
this._element.id = `webivew-${options.id}`;
options.parent.appendChild(this._element);
}
get element() {
return this._element;
}
get id() {
return this.panel.id;
}
hide() {
this._element.style.visibility = 'hidden';
}
show() {
this._element.style.visibility = 'visible';
}
layout(element, dimension) {
if (!this.element || !this.element.parentElement) {
return;
}
const frameRect = element.getBoundingClientRect();
const containerRect = this.element.parentElement.getBoundingClientRect();
this.element.style.position = 'absolute';
this.element.style.top = `${frameRect.top - containerRect.top}px`;
this.element.style.left = `${frameRect.left - containerRect.left}px`;
this.element.style.width = `${dimension ? dimension.width : frameRect.width}px`;
this.element.style.height = `${dimension ? dimension.height : frameRect.height}px`;
}
dispose() {
this._element.remove();
}
}