Skip to content
/ sablono Public
forked from r0man/sablono

Lisp/Hiccup style templating for Facebook's React in ClojureScript.

License

Notifications You must be signed in to change notification settings

fact/sablono

 
 

Repository files navigation

ŜABLONO

https://img.shields.io/clojars/v/sablono.svg https://travis-ci.org/r0man/sablono.svg http://jarkeeper.com/r0man/sablono/status.svg https://jarkeeper.com/r0man/sablono/downloads.svg

Lisp/Hiccup style templating for Facebook’s React in ClojureScript.

http://imgs.xkcd.com/comics/tags.png

Dependencies

Ŝablono doesn’t declare a dependency on React anymore. Use the React dependencies from one of the ClojureScript wrappers or provide the dependencies yourself like this:

[cljsjs/react "15.1.0-0"]
[cljsjs/react-dom "15.1.0-0"]

If you want to do server rendering and use the render or render-static functions from the sablono.server namespace you need to add the following dependency as well:

[cljsjs/react-dom-server "15.1.0-0"]

Usage

Most functions from Hiccup are provided in the sablono.core namespace. The library can be used with Om like this:

(ns example
  (:require [om.core :as om :include-macros true]
            [sablono.core :as html :refer-macros [html]]))

(defn widget [data]
  (om/component
   (html [:div "Hello world!"
          [:ul (for [n (range 1 10)]
                 [:li {:key n} n])]
          (html/submit-button "React!")])))

(om/root widget {} {:target (. js/document (getElementById "my-app"))})

HTML Tags

Ŝablono only supports tags and attributes that can be handled by React. This means you can’t have your own custom tags and attributes at the moment. For more details take a look at the Tags and Attributes section in the React documentation.

HTML Attributes

HTML attributes in React are camel-cased and the class and for attributes are treated special. Ŝablono renames attributes with dashes in their name to the camel-cased version and handles the class and for special case. This is more consistent with Hiccup and naming conventions used in Clojure.

An input element with event listeners attached to it would look like this in Ŝablono:

(html [:input
       {:auto-complete "off"
        :class "autocomplete"
        :on-change #(on-change %1)
        :on-key-down #(on-key-down %1)
        :type "text"}])

Setting innerHTML of a DOM node

It is not recommended to directly set the innerHTML of DOM nodes, but in some cases it is necessary. i.e. injecting a HTML string that was generated from Markdown.

(html [:div {:dangerouslySetInnerHTML {:__html "<div>hello world</div>" }}])

You can read more at React’s special attributes.

Thanks

This library is based on James Reeves excellent Hiccup library.

License

Copyright © 2013-2016 r0man

Distributed under the Eclipse Public License either version 1.0 or (at your option) any later version.

About

Lisp/Hiccup style templating for Facebook's React in ClojureScript.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Clojure 99.6%
  • Other 0.4%