diff --git a/ogcp/static/js/ogcp.js b/ogcp/static/js/ogcp.js
index 5259ea1..964e68d 100644
--- a/ogcp/static/js/ogcp.js
+++ b/ogcp/static/js/ogcp.js
@@ -137,6 +137,25 @@ function keepSelectedClients() {
});
}
+function keepImagesTreeState() {
+ const images_tree = $('#servers .collapse')
+ console.log(images_tree)
+ images_tree.on('hidden.bs.collapse', function (event) {
+ event.stopPropagation();
+ localStorage.removeItem(this.id);
+ });
+ images_tree.on('shown.bs.collapse', function (event) {
+ event.stopPropagation();
+ localStorage.setItem(this.id, 'show');
+ });
+
+ images_tree.each(function () {
+ if (localStorage.getItem(this.id) == 'show') {
+ $(this).collapse('show');
+ }
+ });
+}
+
function keepReposTreeState() {
const repos_tree = $('#repos-list .collapse')
diff --git a/ogcp/templates/images.html b/ogcp/templates/images.html
index 3b1a296..2a50d39 100644
--- a/ogcp/templates/images.html
+++ b/ogcp/templates/images.html
@@ -14,6 +14,7 @@
// in the scope
document.addEventListener('readystatechange', () => {
if (document.readyState === 'complete') {
+ keepImagesTreeState();
checkImageServer();
}
});
@@ -24,22 +25,31 @@
{% for response in responses %}
{% set server_str = response["server"]["ip"] ~ ":" ~ response["server"]["port"] %}
+ {% set parent_id = "repos-" ~ loop.index0 %}
-
-
+
{{ response["server"]["name"] }}
-
diff --git a/ogcp/views.py b/ogcp/views.py
index b008673..406de44 100644
--- a/ogcp/views.py
+++ b/ogcp/views.py
@@ -1479,10 +1479,34 @@ def commands():
scopes, clients = get_scopes()
return render_template('commands.html', scopes=scopes, clients=clients)
+def get_images_grouped_by_repos():
+ responses = multi_request('get', '/images')
+ servers=[]
+ for resp in responses:
+ server={}
+ server['server'] = resp['server']
+ images=resp['json']['images']
+ all_repos=get_repositories(resp['server'])
+ repos={}
+ for image in images:
+ repo_id=image['repo_id']
+ repo_data={}
+ if repo_id not in repos:
+ repo_name = [repo['name'] for repo in all_repos
+ if repo_id == repo['id']][0]
+ repos[repo_id] = {}
+ repos[repo_id]['name'] = repo_name
+ repos[repo_id]['images'] = [image]
+ else:
+ repos[repo_id]['images'].append(image)
+ server['repos'] = repos
+ servers.append(server)
+ return servers
+
@app.route('/images/', methods=['GET'])
@login_required
def images():
- responses = multi_request('get', '/images')
+ responses = get_images_grouped_by_repos()
return render_template('images.html', responses=responses)
@@ -1942,7 +1966,7 @@ def action_image_info():
form.software_id.data = image['software_id']
form.description.data = image['description']
- responses = multi_request('get', '/images')
+ responses = get_images_grouped_by_repos()
return render_template('actions/image_details.html', form=form,
responses=responses)
@@ -1972,7 +1996,7 @@ def action_image_delete():
return redirect(url_for('images'))
image_name, image_id = images[0]
server = get_server_from_ip_port(params['image-server'])
- responses = multi_request('get', '/images')
+ responses = get_images_grouped_by_repos()
form.ids.data = image_id
form.server.data = params['image-server']
if not validate_elements(images, max_len=1):