├── chapter-1 ├── piggieback_project │ ├── .idea │ │ ├── .name │ │ ├── copyright │ │ │ └── profiles_settings.xml │ │ ├── encodings.xml │ │ ├── libraries │ │ │ ├── Leiningen__weasel_0_7_0.xml │ │ │ ├── Leiningen__args4j_2_0_26.xml │ │ │ ├── Leiningen__http_kit_2_1_18.xml │ │ │ ├── Leiningen__org_mozilla_rhino_1_7R5.xml │ │ │ ├── Leiningen__org_clojure_clojure_1_7_0.xml │ │ │ ├── Leiningen__com_google_guava_guava_18_0.xml │ │ │ ├── Leiningen__org_clojure_data_json_0_2_6.xml │ │ │ ├── Leiningen__com_cemerick_piggieback_0_2_1.xml │ │ │ ├── Leiningen__com_google_code_gson_gson_2_2_4.xml │ │ │ ├── Leiningen__clojure_complete_0_2_3.xml │ │ │ ├── Leiningen__org_clojure_tools_nrepl_0_2_10.xml │ │ │ ├── Leiningen__org_clojure_clojurescript_1_7_48.xml │ │ │ ├── Leiningen__com_google_code_findbugs_jsr305_1_3_9.xml │ │ │ ├── Leiningen__com_google_protobuf_protobuf_java_2_5_0.xml │ │ │ ├── Leiningen__org_clojure_tools_reader_0_10_0_alpha3.xml │ │ │ ├── Leiningen__com_google_javascript_closure_compiler_v20150729.xml │ │ │ ├── Leiningen__com_google_javascript_closure_compiler_externs_v20150729.xml │ │ │ ├── Leiningen__org_clojure_google_closure_library_0_0_20150805_acd8b553.xml │ │ │ └── Leiningen__org_clojure_google_closure_library_third_party_0_0_20150805_acd8b553.xml │ │ ├── modules.xml │ │ ├── compiler.xml │ │ └── misc.xml │ ├── greet.html │ ├── src │ │ └── piggieback_project │ │ │ ├── core.clj │ │ │ ├── #core.cljs# │ │ │ ├── #test.cljs# │ │ │ ├── test.cljs │ │ │ └── core.cljs │ ├── .gitignore │ ├── test │ │ └── piggieback_project │ │ │ └── core_test.clj │ ├── README.md │ ├── project.clj │ └── piggieback_project.iml ├── figwheel_project │ ├── .#project.clj │ ├── src │ │ └── figwheel_project │ │ │ ├── #core.cljs# │ │ │ ├── core.cljs │ │ │ └── core.clj │ ├── greet.html │ ├── resources │ │ └── public │ │ │ ├── greet.html │ │ │ └── js │ │ │ └── main.js │ ├── .gitignore │ ├── test │ │ └── figwheel_project │ │ │ └── core_test.clj │ ├── README.md │ ├── main.js │ ├── project.clj │ └── LICENSE ├── cljs_first_project │ ├── build.clj │ ├── src │ │ └── cljs_first_project │ │ │ └── core.cljs │ ├── greet.html │ └── repl.clj ├── figwheel_node │ ├── src │ │ └── figwheel_node │ │ │ ├── core.clj │ │ │ └── core.cljs │ ├── .gitignore │ ├── test │ │ └── figwheel_node │ │ │ └── core_test.clj │ ├── README.md │ ├── project.clj │ └── LICENSE └── .gitignore ├── chapter-2 └── experiment │ ├── resources │ └── public │ │ ├── css │ │ └── style.css │ │ └── index.html │ ├── src │ └── experiment │ │ ├── herp-dep.cljs │ │ ├── utils.cljs │ │ ├── page.cljs │ │ ├── burp.cljs │ │ ├── helpers.cljs │ │ ├── consumers.cljs │ │ ├── core.cljs │ │ ├── macros.clj │ │ ├── zip.cljs │ │ └── async.cljs │ ├── treeact-externs.js │ ├── treeact.js │ ├── .gitignore │ ├── README.md │ └── project.clj ├── chapter-7 ├── logic-demo │ ├── resources │ │ └── public │ │ │ ├── css │ │ │ └── style.css │ │ │ └── index.html │ ├── .gitignore │ ├── README.md │ ├── src │ │ └── logic_demo │ │ │ └── core.cljs │ └── project.clj ├── match-demo │ ├── resources │ │ └── public │ │ │ ├── css │ │ │ └── style.css │ │ │ └── index.html │ ├── .gitignore │ ├── README.md │ ├── src │ │ └── match_demo │ │ │ └── core.cljs │ └── project.clj └── schema-demo │ ├── resources │ └── public │ │ ├── css │ │ └── style.css │ │ └── index.html │ ├── .gitignore │ ├── src │ └── schema_demo │ │ ├── core.cljs │ │ └── demographics.cljs │ ├── README.md │ └── project.clj ├── chapter-8 └── testing │ ├── resources │ └── public │ │ ├── css │ │ └── style.css │ │ └── index.html │ ├── test │ └── testing │ │ ├── core_test.cljs │ │ ├── app_test.cljs │ │ ├── test_runner.cljs │ │ └── async_test.cljs │ ├── .gitignore │ ├── src │ └── testing │ │ └── core.cljs │ ├── README.md │ └── project.clj ├── chapter-6 └── cljs-modules │ ├── resources │ └── public │ │ ├── css │ │ └── style.css │ │ └── index.html │ ├── src │ └── cljs_modules │ │ ├── server.clj │ │ ├── inner.cljs │ │ ├── outer.cljs │ │ ├── render.cljs │ │ ├── core.cljs │ │ └── modules.cljs │ └── project.clj ├── chapter-4 ├── dommy_project │ ├── style.css │ ├── doc │ │ └── intro.md │ ├── .gitignore │ ├── test │ │ └── figwheel_project │ │ │ └── core_test.clj │ ├── README.md │ ├── index.html │ ├── project.clj │ ├── main.js │ ├── src │ │ └── dommy_project │ │ │ └── core.cljs │ └── figwheel_server.log ├── RAW_DOM │ ├── doc │ │ └── intro.md │ ├── .gitignore │ ├── index.html │ ├── test │ │ └── figwheel_project │ │ │ └── core_test.clj │ ├── README.md │ ├── project.clj │ ├── src │ │ └── raw_dom │ │ │ └── core.cljs │ ├── main.js │ ├── figwheel_server.log │ └── LICENSE ├── raw_goog │ ├── doc │ │ └── intro.md │ ├── .gitignore │ ├── index.html │ ├── test │ │ └── figwheel_project │ │ │ └── core_test.clj │ ├── README.md │ ├── project.clj │ ├── main.js │ ├── src │ │ └── raw_goog │ │ │ └── core.cljs │ ├── figwheel_server.log │ └── LICENSE ├── domina_project │ ├── doc │ │ └── intro.md │ ├── index.html │ ├── .gitignore │ ├── test │ │ └── figwheel_project │ │ │ └── core_test.clj │ ├── README.md │ ├── main.js │ ├── project.clj │ ├── src │ │ └── domina_project │ │ │ └── core.cljs │ ├── figwheel_server.log │ └── LICENSE ├── garden_project │ ├── doc │ │ └── intro.md │ ├── .gitignore │ ├── index.html │ ├── test │ │ └── figwheel_project │ │ │ └── core_test.clj │ ├── README.md │ ├── src │ │ └── garden_project │ │ │ ├── #core.cljs# │ │ │ └── core.cljs │ ├── project.clj │ ├── main.js │ └── figwheel_server.log ├── hipo_project │ ├── doc │ │ └── intro.md │ ├── index.html │ ├── .gitignore │ ├── test │ │ └── figwheel_project │ │ │ └── core_test.clj │ ├── README.md │ ├── src │ │ └── hipo_project │ │ │ └── core.cljs │ ├── project.clj │ ├── main.js │ └── figwheel_server.log ├── jq_project │ ├── doc │ │ └── intro.md │ ├── .gitignore │ ├── test │ │ └── figwheel_project │ │ │ └── core_test.clj │ ├── src │ │ └── jq_project │ │ │ └── core.cljs │ ├── README.md │ ├── index.html │ ├── project.clj │ ├── main.js │ ├── figwheel_server.log │ └── LICENSE ├── enfocus_project │ ├── doc │ │ └── intro.md │ ├── .gitignore │ ├── index.html │ ├── test │ │ └── figwheel_project │ │ │ └── core_test.clj │ ├── README.md │ ├── project.clj │ ├── main.js │ ├── src │ │ └── enfocus_project │ │ │ └── core.cljs │ └── figwheel_server.log └── .gitignore └── README.md /chapter-1/piggieback_project/.idea/.name: -------------------------------------------------------------------------------- 1 | piggieback_project -------------------------------------------------------------------------------- /chapter-1/figwheel_project/.#project.clj: -------------------------------------------------------------------------------- 1 | rafik@octo-rna.3801 -------------------------------------------------------------------------------- /chapter-2/experiment/resources/public/css/style.css: -------------------------------------------------------------------------------- 1 | /* some style */ 2 | 3 | -------------------------------------------------------------------------------- /chapter-7/logic-demo/resources/public/css/style.css: -------------------------------------------------------------------------------- 1 | /* some style */ 2 | 3 | -------------------------------------------------------------------------------- /chapter-7/match-demo/resources/public/css/style.css: -------------------------------------------------------------------------------- 1 | /* some style */ 2 | 3 | -------------------------------------------------------------------------------- /chapter-7/schema-demo/resources/public/css/style.css: -------------------------------------------------------------------------------- 1 | /* some style */ 2 | 3 | -------------------------------------------------------------------------------- /chapter-8/testing/resources/public/css/style.css: -------------------------------------------------------------------------------- 1 | /* some style */ 2 | 3 | -------------------------------------------------------------------------------- /chapter-6/cljs-modules/resources/public/css/style.css: -------------------------------------------------------------------------------- 1 | /* some style */ 2 | 3 | -------------------------------------------------------------------------------- /chapter-2/experiment/src/experiment/herp-dep.cljs: -------------------------------------------------------------------------------- 1 | (ns experiment.herp_dep) 2 | 3 | (def buzz 8) 4 | -------------------------------------------------------------------------------- /chapter-2/experiment/treeact-externs.js: -------------------------------------------------------------------------------- 1 | var treeact = function() {} 2 | treeact.render = function() {} 3 | 4 | -------------------------------------------------------------------------------- /chapter-2/experiment/src/experiment/utils.cljs: -------------------------------------------------------------------------------- 1 | (ns experiment.utils) 2 | 3 | (defn adder 4 | [x y] 5 | (+ x y)) 6 | -------------------------------------------------------------------------------- /chapter-1/cljs_first_project/build.clj: -------------------------------------------------------------------------------- 1 | (require 'cljs.build.api) 2 | (cljs.build.api/build "src" {:output-to "out/main.js"}) 3 | -------------------------------------------------------------------------------- /chapter-1/figwheel_project/src/figwheel_project/#core.cljs#: -------------------------------------------------------------------------------- 1 | (ns figwheel-project.core) 2 | 3 | (js/alert "Hello from Figwheel!") 4 | -------------------------------------------------------------------------------- /chapter-1/figwheel_project/src/figwheel_project/core.cljs: -------------------------------------------------------------------------------- 1 | (ns figwheel-project.core) 2 | 3 | (js/alert "Hello from Figwheel!") 4 | -------------------------------------------------------------------------------- /chapter-2/experiment/src/experiment/page.cljs: -------------------------------------------------------------------------------- 1 | (ns experiment.page) 2 | 3 | (defn render 4 | [] 5 | (.render (js/treeact))) 6 | -------------------------------------------------------------------------------- /chapter-1/piggieback_project/.idea/copyright/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /chapter-4/dommy_project/style.css: -------------------------------------------------------------------------------- 1 | .changeme { 2 | background-color: yellow; 3 | } 4 | 5 | .border { 6 | border: 2px solid red; 7 | } 8 | -------------------------------------------------------------------------------- /chapter-2/experiment/src/experiment/burp.cljs: -------------------------------------------------------------------------------- 1 | (ns experiment.goog 2 | (:import goog.history.Html5History)) 3 | 4 | (defonce hist (Html5History.)) 5 | -------------------------------------------------------------------------------- /chapter-1/figwheel_project/greet.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /chapter-4/RAW_DOM/doc/intro.md: -------------------------------------------------------------------------------- 1 | # Introduction to figwheel_project 2 | 3 | TODO: write [great documentation](http://jacobian.org/writing/what-to-write/) 4 | -------------------------------------------------------------------------------- /chapter-4/raw_goog/doc/intro.md: -------------------------------------------------------------------------------- 1 | # Introduction to figwheel_project 2 | 3 | TODO: write [great documentation](http://jacobian.org/writing/what-to-write/) 4 | -------------------------------------------------------------------------------- /chapter-4/domina_project/doc/intro.md: -------------------------------------------------------------------------------- 1 | # Introduction to figwheel_project 2 | 3 | TODO: write [great documentation](http://jacobian.org/writing/what-to-write/) 4 | -------------------------------------------------------------------------------- /chapter-4/dommy_project/doc/intro.md: -------------------------------------------------------------------------------- 1 | # Introduction to figwheel_project 2 | 3 | TODO: write [great documentation](http://jacobian.org/writing/what-to-write/) 4 | -------------------------------------------------------------------------------- /chapter-4/garden_project/doc/intro.md: -------------------------------------------------------------------------------- 1 | # Introduction to figwheel_project 2 | 3 | TODO: write [great documentation](http://jacobian.org/writing/what-to-write/) 4 | -------------------------------------------------------------------------------- /chapter-4/hipo_project/doc/intro.md: -------------------------------------------------------------------------------- 1 | # Introduction to figwheel_project 2 | 3 | TODO: write [great documentation](http://jacobian.org/writing/what-to-write/) 4 | -------------------------------------------------------------------------------- /chapter-4/jq_project/doc/intro.md: -------------------------------------------------------------------------------- 1 | # Introduction to figwheel_project 2 | 3 | TODO: write [great documentation](http://jacobian.org/writing/what-to-write/) 4 | -------------------------------------------------------------------------------- /chapter-1/piggieback_project/greet.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /chapter-4/enfocus_project/doc/intro.md: -------------------------------------------------------------------------------- 1 | # Introduction to figwheel_project 2 | 3 | TODO: write [great documentation](http://jacobian.org/writing/what-to-write/) 4 | -------------------------------------------------------------------------------- /chapter-1/figwheel_node/src/figwheel_node/core.clj: -------------------------------------------------------------------------------- 1 | (ns figwheel-node.core) 2 | 3 | (defn foo 4 | "I don't do a whole lot." 5 | [x] 6 | (println x "Hello, World!")) 7 | -------------------------------------------------------------------------------- /chapter-1/figwheel_project/resources/public/greet.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /chapter-4/hipo_project/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /chapter-1/figwheel_project/src/figwheel_project/core.clj: -------------------------------------------------------------------------------- 1 | (ns figwheel-project.core) 2 | 3 | (defn foo 4 | "I don't do a whole lot." 5 | [x] 6 | (println x "Hello, World!")) 7 | -------------------------------------------------------------------------------- /chapter-4/RAW_DOM/.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | /classes 3 | /checkouts 4 | pom.xml 5 | pom.xml.asc 6 | *.jar 7 | *.class 8 | /.lein-* 9 | /.nrepl-port 10 | .hgignore 11 | .hg/ 12 | -------------------------------------------------------------------------------- /chapter-4/domina_project/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /chapter-4/hipo_project/.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | /classes 3 | /checkouts 4 | pom.xml 5 | pom.xml.asc 6 | *.jar 7 | *.class 8 | /.lein-* 9 | /.nrepl-port 10 | .hgignore 11 | .hg/ 12 | -------------------------------------------------------------------------------- /chapter-4/jq_project/.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | /classes 3 | /checkouts 4 | pom.xml 5 | pom.xml.asc 6 | *.jar 7 | *.class 8 | /.lein-* 9 | /.nrepl-port 10 | .hgignore 11 | .hg/ 12 | -------------------------------------------------------------------------------- /chapter-4/raw_goog/.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | /classes 3 | /checkouts 4 | pom.xml 5 | pom.xml.asc 6 | *.jar 7 | *.class 8 | /.lein-* 9 | /.nrepl-port 10 | .hgignore 11 | .hg/ 12 | -------------------------------------------------------------------------------- /chapter-1/figwheel_node/.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | /classes 3 | /checkouts 4 | pom.xml 5 | pom.xml.asc 6 | *.jar 7 | *.class 8 | /.lein-* 9 | /.nrepl-port 10 | .hgignore 11 | .hg/ 12 | -------------------------------------------------------------------------------- /chapter-1/figwheel_project/.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | /classes 3 | /checkouts 4 | pom.xml 5 | pom.xml.asc 6 | *.jar 7 | *.class 8 | /.lein-* 9 | /.nrepl-port 10 | .hgignore 11 | .hg/ 12 | -------------------------------------------------------------------------------- /chapter-1/piggieback_project/src/piggieback_project/core.clj: -------------------------------------------------------------------------------- 1 | (ns piggieback-project.core) 2 | 3 | (defn foo 4 | "I don't do a whole lot." 5 | [x] 6 | (println x "Hello, World!")) 7 | -------------------------------------------------------------------------------- /chapter-4/domina_project/.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | /classes 3 | /checkouts 4 | pom.xml 5 | pom.xml.asc 6 | *.jar 7 | *.class 8 | /.lein-* 9 | /.nrepl-port 10 | .hgignore 11 | .hg/ 12 | -------------------------------------------------------------------------------- /chapter-4/dommy_project/.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | /classes 3 | /checkouts 4 | pom.xml 5 | pom.xml.asc 6 | *.jar 7 | *.class 8 | /.lein-* 9 | /.nrepl-port 10 | .hgignore 11 | .hg/ 12 | -------------------------------------------------------------------------------- /chapter-4/enfocus_project/.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | /classes 3 | /checkouts 4 | pom.xml 5 | pom.xml.asc 6 | *.jar 7 | *.class 8 | /.lein-* 9 | /.nrepl-port 10 | .hgignore 11 | .hg/ 12 | -------------------------------------------------------------------------------- /chapter-4/garden_project/.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | /classes 3 | /checkouts 4 | pom.xml 5 | pom.xml.asc 6 | *.jar 7 | *.class 8 | /.lein-* 9 | /.nrepl-port 10 | .hgignore 11 | .hg/ 12 | -------------------------------------------------------------------------------- /chapter-1/piggieback_project/.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | /classes 3 | /checkouts 4 | pom.xml 5 | pom.xml.asc 6 | *.jar 7 | *.class 8 | /.lein-* 9 | /.nrepl-port 10 | .hgignore 11 | .hg/ 12 | -------------------------------------------------------------------------------- /chapter-2/experiment/treeact.js: -------------------------------------------------------------------------------- 1 | treeact = function() { 2 | var tree = {}; 3 | tree.render = function() { 4 | console.log("Page rendered!"); 5 | } 6 | return tree; 7 | }; 8 | -------------------------------------------------------------------------------- /chapter-1/piggieback_project/src/piggieback_project/#core.cljs#: -------------------------------------------------------------------------------- 1 | (ns piggieback-project.core 2 | (:require [weasel.repl :as repl])) 3 | 4 | (when-not (repl/alive?) 5 | (repl/connect "ws://localhost:9001")) 6 | -------------------------------------------------------------------------------- /chapter-1/piggieback_project/src/piggieback_project/#test.cljs#: -------------------------------------------------------------------------------- 1 | (ns piggieback-project.test) 2 | 3 | (defn test-fn [your-name] 4 | (js/alert (+ "Hello from Piggieback, Weasel and Cider, Dear" your-name))) 5 | -------------------------------------------------------------------------------- /chapter-1/piggieback_project/src/piggieback_project/test.cljs: -------------------------------------------------------------------------------- 1 | (ns piggieback-project.test) 2 | 3 | (defn test-fn [your-name] 4 | (js/alert (+ "Hello from Piggieback, Weasel and Cider, Dear" your-name))) 5 | -------------------------------------------------------------------------------- /chapter-1/piggieback_project/src/piggieback_project/core.cljs: -------------------------------------------------------------------------------- 1 | (ns piggieback-project.core 2 | (:require [weasel.repl :as repl])) 3 | 4 | (when-not (repl/alive?) 5 | (repl/connect "ws://localhost:9001")) 6 | 7 | -------------------------------------------------------------------------------- /chapter-4/enfocus_project/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /chapter-1/piggieback_project/.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /chapter-1/.gitignore: -------------------------------------------------------------------------------- 1 | *~ 2 | /.DS_Store 3 | .DS_Store 4 | /classes 5 | /target 6 | /out 7 | *out 8 | .lein* 9 | .log* 10 | .repl* 11 | .cljs* 12 | .lein-repl-history 13 | .nrepl-port 14 | .nrepl-repl-history 15 | node_modules 16 | -------------------------------------------------------------------------------- /chapter-1/figwheel_node/src/figwheel_node/core.cljs: -------------------------------------------------------------------------------- 1 | (ns ^:figwheel-always figwheel-node-repl.core 2 | (:require [cljs.nodejs :as nodejs])) 3 | (nodejs/enable-util-print!) 4 | (def -main (fn [] nil)) 5 | (set! *main-cli-fn* -main) 6 | -------------------------------------------------------------------------------- /chapter-2/experiment/src/experiment/helpers.cljs: -------------------------------------------------------------------------------- 1 | (ns experiment.helpers) 2 | 3 | (defn error? 4 | [x] 5 | (instance? js/Error x)) 6 | 7 | (defn throw-err 8 | [x] 9 | (if (error? x) 10 | (throw x) 11 | x)) 12 | -------------------------------------------------------------------------------- /chapter-4/.gitignore: -------------------------------------------------------------------------------- 1 | *~ 2 | /.DS_Store 3 | .DS_Store 4 | /classes 5 | /target 6 | /out 7 | *out 8 | .lein* 9 | .log* 10 | .repl* 11 | .cljs* 12 | .lein-repl-history 13 | .nrepl-port 14 | .nrepl-repl-history 15 | node_modules 16 | -------------------------------------------------------------------------------- /chapter-8/testing/test/testing/core_test.cljs: -------------------------------------------------------------------------------- 1 | (ns testing.core-test 2 | (:require [cljs.test :refer-macros [deftest is testing]])) 3 | 4 | (deftest i-should-fail 5 | (is (= 1 0))) 6 | 7 | (deftest i-should-succeed 8 | (is (= 1 1))) 9 | -------------------------------------------------------------------------------- /chapter-1/cljs_first_project/src/cljs_first_project/core.cljs: -------------------------------------------------------------------------------- 1 | (ns cljs-first-project.core 2 | (:require [clojure.browser.repl :as repl])) 3 | 4 | (defonce conn 5 | (repl/connect "http://localhost:9000/repl")) 6 | 7 | (js/alert "Hello world!") 8 | -------------------------------------------------------------------------------- /chapter-4/RAW_DOM/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |

