web/sweet-tweet/script.js
changeset 420 eb7c2cff1816
parent 415 593250f3a286
child 421 c8db83b70def
--- a/web/sweet-tweet/script.js	Fri Dec 16 10:39:51 2011 +0100
+++ b/web/sweet-tweet/script.js	Fri Dec 16 15:57:23 2011 +0100
@@ -1,12 +1,10 @@
-var AVATARWIDTH = 35,
-    COLUMNWIDTH = 2,
-    COLUMNHEIGHT = 420,
-    THRESHOLD = 24,
+var THRESHOLD = 12,
     DROPCOUNT = 12;
 
 var swTw = {
     "keyword" : "#enmi",
     "columns_words" : [
+        "politique",
         "confiance",
         "croyance",
         "crédit",
@@ -17,58 +15,57 @@
         "démocratie", 
         "expertise",
         "catastrophe",
-        "transparence", 
-        "politique"
+        "transparence"
     ],
     "tweets" : [],
     "tweetsIndex" : [],
+    "twInCol" : [],
     "firstDisplayedTweet" : 0,
     "cursor" : -1,
-/*    "annotations" : {
+    "annotations" : {
         "positive" : {
             "keyword" : "+",
             "colors" : {
                 "tweet" : "#c5e7cd",
-                "timeline" : "#00ff00"
+                "timeline" : "#1D973D"
             }
         },
         "negative" : {
             "keyword" : "-",
             "colors" : {
                 "tweet" : "#f6ced0",
-                "timeline" : "#ff0000"
+                "timeline" : "#CE0A15"
             }
         },
         "reference" : {
-            "keyword" : "#",
+            "keyword" : " #",
             "colors" : {
                 "tweet" : "#efefa1",
-                "timeline" : "#ffff00"
+                "timeline" : "#C5A62D"
             }
         },
         "question" : {
             "keyword" : "?",
             "colors" : {
                 "tweet" : "#bfdbec",
-                "timeline" : "#0000ff"
+                "timeline" : "#036AAE"
             }
         }
-} */
+    }
 }
 
-function highlightKeyword(stra, strb) {
+function highlightKeyword(stra, strb, color) {
     var rgxp = RegExp( '(' + strb.replace(/(\W)/gm, '\\$1') + ')', "gim");
-    return stra.replace(rgxp, '<span class="highlight">$1</span>');
+    return stra.replace(rgxp, '<span class="highlight" style="background:' + color + ';">$1</span>');
 }
 
 function highlightText(txt) {
-    var res = highlightKeyword(txt, swTw.keyword);
     res = swTw.columns_words.reduce(function(a, b) {
-        return highlightKeyword(a,b);
+        return highlightKeyword(a,b, '#333333');
+    }, txt);
+    res = _(swTw.annotations).reduce(function(a, b) {
+        return (b.keyword ? highlightKeyword(a,b.keyword,b.colors.timeline) : a);
     }, res);
-/*    res = _(swTw.annotations).reduce(function(a, b) {
-        return (b.keyword ? highlightKeyword(a,b.keyword) : a);
-    }, res); */
     return res;
 }
 
@@ -78,31 +75,21 @@
     }
     if (swTw.cursor < swTw.tweets.length - 1) {
         swTw.cursor = Math.max(swTw.cursor + 1, swTw.tweets.length - 120);
-        var nTweet = swTw.cursor;
+        var tweet = swTw.tweets[swTw.cursor],
+            html = '<img src="'
+                + tweet.profile_image_url
+                + '" /><p>@'
+                + tweet.from_user
+                + ' ('
+                + tweet.from_user_name
+                + ')'
+                + '</p><p class="tweet_text">'
+                + highlightText(tweet.text)
+                + '</p>';
+        $("#tweetcont").html(html)
     } else {
-        var nTweet = swTw.tweets.length - 1 - ~~( Math.random() * Math.min(swTw.tweets.length,50) );
+        $("#tweetcont").html("")
     }
-    var tweet = swTw.tweets[nTweet];
-    $("#tweetcont").html('<img src="'
-        + tweet.profile_image_url
-        + '" /><p>@'
-        + tweet.from_user
-        + ' ('
-        + tweet.from_user_name
-        + ')'
-        + '</p><p class="tweet_text">'
-        + highlightText(tweet.text)
-        + '</p>');
-/*    var bgcolor = '';
-    for (var i in swTw.annotations) {
-        if (swTw.annotations[i].keyword) {
-            if (tweet.text.indexOf(swTw.annotations[i].keyword) != -1) {
-                bgcolor = swTw.annotations[i].colors.tweet;
-                break;
-            }
-        }
-    } */
-    $("#tweetcont").css("background",bgcolor);
 }
 
 function dropOldTweets() {
@@ -112,26 +99,15 @@
            return _(col).without(tweet.id_str);
         });
         _(tweet.elements).each(function(elid) {
-            $("#" + elid).fadeOut(2000, function() {
+            $("#" + elid).animate({
+                "width": "0px"
+            },
+            2000,
+            function() {
                 $(this).detach();
-            });
+            })
         });
     });
