about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--uploader/static/js/datatables.js32
-rw-r--r--uploader/templates/phenotypes/confirm-delete-phenotypes.html3
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);
                   });
               }
           });