lein new chestnut mw3
This commit is contained in:
commit
9fe52661f7
15
.gitignore
vendored
Normal file
15
.gitignore
vendored
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
*.class
|
||||||
|
*.jar
|
||||||
|
/.lein-*
|
||||||
|
/.nrepl-port
|
||||||
|
/.repl
|
||||||
|
/checkouts/
|
||||||
|
/classes/
|
||||||
|
/lib/
|
||||||
|
/log/
|
||||||
|
/out/
|
||||||
|
/resources/public/js/compiled/**
|
||||||
|
/target/
|
||||||
|
figwheel_server.log
|
||||||
|
pom.xml
|
||||||
|
pom.xml.asc
|
214
LICENSE
Normal file
214
LICENSE
Normal file
|
@ -0,0 +1,214 @@
|
||||||
|
THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC
|
||||||
|
LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
|
||||||
|
CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
|
||||||
|
|
||||||
|
1. DEFINITIONS
|
||||||
|
|
||||||
|
"Contribution" means:
|
||||||
|
|
||||||
|
a) in the case of the initial Contributor, the initial code and
|
||||||
|
documentation distributed under this Agreement, and
|
||||||
|
|
||||||
|
b) in the case of each subsequent Contributor:
|
||||||
|
|
||||||
|
i) changes to the Program, and
|
||||||
|
|
||||||
|
ii) additions to the Program;
|
||||||
|
|
||||||
|
where such changes and/or additions to the Program originate from and are
|
||||||
|
distributed by that particular Contributor. A Contribution 'originates' from
|
||||||
|
a Contributor if it was added to the Program by such Contributor itself or
|
||||||
|
anyone acting on such Contributor's behalf. Contributions do not include
|
||||||
|
additions to the Program which: (i) are separate modules of software
|
||||||
|
distributed in conjunction with the Program under their own license
|
||||||
|
agreement, and (ii) are not derivative works of the Program.
|
||||||
|
|
||||||
|
"Contributor" means any person or entity that distributes the Program.
|
||||||
|
|
||||||
|
"Licensed Patents" mean patent claims licensable by a Contributor which are
|
||||||
|
necessarily infringed by the use or sale of its Contribution alone or when
|
||||||
|
combined with the Program.
|
||||||
|
|
||||||
|
"Program" means the Contributions distributed in accordance with this
|
||||||
|
Agreement.
|
||||||
|
|
||||||
|
"Recipient" means anyone who receives the Program under this Agreement,
|
||||||
|
including all Contributors.
|
||||||
|
|
||||||
|
2. GRANT OF RIGHTS
|
||||||
|
|
||||||
|
a) Subject to the terms of this Agreement, each Contributor hereby grants
|
||||||
|
Recipient a non-exclusive, worldwide, royalty-free copyright license to
|
||||||
|
reproduce, prepare derivative works of, publicly display, publicly perform,
|
||||||
|
distribute and sublicense the Contribution of such Contributor, if any, and
|
||||||
|
such derivative works, in source code and object code form.
|
||||||
|
|
||||||
|
b) Subject to the terms of this Agreement, each Contributor hereby grants
|
||||||
|
Recipient a non-exclusive, worldwide, royalty-free patent license under
|
||||||
|
Licensed Patents to make, use, sell, offer to sell, import and otherwise
|
||||||
|
transfer the Contribution of such Contributor, if any, in source code and
|
||||||
|
object code form. This patent license shall apply to the combination of the
|
||||||
|
Contribution and the Program if, at the time the Contribution is added by the
|
||||||
|
Contributor, such addition of the Contribution causes such combination to be
|
||||||
|
covered by the Licensed Patents. The patent license shall not apply to any
|
||||||
|
other combinations which include the Contribution. No hardware per se is
|
||||||
|
licensed hereunder.
|
||||||
|
|
||||||
|
c) Recipient understands that although each Contributor grants the licenses
|
||||||
|
to its Contributions set forth herein, no assurances are provided by any
|
||||||
|
Contributor that the Program does not infringe the patent or other
|
||||||
|
intellectual property rights of any other entity. Each Contributor disclaims
|
||||||
|
any liability to Recipient for claims brought by any other entity based on
|
||||||
|
infringement of intellectual property rights or otherwise. As a condition to
|
||||||
|
exercising the rights and licenses granted hereunder, each Recipient hereby
|
||||||
|
assumes sole responsibility to secure any other intellectual property rights
|
||||||
|
needed, if any. For example, if a third party patent license is required to
|
||||||
|
allow Recipient to distribute the Program, it is Recipient's responsibility
|
||||||
|
to acquire that license before distributing the Program.
|
||||||
|
|
||||||
|
d) Each Contributor represents that to its knowledge it has sufficient
|
||||||
|
copyright rights in its Contribution, if any, to grant the copyright license
|
||||||
|
set forth in this Agreement.
|
||||||
|
|
||||||
|
3. REQUIREMENTS
|
||||||
|
|
||||||
|
A Contributor may choose to distribute the Program in object code form under
|
||||||
|
its own license agreement, provided that:
|
||||||
|
|
||||||
|
a) it complies with the terms and conditions of this Agreement; and
|
||||||
|
|
||||||
|
b) its license agreement:
|
||||||
|
|
||||||
|
i) effectively disclaims on behalf of all Contributors all warranties and
|
||||||
|
conditions, express and implied, including warranties or conditions of title
|
||||||
|
and non-infringement, and implied warranties or conditions of merchantability
|
||||||
|
and fitness for a particular purpose;
|
||||||
|
|
||||||
|
ii) effectively excludes on behalf of all Contributors all liability for
|
||||||
|
damages, including direct, indirect, special, incidental and consequential
|
||||||
|
damages, such as lost profits;
|
||||||
|
|
||||||
|
iii) states that any provisions which differ from this Agreement are offered
|
||||||
|
by that Contributor alone and not by any other party; and
|
||||||
|
|
||||||
|
iv) states that source code for the Program is available from such
|
||||||
|
Contributor, and informs licensees how to obtain it in a reasonable manner on
|
||||||
|
or through a medium customarily used for software exchange.
|
||||||
|
|
||||||
|
When the Program is made available in source code form:
|
||||||
|
|
||||||
|
a) it must be made available under this Agreement; and
|
||||||
|
|
||||||
|
b) a copy of this Agreement must be included with each copy of the Program.
|
||||||
|
|
||||||
|
Contributors may not remove or alter any copyright notices contained within
|
||||||
|
the Program.
|
||||||
|
|
||||||
|
Each Contributor must identify itself as the originator of its Contribution,
|
||||||
|
if any, in a manner that reasonably allows subsequent Recipients to identify
|
||||||
|
the originator of the Contribution.
|
||||||
|
|
||||||
|
4. COMMERCIAL DISTRIBUTION
|
||||||
|
|
||||||
|
Commercial distributors of software may accept certain responsibilities with
|
||||||
|
respect to end users, business partners and the like. While this license is
|
||||||
|
intended to facilitate the commercial use of the Program, the Contributor who
|
||||||
|
includes the Program in a commercial product offering should do so in a
|
||||||
|
manner which does not create potential liability for other Contributors.
|
||||||
|
Therefore, if a Contributor includes the Program in a commercial product
|
||||||
|
offering, such Contributor ("Commercial Contributor") hereby agrees to defend
|
||||||
|
and indemnify every other Contributor ("Indemnified Contributor") against any
|
||||||
|
losses, damages and costs (collectively "Losses") arising from claims,
|
||||||
|
lawsuits and other legal actions brought by a third party against the
|
||||||
|
Indemnified Contributor to the extent caused by the acts or omissions of such
|
||||||
|
Commercial Contributor in connection with its distribution of the Program in
|
||||||
|
a commercial product offering. The obligations in this section do not apply
|
||||||
|
to any claims or Losses relating to any actual or alleged intellectual
|
||||||
|
property infringement. In order to qualify, an Indemnified Contributor must:
|
||||||
|
a) promptly notify the Commercial Contributor in writing of such claim, and
|
||||||
|
b) allow the Commercial Contributor tocontrol, and cooperate with the
|
||||||
|
Commercial Contributor in, the defense and any related settlement
|
||||||
|
negotiations. The Indemnified Contributor may participate in any such claim
|
||||||
|
at its own expense.
|
||||||
|
|
||||||
|
For example, a Contributor might include the Program in a commercial product
|
||||||
|
offering, Product X. That Contributor is then a Commercial Contributor. If
|
||||||
|
that Commercial Contributor then makes performance claims, or offers
|
||||||
|
warranties related to Product X, those performance claims and warranties are
|
||||||
|
such Commercial Contributor's responsibility alone. Under this section, the
|
||||||
|
Commercial Contributor would have to defend claims against the other
|
||||||
|
Contributors related to those performance claims and warranties, and if a
|
||||||
|
court requires any other Contributor to pay any damages as a result, the
|
||||||
|
Commercial Contributor must pay those damages.
|
||||||
|
|
||||||
|
5. NO WARRANTY
|
||||||
|
|
||||||
|
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON
|
||||||
|
AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER
|
||||||
|
EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR
|
||||||
|
CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the
|
||||||
|
appropriateness of using and distributing the Program and assumes all risks
|
||||||
|
associated with its exercise of rights under this Agreement , including but
|
||||||
|
not limited to the risks and costs of program errors, compliance with
|
||||||
|
applicable laws, damage to or loss of data, programs or equipment, and
|
||||||
|
unavailability or interruption of operations.
|
||||||
|
|
||||||
|
6. DISCLAIMER OF LIABILITY
|
||||||
|
|
||||||
|
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
|
||||||
|
CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION
|
||||||
|
LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
|
||||||
|
EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
OF SUCH DAMAGES.
|
||||||
|
|
||||||
|
7. GENERAL
|
||||||
|
|
||||||
|
If any provision of this Agreement is invalid or unenforceable under
|
||||||
|
applicable law, it shall not affect the validity or enforceability of the
|
||||||
|
remainder of the terms of this Agreement, and without further action by the
|
||||||
|
parties hereto, such provision shall be reformed to the minimum extent
|
||||||
|
necessary to make such provision valid and enforceable.
|
||||||
|
|
||||||
|
If Recipient institutes patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Program itself
|
||||||
|
(excluding combinations of the Program with other software or hardware)
|
||||||
|
infringes such Recipient's patent(s), then such Recipient's rights granted
|
||||||
|
under Section 2(b) shall terminate as of the date such litigation is filed.
|
||||||
|
|
||||||
|
All Recipient's rights under this Agreement shall terminate if it fails to
|
||||||
|
comply with any of the material terms or conditions of this Agreement and
|
||||||
|
does not cure such failure in a reasonable period of time after becoming
|
||||||
|
aware of such noncompliance. If all Recipient's rights under this Agreement
|
||||||
|
terminate, Recipient agrees to cease use and distribution of the Program as
|
||||||
|
soon as reasonably practicable. However, Recipient's obligations under this
|
||||||
|
Agreement and any licenses granted by Recipient relating to the Program shall
|
||||||
|
continue and survive.
|
||||||
|
|
||||||
|
Everyone is permitted to copy and distribute copies of this Agreement, but in
|
||||||
|
order to avoid inconsistency the Agreement is copyrighted and may only be
|
||||||
|
modified in the following manner. The Agreement Steward reserves the right to
|
||||||
|
publish new versions (including revisions) of this Agreement from time to
|
||||||
|
time. No one other than the Agreement Steward has the right to modify this
|
||||||
|
Agreement. The Eclipse Foundation is the initial Agreement Steward. The
|
||||||
|
Eclipse Foundation may assign the responsibility to serve as the Agreement
|
||||||
|
Steward to a suitable separate entity. Each new version of the Agreement will
|
||||||
|
be given a distinguishing version number. The Program (including
|
||||||
|
Contributions) may always be distributed subject to the version of the
|
||||||
|
Agreement under which it was received. In addition, after a new version of
|
||||||
|
the Agreement is published, Contributor may elect to distribute the Program
|
||||||
|
(including its Contributions) under the new version. Except as expressly
|
||||||
|
stated in Sections 2(a) and 2(b) above, Recipient receives no rights or
|
||||||
|
licenses to the intellectual property of any Contributor under this
|
||||||
|
Agreement, whether expressly, by implication, estoppel or otherwise. All
|
||||||
|
rights in the Program not expressly granted under this Agreement are
|
||||||
|
reserved.
|
||||||
|
|
||||||
|
This Agreement is governed by the laws of the State of New York and the
|
||||||
|
intellectual property laws of the United States of America. No party to this
|
||||||
|
Agreement will bring a legal action under this Agreement more than one year
|
||||||
|
after the cause of action arose. Each party waives its rights to a jury trial
|
||||||
|
in any resulting litigation.
|
1
Procfile
Normal file
1
Procfile
Normal file
|
@ -0,0 +1 @@
|
||||||
|
web: java $JVM_OPTS -cp target/mw3.jar clojure.main -m mw3.server
|
120
README.md
Normal file
120
README.md
Normal file
|
@ -0,0 +1,120 @@
|
||||||
|
# mw3
|
||||||
|
|
||||||
|
|
||||||
|
## Development
|
||||||
|
|
||||||
|
Open a terminal and type `lein repl` to start a Clojure REPL
|
||||||
|
(interactive prompt).
|
||||||
|
|
||||||
|
In the REPL, type
|
||||||
|
|
||||||
|
```clojure
|
||||||
|
(run)
|
||||||
|
(browser-repl)
|
||||||
|
```
|
||||||
|
|
||||||
|
The call to `(run)` starts the Figwheel server at port 3449, which takes care of
|
||||||
|
live reloading ClojureScript code and CSS. Figwheel's server will also act as
|
||||||
|
your app server, so requests are correctly forwarded to the http-handler you
|
||||||
|
define.
|
||||||
|
|
||||||
|
Running `(browser-repl)` starts the Weasel REPL server, and drops you into a
|
||||||
|
ClojureScript REPL. Evaluating expressions here will only work once you've
|
||||||
|
loaded the page, so the browser can connect to Weasel.
|
||||||
|
|
||||||
|
When you see the line `Successfully compiled "resources/public/app.js" in 21.36
|
||||||
|
seconds.`, you're ready to go. Browse to `http://localhost:3449` and enjoy.
|
||||||
|
|
||||||
|
**Attention: It is not needed to run `lein figwheel` separately. Instead we
|
||||||
|
launch Figwheel directly from the REPL**
|
||||||
|
|
||||||
|
## Trying it out
|
||||||
|
|
||||||
|
If all is well you now have a browser window saying 'Hello Chestnut',
|
||||||
|
and a REPL prompt that looks like `cljs.user=>`.
|
||||||
|
|
||||||
|
Open `resources/public/css/style.css` and change some styling of the
|
||||||
|
H1 element. Notice how it's updated instantly in the browser.
|
||||||
|
|
||||||
|
Open `src/cljs/mw3/core.cljs`, and change `dom/h1` to
|
||||||
|
`dom/h2`. As soon as you save the file, your browser is updated.
|
||||||
|
|
||||||
|
In the REPL, type
|
||||||
|
|
||||||
|
```
|
||||||
|
(ns mw3.core)
|
||||||
|
(swap! app-state assoc :text "Interactivity FTW")
|
||||||
|
```
|
||||||
|
|
||||||
|
Notice again how the browser updates.
|
||||||
|
|
||||||
|
### Lighttable
|
||||||
|
|
||||||
|
Lighttable provides a tighter integration for live coding with an inline
|
||||||
|
browser-tab. Rather than evaluating cljs on the command line with weasel repl,
|
||||||
|
evaluate code and preview pages inside Lighttable.
|
||||||
|
|
||||||
|
Steps: After running `(run)`, open a browser tab in Lighttable. Open a cljs file
|
||||||
|
from within a project, go to the end of an s-expression and hit Cmd-ENT.
|
||||||
|
Lighttable will ask you which client to connect. Click 'Connect a client' and
|
||||||
|
select 'Browser'. Browse to [http://localhost:3449](http://localhost:3449)
|
||||||
|
|
||||||
|
View LT's console to see a Chrome js console.
|
||||||
|
|
||||||
|
Hereafter, you can save a file and see changes or evaluate cljs code (without saving a file). Note that running a weasel server is not required to evaluate code in Lighttable.
|
||||||
|
|
||||||
|
### Emacs/Cider
|
||||||
|
|
||||||
|
Start a repl in the context of your project with `M-x cider-jack-in`.
|
||||||
|
|
||||||
|
Switch to repl-buffer with `C-c C-z` and start web and figwheel servers with
|
||||||
|
`(run)`, and weasel server with `(browser-repl`). Load
|
||||||
|
[http://localhost:3449](http://localhost:3449) on an external browser, which
|
||||||
|
connects to weasel, and start evaluating cljs inside Cider.
|
||||||
|
|
||||||
|
To run the Clojurescript tests, do
|
||||||
|
|
||||||
|
```
|
||||||
|
lein doo phantom
|
||||||
|
```
|
||||||
|
|
||||||
|
## Deploying to Heroku
|
||||||
|
|
||||||
|
This assumes you have a
|
||||||
|
[Heroku account](https://signup.heroku.com/dc), have installed the
|
||||||
|
[Heroku toolbelt](https://toolbelt.heroku.com/), and have done a
|
||||||
|
`heroku login` before.
|
||||||
|
|
||||||
|
``` sh
|
||||||
|
git init
|
||||||
|
git add -A
|
||||||
|
git commit
|
||||||
|
heroku create
|
||||||
|
git push heroku master:master
|
||||||
|
heroku open
|
||||||
|
```
|
||||||
|
|
||||||
|
## Running with Foreman
|
||||||
|
|
||||||
|
Heroku uses [Foreman](http://ddollar.github.io/foreman/) to run your
|
||||||
|
app, which uses the `Procfile` in your repository to figure out which
|
||||||
|
server command to run. Heroku also compiles and runs your code with a
|
||||||
|
Leiningen "production" profile, instead of "dev". To locally simulate
|
||||||
|
what Heroku does you can do:
|
||||||
|
|
||||||
|
``` sh
|
||||||
|
lein with-profile -dev,+production uberjar && foreman start
|
||||||
|
```
|
||||||
|
|
||||||
|
Now your app is running at
|
||||||
|
[http://localhost:5000](http://localhost:5000) in production mode.
|
||||||
|
## License
|
||||||
|
|
||||||
|
Copyright © 2016 FIXME
|
||||||
|
|
||||||
|
Distributed under the Eclipse Public License either version 1.0 or (at
|
||||||
|
your option) any later version.
|
||||||
|
|
||||||
|
## Chestnut
|
||||||
|
|
||||||
|
Created with [Chestnut](http://plexus.github.io/chestnut/) 0.9.1 (3a675806).
|
32
code_of_conduct.md
Normal file
32
code_of_conduct.md
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
# Contributor Code of Conduct
|
||||||
|
|
||||||
|
As contributors and maintainers of this project, we pledge to respect
|
||||||
|
all people who contribute through reporting issues, posting feature
|
||||||
|
requests, updating documentation, submitting pull requests or patches,
|
||||||
|
and other activities.
|
||||||
|
|
||||||
|
We are committed to making participation in this project a
|
||||||
|
harassment-free experience for everyone, regardless of level of
|
||||||
|
experience, gender, gender identity and expression, sexual
|
||||||
|
orientation, disability, personal appearance, body size, race, age, or
|
||||||
|
religion.
|
||||||
|
|
||||||
|
Examples of unacceptable behavior by participants include the use of
|
||||||
|
sexual language or imagery, derogatory comments or personal attacks,
|
||||||
|
trolling, public or private harassment, insults, or other
|
||||||
|
unprofessional conduct.
|
||||||
|
|
||||||
|
Project maintainers have the right and responsibility to remove, edit,
|
||||||
|
or reject comments, commits, code, wiki edits, issues, and other
|
||||||
|
contributions that are not aligned to this Code of Conduct. Project
|
||||||
|
maintainers who do not follow the Code of Conduct may be removed from
|
||||||
|
the project team.
|
||||||
|
|
||||||
|
Instances of abusive, harassing, or otherwise unacceptable behavior
|
||||||
|
may be reported by opening an issue or contacting one or more of the
|
||||||
|
project maintainers.
|
||||||
|
|
||||||
|
This Code of Conduct is adapted from the
|
||||||
|
[Contributor Covenant](http:contributor-covenant.org), version 1.0.0,
|
||||||
|
available at
|
||||||
|
[http://contributor-covenant.org/version/1/0/0/](http://contributor-covenant.org/version/1/0/0/)
|
17
dev/user.clj
Normal file
17
dev/user.clj
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
(ns user
|
||||||
|
(:require [mw3.server]
|
||||||
|
[ring.middleware.reload :refer [wrap-reload]]
|
||||||
|
[figwheel-sidecar.repl-api :as figwheel]))
|
||||||
|
|
||||||
|
;; Let Clojure warn you when it needs to reflect on types, or when it does math
|
||||||
|
;; on unboxed numbers. In both cases you should add type annotations to prevent
|
||||||
|
;; degraded performance.
|
||||||
|
(set! *warn-on-reflection* true)
|
||||||
|
(set! *unchecked-math* :warn-on-boxed)
|
||||||
|
(def http-handler
|
||||||
|
(wrap-reload #'mw3.server/http-handler))
|
||||||
|
|
||||||
|
(defn run []
|
||||||
|
(figwheel/start-figwheel!))
|
||||||
|
|
||||||
|
(def browser-repl figwheel/cljs-repl)
|
115
project.clj
Normal file
115
project.clj
Normal file
|
@ -0,0 +1,115 @@
|
||||||
|
(defproject mw3 "0.1.0-SNAPSHOT"
|
||||||
|
:description "FIXME: write description"
|
||||||
|
:url "http://example.com/FIXME"
|
||||||
|
:license {:name "Eclipse Public License"
|
||||||
|
:url "http://www.eclipse.org/legal/epl-v10.html"}
|
||||||
|
|
||||||
|
:dependencies [[org.clojure/clojure "1.8.0-RC5"]
|
||||||
|
[org.clojure/clojurescript "1.7.228" :scope "provided"]
|
||||||
|
[ring "1.4.0"]
|
||||||
|
[ring/ring-defaults "0.1.5"]
|
||||||
|
[bk/ring-gzip "0.1.1"]
|
||||||
|
[ring.middleware.logger "0.5.0"]
|
||||||
|
[compojure "1.4.0"]
|
||||||
|
[org.omcljs/om "1.0.0-alpha28"]
|
||||||
|
[environ "1.0.2"]]
|
||||||
|
|
||||||
|
:plugins [[lein-cljsbuild "1.1.1"]
|
||||||
|
[lein-environ "1.0.1"]]
|
||||||
|
|
||||||
|
:min-lein-version "2.5.3"
|
||||||
|
|
||||||
|
:source-paths ["src/clj" "src/cljs" "dev"]
|
||||||
|
|
||||||
|
:test-paths ["test/clj"]
|
||||||
|
|
||||||
|
:clean-targets ^{:protect false} [:target-path :compile-path "resources/public/js"]
|
||||||
|
|
||||||
|
:uberjar-name "mw3.jar"
|
||||||
|
|
||||||
|
;; Use `lein run` if you just want to start a HTTP server, without figwheel
|
||||||
|
:main mw3.server
|
||||||
|
|
||||||
|
;; nREPL by default starts in the :main namespace, we want to start in `user`
|
||||||
|
;; because that's where our development helper functions like (run) and
|
||||||
|
;; (browser-repl) live.
|
||||||
|
:repl-options {:init-ns user}
|
||||||
|
|
||||||
|
:cljsbuild {:builds
|
||||||
|
{:app
|
||||||
|
{:source-paths ["src/cljs"]
|
||||||
|
|
||||||
|
:figwheel true
|
||||||
|
;; Alternatively, you can configure a function to run every time figwheel reloads.
|
||||||
|
;; :figwheel {:on-jsload "mw3.core/on-figwheel-reload"}
|
||||||
|
|
||||||
|
:compiler {:main mw3.core
|
||||||
|
:asset-path "js/compiled/out"
|
||||||
|
:output-to "resources/public/js/compiled/mw3.js"
|
||||||
|
:output-dir "resources/public/js/compiled/out"
|
||||||
|
:source-map-timestamp true}}}}
|
||||||
|
|
||||||
|
;; When running figwheel from nREPL, figwheel will read this configuration
|
||||||
|
;; stanza, but it will read it without passing through leiningen's profile
|
||||||
|
;; merging. So don't put a :figwheel section under the :dev profile, it will
|
||||||
|
;; not be picked up, instead configure figwheel here on the top level.
|
||||||
|
|
||||||
|
:figwheel {;; :http-server-root "public" ;; serve static assets from resources/public/
|
||||||
|
;; :server-port 3449 ;; default
|
||||||
|
;; :server-ip "127.0.0.1" ;; default
|
||||||
|
:css-dirs ["resources/public/css"] ;; watch and update CSS
|
||||||
|
|
||||||
|
;; Instead of booting a separate server on its own port, we embed
|
||||||
|
;; the server ring handler inside figwheel's http-kit server, so
|
||||||
|
;; assets and API endpoints can all be accessed on the same host
|
||||||
|
;; and port. If you prefer a separate server process then take this
|
||||||
|
;; out and start the server with `lein run`.
|
||||||
|
:ring-handler user/http-handler
|
||||||
|
|
||||||
|
;; Start an nREPL server into the running figwheel process. We
|
||||||
|
;; don't do this, instead we do the opposite, running figwheel from
|
||||||
|
;; an nREPL process, see
|
||||||
|
;; https://github.com/bhauman/lein-figwheel/wiki/Using-the-Figwheel-REPL-within-NRepl
|
||||||
|
;; :nrepl-port 7888
|
||||||
|
|
||||||
|
;; 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"
|
||||||
|
|
||||||
|
:server-logfile "log/figwheel.log"}
|
||||||
|
|
||||||
|
:doo {:build "test"}
|
||||||
|
|
||||||
|
:profiles {:dev
|
||||||
|
{:dependencies [[figwheel "0.5.0-6"]
|
||||||
|
[figwheel-sidecar "0.5.0-6"]
|
||||||
|
[com.cemerick/piggieback "0.2.1"]
|
||||||
|
[org.clojure/tools.nrepl "0.2.12"]]
|
||||||
|
|
||||||
|
:plugins [[lein-figwheel "0.5.0-6"]
|
||||||
|
[lein-doo "0.1.6"]]
|
||||||
|
|
||||||
|
:cljsbuild {:builds
|
||||||
|
{:test
|
||||||
|
{:source-paths ["src/cljs" "test/cljs"]
|
||||||
|
:compiler
|
||||||
|
{:output-to "resources/public/js/compiled/testable.js"
|
||||||
|
:main mw3.test-runner
|
||||||
|
:optimizations :none}}}}}
|
||||||
|
|
||||||
|
:uberjar
|
||||||
|
{:source-paths ^:replace ["src/clj"]
|
||||||
|
:hooks [leiningen.cljsbuild]
|
||||||
|
:omit-source true
|
||||||
|
:aot :all
|
||||||
|
:cljsbuild {:builds
|
||||||
|
{:app
|
||||||
|
{:source-paths ^:replace ["src/cljs"]
|
||||||
|
:compiler
|
||||||
|
{:optimizations :advanced
|
||||||
|
:pretty-print false}}}}}})
|
10
resources/log4j.properties
Normal file
10
resources/log4j.properties
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
log4j.rootLogger=DEBUG, R
|
||||||
|
|
||||||
|
log4j.appender.R=org.apache.log4j.RollingFileAppender
|
||||||
|
log4j.appender.R.File=log/server.log
|
||||||
|
|
||||||
|
log4j.appender.R.MaxFileSize=4096KB
|
||||||
|
log4j.appender.R.MaxBackupIndex=9
|
||||||
|
|
||||||
|
log4j.appender.R.layout=org.apache.log4j.PatternLayout
|
||||||
|
log4j.appender.R.layout.ConversionPattern=[%d][%p][%c] %m%n
|
3
resources/public/css/style.css
Normal file
3
resources/public/css/style.css
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
h1 {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
12
resources/public/index.html
Normal file
12
resources/public/index.html
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<!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">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="app"></div>
|
||||||
|
<script src="js/compiled/mw3.js" type="text/javascript"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
27
src/clj/mw3/server.clj
Normal file
27
src/clj/mw3/server.clj
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
(ns mw3.server
|
||||||
|
(:require [clojure.java.io :as io]
|
||||||
|
[compojure.core :refer [ANY GET PUT POST DELETE defroutes]]
|
||||||
|
[compojure.route :refer [resources]]
|
||||||
|
[ring.middleware.defaults :refer [wrap-defaults api-defaults]]
|
||||||
|
[ring.middleware.gzip :refer [wrap-gzip]]
|
||||||
|
[ring.middleware.logger :refer [wrap-with-logger]]
|
||||||
|
[environ.core :refer [env]]
|
||||||
|
[ring.adapter.jetty :refer [run-jetty]])
|
||||||
|
(:gen-class))
|
||||||
|
|
||||||
|
(defroutes routes
|
||||||
|
(GET "/" _
|
||||||
|
{:status 200
|
||||||
|
:headers {"Content-Type" "text/html; charset=utf-8"}
|
||||||
|
:body (io/input-stream (io/resource "public/index.html"))})
|
||||||
|
(resources "/"))
|
||||||
|
|
||||||
|
(def http-handler
|
||||||
|
(-> routes
|
||||||
|
(wrap-defaults api-defaults)
|
||||||
|
wrap-with-logger
|
||||||
|
wrap-gzip))
|
||||||
|
|
||||||
|
(defn -main [& [port]]
|
||||||
|
(let [port (Integer. (or port (env :port) 10555))]
|
||||||
|
(run-jetty http-handler {:port port :join? false})))
|
18
src/cljs/mw3/core.cljs
Normal file
18
src/cljs/mw3/core.cljs
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
(ns mw3.core
|
||||||
|
(:require [om.core :as om :include-macros true]
|
||||||
|
[om.dom :as dom :include-macros true]))
|
||||||
|
|
||||||
|
(enable-console-print!)
|
||||||
|
|
||||||
|
(defonce app-state (atom {:text "Hello Chestnut!"}))
|
||||||
|
|
||||||
|
(defn root-component [app owner]
|
||||||
|
(reify
|
||||||
|
om/IRender
|
||||||
|
(render [_]
|
||||||
|
(dom/div nil (dom/h1 nil (:text app))))))
|
||||||
|
|
||||||
|
(om/root
|
||||||
|
root-component
|
||||||
|
app-state
|
||||||
|
{:target (. js/document (getElementById "app"))})
|
1
system.properties
Normal file
1
system.properties
Normal file
|
@ -0,0 +1 @@
|
||||||
|
java.runtime.version=1.8
|
5
test/clj/mw3/example_test.clj
Normal file
5
test/clj/mw3/example_test.clj
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
(ns mw3.example-test
|
||||||
|
(:require [clojure.test :refer :all]))
|
||||||
|
|
||||||
|
(deftest example-passing-test
|
||||||
|
(is (= 1 1)))
|
6
test/cljs/mw3/core_test.cljs
Normal file
6
test/cljs/mw3/core_test.cljs
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
(ns mw3.core-test
|
||||||
|
(:require-macros [cljs.test :refer (is deftest testing)])
|
||||||
|
(:require [cljs.test]))
|
||||||
|
|
||||||
|
(deftest example-passing-test
|
||||||
|
(is (= 1 1)))
|
8
test/cljs/mw3/test_runner.cljs
Normal file
8
test/cljs/mw3/test_runner.cljs
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
(ns mw3.test-runner
|
||||||
|
(:require
|
||||||
|
[doo.runner :refer-macros [doo-tests]]
|
||||||
|
[mw3.core-test]))
|
||||||
|
|
||||||
|
(enable-console-print!)
|
||||||
|
|
||||||
|
(doo-tests 'mw3.core-test)
|
Loading…
Reference in a new issue