From 2d48a6bad61c1d0448d16c6feaa8e1f5394c6aa8 Mon Sep 17 00:00:00 2001 From: Ross Date: Wed, 25 Mar 2026 22:10:15 +0000 Subject: [PATCH] Enhance row selection toggle functionality in SelectionTable to manage user selection state and improve user experience --- generic/tables.py | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/generic/tables.py b/generic/tables.py index 286f50d5..6388a263 100644 --- a/generic/tables.py +++ b/generic/tables.py @@ -161,7 +161,35 @@ class SelectionTable(tables.Table): table.addEventListener('change', function(e){ if (e.target && e.target.matches && e.target.matches('input[type="checkbox"]')) updateSelectedCount(); }, true); - toggleBtn.addEventListener('click', function(){ selectionEnabled = !selectionEnabled; if (selectionEnabled){ toggleBtn.textContent = 'Disable row selection'; if (controlsEl) controlsEl.style.display = ''; setCheckboxesDisabled(false); showSelectionColumn(); } else { toggleBtn.textContent = 'Enable row selection'; if (controlsEl) controlsEl.style.display = 'none'; setCheckboxesDisabled(true); hideSelectionColumn(); findRowCheckboxes().forEach(function(cb){ cb.checked = false; }); updateSelectedCount(); lastChecked = null; } }); + toggleBtn.addEventListener('click', function(){ + selectionEnabled = !selectionEnabled; + if (selectionEnabled){ + toggleBtn.textContent = 'Disable row selection'; + if (controlsEl) controlsEl.style.display = ''; + setCheckboxesDisabled(false); + showSelectionColumn(); + try { + table.style.userSelect = 'none'; + table.style.webkitUserSelect = 'none'; + table.style.MozUserSelect = 'none'; + table.classList && table.classList.add('selection-mode'); + } catch (e) {} + } else { + toggleBtn.textContent = 'Enable row selection'; + if (controlsEl) controlsEl.style.display = 'none'; + setCheckboxesDisabled(true); + hideSelectionColumn(); + findRowCheckboxes().forEach(function(cb){ cb.checked = false; }); + updateSelectedCount(); + lastChecked = null; + try { + table.style.userSelect = ''; + table.style.webkitUserSelect = ''; + table.style.MozUserSelect = ''; + table.classList && table.classList.remove('selection-mode'); + } catch (e) {} + } + }); if (selectAllBtn) selectAllBtn.addEventListener('click', function(){ findRowCheckboxes().forEach(function(cb){ if (!cb.disabled) cb.checked = true; }); updateSelectedCount(); lastChecked = null; }); if (clearBtn) clearBtn.addEventListener('click', function(){ findRowCheckboxes().forEach(function(cb){ if (!cb.disabled) cb.checked = false; }); updateSelectedCount(); lastChecked = null; });