mirror of
git://f0xx.org/android_cast
synced 2026-07-29 03:38:52 +03:00
landing sync, multipage
This commit is contained in:
@@ -11,16 +11,19 @@ unset($__platformDir);
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Android Cast — Project hub</title>
|
||||
<title>Android Cast — Landing</title>
|
||||
<script>
|
||||
(function () {
|
||||
var t = localStorage.getItem('crash_console_theme');
|
||||
if (t === 'light' || t === 'dark') document.documentElement.setAttribute('data-theme', t);
|
||||
var l = localStorage.getItem('crash_console_lang');
|
||||
if (l === 'en' || l === 'ru') document.documentElement.setAttribute('lang', l);
|
||||
})();
|
||||
</script>
|
||||
<link rel="stylesheet" href="/app/androidcast_project/crashes/assets/css/app.css">
|
||||
<link rel="stylesheet" href="hub.css?v=20260532globe">
|
||||
<link rel="stylesheet" href="hub-logo-layers.css?v=20260532globe">
|
||||
<link rel="stylesheet" href="hub.css?v=20260606landing">
|
||||
<link rel="stylesheet" href="hub-logo-layers.css?v=20260606landing">
|
||||
<link rel="stylesheet" href="hub-landing.css?v=20260606landing">
|
||||
<script type="importmap">
|
||||
{
|
||||
"imports": {
|
||||
@@ -28,10 +31,12 @@ unset($__platformDir);
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<script src="assets/hub-i18n.js" defer></script>
|
||||
<script src="assets/hub-landing.js" defer></script>
|
||||
<script src="assets/analytics.config.js"></script>
|
||||
<script src="/app/androidcast_project/crashes/assets/js/analytics.js" defer></script>
|
||||
</head>
|
||||
<body class="hub-page">
|
||||
<body class="hub-page hub-landing">
|
||||
<div id="lcd-alphabet-host" hidden aria-hidden="true"></div>
|
||||
<div id="overtime-alphabet-host" hidden aria-hidden="true"></div>
|
||||
<div id="quartz-alphabet-host" hidden aria-hidden="true"></div>
|
||||
@@ -69,100 +74,90 @@ unset($__platformDir);
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
<div class="shell hub-shell">
|
||||
<main class="main-pane hub-main">
|
||||
<header class="hub-header">
|
||||
<div class="hub-brand">
|
||||
<img class="hub-logo-mark" src="assets/hub-logo-transparent.svg" alt="" width="112" height="84" decoding="async">
|
||||
<div class="hub-title-with-thunder">
|
||||
<h1 class="hub-title">Android Cast</h1>
|
||||
<img class="hub-thunder" src="assets/hub-thunder.svg?v=20260527z" alt="" decoding="async">
|
||||
</div>
|
||||
<header class="landing-top" id="landing-top">
|
||||
<a class="landing-top-logo" href="?page=1" data-goto-page="1">
|
||||
<img src="assets/hub-logo-transparent.svg" alt="" width="36" height="27" decoding="async">
|
||||
<strong>Android Cast</strong>
|
||||
</a>
|
||||
<nav class="landing-top-nav" aria-label="Landing menu">
|
||||
<div class="landing-menu-item">
|
||||
<button type="button" class="landing-menu-btn" aria-haspopup="true" aria-expanded="false" data-goto-page="2" data-i18n="nav.androidcast">AndroidCast</button>
|
||||
<div class="landing-dropdown" role="menu">
|
||||
<a href="#" role="menuitem" data-goto-page="3" data-i18n="nav.about">About</a>
|
||||
<a href="#" role="menuitem" data-goto-page="4" data-i18n="nav.why">Why</a>
|
||||
<a href="#" role="menuitem" data-goto-page="5" data-i18n="nav.tech">Technologies</a>
|
||||
</div>
|
||||
<p class="muted hub-subtitle">Project hub</p>
|
||||
<label class="toolbar-select hub-theme">
|
||||
<span>Theme</span>
|
||||
<select id="theme-select" aria-label="UI theme">
|
||||
<option value="dark">Dark</option>
|
||||
<option value="light">Light</option>
|
||||
</select>
|
||||
</label>
|
||||
</header>
|
||||
</div>
|
||||
<div class="landing-menu-item">
|
||||
<button type="button" class="landing-menu-btn" aria-haspopup="true" aria-expanded="false" data-goto-page="6" data-i18n="nav.resources">Resources</button>
|
||||
<div class="landing-dropdown" role="menu">
|
||||
<a href="#" role="menuitem" data-goto-page="7" data-i18n="nav.people">People</a>
|
||||
<a href="#" role="menuitem" data-goto-page="8" data-i18n="nav.culture">Culture</a>
|
||||
</div>
|
||||
</div>
|
||||
<a class="landing-menu-link" href="#" data-goto-page="9" data-i18n="nav.pricing">Pricing</a>
|
||||
<a class="landing-menu-link" href="#" data-goto-page="10" data-i18n="nav.contact">Contact us</a>
|
||||
</nav>
|
||||
<div class="landing-top-tools">
|
||||
<label class="toolbar-select hub-theme">
|
||||
<span data-i18n="theme.label">Theme</span>
|
||||
<select id="theme-select" aria-label="UI theme">
|
||||
<option value="dark">Dark</option>
|
||||
<option value="light">Light</option>
|
||||
</select>
|
||||
</label>
|
||||
<div class="locale-picker" data-i18n-title="lang.label" title="Language">
|
||||
<span class="locale-flag" id="locale-flag" aria-hidden="true">🇬🇧</span>
|
||||
<span class="locale-code" id="locale-code" aria-hidden="true">EN</span>
|
||||
<select class="lang-select locale-picker__select" id="lang-select" data-i18n-aria="lang.label" aria-label="Language">
|
||||
<option value="en">EN</option>
|
||||
<option value="ru">RU</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</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="git/" class="nav-link"><span class="nav-icon nav-icon--git"></span><span class="nav-label" data-i18n="nav.git">Git</span></a></li>
|
||||
<li><a href="crashes/?view=tickets" class="nav-link"><span class="nav-icon nav-icon--tickets"></span><span class="nav-label" data-i18n="nav.tickets">Tickets</span></a></li>
|
||||
<li><a href="crashes/?view=reports" class="nav-link"><span class="nav-icon nav-icon--reports"></span><span class="nav-label" data-i18n="nav.crashes">Crashes</span></a></li>
|
||||
<li><a href="graphs/" class="nav-link"><span class="nav-icon nav-icon--graphs"></span><span class="nav-label" data-i18n="nav.graphs">Graphs</span></a></li>
|
||||
<li><a href="crashes/?view=remote_access" class="nav-link"><span class="nav-icon nav-icon--reports"></span><span class="nav-label" data-i18n="nav.remote">Remote access</span></a></li>
|
||||
<li><a href="build/" class="nav-link"><span class="nav-icon nav-icon--builder"></span><span class="nav-label" data-i18n="nav.builder">Builder</span></a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
<main class="landing-scroll" id="landing-scroll" tabindex="-1">
|
||||
<?php require __DIR__ . '/landing-pages.inc.php'; ?>
|
||||
</main>
|
||||
</div>
|
||||
<nav class="hub-nav-dock" id="hub-nav-dock" aria-label="Android Cast apps">
|
||||
<a class="hub-card card card--lift" href="git/">
|
||||
<span class="hub-card-icon" aria-hidden="true">
|
||||
<span class="nav-icon nav-icon--git"></span>
|
||||
</span>
|
||||
<span class="hub-card-label">AndroidCast git</span>
|
||||
</a>
|
||||
<a class="hub-card card card--lift" href="crashes/?view=tickets">
|
||||
<span class="hub-card-icon" aria-hidden="true">
|
||||
<span class="nav-icon nav-icon--tickets"></span>
|
||||
</span>
|
||||
<span class="hub-card-label">AndroidCast tickets</span>
|
||||
</a>
|
||||
<a class="hub-card card card--lift" href="crashes/?view=reports">
|
||||
<span class="hub-card-icon" aria-hidden="true">
|
||||
<span class="nav-icon nav-icon--reports"></span>
|
||||
</span>
|
||||
<span class="hub-card-label">AndroidCast crashes</span>
|
||||
</a>
|
||||
<a class="hub-card card card--lift" href="graphs/">
|
||||
<span class="hub-card-icon" aria-hidden="true">
|
||||
<span class="nav-icon nav-icon--graphs"></span>
|
||||
</span>
|
||||
<span class="hub-card-label">AndroidCast graphs</span>
|
||||
</a>
|
||||
<a class="hub-card card card--lift" href="crashes/?view=remote_access">
|
||||
<span class="hub-card-icon" aria-hidden="true">
|
||||
<span class="nav-icon nav-icon--reports"></span>
|
||||
</span>
|
||||
<span class="hub-card-label">Remote access</span>
|
||||
</a>
|
||||
<a class="hub-card card card--lift" href="build/">
|
||||
<span class="hub-card-icon" aria-hidden="true">
|
||||
<span class="nav-icon nav-icon--builder"></span>
|
||||
</span>
|
||||
<span class="hub-card-label">AndroidCast builder</span>
|
||||
</a>
|
||||
</nav>
|
||||
<?php platform_render_footer(['use_i18n' => false]); ?>
|
||||
|
||||
<aside class="landing-rail" id="landing-rail" aria-label="Page navigation">
|
||||
<button type="button" class="landing-rail-handle" id="landing-rail-handle" data-i18n-aria="rail.handle" aria-label="Show page navigation"></button>
|
||||
<nav class="landing-rail-dots" aria-label="Pages">
|
||||
<?php for ($p = 1; $p <= 10; $p++): ?>
|
||||
<button type="button" class="landing-rail-dot<?= $p === 1 ? ' is-active' : '' ?>" data-page="<?= $p ?>" aria-label="Page <?= $p ?>"<?= $p === 1 ? ' aria-current="true"' : '' ?>></button>
|
||||
<?php endfor; ?>
|
||||
</nav>
|
||||
</aside>
|
||||
|
||||
<?php platform_render_footer([
|
||||
'use_i18n' => false,
|
||||
'extra_class' => 'bottom-bar',
|
||||
]); ?>
|
||||
<script>
|
||||
(function () {
|
||||
var GLOBE_VIEW = { imgW: 1920, imgH: 1080, cx: 720, cy: 560, r: 330 };
|
||||
function globeCoverRect() {
|
||||
var vw = window.innerWidth;
|
||||
var vh = window.innerHeight;
|
||||
var scale = Math.max(vw / GLOBE_VIEW.imgW, vh / GLOBE_VIEW.imgH);
|
||||
var drawW = GLOBE_VIEW.imgW * scale;
|
||||
var drawH = GLOBE_VIEW.imgH * scale;
|
||||
var offX = (vw - drawW) / 2;
|
||||
var offY = (vh - drawH) / 2;
|
||||
var left = offX + (GLOBE_VIEW.cx - GLOBE_VIEW.r) * scale;
|
||||
var top = offY + (GLOBE_VIEW.cy - GLOBE_VIEW.r) * scale;
|
||||
var bottom = offY + (GLOBE_VIEW.cy + GLOBE_VIEW.r) * scale;
|
||||
var right = offX + (GLOBE_VIEW.cx + GLOBE_VIEW.r) * scale;
|
||||
return { left: left, top: top, bottom: bottom, right: right, width: right - left, height: bottom - top };
|
||||
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');
|
||||
}
|
||||
function layoutHubNavDock() {
|
||||
var dock = document.getElementById('hub-nav-dock');
|
||||
if (!dock) return;
|
||||
var globe = globeCoverRect();
|
||||
var dockW = Math.min(300, Math.max(210, globe.width * 0.38));
|
||||
dock.style.width = dockW + 'px';
|
||||
dock.style.left = globe.left + 'px';
|
||||
dock.style.top = globe.top + 'px';
|
||||
dock.style.height = globe.height + 'px';
|
||||
dock.style.display = 'flex';
|
||||
dock.style.flexDirection = 'column';
|
||||
dock.style.flexWrap = 'nowrap';
|
||||
dock.style.gap = '5px';
|
||||
dock.style.justifyContent = 'flex-end';
|
||||
}
|
||||
layoutHubNavDock();
|
||||
window.addEventListener('resize', layoutHubNavDock);
|
||||
})();
|
||||
</script>
|
||||
<script>
|
||||
@@ -185,7 +180,7 @@ unset($__platformDir);
|
||||
var supportsLayout = !!(window.CSS && CSS.supports && CSS.supports('object-fit', 'cover'));
|
||||
var logoEnabled = !!(stage && supportsSvg && supportsLayout);
|
||||
|
||||
var logoBuild = '20260532globe';
|
||||
var logoBuild = '20260606landing';
|
||||
|
||||
function hubAsset(rel) {
|
||||
var link = document.querySelector('link[href*="hub.css"]');
|
||||
|
||||
Reference in New Issue
Block a user