Skip to content

Instantly share code, notes, and snippets.

@selfsame
Created February 16, 2014 07:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save selfsame/9030568 to your computer and use it in GitHub Desktop.
Save selfsame/9030568 to your computer and use it in GitHub Desktop.
interface sets are passed to specific view components, still get state bleed for all view windows.
(sug/defcomp report
[data owner]
{:render-state
(fn [_ state]
(dom/li nil (prn-str (rand-int 100) data) ))})
(sug/defcomp window
[data owner]
{:render-state
(fn [_ state]
(let [[x y w h] (:xywh state)]
(dom/div #js {:ref "tool" :style #js {:left x :top y :width w :height h :position "absolute" :border "1px solid red"}}
(sug/make draggable data {:opts {:className (str "title")
:content (str (:view state) (rand-int 100))}
:init-state {:drag-start :remember
:drag :drag-free}})
(dom/h3 nil (prn-str (:view state)) )
(dom/p nil (prn-str data))
)))
:on {:remember (fn [e]
(let [el-off (element-offset (om/get-node owner "tool"))
el-dim (element-dimensions (om/get-node owner "tool"))
drag-start (:start-location e)]
(om/set-state! owner :drag-start-offset
(mapv - drag-start el-off))
(om/set-state! owner :drag-start-offset-dim
(mapv - drag-start el-dim))))
:drag-free
(fn [e]
(let [state (om/get-state owner)
[x y] (mapv - (:location e) (state :drag-start-offset ))
node (om/get-node owner "tool")]
(style! node :left (px x))
(style! node :top (px y))))}})
(sug/defcomp button
[data owner]
{:render-state
(fn [_ state]
(dom/button #js
{:onClick #(om/transact! data :value not)} (str (:value data) )))})
(sug/defcomp style-view
[data owner]
{:render-state
(fn [_ state]
(dom/div nil
(sug/make window data {:init-state {:view :style
:xywh (:xywh state)}}) ))})
(sug/defcomp control-view
[data owner]
{:render-state
(fn [_ state]
(dom/div nil
(sug/make window data {:init-state {:view :control
:xywh (:xywh state)}}) ))})
(sug/defcomp router
[data owner]
{:init-state
(fn [_]
(let [layout (:layout (om/value data))
grouped (group-by :view layout)]
{:views grouped}))
:render-state
(fn [_ state]
(let [global (:cat (:global data))]
(apply dom/div nil
(concat
(map
#(sug/make style-view (:style (:views data)) {:init-state {:global global :xywh (:xywh %)}}) (:style (:views state)) )
(map
#(sug/make control-view (:control (:views data)) {:init-state {:global global :xywh (:xywh %)}}) (:control (:views state)) ) ))))})
(def DAT (atom {:layout [ {:xywh [10 10 100 160]
:view :style}
{:xywh [400 300 140 360]
:view :style}
{:xywh [300 100 150 300]
:view :control}]
:global {:cat {:value true}}
:views {:control {:mode :edit
:filename "demo.html"}
:style {:selection #{:a :b :c}
:inline {:width 50
:height 100
:margin 24}}
}}))
(om/root DAT router (.getElementById js/document "main"))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment