README.md

# SwafViews

`SWAFViews` is a template library dedicated to HTML generation. It
depends only on EEx. It precompiles templates as functions for fast
rendering and protects the rendered code from injection.

## Version 0.2

Warning: version 0.2 breaks the compatibility with previous versions.

Version 0.1 was kind of dependant on `Plug.Conn` as one could pass the
`conn` variables to a SWAFViews function and SWAFViews extracted the
`assigns` and the `params` maps. In version 0.2, the only allowed
parameter is a map. If you want to pass `assigns`, `params` or
whatever else to the template, you need to build the struct "by hand" in the
controller. For example:

```elixir
def index(conn) do
  params =  conn.assigns
  |> Map.merge(%{params: conn.params})
  |> Map.merge(%{a: 4, b: 12}) # some additional parameters if needed

  conn
  |> Conn.put_resp_content_type("text/html")
  |> Conn.send_resp(200, Views.index(params))
end
```

will make the following `assigns` available in the template:

```elixir
%{
  a: 4, 
  b: 12, 
  params: %{}, 
  request_id: "GKO9MAo0TLXg5Y8AAAsE"
}
```

## Installation

The package is installed by adding `swaf_views` to your list of
dependencies in `mix.exs`:

```elixir
 defp deps do
    [
      # If you want to play with the source code and contribute
      # {:swaf_views, path: "../swaf_views"},
      {:swaf_views, "~> 0.2"}
    ]
  end
```

## Documentation

For a complete documentation, please refer to the [`SWAFViews` module
documentation](https://hexdocs.pm/?q=swaf_views).

## Todo:

* Manage JSON templates
* Allow/Suppress compilation messages (compiling this file, ignoring that file, etc.)
* Allow other extentions than .html.eex