src/js/widgets/tweetsWidget.js
author hamidouk
Mon, 19 Dec 2011 15:25:22 +0100
branchpopcorn-port
changeset 481 a46cfeee6d77
parent 378 110311d59b2f
child 541 f7667a1dde8e
permissions -rw-r--r--
using jquery ui draggable changes the state of an element from absolute to relative positioning, which breaks the way our seek button expands itself, so we need to force absolute positioning, quite uglily, using jquery.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
277
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
     1
/* a widget that displays tweet - used in conjunction with the polemicWidget */
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
     2
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
     3
IriSP.TweetsWidget = function(Popcorn, config, Serializer) {
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
     4
  IriSP.Widget.call(this, Popcorn, config, Serializer);
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
     5
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
     6
  this._displayingTweet = false;
278
ff20c80c6845 added a minimize functionality to the tweetwidget.
hamidouk
parents: 277
diff changeset
     7
  this._timeoutId = undefined;  
277
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
     8
};
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
     9
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    10
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    11
IriSP.TweetsWidget.prototype = new IriSP.Widget();
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    12
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    13
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    14
IriSP.TweetsWidget.prototype.drawTweet = function(annotation) {
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    15
    
285
b7aa28af2c10 added a function to format a tweet.
hamidouk
parents: 282
diff changeset
    16
    var title = IriSP.formatTweet(annotation.content.title);
277
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    17
    var img = annotation.content.img.src;
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    18
    if (typeof(img) === "undefined" || img === "" || img === "None") {
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    19
      img = IriSP.widgetsDefaults.TweetsWidget.default_profile_picture;
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    20
    }
293
314e6a13f841 tweetWidget : display better information, if available
hamidouk
parents: 285
diff changeset
    21
363
8d4b329836b6 converted the tweet widget to use the new template engine. removed a template of
hamidouk
parents: 350
diff changeset
    22
    var imageMarkup = IriSP.templToHTML("<img src='{{src}}' alt='user image'></img>", 
293
314e6a13f841 tweetWidget : display better information, if available
hamidouk
parents: 285
diff changeset
    23
                                       {src : img});
277
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    24
    
293
314e6a13f841 tweetWidget : display better information, if available
hamidouk
parents: 285
diff changeset
    25
    if (typeof(annotation.meta["dc:source"].content) !== "undefined") {
314e6a13f841 tweetWidget : display better information, if available
hamidouk
parents: 285
diff changeset
    26
      var tweetContents = JSON.parse(annotation.meta["dc:source"].content);
314e6a13f841 tweetWidget : display better information, if available
hamidouk
parents: 285
diff changeset
    27
      var creator = tweetContents.user.screen_name;
367
277a9f5f342c more graphical integration for the tweetsWidget.
hamidouk
parents: 363
diff changeset
    28
      var real_name = tweetContents.user.name;
277a9f5f342c more graphical integration for the tweetsWidget.
hamidouk
parents: 363
diff changeset
    29
363
8d4b329836b6 converted the tweet widget to use the new template engine. removed a template of
hamidouk
parents: 350
diff changeset
    30
      imageMarkup = IriSP.templToHTML("<a href='http://twitter.com/{{creator}}'><img src='{{src}}' alt='user image'></img></a>", 
293
314e6a13f841 tweetWidget : display better information, if available
hamidouk
parents: 285
diff changeset
    31
                                       {src : img, creator: creator});
314e6a13f841 tweetWidget : display better information, if available
hamidouk
parents: 285
diff changeset
    32
            
350
c637688bd680 tweetWidget : format the tweet date according to the locale.
hamidouk
parents: 298
diff changeset
    33
      var formatted_date = new Date(tweetContents.created_at).toLocaleDateString();
367
277a9f5f342c more graphical integration for the tweetsWidget.
hamidouk
parents: 363
diff changeset
    34
      title = IriSP.templToHTML("<a class='Ldt-tweet_userHandle' href='http://twitter.com/{{creator}}'>@{{creator}}</a> - " + 
277a9f5f342c more graphical integration for the tweetsWidget.
hamidouk
parents: 363
diff changeset
    35
                                "<div class='Ldt-tweet_realName'>{{real_name}}</div>" +
277a9f5f342c more graphical integration for the tweetsWidget.
hamidouk
parents: 363
diff changeset
    36
                                "<div class='Ldt-tweet_tweetContents'>{{{ contents }}}</div>" +
277a9f5f342c more graphical integration for the tweetsWidget.
hamidouk
parents: 363
diff changeset
    37
                                "<div class='Ldt-tweet_date'>{{ date }}</div>", 
277a9f5f342c more graphical integration for the tweetsWidget.
hamidouk
parents: 363
diff changeset
    38
                                {creator: creator, real_name: real_name, contents : title, date : formatted_date});
370
2ee4da8122f4 reply and retweet links now work.
hamidouk
parents: 367
diff changeset
    39
2ee4da8122f4 reply and retweet links now work.
hamidouk
parents: 367
diff changeset
    40
      this.selector.find(".Ldt-TweetReply").attr("href", "http://twitter.com/home?status=@" + creator + ":%20");
2ee4da8122f4 reply and retweet links now work.
hamidouk
parents: 367
diff changeset
    41
2ee4da8122f4 reply and retweet links now work.
hamidouk
parents: 367
diff changeset
    42
2ee4da8122f4 reply and retweet links now work.
hamidouk
parents: 367
diff changeset
    43
      var rtText = Mustache.to_html("http://twitter.com/home?status=RT @{{creator}}: {{text}}",
2ee4da8122f4 reply and retweet links now work.
hamidouk
parents: 367
diff changeset
    44
                                    {creator: creator, text: IriSP.encodeURI(annotation.content.title)});
2ee4da8122f4 reply and retweet links now work.
hamidouk
parents: 367
diff changeset
    45
      this.selector.find(".Ldt-Retweet").attr("href", rtText);
293
314e6a13f841 tweetWidget : display better information, if available
hamidouk
parents: 285
diff changeset
    46
    }
277
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    47
285
b7aa28af2c10 added a function to format a tweet.
hamidouk
parents: 282
diff changeset
    48
    this.selector.find(".Ldt-tweetContents").html(title);
277
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    49
    this.selector.find(".Ldt-tweetAvatar").html(imageMarkup);
278
ff20c80c6845 added a minimize functionality to the tweetwidget.
hamidouk
parents: 277
diff changeset
    50
    this.selector.show("blind", 250); 
277
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    51
};
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    52
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    53
IriSP.TweetsWidget.prototype.displayTweet = function(annotation) {
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    54
  if (this._displayingTweet === false) {
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    55
    this._displayingTweet = true;
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    56
  } else {
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    57
    window.clearTimeout(this._timeoutId);
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    58
  }
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    59
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    60
  this.drawTweet(annotation);
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    61
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    62
  var time = this._Popcorn.currentTime();  
282
1001234e5e6e added a var to configure the num of seconds to display the tweet.
hamidouk
parents: 278
diff changeset
    63
  this._timeoutId = window.setTimeout(IriSP.wrap(this, this.clearPanel), IriSP.widgetsDefaults.TweetsWidget.tweet_display_period);
277
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    64
};
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    65
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    66
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    67
IriSP.TweetsWidget.prototype.clearPanel = function() {  
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    68
    this._displayingTweet = false;
278
ff20c80c6845 added a minimize functionality to the tweetwidget.
hamidouk
parents: 277
diff changeset
    69
    this._timeoutId = undefined;
277
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    70
    this.closePanel();
278
ff20c80c6845 added a minimize functionality to the tweetwidget.
hamidouk
parents: 277
diff changeset
    71
    
277
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    72
};
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    73
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    74
IriSP.TweetsWidget.prototype.closePanel = function() {
278
ff20c80c6845 added a minimize functionality to the tweetwidget.
hamidouk
parents: 277
diff changeset
    75
    if (this._timeoutId != undefined) {
ff20c80c6845 added a minimize functionality to the tweetwidget.
hamidouk
parents: 277
diff changeset
    76
      /* we're called from the "close window" link */
ff20c80c6845 added a minimize functionality to the tweetwidget.
hamidouk
parents: 277
diff changeset
    77
      /* cancel the timeout */
ff20c80c6845 added a minimize functionality to the tweetwidget.
hamidouk
parents: 277
diff changeset
    78
      window.clearTimeout(this._timeoutId);
378
110311d59b2f implemented a second button to keep the tweetWidget open.
hamidouk
parents: 370
diff changeset
    79
      this._timeoutId = null;
278
ff20c80c6845 added a minimize functionality to the tweetwidget.
hamidouk
parents: 277
diff changeset
    80
    }
ff20c80c6845 added a minimize functionality to the tweetwidget.
hamidouk
parents: 277
diff changeset
    81
    
ff20c80c6845 added a minimize functionality to the tweetwidget.
hamidouk
parents: 277
diff changeset
    82
    this.selector.hide("blind", 400);
ff20c80c6845 added a minimize functionality to the tweetwidget.
hamidouk
parents: 277
diff changeset
    83
    
277
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    84
};
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    85
378
110311d59b2f implemented a second button to keep the tweetWidget open.
hamidouk
parents: 370
diff changeset
    86
