@danielgindi/dgtable.js 2.0.5 → 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 +186 -180
- package/dist/lib.cjs.js.map +1 -1
- package/dist/lib.cjs.min.js +2 -2
- package/dist/lib.cjs.min.js.map +1 -1
- package/dist/lib.es6.js +186 -180
- package/dist/lib.es6.js.map +1 -1
- package/dist/lib.es6.min.js +2 -2
- package/dist/lib.es6.min.js.map +1 -1
- package/dist/lib.umd.js +184 -178
- package/dist/lib.umd.js.map +1 -1
- package/dist/lib.umd.min.js +2 -2
- package/dist/lib.umd.min.js.map +1 -1
- package/package.json +1 -1
- package/src/index.js +183 -178
package/package.json
CHANGED
package/src/index.js
CHANGED
|
@@ -36,6 +36,7 @@ const HoverOutEventSymbol = Symbol('hover_out');
|
|
|
36
36
|
const RowClickEventSymbol = Symbol('row_click');
|
|
37
37
|
const PreviewCellSymbol = Symbol('preview_cell');
|
|
38
38
|
const OriginalCellSymbol = Symbol('cell');
|
|
39
|
+
const RelatedTouch = Symbol('related_touch');
|
|
39
40
|
|
|
40
41
|
function webkitRenderBugfix(el) {
|
|
41
42
|
// BUGFIX: WebKit has a bug where it does not relayout, and this affects us because scrollbars
|
|
@@ -104,7 +105,7 @@ class DGTable {
|
|
|
104
105
|
this.el.classList.add(options.className || 'dgtable-wrapper');
|
|
105
106
|
}
|
|
106
107
|
|
|
107
|
-
p.eventsSink.add(this.el, 'dragend.colresize', this.
|
|
108
|
+
p.eventsSink.add(this.el, 'dragend.colresize', this._onDragEndColumnHeader.bind(this));
|
|
108
109
|
|
|
109
110
|
/**
|
|
110
111
|
* @private
|
|
@@ -2553,7 +2554,7 @@ class DGTable {
|
|
|
2553
2554
|
/**previousElementSibling
|
|
2554
2555
|
* Reverse-calculate the column to resize from mouse position
|
|
2555
2556
|
* @private
|
|
2556
|
-
* @param {MouseEvent} event mouse event
|
|
2557
|
+
* @param {MouseEvent|TouchEvent} event mouse event
|
|
2557
2558
|
* @returns {string|null} name of the column which the mouse is over, or null if the mouse is not in resize position
|
|
2558
2559
|
*/
|
|
2559
2560
|
_getColumnByResizePosition(event) {
|
|
@@ -2572,7 +2573,8 @@ class DGTable {
|
|
|
2572
2573
|
|
|
2573
2574
|
let firstCol = !previousElementSibling;
|
|
2574
2575
|
|
|
2575
|
-
|
|
2576
|
+
const positionHost = event[RelatedTouch] ?? event.changedTouches?.[0] ?? event;
|
|
2577
|
+
let mouseX = (positionHost.pageX || positionHost.clientX) - getElementOffset(headerCell).left;
|
|
2576
2578
|
|
|
2577
2579
|
if (rtl) {
|
|
2578
2580
|
if (!firstCol && getElementWidth(headerCell, true, true, true) - mouseX <= o.resizeAreaWidth / 2) {
|
|
@@ -2616,24 +2618,8 @@ class DGTable {
|
|
|
2616
2618
|
clearTimeout(tapAndHoldTimeout);
|
|
2617
2619
|
};
|
|
2618
2620
|
|
|
2619
|
-
|
|
2620
|
-
|
|
2621
|
-
for (const k of event)
|
|
2622
|
-
dict[k] = event[k];
|
|
2623
|
-
|
|
2624
|
-
for (const obj of args) {
|
|
2625
|
-
for (const key of ['target', 'clientX', 'clientY', 'offsetX', 'offsetY', 'screenX', 'screenY', 'pageX', 'pageY', 'which']) {
|
|
2626
|
-
if (obj[key] != null)
|
|
2627
|
-
dict[key] = obj[key];
|
|
2628
|
-
}
|
|
2629
|
-
}
|
|
2630
|
-
|
|
2631
|
-
return new MouseEvent(name, event);
|
|
2632
|
-
};
|
|
2633
|
-
|
|
2634
|
-
cellEl.dispatchEvent(
|
|
2635
|
-
fakeMouseEvent('mousedown', event.changedTouches[0], { button: 0, target: event.target }),
|
|
2636
|
-
);
|
|
2621
|
+
event[RelatedTouch] = event.changedTouches[0];
|
|
2622
|
+
this._onMouseDownColumnHeader(event);
|
|
2637
2623
|
|
|
2638
2624
|
tapAndHoldTimeout = setTimeout(() => {
|
|
2639
2625
|
unbind();
|
|
@@ -2654,16 +2640,13 @@ class DGTable {
|
|
|
2654
2640
|
|
|
2655
2641
|
if (distanceTravelled < distanceTreshold) {
|
|
2656
2642
|
this.cancelColumnResize();
|
|
2657
|
-
|
|
2658
|
-
cellEl.dispatchEvent(
|
|
2659
|
-
fakeMouseEvent('mouseup', event.changedTouches[0], { button: 2, target: event.target }),
|
|
2660
|
-
);
|
|
2643
|
+
this._triggerColumnHeaderContextMenu(event);
|
|
2661
2644
|
}
|
|
2662
2645
|
|
|
2663
2646
|
}, 500);
|
|
2664
2647
|
|
|
2665
2648
|
p.eventsSink
|
|
2666
|
-
.add(cellEl, 'touchend.colheader', (event) => {
|
|
2649
|
+
.add(cellEl, 'touchend.colheader', (/**TouchEvent*/event) => {
|
|
2667
2650
|
let touch = find(event.changedTouches, (touch) => touch.identifier === p.currentTouchId);
|
|
2668
2651
|
if (!touch) return;
|
|
2669
2652
|
|
|
@@ -2677,18 +2660,13 @@ class DGTable {
|
|
|
2677
2660
|
let distanceTravelled = Math.sqrt(Math.pow(Math.abs(currentPos.x - startPos.x), 2) + Math.pow(Math.abs(currentPos.y - startPos.y), 2));
|
|
2678
2661
|
|
|
2679
2662
|
if (distanceTravelled < distanceTreshold || p.resizer) {
|
|
2680
|
-
|
|
2681
|
-
|
|
2682
|
-
);
|
|
2683
|
-
|
|
2684
|
-
cellEl.dispatchEvent(
|
|
2685
|
-
fakeMouseEvent('click', touch, { button: 0, target: event.target }),
|
|
2686
|
-
);
|
|
2663
|
+
event[RelatedTouch] = touch;
|
|
2664
|
+
this._onSortOnColumnHeaderEvent(event);
|
|
2687
2665
|
}
|
|
2688
2666
|
|
|
2689
2667
|
})
|
|
2690
2668
|
.add(cellEl, 'touchcancel.colheader', unbind)
|
|
2691
|
-
.add(cellEl, 'touchmove.colheader', (event) => {
|
|
2669
|
+
.add(cellEl, 'touchmove.colheader', (/**TouchEvent*/event) => {
|
|
2692
2670
|
let touch = find(event.changedTouches, (touch) => touch.identifier === p.currentTouchId);
|
|
2693
2671
|
if (!touch) return;
|
|
2694
2672
|
|
|
@@ -2698,18 +2676,18 @@ class DGTable {
|
|
|
2698
2676
|
if (p.resizer) {
|
|
2699
2677
|
event.preventDefault();
|
|
2700
2678
|
|
|
2701
|
-
|
|
2702
|
-
|
|
2703
|
-
);
|
|
2679
|
+
event[RelatedTouch] = touch;
|
|
2680
|
+
this._onMouseMoveColumnHeader(event);
|
|
2704
2681
|
}
|
|
2705
2682
|
});
|
|
2706
2683
|
}
|
|
2707
2684
|
|
|
2708
2685
|
/**
|
|
2709
|
-
* @param {MouseEvent} event
|
|
2686
|
+
* @param {MouseEvent|TouchEvent} event
|
|
2710
2687
|
*/
|
|
2711
2688
|
_onMouseDownColumnHeader(event) {
|
|
2712
|
-
if (event.button !== 0)
|
|
2689
|
+
if (event.type === 'mousedown' && event.button !== 0)
|
|
2690
|
+
return;
|
|
2713
2691
|
|
|
2714
2692
|
let o = this._o,
|
|
2715
2693
|
p = this._p,
|
|
@@ -2776,48 +2754,61 @@ class DGTable {
|
|
|
2776
2754
|
|
|
2777
2755
|
p.eventsSink
|
|
2778
2756
|
.add(document, 'mousemove.colresize', this._onMouseMoveResizeArea.bind(this))
|
|
2779
|
-
.add(document, '
|
|
2757
|
+
.add(document, 'touchmove.colresize', this._onMouseMoveResizeArea.bind(this))
|
|
2758
|
+
.add(document, 'mouseup.colresize', this._onResizerPointerUpColumnHeader.bind(this))
|
|
2759
|
+
.add(document, 'touchend.colresize', this._onResizerPointerUpColumnHeader.bind(this));
|
|
2780
2760
|
|
|
2781
2761
|
event.preventDefault();
|
|
2782
2762
|
}
|
|
2783
2763
|
}
|
|
2784
2764
|
|
|
2785
2765
|
/**
|
|
2786
|
-
* @param {MouseEvent} event event
|
|
2766
|
+
* @param {MouseEvent|TouchEvent} event event
|
|
2787
2767
|
*/
|
|
2788
2768
|
_onMouseMoveColumnHeader(event) {
|
|
2789
|
-
|
|
2769
|
+
const o = this._o,
|
|
2790
2770
|
p = this._p;
|
|
2791
2771
|
|
|
2792
|
-
if (o.resizableColumns)
|
|
2793
|
-
|
|
2794
|
-
|
|
2795
|
-
|
|
2796
|
-
|
|
2797
|
-
|
|
2798
|
-
|
|
2799
|
-
|
|
2772
|
+
if (!o.resizableColumns)
|
|
2773
|
+
return;
|
|
2774
|
+
|
|
2775
|
+
let col = this._getColumnByResizePosition(event);
|
|
2776
|
+
let headerCell = event.target.closest(`div.${o.tableClassName}-header-cell,div.${o.cellPreviewClassName}`);
|
|
2777
|
+
if (!col || !p.columns.get(col).resizable) {
|
|
2778
|
+
headerCell.style.cursor = '';
|
|
2779
|
+
} else {
|
|
2780
|
+
headerCell.style.cursor = 'e-resize';
|
|
2800
2781
|
}
|
|
2801
2782
|
}
|
|
2802
2783
|
|
|
2803
2784
|
/**
|
|
2804
|
-
* @param {MouseEvent} event
|
|
2785
|
+
* @param {MouseEvent|TouchEvent} event
|
|
2805
2786
|
*/
|
|
2806
2787
|
_onMouseUpColumnHeader(event) {
|
|
2807
|
-
if (event.button
|
|
2808
|
-
|
|
2809
|
-
|
|
2810
|
-
|
|
2811
|
-
|
|
2812
|
-
|
|
2813
|
-
|
|
2814
|
-
|
|
2815
|
-
|
|
2816
|
-
|
|
2817
|
-
|
|
2818
|
-
|
|
2819
|
-
|
|
2820
|
-
|
|
2788
|
+
if (event.button !== 2)
|
|
2789
|
+
return;
|
|
2790
|
+
|
|
2791
|
+
this._triggerColumnHeaderContextMenu(event);
|
|
2792
|
+
}
|
|
2793
|
+
|
|
2794
|
+
/**
|
|
2795
|
+
* @param {MouseEvent|TouchEvent} event
|
|
2796
|
+
*/
|
|
2797
|
+
_triggerColumnHeaderContextMenu(event) {
|
|
2798
|
+
const o = this._o;
|
|
2799
|
+
|
|
2800
|
+
const positionHost = event[RelatedTouch] ?? event.changedTouches?.[0] ?? event;
|
|
2801
|
+
|
|
2802
|
+
let headerCell = event.target.closest(`div.${o.tableClassName}-header-cell,div.${o.cellPreviewClassName}`);
|
|
2803
|
+
let bounds = getElementOffset(headerCell);
|
|
2804
|
+
bounds['width'] = getElementWidth(headerCell, true, true, true);
|
|
2805
|
+
bounds['height'] = getElementHeight(headerCell, true, true, true);
|
|
2806
|
+
this.emit('headercontextmenu', {
|
|
2807
|
+
columnName: headerCell['columnName'],
|
|
2808
|
+
pageX: positionHost.pageX,
|
|
2809
|
+
pageY: positionHost.pageY,
|
|
2810
|
+
bounds: bounds,
|
|
2811
|
+
});
|
|
2821
2812
|
}
|
|
2822
2813
|
|
|
2823
2814
|
/**
|
|
@@ -2832,41 +2823,43 @@ class DGTable {
|
|
|
2832
2823
|
|
|
2833
2824
|
/**
|
|
2834
2825
|
* @private
|
|
2835
|
-
* @param {MouseEvent} event event
|
|
2826
|
+
* @param {MouseEvent|TouchEvent} event event
|
|
2836
2827
|
*/
|
|
2837
|
-
|
|
2828
|
+
_onSortOnColumnHeaderEvent(event) {
|
|
2838
2829
|
if (isInputElementEvent(event))
|
|
2839
2830
|
return;
|
|
2840
2831
|
|
|
2841
|
-
if (
|
|
2842
|
-
|
|
2843
|
-
p = this._p;
|
|
2832
|
+
if (this._getColumnByResizePosition(event))
|
|
2833
|
+
return;
|
|
2844
2834
|
|
|
2845
|
-
|
|
2846
|
-
|
|
2847
|
-
|
|
2848
|
-
|
|
2849
|
-
|
|
2850
|
-
|
|
2835
|
+
const o = this._o,
|
|
2836
|
+
p = this._p;
|
|
2837
|
+
|
|
2838
|
+
let headerCell = event.target.closest(`div.${o.tableClassName}-header-cell,div.${o.cellPreviewClassName}`);
|
|
2839
|
+
if (!o.sortableColumns)
|
|
2840
|
+
return;
|
|
2851
2841
|
|
|
2852
|
-
|
|
2842
|
+
let column = p.columns.get(headerCell['columnName']);
|
|
2843
|
+
let currentSort = p.rows.sortColumn;
|
|
2844
|
+
if (column && column.sortable) {
|
|
2845
|
+
let shouldAdd = true;
|
|
2853
2846
|
|
|
2854
|
-
|
|
2855
|
-
if (!lastSort.descending || !o.allowCancelSort) {
|
|
2856
|
-
lastSort.descending = !lastSort.descending;
|
|
2857
|
-
} else {
|
|
2858
|
-
shouldAdd = false;
|
|
2859
|
-
currentSort.splice(currentSort.length - 1, 1);
|
|
2860
|
-
}
|
|
2861
|
-
}
|
|
2847
|
+
let lastSort = currentSort.length ? currentSort[currentSort.length - 1] : null;
|
|
2862
2848
|
|
|
2863
|
-
|
|
2864
|
-
|
|
2865
|
-
|
|
2866
|
-
|
|
2867
|
-
|
|
2849
|
+
if (lastSort && lastSort.column === column.name) {
|
|
2850
|
+
if (!lastSort.descending || !o.allowCancelSort) {
|
|
2851
|
+
lastSort.descending = !lastSort.descending;
|
|
2852
|
+
} else {
|
|
2853
|
+
shouldAdd = false;
|
|
2854
|
+
currentSort.splice(currentSort.length - 1, 1);
|
|
2868
2855
|
}
|
|
2869
2856
|
}
|
|
2857
|
+
|
|
2858
|
+
if (shouldAdd) {
|
|
2859
|
+
this.sort(column.name, undefined, true).render();
|
|
2860
|
+
} else {
|
|
2861
|
+
this.sort(); // just refresh current situation
|
|
2862
|
+
}
|
|
2870
2863
|
}
|
|
2871
2864
|
}
|
|
2872
2865
|
|
|
@@ -2897,7 +2890,7 @@ class DGTable {
|
|
|
2897
2890
|
|
|
2898
2891
|
/**
|
|
2899
2892
|
* @private
|
|
2900
|
-
* @param {MouseEvent} event event
|
|
2893
|
+
* @param {MouseEvent|TouchEvent} event event
|
|
2901
2894
|
*/
|
|
2902
2895
|
_onMouseMoveResizeArea(event) {
|
|
2903
2896
|
|
|
@@ -2920,7 +2913,8 @@ class DGTable {
|
|
|
2920
2913
|
|
|
2921
2914
|
let isBoxing = selectedHeaderCellStyle.boxSizing === 'border-box';
|
|
2922
2915
|
|
|
2923
|
-
|
|
2916
|
+
const positionHost = event[RelatedTouch] ?? event.changedTouches?.[0] ?? event;
|
|
2917
|
+
let actualX = positionHost.pageX - posRelative.left;
|
|
2924
2918
|
let minX = posCol.left;
|
|
2925
2919
|
|
|
2926
2920
|
minX -= Math.ceil(resizerWidth / 2);
|
|
@@ -2957,125 +2951,136 @@ class DGTable {
|
|
|
2957
2951
|
* @private
|
|
2958
2952
|
* @param {DragEvent} event event
|
|
2959
2953
|
*/
|
|
2960
|
-
|
|
2954
|
+
_onDragEndColumnHeader(event) {
|
|
2955
|
+
let p = this._p;
|
|
2956
|
+
|
|
2957
|
+
if (!p.resizer) {
|
|
2958
|
+
event.target.style.opacity = null;
|
|
2959
|
+
}
|
|
2960
|
+
}
|
|
2961
2961
|
|
|
2962
|
+
/**
|
|
2963
|
+
* @private
|
|
2964
|
+
* @param {MouseEvent|TouchEvent} event event
|
|
2965
|
+
*/
|
|
2966
|
+
_onResizerPointerUpColumnHeader(event) {
|
|
2962
2967
|
let o = this._o,
|
|
2963
2968
|
p = this._p;
|
|
2964
2969
|
|
|
2965
|
-
if (!p.resizer)
|
|
2966
|
-
|
|
2967
|
-
} else {
|
|
2968
|
-
p.eventsSink.remove(document, '.colresize');
|
|
2970
|
+
if (!p.resizer)
|
|
2971
|
+
return;
|
|
2969
2972
|
|
|
2970
|
-
|
|
2971
|
-
let rtl = this._isTableRtl();
|
|
2973
|
+
p.eventsSink.remove(document, '.colresize');
|
|
2972
2974
|
|
|
2973
|
-
|
|
2974
|
-
|
|
2975
|
-
commonAncestor = p.resizer.parentNode;
|
|
2975
|
+
let column = p.columns.get(p.resizer['columnName']);
|
|
2976
|
+
let rtl = this._isTableRtl();
|
|
2976
2977
|
|
|
2977
|
-
|
|
2978
|
-
|
|
2978
|
+
let selectedHeaderCell = column.element,
|
|
2979
|
+
selectedHeaderCellInner = selectedHeaderCell.firstChild,
|
|
2980
|
+
commonAncestor = p.resizer.parentNode;
|
|
2979
2981
|
|
|
2980
|
-
|
|
2981
|
-
|
|
2982
|
-
posRelative.left += parseFloat(commonAncestorStyle.borderLeftWidth) || 0;
|
|
2983
|
-
posCol.left -= posRelative.left;
|
|
2984
|
-
let resizerWidth = getElementWidth(p.resizer, true, true, true);
|
|
2982
|
+
const commonAncestorStyle = getComputedStyle(commonAncestor);
|
|
2983
|
+
const selectedHeaderCellStyle = getComputedStyle(selectedHeaderCell);
|
|
2985
2984
|
|
|
2986
|
-
|
|
2985
|
+
let posCol = getElementOffset(selectedHeaderCell),
|
|
2986
|
+
posRelative = getElementOffset(commonAncestor);
|
|
2987
|
+
posRelative.left += parseFloat(commonAncestorStyle.borderLeftWidth) || 0;
|
|
2988
|
+
posCol.left -= posRelative.left;
|
|
2989
|
+
let resizerWidth = getElementWidth(p.resizer, true, true, true);
|
|
2987
2990
|
|
|
2988
|
-
|
|
2989
|
-
let baseX = posCol.left, minX = posCol.left;
|
|
2990
|
-
let width = 0;
|
|
2991
|
+
let isBoxing = selectedHeaderCellStyle.boxSizing === 'border-box';
|
|
2991
2992
|
|
|
2992
|
-
|
|
2993
|
+
const positionHost = event[RelatedTouch] ?? event.changedTouches?.[0] ?? event;
|
|
2994
|
+
let actualX = positionHost.pageX - posRelative.left;
|
|
2995
|
+
let baseX = posCol.left, minX = posCol.left;
|
|
2996
|
+
let width = 0;
|
|
2993
2997
|
|
|
2994
|
-
|
|
2995
|
-
if (!isBoxing) {
|
|
2996
|
-
actualX += this._horizontalPadding(selectedHeaderCell);
|
|
2997
|
-
const innerComputedStyle = getComputedStyle(selectedHeaderCellInner || selectedHeaderCell);
|
|
2998
|
-
actualX += parseFloat(innerComputedStyle.borderLeftWidth) || 0;
|
|
2999
|
-
actualX += parseFloat(innerComputedStyle.borderRightWidth) || 0;
|
|
3000
|
-
actualX += column.arrowProposedWidth || 0; // Sort-arrow width
|
|
3001
|
-
}
|
|
2998
|
+
baseX -= Math.ceil(resizerWidth / 2);
|
|
3002
2999
|
|
|
3003
|
-
|
|
3000
|
+
if (rtl) {
|
|
3001
|
+
if (!isBoxing) {
|
|
3002
|
+
actualX += this._horizontalPadding(selectedHeaderCell);
|
|
3003
|
+
const innerComputedStyle = getComputedStyle(selectedHeaderCellInner || selectedHeaderCell);
|
|
3004
|
+
actualX += parseFloat(innerComputedStyle.borderLeftWidth) || 0;
|
|
3005
|
+
actualX += parseFloat(innerComputedStyle.borderRightWidth) || 0;
|
|
3006
|
+
actualX += column.arrowProposedWidth || 0; // Sort-arrow width
|
|
3007
|
+
}
|
|
3004
3008
|
|
|
3005
|
-
|
|
3006
|
-
if (actualX > minX) {
|
|
3007
|
-
actualX = minX;
|
|
3008
|
-
}
|
|
3009
|
+
baseX += getElementWidth(selectedHeaderCell, true, true, true);
|
|
3009
3010
|
|
|
3010
|
-
|
|
3011
|
-
|
|
3012
|
-
|
|
3013
|
-
|
|
3014
|
-
const innerComputedStyle = getComputedStyle(selectedHeaderCellInner || selectedHeaderCell);
|
|
3015
|
-
actualX -= parseFloat(innerComputedStyle.borderLeftWidth) || 0;
|
|
3016
|
-
actualX -= parseFloat(innerComputedStyle.borderRightWidth) || 0;
|
|
3017
|
-
actualX -= column.arrowProposedWidth || 0; // Sort-arrow width
|
|
3018
|
-
}
|
|
3011
|
+
minX = baseX - (column.ignoreMin ? 0 : this._o.minColumnWidth);
|
|
3012
|
+
if (actualX > minX) {
|
|
3013
|
+
actualX = minX;
|
|
3014
|
+
}
|
|
3019
3015
|
|
|
3020
|
-
|
|
3021
|
-
|
|
3022
|
-
|
|
3023
|
-
|
|
3016
|
+
width = baseX - actualX;
|
|
3017
|
+
} else {
|
|
3018
|
+
if (!isBoxing) {
|
|
3019
|
+
actualX -= this._horizontalPadding(selectedHeaderCell);
|
|
3020
|
+
const innerComputedStyle = getComputedStyle(selectedHeaderCellInner || selectedHeaderCell);
|
|
3021
|
+
actualX -= parseFloat(innerComputedStyle.borderLeftWidth) || 0;
|
|
3022
|
+
actualX -= parseFloat(innerComputedStyle.borderRightWidth) || 0;
|
|
3023
|
+
actualX -= column.arrowProposedWidth || 0; // Sort-arrow width
|
|
3024
|
+
}
|
|
3024
3025
|
|
|
3025
|
-
|
|
3026
|
+
minX = baseX + (column.ignoreMin ? 0 : this._o.minColumnWidth);
|
|
3027
|
+
if (actualX < minX) {
|
|
3028
|
+
actualX = minX;
|
|
3026
3029
|
}
|
|
3027
3030
|
|
|
3028
|
-
|
|
3029
|
-
|
|
3031
|
+
width = actualX - baseX;
|
|
3032
|
+
}
|
|
3030
3033
|
|
|
3031
|
-
|
|
3034
|
+
p.resizer.remove();
|
|
3035
|
+
p.resizer = null;
|
|
3032
3036
|
|
|
3033
|
-
|
|
3034
|
-
let sizeLeft = this._calculateWidthAvailableForColumns();
|
|
3035
|
-
//sizeLeft -= p.table.offsetWidth - p.table.clientWidth;
|
|
3037
|
+
let sizeToSet = width;
|
|
3036
3038
|
|
|
3037
|
-
|
|
3038
|
-
|
|
3039
|
+
if (column.widthMode === ColumnWidthMode.RELATIVE) {
|
|
3040
|
+
let sizeLeft = this._calculateWidthAvailableForColumns();
|
|
3041
|
+
//sizeLeft -= p.table.offsetWidth - p.table.clientWidth;
|
|
3039
3042
|
|
|
3040
|
-
|
|
3041
|
-
|
|
3042
|
-
if (col.name === column.name) continue;
|
|
3043
|
+
let totalRelativePercentage = 0;
|
|
3044
|
+
let relatives = 0;
|
|
3043
3045
|
|
|
3044
|
-
|
|
3045
|
-
|
|
3046
|
-
|
|
3047
|
-
|
|
3048
|
-
|
|
3049
|
-
|
|
3046
|
+
for (let i = 0; i < p.visibleColumns.length; i++) {
|
|
3047
|
+
let col = p.visibleColumns[i];
|
|
3048
|
+
if (col.name === column.name) continue;
|
|
3049
|
+
|
|
3050
|
+
if (col.widthMode === ColumnWidthMode.RELATIVE) {
|
|
3051
|
+
totalRelativePercentage += col.width;
|
|
3052
|
+
relatives++;
|
|
3053
|
+
} else {
|
|
3054
|
+
sizeLeft -= col.actualWidth;
|
|
3050
3055
|
}
|
|
3056
|
+
}
|
|
3051
3057
|
|
|
3052
|
-
|
|
3053
|
-
|
|
3054
|
-
|
|
3055
|
-
|
|
3058
|
+
sizeLeft = Math.max(1, sizeLeft);
|
|
3059
|
+
if (sizeLeft === 1)
|
|
3060
|
+
sizeLeft = p.table.clientWidth;
|
|
3061
|
+
sizeToSet = width / sizeLeft;
|
|
3056
3062
|
|
|
3057
|
-
|
|
3058
|
-
|
|
3059
|
-
|
|
3060
|
-
|
|
3063
|
+
if (relatives > 0) {
|
|
3064
|
+
// When there's more than one relative overall,
|
|
3065
|
+
// we can do relative enlarging/shrinking.
|
|
3066
|
+
// Otherwise, we can end up having a 0 width.
|
|
3061
3067
|
|
|
3062
|
-
|
|
3068
|
+
let unNormalizedSizeToSet = sizeToSet / ((1 - sizeToSet) / totalRelativePercentage);
|
|
3063
3069
|
|
|
3064
|
-
|
|
3070
|
+
totalRelativePercentage += sizeToSet;
|
|
3065
3071
|
|
|
3066
|
-
|
|
3067
|
-
|
|
3068
|
-
|
|
3069
|
-
|
|
3070
|
-
}
|
|
3072
|
+
// Account for relative widths scaling later
|
|
3073
|
+
if ((totalRelativePercentage < 1 && o.relativeWidthGrowsToFillWidth) ||
|
|
3074
|
+
(totalRelativePercentage > 1 && o.relativeWidthShrinksToFillWidth)) {
|
|
3075
|
+
sizeToSet = unNormalizedSizeToSet;
|
|
3071
3076
|
}
|
|
3072
|
-
|
|
3073
|
-
sizeToSet *= 100;
|
|
3074
|
-
sizeToSet += '%';
|
|
3075
3077
|
}
|
|
3076
3078
|
|
|
3077
|
-
|
|
3079
|
+
sizeToSet *= 100;
|
|
3080
|
+
sizeToSet += '%';
|
|
3078
3081
|
}
|
|
3082
|
+
|
|
3083
|
+
this.setColumnWidth(column.name, sizeToSet);
|
|
3079
3084
|
}
|
|
3080
3085
|
|
|
3081
3086
|
/**
|
|
@@ -3304,7 +3309,7 @@ class DGTable {
|
|
|
3304
3309
|
columnEl.addEventListener('mouseleave', this._onMouseLeaveColumnHeader.bind(this));
|
|
3305
3310
|
columnEl.addEventListener('touchstart', this._onTouchStartColumnHeader.bind(this));
|
|
3306
3311
|
columnEl.addEventListener('dragstart', this._onStartDragColumnHeader.bind(this));
|
|
3307
|
-
columnEl.addEventListener('click', this.
|
|
3312
|
+
columnEl.addEventListener('click', this._onSortOnColumnHeaderEvent.bind(this));
|
|
3308
3313
|
columnEl.addEventListener('contextmenu', event => { event.preventDefault(); });
|
|
3309
3314
|
inner.addEventListener('dragenter', this._onDragEnterColumnHeader.bind(this));
|
|
3310
3315
|
inner.addEventListener('dragover', this._onDragOverColumnHeader.bind(this));
|