This commit is contained in:
Yann Esposito 2015-08-27 18:09:45 +02:00
parent ffb9fd2167
commit f7c5d095a9
3 changed files with 40 additions and 36 deletions

View file

@ -1,6 +1,5 @@
(ns apintro.core (ns apintro.core
; (:refer-clojure :exclude [atom]) (:require [freactive.core :refer [cursor]]
(:require [freactive.core :refer [atom cursor]]
[freactive.dom :as dom] [freactive.dom :as dom]
[freactive.animation :as animation] [freactive.animation :as animation]
[apintro.model :refer [init! sets gets swaps]] [apintro.model :refer [init! sets gets swaps]]
@ -16,7 +15,7 @@
:vgapi vgapi/initial-state :vgapi vgapi/initial-state
}) })
(vgapi/init) (vgapi/init :vgapi)
(defn on-js-reload [] (defn on-js-reload []
;; optionally touch your app-state to force rerendering depending on ;; optionally touch your app-state to force rerendering depending on
@ -48,7 +47,7 @@
(defn animated-title [text] (defn animated-title [text]
[:h1 {:style [:h1 {:style
{:font-size (rx (str (* 80 @ease1) "px")) {:font-size (rx (str (* 80 @ease1) "px"))
:padding-top (rx (str (* 200 @ease1) "px")) :padding-top (rx (str (* 100 @ease1) "px"))
:opacity (rx (str @ease2)) :opacity (rx (str @ease2))
:transform (rx (str "rotate(" @ease3 "deg)")) :transform (rx (str "rotate(" @ease3 "deg)"))
:-webkit-transform (rx (str "rotate(" @ease3 "deg)")) :-webkit-transform (rx (str "rotate(" @ease3 "deg)"))
@ -78,21 +77,11 @@
[:div [:div
[animated-title (gets [:title])] [animated-title (gets [:title])]
[:div.project {:style {:font-family "Monaco,monospace" :opacity 0.5}} [:div.project {:style {:font-family "Monaco,monospace" :opacity 0.5}}
(gets [:vgapi :project-id])]]] (gets [:vgapi :project-id])]
(rx [vgapi/view (gets [:vgapi])])
]]
[page 1 "subtitle" green "#title" "« Back to Title" [page 1 "subtitle" green "#title" "« Back to Title"
[animated-title (gets [:subtitle])]] [animated-title (gets [:subtitle])]]])
])
(defn view []
[:div
{:width "100%"
:height "100%"
:style {:border "1px solid black"}
:on-mousemove (fn [e] (sets [:mouse-pos] [(.-clientX e) (.-clientY e)]))
}
[:h1 (gets [:text])]
[:p "Your mouse is at: " (rx (str (gets [:mouse-pos])))]
])
(dom/mount! (.getElementById js/document "root") (ease-view)) (dom/mount! (.getElementById js/document "root") (ease-view))

View file

@ -1,6 +1,6 @@
(ns ^:figwheel-always apintro.model (ns ^:figwheel-always apintro.model
(:refer-clojure :exclude [atom]) (:refer-clojure :exclude [atom])
(:require [freactive.core :refer [atom]])) (:require [freactive.core :refer [atom cursor]]))
(defonce state (atom {})) (defonce state (atom {}))

View file

@ -1,8 +1,10 @@
(ns ^:figwheel-always apintro.vgapi (ns ^:figwheel-always apintro.vgapi
(:refer-clojure :exclude [atom])
(:require-macros [cljs.core.async.macros :refer [go]] (:require-macros [cljs.core.async.macros :refer [go]]
[freactive.macros :refer [rx]]) [freactive.macros :refer [rx]])
(:require (:require
[apintro.model :refer [gets sets]] [apintro.model :refer [gets sets]]
[freactive.animation :as animation]
[cljs-http.client :as http] [cljs-http.client :as http]
[cljs.core.async :refer [<!]])) [cljs.core.async :refer [<!]]))
@ -12,7 +14,7 @@
(def initial-state (def initial-state
{:color 0 {:color 0
:angle 0 :angle 0
:volume 1 :volume 0
:project-id "vigiglobe-Microsoft" :project-id "vigiglobe-Microsoft"
:msg "Nothing done yet."}) :msg "Nothing done yet."})
@ -23,14 +25,14 @@
(f) (f)
(js/setInterval f n)) (js/setInterval f n))
(defn get-datas-every [route params interval action] (defn get-datas-every [prefix route params interval action]
(smart-si (smart-si
(fn [] (fn []
(go (let [now (.getTime (new js/Date)) (go (let [now (.getTime (new js/Date))
from (.toISOString (new js/Date (- now (+ interval (* 60 1000))))) from (.toISOString (new js/Date (- now (+ interval (* 60 1000)))))
to (.toISOString (new js/Date (- now (* 60 1000)))) to (.toISOString (new js/Date (- now (* 60 1000))))
response (<! (http/get (str "http://dev.api.vigiglo.be/api" route) response (<! (http/get (str "http://dev.api.vigiglo.be/api" route)
{:query-params (into {:project_id (gets [:vgapi :project-id]) {:query-params (into {:project_id (gets [prefix :project-id])
:timeFrom from :timeFrom from
:timeTo to} :timeTo to}
params)}))] params)}))]
@ -39,30 +41,32 @@
(get-in response [:body :data])))))) (get-in response [:body :data]))))))
interval)) interval))
(defn get-volume [] (defn get-volume [prefix]
(get-datas-every (get-datas-every
prefix
"/statistics/v1/volume" {} 1000 "/statistics/v1/volume" {} 1000
(fn [res] (fn [res]
(let [new-size (second (first (:messages res)))] (let [new-size (second (first (:messages res)))]
(sets [:msg] (str new-size)) (sets [prefix :msg] (str new-size))
(sets [:volume] new-size))))) (sets [prefix :volume] new-size)))))
(defn get-messages [] (defn get-messages [prefix]
(let [interval 1000] (let [interval 1000]
(get-datas-every (get-datas-every
prefix
"/content/v1/messages" {:limit (* 20 (/ interval 100))} interval "/content/v1/messages" {:limit (* 20 (/ interval 100))} interval
(fn [res] (fn [res]
(let [now (.getTime (new js/Date))] (let [now (.getTime (new js/Date))]
(sets [:msg-time] now) (sets [prefix :msg-time] now)
(sets [:msg-refresh] (+ interval now)) (sets [prefix :msg-refresh] (+ interval now))
(sets [:messages] res)))))) (sets [prefix :messages] res))))))
;; ------------------------------------------------------------------------------ ;; ------------------------------------------------------------------------------
;; Init ;; Init
;; ------------------------------------------------------------------------------ ;; ------------------------------------------------------------------------------
(defn init [] (defn init [prefix]
(get-volume) ; (get-volume prefix)
(get-messages) (get-messages prefix)
{}) {})
;; ------------------------------------------------------------------------------ ;; ------------------------------------------------------------------------------
@ -84,12 +88,23 @@
;; View ;; View
;; ------------------------------------------------------------------------------ ;; ------------------------------------------------------------------------------
(defn view-tweets [state] (defn view-tweets [state]
[:div "tweets"]) (let [ease (animation/easer 1.0)]
[:div {:style {:text-align "left"
:line-height "2em"
:opacity (rx @ease)
:font-family "Futura, sans-serif"}
:node/on-attached (fn [node callback]
(animation/start-easing! ease 1.0 0.0 1000 animation/quad-in callback))
}
[:ul
(for [tweet (:messages state)]
[:li (:text tweet)])]]))
(defn view-volume [state] (defn view-volume [state]
[:div "volume"]) [:div
(str "volume: " (:volume state))])
(defn view [state] (defn view [state]
[:div [:div
[view-volume] [view-volume state]
[view-tweets]]) [view-tweets state]])