integ/js/vs/tweets/tweetsource.js
changeset 65 b13a409f01dc
parent 64 2937fe1ba865
child 66 a77532772aa4
--- a/integ/js/vs/tweets/tweetsource.js	Mon May 06 14:57:50 2013 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,268 +0,0 @@
-/* Author: Raphaƫl Velt, IRI
- * 
- * Licence: CeCILL-B - http://www.cecill.info/licences/Licence_CeCILL-B_V1-fr.html
- * 
- * */
-
-function regexpFromText(_text) {
-    return new RegExp('(' + _text.replace(/(\W)/gim,'\\$1') + ')','gim');
-}
-
-Btv_TweetArray = function() {
-    this.tweets = [];
-    this.idIndex = [];
-}
-
-Btv_TweetArray.prototype.push = function(_tweet) {
-    this.tweets.push(_tweet);
-    this.idIndex.push(_tweet.id_str);
-}
-
-Btv_TweetArray.prototype.setOnAdd = function(_callback) {
-    this.onAdd = _callback;
-}
-
-Btv_TweetArray.prototype.addTweet = function(_tweet) {
-    if (this.idIndex.indexOf(_tweet.id_str) != -1) {
-        return;
-    }
-    if (!_tweet.date_value) {
-        _tweet.date_value = Date.parse(_tweet.created_at.replace(/(\+|-)/,'UTC$1'));
-    }
-    var _pos = this.tweets.length;
-    while (_pos && this.idIndex[_pos - 1] > _tweet.id_str) {
-        _pos--;
-    }
-    this.tweets.splice(_pos,0,_tweet);
-    this.idIndex.splice(_pos,0,_tweet.id_str);
-    if (typeof this.onAdd == "function") {
-        this.onAdd(_tweet);
-    }
-}
-
-Btv_TweetArray.prototype.addMultipleTweets = function(_multiTweets) {
-    var _l = _multiTweets.length;
-    for (var _i = 0; _i < _l; _i++) {
-        this.addTweet(_multiTweets[_i], true);
-    }
-}
-
-Btv_TweetArray.prototype.count = function() {
-    return this.tweets.length;
-}
-
-Btv_TweetArray.prototype.tweetAtPos = function(_i) {
-    return this.tweets[_i];
-}
-
-Btv_TweetArray.prototype.slice = function(_start, _end) {
-    var _slice = this.tweets.slice(_start, _end),
-        _result = new Btv_TweetArray(),
-        _l = _slice.length;
-    for (var _i = 0; _i < _l; _i++) {
-        _result.push(_slice[_i]);
-    }
-    return _result;
-}
-
-Btv_TweetArray.prototype.reverse = function() {
-    var _result = new Btv_TweetArray(),
-        _l = this.tweets.length;
-    for (var _i = _l-1; _i >= 0; _i--) {
-        _result.push(this.tweets[_i]);
-    }
-    return _result;
-}
-
-Btv_TweetArray.prototype.each = function(_callback) {
-    var _l = this.count();
-    for (var _i = 0; _i < _l; _i++) {
-        _callback(this.tweets[_i]);
-    }
-}
-
-Btv_TweetArray.prototype.map = function(_callback) {
-    var _result = [];
-    this.each(function(_tweet) {
-        _result.push(_callback(_tweet))
-    });
-    return _result;
-}
-
-Btv_TweetArray.prototype.search = function(_filter) {
-    var _filtered = new Btv_TweetArray(),
-        _reFilter = regexpFromText(_filter);
-    this.each(function(_tweet) {
-        var _mention = '@' + _tweet.from_user;
-        if (( _tweet.text.search(_reFilter) != -1 ) || ( _mention.search(_reFilter) != -1 )) {
-            _filtered.push(_tweet);
-        }
-    });
-    return _filtered;
-}
-
-Btv_TweetArray.prototype.beforeDate = function(_date) {
-    var _filtered = new Btv_TweetArray();
-    this.each(function(_tweet) {
-        if (_tweet.date_value <= _date) {
-            _filtered.push(_tweet);
-        }
-    });
-    return _filtered;
-}
-
-Btv_TweetArray.prototype.afterDate = function(_date) {
-    var _filtered = new Btv_TweetArray();
-    this.each(function(_tweet) {
-        if (_tweet.date_value > _date) {
-            _filtered.push(_tweet);
-        }
-    });
-    return _filtered;
-}
-
-Btv_TweetArray.prototype.tweetById = function(_tweetId) {
-    var _index = this.idIndex.indexOf(_tweetId);
-    return (_index ? this.tweets[_index] : null);
-}
-
-Btv_TweetArray.prototype.lastTweet = function() {
-    return this.tweets[this.tweets.length - 1];
-}
-
-/*
- * 
- */
-
-Btv_TweetSource = function(_opts) {
-    Btv_TweetArray.call(this);
-    this.loading = false;
-    if (!_opts || !_opts.keywords || !_opts.keywords.length) {
-        return;
-    }
-    this.options = _opts;
-    var _this = this;
-    this.retrieveInitialTweets();
-    setInterval(function() {
-        _this.retrieveNewTweets();
-    }, 5000);
-}
-
-Btv_TweetSource.prototype = new Btv_TweetArray();
-
-Btv_TweetSource.prototype.retrieveTweets = function(_opts) {
-    
-    function getTwitterUrl(url) {
-        $.getJSON(url, function(data) {
-            _currentPage++;
-            var _isLast = true;
-            if (data.results && data.results.length) {
-                _this.addMultipleTweets(data.results);
-                var _oldestTweetId = data.results[data.results.length - 1].id_str,
-                    _maxId = _oldestTweetId;
-                if (_currentPage < _opts.pages) {
-                    _isLast = false;
-                    getTwitterUrl(_baseurl + _firstparams + '&max_id=' + _maxId + _lastparams);
-                }
-            }
-            
-            if (_isLast) {
-                _this.loading = false;
-                if (typeof _this.onNewTweets == "function") {
-                    _this.onNewTweets();
-                }
-            }
-        });
-    }
-    
-    
-    if (this.loading) {
-        return;
-    }
-    this.loading = true;
-    var _baseurl = "http://search.twitter.com/search.json",
-        _currentPage = 0,
-        _firstparams = "?q="
-            + encodeURIComponent(this.options.keywords.join(' OR '))
-            + "&rpp=100"
-            + (this.options.lang ? "&lang=" + this.options.lang : '' ),
-        _lastparams = ( _opts.since_id ? "&since_id=" + _opts.since_id : '' )
-            + "&callback=?",
-        _jsonurl = _baseurl + _firstparams + _lastparams,
-        _this = this;
-    getTwitterUrl(_jsonurl);
-    
-}
-
-Btv_TweetSource.prototype.retrieveInitialTweets = function() {
-    this.retrieveTweets({
-        "pages": 1
-    });
-}
-
-Btv_TweetSource.prototype.retrieveNewTweets = function() {
-    var _last = this.lastTweet();
-    this.retrieveTweets({
-        "pages": 1,
-        "since_id": _last ? _last.id_str : 0
-    });
-}
-
-Btv_TweetSource.prototype.setOnNewTweets = function(_callback) {
-    this.onNewTweets = _callback;
-}
-
-Btv_TweetQueueManager = function(_tweetArray, _callback) {
-    this.tweetArray = _tweetArray;
-    this.majorInterval = 10000; // Time slices for calculating the minor Interval setting
-    this.minimumInterval = 1000; // Safe limit to avoid tweets going to the wrong column
-    this.initialBuffer = 300000; // don't start with empty columns, but show the tweets of the last five minutes - 5 * 60 * 1000 = 300000
-    this.waitIfNoTweets = 2000;
-    this.callback = _callback;
-    this.lastEndTime = new Date().valueOf() - this.initialBuffer;
-    this.isPaused = false;
-    this.onMajorInterval();
-}
-
-Btv_TweetQueueManager.prototype.onMinorInterval = function() {
-    if (this.isPaused) {
-        this.waitMinorInterval();
-    } else {
-        var _l = this.currentSlice.count();
-        if (this.position < _l) {
-            this.callback(this.currentSlice.tweetAtPos(this.position));
-            this.position++;
-            this.waitMinorInterval();
-        } else {
-            this.onMajorInterval();
-        }
-    }
-}
-
-Btv_TweetQueueManager.prototype.waitMinorInterval = function() {
-    var _this = this;
-    window.setTimeout(function() {
-        _this.onMinorInterval();
-    }, this.minorInterval);
-}
-
-Btv_TweetQueueManager.prototype.onMajorInterval = function() {
-    this.position = 0;
-    this.currentSlice = this.tweetArray.afterDate(this.lastEndTime);
-    var _l = this.currentSlice.count();
-    if (_l) {
-        this.lastEndTime = this.currentSlice.tweetAtPos(_l - 1).date_value;
-        this.minorInterval = Math.floor(Math.max(this.minimumInterval, this.majorInterval / _l));
-        this.onMinorInterval();
-    } else {
-        var _this = this;
-        window.setTimeout(function() {
-            _this.onMajorInterval();
-        }, this.waitIfNoTweets);
-    }
-}
-
-Btv_TweetQueueManager.prototype.playPause = function() {
-    this.isPaused = !this.isPaused;
-    return this.isPaused;
-}