summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJavier Sánchez Parra <jsanchez@soleta.eu>2022-04-05 16:52:05 +0200
committerJavier Sánchez Parra <jsanchez@soleta.eu>2022-04-08 08:03:10 +0200
commit4c9c3b48db02bcc27a89da694cd9ef5aad1c14c5 (patch)
treeddff644cc25d5363d4a92d90cff7280020710afc
parent1120b31e3838f3c7806df83cdeaab6a02b95eca6 (diff)
Add indeterminate checkboxes to scopes tree
Each checkbox may have child checkboxes. If all those children are checked, it be checked. If none are checked, it is unchecked. If some of them are checked, then it’s in an indeterminate state (in this case symbolically meaning “partially” checked).
-rw-r--r--ogcp/static/js/ogcp.js20
-rw-r--r--ogcp/templates/macros.html1
2 files changed, 21 insertions, 0 deletions
diff --git a/ogcp/static/js/ogcp.js b/ogcp/static/js/ogcp.js
index ac31c65..86a9282 100644
--- a/ogcp/static/js/ogcp.js
+++ b/ogcp/static/js/ogcp.js
@@ -37,6 +37,25 @@ function storeCheckboxStatus(checkbox) {
localStorage.removeItem(checkbox.name);
}
+function checkParentsCheckboxes() {
+ const checkboxes = $('input:checkbox[form|="scopesForm"]');
+ const reversedCheckboxes = $(checkboxes.get().reverse())
+
+ reversedCheckboxes.each(function() {
+ const checkbox = this;
+ const checkboxChildren = $('input:checkbox', this.parentNode).not(this);
+
+ if (checkboxChildren.length == 0) return;
+
+ const unCheckedChildren = checkboxChildren.filter(":not(:checked)");
+
+ checkbox.indeterminate =
+ unCheckedChildren.length > 0 &&
+ unCheckedChildren.length < checkboxChildren.length;
+ checkbox.checked = unCheckedChildren.length === 0;
+ });
+}
+
function checkChildrenCheckboxes() {
const checkboxes = $('input:checkbox[form|="scopesForm"]')
@@ -48,6 +67,7 @@ function checkChildrenCheckboxes() {
storeCheckboxStatus(this);
$(this).trigger('show-client');
});
+ checkParentsCheckboxes();
});
}
diff --git a/ogcp/templates/macros.html b/ogcp/templates/macros.html
index 6f19a30..ba500b3 100644
--- a/ogcp/templates/macros.html
+++ b/ogcp/templates/macros.html
@@ -13,6 +13,7 @@
keepScopesTreeState();
keepSelectedClients();
checkChildrenCheckboxes();
+ checkParentsCheckboxes();
}
});
</script>