Additional tweaks
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/push/build Pipeline was successful
ci/woodpecker/push/deploy Pipeline was successful

This commit is contained in:
2026-02-16 10:51:01 -03:00
parent 0f2dba0ce7
commit f2382391ab
4 changed files with 51 additions and 19 deletions

View File

@@ -22,5 +22,22 @@ export default [
'prefer-const': 'warn' 'prefer-const': 'warn'
} }
}, },
{
files: ['static/**/*.js'],
languageOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
globals: {
window: 'readonly',
document: 'readonly',
localStorage: 'readonly'
}
},
rules: {
'no-unused-vars': 'off',
'@typescript-eslint/no-unused-vars': ['warn', { argsIgnorePattern: '^_', caughtErrorsIgnorePattern: '^_' }],
'prefer-const': 'warn'
}
},
prettierConfig prettierConfig
]; ];

View File

@@ -25,27 +25,27 @@
"docker:push": "docker push git.mifi.dev/mifi-holdings/armandine:latest" "docker:push": "docker push git.mifi.dev/mifi-holdings/armandine:latest"
}, },
"devDependencies": { "devDependencies": {
"@eslint/js": "^10.0.1",
"@sveltejs/adapter-static": "^3.0.1", "@sveltejs/adapter-static": "^3.0.1",
"@sveltejs/kit": "^2.0.0", "@sveltejs/kit": "^2.0.0",
"@sveltejs/vite-plugin-svelte": "^6.2.4", "@sveltejs/vite-plugin-svelte": "^6.2.4",
"beasties": "^0.4.1", "beasties": "^0.4.1",
"serve": "^14.2.5",
"@eslint/js": "^10.0.1",
"eslint": "^10.0.0", "eslint": "^10.0.0",
"eslint-config-prettier": "^10.1.8", "eslint-config-prettier": "^10.1.8",
"typescript-eslint": "^8.0.0",
"postcss": "^8.4.49", "postcss": "^8.4.49",
"postcss-load-config": "^6.0.0", "postcss-load-config": "^6.0.0",
"postcss-nesting": "^14.0.0", "postcss-nesting": "^14.0.0",
"postcss-preset-env": "^11.1.3", "postcss-preset-env": "^11.1.3",
"prettier": "^3.4.2", "prettier": "^3.4.2",
"prettier-plugin-svelte": "^3.2.0", "prettier-plugin-svelte": "^3.2.0",
"serve": "^14.2.5",
"stylelint": "^17.3.0", "stylelint": "^17.3.0",
"stylelint-config-standard": "^40.0.0", "stylelint-config-standard": "^40.0.0",
"svelte": "^5.0.0", "svelte": "^5.0.0",
"terser": "^5.0.0",
"svelte-check": "^4.0.0", "svelte-check": "^4.0.0",
"terser": "^5.0.0",
"typescript": "^5.0.0", "typescript": "^5.0.0",
"typescript-eslint": "^8.0.0",
"vite": "^7.3.1", "vite": "^7.3.1",
"yaml-lint": "^1.7.0" "yaml-lint": "^1.7.0"
} }

View File

@@ -5,12 +5,7 @@
*/ */
</script> </script>
<dialog <dialog class="lightbox" aria-hidden="true" aria-describedby="lb-caption" inert>
class="lightbox"
aria-hidden="true"
aria-describedby="lb-caption"
inert
>
<header> <header>
<button type="button" class="lb-close" aria-label="Close" <button type="button" class="lb-close" aria-label="Close"
>&times;</button >&times;</button

View File

@@ -21,7 +21,9 @@ if (themeToggle) {
root.setAttribute('data-theme', next); root.setAttribute('data-theme', next);
try { try {
localStorage.setItem('theme', next); localStorage.setItem('theme', next);
} catch (_) {} } catch {
/* localStorage unavailable (e.g. private browsing) */
}
}); });
} }
@@ -37,18 +39,36 @@ function openLightbox(name, type, caption) {
document.body.style.overflow = 'hidden'; document.body.style.overflow = 'hidden';
if (type === 'video') { if (type === 'video') {
lbContent.innerHTML = `<video src="/assets/media/videos/${name}.mp4" controls autoplay><track kind="captions" src="/assets/media/videos/${name}-captions.vtt" default></video>`; const video = document.createElement('video');
video.src = `/assets/media/videos/${name}.mp4`;
video.controls = true;
video.autoplay = true;
const track = document.createElement('track');
track.kind = 'captions';
track.src = `/assets/media/videos/${name}-captions.vtt`;
track.default = true;
video.appendChild(track);
lbContent.replaceChildren(video);
} else { } else {
const srcset = (bp) => const srcset = (bp) =>
type === 'image' type === 'image'
? `/assets/media/${bp}/${name}@1x.webp 1x, /assets/media/${bp}/${name}.webp 2x` ? `/assets/media/${bp}/${name}@1x.webp 1x, /assets/media/${bp}/${name}.webp 2x`
: `/assets/media/${bp}/${name}_still@1x.webp 1x, /assets/media/${bp}/${name}_still.webp 2x`; : `/assets/media/${bp}/${name}_still@1x.webp 1x, /assets/media/${bp}/${name}_still.webp 2x`;
lbContent.innerHTML = `<picture> const picture = document.createElement('picture');
<source media="(min-width:1024px)" srcset="${srcset('desktop')}"> const s1 = document.createElement('source');
<source media="(min-width:768px)" srcset="${srcset('tablet')}"> s1.media = '(min-width:1024px)';
<source media="(min-width:0px)" srcset="${srcset('mobile')}"> s1.srcset = srcset('desktop');
<img src="/assets/media/thumbnail/${name}.webp" alt=""> const s2 = document.createElement('source');
</picture>`; s2.media = '(min-width:768px)';
s2.srcset = srcset('tablet');
const s3 = document.createElement('source');
s3.media = '(min-width:0px)';
s3.srcset = srcset('mobile');
const img = document.createElement('img');
img.src = `/assets/media/thumbnail/${name}.webp`;
img.alt = '';
picture.append(s1, s2, s3, img);
lbContent.replaceChildren(picture);
} }
lbCaption.textContent = caption || ''; lbCaption.textContent = caption || '';
dialog.removeAttribute('inert'); dialog.removeAttribute('inert');
@@ -63,7 +83,7 @@ function closeLightbox() {
} }
lightboxOpener = null; lightboxOpener = null;
document.body.style.overflow = ''; document.body.style.overflow = '';
if (lbContent) lbContent.innerHTML = ''; if (lbContent) lbContent.replaceChildren();
if (lbCaption) lbCaption.textContent = ''; if (lbCaption) lbCaption.textContent = '';
dialog.setAttribute('aria-hidden', 'true'); dialog.setAttribute('aria-hidden', 'true');
dialog.setAttribute('inert', ''); dialog.setAttribute('inert', '');