setup empty image processing
This commit is contained in:
parent
6de9031055
commit
a5696c49f2
6 changed files with 33 additions and 2 deletions
|
@ -0,0 +1,19 @@
|
||||||
|
defmodule SloaneSH.Assets.Image do
|
||||||
|
alias SloaneSH.Asset
|
||||||
|
alias SloaneSH.OutputDirs
|
||||||
|
|
||||||
|
@behaviour Asset
|
||||||
|
|
||||||
|
@impl Asset
|
||||||
|
def extensions(_cfg), do: ~w[.jpg .jpeg .png .webp .gif]
|
||||||
|
|
||||||
|
@impl Asset
|
||||||
|
def attrs(_cfg, _path, _data) do
|
||||||
|
{:ok, %{}}
|
||||||
|
end
|
||||||
|
|
||||||
|
@impl Asset
|
||||||
|
def render(cfg, _ctx, path, data, _attrs) do
|
||||||
|
{:ok, [{OutputDirs.image(cfg, path), data}]}
|
||||||
|
end
|
||||||
|
end
|
|
@ -4,7 +4,7 @@ defmodule SloaneSH.Build do
|
||||||
alias SloaneSH.Context
|
alias SloaneSH.Context
|
||||||
|
|
||||||
def run(%Context{} = ctx) do
|
def run(%Context{} = ctx) do
|
||||||
assets = ctx.posts ++ ctx.pages
|
assets = ctx.posts ++ ctx.pages ++ ctx.images
|
||||||
|
|
||||||
File.mkdir_p!(ctx.config.output_dir)
|
File.mkdir_p!(ctx.config.output_dir)
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@ defmodule SloaneSH.Config do
|
||||||
typedstruct do
|
typedstruct do
|
||||||
field :pages_dir, String.t(), enforce: true
|
field :pages_dir, String.t(), enforce: true
|
||||||
field :posts_dir, String.t(), enforce: true
|
field :posts_dir, String.t(), enforce: true
|
||||||
|
field :images_dir, String.t(), enforce: true
|
||||||
field :output_dir, String.t(), enforce: true
|
field :output_dir, String.t(), enforce: true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -18,6 +19,7 @@ defmodule SloaneSH.Config do
|
||||||
%Config{
|
%Config{
|
||||||
pages_dir: Path.join(priv, "site/pages"),
|
pages_dir: Path.join(priv, "site/pages"),
|
||||||
posts_dir: Path.join(priv, "site/posts"),
|
posts_dir: Path.join(priv, "site/posts"),
|
||||||
|
images_dir: Path.join(priv, "site/images"),
|
||||||
output_dir: Path.join(priv, "output")
|
output_dir: Path.join(priv, "output")
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
|
@ -10,19 +10,22 @@ defmodule SloaneSH.Context do
|
||||||
alias SloaneSH.Asset
|
alias SloaneSH.Asset
|
||||||
alias SloaneSH.Assets.Page
|
alias SloaneSH.Assets.Page
|
||||||
alias SloaneSH.Assets.Post
|
alias SloaneSH.Assets.Post
|
||||||
|
alias SloaneSH.Assets.Image
|
||||||
alias __MODULE__
|
alias __MODULE__
|
||||||
|
|
||||||
typedstruct do
|
typedstruct do
|
||||||
field :config, Config.t(), enforce: true
|
field :config, Config.t(), enforce: true
|
||||||
field :pages, [Asset.t()], default: []
|
field :pages, [Asset.t()], default: []
|
||||||
field :posts, [Asset.t()], default: []
|
field :posts, [Asset.t()], default: []
|
||||||
|
field :images, [Asset.t()], default: []
|
||||||
end
|
end
|
||||||
|
|
||||||
def new(cfg \\ Config.default()) do
|
def new(cfg \\ Config.default()) do
|
||||||
pages = load_assets(cfg, Page, cfg.pages_dir)
|
pages = load_assets(cfg, Page, cfg.pages_dir)
|
||||||
posts = load_assets(cfg, Post, cfg.posts_dir)
|
posts = load_assets(cfg, Post, cfg.posts_dir)
|
||||||
|
images = load_assets(cfg, Image, cfg.images_dir)
|
||||||
|
|
||||||
%Context{config: cfg, pages: pages, posts: posts}
|
%Context{config: cfg, pages: pages, posts: posts, images: images}
|
||||||
end
|
end
|
||||||
|
|
||||||
defp load_assets(cfg, mod, src_dir) do
|
defp load_assets(cfg, mod, src_dir) do
|
||||||
|
|
|
@ -12,6 +12,13 @@ defmodule SloaneSH.OutputDirs do
|
||||||
cfg.output_dir |> Path.join(path) |> prettify_html_path()
|
cfg.output_dir |> Path.join(path) |> prettify_html_path()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def image(cfg, src) do
|
||||||
|
path = Path.relative_to(src, cfg.images_dir)
|
||||||
|
path = Path.join("assets/images", path)
|
||||||
|
|
||||||
|
cfg.output_dir |> Path.join(path)
|
||||||
|
end
|
||||||
|
|
||||||
def prettify_html_path(path) do
|
def prettify_html_path(path) do
|
||||||
file = Path.basename(path)
|
file = Path.basename(path)
|
||||||
[without_extension | _] = String.split(file, ".", parts: 2)
|
[without_extension | _] = String.split(file, ".", parts: 2)
|
||||||
|
|
Before Width: | Height: | Size: 889 B After Width: | Height: | Size: 889 B |
Loading…
Reference in a new issue