diff options
| -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); }); } }); |
