Merge with 5e1d7f77f3551ba422a171148a8b8db7d9797ac0
authorymh <ymh.work@gmail.com>
Tue, 21 Feb 2012 22:47:19 +0100
changeset 31 7b76d97e3051
parent 30 80040858c006 (current diff)
parent 27 5e1d7f77f355 (diff)
child 32 1e47b1f9f42d
Merge with 5e1d7f77f3551ba422a171148a8b8db7d9797ac0
client/js/tweetanim.js
--- a/client/compteur.html	Tue Feb 21 22:46:45 2012 +0100
+++ b/client/compteur.html	Tue Feb 21 22:47:19 2012 +0100
@@ -7,20 +7,25 @@
         <meta name="description" content="" />
         <link rel="stylesheet" href="css/base-metric.css" />
         <style type="text/css">
-            #container {
-                width: 300px;
-                height: 300px;
-                margin: 200px auto;
-                padding: 100px;
-                background: #0031ff;
-                color: #fff;
+        #container {
+            width: 312px;
+            height: 312px;
+            margin: 200px auto;
+            padding: 35px;
+            background: #0031ff;
+            color: #fff;
+        }
+        h1 {
+            font-size: 35px;
+        }
+		h2 {
+            font-size: 35px;
+			margin-top:120px;
+			line-height:35px;
             }
-            h1 {
-                font-size: 24px;
-            }
-            h2 {
-                font-size: 48px; font-weight: bold; margin: 20px 0;
-            }
+        h3 {
+            font-size: 122px; font-weight: bold; margin-left: 0px; line-height:120px;
+        }
         </style>
 
         <script type="text/javascript" src="lib/jquery.min.js"></script>
@@ -41,6 +46,8 @@
              * */
             var searchKeywords = ['Sarkozy', 'Hollande', 'Bayrou'];
             
+            var totalTweets = 0;
+            
             $(function() {
                 
                 myTweetSource = new Btv_TweetSource({
@@ -48,16 +55,27 @@
                 });
                 
                 myTweetSource.setOnNewTweets(function() {
-                    var _filtered = this.afterDate(startHour);
-                    $("#nbtweets").html(_filtered.count());
+                    totalTweets = this.afterDate(startHour).count();
                 });
+                
+                setInterval(function() {
+                    var _aff = parseInt($("#nbtweets").html());
+                    if (_aff < totalTweets) {
+                        if (_aff) {
+                            $("#nbtweets").html(1+_aff);
+                        } else {
+                            $("#nbtweets").html(totalTweets);
+                        }
+                    }
+                }, 200);
             });
         </script>
     </head>
     <body>
         <div id="container">
-            <h1>Total des tweets #LGW</h1>
-            <h2 id="nbtweets"></h2>
+            <h1>#LGW</h1>
+            <h2>Total des tweets</h2>
+            <h3 id="nbtweets">0</h3>
         </div>
 
     </body>
--- a/client/css/controlpanel.css	Tue Feb 21 22:46:45 2012 +0100
+++ b/client/css/controlpanel.css	Tue Feb 21 22:47:19 2012 +0100
@@ -8,9 +8,7 @@
     background-image: -ms-linear-gradient(right, rgb(224,224,224) 20%, rgb(250,250,250) 80%);
     top: 0; height: 100%;
     border-right: 4px solid #666666;
-}
-#btv-cp-container:hover {
-    left: 0;
+    z-index: 20;
 }
 .btv-cp-line {
     position: relative; width: 100%; height: 100%; margin: 0 auto;
@@ -54,6 +52,11 @@
 .btv-cp-tweet-from {
     font-weight: bold;
 }
+
+.btv-cp-tweet-remove {
+    background-position: -30px 0;
+}
+
 .btv-cp-liste-tweets li:hover {
     background: #00f; color: #fff;
 }
--- a/client/css/main.css	Tue Feb 21 22:46:45 2012 +0100
+++ b/client/css/main.css	Tue Feb 21 22:47:19 2012 +0100
@@ -1,17 +1,21 @@
+#canvas div {
+    z-index: 5;
+}
+
 #podium-container {
     position: absolute;
     width: 1480px;
-    top: 600px;
+    top: 700px;
     left: 400px;
 }
 #podium {
     width: 100%;
-    height: 300px;
+    height: 200px;
 }
 #podium-labels {
     position: absolute;
     width: 100%;
-    top: 320px;
+    top: 215px;
 }
 #podium-labels li {
     float: left;
@@ -23,7 +27,7 @@
 #podium-chiffres {
     position: absolute;
     width: 100%;
-    top: 240px;
+    top: 145px;
 }
 #podium-chiffres li {
     float: left;
