summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ogcp/static/js/ogcp.js17
-rw-r--r--ogcp/templates/images.html17
-rw-r--r--ogcp/views.py8
3 files changed, 37 insertions, 5 deletions
diff --git a/ogcp/static/js/ogcp.js b/ogcp/static/js/ogcp.js
index bdd7581..d5615b8 100644
--- a/ogcp/static/js/ogcp.js
+++ b/ogcp/static/js/ogcp.js
@@ -248,3 +248,20 @@ function RemovePartition(evt) {
});
}
+function checkImageServer() {
+ const images = $('input:checkbox[form|="imagesForm"]:not(:hidden)')
+
+ images.on('change', function() {
+ const selectedServer = $('#' + $.escapeSelector(this.dataset.server));
+ const serversSelector = 'input:checkbox[name|="image-server"]';
+ const nonSelectedServers = $(serversSelector).not(selectedServer);
+
+ selectedServer.prop('checked', true);
+
+ nonSelectedServers.each(function() {
+ $(this).prop('checked', false);
+ const checkboxes = $('input:checkbox[data-server|="' + this.id + '"]');
+ checkboxes.prop('checked', false);
+ });
+ });
+}
diff --git a/ogcp/templates/images.html b/ogcp/templates/images.html
index 4231df2..d053913 100644
--- a/ogcp/templates/images.html
+++ b/ogcp/templates/images.html
@@ -8,17 +8,31 @@
</form>
{{ super() }}
</form>
+
+<script>
+ // Launch the javascript on document ready, so all the global functions exists
+ // in the scope
+ document.addEventListener('readystatechange', () => {
+ if (document.readyState === 'complete') {
+ checkImageServer();
+ }
+ });
+</script>
{% endblock %}
{% block sidebar %}
<ul id="servers" class="nav flex-column nav-pills">
{% for response in responses %}
+ {% set server_str = response["server"]["ip"] ~ ":" ~ response["server"]["port"] %}
+ <input class="form-check-input" type="checkbox" form="imagesForm"
+ id="{{ server_str }}" value="{{ server_str }}"
+ onclick="return false;" name="image-server" hidden/>
<li class="nav-item"><b>{{ response["server"]["name"] }}</b>
<ul id="images" class="nav flex-column nav-pills">
{% for image in response["json"]["images"] %}
<li id="{{ image["name"] }}_{{ image["id"] }}" class="nav-item">
<input class="form-check-input" type="checkbox" form="imagesForm"
- value="{{ image["id"] }}"
+ data-server="{{ server_str }}" value="{{ image["id"] }}"
{% if image.get("selected", False) %}checked{% endif %}
name="{{ image["name"] }}_{{ image["id"] }}" />
{{ image["name"] }}
@@ -41,4 +55,3 @@
</button>
{% endif %}
{% endblock %}
-
diff --git a/ogcp/views.py b/ogcp/views.py
index 3b0d134..c2a40b8 100644
--- a/ogcp/views.py
+++ b/ogcp/views.py
@@ -97,7 +97,7 @@ def validate_elements(elements, min_len=1, max_len=float('inf')):
def parse_elements(checkboxes_dict):
unwanted_elements = ['csrf_token', 'scope-server', 'scope-center',
- 'scope-room']
+ 'scope-room', 'image-server']
elements = set()
for key, elements_list in checkboxes_dict.items():
if key not in unwanted_elements:
@@ -1626,12 +1626,14 @@ def user_delete_post():
@login_required
def action_image_info():
form = ImageDetailsForm()
- ids = parse_elements(request.args.to_dict())
+ params = request.args.to_dict()
+ ids = parse_elements(params)
if not validate_elements(ids, max_len=1):
return redirect(url_for('images'))
id = ids.pop()
- r = g.server.get('/images')
+ server = get_server_from_ip_port(params['image-server'])
+ r = server.get('/images')
images = r.json()['images']
image = next(img for img in images if img['id'] == int(id))