@danielgindi/dgtable.js 2.0.6 → 2.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/lib.cjs.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @danielgindi/dgtable.js 2.0.6
2
+ * @danielgindi/dgtable.js 2.0.7
3
3
  * git://github.com/danielgindi/dgtable.js.git
4
4
  */
5
5
  'use strict';
@@ -2382,6 +2382,7 @@ const HoverOutEventSymbol = Symbol('hover_out');
2382
2382
  const RowClickEventSymbol = Symbol('row_click');
2383
2383
  const PreviewCellSymbol = Symbol('preview_cell');
2384
2384
  const OriginalCellSymbol = Symbol('cell');
2385
+ const RelatedTouch = Symbol('related_touch');
2385
2386
 
2386
2387
  function webkitRenderBugfix(el) {
2387
2388
  // BUGFIX: WebKit has a bug where it does not relayout, and this affects us because scrollbars
@@ -2450,7 +2451,7 @@ class DGTable {
2450
2451
  this.el.classList.add(options.className || 'dgtable-wrapper');
2451
2452
  }
2452
2453
 
2453
- p.eventsSink.add(this.el, 'dragend.colresize', this._onEndDragColumnHeader.bind(this));
2454
+ p.eventsSink.add(this.el, 'dragend.colresize', this._onDragEndColumnHeader.bind(this));
2454
2455
 
2455
2456
  /**
2456
2457
  * @private
@@ -4899,10 +4900,10 @@ class DGTable {
4899
4900
  /**previousElementSibling
4900
4901
  * Reverse-calculate the column to resize from mouse position
4901
4902
  * @private
4902
- * @param {MouseEvent} event mouse event
4903
+ * @param {MouseEvent|TouchEvent} event mouse event
4903
4904
  * @returns {string|null} name of the column which the mouse is over, or null if the mouse is not in resize position
4904
4905
  */
4905
- _getColumnByResizePosition(event) {
4906
+ _getColumnByResizePosition(event) {var _ref, _event$RelatedTouch, _event$changedTouches;
4906
4907
  let o = this._o,
4907
4908
  rtl = this._isTableRtl();
4908
4909
 
@@ -4918,7 +4919,8 @@ class DGTable {
4918
4919
 
4919
4920
  let firstCol = !previousElementSibling;
4920
4921
 
4921
- let mouseX = (event.pageX || event.clientX) - Css_js.getElementOffset(headerCell).left;
4922
+ const positionHost = (_ref = (_event$RelatedTouch = event[RelatedTouch]) !== null && _event$RelatedTouch !== void 0 ? _event$RelatedTouch : (_event$changedTouches = event.changedTouches) === null || _event$changedTouches === void 0 ? void 0 : _event$changedTouches[0]) !== null && _ref !== void 0 ? _ref : event;
4923
+ let mouseX = (positionHost.pageX || positionHost.clientX) - Css_js.getElementOffset(headerCell).left;
4922
4924
 
4923
4925
  if (rtl) {
4924
4926
  if (!firstCol && Css_js.getElementWidth(headerCell, true, true, true) - mouseX <= o.resizeAreaWidth / 2) {
@@ -4962,36 +4964,8 @@ class DGTable {
4962
4964
  clearTimeout(tapAndHoldTimeout);
4963
4965
  };
4964
4966
 
4965
- const fakeEventKeys = [
4966
- 'target',
4967
- 'clientX', 'clientY',
4968
- 'offsetX', 'offsetY',
4969
- 'screenX', 'screenY',
4970
- 'pageX', 'pageY',
4971
- 'button',
4972
- 'buttons',
4973
- 'which',
4974
- 'srcElement',
4975
- 'toElement',
4976
- 'relatedTarget',
4977
- 'ctrlKey', 'shiftKey', 'altKey', 'metaKey'];
4978
- let fakeMouseEvent = (name, ...args) => {
4979
- for (const k of fakeEventKeys)
4980
- event[k];
4981
-
4982
- for (const obj of args) {
4983
- for (const key of fakeEventKeys) {
4984
- if (obj[key] != null)
4985
- obj[key];
4986
- }
4987
- }
4988
-
4989
- return new MouseEvent(name, event);
4990
- };
4991
-
4992
- cellEl.dispatchEvent(
4993
- fakeMouseEvent('mousedown', event.changedTouches[0], { button: 0, target: event.target })
4994
- );
4967
+ event[RelatedTouch] = event.changedTouches[0];
4968
+ this._onMouseDownColumnHeader(event);
4995
4969
 
4996
4970
  tapAndHoldTimeout = setTimeout(() => {
4997
4971
  unbind();
@@ -5012,16 +4986,13 @@ class DGTable {
5012
4986
 
5013
4987
  if (distanceTravelled < distanceTreshold) {
5014
4988
  this.cancelColumnResize();
5015
-
5016
- cellEl.dispatchEvent(
5017
- fakeMouseEvent('mouseup', event.changedTouches[0], { button: 2, target: event.target })
5018
- );
4989
+ this._triggerColumnHeaderContextMenu(event);
5019
4990
  }
5020
4991
 
5021
4992
  }, 500);
5022
4993
 
5023
4994
  p.eventsSink.
5024
- add(cellEl, 'touchend.colheader', (event) => {
4995
+ add(cellEl, 'touchend.colheader', (/**TouchEvent*/event) => {
5025
4996
  let touch = find(event.changedTouches, (touch) => touch.identifier === p.currentTouchId);
5026
4997
  if (!touch) return;
5027
4998
 
@@ -5035,18 +5006,13 @@ class DGTable {
5035
5006
  let distanceTravelled = Math.sqrt(Math.pow(Math.abs(currentPos.x - startPos.x), 2) + Math.pow(Math.abs(currentPos.y - startPos.y), 2));
5036
5007
 
5037
5008
  if (distanceTravelled < distanceTreshold || p.resizer) {
5038
- cellEl.dispatchEvent(
5039
- fakeMouseEvent('mouseup', touch, { 0: 2, target: event.target })
5040
- );
5041
-
5042
- cellEl.dispatchEvent(
5043
- fakeMouseEvent('click', touch, { button: 0, target: event.target })
5044
- );
5009
+ event[RelatedTouch] = touch;
5010
+ this._onSortOnColumnHeaderEvent(event);
5045
5011
  }
5046
5012
 
5047
5013
  }).
5048
5014
  add(cellEl, 'touchcancel.colheader', unbind).
5049
- add(cellEl, 'touchmove.colheader', (event) => {
5015
+ add(cellEl, 'touchmove.colheader', (/**TouchEvent*/event) => {
5050
5016
  let touch = find(event.changedTouches, (touch) => touch.identifier === p.currentTouchId);
5051
5017
  if (!touch) return;
5052
5018
 
@@ -5056,18 +5022,18 @@ class DGTable {
5056
5022
  if (p.resizer) {
5057
5023
  event.preventDefault();
5058
5024
 
5059
- cellEl.dispatchEvent(
5060
- fakeMouseEvent('mousemove', touch, { target: event.target })
5061
- );
5025
+ event[RelatedTouch] = touch;
5026
+ this._onMouseMoveColumnHeader(event);
5062
5027
  }
5063
5028
  });
5064
5029
  }
5065
5030
 
5066
5031
  /**
5067
- * @param {MouseEvent} event
5032
+ * @param {MouseEvent|TouchEvent} event
5068
5033
  */
5069
5034
  _onMouseDownColumnHeader(event) {
5070
- if (event.button !== 0) return this; // Only treat left-clicks
5035
+ if (event.type === 'mousedown' && event.button !== 0)
5036
+ return;
5071
5037
 
5072
5038
  let o = this._o,
5073
5039
  p = this._p,
@@ -5134,48 +5100,61 @@ class DGTable {
5134
5100
 
5135
5101
  p.eventsSink.
5136
5102
  add(document, 'mousemove.colresize', this._onMouseMoveResizeArea.bind(this)).
5137
- add(document, 'mouseup.colresize', this._onEndDragColumnHeader.bind(this));
5103
+ add(document, 'touchmove.colresize', this._onMouseMoveResizeArea.bind(this)).
5104
+ add(document, 'mouseup.colresize', this._onResizerPointerUpColumnHeader.bind(this)).
5105
+ add(document, 'touchend.colresize', this._onResizerPointerUpColumnHeader.bind(this));
5138
5106
 
5139
5107
  event.preventDefault();
5140
5108
  }
5141
5109
  }
5142
5110
 
5143
5111
  /**
5144
- * @param {MouseEvent} event event
5112
+ * @param {MouseEvent|TouchEvent} event event
5145
5113
  */
5146
5114
  _onMouseMoveColumnHeader(event) {
5147
- let o = this._o,
5115
+ const o = this._o,
5148
5116
  p = this._p;
5149
5117
 
5150
- if (o.resizableColumns) {
5151
- let col = this._getColumnByResizePosition(event);
5152
- let headerCell = event.target.closest(`div.${o.tableClassName}-header-cell,div.${o.cellPreviewClassName}`);
5153
- if (!col || !p.columns.get(col).resizable) {
5154
- headerCell.style.cursor = '';
5155
- } else {
5156
- headerCell.style.cursor = 'e-resize';
5157
- }
5118
+ if (!o.resizableColumns)
5119
+ return;
5120
+
5121
+ let col = this._getColumnByResizePosition(event);
5122
+ let headerCell = event.target.closest(`div.${o.tableClassName}-header-cell,div.${o.cellPreviewClassName}`);
5123
+ if (!col || !p.columns.get(col).resizable) {
5124
+ headerCell.style.cursor = '';
5125
+ } else {
5126
+ headerCell.style.cursor = 'e-resize';
5158
5127
  }
5159
5128
  }
5160
5129
 
5161
5130
  /**
5162
- * @param {MouseEvent} event
5131
+ * @param {MouseEvent|TouchEvent} event
5163
5132
  */
5164
5133
  _onMouseUpColumnHeader(event) {
5165
- if (event.button === 2) {
5166
- let o = this._o;
5167
- let headerCell = event.target.closest(`div.${o.tableClassName}-header-cell,div.${o.cellPreviewClassName}`);
5168
- let bounds = Css_js.getElementOffset(headerCell);
5169
- bounds['width'] = Css_js.getElementWidth(headerCell, true, true, true);
5170
- bounds['height'] = Css_js.getElementHeight(headerCell, true, true, true);
5171
- this.emit('headercontextmenu', {
5172
- columnName: headerCell['columnName'],
5173
- pageX: event.pageX,
5174
- pageY: event.pageY,
5175
- bounds: bounds
5176
- });
5177
- }
5178
- return this;
5134
+ if (event.button !== 2)
5135
+ return;
5136
+
5137
+ this._triggerColumnHeaderContextMenu(event);
5138
+ }
5139
+
5140
+ /**
5141
+ * @param {MouseEvent|TouchEvent} event
5142
+ */
5143
+ _triggerColumnHeaderContextMenu(event) {var _ref2, _event$RelatedTouch2, _event$changedTouches2;
5144
+ const o = this._o;
5145
+
5146
+ const positionHost = (_ref2 = (_event$RelatedTouch2 = event[RelatedTouch]) !== null && _event$RelatedTouch2 !== void 0 ? _event$RelatedTouch2 : (_event$changedTouches2 = event.changedTouches) === null || _event$changedTouches2 === void 0 ? void 0 : _event$changedTouches2[0]) !== null && _ref2 !== void 0 ? _ref2 : event;
5147
+
5148
+ let headerCell = event.target.closest(`div.${o.tableClassName}-header-cell,div.${o.cellPreviewClassName}`);
5149
+ let bounds = Css_js.getElementOffset(headerCell);
5150
+ bounds['width'] = Css_js.getElementWidth(headerCell, true, true, true);
5151
+ bounds['height'] = Css_js.getElementHeight(headerCell, true, true, true);
5152
+ this.emit('headercontextmenu', {
5153
+ columnName: headerCell['columnName'],
5154
+ pageX: positionHost.pageX,
5155
+ pageY: positionHost.pageY,
5156
+ bounds: bounds
5157
+ });
5179
5158
  }
5180
5159
 
5181
5160
  /**
@@ -5190,41 +5169,43 @@ class DGTable {
5190
5169
 
5191
5170
  /**
5192
5171
  * @private
5193
- * @param {MouseEvent} event event
5172
+ * @param {MouseEvent|TouchEvent} event event
5194
5173
  */
5195
- _onClickColumnHeader(event) {
5174
+ _onSortOnColumnHeaderEvent(event) {
5196
5175
  if (isInputElementEvent(event))
5197
5176
  return;
5198
5177
 
5199
- if (!this._getColumnByResizePosition(event)) {
5200
- let o = this._o,
5201
- p = this._p;
5178
+ if (this._getColumnByResizePosition(event))
5179
+ return;
5202
5180
 
5203
- let headerCell = event.target.closest(`div.${o.tableClassName}-header-cell,div.${o.cellPreviewClassName}`);
5204
- if (o.sortableColumns) {
5205
- let column = p.columns.get(headerCell['columnName']);
5206
- let currentSort = p.rows.sortColumn;
5207
- if (column && column.sortable) {
5208
- let shouldAdd = true;
5181
+ const o = this._o,
5182
+ p = this._p;
5209
5183
 
5210
- let lastSort = currentSort.length ? currentSort[currentSort.length - 1] : null;
5184
+ let headerCell = event.target.closest(`div.${o.tableClassName}-header-cell,div.${o.cellPreviewClassName}`);
5185
+ if (!o.sortableColumns)
5186
+ return;
5211
5187
 
5212
- if (lastSort && lastSort.column === column.name) {
5213
- if (!lastSort.descending || !o.allowCancelSort) {
5214
- lastSort.descending = !lastSort.descending;
5215
- } else {
5216
- shouldAdd = false;
5217
- currentSort.splice(currentSort.length - 1, 1);
5218
- }
5219
- }
5188
+ let column = p.columns.get(headerCell['columnName']);
5189
+ let currentSort = p.rows.sortColumn;
5190
+ if (column && column.sortable) {
5191
+ let shouldAdd = true;
5220
5192
 
5221
- if (shouldAdd) {
5222
- this.sort(column.name, undefined, true).render();
5223
- } else {
5224
- this.sort(); // just refresh current situation
5225
- }
5193
+ let lastSort = currentSort.length ? currentSort[currentSort.length - 1] : null;
5194
+
5195
+ if (lastSort && lastSort.column === column.name) {
5196
+ if (!lastSort.descending || !o.allowCancelSort) {
5197
+ lastSort.descending = !lastSort.descending;
5198
+ } else {
5199
+ shouldAdd = false;
5200
+ currentSort.splice(currentSort.length - 1, 1);
5226
5201
  }
5227
5202
  }
5203
+
5204
+ if (shouldAdd) {
5205
+ this.sort(column.name, undefined, true).render();
5206
+ } else {
5207
+ this.sort(); // just refresh current situation
5208
+ }
5228
5209
  }
5229
5210
  }
5230
5211
 
@@ -5255,9 +5236,9 @@ class DGTable {
5255
5236
 
5256
5237
  /**
5257
5238
  * @private
5258
- * @param {MouseEvent} event event
5239
+ * @param {MouseEvent|TouchEvent} event event
5259
5240
  */
5260
- _onMouseMoveResizeArea(event) {
5241
+ _onMouseMoveResizeArea(event) {var _ref3, _event$RelatedTouch3, _event$changedTouches3;
5261
5242
 
5262
5243
  let p = this._p;
5263
5244
 
@@ -5278,7 +5259,8 @@ class DGTable {
5278
5259
 
5279
5260
  let isBoxing = selectedHeaderCellStyle.boxSizing === 'border-box';
5280
5261
 
5281
- let actualX = event.pageX - posRelative.left;
5262
+ const positionHost = (_ref3 = (_event$RelatedTouch3 = event[RelatedTouch]) !== null && _event$RelatedTouch3 !== void 0 ? _event$RelatedTouch3 : (_event$changedTouches3 = event.changedTouches) === null || _event$changedTouches3 === void 0 ? void 0 : _event$changedTouches3[0]) !== null && _ref3 !== void 0 ? _ref3 : event;
5263
+ let actualX = positionHost.pageX - posRelative.left;
5282
5264
  let minX = posCol.left;
5283
5265
 
5284
5266
  minX -= Math.ceil(resizerWidth / 2);
@@ -5315,125 +5297,136 @@ class DGTable {
5315
5297
  * @private
5316
5298
  * @param {DragEvent} event event
5317
5299
  */
5318
- _onEndDragColumnHeader(event) {
5300
+ _onDragEndColumnHeader(event) {
5301
+ let p = this._p;
5319
5302
 
5303
+ if (!p.resizer) {
5304
+ event.target.style.opacity = null;
5305
+ }
5306
+ }
5307
+
5308
+ /**
5309
+ * @private
5310
+ * @param {MouseEvent|TouchEvent} event event
5311
+ */
5312
+ _onResizerPointerUpColumnHeader(event) {var _ref4, _event$RelatedTouch4, _event$changedTouches4;
5320
5313
  let o = this._o,
5321
5314
  p = this._p;
5322
5315
 
5323
- if (!p.resizer) {
5324
- event.target.style.opacity = null;
5325
- } else {
5326
- p.eventsSink.remove(document, '.colresize');
5316
+ if (!p.resizer)
5317
+ return;
5327
5318
 
5328
- let column = p.columns.get(p.resizer['columnName']);
5329
- let rtl = this._isTableRtl();
5319
+ p.eventsSink.remove(document, '.colresize');
5330
5320
 
5331
- let selectedHeaderCell = column.element,
5332
- selectedHeaderCellInner = selectedHeaderCell.firstChild,
5333
- commonAncestor = p.resizer.parentNode;
5321
+ let column = p.columns.get(p.resizer['columnName']);
5322
+ let rtl = this._isTableRtl();
5334
5323
 
5335
- const commonAncestorStyle = getComputedStyle(commonAncestor);
5336
- const selectedHeaderCellStyle = getComputedStyle(selectedHeaderCell);
5324
+ let selectedHeaderCell = column.element,
5325
+ selectedHeaderCellInner = selectedHeaderCell.firstChild,
5326
+ commonAncestor = p.resizer.parentNode;
5337
5327
 
5338
- let posCol = Css_js.getElementOffset(selectedHeaderCell),
5339
- posRelative = Css_js.getElementOffset(commonAncestor);
5340
- posRelative.left += parseFloat(commonAncestorStyle.borderLeftWidth) || 0;
5341
- posCol.left -= posRelative.left;
5342
- let resizerWidth = Css_js.getElementWidth(p.resizer, true, true, true);
5328
+ const commonAncestorStyle = getComputedStyle(commonAncestor);
5329
+ const selectedHeaderCellStyle = getComputedStyle(selectedHeaderCell);
5343
5330
 
5344
- let isBoxing = selectedHeaderCellStyle.boxSizing === 'border-box';
5331
+ let posCol = Css_js.getElementOffset(selectedHeaderCell),
5332
+ posRelative = Css_js.getElementOffset(commonAncestor);
5333
+ posRelative.left += parseFloat(commonAncestorStyle.borderLeftWidth) || 0;
5334
+ posCol.left -= posRelative.left;
5335
+ let resizerWidth = Css_js.getElementWidth(p.resizer, true, true, true);
5345
5336
 
5346
- let actualX = event.pageX - posRelative.left;
5347
- let baseX = posCol.left,minX = posCol.left;
5348
- let width = 0;
5337
+ let isBoxing = selectedHeaderCellStyle.boxSizing === 'border-box';
5349
5338
 
5350
- baseX -= Math.ceil(resizerWidth / 2);
5339
+ const positionHost = (_ref4 = (_event$RelatedTouch4 = event[RelatedTouch]) !== null && _event$RelatedTouch4 !== void 0 ? _event$RelatedTouch4 : (_event$changedTouches4 = event.changedTouches) === null || _event$changedTouches4 === void 0 ? void 0 : _event$changedTouches4[0]) !== null && _ref4 !== void 0 ? _ref4 : event;
5340
+ let actualX = positionHost.pageX - posRelative.left;
5341
+ let baseX = posCol.left,minX = posCol.left;
5342
+ let width = 0;
5351
5343
 
5352
- if (rtl) {
5353
- if (!isBoxing) {
5354
- actualX += this._horizontalPadding(selectedHeaderCell);
5355
- const innerComputedStyle = getComputedStyle(selectedHeaderCellInner || selectedHeaderCell);
5356
- actualX += parseFloat(innerComputedStyle.borderLeftWidth) || 0;
5357
- actualX += parseFloat(innerComputedStyle.borderRightWidth) || 0;
5358
- actualX += column.arrowProposedWidth || 0; // Sort-arrow width
5359
- }
5344
+ baseX -= Math.ceil(resizerWidth / 2);
5360
5345
 
5361
- baseX += Css_js.getElementWidth(selectedHeaderCell, true, true, true);
5346
+ if (rtl) {
5347
+ if (!isBoxing) {
5348
+ actualX += this._horizontalPadding(selectedHeaderCell);
5349
+ const innerComputedStyle = getComputedStyle(selectedHeaderCellInner || selectedHeaderCell);
5350
+ actualX += parseFloat(innerComputedStyle.borderLeftWidth) || 0;
5351
+ actualX += parseFloat(innerComputedStyle.borderRightWidth) || 0;
5352
+ actualX += column.arrowProposedWidth || 0; // Sort-arrow width
5353
+ }
5362
5354
 
5363
- minX = baseX - (column.ignoreMin ? 0 : this._o.minColumnWidth);
5364
- if (actualX > minX) {
5365
- actualX = minX;
5366
- }
5355
+ baseX += Css_js.getElementWidth(selectedHeaderCell, true, true, true);
5367
5356
 
5368
- width = baseX - actualX;
5369
- } else {
5370
- if (!isBoxing) {
5371
- actualX -= this._horizontalPadding(selectedHeaderCell);
5372
- const innerComputedStyle = getComputedStyle(selectedHeaderCellInner || selectedHeaderCell);
5373
- actualX -= parseFloat(innerComputedStyle.borderLeftWidth) || 0;
5374
- actualX -= parseFloat(innerComputedStyle.borderRightWidth) || 0;
5375
- actualX -= column.arrowProposedWidth || 0; // Sort-arrow width
5376
- }
5357
+ minX = baseX - (column.ignoreMin ? 0 : this._o.minColumnWidth);
5358
+ if (actualX > minX) {
5359
+ actualX = minX;
5360
+ }
5377
5361
 
5378
- minX = baseX + (column.ignoreMin ? 0 : this._o.minColumnWidth);
5379
- if (actualX < minX) {
5380
- actualX = minX;
5381
- }
5362
+ width = baseX - actualX;
5363
+ } else {
5364
+ if (!isBoxing) {
5365
+ actualX -= this._horizontalPadding(selectedHeaderCell);
5366
+ const innerComputedStyle = getComputedStyle(selectedHeaderCellInner || selectedHeaderCell);
5367
+ actualX -= parseFloat(innerComputedStyle.borderLeftWidth) || 0;
5368
+ actualX -= parseFloat(innerComputedStyle.borderRightWidth) || 0;
5369
+ actualX -= column.arrowProposedWidth || 0; // Sort-arrow width
5370
+ }
5382
5371
 
5383
- width = actualX - baseX;
5372
+ minX = baseX + (column.ignoreMin ? 0 : this._o.minColumnWidth);
5373
+ if (actualX < minX) {
5374
+ actualX = minX;
5384
5375
  }
5385
5376
 
5386
- p.resizer.remove();
5387
- p.resizer = null;
5377
+ width = actualX - baseX;
5378
+ }
5388
5379
 
5389
- let sizeToSet = width;
5380
+ p.resizer.remove();
5381
+ p.resizer = null;
5390
5382
 
5391
- if (column.widthMode === ColumnWidthMode.RELATIVE) {
5392
- let sizeLeft = this._calculateWidthAvailableForColumns();
5393
- //sizeLeft -= p.table.offsetWidth - p.table.clientWidth;
5383
+ let sizeToSet = width;
5394
5384
 
5395
- let totalRelativePercentage = 0;
5396
- let relatives = 0;
5385
+ if (column.widthMode === ColumnWidthMode.RELATIVE) {
5386
+ let sizeLeft = this._calculateWidthAvailableForColumns();
5387
+ //sizeLeft -= p.table.offsetWidth - p.table.clientWidth;
5397
5388
 
5398
- for (let i = 0; i < p.visibleColumns.length; i++) {
5399
- let col = p.visibleColumns[i];
5400
- if (col.name === column.name) continue;
5389
+ let totalRelativePercentage = 0;
5390
+ let relatives = 0;
5401
5391
 
5402
- if (col.widthMode === ColumnWidthMode.RELATIVE) {
5403
- totalRelativePercentage += col.width;
5404
- relatives++;
5405
- } else {
5406
- sizeLeft -= col.actualWidth;
5407
- }
5392
+ for (let i = 0; i < p.visibleColumns.length; i++) {
5393
+ let col = p.visibleColumns[i];
5394
+ if (col.name === column.name) continue;
5395
+
5396
+ if (col.widthMode === ColumnWidthMode.RELATIVE) {
5397
+ totalRelativePercentage += col.width;
5398
+ relatives++;
5399
+ } else {
5400
+ sizeLeft -= col.actualWidth;
5408
5401
  }
5402
+ }
5409
5403
 
5410
- sizeLeft = Math.max(1, sizeLeft);
5411
- if (sizeLeft === 1)
5412
- sizeLeft = p.table.clientWidth;
5413
- sizeToSet = width / sizeLeft;
5404
+ sizeLeft = Math.max(1, sizeLeft);
5405
+ if (sizeLeft === 1)
5406
+ sizeLeft = p.table.clientWidth;
5407
+ sizeToSet = width / sizeLeft;
5414
5408
 
5415
- if (relatives > 0) {
5416
- // When there's more than one relative overall,
5417
- // we can do relative enlarging/shrinking.
5418
- // Otherwise, we can end up having a 0 width.
5409
+ if (relatives > 0) {
5410
+ // When there's more than one relative overall,
5411
+ // we can do relative enlarging/shrinking.
5412
+ // Otherwise, we can end up having a 0 width.
5419
5413
 
5420
- let unNormalizedSizeToSet = sizeToSet / ((1 - sizeToSet) / totalRelativePercentage);
5414
+ let unNormalizedSizeToSet = sizeToSet / ((1 - sizeToSet) / totalRelativePercentage);
5421
5415
 
5422
- totalRelativePercentage += sizeToSet;
5416
+ totalRelativePercentage += sizeToSet;
5423
5417
 
5424
- // Account for relative widths scaling later
5425
- if (totalRelativePercentage < 1 && o.relativeWidthGrowsToFillWidth ||
5426
- totalRelativePercentage > 1 && o.relativeWidthShrinksToFillWidth) {
5427
- sizeToSet = unNormalizedSizeToSet;
5428
- }
5418
+ // Account for relative widths scaling later
5419
+ if (totalRelativePercentage < 1 && o.relativeWidthGrowsToFillWidth ||
5420
+ totalRelativePercentage > 1 && o.relativeWidthShrinksToFillWidth) {
5421
+ sizeToSet = unNormalizedSizeToSet;
5429
5422
  }
5430
-
5431
- sizeToSet *= 100;
5432
- sizeToSet += '%';
5433
5423
  }
5434
5424
 
5435
- this.setColumnWidth(column.name, sizeToSet);
5425
+ sizeToSet *= 100;
5426
+ sizeToSet += '%';
5436
5427
  }
5428
+
5429
+ this.setColumnWidth(column.name, sizeToSet);
5437
5430
  }
5438
5431
 
5439
5432
  /**
@@ -5662,7 +5655,7 @@ class DGTable {
5662
5655
  columnEl.addEventListener('mouseleave', this._onMouseLeaveColumnHeader.bind(this));
5663
5656
  columnEl.addEventListener('touchstart', this._onTouchStartColumnHeader.bind(this));
5664
5657
  columnEl.addEventListener('dragstart', this._onStartDragColumnHeader.bind(this));
5665
- columnEl.addEventListener('click', this._onClickColumnHeader.bind(this));
5658
+ columnEl.addEventListener('click', this._onSortOnColumnHeaderEvent.bind(this));
5666
5659
  columnEl.addEventListener('contextmenu', (event) => {event.preventDefault();});
5667
5660
  inner.addEventListener('dragenter', this._onDragEnterColumnHeader.bind(this));
5668
5661
  inner.addEventListener('dragover', this._onDragOverColumnHeader.bind(this));