Updated to use CLJC-ified versions of engine and parser.

This commit is contained in:
simon 2016-09-24 14:24:44 +01:00
parent 4861ee809b
commit b2cd66df7f
16 changed files with 58 additions and 57 deletions

View file

@ -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}}}

View file

@ -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;
} }

View file

@ -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" %}

View file

@ -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">

View file

@ -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">

View file

@ -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

View file

@ -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)

View file

@ -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,

View file

@ -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"

View file

@ -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]

View file

@ -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"))

View file

@ -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)))))))