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.