templates: save checkbox state in images and repos

Store the checked checkboxes of the sidebar in Images and Repos.
Autoselect the correct server after updating the checkboxes.
master
Alejandro Sirgo Rica 2024-09-16 13:57:31 +02:00
parent 2ca2215ed6
commit 053519beae
4 changed files with 24 additions and 43 deletions

View File

@ -298,41 +298,6 @@ function updateScopes(scopes) {
return hasLiveChildren;
}
function checkImageServer() {
const images = $('input:checkbox[form|="imagesForm"][name!="image-server"]')
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);
});
});
}
function checkRepoServer() {
const repos = $('input:checkbox[form|="reposForm"][name!="repos-server"]')
repos.on('change', function() {
const selectedServer = $('#' + $.escapeSelector(this.dataset.server));
const serversSelector = 'input:checkbox[name|="repos-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);
});
});
}
function checkFolderParent(context) {
const folder = $('#sidebar input:checkbox[name="folder"]')
folder.on('change', function() {
@ -362,7 +327,7 @@ function limitCheckboxes(context) {
}
});
checkScopeServer();
checkCheckbox('scope-server');
checkboxes.each(function() {
storeCheckboxStatus(this, context);
@ -371,9 +336,9 @@ function limitCheckboxes(context) {
});
}
function checkScopeServer() {
const servers = $('#sidebar input:checkbox[name="scope-server"]');
servers.each(function() {
function checkCheckbox(inputName) {
const checkboxes = $('#sidebar input:checkbox[name="' + inputName + '"]');
checkboxes.each(function() {
const checkbox = this;
const checkboxChildren = $('input:checkbox', this.parentNode).not(this);
if (checkboxChildren.length == 0) return;
@ -382,3 +347,15 @@ function checkScopeServer() {
checkbox.checked = checkedChildren.length > 0;
});
}
function checkOnChange(inputName) {
const checkboxes = $('#sidebar input:checkbox')
checkboxes.on('change', function (event) {
checkCheckbox(inputName);
});
checkboxes.each(function () {
checkCheckbox(inputName)
});
}

View File

@ -111,7 +111,7 @@
<!-- ChartJS -->
<script src="{{ url_for('static', filename='AdminLTE/plugins/chart.js/Chart.min.js') }}"></script>
<script src="{{ url_for('static', filename='js/ogcp.js') }}?v=20"></script>
<script src="{{ url_for('static', filename='js/ogcp.js') }}?v=21"></script>
<script>
// error messages

View File

@ -15,7 +15,8 @@
document.addEventListener('readystatechange', () => {
if (document.readyState === 'complete') {
keepTreeState('#servers');
checkImageServer();
keepSelectedClients('images');
checkOnChange('image-server');
}
});
</script>
@ -45,7 +46,8 @@
<input class="form-check-input" type="checkbox" form="imagesForm"
data-server="{{ server_str }}" value="{{ image["id"] }}"
{% if image.get("selected", False) %}checked{% endif %}
name="{{ image["name"] }}_{{ image["id"] }}" />
name="{{ image["name"] }}_{{ image["id"] }}"
id="image{{ image["id"] }}"/>
{{ image["name"] }}
</li>
{% endfor %}

View File

@ -27,6 +27,7 @@
{% for r in repos_list %}
<li class="nav-item">
<input class="form-check-input" type="checkbox" form="reposForm"
id="repo{{ r["id"] }}"
data-server="{{server_ip_port}}"
value="{{ r["id"] }}"
name="{{ r["name"]~_~r["id"] }}" />
@ -43,7 +44,8 @@
document.addEventListener('readystatechange', () => {
if (document.readyState === 'complete') {
keepTreeState('#repos-list')
checkRepoServer()
keepSelectedClients('repos');
checkOnChange('repos-server');
}
});
</script>