Updated to use CLJC-ified versions of engine and parser.
This commit is contained in:
parent
4861ee809b
commit
b2cd66df7f
27
project.clj
27
project.clj
|
@ -8,18 +8,21 @@
|
||||||
"build-signature-timestamp" "unset"
|
"build-signature-timestamp" "unset"
|
||||||
"Implementation-Version" "unset"
|
"Implementation-Version" "unset"
|
||||||
}
|
}
|
||||||
:dependencies [[org.clojure/clojure "1.6.0"]
|
:dependencies [[org.clojure/clojure "1.8.0"]
|
||||||
[mw-engine "0.1.5-SNAPSHOT"]
|
[mw-engine "3.0.0-SNAPSHOT"]
|
||||||
[mw-parser "0.1.5-SNAPSHOT"]
|
[mw-parser "3.0.0-SNAPSHOT"]
|
||||||
[lib-noir "0.8.4"]
|
[lib-noir "0.9.9"]
|
||||||
[ring-server "0.3.1"]
|
[ring-server "0.4.0"]
|
||||||
[selmer "0.6.8"]
|
[selmer "1.0.9"]
|
||||||
[com.taoensso/timbre "3.2.1"]
|
[com.taoensso/timbre "3.2.1"]
|
||||||
[com.taoensso/tower "2.0.2"]
|
[com.taoensso/tower "3.0.2"]
|
||||||
[markdown-clj "0.9.44"]
|
[markdown-clj "0.9.89"]
|
||||||
[environ "0.5.0"]
|
[environ "1.1.0"]
|
||||||
[noir-exception "0.2.2"]]
|
[noir-exception "0.2.5"]]
|
||||||
|
|
||||||
|
:source-paths ["src/clj" "src/cljc"]
|
||||||
|
:license {:name "GNU General Public License v2"
|
||||||
|
:url "http://www.gnu.org/licenses/gpl-2.0.html"}
|
||||||
:repl-options {:init-ns mw-ui.repl}
|
:repl-options {:init-ns mw-ui.repl}
|
||||||
:plugins [[lein-ring "0.8.11"]
|
:plugins [[lein-ring "0.8.11"]
|
||||||
[lein-environ "0.5.0"]
|
[lein-environ "0.5.0"]
|
||||||
|
@ -37,8 +40,8 @@
|
||||||
:stacktraces? false
|
:stacktraces? false
|
||||||
:auto-reload? false}}
|
:auto-reload? false}}
|
||||||
:dev {:dependencies [[ring-mock "0.1.5"]
|
:dev {:dependencies [[ring-mock "0.1.5"]
|
||||||
[ring/ring-devel "1.3.0"]
|
[ring/ring-devel "1.5.0"]
|
||||||
[pjstadig/humane-test-output "0.6.0"]]
|
[pjstadig/humane-test-output "0.8.1"]]
|
||||||
:injections [(require 'pjstadig.humane-test-output)
|
:injections [(require 'pjstadig.humane-test-output)
|
||||||
(pjstadig.humane-test-output/activate!)]
|
(pjstadig.humane-test-output/activate!)]
|
||||||
:env {:dev true}}}
|
:env {:dev true}}}
|
||||||
|
|
|
@ -6,7 +6,7 @@ body {
|
||||||
/* Overall container div, holds all content of page. Yes, I know it shouldn't have fixed width */
|
/* Overall container div, holds all content of page. Yes, I know it shouldn't have fixed width */
|
||||||
#main-container{
|
#main-container{
|
||||||
clear: both;
|
clear: both;
|
||||||
/* width:100%; */
|
width:100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* footer of the document */
|
/* footer of the document */
|
||||||
|
@ -145,4 +145,3 @@ th, td {
|
||||||
text-align: left;
|
text-align: left;
|
||||||
padding: 0 0.25em;
|
padding: 0 0.25em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,11 +3,7 @@
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||||
<title>{{title}}</title>
|
<title>{{title}}</title>
|
||||||
<link href="{{servlet-context}}/css/phone.css" media="only screen and (max-device-width: 480px)" rel="stylesheet" type="text/css" />
|
|
||||||
<link href="{{servlet-context}}/css/tablet.css" media="only screen and (min-device-width: 481px) and (max-device-width: 1024px)" rel="stylesheet" type="text/css" />
|
|
||||||
<link href="{{servlet-context}}/css/standard.css" media="screen and (min-device-width: 1025px)" rel="stylesheet" type="text/css" />
|
<link href="{{servlet-context}}/css/standard.css" media="screen and (min-device-width: 1025px)" rel="stylesheet" type="text/css" />
|
||||||
<link href="{{servlet-context}}/css/print.css" media="print" rel="stylesheet" type="text/css" />
|
|
||||||
<link href="{{servlet-context}}/css/states.css" rel="stylesheet" type="text/css" />
|
|
||||||
{% script "/lib/jquery-1.9.0.js" %}
|
{% script "/lib/jquery-1.9.0.js" %}
|
||||||
{% script "/lib/jquery.validate.min.js" %}
|
{% script "/lib/jquery.validate.min.js" %}
|
||||||
{% script "/lib/script.js" %}
|
{% script "/lib/script.js" %}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
{{content|safe}}
|
{{content|safe}}
|
||||||
</div>
|
</div>
|
||||||
<form action="inspect" method="post">
|
<form action="inspect" method="post">
|
||||||
|
{% csrf-field %}
|
||||||
<input type="hidden" name="x" value="{{x}}"/>
|
<input type="hidden" name="x" value="{{x}}"/>
|
||||||
<input type="hidden" name="y" value="{{y}}"/>
|
<input type="hidden" name="y" value="{{y}}"/>
|
||||||
<p class="widget">
|
<p class="widget">
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
{% extends "templates/base.html" %}
|
{% extends "templates/base.html" %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<form action="{{servlet-context}}/params" method="POST">
|
<form action="{{servlet-context}}/params" method="POST">
|
||||||
|
{% csrf-field %}
|
||||||
<p class="widget">
|
<p class="widget">
|
||||||
<label for="ruleset">The rule set to use</label>
|
<label for="ruleset">The rule set to use</label>
|
||||||
<select name="ruleset">
|
<select name="ruleset">
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
(:require [selmer.parser :as parser]
|
(:require [selmer.parser :as parser]
|
||||||
[clojure.string :as s]
|
[clojure.string :as s]
|
||||||
[ring.util.response :refer [content-type response]]
|
[ring.util.response :refer [content-type response]]
|
||||||
|
[ring.util.anti-forgery :refer [anti-forgery-field]]
|
||||||
[compojure.response :refer [Renderable]]))
|
[compojure.response :refer [Renderable]]))
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
@ -32,6 +33,7 @@
|
||||||
|
|
||||||
(def template-path "templates/")
|
(def template-path "templates/")
|
||||||
|
|
||||||
|
(parser/add-tag! :csrf-field (fn [_ _] (anti-forgery-field)))
|
||||||
|
|
||||||
(deftype RenderableTemplate [template params]
|
(deftype RenderableTemplate [template params]
|
||||||
Renderable
|
Renderable
|
|
@ -2,10 +2,10 @@
|
||||||
:author "Simon Brooke"}
|
:author "Simon Brooke"}
|
||||||
mw-ui.render-world
|
mw-ui.render-world
|
||||||
(:require [clojure.java.io :as jio]
|
(:require [clojure.java.io :as jio]
|
||||||
[mw-engine.core :as engine]
|
[microworld.engine.core :as engine]
|
||||||
[mw-engine.world :as world]
|
[microworld.engine.world :as world]
|
||||||
[mw-engine.heightmap :as heightmap]
|
[microworld.engine.heightmap :as heightmap]
|
||||||
[mw-parser.bulk :as compiler]
|
[microworld.parser.bulk :as compiler]
|
||||||
[hiccup.core :refer [html]]
|
[hiccup.core :refer [html]]
|
||||||
[noir.io :as io]
|
[noir.io :as io]
|
||||||
[noir.session :as session]))
|
[noir.session :as session]))
|
||||||
|
@ -70,12 +70,11 @@
|
||||||
"Render the world implied by the current session as a complete HTML table in a DIV."
|
"Render the world implied by the current session as a complete HTML table in a DIV."
|
||||||
[]
|
[]
|
||||||
(let [world (or (session/get :world)
|
(let [world (or (session/get :world)
|
||||||
(heightmap/apply-heightmap
|
(heightmap/apply-heightmap "public/img/heightmaps/small_hill.png"))
|
||||||
(io/get-resource "/img/heightmaps/small_hill.png")))
|
|
||||||
rules (or (session/get :rules)
|
rules (or (session/get :rules)
|
||||||
(do (session/put! :rules
|
(do (session/put! :rules
|
||||||
(compiler/compile-file
|
(compiler/compile-file
|
||||||
(io/get-resource "/rulesets/basic.txt")))
|
(jio/resource "public/rulesets/basic.txt")))
|
||||||
(session/get :rules)))
|
(session/get :rules)))
|
||||||
generation (inc (or (session/get :generation) 0))
|
generation (inc (or (session/get :generation) 0))
|
||||||
w2 (engine/transform-world world rules)
|
w2 (engine/transform-world world rules)
|
|
@ -3,9 +3,10 @@
|
||||||
mw-ui.routes.home
|
mw-ui.routes.home
|
||||||
(:use clojure.walk
|
(:use clojure.walk
|
||||||
compojure.core)
|
compojure.core)
|
||||||
(:require [clojure.pprint :only [pprint]]
|
(:require [clojure.java.io :refer [file resource]]
|
||||||
|
[clojure.pprint :only [pprint]]
|
||||||
[hiccup.core :refer [html]]
|
[hiccup.core :refer [html]]
|
||||||
[mw-engine.utils :as engine-utils]
|
[microworld.engine.utils :as engine-utils]
|
||||||
[mw-ui.layout :as layout]
|
[mw-ui.layout :as layout]
|
||||||
[mw-ui.render-world :as world]
|
[mw-ui.render-world :as world]
|
||||||
[mw-ui.routes.load :as load]
|
[mw-ui.routes.load :as load]
|
||||||
|
@ -45,28 +46,28 @@
|
||||||
(sort
|
(sort
|
||||||
(filter #(not (nil? %))
|
(filter #(not (nil? %))
|
||||||
(map #(first (rest (re-matches #"([0-9a-z-]+).png" (.getName %))))
|
(map #(first (rest (re-matches #"([0-9a-z-]+).png" (.getName %))))
|
||||||
(file-seq (clojure.java.io/file "resources/public/img/tiles"))))))
|
(file-seq (resource "public/img/tiles"))))))
|
||||||
|
|
||||||
|
|
||||||
(defn about-page []
|
(defn about-page []
|
||||||
(layout/render "trusted-content.html"
|
(layout/render "trusted-content.html"
|
||||||
{:title "About MicroWorld"
|
{:title "About MicroWorld"
|
||||||
:about-selected "active"
|
:about-selected "active"
|
||||||
:content (util/md->html "/md/about.md")
|
:content (util/md->html "public/md/about.md")
|
||||||
:version (System/getProperty "mw-ui.version")}))
|
:version (System/getProperty "mw-ui.version")}))
|
||||||
|
|
||||||
(defn docs-page []
|
(defn docs-page []
|
||||||
(layout/render "docs.html" {:title "Documentation"
|
(layout/render "docs.html" {:title "Documentation"
|
||||||
:parser (util/md->html "/md/mw-parser.md" )
|
:parser (util/md->html "public/md/microworld.parser.md" )
|
||||||
:states (util/list-resources "/img/tiles" #"([0-9a-z-_]+).png")
|
:states (util/list-resources "public/img/tiles" #"([0-9a-z-_]+).png")
|
||||||
:lessons (util/list-resources "/md/lesson-plans" #"([0-9a-z-_]+).md")
|
:lessons (util/list-resources "public/md/lesson-plans" #"([0-9a-z-_]+).md")
|
||||||
:components ["mw-engine" "mw-parser" "mw-ui"]
|
:components ["microworld.engine" "microworld.parser" "mw-ui"]
|
||||||
:version (System/getProperty "mw-ui.version")}))
|
:version (System/getProperty "mw-ui.version")}))
|
||||||
|
|
||||||
(defn home-page []
|
(defn home-page []
|
||||||
"Render the home page."
|
"Render the home page."
|
||||||
(layout/render "trusted-content.html" {:title "Welcome to MicroWorld"
|
(layout/render "trusted-content.html" {:title "Welcome to MicroWorld"
|
||||||
:content (util/md->html "/md/mw-ui.md")
|
:content (util/md->html "public/md/mw-ui.md")
|
||||||
:version (System/getProperty "mw-ui.version")}))
|
:version (System/getProperty "mw-ui.version")}))
|
||||||
|
|
||||||
(defn inspect-page [request]
|
(defn inspect-page [request]
|
||||||
|
@ -91,7 +92,7 @@
|
||||||
:x (:x cell)
|
:x (:x cell)
|
||||||
:y (:y cell)
|
:y (:y cell)
|
||||||
:states (util/list-resources
|
:states (util/list-resources
|
||||||
"/img/tiles" #"([0-9a-z-_]+).png")}))))
|
"public/img/tiles" #"([0-9a-z-_]+).png")}))))
|
||||||
|
|
||||||
(defn md-page
|
(defn md-page
|
||||||
"Render the markdown page specified in this request, if any. Probably undesirable,
|
"Render the markdown page specified in this request, if any. Probably undesirable,
|
|
@ -4,9 +4,10 @@
|
||||||
(:use clojure.walk
|
(:use clojure.walk
|
||||||
clojure.java.io
|
clojure.java.io
|
||||||
compojure.core)
|
compojure.core)
|
||||||
(:require [hiccup.core :refer [html]]
|
(:require [clojure.java.io :refer [resource]]
|
||||||
[mw-engine.heightmap :as heightmap]
|
[hiccup.core :refer [html]]
|
||||||
[mw-parser.bulk :as compiler]
|
[microworld.engine.heightmap :as heightmap]
|
||||||
|
[microworld.parser.bulk :as compiler]
|
||||||
[mw-ui.layout :as layout]
|
[mw-ui.layout :as layout]
|
||||||
[mw-ui.util :as util]
|
[mw-ui.util :as util]
|
||||||
[mw-ui.render-world :as world]
|
[mw-ui.render-world :as world]
|
||||||
|
@ -39,9 +40,9 @@
|
||||||
|
|
||||||
(defn- send-params []
|
(defn- send-params []
|
||||||
{:title "Choose your world"
|
{:title "Choose your world"
|
||||||
:heightmaps (util/list-resources "/img/heightmaps" #"([0-9a-z-_]+).png")
|
:heightmaps (util/list-resources "public/img/heightmaps" #"([0-9a-z-_]+).png")
|
||||||
:pause (or (session/get :pause) 5)
|
:pause (or (session/get :pause) 5)
|
||||||
:rulesets (util/list-resources "/rulesets" #"([0-9a-z-_]+).txt")
|
:rulesets (util/list-resources "public/rulesets" #"([0-9a-z-_]+).txt")
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
@ -57,14 +58,14 @@
|
||||||
map (:heightmap params)
|
map (:heightmap params)
|
||||||
pause (:pause params)
|
pause (:pause params)
|
||||||
rulefile (:ruleset params)
|
rulefile (:ruleset params)
|
||||||
rulepath (str "/rulesets/" rulefile ".txt")]
|
rulepath (str "public/rulesets/" rulefile ".txt")]
|
||||||
(if (not= map "")
|
(if (not= map "")
|
||||||
(session/put! :world
|
(session/put! :world
|
||||||
(heightmap/apply-heightmap
|
(heightmap/apply-heightmap
|
||||||
(io/get-resource (str "/img/heightmaps/" map ".png")))))
|
(resource (str "public/img/heightmaps/" map ".png")))))
|
||||||
(when (not= rulefile "")
|
(when (not= rulefile "")
|
||||||
(session/put! :rule-text (io/slurp-resource rulepath))
|
(session/put! :rule-text (io/slurp-resource rulepath))
|
||||||
(session/put! :rules (compiler/compile-file (io/get-resource rulepath))))
|
(session/put! :rules (compiler/compile-file (resource rulepath))))
|
||||||
(if (not= pause "")
|
(if (not= pause "")
|
||||||
(session/put! :pause pause))
|
(session/put! :pause pause))
|
||||||
(layout/render "params.html"
|
(layout/render "params.html"
|
|
@ -4,7 +4,7 @@
|
||||||
(:use clojure.walk
|
(:use clojure.walk
|
||||||
compojure.core)
|
compojure.core)
|
||||||
(:require [hiccup.core :refer [html]]
|
(:require [hiccup.core :refer [html]]
|
||||||
[mw-parser.bulk :as compiler]
|
[microworld.parser.bulk :as compiler]
|
||||||
[mw-ui.layout :as layout]
|
[mw-ui.layout :as layout]
|
||||||
[mw-ui.util :as util]
|
[mw-ui.util :as util]
|
||||||
[mw-ui.render-world :as world]
|
[mw-ui.render-world :as world]
|
|
@ -1,8 +1,9 @@
|
||||||
(ns ^{:doc "Route which handles the saving of world state the client."
|
(ns ^{:doc "Route which handles the saving of world state the client."
|
||||||
:author "Simon Brooke"}
|
:author "Simon Brooke"}
|
||||||
mw-ui.routes.save
|
mw-ui.routes.save
|
||||||
(:require [clojure.pprint :as pretty :only [pprint]]
|
(:require [clojure.pprint :refer [pprint]]
|
||||||
[noir.session :as session]
|
[noir.session :as session]
|
||||||
|
[ring.util.response :as response]))
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;;;;
|
;;;;
|
||||||
|
@ -35,6 +36,6 @@
|
||||||
any proprietary format."
|
any proprietary format."
|
||||||
(response/header
|
(response/header
|
||||||
(response/response
|
(response/response
|
||||||
(with-out-str (pretty/pprint (session/get :world))))
|
(with-out-str (pprint (session/get :world))))
|
||||||
"Content-Type" "application/journeyman-mwm; charset=utf-8"))
|
"Content-Type" "application/journeyman-mwm; charset=utf-8"))
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
(ns ^{:doc "Utility functions used by other namespaces in this package."
|
(ns ^{:doc "Utility functions used by other namespaces in this package."
|
||||||
:author "Simon Brooke"}
|
:author "Simon Brooke"}
|
||||||
mw-ui.util
|
mw-ui.util
|
||||||
(:require [noir.io :as io]
|
(:require [clojure.java.io :refer [resource file]]
|
||||||
[noir.session :as session]
|
[noir.session :as session]
|
||||||
[markdown.core :as md]))
|
[markdown.core :refer [md-to-html-string]]))
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;;;;
|
;;;;
|
||||||
|
@ -33,16 +33,13 @@
|
||||||
"reads a markdown file from public/md and returns an HTML string"
|
"reads a markdown file from public/md and returns an HTML string"
|
||||||
[filename]
|
[filename]
|
||||||
(->>
|
(->>
|
||||||
(io/slurp-resource filename)
|
(slurp (resource filename))
|
||||||
(md/md-to-html-string)))
|
(md-to-html-string)))
|
||||||
|
|
||||||
|
|
||||||
(defn list-resources [directory pattern]
|
(defn list-resources [directory pattern]
|
||||||
"List resource files matching `pattern` in `directory`."
|
"List resource files matching `pattern` in `directory`."
|
||||||
(let
|
|
||||||
[path (str (io/resource-path) directory)]
|
|
||||||
(session/put! :list-resources-path path)
|
|
||||||
(sort
|
(sort
|
||||||
(remove nil?
|
(remove nil?
|
||||||
(map #(first (rest (re-matches pattern (.getName %))))
|
(map #(first (rest (re-matches pattern (.getName %))))
|
||||||
(file-seq (clojure.java.io/file path)))))))
|
(file-seq (file (resource directory)))))))
|
Loading…
Reference in a new issue