ucbuilder
Version:
For Developing Applications with multiple form/usercontrols etc.. In Single BrowserWindow...
97 lines (92 loc) • 3.19 kB
text/typescript
import { Rect } from "ucbuilder/global/drawing/shapes";
import { newObjectOpt } from "ucbuilder/global/objectOpt";
import { Usercontrol } from "ucbuilder/Usercontrol";
export interface MeasurementRow {
size: number | undefined;
data: Record<string, any>;
}
export interface GridResizerInitOptions {
grid: HTMLElement;
nodeName: string;
}
const gridResizerInitOptions: GridResizerInitOptions = {
grid: undefined,
nodeName: ''
}
export interface NamingConversion {
offsetSize: string;
splitterText: string;
gridTemplate: GridTemplateType;
gridAuto: GridAutoType;
point: string;
size: string;
dir: string;
pagePoint: string;
OPPOSITE: {
scrollPoint: string;
scrollSize: string;
};
}
const namingConversion: NamingConversion = {
offsetSize: 'offsetWidth',
splitterText: 'splitter-width',
gridTemplate: 'grid-template-columns',
gridAuto: 'grid-auto-rows',
point: 'x',
size: 'width',
dir: 'left',
pagePoint: 'pageX',
OPPOSITE: {
scrollPoint: "scrollTop",
scrollSize: "scrollBarHeight",
}
}
export const getConvertedNames = (gridTemplate: GridTemplateType = 'grid-template-columns'): NamingConversion => {
let _rtrn = newObjectOpt.clone(namingConversion);
if (gridTemplate == "grid-template-rows") {
_rtrn.offsetSize = "offsetHeight";
_rtrn.splitterText = "splitter-height";
_rtrn.gridTemplate = 'grid-template-rows';
_rtrn.gridAuto = "grid-auto-columns";
_rtrn.size = "height";
_rtrn.point = "y";
_rtrn.dir = "top";
_rtrn.pagePoint = "pageY";
_rtrn.OPPOSITE = {
scrollPoint: "scrollLeft",
scrollSize: "scrollBarWidth",
};
}
return _rtrn;
}
type GridTemplateType = "grid-template-columns" | "grid-template-rows";
type GridAutoType = "grid-auto-columns" | "grid-auto-rows";
type ResizeMode = "slider" | "unfill";
export class GridResizer {
static boundContainers: HTMLElement[] = [];
options: GridResizerInitOptions = {
grid: undefined,
nodeName: ''
};
dgvDomRect: Rect = new Rect();
measurement: MeasurementRow[] = [];
resizeMode: ResizeMode = "unfill";
get measureText(): string {
return this.measurement.length <= 1 ? "auto" : this.measurement.map(s => s.size).slice(0, -1).join("px ") + "px auto";
}
gridTemplate: GridTemplateType = namingConversion.gridTemplate;
gridAuto: GridAutoType = "grid-auto-rows";
refreshView(): void {
this.options.grid.style[this.gridTemplate] = this.measureText;
}
get hasDefinedStyles(): boolean {
return this.options?.grid?.style[this.gridTemplate] !== "";
}
constructor() { }
init(options: GridResizerInitOptions) {
this.options = newObjectOpt.copyProps(options, gridResizerInitOptions);
}
static getConvertedNames(gridTemplate: "grid-template-columns" | "grid-template-rows" = "grid-template-columns"): NamingConversion {
return getConvertedNames(gridTemplate);
}
}