-    
-    _(swTw.tweets.slice(_newPos)).each(function(tweet) {
-        _(tweet.elements).each(function(elid) {
-            var iword = parseInt(elid.split('_')[2]),
-                iel = swTw.twInCol[iword].indexOf(tweet.id_str),
-                posx = COLUMNHEIGHT - AVATARWIDTH * (1 + ~~( iel / COLUMNWIDTH)),
-                posy = AVATARWIDTH * (iel % COLUMNWIDTH);
-            $("#" + elid).delay(500).animate({
-                "top" : posy + "px",
-                "left" : posx + "px"
-            },
-            500);
-        });
-    });
-    console.log("fin");
     swTw.firstDisplayedTweet = _newPos;
 }
 
@@ -144,36 +120,30 @@
         tweet.elements = [];
         _(tweet.columns).each(function(word) {
             var iword = swTw.columns_words.indexOf(word),
-                tcl = swTw.twInCol[iword],
-                tclen = tcl.length;
-            var posx = COLUMNHEIGHT - AVATARWIDTH * (1 + ~~( tclen / COLUMNWIDTH)),
-                posy = AVATARWIDTH * (tclen % COLUMNWIDTH),
+                icol = ( swTw.twInCol[iword*2+1].length < swTw.twInCol[iword*2].length ? iword*2+1 : iword*2 ),
                 elid = 'avatar_' + tweet.id_str + '_' + iword,
-                bgcolor = '#999999';
-/*            for (var i in swTw.annotations) {
-                if (swTw.annotations[i].keyword) {
-                    if (tweet.text.indexOf(swTw.annotations[i].keyword) != -1) {
-                        bgcolor = swTw.annotations[i].colors.timeline;
-                        break;
-                    }
-                }
-        } */
-            $('#column_' + iword).append(
+                colA = swTw.colAnnot[iword],
+                ttl = 0;
+            _(swTw.annotations).each(function(v,k) {
+               if (tweet.text.indexOf(v.keyword) != -1) {
+                   colA[k]++;
+                   ttl++;
+               }
+            });
+            colA.total += Math.max(1,ttl);
+            $('#tube_' + icol).append(
                 '<div class="avatar" id="'
                 + elid
-                + '" style="left: -200px; top: '
-                + posy
-                + 'px; background: '
-                + bgcolor
-                + '"><img src="'
+                + '" style="margin-right: 500px;"><img src="'
                 + tweet.profile_image_url
                 + '" /></div>'
             );
             tweet.elements.push(elid);
-            tcl.push(tweet.id_str);
+            swTw.twInCol[icol].push(tweet.id_str);
             $("#" + elid).animate({
-                "left" : posx + "px"
-            }, 2000);
+                "margin-right" : "0px"
+            },
+            2000);
         })
         swTw.tweets.push(tweet);
         swTw.tweetsIndex.push(tweet.id_str);
@@ -183,6 +153,11 @@
     })) {
         dropOldTweets();
     }
+    _(swTw.colAnnot).each(function(colA, i) {
+        _(swTw.annotations).each(function(v, k) {
+           $("#polemic_" + i + "_" + k).css("width", ~~(100 * colA[k] / colA.total) + "%"); 
+        });
+    })
 }
 
 function retrieveTweets() {
@@ -191,7 +166,7 @@
         "lang" : "fr",
 //        "keyword" : "#enmi",
         "pages" : 1,
-        "rpp" : 50,
+        "rpp" : 100,
         "cbEnd" : function() {
             callbackTweets(this.tweets);
             }
@@ -240,20 +215,42 @@
         function(mot, i) {
             return '<div class="column" id="column_'
             + i
-            + '"><div class="column-tube"></div><div class="column-title"><h3>'
+            + '"><div class="column-tube"><div class="tube" id="tube_'
+            + (2*i)
+            + '"></div><div class="tube" id="tube_'
+            + (2*i+1)
+            + '"></div></div><div class="column-title">'
+            + _(swTw.annotations).map(function(v,k) {
+                return '<div class="polemicvol" id="polemic_' 
+                    + i
+                    + '_'
+                    + k
+                    + '" style="background:'
+                    + v.colors.timeline
+                    + '"></div>'
+            }).join('')
+            +'<h3>'
             + mot
             + '</h3></div></div>'
         }
     ).join("") );
-    
-   swTw.twInCol = swTw.columns_words.map(function() {
-       return [];
+   
+   for (var i = 0; i < swTw.columns_words.length * 2; i++) {
+       swTw.twInCol.push([]);
+   }
+   
+   swTw.colAnnot = swTw.columns_words.map(function() {
+      var res = { "total" : 0 }
+      _(swTw.annotations).map(function(v,k) {
+          res[k] = 0;
+      });
+      return res;
    });
    
    retrieveTweets();
    
-   setInterval(retrieveTweets,5000);
+   setInterval(retrieveTweets, 5000);
    
-   setInterval(nextTweet, 3000);
+   setInterval(nextTweet, 6000);
     
 });