Guest User

Untitled

a guest
Jun 21st, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.59 KB | None | 0 0
  1. (ns ciid.views.tweets
  2. (:require
  3. [ciid.views.common :as common]
  4. [ciid.config :as config]
  5. [ciid.dates :as dates]
  6. [clj-time.coerce :as cljtc]
  7. [com.ashafa.clutch :as couch]
  8. [noir.session :as session]
  9. [noir.response :as response])
  10. (:use
  11. [noir.core :only [defpage defpartial]]
  12. [hiccup.core :only [html escape-html]]))
  13.  
  14. (defpage "/tweets" []
  15. (let[tweets (couch/get-view
  16. config/db
  17. "main" "all-tweets"
  18. {:startkey (dates/timestamp-array)
  19. :endkey [1970]
  20. :include_docs true
  21. :descending true
  22. :limit 100})]
  23. (common/layout
  24. [:h1 (count tweets) " recent public tweets"]
  25. (map common/tweet-item tweets))))
  26.  
  27. (defpage "/tweets/new" []
  28. (common/layout
  29. [:form.form-stacked {:action "/tweets" :method "POST"}
  30. [:div.clearfix
  31. [:label {:for "text"} "Compose new message..."]
  32. [:textarea.span14 {:rows 3 :id "text" :name "text"}]]
  33. [:div.clearfix
  34. [:input.btn.primary {:type "submit" :value "Tweet!"}]]]))
  35.  
  36. (defpage [:post "/tweets"]
  37. {:keys [text]}
  38. (let[tweet
  39. (couch/put-document
  40. config/db
  41. {:type "tweet"
  42. :user (:username (session/get :user))
  43. :text text
  44. :date_created (dates/timestamp-array)})]
  45. (response/redirect
  46. (str "/tweets/" (:_id tweet)))))
  47.  
  48. (defpage [:get ["/tweets/:id" :id #"[0-9a-f]{32,32}"]]
  49. {:keys [id]}
  50. (if-let[tweet (couch/get-document config/db id)]
  51. (let[{:keys [text user date_created]} tweet]
  52. (common/layout
  53. [:div
  54. "On " (dates/format-daytime-array date_created) " "
  55. [:a {:href (str "/users/" (:user tweet))} (:user tweet)]
  56. " said..."]
  57. [:div.tweet-xl (:text tweet)]))))
  58.  
  59. (defpartial make-tweet-xml
  60. [t]
  61. (let[{:keys[date_created text user]} (:doc t)
  62. date_created (dates/array-to-daytime date_created)
  63. date_created (cljtc/to-long date_created)]
  64. [:tweet
  65. [:date date_created]
  66. [:text (escape-html text)]
  67. [:user user]]))
  68.  
  69. (defpage "/xml/tweets" []
  70. (let[tweets (couch/get-view
  71. config/db
  72. "main" "all-tweets"
  73. {:startkey (dates/timestamp-array)
  74. :endkey [1970]
  75. :include_docs true
  76. :descending true
  77. :limit 100})
  78. xml (reduce str (map make-tweet-xml tweets))]
  79. {:headers {"Content-Type" "text/xml; charset=utf-8"}
  80. :body (str "<?xml version=\"1.0\" encoding=\"UTF-8\"?><tweets>" xml "</tweets>")}))
Add Comment
Please, Sign In to add comment