@@ -47,17 +51,33 @@
     display: none;
 }
 .btv-bigtweet-image {
+    position: absolute;
     width: 100px;
     height: 100px;
-    margin: 0 30px 30px 0;
-    float: left;
 }
 .btv-bigtweet-screen-name {
-    font-weight: bold;
+    font-weight: bold; margin: -8px 0 0 140px;
 }
 .btv-bigtweet-name {
-    margin: 10px 0;
+    margin: 10px 0 20px 140px;
 }
 .btv-tweet-text {
     clear: both;
-}
\ No newline at end of file
+}
+
+#btv-tooltip {
+    display: none; position: absolute; z-index: 8; font-size: 20px; background: #0031ff; color: #ffffff;
+    width: 350px; padding: 10px; margin: -30px 0 0 -380px; border-right: 5px solid;
+}
+
+.btv-tooltip-arrow {
+    position: absolute; width: 35px; height: 50px; top: 30px; left: 370px; background: url('../img/tooltip-arrow.png');
+}
+
+.btv-tooltip-name {
+    font-weight: bold;
+}
+
+.btv-tooltip-image {
+    float: left; margin: 0 10px 10px 0;
+}
Binary file client/img/addshow.png has changed
Binary file client/img/tooltip-arrow.png has changed
--- a/client/js/main.js	Tue Feb 21 22:46:45 2012 +0100
+++ b/client/js/main.js	Tue Feb 21 22:47:19 2012 +0100
@@ -2,6 +2,13 @@
     myTweetSource,
     myQueueManager;
 
+var columnCounts,
+    onlineTweets = [],
+    dumpIsPaused = false;
+
+var MAX_TWEETS_BEFORE_DUMP = 20,
+    TWEETS_TO_DUMP_AT_ONCE = 10;
+
 function updateLastTweetList() {
     var _filtered = myTweetSource.afterDate(startHour),
         _txtFilter = $("#btv-cp-champ-filtre").val(),
@@ -9,6 +16,17 @@
     if (_txtFilter.length > 1) {
         _filtered = _filtered.search(_txtFilter);
         _reFilter = regexpFromText(_txtFilter);
+        for (var _i = 0; _i < onlineTweets.length; _i++) {
+            if (onlineTweets[_i].text.search(_reFilter) == -1) {
+                $('#'+onlineTweets[_i].id_str).fadeTo(250, 0.1);
+            } else {
+                $('#'+onlineTweets[_i].id_str).fadeTo(250, 1);
+            }
+        }
+    } else {
+        for (var _i = 0; _i < onlineTweets.length; _i++) {
+            $('#'+onlineTweets[_i].id_str).fadeTo(250, 1);
+        }
     }
     $('#btv-cp-liste-tweets-tout').html(
         _filtered.reverse().slice(0,20).map(function(_t) {
@@ -29,15 +47,16 @@
     var _t = myTweetSource.tweetById(tweetId);
     if (_t) {
         $("#btv-cp-liste-tweets-selection").prepend(
-            '<li onclick="showTweetOnScreen(\''
-                + _t.id_str
-                + '\'); return false;"><a title="Afficher sur l\'écran" href="#"><span class="btv-cp-tweet-date">'
-                + _t.created_at.match(/\d+:\d+:\d+/)[0]
-                + '</span> <span class="btv-cp-tweet-from">@'
-                + _t.from_user
-                + '</span> <span class="btv-cp-tweet-text">'
-                + _t.text
-                + '</span><div class="btv-cp-tweet-button btv-cp-tweet-show"></div></a></li>'
+            '<li><a title="Afficher sur l\'écran" href="#" onclick="showTweetOnScreen(\''
+            + _t.id_str
+            + '\'); return false;"><span class="btv-cp-tweet-date">'
+            + _t.created_at.match(/\d+:\d+:\d+/)[0]
+            + '</span> <span class="btv-cp-tweet-from">@'
+            + _t.from_user
+            + '</span> <span class="btv-cp-tweet-text">'
+            + _t.text
+            + '</span><div class="btv-cp-tweet-button btv-cp-tweet-show"></div></a>'
+            + '<a title="Supprimer de cette liste" href="#" onclick="$(this).parent().detach(); return false;"><div class="btv-cp-tweet-button btv-cp-tweet-remove"></div></a></li>'
         );
     }
 }
@@ -59,7 +78,41 @@
     }
 }
 
+function showTooltip(_t, _x, _y) {
+    $("#btv-tooltip").html('<img class="btv-tooltip-image" src="'
+        + _t.profile_image_url
+        + '" /><p class="btv-tooltip-name"><span>'
+        + _t.from_user
+        + '</span> (<span>'
+        + _t.from_user_name
+        +'</span>)</p><p>'
+        + _t.text
+        +'</p><div class="btv-tooltip-arrow"></div>').show().css({
+            "left": _x + "px",
+            "top": _y + "px",
+        })
+}
+
+function hideTooltip() {
+    $("#btv-tooltip").hide();
+}
+
+function showControlPanel() {
+    $("#btv-cp-container").dequeue().animate({
+            "left": 0
+        });
+}
+
+function hideControlPanel() {
+    $("#btv-cp-container").dequeue().animate({
+            "left": "-315px"
+        });
+}
+
 $(function() {
+    columnCounts = columnKeywords.map(function() {
+        return 0;
+    })
     setInterval(function() {
         var _t = Math.floor((new Date() - startHour)/1000),
             _s = _t % 60,
@@ -102,13 +155,39 @@
             }
         }
         if (_cat != -1) {
-            if (_cat == 2) {
-                console.log(_t.text);
+            _t.cat = _cat;
+            columnCounts[_cat]++;
+            onlineTweets.push(_t);
+            createBallTweetForce(_t);
+            if (!dumpIsPaused) {
+                for (var _i = 0; _i < columnCounts.length; _i++) {
+                    if (columnCounts[_cat] > MAX_TWEETS_BEFORE_DUMP) {
+                        var toDel = onlineTweets.splice(0,TWEETS_TO_DUMP_AT_ONCE);
+                        
+                        for (var _j = 0; _j < toDel.length; _j++) {
+                            var _id = toDel[_j].id_str;
+                            world.DestroyBody(b2bod[_id]);
+                            
+                            $('#'+_id).fadeTo(500, 0, function() {
+                                $(this).remove(); 
+                            });
+                        }
+                        
+                        // Regenerate column counts
+                        columnCounts = columnKeywords.map(function() {
+                            return 0;
+                        });
+                        for (var _k = 0; _k < onlineTweets.length; _k++) {
+                            columnCounts[onlineTweets[_k].cat]++;
+                        }
+                        break;
+                    }
+                }
             }
-            _t.cat = _cat;
-            createBallTweetForce(_t);
         }
-});
+    });
+    
+    $("#btv-cp-container").mouseover(showControlPanel).mouseout(hideControlPanel);
     
     $("#btv-cp-champ-filtre").keyup(function() {
         updateLastTweetList();
@@ -130,4 +209,14 @@
            $(this).removeClass("btv-cp-status-play");
        }
     });
