1
0
mirror of git://f0xx.org/ac/ac-be-hub synced 2026-07-29 04:18:53 +03:00

feat(hub): shared nav shell, downloads UI, footer fix

Signed-off-by: Anton Afanasyeu <a.afanasieff@gmail.com>
This commit is contained in:
Anton Afanasyeu
2026-07-12 13:53:36 +02:00
parent 0042bb9870
commit db8832b417
7 changed files with 179 additions and 106 deletions

View File

@@ -39,9 +39,9 @@ function hub_h(string $s): string {
<link rel="icon" type="image/x-icon" href="/app/androidcast_project/favicon.ico">
<link rel="apple-touch-icon" href="/app/androidcast_project/apple-touch-icon.ico">
<link rel="stylesheet" href="/app/androidcast_project/issues/assets/css/app.css">
<link rel="stylesheet" href="hub.css?v=20260610overlay">
<link rel="stylesheet" href="hub-logo-layers.css?v=20260610overlay">
<link rel="stylesheet" href="hub-landing.css?v=20260613layout">
<link rel="stylesheet" href="hub.css?v=20260711overlay">
<link rel="stylesheet" href="hub-logo-layers.css?v=20260711overlay">
<link rel="stylesheet" href="hub-landing.css?v=20260711layout">
<script src="/app/androidcast_project/issues/assets/js/nav_shell.js" defer></script>
<script src="assets/hub-i18n.js" defer></script>
<script src="assets/hub-landing.js" defer></script>
@@ -139,55 +139,14 @@ function hub_h(string $s): string {
</header>
<div class="landing-frame">
<nav class="nav-pane landing-left" id="landing-nav-pane" aria-label="Android Cast apps">
<button type="button" class="nav-handle" id="landing-nav-handle" data-i18n-aria="nav.toggle" data-i18n-title="nav.toggle" aria-label="Navigation" title="Navigation">
<span class="nav-icon nav-icon--menu" aria-hidden="true"></span>
</button>
<ul class="nav-list">
<li><a href="issues/?view=home" class="nav-link" data-i18n-title="nav.console" title="Console"><span class="nav-icon nav-icon--home"></span><span class="nav-text"><span class="nav-label" data-i18n="nav.console">Console</span><span class="nav-desc" data-i18n="nav.console_desc">Crash triage home and workspace cards.</span></span></a></li>
<li><a href="git/" class="nav-link" data-i18n-title="nav.git" title="Git"><span class="nav-icon nav-icon--git"></span><span class="nav-text"><span class="nav-label" data-i18n="nav.git">Git</span><span class="nav-desc" data-i18n="nav.git_desc">Browse repos, branches, and tags.</span></span></a></li>
<li><a href="issues/?view=reports" class="nav-link" data-i18n-title="nav.issues" title="Issues"><span class="nav-icon nav-icon--reports"></span><span class="nav-text"><span class="nav-label" data-i18n="nav.issues">Issues</span><span class="nav-desc" data-i18n="nav.issues_desc">Browse and triage crash reports.</span></span></a></li>
<li><a href="issues/?view=tickets" class="nav-link" data-i18n-title="nav.tickets" title="Tickets"><span class="nav-icon nav-icon--tickets"></span><span class="nav-text"><span class="nav-label" data-i18n="nav.tickets">Tickets</span><span class="nav-desc" data-i18n="nav.tickets_desc">Roadmap tasks, QA items, and tags.</span></span></a></li>
<li><a href="graphs/" class="nav-link" data-i18n-title="nav.graphs" title="Analytics"><span class="nav-icon nav-icon--graphs"></span><span class="nav-text"><span class="nav-label" data-i18n="nav.graphs">Analytics</span><span class="nav-desc" data-i18n="nav.graphs_desc">Sessions, live cast stats, and device activity.</span></span></a></li>
<li><a href="monitor/" class="nav-link" data-i18n-title="nav.monitor" title="Monitoring"><span class="nav-icon nav-icon--monitor"></span><span class="nav-text"><span class="nav-label" data-i18n="nav.monitor">Monitoring</span><span class="nav-desc" data-i18n="nav.monitor_desc">Grafana dashboards — cluster health, alerts, exporters.</span></span></a></li>
<li><a href="issues/?view=live_sessions" class="nav-link" data-i18n-title="nav.live_sessions" title="Live sessions"><span class="nav-icon nav-icon--live"></span><span class="nav-text"><span class="nav-label" data-i18n="nav.live_sessions">Live sessions</span><span class="nav-desc" data-i18n="nav.live_sessions_desc">Cast intents, join stats, session history.</span></span></a></li>
<li><a href="issues/live/education" class="nav-link" data-i18n-title="nav.education" title="Education demo"><span class="nav-icon nav-icon--education"></span><span class="nav-text"><span class="nav-label" data-i18n="nav.education">Education (demo)</span><span class="nav-desc" data-i18n="nav.education_desc">Browser screen-share trial (5 min).</span></span></a></li>
<li><a href="issues/?view=remote_access" class="nav-link" data-i18n-title="nav.remote" title="Remote access"><span class="nav-icon nav-icon--remote"></span><span class="nav-text"><span class="nav-label" data-i18n="nav.remote">Remote access</span><span class="nav-desc" data-i18n="nav.remote_desc">WireGuard sessions and device reachability.</span></span></a></li>
<li><a href="monitor/" class="nav-link" data-i18n-title="nav.monitor" title="Monitoring"><span class="nav-icon nav-icon--monitor"></span><span class="nav-text"><span class="nav-label" data-i18n="nav.monitor">Monitoring</span><span class="nav-desc" data-i18n="nav.monitor_desc">Grafana dashboards — cluster health, alerts, exporters.</span></span></a></li>
<li><a href="issues/?view=short_links" class="nav-link" data-i18n-title="nav.short_links" title="Short links"><span class="nav-icon nav-icon--link"></span><span class="nav-text"><span class="nav-label" data-i18n="nav.short_links">Short links</span><span class="nav-desc" data-i18n="nav.short_links_desc">Mint bearer tokens and shorten URLs for s.f0xx.org.</span></span></a></li>
<li><a href="build/" class="nav-link" data-i18n-title="nav.builder" title="Builder"><span class="nav-icon nav-icon--builder"></span><span class="nav-text"><span class="nav-label" data-i18n="nav.builder">Builder</span><span class="nav-desc" data-i18n="nav.builder_desc">Docker CI for APK baking and OTA artifacts.</span></span></a></li>
</ul>
<div class="nav-user">
<?php if ($hubUsername !== ''): ?>
<span class="nav-user-name" title="<?= hub_h($hubUsername) ?>">
<span class="nav-icon nav-icon--user" aria-hidden="true"></span>
<span class="nav-label"><?= hub_h($hubUsername) ?></span>
</span>
<a href="<?= hub_h($hubIssuesBase) ?>/account-security"
class="nav-link"
data-i18n-aria="nav.security" data-i18n-title="nav.security"
aria-label="Security" title="Security">
<span class="nav-icon nav-icon--user" aria-hidden="true"></span>
<span class="nav-label" data-i18n="nav.security">Security</span>
</a>
<a href="<?= hub_h($hubProjectBase) ?>/logout"
class="nav-link nav-link--logout"
data-i18n-aria="nav.logout" data-i18n-title="nav.logout"
aria-label="Logout" title="Logout">
<span class="nav-icon nav-icon--logout" aria-hidden="true"></span>
<span class="nav-label" data-i18n="nav.logout">Logout</span>
</a>
<?php else: ?>
<a href="<?= hub_h($hubProjectBase) ?>/login"
class="nav-link"
data-i18n-aria="nav.sign_in" data-i18n-title="nav.sign_in"
aria-label="Sign in" title="Sign in">
<span class="nav-icon nav-icon--user" aria-hidden="true"></span>
<span class="nav-label" data-i18n="nav.sign_in">Sign in</span>
</a>
<?php endif; ?>
</div>
</nav>
<?php platform_render_nav_shell([
'project_base' => $hubProjectBase,
'issues_base' => $hubIssuesBase,
'active' => '',
'username' => $hubUsername,
'pane_id' => 'landing-nav-pane',
'handle_id' => 'landing-nav-handle',
]); ?>
<main class="landing-scroll" id="landing-scroll" tabindex="-1">
<?php require __DIR__ . '/landing-pages.inc.php'; ?>
@@ -208,16 +167,6 @@ function hub_h(string $s): string {
'use_i18n' => false,
'extra_class' => 'bottom-bar',
]); ?>
<script>
(function () {
var footerLeft = document.querySelector('.platform-footer__left');
if (footerLeft) {
footerLeft.setAttribute('data-i18n', 'footer.copyright');
footerLeft.setAttribute('data-holder', 'Anton Afanaasyeu');
footerLeft.setAttribute('data-year', '2026 - current');
}
})();
</script>
<script>
(function () {
var sel = document.getElementById('theme-select');