MCPcopy Create free account
hub / github.com/bywwcnll/StreamPanel / initColumnResizers

Function initColumnResizers

devtools/modules/columnResizer.js:3–63  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

1// Column resizer module
2
3export function initColumnResizers() {
4 const table = document.getElementById('message-table');
5 if (!table) return;
6
7 const resizers = table.querySelectorAll('.col-resizer');
8 let currentResizer = null;
9 let startX = 0;
10 let startWidth = 0;
11 let headerCell = null;
12 let colClass = '';
13
14 resizers.forEach(resizer => {
15 resizer.addEventListener('mousedown', (e) => {
16 e.preventDefault();
17 e.stopPropagation();
18
19 currentResizer = resizer;
20 headerCell = resizer.parentElement;
21 colClass = resizer.dataset.col;
22 startX = e.pageX;
23 startWidth = headerCell.offsetWidth;
24
25 resizer.classList.add('resizing');
26 document.body.style.cursor = 'col-resize';
27 document.body.style.userSelect = 'none';
28
29 document.addEventListener('mousemove', onMouseMove);
30 document.addEventListener('mouseup', onMouseUp);
31 });
32 });
33
34 function onMouseMove(e) {
35 if (!currentResizer || !headerCell || !colClass) return;
36
37 const diff = e.pageX - startX;
38 const newWidth = Math.max(40, startWidth + diff);
39
40 table.style.setProperty('--col-' + colClass + '-width', newWidth + 'px');
41
42 if (colClass === 'data') {
43 const dataCells = table.querySelectorAll('.col-data');
44 dataCells.forEach(cell => {
45 cell.style.flex = 'none';
46 });
47 }
48 }
49
50 function onMouseUp() {
51 if (currentResizer) {
52 currentResizer.classList.remove('resizing');
53 }
54 currentResizer = null;
55 headerCell = null;
56 colClass = '';
57 document.body.style.cursor = '';
58 document.body.style.userSelect = '';
59
60 document.removeEventListener('mousemove', onMouseMove);

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected