summaryrefslogtreecommitdiffstats
path: root/ogcp
diff options
context:
space:
mode:
authorJavier Sánchez Parra <jsanchez@soleta.eu>2022-02-22 17:22:07 +0100
committerJavier Sánchez Parra <jsanchez@soleta.eu>2022-02-23 10:47:08 +0100
commit886e6c7b67168441ea64ac04039c51264453fd77 (patch)
treeef9cf7ead91d5d0a1764e00644bc74dd675f7b21 /ogcp
parent1d68e2619a74d7d8b2bd8faefbf01b9794f3a2f7 (diff)
Show selected clients in container block
On scopes and commands views, draw clients as users selects them in the scopes tree. Trigger client drawing on two events: 1."change" event, occurs when the user clicks a client checkbox. This event is standard [1]. 2. "show-client" event, fires when ogcp get selected clients from localStorage and when an user checks a parent checkbox. This event is custom. Dot characters (".") in clients names are replaced by underscore("_") when used as id to avoid errors. 1. https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/change_event
Diffstat (limited to 'ogcp')
-rw-r--r--ogcp/static/js/ogcp.js30
-rw-r--r--ogcp/templates/commands.html3
-rw-r--r--ogcp/templates/macros.html5
-rw-r--r--ogcp/templates/scopes.html4
4 files changed, 42 insertions, 0 deletions
diff --git a/ogcp/static/js/ogcp.js b/ogcp/static/js/ogcp.js
index 8a6db02..dc1c063 100644
--- a/ogcp/static/js/ogcp.js
+++ b/ogcp/static/js/ogcp.js
@@ -2,6 +2,34 @@ const Endpoint = '/scopes/status';
const Interval = 1000;
let updateTimeoutId = null;
+function showSelectedClient(client_checkbox) {
+ const container = $('#selected-clients');
+ const pill_id = 'pill-' + client_checkbox.name.replaceAll('.', '_');
+
+ if (client_checkbox.checked) {
+ if (!($('#' + pill_id).length))
+ $(container).append('<div class="badge badge-pill badge-light" ' +
+ 'id="'+ pill_id + '">' + client_checkbox.name +
+ '<br>' + client_checkbox.value + '</div>');
+ return;
+ }
+
+ $('#' + pill_id).remove();
+}
+
+function showSelectedClientsOnEvents() {
+ const checkboxes = $('input:checkbox[form|="scopesForm"]');
+ const container = $('#selected-clients');
+
+ const client_checkboxes = checkboxes.filter(function () {
+ return $(this).siblings().length == "1";
+ });
+
+ client_checkboxes.on('change show-client', function () {
+ showSelectedClient(this);
+ });
+}
+
function storeCheckboxStatus(checkbox) {
if (checkbox.checked)
localStorage.setItem(checkbox.name, "check");
@@ -18,6 +46,7 @@ function checkChildrenCheckboxes() {
children.each(function () {
this.checked = checked;
storeCheckboxStatus(this);
+ $(this).trigger('show-client');
});
});
}
@@ -32,6 +61,7 @@ function keepSelectedClients() {
checkboxes.each(function () {
if (localStorage.getItem(this.name) == 'check') {
this.checked = true;
+ $(this).trigger('show-client');
}
});
}
diff --git a/ogcp/templates/commands.html b/ogcp/templates/commands.html
index 1b51701..9fa8617 100644
--- a/ogcp/templates/commands.html
+++ b/ogcp/templates/commands.html
@@ -96,3 +96,6 @@
</div>
{% endblock %}
+{% block content %}
+ {{ macros.selected_clients() }}
+{% endblock %}
diff --git a/ogcp/templates/macros.html b/ogcp/templates/macros.html
index a1b5ebb..7864cd4 100644
--- a/ogcp/templates/macros.html
+++ b/ogcp/templates/macros.html
@@ -8,6 +8,7 @@
// in the scope
document.addEventListener('readystatechange', () => {
if (document.readyState === 'complete') {
+ showSelectedClientsOnEvents();
updateScopeState();
keepScopesTreeState();
keepSelectedClients();
@@ -47,3 +48,7 @@
</li>
{% endfor %}
{% endmacro %}
+
+{% macro selected_clients() -%}
+<div id="selected-clients" class="d-flex flex-wrap justify-content-center"></div>
+{% endmacro %}
diff --git a/ogcp/templates/scopes.html b/ogcp/templates/scopes.html
index 6c543fa..81b2403 100644
--- a/ogcp/templates/scopes.html
+++ b/ogcp/templates/scopes.html
@@ -29,3 +29,7 @@
<input class="btn btn-light" type="submit" value="{{ _('Delete center') }}"
form="scopesForm" formaction="{{ url_for('action_center_delete') }}" formmethod="get">
{% endblock %}
+
+{% block content %}
+ {{ macros.selected_clients() }}
+{% endblock %}