Partnership: fix onclick functions not accessible outside IIFE
Tab pages use full page reloads (not AJAX) — function declarations inside the IIFE are not in global scope, so onclick= attributes fail silently. Fix: assign all onclick-callable functions to window.* Replace vvRunById() calls with direct fetch (vvRunById is also IIFE-scoped in scheduler.php, unavailable in the partnership tab context). Add .catch() handlers so network/parse errors surface as alerts.
This commit is contained in:
@@ -342,48 +342,55 @@ function _render(data) {
|
||||
|
||||
// ── Actions ───────────────────────────────────────────────────────────────────
|
||||
|
||||
function vvPtPhase1(btn, hostId) {
|
||||
function _vvPtRun(id, extraArgs) {
|
||||
const params = {id, manual: '1'};
|
||||
if (extraArgs) params.extra_args = extraArgs;
|
||||
return fetch('/plugins/varaverk/api/run.php', {
|
||||
method: 'POST',
|
||||
body: new URLSearchParams(params)
|
||||
}).then(r => r.json());
|
||||
}
|
||||
|
||||
window.vvPtPhase1 = function(btn, hostId) {
|
||||
if (!confirm(`Phase 1: SSH key exchange + conf push to ${hostId}?\n\nSafe to run before ${hostId} has Varaverk installed.`)) return;
|
||||
btn.disabled = true;
|
||||
btn.textContent = '⟳ Starting…';
|
||||
fetch('/plugins/varaverk/api/run.php', {
|
||||
method: 'POST',
|
||||
body: new URLSearchParams({id: 'Partnership/partnership_onboard.sh', manual: '1', extra_args: '--phase1-only'})
|
||||
}).then(r => r.json()).then(d => {
|
||||
if (!d.ok) { alert('Failed: ' + (d.error ?? 'Unknown error')); }
|
||||
setTimeout(() => { btn.disabled = false; btn.textContent = '▶ Phase 1: SSH + Conf Push'; }, 3000);
|
||||
});
|
||||
}
|
||||
_vvPtRun('Partnership/partnership_onboard.sh', '--phase1-only')
|
||||
.then(d => { if (!d.ok) alert('Failed: ' + (d.error ?? 'Unknown error')); })
|
||||
.catch(e => alert('Error: ' + e))
|
||||
.finally(() => setTimeout(() => { btn.disabled = false; btn.textContent = '▶ Phase 1: SSH + Conf Push'; }, 3000));
|
||||
};
|
||||
|
||||
function vvPtPhase2(btn, hostId) {
|
||||
if (!confirm(`Phase 2: Deploy containers + arr stack + establish partnership on ${hostId}?\n\nThis requires ${hostId} to have Varaverk installed and SSH keys set up.`)) return;
|
||||
window.vvPtPhase2 = function(btn, hostId) {
|
||||
if (!confirm(`Phase 2: Deploy containers + arr stack + establish partnership on ${hostId}?\n\nRequires ${hostId} to have Varaverk installed and SSH keys set up.`)) return;
|
||||
btn.disabled = true;
|
||||
btn.textContent = '⟳ Starting…';
|
||||
fetch('/plugins/varaverk/api/run.php', {
|
||||
method: 'POST',
|
||||
body: new URLSearchParams({id: 'Partnership/partnership_onboard.sh', manual: '1', extra_args: '--phase2-only'})
|
||||
}).then(r => r.json()).then(d => {
|
||||
if (!d.ok) { alert('Failed: ' + (d.error ?? 'Unknown error')); }
|
||||
setTimeout(() => { btn.disabled = false; btn.textContent = '▶ Run Phase 2 Manually'; }, 3000);
|
||||
});
|
||||
}
|
||||
_vvPtRun('Partnership/partnership_onboard.sh', '--phase2-only')
|
||||
.then(d => { if (!d.ok) alert('Failed: ' + (d.error ?? 'Unknown error')); })
|
||||
.catch(e => alert('Error: ' + e))
|
||||
.finally(() => setTimeout(() => { btn.disabled = false; btn.textContent = '▶ Run Phase 2 Manually'; }, 3000));
|
||||
};
|
||||
|
||||
function vvPtOnboard(btn) {
|
||||
window.vvPtOnboard = function(btn) {
|
||||
if (!confirm('Run full partnership_onboard.sh?\n\nRun on the MIRROR first, then on the OWNER.\n\nUse Phase 1 + Phase 2 buttons for step-by-step control.')) return;
|
||||
btn.disabled = true;
|
||||
btn.textContent = '⟳ Starting…';
|
||||
vvRunById('Partnership/partnership_onboard.sh');
|
||||
setTimeout(() => { btn.disabled = false; btn.textContent = '▶ Onboard (Mirror)'; }, 4000);
|
||||
}
|
||||
_vvPtRun('Partnership/partnership_onboard.sh')
|
||||
.then(d => { if (!d.ok) alert('Failed: ' + (d.error ?? 'Unknown error')); })
|
||||
.catch(e => alert('Error: ' + e))
|
||||
.finally(() => setTimeout(() => { btn.disabled = false; btn.textContent = '▶ Onboard (Mirror)'; }, 4000));
|
||||
};
|
||||
|
||||
function vvPtOffboard(btn) {
|
||||
window.vvPtOffboard = function(btn) {
|
||||
if (btn.style.opacity === '0.35' || btn.style.cursor === 'default') return;
|
||||
if (!confirm('Run partnership_offboard.sh?\n\nThis will end the partnership, reconfigure WebUIs, and revoke SSH access.\n\nContinue?')) return;
|
||||
btn.disabled = true;
|
||||
btn.textContent = '⟳ Starting…';
|
||||
vvRunById('Partnership/partnership_offboard.sh');
|
||||
setTimeout(() => { btn.disabled = false; btn.textContent = '▶ Offboard'; }, 4000);
|
||||
}
|
||||
_vvPtRun('Partnership/partnership_offboard.sh')
|
||||
.then(d => { if (!d.ok) alert('Failed: ' + (d.error ?? 'Unknown error')); })
|
||||
.catch(e => alert('Error: ' + e))
|
||||
.finally(() => setTimeout(() => { btn.disabled = false; btn.textContent = '▶ Offboard'; }, 4000));
|
||||
};
|
||||
|
||||
// ── Poll ──────────────────────────────────────────────────────────────────────
|
||||
|
||||
|
||||
Reference in New Issue
Block a user