Photo: Code optimization
All checks were successful
continuous-integration/drone/push Build is passing

- Avoid double declaration of sources
- Use class over an HTML tag for image reveal animation
This commit is contained in:
2020-03-31 17:55:32 +02:00
parent fc74a93508
commit 88186f479c
4 changed files with 43 additions and 49 deletions

View File

@@ -51,7 +51,7 @@
"postcss": "^7.0.27", "postcss": "^7.0.27",
"postcss-load-config": "^2.1.0", "postcss-load-config": "^2.1.0",
"postcss-preset-env": "^6.7.0", "postcss-preset-env": "^6.7.0",
"rollup": "^2.3.0", "rollup": "^2.3.1",
"rollup-plugin-babel": "^4.4.0", "rollup-plugin-babel": "^4.4.0",
"rollup-plugin-eslint": "^7.0.0", "rollup-plugin-eslint": "^7.0.0",
"rollup-plugin-svelte": "^5.2.0", "rollup-plugin-svelte": "^5.2.0",

60
pnpm-lock.yaml generated
View File

@@ -15,10 +15,10 @@ devDependencies:
'@babel/plugin-transform-runtime': 7.9.0_@babel+core@7.9.0 '@babel/plugin-transform-runtime': 7.9.0_@babel+core@7.9.0
'@babel/preset-env': 7.9.0_@babel+core@7.9.0 '@babel/preset-env': 7.9.0_@babel+core@7.9.0
'@babel/runtime': 7.9.2 '@babel/runtime': 7.9.2
'@rollup/plugin-alias': 3.0.1_rollup@2.3.0 '@rollup/plugin-alias': 3.0.1_rollup@2.3.1
'@rollup/plugin-commonjs': 11.0.2_rollup@2.3.0 '@rollup/plugin-commonjs': 11.0.2_rollup@2.3.1
'@rollup/plugin-node-resolve': 7.1.1_rollup@2.3.0 '@rollup/plugin-node-resolve': 7.1.1_rollup@2.3.1
'@rollup/plugin-replace': 2.3.1_rollup@2.3.0 '@rollup/plugin-replace': 2.3.1_rollup@2.3.1
autoprefixer: 9.7.5 autoprefixer: 9.7.5
babel-plugin-module-resolver: 4.0.0 babel-plugin-module-resolver: 4.0.0
dotenv: 8.2.0 dotenv: 8.2.0
@@ -33,11 +33,11 @@ devDependencies:
postcss: 7.0.27 postcss: 7.0.27
postcss-load-config: 2.1.0 postcss-load-config: 2.1.0
postcss-preset-env: 6.7.0 postcss-preset-env: 6.7.0
rollup: 2.3.0 rollup: 2.3.1
rollup-plugin-babel: 4.4.0_@babel+core@7.9.0+rollup@2.3.0 rollup-plugin-babel: 4.4.0_@babel+core@7.9.0+rollup@2.3.1
rollup-plugin-eslint: 7.0.0 rollup-plugin-eslint: 7.0.0
rollup-plugin-svelte: 5.2.0_rollup@2.3.0+svelte@3.20.1 rollup-plugin-svelte: 5.2.0_rollup@2.3.1+svelte@3.20.1
rollup-plugin-terser: 5.3.0_rollup@2.3.0 rollup-plugin-terser: 5.3.0_rollup@2.3.1
sapper: 0.27.11_svelte@3.20.1 sapper: 0.27.11_svelte@3.20.1
svelte: 3.20.1 svelte: 3.20.1
svelte-preprocess: 3.7.1_svelte@3.20.1 svelte-preprocess: 3.7.1_svelte@3.20.1
@@ -892,23 +892,23 @@ packages:
dev: false dev: false
resolution: resolution:
integrity: sha512-3NsZsJIA/22P3QUyrEDNA2D133H4j224twJrdipXN38dpnIOzAbUDtOwkcJ5pXmn75w7LSQDjA4tO9dm1XlqlA== integrity: sha512-3NsZsJIA/22P3QUyrEDNA2D133H4j224twJrdipXN38dpnIOzAbUDtOwkcJ5pXmn75w7LSQDjA4tO9dm1XlqlA==
/@rollup/plugin-alias/3.0.1_rollup@2.3.0: /@rollup/plugin-alias/3.0.1_rollup@2.3.1:
dependencies: dependencies:
rollup: 2.3.0 rollup: 2.3.1
slash: 3.0.0 slash: 3.0.0
dev: true dev: true
peerDependencies: peerDependencies:
rollup: ^1.20.0 rollup: ^1.20.0
resolution: resolution:
integrity: sha512-ReSy6iPl3GsWLMNeshXAfgItZFMoMOTYC7MZQQM5va4pqxiGgwl1xZUZfHW6zGyZPK+k8TBadxx+kdmepiUa+g== integrity: sha512-ReSy6iPl3GsWLMNeshXAfgItZFMoMOTYC7MZQQM5va4pqxiGgwl1xZUZfHW6zGyZPK+k8TBadxx+kdmepiUa+g==
/@rollup/plugin-commonjs/11.0.2_rollup@2.3.0: /@rollup/plugin-commonjs/11.0.2_rollup@2.3.1:
dependencies: dependencies:
'@rollup/pluginutils': 3.0.8_rollup@2.3.0 '@rollup/pluginutils': 3.0.8_rollup@2.3.1
estree-walker: 1.0.1 estree-walker: 1.0.1
is-reference: 1.1.4 is-reference: 1.1.4
magic-string: 0.25.7 magic-string: 0.25.7
resolve: 1.15.1 resolve: 1.15.1
rollup: 2.3.0 rollup: 2.3.1
dev: true dev: true
engines: engines:
node: '>= 8.0.0' node: '>= 8.0.0'
@@ -916,14 +916,14 @@ packages:
rollup: ^1.20.0 rollup: ^1.20.0
resolution: resolution:
integrity: sha512-MPYGZr0qdbV5zZj8/2AuomVpnRVXRU5XKXb3HVniwRoRCreGlf5kOE081isNWeiLIi6IYkwTX9zE0/c7V8g81g== integrity: sha512-MPYGZr0qdbV5zZj8/2AuomVpnRVXRU5XKXb3HVniwRoRCreGlf5kOE081isNWeiLIi6IYkwTX9zE0/c7V8g81g==
/@rollup/plugin-node-resolve/7.1.1_rollup@2.3.0: /@rollup/plugin-node-resolve/7.1.1_rollup@2.3.1:
dependencies: dependencies:
'@rollup/pluginutils': 3.0.8_rollup@2.3.0 '@rollup/pluginutils': 3.0.8_rollup@2.3.1
'@types/resolve': 0.0.8 '@types/resolve': 0.0.8
builtin-modules: 3.1.0 builtin-modules: 3.1.0
is-module: 1.0.0 is-module: 1.0.0
resolve: 1.15.1 resolve: 1.15.1
rollup: 2.3.0 rollup: 2.3.1
dev: true dev: true
engines: engines:
node: '>= 8.0.0' node: '>= 8.0.0'
@@ -931,20 +931,20 @@ packages:
rollup: ^1.20.0 rollup: ^1.20.0
resolution: resolution:
integrity: sha512-14ddhD7TnemeHE97a4rLOhobfYvUVcaYuqTnL8Ti7Jxi9V9Jr5LY7Gko4HZ5k4h4vqQM0gBQt6tsp9xXW94WPA== integrity: sha512-14ddhD7TnemeHE97a4rLOhobfYvUVcaYuqTnL8Ti7Jxi9V9Jr5LY7Gko4HZ5k4h4vqQM0gBQt6tsp9xXW94WPA==
/@rollup/plugin-replace/2.3.1_rollup@2.3.0: /@rollup/plugin-replace/2.3.1_rollup@2.3.1:
dependencies: dependencies:
'@rollup/pluginutils': 3.0.8_rollup@2.3.0 '@rollup/pluginutils': 3.0.8_rollup@2.3.1
magic-string: 0.25.7 magic-string: 0.25.7
rollup: 2.3.0 rollup: 2.3.1
dev: true dev: true
peerDependencies: peerDependencies:
rollup: ^1.20.0 rollup: ^1.20.0
resolution: resolution:
integrity: sha512-qDcXj2VOa5+j0iudjb+LiwZHvBRRgWbHPhRmo1qde2KItTjuxDVQO21rp9/jOlzKR5YO0EsgRQoyox7fnL7y/A== integrity: sha512-qDcXj2VOa5+j0iudjb+LiwZHvBRRgWbHPhRmo1qde2KItTjuxDVQO21rp9/jOlzKR5YO0EsgRQoyox7fnL7y/A==
/@rollup/pluginutils/3.0.8_rollup@2.3.0: /@rollup/pluginutils/3.0.8_rollup@2.3.1:
dependencies: dependencies:
estree-walker: 1.0.1 estree-walker: 1.0.1
rollup: 2.3.0 rollup: 2.3.1
dev: true dev: true
engines: engines:
node: '>= 8.0.0' node: '>= 8.0.0'
@@ -3792,11 +3792,11 @@ packages:
hasBin: true hasBin: true
resolution: resolution:
integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
/rollup-plugin-babel/4.4.0_@babel+core@7.9.0+rollup@2.3.0: /rollup-plugin-babel/4.4.0_@babel+core@7.9.0+rollup@2.3.1:
dependencies: dependencies:
'@babel/core': 7.9.0 '@babel/core': 7.9.0
'@babel/helper-module-imports': 7.8.3 '@babel/helper-module-imports': 7.8.3
rollup: 2.3.0 rollup: 2.3.1
rollup-pluginutils: 2.8.2 rollup-pluginutils: 2.8.2
dev: true dev: true
peerDependencies: peerDependencies:
@@ -3811,10 +3811,10 @@ packages:
dev: true dev: true
resolution: resolution:
integrity: sha512-u35kXiY11ULeNQGTlRkYx7uGJ/hS/Dx3wj8f9YVC3oMLTGU9fOqQJsAKYtBFZU3gJ8Vt3gu8ppB1vnKl+7gatQ== integrity: sha512-u35kXiY11ULeNQGTlRkYx7uGJ/hS/Dx3wj8f9YVC3oMLTGU9fOqQJsAKYtBFZU3gJ8Vt3gu8ppB1vnKl+7gatQ==
/rollup-plugin-svelte/5.2.0_rollup@2.3.0+svelte@3.20.1: /rollup-plugin-svelte/5.2.0_rollup@2.3.1+svelte@3.20.1:
dependencies: dependencies:
require-relative: 0.8.7 require-relative: 0.8.7
rollup: 2.3.0 rollup: 2.3.1
rollup-pluginutils: 2.8.2 rollup-pluginutils: 2.8.2
sourcemap-codec: 1.4.8 sourcemap-codec: 1.4.8
svelte: 3.20.1 svelte: 3.20.1
@@ -3824,11 +3824,11 @@ packages:
svelte: '*' svelte: '*'
resolution: resolution:
integrity: sha512-6B7gRsJC/rS/ATEy3J51McsNgNcDFibRQ/L3rHsDMUYeCDCm3dsw3KEqf3WaxX0ZdApzZ1XWcnTXGQlwVPYpnQ== integrity: sha512-6B7gRsJC/rS/ATEy3J51McsNgNcDFibRQ/L3rHsDMUYeCDCm3dsw3KEqf3WaxX0ZdApzZ1XWcnTXGQlwVPYpnQ==
/rollup-plugin-terser/5.3.0_rollup@2.3.0: /rollup-plugin-terser/5.3.0_rollup@2.3.1:
dependencies: dependencies:
'@babel/code-frame': 7.8.3 '@babel/code-frame': 7.8.3
jest-worker: 24.9.0 jest-worker: 24.9.0
rollup: 2.3.0 rollup: 2.3.1
rollup-pluginutils: 2.8.2 rollup-pluginutils: 2.8.2
serialize-javascript: 2.1.2 serialize-javascript: 2.1.2
terser: 4.6.7 terser: 4.6.7
@@ -3843,7 +3843,7 @@ packages:
dev: true dev: true
resolution: resolution:
integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==
/rollup/2.3.0: /rollup/2.3.1:
dev: true dev: true
engines: engines:
node: '>=10.0.0' node: '>=10.0.0'
@@ -3851,7 +3851,7 @@ packages:
optionalDependencies: optionalDependencies:
fsevents: 2.1.2 fsevents: 2.1.2
resolution: resolution:
integrity: sha512-nIq2Z9YwNbEfqTlAXe/tVl8CwUsjX/8Q5Jxlx+JRoYCu5keKLc6k0zyt11sM6WtCDxhmmJEIosFy9y26ZFRx6w== integrity: sha512-BRjzOauORe+R0U0I6SkMTSG22nYmtztR/TaBl0SvbXgc3VAxBDrZoB6HROiK0S5px1pUBnLnjBkbzmVuwC9Q1Q==
/run-async/2.4.0: /run-async/2.4.0:
dependencies: dependencies:
is-promise: 2.1.0 is-promise: 2.1.0
@@ -4555,7 +4555,7 @@ specifiers:
postcss: ^7.0.27 postcss: ^7.0.27
postcss-load-config: ^2.1.0 postcss-load-config: ^2.1.0
postcss-preset-env: ^6.7.0 postcss-preset-env: ^6.7.0
rollup: ^2.3.0 rollup: ^2.3.1
rollup-plugin-babel: ^4.4.0 rollup-plugin-babel: ^4.4.0
rollup-plugin-eslint: ^7.0.0 rollup-plugin-eslint: ^7.0.0
rollup-plugin-svelte: ^5.2.0 rollup-plugin-svelte: ^5.2.0

