View Source Migrating from 0.8 to 0.9
First off, Temple now requires Elixir 1.13 or higher. This is because of some changes that were brought to the Elixir parser.
Whitespace Control
To control whitespace in an element, Temple will now control this based on whether the do
was used in the keyword list syntax or the do/end syntax.
In 0.8, you would do:
span do
"hello!"
end
# <span>
# hello!
# </span>
# The ! version of the element would render it as "tight"
span! do
"hello!"
end
# <span>hello!</span>
In 0.9, you would do:
span do
"hello!"
end
# <span>
# hello!
# </span>
span do: "hello!"
# <span>hello!</span>
Components
Components are no longer module based. To render a component, you can pass a function reference to the c
keyword. You also no longer need to define a component in a module, using the Temple.Component
module and its render
macro.
In 0.8, you would define a component like:
defmodule MyAppWeb.Component.Card do
import Temple.Component
render do
div class: "border p-4 rounded" do
slot :default
end
end
end
And you would use the component like:
div do
c MyAppWeb.Component.Card do
"Welcome to my app!"
end
end
In 0.9, you would define a component like:
defmodule MyAppWeb.Components do
import Temple
def card(assigns) do
temple do
div class: "border p-4 rounded" do
slot :default
end
end
end
end
And you would use the component like:
div do
c &MyAppWeb.Components.card/1 do
"Welcome to my app!"
end
end
We can observe here that in 0.9 the component is just any 1-arity function, so you can define them anywhere and you can have more than 1 in a single module.
defcomp
Now that components are just functions, you no longer need this special macro to define a component in the middle of the module.
This can simply be converted to a function.
Phoenix
All Phoenix related items have moved to the temple_phoenix package. Please see that library docs for more details.