Home

Awesome

Sneeze

Render Elixir data-structures to HTML. Inspired by Hiccup.

Installation

Sneeze is available from Hex.pm:

def deps do
  [{:sneeze, "~> 2.0"}]
end

Usage

The Sneeze.render/1 function will render a list of 'nodes' to html. A node can be any of:

Of course, the body of any node can be an arbitrary number of other nodes, like so: [:p, %{id: "status"}, [:span, "woo"]]

The Sneeze.render_iodata/1 function returns an iodata list, which can be more performant in cases where you are passing the result to a function that accepts iodata.

Examples

Sneeze.render([:p %{class: "greeting"} "hello world"])
# => <p class="greeting">hello world</p>

Sneeze.render([:br])
# => <br />

Sneeze.render([:span, "<a>will be escaped</a>"])
# => <span>&lt;a&gt;will be escaped&lt;/a&gt</span>;

Sneeze.render([:div, [:__@raw_html, "<span>totally not escaped</span>"]])
# => <div><span>totally not escaped</span></div>

Sneeze.render(
  [:ul, %{class: "super-cool-list"},
   [:li,
    [:a, %{href: "/"},        "Home"]],
   [:li,
    [:a, %{href: "/about"},   "About"]],
   [:li,
    [:a, %{href: "/contact"}, "Contact"]]]
)
# => <ul class="super-cool-list"><li><a href="/">Home</a></li>...</ul

Sneeze.render([
  [:__@raw_html, "<!DOCTYPE html>"],
  [:head,
   [:title, "wat"]],
  [:body,
   [:div, %{id: "main-content"}, "hello"]]
]
# => <!DOCTYPE html><head><title>wat</title></head><body><div id="main-content">hello</div></body>

Sneeze.render_iodata([:a, %{href: "example.com"}, "hello"])
# => [
#      ["<", "a", [[" ", "href", "=\"", "example.com", "\""]], ">"],
#      [["hello"]],
#      ["</", "a", ">"]
#    ]

If you're using sneeze and getting surprising/screwy results, please open an issue.

Documentation

Documentation can be found on hexdocs.

Demo App

See cold for a demo of how to use Sneeze with Plug.

Bugs, Improvements and Contributing

Open an issue or pull-request on GitHub, all contributions welcome! :)

Changes

2.0.0

1.3.0

1.2.1

1.2.0

1.1.0