dbmsv2/public/js/admin/resizeTable.js
2025-08-14 18:36:09 +09:00

843 lines
38 KiB
JavaScript

(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.validide_resizableTableColumns = {}));
})(this, (function (exports) {
'use strict';
var ResizableConstants = /** @class */ (function () {
function ResizableConstants() {
}
ResizableConstants.dataPropertyName = 'validide_rtc_data_object';
ResizableConstants.classes = {
table: 'rtc-table',
wrapper: 'rtc-wrapper',
handleContainer: 'rtc-handle-container',
handle: 'rtc-handle',
tableResizing: 'rtc-table-resizing',
columnResizing: 'rtc-column-resizing',
};
ResizableConstants.attributes = {
dataResizable: 'data-rtc-resizable',
dataResizableTable: 'data-rtc-resizable-table'
};
ResizableConstants.data = {
resizable: 'rtcResizable',
resizableTable: 'rtcResizableTable'
};
ResizableConstants.events = {
pointerDown: ['mousedown', 'touchstart'],
pointerMove: ['mousemove', 'touchmove'],
pointerUp: ['mouseup', 'touchend'],
windowResize: ['resize'],
eventResizeStart: 'eventResizeStart.rtc',
eventResize: 'eventResize.rtc',
eventResizeStop: 'eventResizeStop.rtc'
};
return ResizableConstants;
}());
var WidthsData = /** @class */ (function () {
function WidthsData() {
this.column = 0;
this.table = 0;
}
return WidthsData;
}());
var PointerData = /** @class */ (function () {
function PointerData() {
this.x = null;
this.isDoubleClick = false;
}
return PointerData;
}());
var ResizableEventData = /** @class */ (function () {
function ResizableEventData(column, dragHandler) {
this.pointer = new PointerData();
this.originalWidths = new WidthsData();
this.newWidths = new WidthsData();
this.column = column;
this.dragHandler = dragHandler;
}
return ResizableEventData;
}());
var Utilities = /** @class */ (function () {
function Utilities() {
}
Utilities.kebabCaseToCamelCase = function (str) {
return str.replace(Utilities.kebabCaseRegex, function (m) { return m[1].toUpperCase(); });
};
Utilities.parseStringToType = function (str) {
if (str.length == 0 || Utilities.onlyWhiteSpace.test(str))
return str;
if (Utilities.trueRegex.test(str))
return true;
if (Utilities.falseRegex.test(str))
return false;
if (Utilities.notEmptyOrWhiteSpace.test(str)) {
var temp = +str;
if (!isNaN(temp))
return temp;
}
return str;
};
Utilities.regexEscapeRegex = /[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g;
Utilities.kebabCaseRegex = /(\-\w)/g;
Utilities.trueRegex = /^true$/i;
Utilities.falseRegex = /^false$/i;
Utilities.onlyWhiteSpace = /^\s$/;
Utilities.notEmptyOrWhiteSpace = /\S/;
return Utilities;
}());
var UtilitiesDOM = /** @class */ (function () {
function UtilitiesDOM() {
}
UtilitiesDOM.getDataAttributesValues = function (el) {
if (!el)
return null;
var returnValue = {};
if (el.dataset) {
for (var prop in el.dataset) {
if (el.dataset.hasOwnProperty(prop)) {
returnValue[prop] = Utilities.parseStringToType(el.dataset[prop] || '');
}
}
}
else {
for (var i = 0; i < el.attributes.length; i++) {
if (!/^data\-/.test(el.attributes[i].name))
continue;
var name_1 = Utilities.kebabCaseToCamelCase(el.attributes[i].name.replace('data-', ''));
returnValue[name_1] = Utilities.parseStringToType(el.attributes[i].value);
}
}
return returnValue;
};
return UtilitiesDOM;
}());
var ResizableOptions = /** @class */ (function () {
function ResizableOptions(options, element) {
if (options === void 0) { options = null; }
if (element === void 0) { element = null; }
this.resizeFromBody = true;
this.minWidth = 40;
this.maxWidth = null;
this.doubleClickDelay = 500;
this.maxInitialWidthHint = null;
this.store = null;
this.overrideValues(options);
this.overrideValuesFromElement(element);
}
ResizableOptions.prototype.overrideValues = function (options) {
if (options === void 0) { options = null; }
if (!options)
return;
for (var prop in options) {
if (this.hasOwnProperty(prop)) {
this[prop] = options[prop];
}
}
};
ResizableOptions.prototype.overrideValuesFromElement = function (element) {
if (element === void 0) { element = null; }
if (!element)
return;
var elementOptions = UtilitiesDOM.getDataAttributesValues(element);
this.overrideValues(elementOptions);
};
return ResizableOptions;
}());
var ResizableTableColumns = /** @class */ (function () {
function ResizableTableColumns(table, options) {
if (typeof table !== 'object' || table === null || table.toString() !== '[object HTMLTableElement]')
throw 'Invalid argument: "table".\nResizableTableColumns requires that the table element is a not null HTMLTableElement object!';
if (typeof table[ResizableConstants.dataPropertyName] !== 'undefined')
throw "Existing \"".concat(ResizableConstants.dataPropertyName, "\" property.\nTable element already has a '").concat(ResizableConstants.dataPropertyName, "' attached object!");
this.id = ResizableTableColumns.getInstanceId();
this.table = table;
this.options = new ResizableOptions(options, table);
this.wrapper = null;
this.ownerDocument = table.ownerDocument;
this.tableHeaders = [];
this.dragHandlesContainer = null;
this.originalWidths = [];
this.eventData = null;
this.lastPointerDown = 0;
this.init();
this.table[ResizableConstants.dataPropertyName] = this;
}
ResizableTableColumns.prototype.init = function () {
this.validateMarkup();
this.createHandlerReferences();
this.wrapTable();
this.assignTableHeaders();
this.storeOriginalWidths();
this.setHeaderWidths();
this.createDragHandles();
this.restoreColumnWidths();
this.checkTableWidth();
this.syncHandleWidths();
this.registerWindowResizeHandler();
};
ResizableTableColumns.prototype.dispose = function () {
this.destroyDragHandles();
this.restoreOriginalWidths();
this.unwrapTable();
this.onPointerDownRef = null;
this.onPointerMoveRef = null;
this.onPointerUpRef = null;
this.table[ResizableConstants.dataPropertyName] = void (0);
};
ResizableTableColumns.prototype.validateMarkup = function () {
var theadCount = 0;
var tbodyCount = 0;
var thead = null;
for (var index = 0; index < this.table.childNodes.length; index++) {
var element = this.table.childNodes[index];
if (element.nodeName === 'THEAD') {
theadCount++;
thead = element;
}
else if (element.nodeName === 'TBODY') {
tbodyCount++;
}
}
if (thead === null || theadCount !== 1)
throw "Markup validation: thead count.\nResizableTableColumns requires that the table element has one(1) table head element. Current count: ".concat(theadCount);
if (tbodyCount !== 1)
throw "Markup validation: tbody count.\nResizableTableColumns requires that the table element has one(1) table body element. Current count: ".concat(tbodyCount);
var theadRowCount = 0;
var firstRow = null;
for (var index = 0; index < thead.childNodes.length; index++) {
var element = thead.childNodes[index];
if (element.nodeName === 'TR') {
theadRowCount++;
if (firstRow === null) {
firstRow = element;
}
}
}
if (firstRow === null || theadRowCount < 1)
throw "Markup validation: thead row count.\nResizableTableColumns requires that the table head element has at least one(1) table row element. Current count: ".concat(theadRowCount);
var headerCellsCount = 0;
var invalidHeaderCellsCount = 0;
for (var index = 0; index < firstRow.childNodes.length; index++) {
var element = firstRow.childNodes[index];
if (element.nodeName === 'TH') {
headerCellsCount++;
}
else if (element.nodeName === 'TD') {
invalidHeaderCellsCount++;
}
}
if (headerCellsCount < 1)
throw "Markup validation: thead first row cells count.\nResizableTableColumns requires that the table head's first row element has at least one(1) table header cell element. Current count: ".concat(headerCellsCount);
if (invalidHeaderCellsCount !== 0)
throw "Markup validation: thead first row invalid.\nResizableTableColumns requires that the table head's first row element has no(0) table cell(TD) elements. Current count: ".concat(invalidHeaderCellsCount);
};
ResizableTableColumns.prototype.wrapTable = function () {
if (this.wrapper)
return;
this.wrapper = this.ownerDocument.createElement('div');
this.wrapper.classList.add(ResizableConstants.classes.wrapper);
var tableOriginalParent = this.table.parentNode;
tableOriginalParent.insertBefore(this.wrapper, this.table);
tableOriginalParent.removeChild(this.table);
this.wrapper.appendChild(this.table);
this.table.classList.add(ResizableConstants.classes.table);
};
ResizableTableColumns.prototype.unwrapTable = function () {
this.table.classList.remove(ResizableConstants.classes.table);
if (!this.wrapper)
return;
var tableOriginalParent = this.wrapper.parentNode;
tableOriginalParent.insertBefore(this.table, this.wrapper);
tableOriginalParent.removeChild(this.wrapper);
this.wrapper = null;
};
ResizableTableColumns.prototype.assignTableHeaders = function () {
var tableHeader;
var firstTableRow;
for (var index = 0; index < this.table.childNodes.length; index++) {
var element = this.table.childNodes[index];
if (element.nodeName === 'THEAD') {
tableHeader = element;
break;
}
}
if (!tableHeader)
return;
for (var index = 0; index < tableHeader.childNodes.length; index++) {
var element = tableHeader.childNodes[index];
if (element.nodeName === 'TR') {
firstTableRow = element;
break;
}
}
if (!firstTableRow)
return;
for (var index = 0; index < firstTableRow.childNodes.length; index++) {
var element = firstTableRow.childNodes[index];
if (element.nodeName === 'TH') {
this.tableHeaders.push(element);
}
}
};
ResizableTableColumns.prototype.storeOriginalWidths = function () {
var _this = this;
this.tableHeaders
.forEach(function (el) {
_this.originalWidths.push({
el: el,
detail: el.style.width
});
});
this.originalWidths.push({
el: this.table,
detail: this.table.style.width
});
};
ResizableTableColumns.prototype.restoreOriginalWidths = function () {
this.originalWidths
.forEach(function (itm) {
itm.el.style.width = itm.detail;
});
};
ResizableTableColumns.prototype.setHeaderWidths = function () {
var _this = this;
this.tableHeaders
.forEach(function (el) {
var width = el.offsetWidth;
var constrainedWidth = _this.constrainWidth(el, width);
if (typeof _this.options.maxInitialWidthHint === 'number') {
constrainedWidth = Math.min(constrainedWidth, _this.options.maxInitialWidthHint);
}
_this.updateWidth(el, constrainedWidth, true, false);
});
};
ResizableTableColumns.prototype.constrainWidth = function (el, width) {
var result = width;
result = Math.max(result, this.options.minWidth || -Infinity);
result = Math.min(result, this.options.maxWidth || +Infinity);
return result;
};
ResizableTableColumns.prototype.createDragHandles = function () {
var _this = this;
var _a;
if (this.dragHandlesContainer != null)
throw 'Drag handlers already created. Call <destroyDragHandles> if you wish to recreate them';
this.dragHandlesContainer = this.ownerDocument.createElement('div');
(_a = this.wrapper) === null || _a === void 0 ? void 0 : _a.insertBefore(this.dragHandlesContainer, this.table);
this.dragHandlesContainer.classList.add(ResizableConstants.classes.handleContainer);
this.getResizableHeaders()
.forEach(function () {
var _a;
var handler = _this.ownerDocument.createElement('div');
handler.classList.add(ResizableConstants.classes.handle);
(_a = _this.dragHandlesContainer) === null || _a === void 0 ? void 0 : _a.appendChild(handler);
});
ResizableConstants.events.pointerDown
.forEach(function (evt, evtIdx) {
var _a;
(_a = _this.dragHandlesContainer) === null || _a === void 0 ? void 0 : _a.addEventListener(evt, _this.onPointerDownRef, false);
});
};
ResizableTableColumns.prototype.destroyDragHandles = function () {
var _this = this;
var _a, _b;
if (this.dragHandlesContainer !== null) {
ResizableConstants.events.pointerDown
.forEach(function (evt, evtIdx) {
var _a;
(_a = _this.dragHandlesContainer) === null || _a === void 0 ? void 0 : _a.removeEventListener(evt, _this.onPointerDownRef, false);
});
(_b = (_a = this.dragHandlesContainer) === null || _a === void 0 ? void 0 : _a.parentElement) === null || _b === void 0 ? void 0 : _b.removeChild(this.dragHandlesContainer);
}
};
ResizableTableColumns.prototype.getDragHandlers = function () {
var nodes = this.dragHandlesContainer == null
? null
: this.dragHandlesContainer.querySelectorAll(".".concat(ResizableConstants.classes.handle));
return nodes
? Array.prototype.slice.call(nodes).filter(function (el) { return el.nodeName === 'DIV'; })
: new Array();
};
ResizableTableColumns.prototype.restoreColumnWidths = function () {
if (!this.options.store)
return;
var tableId = ResizableTableColumns.generateTableId(this.table);
if (tableId.length === 0)
return;
var data = this.options.store.get(tableId);
if (!data)
return;
this.getResizableHeaders()
.forEach(function (el) {
var width = data.columns[ResizableTableColumns.generateColumnId(el)];
if (typeof width !== 'undefined') {
ResizableTableColumns.setWidth(el, width);
}
});
if (typeof data.table !== 'undefined') {
ResizableTableColumns.setWidth(this.table, data.table);
}
};
ResizableTableColumns.prototype.checkTableWidth = function () {
var _a;
var wrapperWidth = this.wrapper.clientWidth;
var tableWidth = this.table.offsetWidth;
var difference = wrapperWidth - tableWidth;
if (difference <= 0)
return;
var resizableWidth = 0;
var addedWidth = 0;
var headersDetails = [];
this.tableHeaders
.forEach(function (el, idx) {
if (el.hasAttribute(ResizableConstants.attributes.dataResizable)) {
var detail = {
el: el,
detail: el.offsetWidth
};
headersDetails.push(detail);
resizableWidth += detail.detail;
}
});
var leftToAdd = 0;
var lastResizableCell = null;
var currentDetail;
while ((currentDetail = headersDetails.shift())) {
leftToAdd = difference - addedWidth;
lastResizableCell = currentDetail.el;
var extraWidth = Math.floor((currentDetail.detail / resizableWidth) * difference);
extraWidth = Math.min(extraWidth, leftToAdd);
var newWidth = this.updateWidth(currentDetail.el, currentDetail.detail + extraWidth, false, true);
addedWidth += (newWidth - currentDetail.detail);
if (addedWidth >= difference)
break;
}
leftToAdd = difference - addedWidth;
if (leftToAdd > 0) {
var lastCell = ((_a = headersDetails[0]) === null || _a === void 0 ? void 0 : _a.el) || lastResizableCell || this.tableHeaders[this.tableHeaders.length - 1];
var lastCellWidth = lastCell.offsetWidth;
this.updateWidth(lastCell, lastCellWidth, true, true);
}
ResizableTableColumns.setWidth(this.table, wrapperWidth);
};
ResizableTableColumns.prototype.syncHandleWidths = function () {
var _this = this;
var tableWidth = this.table.clientWidth;
ResizableTableColumns.setWidth(this.dragHandlesContainer, tableWidth);
this.dragHandlesContainer.style.minWidth = "".concat(tableWidth, "px");
var headers = this.getResizableHeaders();
this.getDragHandlers()
.forEach(function (el, idx) {
var height = (_this.options.resizeFromBody ? _this.table : _this.table.tHead).clientHeight;
if (idx < headers.length) {
var th = headers[idx];
var left = th.offsetWidth;
left += ResizableTableColumns.getOffset(th).left;
left -= ResizableTableColumns.getOffset(_this.dragHandlesContainer).left;
el.style.left = "".concat(left, "px");
el.style.height = "".concat(height, "px");
}
});
};
ResizableTableColumns.prototype.getResizableHeaders = function () {
return this.tableHeaders
.filter(function (el, idx) {
return el.hasAttribute(ResizableConstants.attributes.dataResizable);
});
};
ResizableTableColumns.prototype.handlePointerDown = function (event) {
this.handlePointerUp();
var target = event ? event.target : null;
if (target == null)
return;
if (target.nodeName !== 'DIV' || !target.classList.contains(ResizableConstants.classes.handle))
return;
if (typeof event.button === 'number' && event.button !== 0)
return; // this is not a left click
var dragHandler = target;
var gripIndex = this.getDragHandlers().indexOf(dragHandler);
var resizableHeaders = this.getResizableHeaders();
if (gripIndex >= resizableHeaders.length)
return;
var millisecondsNow = (new Date()).getTime();
var isDoubleClick = (millisecondsNow - this.lastPointerDown) < this.options.doubleClickDelay;
var column = resizableHeaders[gripIndex];
var columnWidth = column.offsetWidth;
var widths = {
column: columnWidth,
table: this.table.offsetWidth
};
var eventData = new ResizableEventData(column, dragHandler);
eventData.pointer = {
x: ResizableTableColumns.getPointerX(event),
isDoubleClick: isDoubleClick
};
eventData.originalWidths = widths;
eventData.newWidths = widths;
this.detachHandlers(); //make sure we do not have extra handlers
this.attachHandlers();
this.table.classList.add(ResizableConstants.classes.tableResizing);
this.wrapper.classList.add(ResizableConstants.classes.tableResizing);
dragHandler.classList.add(ResizableConstants.classes.columnResizing);
column.classList.add(ResizableConstants.classes.columnResizing);
this.lastPointerDown = millisecondsNow;
this.eventData = eventData;
var eventToDispatch = new CustomEvent(ResizableConstants.events.eventResizeStart, {
detail: {
column: column,
columnWidth: columnWidth,
table: this.table,
tableWidth: this.table.clientWidth
}
});
this.table.dispatchEvent(eventToDispatch);
event.preventDefault();
};
ResizableTableColumns.prototype.handlePointerMove = function (event) {
if (!this.eventData || !event)
return;
var difference = (ResizableTableColumns.getPointerX(event) || 0) - (this.eventData.pointer.x || 0);
if (difference === 0) {
return;
}
var tableWidth = this.eventData.originalWidths.table + difference;
var columnWidth = this.constrainWidth(this.eventData.column, this.eventData.originalWidths.column + difference);
ResizableTableColumns.setWidth(this.table, tableWidth);
ResizableTableColumns.setWidth(this.eventData.column, columnWidth);
this.eventData.newWidths = {
column: columnWidth,
table: tableWidth
};
var eventToDispatch = new CustomEvent(ResizableConstants.events.eventResize, {
detail: {
column: this.eventData.column,
columnWidth: columnWidth,
table: this.table,
tableWidth: tableWidth
}
});
this.table.dispatchEvent(eventToDispatch);
};
ResizableTableColumns.prototype.handlePointerUp = function () {
this.detachHandlers();
if (!this.eventData)
return;
if (this.eventData.pointer.isDoubleClick) {
this.handleDoubleClick();
}
this.table.classList.remove(ResizableConstants.classes.tableResizing);
this.wrapper.classList.remove(ResizableConstants.classes.tableResizing);
this.eventData.dragHandler.classList.remove(ResizableConstants.classes.columnResizing);
this.eventData.column.classList.remove(ResizableConstants.classes.columnResizing);
this.checkTableWidth();
this.syncHandleWidths();
this.refreshWrapperStyle();
this.saveColumnWidths();
var widths = this.eventData.newWidths || this.eventData.originalWidths;
var eventToDispatch = new CustomEvent(ResizableConstants.events.eventResizeStop, {
detail: {
column: this.eventData.column,
columnWidth: widths.column,
table: this.table,
tableWidth: widths.table
}
});
this.table.dispatchEvent(eventToDispatch);
this.eventData = null;
};
ResizableTableColumns.prototype.handleDoubleClick = function () {
if (!this.eventData || !this.eventData.column)
return;
var column = this.eventData.column;
var colIndex = this.tableHeaders.indexOf(column);
var maxWidth = 0;
var indicesToSkip = [];
this.tableHeaders
.forEach(function (el, idx) {
if (!el.hasAttribute(ResizableConstants.attributes.dataResizable)) {
indicesToSkip.push(idx);
}
});
var span = this.ownerDocument.createElement('span');
span.style.position = 'absolute';
span.style.left = '-99999px';
span.style.top = '-99999px';
span.style.visibility = 'hidden';
this.ownerDocument.body.appendChild(span);
var rows = this.table.querySelectorAll('tr');
for (var rowIndex = 0; rowIndex < rows.length; rowIndex++) {
var element = rows[rowIndex];
var cells = element.querySelectorAll('td, th');
var currentIndex = 0;
for (var cellIndex = 0; cellIndex < cells.length; cellIndex++) {
var cell = cells[cellIndex];
var colSpan = 1;
if (cell.hasAttribute('colspan')) {
var colSpanString = cell.getAttribute('colspan') || '1';
var parsed = parseInt(colSpanString);
if (!isNaN(parsed)) {
colSpan = parsed;
}
else {
colSpan = 1;
}
}
if (indicesToSkip.indexOf(cellIndex) === -1
&& colSpan === 1
&& currentIndex === colIndex) {
maxWidth = Math.max(maxWidth, ResizableTableColumns.getTextWidth(cell, span));
break;
}
currentIndex += colSpan;
}
}
this.ownerDocument.body.removeChild(span);
var difference = maxWidth - column.offsetWidth;
if (difference === 0) {
return;
}
var tableWidth = this.eventData.originalWidths.table + difference;
var columnWidth = this.constrainWidth(this.eventData.column, this.eventData.originalWidths.column + difference);
ResizableTableColumns.setWidth(this.table, tableWidth);
ResizableTableColumns.setWidth(this.eventData.column, columnWidth);
this.eventData.newWidths = {
column: columnWidth,
table: tableWidth,
};
var eventToDispatch = new CustomEvent(ResizableConstants.events.eventResize, {
detail: {
column: this.eventData.column,
columnWidth: columnWidth,
table: this.table,
tableWidth: tableWidth
}
});
this.table.dispatchEvent(eventToDispatch);
this.checkTableWidth();
this.syncHandleWidths();
this.saveColumnWidths();
};
ResizableTableColumns.prototype.attachHandlers = function () {
var _this = this;
ResizableConstants.events.pointerMove
.forEach(function (evt, evtIdx) {
_this.ownerDocument.addEventListener(evt, _this.onPointerMoveRef, false);
});
ResizableConstants.events.pointerUp
.forEach(function (evt, evtIdx) {
_this.ownerDocument.addEventListener(evt, _this.onPointerUpRef, false);
});
};
ResizableTableColumns.prototype.detachHandlers = function () {
var _this = this;
ResizableConstants.events.pointerMove
.forEach(function (evt, evtIdx) {
_this.ownerDocument.removeEventListener(evt, _this.onPointerMoveRef, false);
});
ResizableConstants.events.pointerUp
.forEach(function (evt, evtIdx) {
_this.ownerDocument.removeEventListener(evt, _this.onPointerUpRef, false);
});
};
ResizableTableColumns.prototype.refreshWrapperStyle = function () {
if (this.wrapper == null)
return;
var original = this.wrapper.style.overflowX;
this.wrapper.style.overflowX = 'hidden';
this.wrapper.style.overflowX = original;
};
ResizableTableColumns.prototype.saveColumnWidths = function () {
if (!this.options.store)
return;
var tableId = ResizableTableColumns.generateTableId(this.table);
if (tableId.length === 0)
return;
var data = {
table: this.table.offsetWidth,
columns: {}
};
this.getResizableHeaders()
.forEach(function (el) {
data.columns[ResizableTableColumns.generateColumnId(el)] = el.offsetWidth;
});
this.options.store.set(tableId, data);
};
ResizableTableColumns.prototype.createHandlerReferences = function () {
var _this = this;
if (!this.onPointerDownRef) {
this.onPointerDownRef = ResizableTableColumns.debounce(function (evt) {
_this.handlePointerDown(evt);
}, 100, true);
}
if (!this.onPointerMoveRef) {
this.onPointerMoveRef = ResizableTableColumns.debounce(function (evt) {
_this.handlePointerMove(evt);
}, 5, false);
}
if (!this.onPointerUpRef) {
this.onPointerUpRef = ResizableTableColumns.debounce(function (evt) {
_this.handlePointerUp();
}, 100, true);
}
};
ResizableTableColumns.prototype.registerWindowResizeHandler = function () {
var win = this.ownerDocument.defaultView;
if (ResizableTableColumns.windowResizeHandlerRef)
return;
ResizableTableColumns.windowResizeHandlerRef = ResizableTableColumns.debounce(ResizableTableColumns.onWindowResize, 50, false);
ResizableConstants.events.windowResize
.forEach(function (evt, idx) {
win === null || win === void 0 ? void 0 : win.addEventListener(evt, ResizableTableColumns.windowResizeHandlerRef, false);
});
};
ResizableTableColumns.prototype.handleWindowResize = function () {
this.checkTableWidth();
this.syncHandleWidths();
this.saveColumnWidths();
};
ResizableTableColumns.prototype.updateWidth = function (cell, suggestedWidth, skipConstrainCheck, skipTableResize) {
var originalCellWidth = cell.offsetWidth;
var columnWidth = skipConstrainCheck
? suggestedWidth
: this.constrainWidth(cell, suggestedWidth);
ResizableTableColumns.setWidth(cell, columnWidth);
if (!skipTableResize) {
var difference = columnWidth - originalCellWidth;
var tableWidth = this.table.offsetWidth + difference;
ResizableTableColumns.setWidth(this.table, tableWidth);
}
return columnWidth;
};
ResizableTableColumns.onWindowResize = function (event) {
var win = event ? event.target : null;
if (win == null)
return;
var tables = win.document.querySelectorAll(".".concat(ResizableConstants.classes.table));
for (var index = 0; index < tables.length; index++) {
var table = tables[index];
if (typeof table[ResizableConstants.dataPropertyName] !== 'object')
continue;
table[ResizableConstants.dataPropertyName].handleWindowResize();
}
};
ResizableTableColumns.generateColumnId = function (el) {
var columnId = (el.getAttribute(ResizableConstants.attributes.dataResizable) || '')
.trim()
.replace(/\./g, '_');
return columnId;
};
ResizableTableColumns.generateTableId = function (table) {
var tableId = (table.getAttribute(ResizableConstants.attributes.dataResizableTable) || '')
.trim()
.replace(/\./g, '_');
return tableId.length
? "rtc/".concat(tableId)
: tableId;
};
ResizableTableColumns.setWidth = function (element, width) {
var strWidth = width.toFixed(2);
strWidth = width > 0 ? strWidth : '0';
element.style.width = "".concat(strWidth, "px");
};
ResizableTableColumns.getInstanceId = function () {
return ResizableTableColumns.instancesCount++;
};
ResizableTableColumns.getPointerX = function (event) {
if (event.type.indexOf('touch') === 0) {
var tEvent = event;
if (tEvent.touches && tEvent.touches.length) {
return tEvent.touches[0].pageX;
}
if (tEvent.changedTouches && tEvent.changedTouches.length) {
return tEvent.changedTouches[0].pageX;
}
}
return event.pageX;
};
ResizableTableColumns.getTextWidth = function (contentElement, measurementElement) {
var _a, _b;
if (!contentElement || !measurementElement)
return 0;
var text = ((_a = contentElement.textContent) === null || _a === void 0 ? void 0 : _a.trim().replace(/\s/g, '&nbsp;')) + '&nbsp;'; //add extra space to ensure we are not add the `...`
var styles = (_b = contentElement.ownerDocument.defaultView) === null || _b === void 0 ? void 0 : _b.getComputedStyle(contentElement);
['fontFamily', 'fontSize', 'fontWeight', 'padding', 'border', 'boxSizing']
.forEach(function (prop) {
measurementElement.style[prop] = styles[prop];
});
measurementElement.innerHTML = text;
return measurementElement.offsetWidth;
};
ResizableTableColumns.getOffset = function (el) {
if (!el)
return { top: 0, left: 0 };
var rect = el.getBoundingClientRect();
return {
top: rect.top + el.ownerDocument.body.scrollTop,
left: rect.left + el.ownerDocument.body.scrollLeft
};
};
ResizableTableColumns.instancesCount = 0;
ResizableTableColumns.windowResizeHandlerRef = null;
ResizableTableColumns.debounce = function (func, wait, immediate) {
var timeout = null;
var debounced = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
var later = function () {
timeout = null;
if (!immediate) {
func.apply(void 0, args);
}
};
var callNow = immediate && !timeout;
if (timeout) {
clearTimeout(timeout);
}
timeout = setTimeout(later, wait);
if (callNow) {
func.apply(void 0, args);
}
};
return debounced;
};
return ResizableTableColumns;
}());
exports.PointerData = PointerData;
exports.ResizableConstants = ResizableConstants;
exports.ResizableEventData = ResizableEventData;
exports.ResizableOptions = ResizableOptions;
exports.ResizableTableColumns = ResizableTableColumns;
exports.Utilities = Utilities;
exports.UtilitiesDOM = UtilitiesDOM;
exports.WidthsData = WidthsData;
}));
(function (window, ResizableTableColumns, undefined) {
var store = window.store && window.store.enabled ? window.store : null;
var els = document.querySelectorAll('table.data');
for (var index = 0; index < els.length; index++) {
var table = els[index];
if (table['rtc_data_object']) {
continue;
}
var options = {
store: store
};
if (table.querySelectorAll('thead > tr').length > 1) {
options.resizeFromBody = false;
}
new ResizableTableColumns(els[index], options);
}
})(window, window.validide_resizableTableColumns.ResizableTableColumns, void (0));
//# sourceMappingURL=index.js.map