Hi everyone,
I am not a specialist in web technologies, and I am not sure if I am pursuing the right path or not.
Here is the situation: I am generating media queries for images using a homemade component (I am not even sure what you call this :D) <.image>
that generates the <picture>
tag:
attr :src, :string, required: true
attr :alt, :string, required: true
attr :class, :string, default: nil
attr :rest, :global
def image(assigns) do
~H"""
<picture>
<source srcset={srcset_by_screen_size(@src)} />
<img src={@src} alt={@alt} class={["", @class]} {@rest}/>
</picture>
"""
end
When generating the assets, I added a mix task that read the priv/static/images
and ImageMagick to the magick to create different image size (img.webp
: img-sm.webp
, img-md. web
,…) so that srcset
can find the resource.
This works ideally in dev mode, but not so nicely in production. I generate the different digest files, and of course I have digest file per images, something like img.webp
→ img-abcdef...webp
, img-sm-122345...webp
, img-md-122345...webp
, …
But the src attribute that is passed to my component is now img-abcdef....webp
and it can find the associated img-sm-122345...webp
, img-md-122345...webp
.
So what I did, is that I when I launch the server, I read the priv dir and generate a map to find back the goo file that looks like :
%{
"img-abcdef....webp" => %{ sm: "img-sm-122345...webp", md: "img-md-122345...webp"}
}
I find this a bit “overkill / not so nice” (call it as you wish), and I have no idea if there is a better way to do it. So, I am posting here to see if someone has some advice on how to do this, maybe a better way.
Thanks, community!!