/** * javascript/settings.js * * Settings panel: reads/writes unraid-podman's own configuration via * ajax/settings.php (podman.cfg + the autostart list) — not a * PodmanClient/libpod concern, see that file's header comment. */ (function () { 'use strict'; const P = window.Podman; let autostartNames = []; function renderAutostart() { const tbody = P.el('autostart-tbody'); tbody.innerHTML = autostartNames.length ? autostartNames.map(function (name, i) { return '' + '' + (i + 1) + '' + '' + P.escapeHtml(name) + '' + '
' + '' + '' + '' + '
'; }).join('') : 'No containers in the autostart chain.'; } function saveAutostart() { return P.post('settings', 'autostart_save', { names: autostartNames }).catch(function (err) { alert('Could not save autostart order: ' + err.message); }); } function fillForm(settings) { P.el('settings-storage-path').value = settings.storagePath; P.el('settings-storage-size').value = settings.storageImageSizeGb; P.el('settings-enabled').checked = settings.enabled; P.el('settings-stop-timeout').value = settings.stopTimeoutSeconds; autostartNames = settings.autostart.slice(); renderAutostart(); const versions = settings.packageVersions || {}; const order = ['PODMAN', 'CONMON', 'CRUN', 'NETAVARK', 'AARDVARK_DNS', 'PASST', 'FUSE_OVERLAYFS']; const chipsHtml = order.map(function (k) { const name = k.toLowerCase().replace(/_/g, '-'); const version = versions[k + '_INSTALLED_VERSION']; return '' + P.escapeHtml(name) + ' ' + P.escapeHtml(version || '?') + ''; }).join(''); P.el('settings-package-versions').innerHTML = chipsHtml || 'No version manifest found.'; } function load() { return P.get('settings', 'get').then(fillForm).catch(function (err) { alert('Could not load settings: ' + err.message); }); } function save() { const body = { storagePath: P.el('settings-storage-path').value.trim(), storageImageSizeGb: parseInt(P.el('settings-storage-size').value, 10) || 20, enabled: P.el('settings-enabled').checked, stopTimeoutSeconds: parseInt(P.el('settings-stop-timeout').value, 10) || 10, }; return P.post('settings', 'save', body).then(function () { alert('Saved. Restart podman (rc.podman restart) to apply storage/enabled changes.'); }).catch(function (err) { alert('Save failed: ' + err.message); }); } function init() { P.el('settings-save-btn').addEventListener('click', save); P.el('autostart-tbody').addEventListener('click', function (e) { const btn = e.target.closest('button[data-action]'); if (!btn) return; const i = parseInt(btn.closest('tr').dataset.index, 10); const action = btn.dataset.action; if (action === 'remove') { autostartNames.splice(i, 1); } else if (action === 'up' && i > 0) { [autostartNames[i - 1], autostartNames[i]] = [autostartNames[i], autostartNames[i - 1]]; } else if (action === 'down' && i < autostartNames.length - 1) { [autostartNames[i + 1], autostartNames[i]] = [autostartNames[i], autostartNames[i + 1]]; } renderAutostart(); saveAutostart(); }); return load(); } P.registerPanel('settings', { init: init, refresh: load }); })();