()
| 1 | // Column resizer module |
| 2 | |
| 3 | export 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); |
nothing calls this directly
no outgoing calls
no test coverage detected