Packages
surface
0.11.5
0.12.3
0.12.2
0.12.1
0.12.0
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.1
0.2.0
0.1.1
0.1.0
0.1.0-alpha.2
0.1.0-alpha.1
0.1.0-alpha.0
A component based library for Phoenix LiveView
Current section
Files
Jump to
Current section
Files
lib/mix/tasks/surface/surface.init/project_patchers/layouts.ex
defmodule Mix.Tasks.Surface.Init.ProjectPatchers.Layouts do
@moduledoc false
@behaviour Mix.Tasks.Surface.Init.ProjectPatcher
alias Mix.Tasks.Surface.Init.FilePatchers
@impl true
def specs(%{layouts: true} = assigns) do
%{web_path: web_path, web_module: web_module} = assigns
[
{:patch, "#{web_path}/components/layouts.ex", [add_embed_sface_calls_to_layouts(web_module)]},
{:create, "layouts/app.sface", Path.join(web_path, "components/layouts")},
{:delete, Path.join(web_path, "components/layouts/app.html.heex")},
{:create, "layouts/root.sface", Path.join(web_path, "components/layouts")},
{:delete, Path.join(web_path, "components/layouts/root.html.heex")}
]
end
def specs(_assigns), do: []
def add_embed_sface_calls_to_layouts(web_module) do
%{
name: "Embed sface templates in the Layouts module",
patch:
&FilePatchers.Phoenix.append_code_to_layouts_module(
&1,
"""
embed_sface "layouts/root.sface"
embed_sface "layouts/app.sface"\
""",
"embed_sface",
Module.concat(web_module, "Layouts")
),
instructions: """
If you want to use `.sface` files instead of `.html.heex` files as your layout templates,
use the `embed_sface` macro to embed the templates in your Layouts module.
# Example
```
defmodule #{inspect(web_module)}.Layouts do
use MyAppWeb, :html
embed_sface "layouts/root.sface"
embed_sface "layouts/app.sface"
end
```
"""
}
end
end