Initial commit
This commit is contained in:
commit
8f2d4c2c7d
39
hello-world/README.md
Normal file
39
hello-world/README.md
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
# hello-world
|
||||||
|
|
||||||
|
FIXME: Write a one-line description of your library/project.
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
FIXME: Write a paragraph about the library/project and highlight its goals.
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
To get an interactive development environment run:
|
||||||
|
|
||||||
|
lein figwheel
|
||||||
|
|
||||||
|
and open your browser at [localhost:3449](http://localhost:3449/).
|
||||||
|
This will auto compile and send all changes to the browser without the
|
||||||
|
need to reload. After the compilation process is complete, you will
|
||||||
|
get a Browser Connected REPL. An easy way to try it is:
|
||||||
|
|
||||||
|
(js/alert "Am I connected?")
|
||||||
|
|
||||||
|
and you should see an alert in the browser window.
|
||||||
|
|
||||||
|
To clean all compiled files:
|
||||||
|
|
||||||
|
lein clean
|
||||||
|
|
||||||
|
To create a production build run:
|
||||||
|
|
||||||
|
lein do clean, cljsbuild once min
|
||||||
|
|
||||||
|
And open your browser in `resources/public/index.html`. You will not
|
||||||
|
get live reloading, nor a REPL.
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
Copyright © 2014 FIXME
|
||||||
|
|
||||||
|
Distributed under the Eclipse Public License either version 1.0 or (at your option) any later version.
|
42
hello-world/dev/user.clj
Normal file
42
hello-world/dev/user.clj
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
(ns user
|
||||||
|
(:require
|
||||||
|
[figwheel-sidecar.repl-api :as f]))
|
||||||
|
|
||||||
|
;; user is a namespace that the Clojure runtime looks for and
|
||||||
|
;; loads if its available
|
||||||
|
|
||||||
|
;; You can place helper functions in here. This is great for starting
|
||||||
|
;; and stopping your webserver and other development services
|
||||||
|
|
||||||
|
;; The definitions in here will be available if you run "lein repl" or launch a
|
||||||
|
;; Clojure repl some other way
|
||||||
|
|
||||||
|
;; You have to ensure that the libraries you :require are listed in your dependencies
|
||||||
|
|
||||||
|
;; Once you start down this path
|
||||||
|
;; you will probably want to look at
|
||||||
|
;; tools.namespace https://github.com/clojure/tools.namespace
|
||||||
|
;; and Component https://github.com/stuartsierra/component
|
||||||
|
|
||||||
|
|
||||||
|
(defn fig-start
|
||||||
|
"This starts the figwheel server and watch based auto-compiler."
|
||||||
|
[]
|
||||||
|
;; this call will only work are long as your :cljsbuild and
|
||||||
|
;; :figwheel configurations are at the top level of your project.clj
|
||||||
|
;; and are not spread across different lein profiles
|
||||||
|
|
||||||
|
;; otherwise you can pass a configuration into start-figwheel! manually
|
||||||
|
(f/start-figwheel!))
|
||||||
|
|
||||||
|
(defn fig-stop
|
||||||
|
"Stop the figwheel server and watch based auto-compiler."
|
||||||
|
[]
|
||||||
|
(f/stop-figwheel!))
|
||||||
|
|
||||||
|
;; if you are in an nREPL environment you will need to make sure you
|
||||||
|
;; have setup piggieback for this to work
|
||||||
|
(defn cljs-repl
|
||||||
|
"Launch a ClojureScript REPL that is connected to your build and host environment."
|
||||||
|
[]
|
||||||
|
(f/cljs-repl))
|
109
hello-world/project.clj
Normal file
109
hello-world/project.clj
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
(defproject hello-world "0.1.0-SNAPSHOT"
|
||||||
|
:description "FIXME: write this!"
|
||||||
|
:url "http://example.com/FIXME"
|
||||||
|
:license {:name "Eclipse Public License"
|
||||||
|
:url "http://www.eclipse.org/legal/epl-v10.html"}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
:min-lein-version "2.7.1"
|
||||||
|
|
||||||
|
:dependencies [[org.clojure/clojure "1.9.0"]
|
||||||
|
[org.clojure/clojurescript "1.10.238"]
|
||||||
|
[org.clojure/core.async "0.4.474"]
|
||||||
|
[cljsjs/react "15.6.1-1"]
|
||||||
|
[cljsjs/react-dom "15.6.1-1"]
|
||||||
|
[sablono "0.8.3"]
|
||||||
|
[org.omcljs/om "1.0.0-alpha46"]]
|
||||||
|
|
||||||
|
:plugins [[lein-figwheel "0.5.16"]
|
||||||
|
[lein-cljsbuild "1.1.7" :exclusions [[org.clojure/clojure]]]]
|
||||||
|
|
||||||
|
:source-paths ["src"]
|
||||||
|
|
||||||
|
:cljsbuild {:builds
|
||||||
|
[{:id "dev"
|
||||||
|
:source-paths ["src"]
|
||||||
|
|
||||||
|
;; The presence of a :figwheel configuration here
|
||||||
|
;; will cause figwheel to inject the figwheel client
|
||||||
|
;; into your build
|
||||||
|
:figwheel {:on-jsload "hello-world.core/on-js-reload"
|
||||||
|
;; :open-urls will pop open your application
|
||||||
|
;; in the default browser once Figwheel has
|
||||||
|
;; started and compiled your application.
|
||||||
|
;; Comment this out once it no longer serves you.
|
||||||
|
:open-urls ["http://localhost:3449/index.html"]}
|
||||||
|
|
||||||
|
:compiler {:main hello-world.core
|
||||||
|
:asset-path "js/compiled/out"
|
||||||
|
:output-to "resources/public/js/compiled/hello_world.js"
|
||||||
|
:output-dir "resources/public/js/compiled/out"
|
||||||
|
:source-map-timestamp true
|
||||||
|
;; To console.log CLJS data-structures make sure you enable devtools in Chrome
|
||||||
|
;; https://github.com/binaryage/cljs-devtools
|
||||||
|
:preloads [devtools.preload]}}
|
||||||
|
;; This next build is a compressed minified build for
|
||||||
|
;; production. You can build this with:
|
||||||
|
;; lein cljsbuild once min
|
||||||
|
{:id "min"
|
||||||
|
:source-paths ["src"]
|
||||||
|
:compiler {:output-to "resources/public/js/compiled/hello_world.js"
|
||||||
|
:main hello-world.core
|
||||||
|
:optimizations :advanced
|
||||||
|
:pretty-print false}}]}
|
||||||
|
|
||||||
|
:figwheel {;; :http-server-root "public" ;; default and assumes "resources"
|
||||||
|
;; :server-port 3449 ;; default
|
||||||
|
;; :server-ip "127.0.0.1"
|
||||||
|
|
||||||
|
:css-dirs ["resources/public/css"] ;; watch and update CSS
|
||||||
|
|
||||||
|
;; Start an nREPL server into the running figwheel process
|
||||||
|
;; :nrepl-port 7888
|
||||||
|
|
||||||
|
;; Server Ring Handler (optional)
|
||||||
|
;; if you want to embed a ring handler into the figwheel http-kit
|
||||||
|
;; server, this is for simple ring servers, if this
|
||||||
|
|
||||||
|
;; doesn't work for you just run your own server :) (see lein-ring)
|
||||||
|
|
||||||
|
;; :ring-handler hello_world.server/handler
|
||||||
|
|
||||||
|
;; To be able to open files in your editor from the heads up display
|
||||||
|
;; you will need to put a script on your path.
|
||||||
|
;; that script will have to take a file path and a line number
|
||||||
|
;; ie. in ~/bin/myfile-opener
|
||||||
|
;; #! /bin/sh
|
||||||
|
;; emacsclient -n +$2 $1
|
||||||
|
;;
|
||||||
|
;; :open-file-command "myfile-opener"
|
||||||
|
|
||||||
|
;; if you are using emacsclient you can just use
|
||||||
|
;; :open-file-command "emacsclient"
|
||||||
|
|
||||||
|
;; if you want to disable the REPL
|
||||||
|
;; :repl false
|
||||||
|
|
||||||
|
;; to configure a different figwheel logfile path
|
||||||
|
;; :server-logfile "tmp/logs/figwheel-logfile.log"
|
||||||
|
|
||||||
|
;; to pipe all the output to the repl
|
||||||
|
;; :server-logfile false
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
;; Setting up nREPL for Figwheel and ClojureScript dev
|
||||||
|
;; Please see:
|
||||||
|
;; https://github.com/bhauman/lein-figwheel/wiki/Using-the-Figwheel-REPL-within-NRepl
|
||||||
|
:profiles {:dev {:dependencies [[binaryage/devtools "0.9.9"]
|
||||||
|
[figwheel-sidecar "0.5.16"]
|
||||||
|
[cider/piggieback "0.3.1"]]
|
||||||
|
;; need to add dev source path here to get user.clj loaded
|
||||||
|
:source-paths ["src" "dev"]
|
||||||
|
;; for CIDER
|
||||||
|
;; :plugins [[cider/cider-nrepl "0.12.0"]]
|
||||||
|
:repl-options {:nrepl-middleware [cider.piggieback/wrap-cljs-repl]}
|
||||||
|
;; need to add the compliled assets to the :clean-targets
|
||||||
|
:clean-targets ^{:protect false} ["resources/public/js/compiled"
|
||||||
|
:target-path]}})
|
2
hello-world/resources/public/css/style.css
Normal file
2
hello-world/resources/public/css/style.css
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
/* some style */
|
||||||
|
|
16
hello-world/resources/public/index.html
Normal file
16
hello-world/resources/public/index.html
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link href="css/style.css" rel="stylesheet" type="text/css">
|
||||||
|
<link rel="icon" href="https://clojurescript.org/images/cljs-logo-icon-32.png">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="app">
|
||||||
|
<h2>Figwheel template</h2>
|
||||||
|
<p>Checkout your developer console.</p>
|
||||||
|
</div>
|
||||||
|
<script src="js/compiled/hello_world.js" type="text/javascript"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
81
hello-world/src/hello_world/core.cljs
Normal file
81
hello-world/src/hello_world/core.cljs
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
(ns hello-world.core
|
||||||
|
(:require [om.core :as om :include-macros true]
|
||||||
|
[om.dom :as dom :include-macros true]))
|
||||||
|
|
||||||
|
(enable-console-print!)
|
||||||
|
|
||||||
|
(println "This text is printed from src/hello-world/core.cljs. Go ahead and edit it and see reloading in action.")
|
||||||
|
|
||||||
|
;; define your app data so that it doesn't get over-written on reload
|
||||||
|
|
||||||
|
(defonce app-state (atom {:text "Hello world!"}))
|
||||||
|
|
||||||
|
|
||||||
|
(om/root
|
||||||
|
(fn [data owner]
|
||||||
|
(reify om/IRender
|
||||||
|
(render [_]
|
||||||
|
(dom/div nil
|
||||||
|
(dom/h1 nil (:text data))
|
||||||
|
(dom/h3 nil "Edit this and wtc it change!")))))
|
||||||
|
app-state
|
||||||
|
{:target (. js/document (getElementById "app"))})
|
||||||
|
|
||||||
|
(defn on-js-reload []
|
||||||
|
;; optionally touch your app-state to force rerendering depending on
|
||||||
|
;; your application
|
||||||
|
;; (swap! app-state update-in [:__figwheel_counter] inc)
|
||||||
|
)
|
||||||
|
|
||||||
|
(.getElementById js/document "app")
|
||||||
|
|
||||||
|
|
||||||
|
(defn average [a b]
|
||||||
|
(/ (+ a b) 2.0)) ;; blah
|
||||||
|
|
||||||
|
(average 3 8)
|
||||||
|
|
||||||
|
|
||||||
|
(loop [[n & numbers] '(1 2 3 4 5)
|
||||||
|
result '()]
|
||||||
|
(let [result (cons (* n n) result)]
|
||||||
|
(if numbers
|
||||||
|
(recur numbers result)
|
||||||
|
result)))
|
||||||
|
|
||||||
|
(loop [x 10]
|
||||||
|
(let [result x]
|
||||||
|
(when (> x 1)
|
||||||
|
(println x)
|
||||||
|
(recur (- x 2)))
|
||||||
|
))
|
||||||
|
|
||||||
|
(defn head [[n & _]]
|
||||||
|
(println (+ n 1))
|
||||||
|
n)
|
||||||
|
|
||||||
|
(head '(3 2 1))
|
||||||
|
|
||||||
|
(even? 4)
|
||||||
|
|
||||||
|
(declare ^{:dynamic true} *foo*)
|
||||||
|
|
||||||
|
(def l '(1 2 3))
|
||||||
|
|
||||||
|
(defn with-foo [f]
|
||||||
|
(binding [*foo* "I exist!"]
|
||||||
|
(f)))
|
||||||
|
|
||||||
|
; ; (with-foo #(println *foo*)) =>"I exist!"
|
||||||
|
|
||||||
|
|
||||||
|
(str "Hello" " " "World")
|
||||||
|
|
||||||
|
;; functions
|
||||||
|
|
||||||
|
((fn add-five [x] (+ x 5)) 6)
|
||||||
|
((fn [x] (+ x 5)) 3)
|
||||||
|
(#(+ % 5) 3)
|
||||||
|
((partial + 5) 3)
|
||||||
|
|
||||||
|
; (add-five 3)
|
Loading…
Reference in New Issue
Block a user