Compile attrs at runtime to enable interpolation
This commit is contained in:
parent
48c5eacf25
commit
53ede43000
|
@ -56,7 +56,8 @@ defmodule Dsl.Html do
|
|||
el = unquote(el)
|
||||
|
||||
quote do
|
||||
put_buffer(var!(buff, Dsl.Html), "<#{unquote(el)}#{unquote(compile_attrs(attrs))}>")
|
||||
attrs = unquote(attrs)
|
||||
put_buffer(var!(buff, Dsl.Html), "<#{unquote(el)}#{compile_attrs(attrs)}>")
|
||||
unquote(inner)
|
||||
put_buffer(var!(buff, Dsl.Html), "</#{unquote(el)}>")
|
||||
end
|
||||
|
@ -123,9 +124,9 @@ defmodule Dsl.Html do
|
|||
|
||||
def insert_props(ast, _inner), do: ast
|
||||
|
||||
defp compile_attrs([]), do: ""
|
||||
def compile_attrs([]), do: ""
|
||||
|
||||
defp compile_attrs(attrs) do
|
||||
def compile_attrs(attrs) do
|
||||
for {name, value} <- attrs, into: "" do
|
||||
name = name |> Atom.to_string() |> String.replace("_", "-")
|
||||
|
||||
|
|
|
@ -275,5 +275,16 @@ defmodule Dsl.HtmlTest do
|
|||
assert result ==
|
||||
~s|<div>:atom</div><div>%{key: "value"}</div><div>{:status, :tuple}</div><div>"string"</div><div>1</div><div>[1, 2, 3]</div>|
|
||||
end
|
||||
|
||||
test "can use string interpolation in props" do
|
||||
interop = "hi"
|
||||
|
||||
{:safe, result} =
|
||||
htm do
|
||||
div(class: "#{interop} world")
|
||||
end
|
||||
|
||||
assert result == ~s{<div class="hi world"></div>}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Reference in a new issue