                  :x 0 :y 0 :width 140 :height 100 :fill "black"}]
          [:text {:x 30 :y 80 :style {:font-size default-font :stroke "white" :fill "white"}} "<!"]]]])))
 
+(defrecord TimeoutSlide [opts]
+  Slide
+  (init-slide-state [_]
+    {:status "READY"})
+
+  (render-slide [_ data owner]
+    (let [bufsize (om/get-state owner :buffer-size)
+          buf (om/get-state owner :buf)
+          default-font (om/get-state owner :default-font)
+          radius (om/get-state owner :radius)]
+      [:div
+       [:svg {:version "1.1" :width 800 :height 600}
+        [:text {:x 30 :y 120 :style {:font-size default-font :stroke "white" :fill "white"}} (om/get-state owner :status)]
+        [:g {:transform "translate(70,150)"
+             :onClick (fn [_]
+                        (om/set-state! owner :status "WAITING")
+                        (go
+                          (<! (timeout 2000))
+                          (om/set-state! owner :status "CLOSED")))}
+         [:rect {:x 0 :y 0 :width 280 :height 100 :fill "red"}]
+         [:text {:x 30 :y 80 :style {:font-size default-font :stroke "white" :fill "white"}} "(timeout 2000)"]]]])))
+
 (def app-model
-  (atom {:current-slide 3
+  (atom {:current-slide 4
          :slides
          [{:title "core.async"
            :event "QCon 2014"


          {:subtitle "put and take"
           :custom (PutAndTakeSlide. {:buffer-size 7 :font-size "72pt" :radius 50})}

          {:title "Buffers"
           :code "(<! (chan))"}

   [om.dom :as dom :include-macros true]
   [sablono.core :as html :refer-macros [html]]
   [ankha.core :as ankha]
   [cljs.core.async :refer [<! >! timeout buffer chan put! sliding-buffer close! pipe map< filter<]]
   [ajax.core :refer (GET POST)]))

(enable-console-print!)
