defmodule Temple do alias Temple.Parser @moduledoc """ Temple syntax is available inside the `temple`, and is compiled into EEx at build time. ## Usage ```elixir temple do # You can define attributes by passing a keyword list to the element, the values can be literals or variables. class = "text-blue" id = "jumbotron" div class: class, id: id do # Text nodes can be emitted as string literals or variables. "Bob" id end # Attributes that result in boolean values will be emitted as a boolean attribute. Examples of boolean attributes are `disabled` and `checked`. input type: "text", disabled: true # input type: "text", disabled: false # # The class attribute also can take a keyword list of classes to conditionally render, based on the boolean result of the value. div class: ["text-red-500": false, "text-green-500": true ] do "Alert!" end #
Alert!
# if and unless expressions can be used to conditionally render content if 5 > 0 do p do "Greater than 0!" end end unless 5 > 0 do p do "Less than 0!" end end # You can loop over items using for comprehensions for x <- 0..5 do div do x end end # You can use multiline anonymous functions, like if you're building a form in Phoenix form_for @changeset, Routes.user_path(@conn, :create), fn f -> "Name: " text_input f, :name end # You can explicitly emit a tag by prefixing with the Temple module Temple.div do "Foo" end # You can also pass children as a do key instead of a block div do: "Alice", class: "text-yellow" end ``` ## Configuration ### Mode There are two "modes", `:normal` (the default) and `:live_view`. In `:live_view` mode, Temple emits markup that uses functions provided by Phoenix LiveView in order to be fully "diff trackable". These LiveView functions have not been released yet, so if you are going to combine Temple with LiveView, you need to use the latest unreleased default branch from GitHub. You should use `:live_view` mode even if you only have a single LiveView. ```elixir config :temple, :mode, :normal # default # or config :temple, :mode, :live_view ``` ### Aliases You can add an alias for an element if there is a namespace collision with a function. If you are using `Phoenix.HTML`, there will be namespace collisions with the `` and `