Created
May 8, 2020 07:31
-
-
Save craftybones/7599f46501c34d47b4f6ee046cdd7354 to your computer and use it in GitHub Desktop.
This file contains hidden or 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
(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