summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Ostler <scottbot9000@gmail.com>2011-02-23 00:06:37 -0500
committerScott Ostler <scottbot9000@gmail.com>2011-02-23 00:06:37 -0500
commit9da44d38f552388680c47ad592edeb2b114d67d4 (patch)
tree4700f141f408c9dfa11072df635a89d631032930
parent21ec2e9244ef0787908aede4bf4cb2e94bcf395d (diff)
add selector for frontpage
-rw-r--r--src/datalayer.clj8
-rw-r--r--src/site.clj39
-rwxr-xr-xsrc/utils.clj16
-rw-r--r--template/frontpage.st10
4 files changed, 50 insertions, 23 deletions
diff --git a/src/datalayer.clj b/src/datalayer.clj
index 56d5a60..72b86cd 100644
--- a/src/datalayer.clj
+++ b/src/datalayer.clj
@@ -142,8 +142,8 @@ WHERE u.nick = ANY(?)"
(def redis-favscores-key "favscores")
-(defn redis-daily-hall-key [date-str]
- (str "hall:daily:" date-str))
+(defn redis-daily-hall-key [date]
+ (str "hall:daily:" (format-yyyymmdd date)))
(defn fetch-redis-zset [key symbol offset num]
(for [t (with-jedis
@@ -155,8 +155,8 @@ WHERE u.nick = ANY(?)"
{symbol (.getElement t)
:score (int (.getScore t))}))
-(defn fetch-redis-daily-hall [date-str offset num user-id]
- (let [msg-ids (fetch-redis-zset (redis-daily-hall-key date-str)
+(defn fetch-redis-daily-hall [date offset num user-id]
+ (let [msg-ids (fetch-redis-zset (redis-daily-hall-key date)
:message_id
offset
num)
diff --git a/src/site.clj b/src/site.clj
index 2d1b295..9af02ca 100644
--- a/src/site.clj
+++ b/src/site.clj
@@ -192,16 +192,32 @@
;; Landing
-(defn front-page [session]
- (let [st (fetch-template "frontpage" session)
- date-str (format-yyyymmdd (Date.))
- dumps (map process-message-for-output
- (fetch-redis-daily-hall date-str 0 20 (:user_id session)))]
- (.setAttribute st "dumps" dumps)
- (.toString st)))
+(defn- parse-front-page-date [dt-str]
+ (if-let [dt (parse-yyyymmdd-date dt-str)]
+ [(advance-date dt -1)
+ dt
+ (advance-date dt 1)]))
+
+(def earliest-daily-hall (parse-yyyymmdd-date "20100503"))
-(defn landing [session]
- (front-page session))
+(defn front-page
+ ([session] (front-page session (format-yyyymmdd (Date.))))
+ ([session dt-str]
+ (let [today (Date.)]
+ (if-let [[prev-date cur-date next-date] (parse-front-page-date dt-str)]
+ (cond (neg? (.compareTo cur-date earliest-daily-hall)) (redirect-to "/")
+ (pos? (.compareTo cur-date (Date.))) (redirect-to "/")
+ :else (let [st (fetch-template "frontpage" session)
+ dumps (map process-message-for-output
+ (fetch-redis-daily-hall cur-date 0 20 (:user_id session)))]
+ (.setAttribute st "dumps" dumps)
+ (if-not (.after next-date today)
+ (.setAttribute st "next_date" (format-yyyymmdd next-date)))
+ (if-not (.before prev-date earliest-daily-hall)
+ (.setAttribute st "prev_date" (format-yyyymmdd prev-date)))
+ (.setAttribute st "current_date" (format-yyyymmdd cur-date))
+ (.toString st)))
+ (redirect-to "/")))))
(defn log-login [user_id ip]
;; i'm using do-cmds here because update-values can't deal with stuff like 'last_login = now()'
@@ -1273,6 +1289,10 @@ WHERE user_id IN
(GET "/terms" (serve-template "terms" session))
(GET "/error/ie" (serve-template "error_ie" session))
+ (GET "/" (front-page session))
+ (GET "/top/:dt" (front-page session (:dt params)))
+
+
;; Put username routes below all others in priority
(GET "/:nick" (profile session (params :nick)))
(GET "/:nick/" (profile session (params :nick)))
@@ -1296,7 +1316,6 @@ WHERE user_id IN
(GET "/:nick/:date/" (user-log-handler session (params :nick) (params :date) nil))
(GET "/:nick/:date/:msg" (user-log-handler session (params :nick) (params :date) (params :msg)))
- (GET "/" (landing session))
(ANY "*" (unknown-page)))
(defroutes multipart
diff --git a/src/utils.clj b/src/utils.clj
index 4ed446a..1bccb09 100755
--- a/src/utils.clj
+++ b/src/utils.clj
@@ -131,16 +131,16 @@
(def yyyy-formatter (new SimpleDateFormat "yyyy"))
(def yyyy-mm-formatter (new SimpleDateFormat "yyyy-MM"))
(def yyyy-mm-dd-formatter (new SimpleDateFormat "yyyy-MM-dd"))
-(def yymmdd-formatter (new SimpleDateFormat "yyyyMMdd"))
+(def yyyymmdd-formatter (new SimpleDateFormat "yyyyMMdd"))
-(doseq [f [yyyy-formatter yyyy-mm-formatter yyyy-mm-dd-formatter yymmdd-formatter]]
+(doseq [f [yyyy-formatter yyyy-mm-formatter yyyy-mm-dd-formatter yyyymmdd-formatter]]
(.setLenient f false))
(defn format-yyyy-mm-dd [d]
(.format yyyy-mm-dd-formatter d))
(defn format-yyyymmdd [d]
- (.format yymmdd-formatter d))
+ (.format yyyymmdd-formatter d))
(defn today []
(format-yyyymmdd (new Date)))
@@ -188,6 +188,12 @@
(.setTimeZone df (TimeZone/getTimeZone "GMT"))
(.format df dt))))
+(defn advance-date [dt i]
+ (let [c (java.util.Calendar/getInstance)]
+ (.setTime c dt)
+ (.add c java.util.Calendar/DATE i)
+ (.getTime c)))
+
;; JSON responses
(defmethod print-json Date
@@ -352,6 +358,10 @@
(defn parse-yyyy-mm-dd-date [s]
(try (.parse yyyy-mm-dd-formatter s)
(catch java.text.ParseException _ nil)))
+
+(defn parse-yyyymmdd-date [s]
+ (try (.parse yyyymmdd-formatter s)
+ (catch java.text.ParseException _ nil)))
(defn parse-flexi-date
"Accepts date strings as YYYY, YYYY-MM, or YYYY-MM-DD."
diff --git a/template/frontpage.st b/template/frontpage.st
index 857c019..22c47fe 100644
--- a/template/frontpage.st
+++ b/template/frontpage.st
@@ -485,14 +485,12 @@ jQuery(window).load(function(){
</div>
<div id="pgbuttons">
- $if(prev)$
- <a href="http://$roomkey$dump.fm/log/$prev$"><input class="pgbutton"id="prevbutton" value="<- Prev" readonly="true"type="button"></a>
+ $if(prev_date)$
+ <a class="prev_date" href="$domain$/top/$prev_date$"><- $prev_date$</a>
$endif$
- $if(next)$
- <a href="http://$roomkey$dump.fm/log/$next$">
- <input class="pgbutton"id="nextbutton" value="Next ->" readonly="true"type="button">
- </a>
+ $if(next_date)$
+ <a class="next_date" href="$domain$/top/$next_date$">$next_date$ -></a>
$endif$
</div>