Partnership: move action fns to top-level scope, remove window. approach
window.fn = inside an IIFE is not reliable in all script-loading contexts. Move vvPtPhase1/2, vvPtOnboard, vvPtOffboard and their _vvPtRun helper above the IIFE as plain top-level function declarations — unconditionally global and reachable from onclick= attributes.
This commit is contained in:
@@ -56,6 +56,58 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
// ── Public action functions — defined at top level so onclick= can reach them ──
|
||||||
|
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());
|
||||||
|
}
|
||||||
|
|
||||||
|
function vvPtPhase1(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…';
|
||||||
|
_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\nRequires ${hostId} to have Varaverk installed and SSH keys set up.`)) return;
|
||||||
|
btn.disabled = true;
|
||||||
|
btn.textContent = '⟳ Starting…';
|
||||||
|
_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) {
|
||||||
|
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…';
|
||||||
|
_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) {
|
||||||
|
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…';
|
||||||
|
_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));
|
||||||
|
}
|
||||||
|
|
||||||
|
// ── Private page logic ─────────────────────────────────────────────────────────
|
||||||
(function() {
|
(function() {
|
||||||
|
|
||||||
// ── Helpers ───────────────────────────────────────────────────────────────────
|
// ── Helpers ───────────────────────────────────────────────────────────────────
|
||||||
@@ -340,58 +392,6 @@ function _render(data) {
|
|||||||
document.getElementById('vv-pt-ts').textContent = ts ? 'Updated: ' + ts : '';
|
document.getElementById('vv-pt-ts').textContent = ts ? 'Updated: ' + ts : '';
|
||||||
}
|
}
|
||||||
|
|
||||||
// ── Actions ───────────────────────────────────────────────────────────────────
|
|
||||||
|
|
||||||
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…';
|
|
||||||
_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));
|
|
||||||
};
|
|
||||||
|
|
||||||
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…';
|
|
||||||
_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));
|
|
||||||
};
|
|
||||||
|
|
||||||
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…';
|
|
||||||
_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));
|
|
||||||
};
|
|
||||||
|
|
||||||
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…';
|
|
||||||
_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 ──────────────────────────────────────────────────────────────────────
|
// ── Poll ──────────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
function vvPtLoad() {
|
function vvPtLoad() {
|
||||||
|
|||||||
Reference in New Issue
Block a user