Add dynamic support for avatar.png or logo.png in header
This commit is contained in:
parent
ac0249ceb9
commit
979e655d4d
3 changed files with 36 additions and 0 deletions
|
|
@ -26,6 +26,7 @@
|
||||||
|
|
||||||
<!-- Dynamic Header Section -->
|
<!-- Dynamic Header Section -->
|
||||||
<header class="glass-panel text-center">
|
<header class="glass-panel text-center">
|
||||||
|
<img id="site-logo" class="site-logo hidden" alt="Site Logo">
|
||||||
<h1 id="site-title" class="glitch-text" data-text="Loading...">Loading...</h1>
|
<h1 id="site-title" class="glitch-text" data-text="Loading...">Loading...</h1>
|
||||||
<p id="site-intro" class="subtitle">Fetching configuration...</p>
|
<p id="site-intro" class="subtitle">Fetching configuration...</p>
|
||||||
|
|
||||||
|
|
|
||||||
23
script.js
23
script.js
|
|
@ -33,6 +33,7 @@ async function fetchConfig() {
|
||||||
config = await res.json();
|
config = await res.json();
|
||||||
populateUI();
|
populateUI();
|
||||||
setupEventListeners();
|
setupEventListeners();
|
||||||
|
loadLogo();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Failed to load config.json", error);
|
console.error("Failed to load config.json", error);
|
||||||
document.getElementById('site-title').innerText = "Error loading config";
|
document.getElementById('site-title').innerText = "Error loading config";
|
||||||
|
|
@ -40,6 +41,28 @@ async function fetchConfig() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check for avatar.png or logo.png to display in header
|
||||||
|
function loadLogo() {
|
||||||
|
const logoEl = document.getElementById('site-logo');
|
||||||
|
const imagesToTry = ['avatar.png', 'logo.png'];
|
||||||
|
|
||||||
|
function tryNextImage(index) {
|
||||||
|
if (index >= imagesToTry.length) return; // None found
|
||||||
|
|
||||||
|
const img = new Image();
|
||||||
|
img.onload = () => {
|
||||||
|
logoEl.src = imagesToTry[index];
|
||||||
|
logoEl.classList.remove('hidden');
|
||||||
|
};
|
||||||
|
img.onerror = () => {
|
||||||
|
tryNextImage(index + 1);
|
||||||
|
};
|
||||||
|
img.src = imagesToTry[index];
|
||||||
|
}
|
||||||
|
|
||||||
|
tryNextImage(0);
|
||||||
|
}
|
||||||
|
|
||||||
// Render dynamic elements based on config
|
// Render dynamic elements based on config
|
||||||
function populateUI() {
|
function populateUI() {
|
||||||
// Populate Text
|
// Populate Text
|
||||||
|
|
|
||||||
12
styles.css
12
styles.css
|
|
@ -127,6 +127,18 @@ h2 {
|
||||||
.text-center { text-align: center; }
|
.text-center { text-align: center; }
|
||||||
.hidden { display: none !important; }
|
.hidden { display: none !important; }
|
||||||
|
|
||||||
|
/* Logo */
|
||||||
|
.site-logo {
|
||||||
|
max-width: 150px;
|
||||||
|
max-height: 150px;
|
||||||
|
border-radius: 50%;
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
box-shadow: 0 0 20px rgba(0,229,255,0.3);
|
||||||
|
border: 2px solid rgba(255,255,255,0.1);
|
||||||
|
object-fit: cover;
|
||||||
|
animation: fadeIn 0.5s ease-out;
|
||||||
|
}
|
||||||
|
|
||||||
/* Colors & Neons */
|
/* Colors & Neons */
|
||||||
.icon-blue { color: var(--neon-blue); text-shadow: 0 0 10px var(--neon-blue); }
|
.icon-blue { color: var(--neon-blue); text-shadow: 0 0 10px var(--neon-blue); }
|
||||||
.icon-red { color: var(--neon-red); text-shadow: 0 0 10px var(--neon-red); }
|
.icon-red { color: var(--neon-red); text-shadow: 0 0 10px var(--neon-red); }
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue