diff options
| -rw-r--r-- | src/datalayer.clj | 8 | ||||
| -rw-r--r-- | src/site.clj | 39 | ||||
| -rwxr-xr-x | src/utils.clj | 16 | ||||
| -rw-r--r-- | template/frontpage.st | 10 |
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> |
