summaryrefslogtreecommitdiffstats
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
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
-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 %}