client/js/twitter-bin.js
changeset 44 869410bab434
parent 42 48d825187d67
child 56 a9b9e6c7be63
--- a/client/js/twitter-bin.js	Tue Nov 13 11:46:39 2012 +0100
+++ b/client/js/twitter-bin.js	Fri Dec 21 16:22:08 2012 +0100
@@ -44,81 +44,110 @@
     this.refresh();
 }
 
+Rkns.Twitter.Bin.prototype.render = function(searchstr) {
+    var _rgxp = new RegExp('('+(searchstr || this.search).replace(/(\W)/g,'\\$1')+')','gi');
+    if (searchstr) {
+        var rxtest = new RegExp(searchstr.replace(/(\W)/g,'\\$1'),'i');
+    }
+    function highlight(_text) {
+        return _text.replace(_rgxp, "<span class='searchmatch'>$1</span>");
+    }
+    var _html = ""
+        _this = this,
+        count = 0;
+    Rkns._(this.data.results).each(function(_result) {
+        if (searchstr && !rxtest.test(_result.text)) {
+            return;
+        }
+        count++;
+        var _entities = [],
+            _users = _result.text.match(/@[\w_]+/gm),
+            _lastpos = 0;
+        if (_users) {
+            for (var _i = 0; _i < _users.length; _i++) {
+                var _m = _users[_i],
+                    _start = _lastpos + _result.text.substr(_lastpos).search(_m),
+                    _lastpos = _start + _m.length;
+                _entities.push({
+                    "text" : _m,
+                    "start" : _start,
+                    "end" : _lastpos,
+                    "link" :'<a href="http://twitter.com/' + _m.substr(1) + '" onclick="filtrerTexte(\'' + _m + '\'); return false;" target="_blank">',
+                });
+            }
+        }
+        var _hashes = _result.text.match(/([^&]|^)#[^\s,.!?=#@&;()]+/gm),
+            _lastpos = 0;
+        if (_hashes) {
+            for (var _i = 0; _i < _hashes.length; _i++) {
+                var _m = _hashes[_i],
+                    _h = ( _m[0] == '#' ? _m : _m.substr(1) ),
+                    _start = _lastpos + _result.text.substr(_lastpos).search(_h),
+                    _lastpos = _start + _h.length;
+                _entities.push({
+                    "text" : _h,
+                    "start" : _start,
+                    "end" : _lastpos,
+                    "link" :'<a href="http://twitter.com/search?q=' + encodeURIComponent(_h) + '" onclick="filtrerTexte(\'' + _.escape(_h) + '\'); return false;" target="_blank">',
+                });
+            }
+        }
+        
+        var _urls = _result.text.match(/(www\.|https?:\/\/)[\w./_\-]+/gim),
+            _lastpos = 0;
+        if (_urls) {
+            for (var _i = 0; _i < _urls.length; _i++) {
+                var _m = _urls[_i],
+                    _start = _lastpos + _result.text.substr(_lastpos).search(_m),
+                    _lastpos = _start + _m.length;
+                _entities.push({
+                    "text" : _m,
+                    "start" : _start,
+                    "end" : _lastpos,
+                    "link" :'<a href="' + _m + '" target="_blank">',
+                });
+            }
+        }
+        _entities = Rkns._(_entities).sortBy(function(a) { return a.start });
+        var _lastend = 0,
+            _text = Rkns._(_entities).map(function(_e) {
+                var _txt = highlight(_result.text.substring(_lastend, _e.start)) + _e.link + highlight(_e.text) + '</a>';
+                _lastend = _e.end;
+                return _txt;
+            }).join("") + highlight(_result.text.substring(_lastend));
+        
+        _html += _this.tweetTemplate({
+            tweet: _result,
+            date: new Date(_result.created_at.replace(/(\+|-)/,'UTC$1')).toLocaleString(),
+            text: _text
+        });
+    });
+    this.main_$.html(_html);
+    if (searchstr && count) {
+        this.count_$.text(count).show();
+    } else {
+        this.count_$.hide();
+    }
+    if (searchstr && !count) {
+        this.$.hide();
+    } else {
+        this.$.show();
+    }
+    _renkan.resizeBins();
+}
+
 Rkns.Twitter.Bin.prototype.refresh = function() {
     var _this = this;
     Rkns.$.ajax({
-        url: "http://search.twitter.com/search.json?q=" + encodeURIComponent(this.search),
+        url: "http://search.twitter.com/search.json",
         dataType: "jsonp",
+        data: {
+            q: this.search,
+            rpp: 100
+        },
         success: function(_data) {
-            var _rgxp = new RegExp('('+_this.search.replace(/(\W)/g,'\\$1')+')','gi');
-            function highlight(_text) {
-                return _text.replace(_rgxp, "<span class='searchmatch'>$1</span>");
-            }
-            var _html = Rkns._(_data.results).map(function(_result) {
-                var _entities = [],
-                    _users = _result.text.match(/@[\w_]+/gm),
-                    _lastpos = 0;
-                if (_users) {
-                    for (var _i = 0; _i < _users.length; _i++) {
-                        var _m = _users[_i],
-                            _start = _lastpos + _result.text.substr(_lastpos).search(_m),
-                            _lastpos = _start + _m.length;
-                        _entities.push({
-                            "text" : _m,
-                            "start" : _start,
-                            "end" : _lastpos,
-                            "link" :'<a href="http://twitter.com/' + _m.substr(1) + '" onclick="filtrerTexte(\'' + _m + '\'); return false;" target="_blank">',
-                        });
-                    }
-                }
-                var _hashes = _result.text.match(/([^&]|^)#[^\s,.!?=#@&;()]+/gm),
-                    _lastpos = 0;
-                if (_hashes) {
-                    for (var _i = 0; _i < _hashes.length; _i++) {
-                        var _m = _hashes[_i],
-                            _h = ( _m[0] == '#' ? _m : _m.substr(1) ),
-                            _start = _lastpos + _result.text.substr(_lastpos).search(_h),
-                            _lastpos = _start + _h.length;
-                        _entities.push({
-                            "text" : _h,
-                            "start" : _start,
-                            "end" : _lastpos,
-                            "link" :'<a href="http://twitter.com/search?q=' + encodeURIComponent(_h) + '" onclick="filtrerTexte(\'' + _.escape(_h) + '\'); return false;" target="_blank">',
-                        });
-                    }
-                }
-                
-                var _urls = _result.text.match(/(www\.|https?:\/\/)[\w./_\-]+/gim),
-                    _lastpos = 0;
-                if (_urls) {
-                    for (var _i = 0; _i < _urls.length; _i++) {
-                        var _m = _urls[_i],
-                            _start = _lastpos + _result.text.substr(_lastpos).search(_m),
-                            _lastpos = _start + _m.length;
-                        _entities.push({
-                            "text" : _m,
-                            "start" : _start,
-                            "end" : _lastpos,
-                            "link" :'<a href="' + _m + '" target="_blank">',
-                        });
-                    }
-                }
-                _entities = Rkns._(_entities).sortBy(function(a) { return a.start });
-                var _lastend = 0,
-                    _text = Rkns._(_entities).map(function(_e) {
-                        var _txt = highlight(_result.text.substring(_lastend, _e.start)) + _e.link + highlight(_e.text) + '</a>';
-                        _lastend = _e.end;
-                        return _txt;
-                    }).join("") + highlight(_result.text.substring(_lastend));
-                
-                return _this.tweetTemplate({
-                    tweet: _result,
-                    date: new Date(_result.created_at.replace(/(\+|-)/,'UTC$1')).toLocaleString(),
-                    text: _text
-                });
-            }).join("");
-            _this.main_$.html(_html);
-            _renkan.resizeBins();
+            _this.data = _data;
+            _this.render();
         }
     });
 }