From b7b2d8a223fb23eef7df251483f2a86fb1f280b3 Mon Sep 17 00:00:00 2001 From: Aaron Mueller Date: Mon, 29 Sep 2014 00:09:52 +0200 Subject: [PATCH] UI stuff. The search does not work on the server side ... oh my ... --- project.clj | 1 - resources/public/css/main.css | 85 ++++++++++++++++++++++ resources/{img => public/images}/logo.jpg | Bin resources/public/images/logo_small.jpg | Bin 0 -> 29924 bytes src/luduverse/handler.clj | 14 +++- src/luduverse/pages.clj | 18 ++++- src/luduverse/search.clj | 5 +- src/templates/landingpage.html | 26 +++++++ src/templates/results.html | 32 ++++++++ 9 files changed, 172 insertions(+), 9 deletions(-) create mode 100644 resources/public/css/main.css rename resources/{img => public/images}/logo.jpg (100%) create mode 100644 resources/public/images/logo_small.jpg create mode 100644 src/templates/landingpage.html create mode 100644 src/templates/results.html diff --git a/project.clj b/project.clj index 1006b6a..3da76e5 100644 --- a/project.clj +++ b/project.clj @@ -20,7 +20,6 @@ :init luduverse.handler/init :destroy luduverse.handler/destroy :open-browser? false} - :repl-options {:timeout 12000} :aliases {"save-competition-30" ["run" "-m" "luduverse.scraper/save-competition" "30"]} :profiles {:production {:ring {:stacktrace? false}} :dev {:ring {:auto-reload? true diff --git a/resources/public/css/main.css b/resources/public/css/main.css new file mode 100644 index 0000000..db7e01d --- /dev/null +++ b/resources/public/css/main.css @@ -0,0 +1,85 @@ +* { + margin: 0; + padding: 0; + font-family: Arial, DejaVu Sans; +} + +#logo { + margin: auto; + margin-top: 200px; + display: block; +} + +form#search { + margin: auto; + width: 600px; +} + +form#search > input, form#search-results > input { + width: 580px; + font-size: 40px; + font-weight: bold; + margin: 20px 0 10px 0; + padding: 10px; + border: 2px solid #ddd; + background-color: #fcfcfc; +} + +form#search > p { + font-size: 12px; + color: #aaa; +} + +form#search > p > strong { + background-color: #eee; + color: black; + padding: 1px 5px; + border-radius: 2px; +} + +div#results-header { + margin: 10px 0 0 15px; +} + +#logo-search-results, form#search-results { + float: left; +} +form#search-results > input { + margin: 5px 0 0 20px; +} + +#results { + margin-top: 20px; +} + +#results > div { + width: 200px; + height: 200px; + background-color: #ccc; + border: 1px solid black; + margin: 3px; + float: left; + position: relative; +} +#results > div p { + position: absolute; + left: -2; + top: 172px; + width: 196px; + height: 25px; + background-color: black; + padding: 2px; + color: white; + font-size: 9px; +} +#results > div p > span { + font-weight: bold; +} + +a { + color: red; +} + +a:hover { + color: orange; +} \ No newline at end of file diff --git a/resources/img/logo.jpg b/resources/public/images/logo.jpg similarity index 100% rename from resources/img/logo.jpg rename to resources/public/images/logo.jpg diff --git a/resources/public/images/logo_small.jpg b/resources/public/images/logo_small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b0ee10081ac8674754941793807b2869740ea8ab GIT binary patch literal 29924 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 XY}1Is>#3gh7MgY6?P;FMf6M;|;jpDS literal 0 HcmV?d00001 diff --git a/src/luduverse/handler.clj b/src/luduverse/handler.clj index 75fb457..475c5c7 100644 --- a/src/luduverse/handler.clj +++ b/src/luduverse/handler.clj @@ -3,11 +3,21 @@ [compojure.route :as route] [noir.util.middleware :as middleware] [luduverse.pages :as pages] - [luduverse.images :as images])) + [luduverse.images :as images] + [luduverse.search :as search])) + +(defn render [template & args] + (apply str (apply template args))) (defroutes core-routes (route/resources "/") - (GET "/" [] (pages/front-page)) + (GET "/" [] (render pages/landingpage-template)) + (POST "/search" {params :params} + (let [term (params "term") + s (search/search term) + hits (:hit-count s) + entries (:results s)] + (render pages/results-template term hits entries))) (route/not-found "404, sorry.")) (defn init []) diff --git a/src/luduverse/pages.clj b/src/luduverse/pages.clj index 81a305b..529d49a 100644 --- a/src/luduverse/pages.clj +++ b/src/luduverse/pages.clj @@ -1,4 +1,16 @@ -(ns luduverse.pages) +(ns luduverse.pages + (:require [net.cgrand.enlive-html :as html])) -(defn front-page [] - "Wait for it ...") +(html/deftemplate landingpage-template "templates/landingpage.html" []) + +(html/defsnippet item-model "templates/results.html" [:div#results :> :div] + [id image-path username title] + [:img] (html/set-attr :src image-path) + [:p] (html/content username) + [:span] (html/content title)) + +(html/deftemplate results-template "templates/results.html" + [search-term hits results] + [:form#search :> :input#term] (html/set-attr :value search-term) + ;[:div#results (html/content (map #(item-model %) results))] + ) diff --git a/src/luduverse/search.clj b/src/luduverse/search.clj index f530f49..a4ba076 100644 --- a/src/luduverse/search.clj +++ b/src/luduverse/search.clj @@ -4,8 +4,6 @@ [clojurewerkz.elastisch.rest.document :as eld] [clojurewerkz.elastisch.rest.response :as elresp] [clojurewerkz.elastisch.query :as elq] - - [clojure.pprint :as pp] [luduverse.models.entry :as entry])) (def connection (atom (el/connect "http://localhost:9200"))) @@ -40,7 +38,8 @@ (store (:id e)))) (defn search [term] - (let [res (eld/search @connection "luduverse" "entry" + (let [con (el/connect "http://localhost:9200") + res (eld/search con "luduverse" "entry" :query (elq/query-string :query term) :sort {:title "desc"} :from 0 diff --git a/src/templates/landingpage.html b/src/templates/landingpage.html new file mode 100644 index 0000000..c834e86 --- /dev/null +++ b/src/templates/landingpage.html @@ -0,0 +1,26 @@ + + + + + + LuduVerse - ClojureCup 2014 by Aaron Fischer + + + + + + + + + + + + diff --git a/src/templates/results.html b/src/templates/results.html new file mode 100644 index 0000000..3f03425 --- /dev/null +++ b/src/templates/results.html @@ -0,0 +1,32 @@ + + + + + + LuduVerse results- ClojureCup 2014 by Aaron Fischer + + + + + + +
+ +
+ +
+
+
+ + + + +