@@ -187,16 +190,16 @@ const uniqueMonths = [...new Map(allMonths.map(item => [item.name, item])).value
-
-
-
Ladda ner original
+
+
+
Ladda ner original
Originalfilen är i full upplösning och kräver lösenord.
-
Fel lösenord — försök igen.
+ class="w-full bg-black/60 border border-white/20 rounded-lg text-white px-4 py-2.5 mb-2 focus:outline-none focus:border-white/60 focus:ring-1 focus:ring-white/20 transition" />
+
Fel lösenord — försök igen.
-
-
+
+
@@ -321,20 +324,31 @@ const uniqueMonths = [...new Map(allMonths.map(item => [item.name, item])).value
a.remove();
}
+ function visaMeny(visa: boolean) {
+ if (!dlMenu) return;
+ if (visa) {
+ dlMenu.classList.remove('hidden');
+ requestAnimationFrame(() => dlMenu.classList.remove('opacity-0', 'translate-y-2'));
+ } else {
+ dlMenu.classList.add('opacity-0', 'translate-y-2');
+ setTimeout(() => dlMenu.classList.add('hidden'), 180);
+ }
+ }
+
dlBtn?.addEventListener('click', (e) => {
e.stopPropagation();
- dlMenu?.classList.toggle('hidden');
+ visaMeny(dlMenu?.classList.contains('hidden') ?? true);
});
document.addEventListener('click', (e) => {
if (!dlMenu || dlMenu.classList.contains('hidden')) return;
- if (!dlMenu.contains(e.target as Node) && e.target !== dlBtn) dlMenu.classList.add('hidden');
+ if (!dlMenu.contains(e.target as Node) && !dlBtn?.contains(e.target as Node)) visaMeny(false);
});
document.querySelectorAll('.dl-opt').forEach((opt) => {
opt.addEventListener('click', () => {
const size = (opt as HTMLElement).dataset.size || 'l';
- dlMenu?.classList.add('hidden');
+ visaMeny(false);
const url = urlForSize(size);
if (!url) { alert('Den storleken saknas for den har bilden.'); return; }
if (size === 'orig') {
@@ -371,6 +385,13 @@ const uniqueMonths = [...new Map(allMonths.map(item => [item.name, item])).value
pwInput?.addEventListener('keydown', (e) => { if ((e as KeyboardEvent).key === 'Enter') forsokOriginal(); });
document.getElementById('pw-cancel')?.addEventListener('click', () => pwModal?.classList.add('hidden'));
+ document.addEventListener('keydown', (e) => {
+ if ((e as KeyboardEvent).key === 'Escape' && !dlMenu?.classList.contains('hidden')) {
+ e.stopImmediatePropagation();
+ visaMeny(false);
+ }
+ }, true);
+
function closeLightbox() {
lightbox?.classList.add('opacity-0');
setTimeout(() => {
@@ -382,7 +403,7 @@ const uniqueMonths = [...new Map(allMonths.map(item => [item.name, item])).value
function updateLightboxContent() {
const item = visibleItems[currentImageIndex];
if (!item) return;
- dlMenu?.classList.add('hidden');
+ visaMeny(false);
lbImg.src = item.dataset.src || '';