Public web-only release: SvxPortal front-end + auth backend, install templates and INSTALL.md
Stripped from the internal repo: per-box deploy trees, Go services (nodelist/astmeta/proxy/svxdr), deploy/sync scripts and all secrets. Config templates for nginx, PHP-FPM, Redis and tmpfiles live in install/ with CHANGEME placeholders. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
'use strict';
|
||||
|
||||
// Tab switching for help.html. Deep-linkable: #build, #setup, #admin, #portal.
|
||||
(function(){
|
||||
const tabs = document.getElementById('helpTabs');
|
||||
if (!tabs) return;
|
||||
|
||||
function show(name){
|
||||
document.querySelectorAll('.tab-section').forEach(s =>
|
||||
s.classList.toggle('d-none', s.id !== 'tab-' + name));
|
||||
tabs.querySelectorAll('button').forEach(b =>
|
||||
b.classList.toggle('active', b.dataset.tab === name));
|
||||
}
|
||||
|
||||
tabs.addEventListener('click', e => {
|
||||
const b = e.target.closest('button[data-tab]');
|
||||
if (!b) return;
|
||||
show(b.dataset.tab);
|
||||
history.replaceState(null, '', '#' + b.dataset.tab);
|
||||
});
|
||||
|
||||
const h = location.hash.replace('#', '');
|
||||
if (h && document.getElementById('tab-' + h)) show(h);
|
||||
})();
|
||||
Reference in New Issue
Block a user