/* cancel the timeout if the user clicks on the keep panel open button */
110311d59b2f implemented a second button to keep the tweetWidget open.
hamidouk
parents: 370
diff changeset
    87
IriSP.TweetsWidget.prototype.keepPanel = function() {
110311d59b2f implemented a second button to keep the tweetWidget open.
hamidouk
parents: 370
diff changeset
    88
    if (this._timeoutId != undefined) {
110311d59b2f implemented a second button to keep the tweetWidget open.
hamidouk
parents: 370
diff changeset
    89
      /* we're called from the "close window" link */
110311d59b2f implemented a second button to keep the tweetWidget open.
hamidouk
parents: 370
diff changeset
    90
      /* cancel the timeout */
110311d59b2f implemented a second button to keep the tweetWidget open.
hamidouk
parents: 370
diff changeset
    91
      window.clearTimeout(this._timeoutId);
110311d59b2f implemented a second button to keep the tweetWidget open.
hamidouk
parents: 370
diff changeset
    92
      this._timeoutId = null;
110311d59b2f implemented a second button to keep the tweetWidget open.
hamidouk
parents: 370
diff changeset
    93
    }
110311d59b2f implemented a second button to keep the tweetWidget open.
hamidouk
parents: 370
diff changeset
    94
};
110311d59b2f implemented a second button to keep the tweetWidget open.
hamidouk
parents: 370
diff changeset
    95
