diff options
author | Alejandro Sirgo Rica <asirgo@soleta.eu> | 2024-08-23 12:17:41 +0200 |
---|---|---|
committer | Alejandro Sirgo Rica <asirgo@soleta.eu> | 2024-08-30 13:34:55 +0200 |
commit | 31766a3d07549e846c61ead624b4a45f88948fc0 (patch) | |
tree | f2f06975e74aeef719a875de805cffeb59ffaba2 /ogcp/templates/repo_inspector.html | |
parent | bcd18241c7bf0363d00b2203c294d443b22d7807 (diff) |
ogcp: add support for multi-ip repositories
Add support for the new API REST for repository management where
the address is a list of ips instead of a single string.
Add dynamic address creation in /action/repo/update and
/action/repo/add forms through delete and add buttons in the form.
Update /image/restore and /cache/fetch to use repository_id.
Add additional repository form validations.
Diffstat (limited to 'ogcp/templates/repo_inspector.html')
-rw-r--r-- | ogcp/templates/repo_inspector.html | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/ogcp/templates/repo_inspector.html b/ogcp/templates/repo_inspector.html new file mode 100644 index 0000000..ccedf5f --- /dev/null +++ b/ogcp/templates/repo_inspector.html @@ -0,0 +1,63 @@ +<form class="form mx-5" method="POST"> + {{ form.hidden_tag() }} + + {{ form.server() }} + {{ form.repo_id() }} + + <div class="form-group"> + {{ form.name.label }} + {{ form.name(class="form-control", required=True) }} + </div> + + <div class="form-group"> + {{ form.addr.label }} + <div id="ip-fields"> + {% for addr in form.addr %} + <div class="d-flex align-items-center mb-2"> + {{ addr(class="form-control me-2", placeholder=_("Enter IP Address"), required=True) }} + <button type="button" class="btn btn-danger" onclick="removeIPField(this)">{{_('Remove') }}</button> + </div> + {% endfor %} + </div> + <button type="button" class="btn btn-primary" onclick="addIPField()">{{_('Add address') }}</button> + + {{ form.submit(class="btn btn-success") }} + </div> +</form> + +<script> + function addIPField() { + const container = document.createElement('div'); + container.classList.add('d-flex', 'align-items-center', 'mb-2'); + + const newField = document.createElement('input'); + newField.setAttribute('type', 'text'); + newField.setAttribute('name', 'addr-' + document.querySelectorAll('input[name^="addr-"]').length); + newField.classList.add('form-control', 'me-2'); + newField.setAttribute('placeholder', '{{ _('Enter IP Address') }}'); + newField.required = true; + + const removeButton = document.createElement('button'); + removeButton.setAttribute('type', 'button'); + removeButton.classList.add('btn', 'btn-danger'); + removeButton.innerText = '{{ _('Remove') }}'; + removeButton.onclick = function() { + removeIPField(this); + }; + + container.appendChild(newField); + container.appendChild(removeButton); + document.getElementById('ip-fields').appendChild(container); + } + + function removeIPField(elem) { + const ipFieldsContainer = document.getElementById('ip-fields'); + const ipFieldDivs = ipFieldsContainer.querySelectorAll('.d-flex'); + + if (ipFieldDivs.length <= 1) { + return; + } + const parentDiv = elem.parentElement; + parentDiv.remove(); + } +</script>
\ No newline at end of file |