defmodule SloaneSH.Layouts.Helpers do require Logger alias SloaneSH.Context alias SloaneSH.OutputDirs def cx(classes) do classes |> Enum.map(fn {_, _} = t -> t c -> {c, true} end) |> Enum.filter(fn {_, v} -> !!v end) |> Enum.map_join(" ", fn {class, _} -> class end) end def sorted_post_attrs(%Context{} = ctx) do ctx.posts |> Enum.map(& &1.attrs) |> Enum.sort_by(& &1[:date], {:desc, Date}) end def fmt_date(date) do Timex.format!(date, "{Mfull} {D}, {YYYY}") end def picture(ctx, src, alt \\ "", class \\ "") do image = Enum.find(ctx.images, fn i -> output = OutputDirs.image(ctx.config, i.src) src == OutputDirs.to_permalink(ctx.config, output) end) if is_nil(image) do Logger.warning("Could not find #{inspect(src)} to make picture element") ~s|#{alt}| else [{_, src} | srcsets] = [ {"image/jpg", ".jpg"}, {"image/webp", ".webp"}, {"image/png", ".png"} ] |> Enum.map(fn {type, ext} -> {type, OutputDirs.replace_ext(src, ext)} end) EEx.eval_string( ~S""" <%= for {type, srcset} <- srcsets do %> <% end %> <%= alt %> """, src: src, srcsets: srcsets, alt: alt, class: class ) end end end