98 行
4.3 KiB
PHP
98 行
4.3 KiB
PHP
<?php
|
|
if (!defined('IN_APP')) { http_response_code(403); exit('Forbidden'); }
|
|
?>
|
|
</main>
|
|
<footer class="site-footer">
|
|
<div class="container footer-inner">
|
|
<div class="footer-brand">
|
|
<i class="fas fa-store"></i> <?= h(SITE_NAME) ?>
|
|
<p><?= __('footer.brand_slogan') ?></p>
|
|
</div>
|
|
<div class="footer-links">
|
|
<a href="index.php"><?= __('footer.nav_home') ?></a>
|
|
<a href="index.php
|
|
<a href="cart.php"><?= __('footer.nav_cart') ?></a>
|
|
<a href="ticket.php"><?= __('footer.nav_ticket') ?></a>
|
|
<a href="announcements.php"><?= __('footer.nav_announce') ?></a>
|
|
<a href="mytickets.php"><?= __('footer.nav_mytickets') ?></a>
|
|
<a href="myorders.php"><?= __('footer.nav_myorders') ?></a>
|
|
</div>
|
|
</div>
|
|
<div class="footer-copy">
|
|
<p>© <?= date('Y') ?> <?= h(SITE_NAME) ?>. <?= __('footer.copyright') ?></p>
|
|
</div>
|
|
</footer>
|
|
<script src="assets/app.js?v=<?= $cssVer ?>"></script>
|
|
<script>
|
|
(function () {
|
|
var btn = document.getElementById('themeToggle');
|
|
if (!btn) return;
|
|
(function initThemeIcon() {
|
|
var current = document.documentElement.getAttribute('data-theme');
|
|
if (current === 'dark') {
|
|
btn.querySelector('i').className = 'fas fa-sun';
|
|
}
|
|
})();
|
|
btn.addEventListener('click', function () {
|
|
var root = document.documentElement;
|
|
var next = root.getAttribute('data-theme') === 'dark' ? 'light' : 'dark';
|
|
root.setAttribute('data-theme', next);
|
|
document.cookie = 'fnw_theme=' + next + ';path=/;max-age=31536000';
|
|
btn.querySelector('i').className = next === 'dark' ? 'fas fa-sun' : 'fas fa-moon';
|
|
});
|
|
})();
|
|
(function () {
|
|
var btn = document.getElementById('avatarBtn');
|
|
var card = document.getElementById('userCard');
|
|
if (!btn || !card) return;
|
|
card.hidden = true;
|
|
btn.addEventListener('click', function (e) {
|
|
e.stopPropagation();
|
|
card.hidden = !card.hidden;
|
|
btn.setAttribute('aria-expanded', card.hidden ? 'false' : 'true');
|
|
});
|
|
document.addEventListener('click', function (e) {
|
|
if (!card.hidden && !card.contains(e.target) && !btn.contains(e.target)) {
|
|
card.hidden = true;
|
|
btn.setAttribute('aria-expanded', 'false');
|
|
}
|
|
});
|
|
})();
|
|
(function () {
|
|
var toggle = document.getElementById('navToggle');
|
|
var links = document.getElementById('navLinks');
|
|
if (!toggle || !links) return;
|
|
toggle.addEventListener('click', function (e) {
|
|
e.stopPropagation();
|
|
var open = links.classList.toggle('open');
|
|
toggle.setAttribute('aria-expanded', open ? 'true' : 'false');
|
|
});
|
|
links.addEventListener('click', function (e) {
|
|
if (e.target.closest('a')) links.classList.remove('open');
|
|
});
|
|
document.addEventListener('click', function (e) {
|
|
if (!links.contains(e.target) && !toggle.contains(e.target)) {
|
|
links.classList.remove('open');
|
|
}
|
|
});
|
|
})();
|
|
(function () {
|
|
document.querySelectorAll('.reveal-btn').forEach(function (btn) {
|
|
btn.addEventListener('click', function () {
|
|
var span = btn.previousElementSibling;
|
|
if (!span || !span.classList.contains('secret')) return;
|
|
var real = span.getAttribute('data-secret') || '';
|
|
if (btn.textContent === '显示') {
|
|
span.textContent = real;
|
|
btn.textContent = '隐藏';
|
|
} else {
|
|
span.textContent = real ? '●'.repeat(Math.max(6, real.length)) : '—';
|
|
btn.textContent = '显示';
|
|
}
|
|
});
|
|
});
|
|
})();
|
|
</script>
|
|
</body>
|
|
</html>
|