Packages
drab
0.10.3
0.10.5
0.10.4
0.10.3
0.10.2
0.10.1
0.10.0
0.9.3
0.9.2
0.9.1
0.9.0
0.8.3
0.8.2
0.8.1
0.8.0
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.1
0.6.0
0.6.0-pre.1
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.1
0.4.0
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.1
0.1.0
Remote controlled frontend framework for Phoenix.
Current section
Files
Jump to
Current section
Files
lib/drab/live/engine.ex
defmodule Drab.Live.Engine do
@moduledoc """
Drab Template Engine, uses `Drab.Live.EExEngine` to compile templates.
### Installation
Add to config:
config :phoenix, :template_engines,
drab: Drab.Live.Engine
"""
alias Drab.Live.Safe
@behaviour Phoenix.Template.Engine
@impl true
def compile(path, _name) do
{:drab, %Safe{safe: safe, partial: partial}} =
path |> File.read!() |> EEx.compile_string(engine: Drab.Live.EExEngine, file: path, line: 1)
module = module_name(partial.hash)
quoted =
quote do
@moduledoc false
def partial(), do: unquote(Macro.escape(partial))
def path(), do: partial().path
def hash(), do: partial().hash
def amperes(), do: partial().amperes
end
Module.create(module, quoted, Macro.Env.location(__ENV__))
# if String.contains?(path, "live_engine_test.html") do
# IO.inspect partial
# end
{:safe, safe}
end
@spec module_name(String.t()) :: atom
@doc false
def module_name(hash) do
Module.concat([Drab, Live, Template] ++ [String.capitalize(hash)])
end
end