tweetcast/nodejs/client/js/script.js
author Raphael Velt <raph.velt@gmail.com>
Mon, 17 Oct 2011 17:40:58 +0200
changeset 325 7d9c576bfaac
parent 314 0f1e6ce19b6d
child 326 c28048fb63b4
permissions -rw-r--r--
Some changes - added multi-zoom level on client
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
314
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
     1
var socket,
325
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
     2
    tweetData = {
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
     3
        "tweetcount" : 0,
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
     4
        "position" : -1,
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
     5
        "zoomLevel" : 3,
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
     6
        "timeLevel" : 2
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
     7
    }
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
     8
    zoomLevels = [
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
     9
        {
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    10
            "description" : "160 tweets per page",
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    11
            "className" : "icons",
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    12
            "displayCount" : 160
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    13
        },
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    14
        {
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    15
            "description" : "24 tweets per page",
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    16
            "className" : "quarter",
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    17
            "displayCount" : 24
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    18
        },
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    19
        {
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    20
            "description" : "12 tweets per page",
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    21
            "className" : "half",
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    22
            "displayCount" : 12
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    23
        },
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    24
        {
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    25
            "description" : "6 tweets per page",
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    26
            "className" : "full",
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    27
            "displayCount" : 6
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    28
        }
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    29
    ];
314
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    30
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    31
function tweetToHtml(tweet) {
325
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    32
	html = '<li class="tweet ' + zoomLevels[tweetData.zoomLevel].className;
314
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    33
	for (var i in tweet.annotations) {
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    34
		html += ' a_' + tweet.annotations[i]
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    35
	}
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    36
	html += '" id="tweet_' + tweet.id + '">';
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    37
	a_user = '<a href="http://twitter.com/' + tweet.user.screen_name + '" target="_blank" title="' + tweet.user.name + '">';
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    38
	if (tweet.user.profile_image_url) {
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    39
		html += a_user + '<img class="tweet_profile_image" src="' + tweet.user.profile_image_url + '" /></a>';
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    40
	}
325
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    41
	html += '<h4>' + a_user + '@' + tweet.user.screen_name + '</a></h4><p class="tweet_created_at">' + new Date(tweet.created_at).toLocaleTimeString() + '</p><p>';
314
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    42
	lastend = 0;
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    43
	txt = '';
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    44
	entities = [];
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    45
	for (var i in tweet.entities.hashtag) {
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    46
	    entities.push({
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    47
	        "start" : tweet.entities.hashtag[i].indices[0],
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    48
	        "end" : tweet.entities.hashtag[i].indices[1],
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    49
	        "html" : '<a href="http://twitter.com/search?q=%23' + tweet.entities.hashtag[i].text + '" target="_blank">#' + tweet.entities.hashtag[i].text + '</a>'
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    50
	    });
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    51
	}
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    52
	for (var i in tweet.entities.urls) {
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    53
	    entities.push({
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    54
	        "start" : tweet.entities.urls[i].indices[0],
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    55
	        "end" : tweet.entities.urls[i].indices[1],
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    56
	        "html" : '<a href="' + tweet.entities.urls[i].expanded_url + '" target="_blank">' + tweet.entities.urls[i].display_url + '</a>'
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    57
	    });
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    58
	}
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    59
	for (var i in tweet.entities.user_mentions) {
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    60
	    entities.push({
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    61
	        "start" : tweet.entities.user_mentions[i].indices[0],
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    62
	        "end" : tweet.entities.user_mentions[i].indices[1],
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    63
	        "html" : '<a href="http://twitter.com/' + tweet.entities.user_mentions[i].screen_name + '" target="_blank" title="' + tweet.entities.user_mentions[i].name + '">@' + tweet.entities.user_mentions[i].screen_name + '</a>'
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    64
	    });
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    65
	}
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    66
 	entities.sort(function(a, b) { return a.start - b.start });
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    67
    for (var i in entities) {
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    68
 		txt += tweet.text.substring(lastend, entities[i].start) + entities[i].html;
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    69
        lastend = entities[i].end;
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    70
    }
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    71
	txt += tweet.text.substring(lastend);
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    72
	html += txt + '</p></li>';
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    73
	return html;
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    74
}
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    75
325
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    76
function getTweets() {
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    77
    var to = tweetData.position + 1,
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    78
        from = Math.max(0, to - zoomLevels[tweetData.zoomLevel].displayCount);
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    79
    socket.emit('getTweets',{ "from": from, "to": to });
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    80
}
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    81
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    82
function setZoom(level) {
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    83
    tweetData.zoomLevel = Math.max(0, Math.min( zoomLevels.length - 1 , level ) );
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    84
    getTweets();
314
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    85
}
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    86
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    87
$(document).ready(function() {
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    88
    socket = io.connect('http://' + S_IO_HOST + ':' + S_IO_PORT );
325
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    89
    socket.on('tweetSummary', function (data) {
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    90
        if (tweetData.position == tweetData.tweetcount - 1) {
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    91
            tweetData.position = data.tweetcount - 1;
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    92
            getTweets();
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    93
        }
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    94
        tweetData.tweetcount = data.tweetcount;
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    95
    });
314
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    96
    socket.on('tweets', function (data) {
325
7d9c576bfaac Some changes - added multi-zoom level on client
Raphael Velt <raph.velt@gmail.com>
parents: 314
diff changeset
    97
        tweetData.tweetsOnDisplay = data;
314
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    98
        data.reverse();
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    99
        html = '';
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   100
        for (var i in data) {
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   101
            html += tweetToHtml(data[i]);
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   102
        }
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   103
        $("#tweetlist").html(html);
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   104
    });
0f1e6ce19b6d Ajout d une branche NodeJS
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   105
});