Clicks So Far:

4 |

0

5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /chapter-4/garden_project/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 |

First paragraph

5 |

Second paragraph

6 |
7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /chapter-4/raw_goog/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |

Clicks So Far:

4 |

0

5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /chapter-8/testing/.gitignore: -------------------------------------------------------------------------------- 1 | /resources/public/js/compiled/** 2 | figwheel_server.log 3 | pom.xml 4 | *jar 5 | /lib/ 6 | /classes/ 7 | /out/ 8 | /target/ 9 | .lein-deps-sum 10 | .lein-repl-history 11 | .lein-plugins/ 12 | .repl 13 | .nrepl-port 14 | -------------------------------------------------------------------------------- /chapter-1/figwheel_node/test/figwheel_node/core_test.clj: -------------------------------------------------------------------------------- 1 | (ns figwheel-node.core-test 2 | (:require [clojure.test :refer :all] 3 | [figwheel-node.core :refer :all])) 4 | 5 | (deftest a-test 6 | (testing "FIXME, I fail." 7 | (is (= 0 1)))) 8 | -------------------------------------------------------------------------------- /chapter-2/experiment/.gitignore: -------------------------------------------------------------------------------- 1 | /resources/public/js/compiled/** 2 | figwheel_server.log 3 | pom.xml 4 | *jar 5 | /lib/ 6 | /classes/ 7 | /out/ 8 | /target/ 9 | .lein-deps-sum 10 | .lein-repl-history 11 | .lein-plugins/ 12 | .repl 13 | .nrepl-port 14 | -------------------------------------------------------------------------------- /chapter-7/logic-demo/.gitignore: -------------------------------------------------------------------------------- 1 | /resources/public/js/compiled/** 2 | figwheel_server.log 3 | pom.xml 4 | *jar 5 | /lib/ 6 | /classes/ 7 | /out/ 8 | /target/ 9 | .lein-deps-sum 10 | .lein-repl-history 11 | .lein-plugins/ 12 | .repl 13 | .nrepl-port 14 | -------------------------------------------------------------------------------- /chapter-7/match-demo/.gitignore: -------------------------------------------------------------------------------- 1 | /resources/public/js/compiled/** 2 | figwheel_server.log 3 | pom.xml 4 | *jar 5 | /lib/ 6 | /classes/ 7 | /out/ 8 | /target/ 9 | .lein-deps-sum 10 | .lein-repl-history 11 | .lein-plugins/ 12 | .repl 13 | .nrepl-port 14 | -------------------------------------------------------------------------------- /chapter-7/schema-demo/.gitignore: -------------------------------------------------------------------------------- 1 | /resources/public/js/compiled/** 2 | figwheel_server.log 3 | pom.xml 4 | *jar 5 | /lib/ 6 | /classes/ 7 | /out/ 8 | /target/ 9 | .lein-deps-sum 10 | .lein-repl-history 11 | .lein-plugins/ 12 | .repl 13 | .nrepl-port 14 | -------------------------------------------------------------------------------- /chapter-4/RAW_DOM/test/figwheel_project/core_test.clj: -------------------------------------------------------------------------------- 1 | (ns figwheel-project.core-test 2 | (:require [clojure.test :refer :all] 3 | [figwheel-project.core :refer :all])) 4 | 5 | (deftest a-test 6 | (testing "FIXME, I fail." 7 | (is (= 0 1)))) 8 | -------------------------------------------------------------------------------- /chapter-4/jq_project/test/figwheel_project/core_test.clj: -------------------------------------------------------------------------------- 1 | (ns figwheel-project.core-test 2 | (:require [clojure.test :refer :all] 3 | [figwheel-project.core :refer :all])) 4 | 5 | (deftest a-test 6 | (testing "FIXME, I fail." 7 | (is (= 0 1)))) 8 | -------------------------------------------------------------------------------- /chapter-4/raw_goog/test/figwheel_project/core_test.clj: -------------------------------------------------------------------------------- 1 | (ns figwheel-project.core-test 2 | (:require [clojure.test :refer :all] 3 | [figwheel-project.core :refer :all])) 4 | 5 | (deftest a-test 6 | (testing "FIXME, I fail." 7 | (is (= 0 1)))) 8 | -------------------------------------------------------------------------------- /chapter-4/domina_project/test/figwheel_project/core_test.clj: -------------------------------------------------------------------------------- 1 | (ns figwheel-project.core-test 2 | (:require [clojure.test :refer :all] 3 | [figwheel-project.core :refer :all])) 4 | 5 | (deftest a-test 6 | (testing "FIXME, I fail." 7 | (is (= 0 1)))) 8 | -------------------------------------------------------------------------------- /chapter-4/dommy_project/test/figwheel_project/core_test.clj: -------------------------------------------------------------------------------- 1 | (ns figwheel-project.core-test 2 | (:require [clojure.test :refer :all] 3 | [figwheel-project.core :refer :all])) 4 | 5 | (deftest a-test 6 | (testing "FIXME, I fail." 7 | (is (= 0 1)))) 8 | -------------------------------------------------------------------------------- /chapter-4/enfocus_project/test/figwheel_project/core_test.clj: -------------------------------------------------------------------------------- 1 | (ns figwheel-project.core-test 2 | (:require [clojure.test :refer :all] 3 | [figwheel-project.core :refer :all])) 4 | 5 | (deftest a-test 6 | (testing "FIXME, I fail." 7 | (is (= 0 1)))) 8 | -------------------------------------------------------------------------------- /chapter-4/garden_project/test/figwheel_project/core_test.clj: -------------------------------------------------------------------------------- 1 | (ns figwheel-project.core-test 2 | (:require [clojure.test :refer :all] 3 | [figwheel-project.core :refer :all])) 4 | 5 | (deftest a-test 6 | (testing "FIXME, I fail." 7 | (is (= 0 1)))) 8 | -------------------------------------------------------------------------------- /chapter-4/hipo_project/test/figwheel_project/core_test.clj: -------------------------------------------------------------------------------- 1 | (ns figwheel-project.core-test 2 | (:require [clojure.test :refer :all] 3 | [figwheel-project.core :refer :all])) 4 | 5 | (deftest a-test 6 | (testing "FIXME, I fail." 7 | (is (= 0 1)))) 8 | -------------------------------------------------------------------------------- /chapter-1/figwheel_project/test/figwheel_project/core_test.clj: -------------------------------------------------------------------------------- 1 | (ns figwheel-project.core-test 2 | (:require [clojure.test :refer :all] 3 | [figwheel-project.core :refer :all])) 4 | 5 | (deftest a-test 6 | (testing "FIXME, I fail." 7 | (is (= 0 1)))) 8 | -------------------------------------------------------------------------------- /chapter-2/experiment/src/experiment/consumers.cljs: -------------------------------------------------------------------------------- 1 | (ns experiment.consumers 2 | (:require [cljs.core.async :as async] 3 | [experiment.helpers]) 4 | (:require-macros 5 | [cljs.core.async.macros :as async-macros] 6 | [experiment.macros :as m])) 7 | 8 | -------------------------------------------------------------------------------- /chapter-1/piggieback_project/test/piggieback_project/core_test.clj: -------------------------------------------------------------------------------- 1 | (ns piggieback-project.core-test 2 | (:require [clojure.test :refer :all] 3 | [piggieback-project.core :refer :all])) 4 | 5 | (deftest a-test 6 | (testing "FIXME, I fail." 7 | (is (= 0 1)))) 8 | -------------------------------------------------------------------------------- /chapter-4/jq_project/src/jq_project/core.cljs: -------------------------------------------------------------------------------- 1 | (ns jq-project.core 2 | (:use [jayq.core :only [$ css html]])) 3 | 4 | (def $some-div ($ :#some-div)) 5 | 6 | (defn change-the-div 7 | [] 8 | (-> $some-div 9 | (css {:background "cyan"}) 10 | (html "changed Inner HTML"))) 11 | 12 | -------------------------------------------------------------------------------- /chapter-1/figwheel_node/README.md: -------------------------------------------------------------------------------- 1 | # figwheel_node 2 | 3 | A Clojure library designed to ... well, that part is up to you. 4 | 5 | ## Usage 6 | 7 | FIXME 8 | 9 | ## License 10 | 11 | Copyright © 2015 FIXME 12 | 13 | Distributed under the Eclipse Public License either version 1.0 or (at 14 | your option) any later version. 15 | -------------------------------------------------------------------------------- /chapter-4/RAW_DOM/README.md: -------------------------------------------------------------------------------- 1 | # figwheel_project 2 | 3 | A Clojure library designed to ... well, that part is up to you. 4 | 5 | ## Usage 6 | 7 | FIXME 8 | 9 | ## License 10 | 11 | Copyright © 2015 FIXME 12 | 13 | Distributed under the Eclipse Public License either version 1.0 or (at 14 | your option) any later version. 15 | -------------------------------------------------------------------------------- /chapter-4/jq_project/README.md: -------------------------------------------------------------------------------- 1 | # figwheel_project 2 | 3 | A Clojure library designed to ... well, that part is up to you. 4 | 5 | ## Usage 6 | 7 | FIXME 8 | 9 | ## License 10 | 11 | Copyright © 2015 FIXME 12 | 13 | Distributed under the Eclipse Public License either version 1.0 or (at 14 | your option) any later version. 15 | -------------------------------------------------------------------------------- /chapter-4/raw_goog/README.md: -------------------------------------------------------------------------------- 1 | # figwheel_project 2 | 3 | A Clojure library designed to ... well, that part is up to you. 4 | 5 | ## Usage 6 | 7 | FIXME 8 | 9 | ## License 10 | 11 | Copyright © 2015 FIXME 12 | 13 | Distributed under the Eclipse Public License either version 1.0 or (at 14 | your option) any later version. 15 | -------------------------------------------------------------------------------- /chapter-1/figwheel_project/README.md: -------------------------------------------------------------------------------- 1 | # figwheel_project 2 | 3 | A Clojure library designed to ... well, that part is up to you. 4 | 5 | ## Usage 6 | 7 | FIXME 8 | 9 | ## License 10 | 11 | Copyright © 2015 FIXME 12 | 13 | Distributed under the Eclipse Public License either version 1.0 or (at 14 | your option) any later version. 15 | -------------------------------------------------------------------------------- /chapter-4/domina_project/README.md: -------------------------------------------------------------------------------- 1 | # figwheel_project 2 | 3 | A Clojure library designed to ... well, that part is up to you. 4 | 5 | ## Usage 6 | 7 | FIXME 8 | 9 | ## License 10 | 11 | Copyright © 2015 FIXME 12 | 13 | Distributed under the Eclipse Public License either version 1.0 or (at 14 | your option) any later version. 15 | -------------------------------------------------------------------------------- /chapter-4/dommy_project/README.md: -------------------------------------------------------------------------------- 1 | # figwheel_project 2 | 3 | A Clojure library designed to ... well, that part is up to you. 4 | 5 | ## Usage 6 | 7 | FIXME 8 | 9 | ## License 10 | 11 | Copyright © 2015 FIXME 12 | 13 | Distributed under the Eclipse Public License either version 1.0 or (at 14 | your option) any later version. 15 | -------------------------------------------------------------------------------- /chapter-4/enfocus_project/README.md: -------------------------------------------------------------------------------- 1 | # figwheel_project 2 | 3 | A Clojure library designed to ... well, that part is up to you. 4 | 5 | ## Usage 6 | 7 | FIXME 8 | 9 | ## License 10 | 11 | Copyright © 2015 FIXME 12 | 13 | Distributed under the Eclipse Public License either version 1.0 or (at 14 | your option) any later version. 15 | -------------------------------------------------------------------------------- /chapter-4/garden_project/README.md: -------------------------------------------------------------------------------- 1 | # figwheel_project 2 | 3 | A Clojure library designed to ... well, that part is up to you. 4 | 5 | ## Usage 6 | 7 | FIXME 8 | 9 | ## License 10 | 11 | Copyright © 2015 FIXME 12 | 13 | Distributed under the Eclipse Public License either version 1.0 or (at 14 | your option) any later version. 15 | -------------------------------------------------------------------------------- /chapter-4/hipo_project/README.md: -------------------------------------------------------------------------------- 1 | # figwheel_project 2 | 3 | A Clojure library designed to ... well, that part is up to you. 4 | 5 | ## Usage 6 | 7 | FIXME 8 | 9 | ## License 10 | 11 | Copyright © 2015 FIXME 12 | 13 | Distributed under the Eclipse Public License either version 1.0 or (at 14 | your option) any later version. 15 | -------------------------------------------------------------------------------- /chapter-1/piggieback_project/.idea/libraries/Leiningen__weasel_0_7_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /chapter-1/piggieback_project/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /chapter-1/piggieback_project/README.md: -------------------------------------------------------------------------------- 1 | # piggieback_project 2 | 3 | A Clojure library designed to ... well, that part is up to you. 4 | 5 | ## Usage 6 | 7 | FIXME 8 | 9 | ## License 10 | 11 | Copyright © 2015 FIXME 12 | 13 | Distributed under the Eclipse Public License either version 1.0 or (at 14 | your option) any later version. 15 | -------------------------------------------------------------------------------- /chapter-1/piggieback_project/.idea/libraries/Leiningen__args4j_2_0_26.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /chapter-4/jq_project/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 |
Some Text
8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /chapter-1/piggieback_project/.idea/libraries/Leiningen__http_kit_2_1_18.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /chapter-1/cljs_first_project/greet.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /chapter-1/cljs_first_project/repl.clj: -------------------------------------------------------------------------------- 1 | (require 'cljs.repl) 2 | (require 'cljs.build.api) 3 | (require 'cljs.repl.browser) 4 | 5 | (cljs.build.api/build "src" 6 | {:main 'cljs-first-project.core 7 | :output-to "out/main.js" 8 | :verbose true}) 9 | 10 | (cljs.repl/repl (cljs.repl.browser/repl-env) 11 | :watch "src" 12 | :output-dir "out") 13 | 14 | -------------------------------------------------------------------------------- /chapter-1/piggieback_project/.idea/libraries/Leiningen__org_mozilla_rhino_1_7R5.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /chapter-4/dommy_project/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 |

I should have a border

6 |

I should have a border,too

7 |
8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /chapter-1/piggieback_project/.idea/libraries/Leiningen__org_clojure_clojure_1_7_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /chapter-1/piggieback_project/.idea/libraries/Leiningen__com_google_guava_guava_18_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /chapter-1/piggieback_project/.idea/libraries/Leiningen__org_clojure_data_json_0_2_6.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /chapter-1/piggieback_project/.idea/libraries/Leiningen__com_cemerick_piggieback_0_2_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /chapter-1/piggieback_project/.idea/libraries/Leiningen__com_google_code_gson_gson_2_2_4.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /chapter-1/piggieback_project/.idea/libraries/Leiningen__clojure_complete_0_2_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /chapter-1/piggieback_project/.idea/libraries/Leiningen__org_clojure_tools_nrepl_0_2_10.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /chapter-1/piggieback_project/.idea/libraries/Leiningen__org_clojure_clojurescript_1_7_48.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /chapter-1/piggieback_project/.idea/libraries/Leiningen__com_google_code_findbugs_jsr305_1_3_9.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /chapter-1/piggieback_project/.idea/libraries/Leiningen__com_google_protobuf_protobuf_java_2_5_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /chapter-1/piggieback_project/.idea/libraries/Leiningen__org_clojure_tools_reader_0_10_0_alpha3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /chapter-4/garden_project/src/garden_project/#core.cljs#: -------------------------------------------------------------------------------- 1 | (ns garden-project.core 2 | (:require [garden.core :refer [css]] 3 | [goog.style])) 4 | 5 | 6 | (defn modify-css! 7 | [] 8 | (goog.style/installStyles (css 9 | [:div {:border-style "solid"} 10 | [:&:hover {:border-style "dashed"}] 11 | [:p {:background-color "cyan"}]]))) 12 | -------------------------------------------------------------------------------- /chapter-1/piggieback_project/.idea/libraries/Leiningen__com_google_javascript_closure_compiler_v20150729.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /chapter-4/garden_project/src/garden_project/core.cljs: -------------------------------------------------------------------------------- 1 | (ns garden-project.core 2 | (:require [garden.core :refer [css]] 3 | [goog.style])) 4 | 5 | 6 | (defn modify-css! 7 | [] 8 | (goog.style/installStyles (css 9 | [:div {:border-style "solid"} 10 | [:&:hover {:border-style "dashed"}] 11 | [:p {:background-color "cyan"}]]))) 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /chapter-4/RAW_DOM/project.clj: -------------------------------------------------------------------------------- 1 | (defproject raw-dom "0.1.0-SNAPSHOT" 2 | :dependencies [[org.clojure/clojure "1.8.0"] 3 | [org.clojure/clojurescript "1.8.51"]] 4 | :plugins [[lein-figwheel "0.5.3-2"]] 5 | :clean-targets [:target-path "out"] 6 | :cljsbuild { 7 | :builds [{:id "dev" 8 | :source-paths ["src"] 9 | :figwheel true 10 | :compiler {:main "raw-dom.core"} 11 | }] 12 | }) 13 | -------------------------------------------------------------------------------- /chapter-4/raw_goog/project.clj: -------------------------------------------------------------------------------- 1 | (defproject raw-goog "0.1.0-SNAPSHOT" 2 | :dependencies [[org.clojure/clojure "1.8.0"] 3 | [org.clojure/clojurescript "1.8.51"]] 4 | :plugins [[lein-figwheel "0.5.3-2"]] 5 | :clean-targets [:target-path "out"] 6 | :cljsbuild { 7 | :builds [{:id "dev" 8 | :source-paths ["src"] 9 | :figwheel true 10 | :compiler {:main "raw-goog.core"} 11 | }] 12 | }) 13 | -------------------------------------------------------------------------------- /chapter-1/piggieback_project/.idea/libraries/Leiningen__com_google_javascript_closure_compiler_externs_v20150729.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /chapter-1/piggieback_project/.idea/libraries/Leiningen__org_clojure_google_closure_library_0_0_20150805_acd8b553.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /chapter-8/testing/test/testing/app_test.cljs: -------------------------------------------------------------------------------- 1 | (ns testing.app-test 2 | (:require [cljs.test :refer-macros [deftest is use-fixtures]])) 3 | 4 | ;; Run these fixtures for each test 5 | (use-fixtures 6 | :each 7 | {:before (fn [] (println "Setting up tests...")) 8 | :after (fn [] (println "Tearing down tests..."))}) 9 | 10 | (deftest another-successful-test 11 | ;; Give us an idea of when this test actually executes. 12 | (println "Running a test...") 13 | (is (= 4 (count "test")))) 14 | -------------------------------------------------------------------------------- /chapter-2/experiment/src/experiment/core.cljs: -------------------------------------------------------------------------------- 1 | (ns experiment.core 2 | (:require [experiment.consumers :as consumers] 3 | [experiment.async] 4 | [experiment.zip])) 5 | 6 | (enable-console-print!) 7 | 8 | (defn render 9 | [] 10 | (.render (js/treeact))) 11 | 12 | (render) 13 | 14 | (defn on-js-reload [] 15 | ;; optionally touch your app-state to force rerendering depending on 16 | ;; your application 17 | ;; (swap! app-state update-in [:__figwheel_counter] inc) 18 | ) 19 | -------------------------------------------------------------------------------- /chapter-4/hipo_project/src/hipo_project/core.cljs: -------------------------------------------------------------------------------- 1 | (ns hipo-project.core 2 | (:require [hipo.core :as hipo])) 3 | 4 | (defn create-menu-v [items] 5 | [:ul#my-menu 6 | (for [x items] 7 | [(keyword (str "li#" x) ) x])]) 8 | 9 | (def menu (hipo/create (create-menu-v ["it1" "it2" "it3"]))) 10 | 11 | (defn add-menu! 12 | [] 13 | (.appendChild js/document.body menu)) 14 | 15 | (defn reconcile-new-menu! [] 16 | (hipo/reconciliate! menu (create-menu-v ["new it1" "new it2" "new it3"]))) 17 | -------------------------------------------------------------------------------- /chapter-4/jq_project/project.clj: -------------------------------------------------------------------------------- 1 | (defproject jq-project "0.1.0-SNAPSHOT" 2 | :dependencies [[org.clojure/clojure "1.8.0"] 3 | [org.clojure/clojurescript "1.8.51"] 4 | [jayq "2.5.4"]] 5 | :plugins [[lein-figwheel "0.5.3-2"]] 6 | :clean-targets [:target-path "out"] 7 | :cljsbuild { 8 | :builds [{:id "dev" 9 | :source-paths ["src"] 10 | :figwheel true 11 | :compiler {:main "jq-project.core"} 12 | }] 13 | }) 14 | -------------------------------------------------------------------------------- /chapter-4/RAW_DOM/src/raw_dom/core.cljs: -------------------------------------------------------------------------------- 1 | (ns raw-dom.core) 2 | 3 | (def cnt-holder (.getElementById js/document "clicks")) 4 | (def reset-btn (.getElementById js/document "reset-btn")) 5 | (def cnt (atom 0)) 6 | 7 | (defn inc-clicks! 8 | [] 9 | (set! (.-innerHTML cnt-holder) (swap! cnt inc))) 10 | 11 | 12 | (defn reset-clicks! 13 | [] 14 | (set! (.-innerHTML cnt-holder) (reset! cnt -1))) 15 | 16 | (set! (.-onclick js/document) inc-clicks!) 17 | (set! (.-onclick reset-btn) reset-clicks!) 18 | 19 | 20 | -------------------------------------------------------------------------------- /chapter-4/hipo_project/project.clj: -------------------------------------------------------------------------------- 1 | (defproject hipo-project "0.1.0-SNAPSHOT" 2 | :dependencies [[org.clojure/clojure "1.8.0"] 3 | [org.clojure/clojurescript "1.8.51"] 4 | [hipo "0.5.1"]] 5 | :plugins [[lein-figwheel "0.5.3-2"]] 6 | :clean-targets [:target-path "out"] 7 | :cljsbuild { 8 | :builds [{:id "dev" 9 | :source-paths ["src"] 10 | :figwheel true 11 | :compiler {:main "hipo-project.core"} 12 | }] 13 | }) 14 | -------------------------------------------------------------------------------- /chapter-4/garden_project/project.clj: -------------------------------------------------------------------------------- 1 | (defproject garden-project "0.1.0-SNAPSHOT" 2 | :dependencies [[org.clojure/clojure "1.8.0"] 3 | [org.clojure/clojurescript "1.8.51"] 4 | [garden "1.3.0"]] 5 | :plugins [[lein-figwheel "0.5.3-2"]] 6 | :clean-targets [:target-path "out"] 7 | :cljsbuild { 8 | :builds [{:id "dev" 9 | :source-paths ["src"] 10 | :figwheel true 11 | :compiler {:main "garden-project.core"} 12 | }] 13 | }) 14 | -------------------------------------------------------------------------------- /chapter-8/testing/resources/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 |

Figwheel template

11 |

Checkout your developer console.

12 |
13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /chapter-4/dommy_project/project.clj: -------------------------------------------------------------------------------- 1 | (defproject dommy-project "0.1.0-SNAPSHOT" 2 | :dependencies [[org.clojure/clojure "1.8.0"] 3 | [org.clojure/clojurescript "1.8.51"] 4 | [prismatic/dommy "1.1.0"]] 5 | :plugins [[lein-figwheel "0.5.3-2"]] 6 | :clean-targets [:target-path "out"] 7 | :cljsbuild { 8 | :builds [{:id "dev" 9 | :source-paths ["src"] 10 | :figwheel true 11 | :compiler {:main "dommy-project.core"} 12 | }] 13 | }) 14 | -------------------------------------------------------------------------------- /chapter-4/enfocus_project/project.clj: -------------------------------------------------------------------------------- 1 | (defproject enfocus-project "0.1.0-SNAPSHOT" 2 | :dependencies [[org.clojure/clojure "1.8.0"] 3 | [org.clojure/clojurescript "1.8.51"] 4 | [enfocus "2.1.1"]] 5 | :plugins [[lein-figwheel "0.5.3-2"]] 6 | :clean-targets [:target-path "out"] 7 | :cljsbuild { 8 | :builds [{:id "dev" 9 | :source-paths ["src"] 10 | :figwheel true 11 | :compiler {:main "enfocus-project.core"} 12 | }] 13 | }) 14 | -------------------------------------------------------------------------------- /chapter-6/cljs-modules/resources/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 |

Figwheel template

11 |

Checkout your developer console.

12 |
13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /chapter-7/logic-demo/resources/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 |

Figwheel template

11 |

Checkout your developer console.

12 |
13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /chapter-7/match-demo/resources/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 |

Figwheel template

11 |

Checkout your developer console.

12 |
13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /chapter-4/RAW_DOM/main.js: -------------------------------------------------------------------------------- 1 | var CLOSURE_UNCOMPILED_DEFINES = null; 2 | if(typeof goog == "undefined") document.write(''); 3 | document.write(''); 4 | 5 | document.write(""); 6 | document.write(''); -------------------------------------------------------------------------------- /chapter-4/raw_goog/main.js: -------------------------------------------------------------------------------- 1 | var CLOSURE_UNCOMPILED_DEFINES = null; 2 | if(typeof goog == "undefined") document.write(''); 3 | document.write(''); 4 | 5 | document.write(""); 6 | document.write(''); -------------------------------------------------------------------------------- /chapter-6/cljs-modules/src/cljs_modules/server.clj: -------------------------------------------------------------------------------- 1 | (ns cljs-modules.server 2 | (:require [ring.adapter.jetty :as jetty] 3 | [ring.middleware.resource :as resource])) 4 | 5 | (defn handler [req] 6 | {:status 200 7 | :body (slurp "resources/public/index.html")}) 8 | 9 | (def handler (-> handler 10 | (resource/wrap-resource "public"))) 11 | 12 | (defn main [] 13 | (jetty/run-jetty handler {:port 8080 14 | :host "0.0.0.0" 15 | :join? false})) 16 | -------------------------------------------------------------------------------- /chapter-7/schema-demo/resources/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 |

Figwheel template

11 |

Checkout your developer console.

12 |
13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /chapter-1/piggieback_project/.idea/libraries/Leiningen__org_clojure_google_closure_library_third_party_0_0_20150805_acd8b553.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /chapter-4/jq_project/main.js: -------------------------------------------------------------------------------- 1 | var CLOSURE_UNCOMPILED_DEFINES = null; 2 | if(typeof goog == "undefined") document.write(''); 3 | document.write(''); 4 | 5 | document.write(""); 6 | document.write(''); -------------------------------------------------------------------------------- /chapter-8/testing/src/testing/core.cljs: -------------------------------------------------------------------------------- 1 | (ns testing.core 2 | (:require )) 3 | 4 | (enable-console-print!) 5 | 6 | (println "Edits to this text should show up in your developer console.") 7 | 8 | ;; define your app data so that it doesn't get over-written on reload 9 | 10 | (defonce app-state (atom {:text "Hello world!"})) 11 | 12 | 13 | (defn on-js-reload [] 14 | ;; optionally touch your app-state to force rerendering depending on 15 | ;; your application 16 | ;; (swap! app-state update-in [:__figwheel_counter] inc) 17 | ) 18 | -------------------------------------------------------------------------------- /chapter-4/domina_project/main.js: -------------------------------------------------------------------------------- 1 | var CLOSURE_UNCOMPILED_DEFINES = null; 2 | if(typeof goog == "undefined") document.write(''); 3 | document.write(''); 4 | 5 | document.write(""); 6 | document.write(''); -------------------------------------------------------------------------------- /chapter-4/dommy_project/main.js: -------------------------------------------------------------------------------- 1 | var CLOSURE_UNCOMPILED_DEFINES = null; 2 | if(typeof goog == "undefined") document.write(''); 3 | document.write(''); 4 | 5 | document.write(""); 6 | document.write(''); -------------------------------------------------------------------------------- /chapter-4/garden_project/main.js: -------------------------------------------------------------------------------- 1 | var CLOSURE_UNCOMPILED_DEFINES = null; 2 | if(typeof goog == "undefined") document.write(''); 3 | document.write(''); 4 | 5 | document.write(""); 6 | document.write(''); -------------------------------------------------------------------------------- /chapter-4/hipo_project/main.js: -------------------------------------------------------------------------------- 1 | var CLOSURE_UNCOMPILED_DEFINES = null; 2 | if(typeof goog == "undefined") document.write(''); 3 | document.write(''); 4 | 5 | document.write(""); 6 | document.write(''); -------------------------------------------------------------------------------- /chapter-1/figwheel_project/main.js: -------------------------------------------------------------------------------- 1 | var CLOSURE_UNCOMPILED_DEFINES = null; 2 | if(typeof goog == "undefined") document.write(''); 3 | document.write(''); 4 | 5 | document.write(""); 6 | document.write(''); -------------------------------------------------------------------------------- /chapter-4/enfocus_project/main.js: -------------------------------------------------------------------------------- 1 | var CLOSURE_UNCOMPILED_DEFINES = null; 2 | if(typeof goog == "undefined") document.write(''); 3 | document.write(''); 4 | 5 | document.write(""); 6 | document.write(''); -------------------------------------------------------------------------------- /chapter-8/testing/test/testing/test_runner.cljs: -------------------------------------------------------------------------------- 1 | (ns testing.test-runner 2 | (:require [doo.runner :refer-macros [doo-tests]] 3 | [cljs.test :refer-macros [use-fixtures]] 4 | [testing.app-test] 5 | [testing.async-test] 6 | [testing.core-test])) 7 | 8 | ;; This isn't strictly necessary, but is a good idea depending 9 | ;; upon your application's ultimate runtime engine. 10 | (enable-console-print!) 11 | 12 | (doo-tests 'testing.app-test 13 | 'testing.async-test 14 | 'testing.core-test) 15 | -------------------------------------------------------------------------------- /chapter-1/figwheel_project/resources/public/js/main.js: -------------------------------------------------------------------------------- 1 | var CLOSURE_UNCOMPILED_DEFINES = null; 2 | if(typeof goog == "undefined") document.write(''); 3 | document.write(''); 4 | 5 | document.write(""); 6 | document.write(''); -------------------------------------------------------------------------------- /chapter-4/raw_goog/src/raw_goog/core.cljs: -------------------------------------------------------------------------------- 1 | (ns raw-goog.core 2 | (:require [goog.dom :as dom] 3 | [goog.events :as events])) 4 | 5 | (def cnt-holder (dom/getElement "clicks")) 6 | (def reset-btn (dom/getElement "reset-btn")) 7 | (def cnt (atom 0)) 8 | 9 | (defn inc-clicks! 10 | [] 11 | (dom/setTextContent cnt-holder (swap! cnt inc))) 12 | 13 | (defn reset-clicks! 14 | [] 15 | (dom/setTextContent cnt-holder (reset! cnt 0))) 16 | 17 | (events/listen cnt-holder "click" inc-clicks!) 18 | (events/listen reset-btn "click" reset-clicks!) 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /chapter-4/domina_project/project.clj: -------------------------------------------------------------------------------- 1 | (defproject domina-project "0.1.0-SNAPSHOT" 2 | :dependencies [[org.clojure/clojure "1.8.0"] 3 | [org.clojure/clojurescript "1.8.51"] 4 | [domina "1.0.3"]] 5 | :plugins [[lein-figwheel "0.5.3-2"]] 6 | :clean-targets [:target-path "out"] 7 | :cljsbuild { 8 | :builds [{:id "dev" 9 | :source-paths ["src"] 10 | :figwheel true 11 | :compiler {:main "domina-project.core"} 12 | }] 13 | }) 14 | -------------------------------------------------------------------------------- /chapter-7/schema-demo/src/schema_demo/core.cljs: -------------------------------------------------------------------------------- 1 | (ns schema-demo.core 2 | (:require [schema-demo.demographics :as demo])) 3 | 4 | (enable-console-print!) 5 | 6 | (println "Edits to this text should show up in your developer console.") 7 | 8 | ;; define your app data so that it doesn't get over-written on reload 9 | 10 | (defonce app-state (atom {:text "Hello world!"})) 11 | 12 | 13 | (defn on-js-reload [] 14 | ;; optionally touch your app-state to force rerendering depending on 15 | ;; your application 16 | ;; (swap! app-state update-in [:__figwheel_counter] inc) 17 | ) 18 | -------------------------------------------------------------------------------- /chapter-6/cljs-modules/src/cljs_modules/inner.cljs: -------------------------------------------------------------------------------- 1 | (ns cljs-modules.inner 2 | (:require [om.core :as om] 3 | [om.dom :as dom :include-macros true] 4 | [cljs-modules.render :as render] 5 | [cljs-modules.modules :as modules])) 6 | 7 | (defn inner-component [app owner opts] 8 | (reify om/IRender 9 | (render [_] 10 | (dom/div #js {} nil 11 | (dom/h1 #js {} "Hello from Inner!") 12 | (dom/a #js {:href "/"} "outer"))))) 13 | 14 | (defmethod render/active-component :inner/inner [_] 15 | inner-component) 16 | 17 | (modules/set-loaded! "inner") 18 | -------------------------------------------------------------------------------- /chapter-6/cljs-modules/src/cljs_modules/outer.cljs: -------------------------------------------------------------------------------- 1 | (ns cljs-modules.outer 2 | (:require [om.core :as om] 3 | [om.dom :as dom :include-macros true] 4 | [cljs-modules.render :as render] 5 | [cljs-modules.modules :as modules])) 6 | 7 | (defn outer-component [app owner opts] 8 | (reify om/IRender 9 | (render [_] 10 | (dom/div #js {} nil 11 | (dom/h1 #js {} "Hello from Outer!") 12 | (dom/a #js {:href "/app"} "inner"))))) 13 | 14 | (defmethod render/active-component :outer/outer [_] 15 | outer-component) 16 | 17 | (modules/set-loaded! "outer") 18 | -------------------------------------------------------------------------------- /chapter-6/cljs-modules/src/cljs_modules/render.cljs: -------------------------------------------------------------------------------- 1 | (ns cljs-modules.render 2 | (:require [om.core :as om] 3 | [om.dom :as dom])) 4 | 5 | (def routes ["/" {"" :outer 6 | "app" :inner}]) 7 | 8 | (defmulti active-component identity) 9 | 10 | (defmethod active-component :default [_] 11 | nil) 12 | 13 | (defn render [app owner opts] 14 | (reify 15 | om/IRender 16 | (render [_] 17 | (dom/div nil 18 | (if-let [c (active-component (:active-component app))] 19 | (om/build c app {}) 20 | (dom/p nil "no active component")))))) 21 | -------------------------------------------------------------------------------- /chapter-8/testing/test/testing/async_test.cljs: -------------------------------------------------------------------------------- 1 | (ns testing.async-test 2 | (:require [ajax.core :refer [GET]] 3 | [cljs.test :refer-macros [deftest is async]])) 4 | 5 | (deftest test-async 6 | (async done 7 | (GET "http://www.google.com" 8 | ;; will always fail from PhantomJS because 9 | ;; `Access-Control-Allow-Origin` won't allow 10 | ;; our headless browser to make requests to Google. 11 | {:error-handler 12 | (fn [res] 13 | (is (= (:status-text res) "Request failed.")) 14 | (println "Test finished!") 15 | (done))}))) 16 | -------------------------------------------------------------------------------- /chapter-1/figwheel_project/project.clj: -------------------------------------------------------------------------------- 1 | (defproject figwheel-project "0.1.0-SNAPSHOT" 2 | :dependencies [[org.clojure/clojure "1.8.0"] 3 | [org.clojure/clojurescript "1.8.51"]] 4 | :plugins [[lein-figwheel "0.5.1"]] 5 | :clean-targets [:target-path "out"] 6 | :cljsbuild { 7 | :builds [{:id "dev" 8 | :source-paths ["src"] 9 | :figwheel true 10 | :compiler {:main "figwheel-project.core" 11 | :asset-path "js/out" 12 | :output-to "resources/public/js/main.js" 13 | :output-dir "resources/public/js/out"}}] 14 | }) 15 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Learning ClojureScript [code examples] 2 | 3 | This repository contains various projects and code snippets from [_Learning ClojureScript_](http://www.amazon.com/Learning-ClojureScript-Rafik-Naccache/dp/1785887637/ref=tmm_pap_swatch_0?_encoding=UTF8&qid=1455930533&sr=8-1) (Packt Publishing, 2016). 4 | 5 | The code found in this repository is broken down by the chapters you can expect to find it in. In some cases, code will be re-used or expanded upon in consecutive chapters - in such cases, the code will be found in the earlier of the two chapters in this repository. 6 | 7 | All content here has been distributed under the Eclipse License 1.0. 8 | 9 | It is Copyright © 2016 W. David Jarvis, Rafik Naccache, and Allen Rohner. 10 | -------------------------------------------------------------------------------- /chapter-4/dommy_project/src/dommy_project/core.cljs: -------------------------------------------------------------------------------- 1 | (ns dommy-project.core 2 | (:require 3 | [dommy.core :as dommy :refer-macros [sel sel1]])) 4 | 5 | (defn set-borders! 6 | [] 7 | (let [ all-ps (sel [:#a-div :p])] 8 | (->> all-ps 9 | (map #(dommy/remove-class! % :changeme)) 10 | (map #(dommy/add-class! % :border)) 11 | (map #(dommy/set-text! % "I now have a border!"))))) 12 | 13 | (defn add-btn! 14 | [] 15 | (let [the-div (sel1 :#a-div) 16 | a-btn (dommy/create-element "button")] 17 | (dommy/set-text! a-btn "Click me!") 18 | (dommy/listen! a-btn :click 19 | (fn[e] (js/alert "You clicked me!"))) 20 | (-> the-div 21 | (dommy/append! a-btn)))) 22 | 23 | -------------------------------------------------------------------------------- /chapter-7/schema-demo/src/schema_demo/demographics.cljs: -------------------------------------------------------------------------------- 1 | (ns schema-demo.demographics 2 | (:require [schema.core :as s :include-macros true])) 3 | 4 | (def city 5 | "A schema to describe a city" 6 | {:type s/Keyword 7 | :name s/Str 8 | :population s/Int}) 9 | 10 | (def x 5) 11 | 12 | #_(def state 13 | "A schema to describe a state" 14 | {:type s/Keyword 15 | :name s/Str 16 | :population s/Int 17 | :capital city}) 18 | 19 | (def state 20 | "A schema to describe a state" 21 | {:type s/Keyword 22 | :name s/Str 23 | :population s/Int 24 | :capital {:type s/Keyword 25 | :name s/Str 26 | :population s/Int}}) 27 | 28 | (def form 29 | [(s/one s/Str "s") 30 | (s/optional s/Keyword "k") 31 | s/Int]) 32 | -------------------------------------------------------------------------------- /chapter-4/RAW_DOM/figwheel_server.log: -------------------------------------------------------------------------------- 1 | Compiling "main.js" from ["src"]... 2 | notifying browser that file changed: out/goog/deps.js 3 | notifying browser that file changed: out/cljs_deps.js 4 | notifying browser that file changed: out/raw_dom/core.js 5 | Successfully compiled "main.js" in 0.227 seconds. 6 | Compiling "main.js" from ["src"]... 7 | notifying browser that file changed: out/raw_dom/core.js 8 | Successfully compiled "main.js" in 0.114 seconds. 9 | Compiling "main.js" from ["src"]... 10 | notifying browser that file changed: out/goog/deps.js 11 | notifying browser that file changed: out/cljs_deps.js 12 | notifying browser that file changed: out/raw_dom/core.js 13 | Successfully compiled "main.js" in 0.342 seconds. 14 | -------------------------------------------------------------------------------- /chapter-2/experiment/resources/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 |

Figwheel template

11 |

Checkout your developer console.

12 |
13 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /chapter-1/figwheel_node/project.clj: -------------------------------------------------------------------------------- 1 | (defproject figwheel-node "0.1.0-SNAPSHOT" 2 | :dependencies [[org.clojure/clojure "1.8.0"] 3 | [org.clojure/clojurescript "1.7.228"]] 4 | :plugins [[lein-cljsbuild "1.1.0"] 5 | [lein-figwheel "0.4.0"]] 6 | :clean-targets ^{:protect false} ["out"] 7 | :cljsbuild { 8 | :builds [{:id "server-dev" 9 | :source-paths ["src"] 10 | :figwheel true 11 | :compiler {:main figwheel-node-repl.core 12 | :output-to "out/figwheel_node_repl.js" 13 | :output-dir "out" 14 | :target :nodejs 15 | :optimizations :none 16 | :source-map true}}]} 17 | :figwheel {}) 18 | -------------------------------------------------------------------------------- /chapter-4/domina_project/src/domina_project/core.cljs: -------------------------------------------------------------------------------- 1 | (ns domina-project.core 2 | (:require [domina :as dom] 3 | [domina.css :as css] 4 | [domina.events :as events])) 5 | 6 | (def the-div (css/sel "#a-div")) 7 | (def the-href (dom/html-to-dom "")) 8 | (def the-btn (dom/html-to-dom "