diff options
| author | Frederick Muriuki Muriithi | 2026-01-26 12:13:41 -0600 |
|---|---|---|
| committer | Frederick Muriuki Muriithi | 2026-01-26 12:45:10 -0600 |
| commit | 8bfc210f23b25431d7476cc4fcabbf52a46748c7 (patch) | |
| tree | b8db672da47d9beb4b89bf54e596bc3ad73ec015 | |
| parent | 98941130faad30baff70f863efd4b0e6e51d26d4 (diff) | |
| download | gn-uploader-8bfc210f23b25431d7476cc4fcabbf52a46748c7.tar.gz | |
Bug: DataTables: Check both radio buttons and checkboxes.
Extract logic for checking/unchecking a datatable's row's checkbox or radio button as relevant, into a new function. Use new function instead of multiple copies of the logic.
| -rw-r--r-- | uploader/static/js/datatables.js | 32 | ||||
| -rw-r--r-- | uploader/templates/phenotypes/confirm-delete-phenotypes.html | 3 |
2 files changed, 25 insertions, 10 deletions
diff --git a/uploader/static/js/datatables.js b/uploader/static/js/datatables.js index 2ed435b..bfcda2a 100644 --- a/uploader/static/js/datatables.js +++ b/uploader/static/js/datatables.js @@ -21,6 +21,26 @@ var defaultLengthMenu = (data) => { return menuList; }; +var setRowCheckableProperty = (node, state) => { + /** + * Set a row's (`node`) checkbox's or radio button's checked state to the + * boolean value `state`. + **/ + if(typeof(state) == "boolean") { + var pseudoclass = state == false ? ":checked" : ":not(:checked)"; + var checkable = ( + $(node).find(`input[type="checkbox"]${pseudoclass}`)[0] + || + $(node).find(`input[type="radio"]${pseudoclass}`)[0]); + $(checkable).prop("checked", state); + } else { + throw new Error("`state` *MUST* be a boolean value.") + } +}; + +var setRowChecked = (node) => {setRowCheckableProperty(node, true);}; +var setRowUnchecked = (node) => {setRowCheckableProperty(node, false);}; + var buildDataTable = (tableId, data = [], columns = [], userSettings = {}) => { var defaultSettings = { responsive: true, @@ -41,12 +61,10 @@ var buildDataTable = (tableId, data = [], columns = [], userSettings = {}) => { drawCallback: function (settings) { var api = this.api(); api.rows({selected: true}).nodes().each((node, index) => { - $(node).find('input[type="checkbox"]:checked') - .prop("checked", true); + setRowChecked(node); }); api.rows({selected: false}).nodes().each((node, index) => { - $(node).find('input[type="checkbox"]:not(:checked)') - .prop("checked", false); + setRowUnchecked(node); }); } } @@ -61,8 +79,7 @@ var buildDataTable = (tableId, data = [], columns = [], userSettings = {}) => { .rows(indexes) .nodes() .each((node, index) => { - $(node).find('input[type="checkbox"]:not(:checked)') - .prop("checked", true); + setRowChecked(node); }); }); theDataTable.on("deselect", (event, datatable, type, indexes) => { @@ -70,8 +87,7 @@ var buildDataTable = (tableId, data = [], columns = [], userSettings = {}) => { .rows(indexes) .nodes() .each(function(node, index) { - $(node).find('input[type="checkbox"]:checked') - .prop("checked", false); + setRowUnchecked(node); }); }); diff --git a/uploader/templates/phenotypes/confirm-delete-phenotypes.html b/uploader/templates/phenotypes/confirm-delete-phenotypes.html index 36cab2c..efce397 100644 --- a/uploader/templates/phenotypes/confirm-delete-phenotypes.html +++ b/uploader/templates/phenotypes/confirm-delete-phenotypes.html @@ -89,8 +89,7 @@ var api = this.api(); api.rows().select(); api.rows({selected: true}).nodes().each((node, index) => { - $(node).find('input[type="checkbox"]:not(:checked)') - .prop("checked", true); + setRowChecked(node); }); } }); |