+    $("#btv-cp-cont-pause-aval").click(function() {
+        dumpIsPaused = !dumpIsPaused
+        if (dumpIsPaused) {
+            $(this).removeClass("btv-cp-status-pause");
+            $(this).addClass("btv-cp-status-play");
+        } else {
+            $(this).addClass("btv-cp-status-pause");
+            $(this).removeClass("btv-cp-status-play");
+        }
+    });
 });
\ No newline at end of file
--- a/client/js/podium.js	Tue Feb 21 22:46:45 2012 +0100
+++ b/client/js/podium.js	Tue Feb 21 22:47:19 2012 +0100
@@ -25,8 +25,8 @@
 }
 
 Btv_Podium.prototype.update = function(data, noAnimate) {
-    var _data = data || [];
-    var i = 0;
+    var _data = data || [],
+        _oldcount = this._$.children().length;
     while (_data.length > this._$.children().length) {
         var _newCol = document.createElement("div");
         this.$(_newCol).css({
@@ -38,10 +38,6 @@
             "margin-left": 0
         });
         this._$.append(_newCol);
-        i++;
-        if (i > 10) {
-            break;
-        }
     }
     while (_data.length < this._$.children().length) {
         this._$.children().last().detach();
@@ -55,13 +51,16 @@
             _width = Math.floor(( this.options.width - (_data.length - 1) * _spacing) / _data.length),
             _this = this;
         this._$.children().each(function(_i, _e) {
-            var _height = _scale * _data[_i] + _this.options.minHeight,
-                _css = {
-                    "margin-top": _this.options.height - _height,
-                    "height": _height,
-                    "width": _width,
-                    "margin-left": (_i ? _spacing : 0)
-                }
+            var _height = Math.floor(_scale * _data[_i] + _this.options.minHeight),
+                _css = {};
+            if (_height != _this.$(_e).height()) {
+                _css["margin-top"] = _this.options.height - _height,
+                _css["height"] = _height
+            }
+            if (_data.length != _oldcount) {
+                _css["width"] = _width;
+                _css["margin-left"] = (_i ? _spacing : 0);
+            }
             if (noAnimate) {
                 _this.$(_e).css(_css); 
             } else {
--- a/client/js/tweetanim.js	Tue Feb 21 22:46:45 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,209 +0,0 @@
-var tweetQueue = [];
-var isAnimating = false;
-var countTweets = 0;
-var isPlayingTweets = false; // auto start
-var SPEED_TWEETS = 10;
-var MAX_VOTES = 25;
-var DUMP_TWEETS = 10;
-var toDel = [];
-
-var current_tweet = null;
-var current_past_tweet = 0;
-
-var ts = [];
-
-var b = 0;
-
-var defaultTweet = {
-  created_at: "Sun, 19 Feb 2012 19:12:15 +0000",
-  date_value: 1329678735000,
-  from_user: "chateaudeau",
-  from_user_id: 164810536,
-  from_user_id_str: "164810536",
-  from_user_name: "Olivia Duchâteau",
-  geo: null,
-  id: 171311150900854800,
-  id_str: "171311150900854784",
-  iso_language_code: "fr",
-  profile_image_url: "http://a2.twimg.com/profile_images/1481618117/clip_image00212_normal.jpg",
-  profile_image_url_https: "https://si0.twimg.com/profile_images/1481618117/clip_image00212_normal.jpg",
-  source: "&lt;a href=&quot;http://phnxapp.com&quot; rel=&quot;nofollow&quot;&gt;phnx&lt;/a&gt;",
-  text: "RT @LeProf_Higgins: Le carton rouge à Sarkozy, on a eu l'idée avant MLP mais le mien sera rouge, puis rose, mais pas brun !",
-  to_user: null,
-  to_user_id: null,
-  to_user_id_str: null,
-  to_user_name: null,
-};
-
-var TweetAnim = {
-
-  init: function() {
-  
-    var html = getDefaultTweet();
-    $('#tweet-container').fadeOut(0).html(html).fadeIn(2000, function() {
-      $(this).fadeOut(500,  function() {
-      isPlayingTweets=true;
-      $(this).html("").fadeIn();
-      });
-    });
-
-
-    
-   },
-  queueTweet: function(t) {
-    console.log("Queued " + t.text);
-    tweetQueue.push({t: t, anim: true}); 
-    $('#nbr-mesure-new').html(tweetQueue.length);
-    /*
-    if(tweetQueue.length>0)
-      document.getElementById('btn-tweet-next').style.visibility="visible";
-      */
-  },
-  
-  shiftQueue: function() {
-    if(tweetQueue.length==0) {
-        $('#tweet-container').html(getDefaultTweet());
-    }  
-    if((tweetQueue.length>0) && (!isAnimating)) {
-      countTweets++;
-      isAnimating = true;
-      var q = tweetQueue.shift();
-      this.showTweet(q.t, q.anim);
-
-    }
-
-  },
-  
-  skipQueue: function() {
-
-    if((tweetQueue.length>0) && (current_tweet!=null)) {
-      countTweets++;
-      isAnimating = true;
-      $('#tweet_anim_'+ current_tweet.id_str).dequeue();
-      TweetAnim.animate(current_tweet, true);
-      var q = tweetQueue.shift();
-      this.showTweet(q.t, true);
-    }
-  },
-  
-	showTweet: function(t, anim) {
-
-    var tweetId = "tweet_anim_" + t.id_str;
-    var imgId = "img_" + t.id_str;
-    
-    if(anim)
-      current_tweet = t;
-    
-    var htmlStr = "<div id='"+tweetId+"'><div class='tweet-bulle-avatar'>";
-    htmlStr += "  <img class='tweet-img-avatar' src='"+t.profile_image_url+"' id='"+imgId+"'/>";
-    htmlStr += "</div>";    
-    htmlStr += "<div class='tweet-preview-container'>";
-    htmlStr += "  <span class='tweet-screen-name'><a target='_blank' href='http://twitter.com/intent/user?screen_name="+t.from_user+"'>"+t.from_user+"</a></span>";    
-    htmlStr += "  <span class='tweet-full-name'>"+t.from_user_name+"</span>";
-    htmlStr += "  <div class='tweet-text'>"+t.text+"</div>";
-    htmlStr += "  <div class='tweet-time'><a target='_blank' href='http://twitter.com/#!/" + t.from_user + "/status/" +t.id_str+"'>"+t.created_at+"</div>";
-    htmlStr += "</div>";
-
-    $('#tweet-container').html(htmlStr);
-    $('#nbr-mesure-show').html(countTweets);
-    $('#nbr-mesure-new').html(tweetQueue.length);
-    /*
-    if(tweetQueue.length>0)
-      document.getElementById('btn-tweet-next').style.visibility="visible";
-    else 
-       document.getElementById('btn-tweet-next').style.visibility="hidden";
-*/
-        
-    if(anim) {
-      TweetAnim.animate(t, true);
-      
-      $('#'+tweetId).hover(function() {
-          $(this).stop(true, true).fadeIn();
-        }, function() {
-          TweetAnim.animate(t, true);
-      });
-    }
-	},
-	
-	animate: function(t, doSshift) {
-      var tweetId = "tweet_anim_" + t.id_str;
-
-    t.cat = t.from_user_id%4;
-    createBallTweetForce(t);
-
-    
-    // Pour expérimenter le balayage de tout le podium
-    //setInterval(function() {defaultTweet.cat = b%4; createBallTweetForce(defaultTweet); b++;}, 500);
-
-
-
- isAnimating = false;
-  if(doSshift)
-  TweetAnim.shiftQueue();
-          
-/*             
-        toDel.push(t);
-        current_past_tweet = toDel.length;
-        ts[t.candidats[0]]++;
-        checkSilos();
-  */      
-	}
-}
-
-
-function getDefaultTweet() {
-
-  var htmlStr = "<div class='tweet-bulle-avatar'>";
-  htmlStr += "  <img class='tweet-img-avatar' src='img/avatar-icon.png' />";
-  htmlStr += "  </div>";
-  htmlStr += "  <div class='tweet-preview-container'>";
-  htmlStr += "  <span class='tweet-screen-name'><a target='_blank' href='http://twitter.com/intent/user?screen_name=bubbleT2012'>Bubble T</a></span>";
-  htmlStr += "  <span class='tweet-full-name'>tea or tweet ?</span>";
-  htmlStr += "  <div class='tweet-text'>";
-  htmlStr += "  <a href='http://www.twitter.com' target='blank'>";
-  htmlStr += "  Pendant que les prochains tweets se chargent.</br>";
-  htmlStr += "  Exprimez, vous aussi, vos opinions sur vos candidats favoris !</a>";
-  htmlStr += "  </div>";
-  htmlStr += "  <div class='tweet-time'>maintenant</div>";
-  
-  return htmlStr;
-      
-}
-
-function checkSilos() {
-
-  for(var j=0; j<ts.length; j++) {
-    if(ts[j]>MAX_VOTES) {
-      j=ts.length+1;
-      emptySilos();
-    }
-  }
-}
-
-
-function emptySilos() {
-
-    var toDel2 = [];
-    var m =0;
-
-    for(var k=0; k<DUMP_TWEETS; k++) {
-      world.DestroyBody(b2bod[toDel[k].id_str]);
-      $('#'+toDel[k].id_str).delay(10).hide("slow").queue(function() {
-        $(this).remove(); 
-      });
-    }
-    
-    for(var h= 0; h < candidats.length; h++) {
-     ts[h] = 0;
-    }
-
-    for(var l=DUMP_TWEETS; l<toDel.length; l++) {
-      toDel2[l-DUMP_TWEETS] = toDel[l];
-      ts[toDel2[l-DUMP_TWEETS].candidats[0]]++;  
-    }
-
-    toDel = toDel2;
-    current_past_tweet=toDel.length;
-}
-
-TweetAnim.init();
--- a/client/js/tweetsource.js	Tue Feb 21 22:46:45 2012 +0100
+++ b/client/js/tweetsource.js	Tue Feb 21 22:47:19 2012 +0100
@@ -5,7 +5,7 @@
  * */
 
 function regexpFromText(_text) {
-    return new RegExp(_text.replace(/\W/gim,'\\$1'),'gim');
+    return new RegExp('(' + _text.replace(/\W/gim,'\\$1') + ')','gim');
 }
 
 Btv_TweetArray = function() {
--- a/client/js/tweetvote-anim.js	Tue Feb 21 22:46:45 2012 +0100
+++ b/client/js/tweetvote-anim.js	Tue Feb 21 22:47:19 2012 +0100
@@ -6,12 +6,10 @@
 var stage = [195, 250, 1150, 835]   //     bottom
 var b2bod = [];
 
-var BALL_SIZE = 40;
-              
 var worldAABB, world, iterations = 1, timeStep = 1 / 20;
 
 var walls = [];
-var wall_thickness = 10;
+var wall_thickness = 20;
 var wallsSetted = false;
 
 var bodies, elements, text;
@@ -38,28 +36,9 @@
 
 init();
 play();
-/*
-listLastTweets();
-getInitialTweets();
-TweetAnim.shiftQueue();
-*/
+
 function init() {
-/*
-	var canvas = document.getElementById('tube-container');
-  canvas.onmousedown = onDocumentMouseDown;
-	canvas.onmouseup = onDocumentMouseUp;
-	canvas.onmousemove = onDocumentMouseMove;
-  
-	var canvas = document.getElementById('canvas');
-  canvas.onmousedown = onDocumentMouseDown;
-	canvas.onmouseup = onDocumentMouseUp;
-	canvas.onmousemove = onDocumentMouseMove;  
 
-  var canvas = document.getElementById('btn-tweet-next');
-  canvas.onmousedown = onDocumentMouseDown;
-	canvas.onmouseup = onDocumentMouseUp;
-	canvas.onmousemove = onDocumentMouseMove;  
-  */
 	worldAABB = new b2AABB();
 	worldAABB.minVertex.Set( -200, -200 );
 	worldAABB.maxVertex.Set( window.innerWidth + 200, window.innerHeight + 200 );
@@ -95,70 +74,6 @@
 	elements = [];
 }
 
-function onDocumentMouseDown() {
-  isMouseDragging = false;
-	isMouseDown = true;
-	return false;
-}
-
-function onDocumentMouseUp() {
-	isMouseDown = false;
-	return false;
-}
-
-function onDocumentMouseMove( event ) {
-
-  if(isMouseDown)
-    isMouseDragging = true;
-	mouse.x = event.clientX;
-	mouse.y = event.clientY;
-	
-}
-
-function onDocumentTouchStart( event ) {
-
-		
-
-	if( event.touches.length == 1 ) {
-
-		event.preventDefault();
-
-		// Faking double click for touch devices
-
-		var now = new Date().getTime();
-
-		if ( now - timeOfLastTouch  < 250 ) {
-
-			reset();
-			return;
-		}
-
-		timeOfLastTouch = now;
-
-		mouse.x = event.touches[ 0 ].pageX;
-		mouse.y = event.touches[ 0 ].pageY;
-		isMouseDown = true;
-	}
-}
-
-function onDocumentTouchMove( event ) {
-
-	if (event.touches.length == 1) {
-
-		event.preventDefault();
-		mouse.x = event.touches[ 0 ].pageX;
-		mouse.y = event.touches[ 0 ].pageY;
-	}
-}
-
-function onDocumentTouchEnd( event ) {
-
-	if (event.touches.length == 0) {
-		event.preventDefault();
-		isMouseDown = false;
-	}
-}
-
 function loop() {
 
 	delta[0] += (0 - delta[0]) * .5;
@@ -166,7 +81,6 @@
 	world.m_gravity.x = gravity.x * 350 + delta[0];
 	world.m_gravity.y = gravity.y * 350 + delta[1];
 
-	mouseDrag();
 	world.Step(timeStep, iterations);
 
 	for (i = 0; i < bodies.length; i++) {
@@ -174,23 +88,15 @@
 		var element = elements[i];
 		element.style.left = (body.m_position0.x - (element.width >> 1)) + 'px';
 		element.style.top = (body.m_position0.y - (element.height >> 1)) + 'px';
-
-		if (element.tagName == 'DIV') {
-			var rotationStyle = 'rotate(' + (body.m_rotation0 * 57.2957795) + 'deg)';
-			text.style.WebkitTransform = rotationStyle;
-			text.style.MozTransform = rotationStyle;
-			text.style.OTransform = rotationStyle;
-			text.style.msTransform = rotationStyle;
-		}
 	}
 }
 
 function createBox(world, x, y, width, height, fixed) {
 
-var c=document.createElement('canvas');
-var ctx=c.getContext("2d");
-ctx.fillStyle="#FF0000";
-ctx.fillRect(0,0,1500,750);
+  var c=document.createElement('canvas');
+  var ctx=c.getContext("2d");
+  ctx.fillStyle="#FF0000";
+  ctx.fillRect(0,0,1500,750);
 
 	if (typeof(fixed) == 'undefined') {
 		fixed = true;
@@ -207,49 +113,10 @@
 	boxBd.AddShape(boxSd);
 	boxBd.position.Set(x,y);
 
-  
 	return world.CreateBody(boxBd);
 }
 
-function mouseDrag()
-{
-	// mouse press
-	if (createMode) {
 
-	} else if (isMouseDown && !mouseJoint) {
-
-		var body = getBodyAtMouse();
-
-		if (body) {
-			var md = new b2MouseJointDef();
-			md.body1 = world.m_groundBody;
-			md.body2 = body;
-			md.target.Set(mouse.x, mouse.y);
-			md.maxForce = 30000 * body.m_mass;
-			md.timeStep = timeStep;
-			mouseJoint = world.CreateJoint(md);
-			body.WakeUp();
-		} else {
-			createMode = true;
-		}
-	}
-
-	if (!isMouseDown) { // mouse release
-
-		createMode = false;
-		destroyMode = false;
-
-		if (mouseJoint) {
-			world.DestroyJoint(mouseJoint);
-			mouseJoint = null;
-		}
-	}
-	
-	if (mouseJoint) { // mouse move
-		var p2 = new b2Vec2(mouse.x, mouse.y);
-		mouseJoint.SetTarget(p2);
-	}
-}
 
 function getBodyAtMouse() {
 
@@ -290,74 +157,42 @@
 		walls[2] = null;
 		walls[3] = null;
 	} else {
-  
-  wall_thickness = 20;
-  
-  walls[0] = createBox(world, 1910, 900, wall_thickness, 900); //  rightmost wall
-  walls[1] = createBox(world, 1540, 600, wall_thickness, 300); //  wall 4 / 3
-  
-  walls[2] = createBox(world, 1160, 600, wall_thickness, 300); //  wall 3 / 2
-  walls[3] = createBox(world, 790, 600, wall_thickness, 300); //   wall 2 / 1
-  walls[4] = createBox(world, 420, 600, wall_thickness, 300); //   leftmostwall    
- 
-  walls[5] = createBox(world, 580, 600, 170, 10); //  4    
-  walls[6] = createBox(world, 950, 750, 170, 10); //  3   
-  walls[7] = createBox(world, 1320, 750, 170, 10); //  2   
-  walls[8] = createBox(world, 1690, 600, 170, 10); //  1   
-  
-  setInterval(function() {
-  
-    if($('#podium div').size() > 0) {
-      
-      $('#podium div').each( function(idx, panel) {
-     
-      var idxWall = 5+idx;
-      var yWall = 945-$(this).height();
-      world.DestroyBody(walls[idxWall]);
-      walls[idxWall] = createBox(world, 580+370*idx, yWall, 170, 10);      
-      
-      });
-    }
-  }, 1000);
-  
-//  walls[6] = createBox(world, 1340, 800, 170, 10); //  3 
-  
-  /*
-  setInterval(function() {
+    
+    walls[0] = createBox(world, 1910, 900, wall_thickness, 900); //  rightmost wall
+    walls[1] = createBox(world, 1540, 600, wall_thickness, 300); //  wall 4 / 3
+    
+    walls[2] = createBox(world, 1160, 600, wall_thickness, 300); //  wall 3 / 2
+    walls[3] = createBox(world, 790, 600, wall_thickness, 300); //   wall 2 / 1
+    walls[4] = createBox(world, 420, 600, wall_thickness, 300); //   leftmostwall    
+   
+    walls[5] = createBox(world, 580, 600, 170, 10); //  4    
+    walls[6] = createBox(world, 950, 750, 170, 10); //  3   
+    walls[7] = createBox(world, 1320, 750, 170, 10); //  2   
+    walls[8] = createBox(world, 1690, 600, 170, 10); //  1   
     
-    var tmp = walls[5].m_position.y;
-    world.DestroyBody(walls[5]);
-    walls[5] = createBox(world, 1690, tmp-1, 170, 10, true);
-  
-    console.log(walls[5].m_position.y);
-
-  }, 1000);
-  */
-
-  /*
-    walls[0] = createBox(world, stage[0] , stage[3] + wall_thickness-32, stage[2], wall_thickness); // bottom wall
+    setInterval(function() {
     
-    walls[2] = createBox(world, stage[2]-400, 850, 50, 100); // middle wall
-    
-   // walls[3] = createBox(world, stage[2]-400, 100, wall_thickness, 700); // right wall
-    walls[3] = createBox(world, 300, 800, 100, 200); // left wall
-/*
-    for (var i = 0; i < candidats.length; i++) { // drawing silos walls
-      createBox(world, (stage[2]/candidats.length*i)-(wall_thickness/3), stage[3], wall_thickness/3, 200);
-    }
-    */
+      // Check if div podiums are already loaded
+      if($('#podium div').size() > 0) {
+        
+        $('#podium div').each( function(idx, panel) {
+       
+          var idxWall = 5+idx;
+          var yWall = 920-$(this).height();
+          world.DestroyBody(walls[idxWall]);
+          walls[idxWall] = createBox(world, 580+370*idx, yWall, 170, 10);      
+        
+        });
+      }
+    }, 1000);
   }
 }
 
 function  createBallTweetForce(t) {
 
-
-	var xpos = 40;
-  var ypos = 70;
-   
 	var element = document.createElement( 'div' );
-	element.width = BALL_SIZE;
-	element.height = BALL_SIZE;	
+	element.width = 96;
+	element.height = 96;	
 	element.style.position = 'absolute';
 	element.style.left = -200 + 'px';
 	element.style.top = -200 + 'px';
@@ -366,93 +201,39 @@
 	element.id = t.id_str;
   
   var id = "tweet_"+bodies.length;
-var canvas = document.getElementById( 'canvas' );
+  var canvas = document.getElementById('canvas');
 	canvas.appendChild(element);
 	elements.push( element );
 
-	$("#"+t.id_str).mouseover(function() {
-		
-		$(this).fadeTo(250, 0.1);
-		$("#tooltip-bulle .tweet-screen-name").text(t.from_user);
-		$("#tooltip-bulle .tweet-full-name").text(t.from_user_name);
-		$("#tooltip-bulle .tweet-text").text(t.text);
-		$("#tooltip-bulle .tweet-time").text(t.created_at);
-		$("#tooltip-bulle .tweet-img-avatar").attr( 'src' , t.profile_image_url );
-		var thisX = parseInt($(this).css('left'),10)+10;
-//		console.log(thisX);//visibility:hidden
-		 $('#bulle-tooltip-template').css('visibility','visible');
-		 //$('#bulle-tooltip-template').css('top', thisX).css('left', thisY);
-		$(this).css('cursor','pointer');
-		if(thisX<960/2){
-			$('#accolade-left').css('visibility','visible');
-		}else{
-			$('#accolade-right').css('visibility','visible');
-		}
-	    
-	});
-  
-	$("#"+t.id_str).mouseout(function() {
-		 $('#bulle-tooltip-template').css('visibility','hidden');
-			$('#accolade-right').css('visibility','hidden');
-			$('#accolade-left').css('visibility','hidden');
-		$(this).css('cursor','auto');
-		
-		$(this).dequeue();
-		$(this).fadeTo(250, 0.8);
-	});
-   
-  $("#"+t.id_str).click(function() {
-		if(!isMouseDragging) {
-            fancyBoxTwitter(t.from_user, (t.candidats && t.candidats.length ? candidats[t.candidats[0]].couleur : '#666699'));
-//      window.open("https://twitter.com/#!/"+t.from_user+"/status/"+t.id_str);
-    }
-  });
-
   BALL_SIZE = 150;
   
   var circle = document.createElement('canvas');
-  circle.width = BALL_SIZE;
-  circle.height = BALL_SIZE;
+  circle.width = 96;
+  circle.height = 96;
 
   var offset = (48 - BALL_SIZE)/2;
   
   var graphics = circle.getContext('2d');
-  		graphics.fillStyle = "white";
-		graphics.beginPath();
-		graphics.arc(BALL_SIZE* .25+10, BALL_SIZE* .25, BALL_SIZE* .25, 0, PI2, true); 
-		graphics.closePath();
-		graphics.fill();
+  graphics.fillStyle = "white";
+  graphics.beginPath();
+  graphics.arc(BALL_SIZE* .25+10, BALL_SIZE* .25, BALL_SIZE* .25, 0, PI2, true); 
+  graphics.closePath();
+  graphics.fill();
     
   graphics.fillStyle = "#E2F0D6";
   graphics.beginPath();
   graphics.arc(BALL_SIZE * .5 +offset+24, BALL_SIZE * .5+offset+14, BALL_SIZE * .20, 0, PI2, true);
   graphics.closePath();
   graphics.fill();
-
-  var size = BALL_SIZE;
-//	for (var i = size; i > 0; i-= (size/10)) {
-
-
-
-    //	}
-  
-  /* ORIGIN
-    graphics.fillStyle = "#E2F0D6";
-  graphics.beginPath();
-  graphics.arc(BALL_SIZE * .5 +offset, BALL_SIZE * .5+offset, BALL_SIZE * .25, 0, PI2, true);
-  graphics.closePath();
-  graphics.fill();
-
-  */
   
   var img = new Image();
   img.src = t.profile_image_url;
 
   img.onload = function(){
-  
+
+    // Resize image
     var canvasCopy = document.createElement("canvas");
     var copyContext = canvasCopy.getContext("2d");
-    
     canvasCopy.width = 96;
     canvasCopy.height = 96;
     copyContext.drawImage(img, 0, 0, 96, 96);
@@ -460,109 +241,80 @@
     var ptrn = graphics.createPattern(canvasCopy,'no-repeat');
     graphics.fillStyle = ptrn;
     graphics.fill(-5,0,150,150);
-
   }
   
-  
-  
-	element.appendChild( circle );
+	element.appendChild(circle);
 
-	text = document.createElement( 'div' );
-	text.onSelectStart = null;
-	text.style.color = "#95AB63";
-	text.style.position = 'absolute';
-	text.style.left = '0px';
-	text.style.top = '0px';
-	text.style.fontFamily = 'Georgia';
-	text.style.textAlign = 'center';
-	element.appendChild(text);
-  
 	var circle = new b2CircleDef();
 	circle.radius = BALL_SIZE/4+2 ;
 	circle.density = 1;
 	circle.friction = 0.3;
 	circle.restitution = 0.3;
-  
-	var b2body = new b2BodyDef();  
-	b2body.AddShape(circle);
-	b2body.userData = {element: element};
-	b2body.position.Set( xpos, ypos);
-  
-  var a, b;
+
+  var a, b, xpos, ypos;
 
   switch (t.cat) { 
     case 0: // 1
-      a = 150;
+      a = 250;
       b = -100;
+      xpos = 40;
+      ypos = 250;
       break; 
     case 1: // 2
       a = 250;
       b = -150;
+      xpos = 40;
+      ypos = 70;      
       break; 
     case 2: // 3
-      a = 350;
-      b = -100;
+      a = 290;
+      b = -180;
+      xpos = 40;
+      ypos = 100;    
       break; 
     case 3: // 4
-      a = 390;
-      b = -180;
-      break;     
-       /*
-    case 4: // Jean-Pierre Chevènement
-      a = 390;
+      a = 400;
       b = -180;
-      break;    
-     
-    case 5: // Eva Joly
-      a = 170;
-      b = -30;
-      break;   
-    case 6:  // Corinne Lepage
-      a = 200;
-      b = -40;
-      break;    
-    case 7: //  François Bayrou
-      a = 200;
-      b = -60;
-      break;  
-    case 8: // Hervé Morin
-      a = 230;
-      b = -60;
-      break;        
-    case 9: //  Dominique de Villepin 
-      a = 260;
-      b = -60;
-      break;       
-     case 10: // Nicolas Sarkozy 
-      a = 290;
-      b = -60;
+      xpos = 40;
+      ypos = 150;      
       break;     
-     case 11: //  Nicolas Dupont-Aignan
-      a = 300;
-      b = -70;
-      break;         
-     case 12: // Frederic Nihous 
-      a = 320;
-      b = -70;
-      break;   
-     case 13: // Christine Boutin
-      a = 350;
-      b = -70;
-      break;   
-     case 14: // Marine Le pen
-      a = 390;
-      b = -80;
-      break;   
-    
     default:
       a = 390;
       b = -180;
-      console.log("default impulse!");
+      xpos = 40;
+      ypos = 70;      
+      console.log("DEFAULT IMPULS PARAMS! Should not be there..");
       break; 
-        */
   }
 
+  var b2body = new b2BodyDef();  
+	b2body.AddShape(circle);
+	b2body.userData = {element: element};
+	b2body.position.Set( xpos, ypos);
+  
   b2body.linearVelocity.Set(a, b);
   b2bod[t.id_str] = world.CreateBody(b2body);
+  console.log("created " + t.id_str)
 	bodies.push(b2bod[t.id_str]);	
+
+	$("#"+t.id_str).mouseover(function() {
+	    var _of = $(this).offset();
+	    $(this).css({
+	        "cursor": "pointer"
+	    });
+	    showTooltip(t, _of.left, _of.top);  
+	}).mouseout(hideTooltip).click(function() {
+        addTweetToSelection(t.id_str);
+	    $(this).fadeTo(100,.25, function() {
+	        $(this).fadeTo(100,1);
+	        showControlPanel();
+	    })
+	});
+   
+/*  $("#"+t.id_str).click(function() {
+		if(!isMouseDragging) {
+            fancyBoxTwitter(t.from_user, (t.candidats && t.candidats.length ? candidats[t.candidats[0]].couleur : '#666699'));
+//      window.open("https://twitter.com/#!/"+t.from_user+"/status/"+t.id_str);
+    }
+  });   */
 }
\ No newline at end of file
--- a/client/main.html	Tue Feb 21 22:46:45 2012 +0100
+++ b/client/main.html	Tue Feb 21 22:47:19 2012 +0100
@@ -13,7 +13,6 @@
         
         <script type="text/javascript" src="lib/protoclass.js"></script>              
         <script type="text/javascript" src="lib/box2d.js"></script>
-        <script type="text/javascript" src="js/tweetanim.js"></script>
         <script type="text/javascript" src="js/tweetvote-anim.js"></script>     
         <script type="text/javascript" src="js/podium.js"></script>
         <script type="text/javascript" src="js/tweetsource.js"></script>
@@ -38,8 +37,7 @@
         </script>
     </head>
     <body>
-         <div id="canvas" width="6000" height="2000" style="background-color:#333333;" ></div>
-
+        <div id="canvas" width="3000" height="2000" style="background-color:#333333;" ></div>
         <div id="btv-global-container">
             <div id="btv-cp-container">
                 <div class="btv-cp-line">
@@ -89,6 +87,8 @@
             </div>
             <div id="btv-bigtweet">
             </div>
+            <div id="btv-tooltip">
+            </div>
         </div>
 
     </body>