File: /home/mmickelson/view-once.com/assets/app.js
(function(){
function setTheme(theme){
if (theme === 'light' || theme === 'dark') {
document.documentElement.setAttribute('data-theme', theme);
localStorage.setItem('theme', theme);
} else {
document.documentElement.removeAttribute('data-theme');
localStorage.removeItem('theme');
}
updateToggleLabel();
}
function getStoredTheme(){
return localStorage.getItem('theme');
}
function systemPrefersLight(){
return window.matchMedia && window.matchMedia('(prefers-color-scheme: light)').matches;
}
function currentTheme(){
var t = getStoredTheme();
if (t) return t;
return systemPrefersLight() ? 'light' : 'dark';
}
function ensureToggle(){
var btn = document.getElementById('theme-toggle');
if (!btn){
btn = document.createElement('button');
btn.id = 'theme-toggle';
btn.className = 'theme-toggle';
btn.type = 'button';
btn.title = 'Toggle theme';
btn.setAttribute('aria-label', 'Toggle theme');
document.body.appendChild(btn);
}
btn.addEventListener('click', function(){
var next = (currentTheme() === 'dark') ? 'light' : 'dark';
setTheme(next);
});
updateToggleLabel();
}
function updateToggleLabel(){
var btn = document.getElementById('theme-toggle');
if (!btn) return;
var t = currentTheme();
btn.textContent = (t === 'dark') ? '☀️' : '🌙';
}
function initTheme(){
var t = getStoredTheme();
if (t === 'light' || t === 'dark') {
document.documentElement.setAttribute('data-theme', t);
} else {
document.documentElement.removeAttribute('data-theme');
}
}
function initCopyHandlers(){
document.querySelectorAll('[data-copy-target]').forEach(function(el){
el.addEventListener('click', function(){
var sel = el.getAttribute('data-copy-target');
var target = document.querySelector(sel);
if (!target) return;
var text = target.innerText || target.textContent || '';
navigator.clipboard.writeText(text).then(function(){
var old = el.textContent;
el.textContent = 'Copied!';
setTimeout(function(){ el.textContent = old; }, 1500);
}).catch(function(){
alert('Copy failed.');
});
});
});
}
document.addEventListener('DOMContentLoaded', function(){
initTheme();
ensureToggle();
initCopyHandlers();
});
})();