Skip to content

Instantly share code, notes, and snippets.

@craftybones
Created May 8, 2020 07:31
Show Gist options
  • Save craftybones/7599f46501c34d47b4f6ee046cdd7354 to your computer and use it in GitHub Desktop.
Save craftybones/7599f46501c34d47b4f6ee046cdd7354 to your computer and use it in GitHub Desktop.
(ns extras.core
(:require [reagent.core :as r]
[clojure.string :as string]))
(defn fibo
([] (fibo 0N 1))
([a b] (lazy-seq (list* a (fibo b (+ a b))))))
(def fruits ["apple" "grapes" "banana" "mango"])
(def colors (repeatedly #(rand-nth [:red :green :black :blue])))
(def fruit-seq (map vector (cycle fruits) colors))
(def spinner (cycle (seq "|/-\\")))
(def circles (map vector (repeatedly #(rand-nth [5 8 10 12 15])) colors))
(defn circle-renderer
[circle-seq]
[:svg {:width 500 :height 100}
[:g (for [[[r c] i] (map vector (take 5 circle-seq) [1 2 3 4 5])]
[:circle {:cx (-> i (* 40) (- 20))
:cy 50
:r r
:fill c}])]])
(defn fibo-renderer
[fibo-seq]
[:div (string/join " " (take 5 fibo-seq))])
(defn fruit-renderer
[fruit-seq]
[:div (for [[fruit color] (take 5 fruit-seq)]
[:p {:style {:color color}} (str fruit)])])
(defn spinner-renderer
[spinner-seq]
[:div [:p {:style {:font-size 30}} (str (first spinner-seq))]])
(defn sequencer [init-seq seq-modifier-fn renderer interval]
(let [s (r/atom init-seq)]
(js/setInterval #(swap! s seq-modifier-fn) interval)
(fn []
[renderer @s])))
(defn full []
[:div
[sequencer (cycle (take 20 (fibo))) rest fibo-renderer 1000]
[sequencer fruit-seq rest fruit-renderer 500]
[sequencer spinner rest spinner-renderer 100]
[sequencer circles rest circle-renderer 800]])
(defn mount-root []
(r/render [full] (.getElementById js/document "app")))
(defn init! []
(mount-root))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment