|
| 1 | +; Copyright (c) Rich Hickey. All rights reserved. |
| 2 | +; The use and distribution terms for this software are covered by the |
| 3 | +; Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php) |
| 4 | +; which can be found in the file epl-v10.html at the root of this distribution. |
| 5 | +; By using this software in any fashion, you are agreeing to be bound by |
| 6 | +; the terms of this license. |
| 7 | +; You must not remove this notice, or any other, from this software. |
| 8 | + |
1 | 9 | (ns twitterbuzz.leaderboard
|
2 | 10 | (:require [twitterbuzz.core :as buzz]
|
3 | 11 | [goog.dom :as dom]))
|
4 | 12 |
|
5 |
| -(defn dom-element [element attrs] |
6 |
| - (dom/createDom element |
7 |
| - (.strobj (reduce (fn [m [k v]] |
8 |
| - (assoc m k v)) |
9 |
| - {} |
10 |
| - (map #(vector (name %1) %2) (keys attrs) (vals attrs)))))) |
11 |
| - |
12 | 13 | (defn add-leaderboard-node [node]
|
13 | 14 | (let [user (first node)
|
14 | 15 | user-info (second node)
|
15 | 16 | parent (dom/getElement "leaderboard-content")
|
16 |
| - child (dom-element "div" {:class "tweet"}) |
17 |
| - details (dom-element "div" {:class "tweet-details"}) |
18 |
| - user-e (dom-element "div" {:class "user-name"}) |
19 |
| - text (dom-element "div" {:class "tweet-text"}) |
20 |
| - pic (dom-element "img" {:src (:image-url user-info) :class "profile-pic"}) |
21 |
| - num-mentions (dom-element "div")] |
| 17 | + child (buzz/dom-element :div {:class "tweet"}) |
| 18 | + details (buzz/dom-element :div {:class "tweet-details"}) |
| 19 | + user-e (buzz/dom-element :div {:class "user-name"}) |
| 20 | + text (buzz/dom-element :div {:class "tweet-text"}) |
| 21 | + pic (buzz/dom-element :img {:src (:image-url user-info) :class "profile-pic"}) |
| 22 | + num-mentions (buzz/dom-element "div")] |
22 | 23 | (do (dom/insertChildAt text (dom/htmlToDocumentFragment (:last-tweet user-info)) 0) ;; (dom/setTextContent text (:last-tweet user-info))
|
23 | 24 | (dom/setTextContent user-e user)
|
24 | 25 | (dom/setTextContent num-mentions (str (buzz/num-mentions user-info)))
|
|
29 | 30 | (dom/appendChild details num-mentions)
|
30 | 31 | (dom/appendChild parent child 0))))
|
31 | 32 |
|
32 |
| -(defn clear-leaderboard [] |
33 |
| - (let [parent (dom/getElement "leaderboard-content")] |
34 |
| - (do (dom/removeChildren parent)))) |
35 |
| - |
36 | 33 | (defn leaders [nodes]
|
37 | 34 | (reverse (sort-by #(buzz/num-mentions (second %)) nodes)))
|
38 | 35 |
|
39 | 36 | (defn update-leaderboard [graph]
|
40 |
| - (do (clear-leaderboard) |
| 37 | + (do (buzz/remove-children "leaderboard-content") |
41 | 38 | (doseq [next-node (take 5 (leaders (seq graph)))]
|
42 | 39 | (add-leaderboard-node next-node))))
|
43 | 40 |
|
| 41 | +(buzz/register :track-clicked #(buzz/remove-children "leaderboard-content")) |
44 | 42 | (buzz/register :graph-update update-leaderboard)
|
0 commit comments