Skip to content

Flamefork/widje

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Widje

Widje is html templating library for ClojureScript based on the awesome crate and jayq.

Basics

Widget is a function that return DOM node. It combines crate template with supporting logic (event handling etc) into single logical unit. Also widget keep track of each instance it creates and provide easy way to search them by first argument.

Widget usage

(ns myapp
  (:use-macros [widje.macros :only [defwidget]])
  (:require [widje.core :as widje]))

(defwidget todo [item]      ; widget function name and arguments
  [:div.todo                ; crate template
    :p.-text (:name item)]  ;
  [text]                    ; bind elements to vars by role (see widje.role)
  (listen text :click       ; handle events
    (mark-done item))       ;
  
(def mytodo {:name "Do stuff"})
=> {:name "Do stuff"}

(todo {:name "Do stuff"})
=> HTMLElement <div class="todo"><p class="-text">Do stuff</p></div>

(widje/find-instance mytodo)
=> HTMLElement <div class="todo"><p class="-text">Do stuff</p></div>

There are also widget (= fn) and letwidget (= letfn) macros.

Binding usage

This is actually a documentation for the awesome crate binding feature.

(defwidget item [item-atm]
  [:li
    (bound item-atm :name)])

(defwidget items [items-coll-atm]
  [:ul
    (bound-coll items-coll-atm {:as item})])

Widje adds (bound* [atoms*] func?) to crate features for binding to multiple atoms.

Utils

See widje.util for documentation for:

  • evt->key
  • bound-checkbox
  • checkbox-checked?
  • check!

macros/listen macro is an easy way to bind to events (see widget usage example).

core/render is an easy way to render widget to some container.

License

Copyright (C) 2013 Ilia Ablamonov

Distributed under the Eclipse Public License, the same as Clojure.

About

Templating for ClojureScript

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published