diff options
author | Javier Sánchez Parra <jsanchez@soleta.eu> | 2022-02-22 17:22:07 +0100 |
---|---|---|
committer | Javier Sánchez Parra <jsanchez@soleta.eu> | 2022-02-23 10:47:08 +0100 |
commit | 886e6c7b67168441ea64ac04039c51264453fd77 (patch) | |
tree | ef9cf7ead91d5d0a1764e00644bc74dd675f7b21 | |
parent | 1d68e2619a74d7d8b2bd8faefbf01b9794f3a2f7 (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.js | 30 | ||||
-rw-r--r-- | ogcp/templates/commands.html | 3 | ||||
-rw-r--r-- | ogcp/templates/macros.html | 5 | ||||
-rw-r--r-- | ogcp/templates/scopes.html | 4 |
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 %} |