Skip to content

Commit 0e21515

Browse files
Merge branch 'master' of github.com:relevance/clojurescript
2 parents 3394ec5 + 39cf231 commit 0e21515

File tree

4 files changed

+48
-58
lines changed

4 files changed

+48
-58
lines changed

samples/twitterbuzz/src/twitterbuzz/core.cljs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,3 +179,18 @@
179179

180180
)
181181

182+
(defn dom-element
183+
"Create a dom element using a keyword for the element name and a map
184+
for the attributes."
185+
[element attrs]
186+
(dom/createDom (name element)
187+
(.strobj (reduce (fn [m [k v]]
188+
(assoc m k v))
189+
{}
190+
(map #(vector (name %1) %2) (keys attrs) (vals attrs))))))
191+
192+
(defn remove-children
193+
"Remove all children from the element with the passed id."
194+
[id]
195+
(let [parent (dom/getElement (name id))]
196+
(do (dom/removeChildren parent))))
Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,25 @@
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+
19
(ns twitterbuzz.leaderboard
210
(:require [twitterbuzz.core :as buzz]
311
[goog.dom :as dom]))
412

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-
1213
(defn add-leaderboard-node [node]
1314
(let [user (first node)
1415
user-info (second node)
1516
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")]
2223
(do (dom/insertChildAt text (dom/htmlToDocumentFragment (:last-tweet user-info)) 0) ;; (dom/setTextContent text (:last-tweet user-info))
2324
(dom/setTextContent user-e user)
2425
(dom/setTextContent num-mentions (str (buzz/num-mentions user-info)))
@@ -29,16 +30,13 @@
2930
(dom/appendChild details num-mentions)
3031
(dom/appendChild parent child 0))))
3132

32-
(defn clear-leaderboard []
33-
(let [parent (dom/getElement "leaderboard-content")]
34-
(do (dom/removeChildren parent))))
35-
3633
(defn leaders [nodes]
3734
(reverse (sort-by #(buzz/num-mentions (second %)) nodes)))
3835

3936
(defn update-leaderboard [graph]
40-
(do (clear-leaderboard)
37+
(do (buzz/remove-children "leaderboard-content")
4138
(doseq [next-node (take 5 (leaders (seq graph)))]
4239
(add-leaderboard-node next-node))))
4340

41+
(buzz/register :track-clicked #(buzz/remove-children "leaderboard-content"))
4442
(buzz/register :graph-update update-leaderboard)

samples/twitterbuzz/src/twitterbuzz/showgraph.cljs

Lines changed: 9 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@
4040
(defn unit-to-pixel [unit-arg canvas-size]
4141
(+ (* unit-arg (- canvas-size avatar-size)) (/ avatar-size 2)))
4242

43+
(defn log [& args]
44+
(js* "console.log(~{})" (apply pr-str args)))
45+
4346
(defn draw-graph [{:keys [locs mentions]} text]
4447
(let [canvas-size (. g (getPixelSize))]
4548
(. g (clear))
@@ -57,7 +60,8 @@
5760
(get edge-strokes mention-count max-stroke) nil))))
5861

5962
; Draw avatar nodes
60-
(doseq [[username {:keys [x y]}] locs]
63+
(doseq [[username {:keys [x y] :as foo}] locs]
64+
;(log (pr-str foo))
6165
(.drawImage g
6266
(- (unit-to-pixel x (.width canvas-size)) (/ avatar-size 2))
6367
(- (unit-to-pixel y (.height canvas-size)) (/ avatar-size 2))
@@ -71,31 +75,10 @@
7175
(.drawTextOnLine g text 5 20 (.width canvas-size) 20
7276
"left" font nil fill)))))
7377

74-
(def users (atom nil))
75-
(buzz/register :graph-update #(reset! users %))
78+
(buzz/register :graph-update #(draw-graph (layout/radial %) nil))
7679

7780
(def animation (atom nil))
7881

79-
(set! (.cycle animation)
80-
(fn [t]
81-
(let [a (first @animation)]
82-
(draw-graph (:best a) (debug a))
83-
(swap! animation #(drop anneal-skipping %))
84-
(when (= (:best a) (:best (first @animation)))
85-
; no better graph in the last 'anneal-skipping' steps, so quit trying.
86-
(anim/unregisterAnimation animation)))))
87-
88-
(defn start-anneal []
89-
(reset! animation
90-
(ann/anneal
91-
layout/score
92-
(ann/linear-cooling cooling)
93-
layout/permute-move
94-
ann/standard-prob
95-
(layout/init-state @users)))
96-
(anim/registerAnimation animation))
97-
98-
(events/listen
99-
(dom/getElement "network") (array events/EventType.CLICK) start-anneal)
100-
(buzz/register :track-clicked start-anneal)
101-
(buzz/register :refresh-clicked start-anneal)
82+
;(events/listen (dom/getElement "network") events/EventType.CLICK start-anneal)
83+
(buzz/register :track-clicked #(. g (clear)))
84+
;(buzz/register :refresh-clicked start-anneal)

samples/twitterbuzz/src/twitterbuzz/timeline.cljs

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,15 @@
77
; You must not remove this notice, or any other, from this software.
88

99
(ns twitterbuzz.timeline
10-
(:require [twitterbuzz.core :as core]
10+
(:require [twitterbuzz.core :as buzz]
1111
[goog.dom :as dom]))
1212

13-
(defn dom-element [element attrs]
14-
(dom/createDom (name element)
15-
(.strobj (reduce (fn [m [k v]]
16-
(assoc m k v))
17-
{}
18-
(map #(vector (name %1) %2) (keys attrs) (vals attrs))))))
19-
2013
(defn add-timeline-tweet [tweet]
2114
(let [parent (dom/getElement "timeline-content")
22-
child (dom-element :div {:class "tweet"})
23-
user (dom-element :div {:class "user-name"})
24-
text (dom-element :div {:class "tweet-text"})
25-
pic (dom-element :img {:src (:profile_image_url tweet) :class "profile-pic"})]
15+
child (buzz/dom-element :div {:class "tweet"})
16+
user (buzz/dom-element :div {:class "user-name"})
17+
text (buzz/dom-element :div {:class "tweet-text"})
18+
pic (buzz/dom-element :img {:src (:profile_image_url tweet) :class "profile-pic"})]
2619
(do (dom/insertChildAt text (dom/htmlToDocumentFragment (:text tweet)) 0) ;;(dom/setTextContent text (:text tweet))
2720
(dom/setTextContent user (:from_user tweet))
2821
(dom/appendChild child pic)
@@ -32,8 +25,9 @@
3225

3326
(defn update-timeline [tweets]
3427
(let [status (dom/getElement "tweet-status")]
35-
(do (dom/setTextContent status (str (:tweet-count @core/state) " tweets"))
28+
(do (dom/setTextContent status (str (:tweet-count @buzz/state) " tweets"))
3629
(doseq [tweet tweets]
3730
(add-timeline-tweet tweet)))))
3831

39-
(core/register :new-tweets update-timeline)
32+
(buzz/register :track-clicked #(buzz/remove-children "timeline-content"))
33+
(buzz/register :new-tweets update-timeline)

0 commit comments

Comments
 (0)