Created
February 16, 2014 07:26
-
-
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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