diff options
author | Javier Hernandez <jhernandez@soleta.eu> | 2024-01-11 13:36:19 +0100 |
---|---|---|
committer | OpenGnSys Support Team <soporte-og@soleta.eu> | 2024-01-11 13:36:19 +0100 |
commit | cba7a0c1c617e1039055652318c11f309eda932f (patch) | |
tree | 0c5424dd702c735f3757a73408a51b21dfc0a65e | |
parent | 2509cacc005832b37e181f6a6a4795f5c7e1fff9 (diff) |
views: Add computers to folder
Add support for adding computers to a folder.
It uses a js script that when selecting a folder in the html form, it
will also select the parent of the folder. For instance, if the user
were to select a folder that is contained inside a room, the room would
also get selected. This allows the view to know which parent contains
the folder.
-rw-r--r-- | ogcp/forms/action_forms.py | 1 | ||||
-rw-r--r-- | ogcp/static/js/ogcp.js | 8 | ||||
-rw-r--r-- | ogcp/templates/macros.html | 14 | ||||
-rw-r--r-- | ogcp/views.py | 10 |
4 files changed, 25 insertions, 8 deletions
diff --git a/ogcp/forms/action_forms.py b/ogcp/forms/action_forms.py index cbdaaaa..c803b02 100644 --- a/ogcp/forms/action_forms.py +++ b/ogcp/forms/action_forms.py @@ -129,6 +129,7 @@ class ClientDetailsForm(FlaskForm): ('eth2', 'eth2')]) repo = SelectField(label=_l('Repository')) room = SelectField(label=_l('Room')) + folder_id = HiddenField() boot = SelectField(label=_l('Boot Mode')) submit = SubmitField(label=_l('Submit')) diff --git a/ogcp/static/js/ogcp.js b/ogcp/static/js/ogcp.js index 964e68d..ccd8a1e 100644 --- a/ogcp/static/js/ogcp.js +++ b/ogcp/static/js/ogcp.js @@ -374,6 +374,14 @@ function checkRepoServer() { }); } +function checkFolderParent() { + const folder = $('input:checkbox[form|="scopesForm"][name="folder"]') + folder.on('change', function() { + const folder_parent = $('#' + $.escapeSelector(this.dataset.parentInput)); + folder_parent.prop('checked', true); + }); +} + function limitCheckboxes() { const checkboxes = $('input:checkbox[form|="scopesForm"]'); diff --git a/ogcp/templates/macros.html b/ogcp/templates/macros.html index e78cb5b..a00556f 100644 --- a/ogcp/templates/macros.html +++ b/ogcp/templates/macros.html @@ -17,6 +17,7 @@ checkParentsCheckboxes(); {% elif selection_mode == 'scopes' %} limitCheckboxes(); + checkFolderParent(); {% endif %} } }); @@ -27,14 +28,15 @@ {% macro scopes_tree_collapse_level(scopes, parent_room, parent_id, state, selection_mode) -%} {% for scope in scopes %} <li id="{{ scope["name"]|replace(".", "_")|replace(" ", "_") }}_{{ scope["id"] }}" class="nav-item"> + {% set input_id = "input" ~ parent_id ~ "-" ~ loop.index %} {% if scope["type"] == "server" %} - <input class="form-check-input" type="checkbox" form="scopesForm" + <input id="{{ input_id }}" class="form-check-input" type="checkbox" form="scopesForm" value="{{ scope["server_ip_port"] }}" onclick="return false;" {% if scope.get("selected", False) %}checked{% endif %} name="scope-server" hidden/> {% elif scope["type"] == "center" %} {% if selection_mode != "commands" %} - <input class="form-check-input" type="checkbox" form="scopesForm" + <input id="{{ input_id }}" class="form-check-input" type="checkbox" form="scopesForm" value="{{ scope["id"] }}" {% if state %}style="filter: grayscale(100%);" onclick="return false;"{% endif %} {% if scope.get("selected", False) %}checked{% endif %} @@ -42,19 +44,19 @@ {% endif %} {% elif scope["type"] == "room" %} {% set parent_room = scope.name + "-" + scope.id|string %} - <input class="form-check-input" type="checkbox" form="scopesForm" + <input id="{{ input_id }}" class="form-check-input" type="checkbox" form="scopesForm" value="{{ scope["id"] }}" data-room="{{ parent_room }}" {% if state %}style="filter: grayscale(100%);" onclick="return false;"{% endif %} {% if scope.get("selected", False) %}checked{% endif %} name="scope-room" /> {% elif scope["type"] == "folder" %} - <input class="form-check-input" type="checkbox" form="scopesForm" - value="{{ scope["id"] }}" + <input id="{{ input_id }}" class="form-check-input" type="checkbox" form="scopesForm" + value="{{ scope["id"] }}" data-parent-input="{{ "input" ~ parent_id }}" {% if state %}style="filter: grayscale(100%);" onclick="return false;"{% endif %} {% if scope.get("selected", False) %}checked{% endif %} name="folder" /> {% elif " ".join(scope["ip"]) %} - <input class="form-check-input" type="checkbox" form="scopesForm" + <input id="{{ input_id }}" class="form-check-input" type="checkbox" form="scopesForm" value="{{ " ".join(scope["ip"]) }}" data-parent-room="{{ parent_room }}" {% if state %}style="filter: grayscale(100%);" onclick="return false;"{% endif %} {% if scope.get("selected", False) %}checked{% endif %} diff --git a/ogcp/views.py b/ogcp/views.py index 1203ffd..2ca2681 100644 --- a/ogcp/views.py +++ b/ogcp/views.py @@ -1095,7 +1095,8 @@ def action_client_add(): "remote": form.remote.data, "repo_id": int(form.repo.data), "room": int(form.room.data), - "serial_number": form.serial_number.data} + "serial_number": form.serial_number.data, + "folder_id": int(form.folder_id.data) } server = get_server_from_ip_port(form.server.data) r = server.post('/client/add', payload) @@ -1108,7 +1109,7 @@ def action_client_add(): else: params = request.args.to_dict() if not params.get('scope-room'): - flash(_('Please, select one room'), category='error') + flash(_('Please, select a room or a folder'), category='error') return redirect(url_for('scopes')) form.server.data = params['scope-server'] server = get_server_from_ip_port(params['scope-server']) @@ -1128,6 +1129,11 @@ def action_client_add(): repositories = get_repositories(server) form.repo.choices = [(repo["id"], repo["name"]) for repo in repositories] + if params.get('folder'): + form.folder_id.data = params['folder'] + else: + form.folder_id.data = 0 + form.submit.render_kw = {"formaction": url_for('action_client_add')} scopes, clients = get_scopes() return render_template('actions/client_details.html', form=form, |