tweetcast/gevent/client/js/script.js
author Raphael Velt <raph.velt@gmail.com>
Wed, 12 Oct 2011 18:11:19 +0200
changeset 311 13702105c5ee
permissions -rw-r--r--
Réorganisation de Tweetcast
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
311
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
     1
gtto = null;
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
     2
tweets = [];
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
     3
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
     4
function tweetToHtml(tweet) {
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
     5
	html = '<li class="tweet';
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
     6
	for (var i in tweet.annotations) {
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
     7
		html += ' a_' + tweet.annotations[i].name
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
     8
	}
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
     9
	html += '" id="tweet_' + tweet.id + '">';
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    10
	a_user = '<a href="http://twitter.com/"' + tweet.user.screen_name + ' target="_blank">';
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    11
	if (tweet.user.profile_image_url) {
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    12
		html += a_user + '<img class="tweet_profile_image" src="' + tweet.user.profile_image_url + '" /></a>';
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    13
	}
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    14
	html += '<h4>' + a_user + '@' + tweet.user.screen_name + '</a></h4><p class="tweet_created_at">' + tweet.created_at + '</p><p>';
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    15
	lastend = 0;
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    16
	txt = '';
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    17
	tweet.entities.sort(function(a, b) { return a.indice_start - b.indice_start });
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    18
	for (var i in tweet.entities) {
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    19
		txt += tweet.text.substring(lastend, tweet.entities[i].indice_start);
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    20
		lastend = tweet.entities[i].indice_end;
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    21
		switch(tweet.entities[i].type) {
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    22
			case "entity_hashtag":
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    23
				txt += '<a href="http://twitter.com/search?q=%23' + tweet.entities[i].entity.text + '" target="_blank">#' + tweet.entities[i].entity.text + '</a>';
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    24
				break;
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    25
			case "entity_user":
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    26
				txt += '<a href="http://twitter.com/' + tweet.entities[i].entity.screen_name + '" target="_blank">@' + tweet.entities[i].entity.screen_name + '</a>';
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    27
				break;
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    28
			case "entity_url":
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    29
			case "entity_media":
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    30
				txt += '<a href="' + tweet.entities[i].entity.expanded_url + '" target="_blank">' + tweet.entities[i].entity.expanded_url + '</a>';
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    31
				break;
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    32
		}
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    33
	}
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    34
	txt += tweet.text.substring(lastend);
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    35
	html += txt + '</p></li>';
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    36
	return html;
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    37
}
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    38
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    39
function scheduleTweets() {
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    40
	var tl = $("#tweetlist"), tc = $("#tweetcontainer");
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    41
	if (tweets.length != tl.children().length) {
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    42
		console.log("Tweet count error");
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    43
	}
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    44
	if (tweets.length) {
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    45
		while (tl.height() - (tc.scrollTop() + tc.height()) > 1000) {
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    46
			tl.children().last().detach();
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    47
			tweets.pop();
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    48
		}
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    49
		if (tl.height() - (tc.scrollTop() + tc.height()) < 120) {
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    50
			getTweets({
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    51
				before_id : tweets[tweets.length - 1].id,
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    52
				limit : 5
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    53
			});
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    54
		}
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    55
		getTweets({
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    56
			after_id : tweets[0].id
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    57
		});
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    58
	} else {
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    59
		getTweets({
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    60
			limit: 15
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    61
		});
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    62
	}
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    63
}
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    64
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    65
function getTweets(params) {
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    66
	$.getJSON("http://" + document.location.hostname + ":8888/?callback=?", params, function(data, a, b) {
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    67
		if (data.tweets && data.tweets.length) {
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    68
			var tl = $("#tweetlist"), tc = $("#tweetcontainer");
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    69
			html = '';
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    70
			for (var i in data.tweets) {
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    71
				html += tweetToHtml(data.tweets[i]);
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    72
			}
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    73
			if (params.before_id) {
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    74
				tl.append(html);
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    75
				tweets = tweets.concat(data.tweets);
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    76
			} else {
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    77
				var pos = tc.scrollTop(), fixScroll = (pos > 80);
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    78
				pos -= tl.height();
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    79
				tl.prepend(html);
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    80
				tweets = data.tweets.concat(tweets);
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    81
				if (fixScroll) {
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    82
					tc.scrollTop(tl.height() + pos);
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    83
				}
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    84
			}
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    85
		}
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    86
	});
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    87
}
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    88
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    89
$(document).ready(function() {
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    90
	gtto = setInterval(scheduleTweets, 1500);
13702105c5ee Réorganisation de Tweetcast
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    91
});