View File

@@ -28,7 +28,7 @@ export const animateIn = scope => {
// Photo appearing // Photo appearing
const photoReveal = ScrollOut({ const photoReveal = ScrollOut({
once: true, once: true,
targets: scope.querySelector('picture'), targets: scope.querySelector('.photo__image'),
onShown (el) { onShown (el) {
// Load the photo then reveal it // Load the photo then reveal it
imagesLoaded(el, instance => { imagesLoaded(el, instance => {

View File

@@ -16,11 +16,10 @@
const defaultWidth = 900 const defaultWidth = 900
const defaultHeight = Math.ceil(defaultWidth / 1.5) const defaultHeight = Math.ceil(defaultWidth / 1.5)
// Reactive variables for location informations // Location related
const { name, date, location } = photo const { name, date, location } = photo
const { private_hash } = photo.image const { private_hash } = photo.image
const imgAlt = `${name}, ${location.region}, ${location.country.name}` const imgAlt = `${name}, ${location.region}, ${location.country.name}`
const photoHref = `/viewer/${location.country.slug}/${location.slug}/${photo.slug}`
// Photo index // Photo index
const photoIndex = (index < 10 ? '0': '') + index const photoIndex = (index < 10 ? '0': '') + index
@@ -47,26 +46,21 @@
<div class="photo__image wrap"> <div class="photo__image wrap">
<div class="align"> <div class="align">
<a href={photoHref} sapper-noscroll> <a href="/viewer/{location.country.slug}/{location.slug}/{photo.slug}" sapper-noscroll>
<picture class="photo__picture"> <picture class="photo__picture">
<source media="(min-width: 992px)" data-srcset={getThumbnail(private_hash, 1300)}>
<source media="(min-width: 768px)" data-srcset={getThumbnail(private_hash, 992)}>
<source media="(min-width: 500px)" data-srcset={getThumbnail(private_hash, 650)}>
<source media="(min-width: 300px)" data-srcset={getThumbnail(private_hash, 400)}>
{#if layout === 'list'} {#if layout === 'list'}
<source media="(min-width: 992px)" srcset={getThumbnail(private_hash, 1300)}> <img src="data:image/gif;base64,R0lGODdhAQABAPAAAMPDwwAAACwAAAAAAQABAAACAkQBADs="
<source media="(min-width: 768px)" srcset={getThumbnail(private_hash, 992)}>
<source media="(min-width: 500px)" srcset={getThumbnail(private_hash, 650)}>
<source media="(min-width: 300px)" srcset={getThumbnail(private_hash, 400)}>
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/+HRfwAJmQPS6gISLwAAAABJRU5ErkJggg=="
data-src="{getThumbnail(private_hash, 900)}"
alt={imgAlt} alt={imgAlt}
width={defaultWidth} height={defaultHeight} width={defaultWidth} height={defaultHeight}
class="lazyload" class="lazyload">
>
{:else} {:else}
<source media="(min-width: 992px)" srcset={getThumbnail(private_hash, 1300)}> <img src="{getThumbnail(private_hash, 900)}"
<source media="(min-width: 768px)" srcset={getThumbnail(private_hash, 992)}> alt={imgAlt}
<source media="(min-width: 500px)" srcset={getThumbnail(private_hash, 650)}> width={defaultWidth} height={defaultHeight}>
<source media="(min-width: 300px)" srcset={getThumbnail(private_hash, 400)}>
<img src="{getThumbnail(private_hash, 900)}" alt={imgAlt} width={defaultWidth} height={defaultHeight}>
{/if} {/if}
</picture> </picture>
</a> </a>