277
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    96
IriSP.TweetsWidget.prototype.draw = function() {
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    97
  var _this = this;
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
    98
  
363
8d4b329836b6 converted the tweet widget to use the new template engine. removed a template of
hamidouk
parents: 350
diff changeset
    99
  var tweetMarkup = IriSP.templToHTML(IriSP.tweetWidget_template, {"share_template" : IriSP.share_template});
277
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
   100
  this.selector.append(tweetMarkup);
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
   101
  this.selector.hide();
278
ff20c80c6845 added a minimize functionality to the tweetwidget.
hamidouk
parents: 277
diff changeset
   102
  this.selector.find(".Ldt-tweetWidgetMinimize").click(IriSP.wrap(this, this.closePanel));
378
110311d59b2f implemented a second button to keep the tweetWidget open.
hamidouk
parents: 370
diff changeset
   103
  this.selector.find(".Ldt-tweetWidgetKeepOpen").click(IriSP.wrap(this, this.keepPanel));
277
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
   104
  
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
   105
  this._Popcorn.listen("IriSP.PolemicTweet.click", IriSP.wrap(this, this.PolemicTweetClickHandler));
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
   106
};
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
   107
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
   108
IriSP.TweetsWidget.prototype.PolemicTweetClickHandler = function(tweet_id) {  
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
   109
  var index, annotation;
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
   110
  for (index in this._serializer._data.annotations) {
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
   111
    annotation = this._serializer._data.annotations[index];
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
   112
    
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
   113
    if (annotation.id === tweet_id)
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
   114
      break;
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
   115
  }
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
   116
    
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
   117
  if (annotation.id !== tweet_id)
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
   118
      /* we haven't found it */
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
   119
      return;
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
   120
  
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
   121
  this.displayTweet(annotation);
ff416475397a fixed the bug with a clearTimeout.
hamidouk
parents: 276
diff changeset
   122
  return;
350
c637688bd680 tweetWidget : format the tweet date according to the locale.
hamidouk
parents: 298
diff changeset
   123
};