75 lines
2.8 KiB
HTML
75 lines
2.8 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
|
<title>Services Homepage</title>
|
|
<link rel="stylesheet" href="/styles.css" />
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/simplex-noise/2.4.0/simplex-noise.min.js"></script>
|
|
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
|
|
</head>
|
|
<body>
|
|
<canvas id="galaxy-canvas"></canvas>
|
|
<div id="background-overlay"></div>
|
|
<header>
|
|
<h1>My Services</h1>
|
|
<p class="subtitle">Quick links to the commonly used containers on this host</p>
|
|
<div class="search-container">
|
|
<input type="text" id="search-input" placeholder="🔍 Search services..." />
|
|
</div>
|
|
</header>
|
|
|
|
<main>
|
|
<section id="services-container">
|
|
<!-- Service groups will be populated dynamically from /services.xml -->
|
|
</section>
|
|
|
|
<section class="notes" id="readme-section">
|
|
<div id="readme-content">Loading documentation...</div>
|
|
</section>
|
|
</main>
|
|
|
|
<footer>
|
|
<small>Generated: static homepage — served by nginx in a container. Edit and rebuild to update.</small>
|
|
</footer>
|
|
|
|
<!-- JavaScript modules -->
|
|
<script src="/js/galaxy-background.js"></script>
|
|
<script src="/js/themes.js"></script>
|
|
<script src="/js/services-loader.js"></script>
|
|
<script src="/js/drag-drop.js"></script>
|
|
<script src="/js/collapsible-groups.js"></script>
|
|
<script src="/js/search.js"></script>
|
|
<script src="/js/keyboard-nav.js"></script>
|
|
<script src="/js/readme-loader.js"></script>
|
|
<script src="/js/export-import.js"></script>
|
|
<script src="/js/widgets.js"></script>
|
|
|
|
<!-- Initialize features after DOM is loaded -->
|
|
<script>
|
|
window.addEventListener('DOMContentLoaded', () => {
|
|
// Wait for services to be loaded
|
|
const checkServicesLoaded = setInterval(() => {
|
|
if (window.servicesData && window.servicesData.allServices.length > 0) {
|
|
clearInterval(checkServicesLoaded);
|
|
|
|
// Initialize all features
|
|
if (window.themesModule) window.themesModule.init();
|
|
if (window.dragDropModule) {
|
|
window.dragDropModule.init();
|
|
window.dragDropModule.applySavedOrder();
|
|
}
|
|
if (window.collapsibleGroupsModule) window.collapsibleGroupsModule.init();
|
|
if (window.importExportModule) window.importExportModule.init();
|
|
if (window.widgetsModule) window.widgetsModule.init();
|
|
}
|
|
}, 100);
|
|
|
|
// Timeout after 5 seconds
|
|
setTimeout(() => clearInterval(checkServicesLoaded), 5000);
|
|
});
|
|
</script>
|
|
</body>
|
|
</html>
|