prompt_template/web/js/main.js

74 lines
2.2 KiB
JavaScript
Raw Permalink Normal View History

/**
* Haupt-Initialisierung: Event-Listener, Hash-Filter, App-Start.
*/
let allTemplates = [];
// Search-Event
document.getElementById('search').addEventListener('input', (e) => {
currentQuery = e.target.value.toLowerCase();
applyFilters();
});
// Close modal on overlay click
document.getElementById('modal').addEventListener('click', (e) => {
if (e.target === e.currentTarget) closeModal();
});
document.getElementById('edit-modal').addEventListener('click', (e) => {
if (e.target === e.currentTarget) closeEditModal();
});
document.getElementById('tune-modal').addEventListener('click', (e) => {
if (e.target === e.currentTarget) closeTuneModal();
});
// Focus trap for edit-modal
document.getElementById('edit-modal').addEventListener('keydown', function(e) {
if (e.key === 'Tab') { _trapFocus(e, document.getElementById('edit-modal')); }
});
// Focus trap for tune-modal
document.getElementById('tune-modal').addEventListener('keydown', function(e) {
if (e.key === 'Tab') { _trapFocus(e, document.getElementById('tune-modal')); }
});
// Escape key closes modal
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape') { closeEditModal(); closeModal(); closeTuneModal(); }
});
// Hash -> type filter
window.addEventListener('hashchange', () => {
currentType = parseTypeFromHash();
applyFilters();
});
// Nav clicks set the hash; hashchange drives filtering
document.querySelectorAll('.nav a').forEach(link => {
link.addEventListener('click', (e) => {
e.preventDefault();
const target = link.getAttribute('href') || '#';
if (window.location.hash === target || (target === '#' && window.location.hash === '')) {
return; // same target, no hashchange would fire
}
window.location.hash = target;
});
});
// Set initial aria-hidden on all modals
_setAriaHidden('modal', true);
_setAriaHidden('edit-modal', true);
_setAriaHidden('tune-modal', true);
// Initial load
loadTemplates().then(t => {
allTemplates = t;
window.allTemplates = t;
currentType = parseTypeFromHash();
applyFilters();
}).catch(e => {
console.error('Failed to load templates:', e);
allTemplates = [];
window.allTemplates = [];
applyFilters();
});