home *** CD-ROM | disk | FTP | other *** search
/ Freelog 117 / FreelogNo117-OctobreNovembre2013.iso / Theme / 8GadgetPack / 8GadgetPackSetup.msi / Gadgets.7z / Gadgets / tweetz.gadget / showuser.js < prev    next >
Text File  |  2013-04-09  |  5KB  |  116 lines

  1. /// <reference path="jquery.js" />
  2. /*jslint browser: true, windows: true */
  3. /*global $: false, OAuth: false, jQuery: false, window: false */
  4.  
  5. jQuery.support.cors = true; // force cross-site scripting (as of jQuery 1.5)
  6.  
  7. String.prototype.format = function () {
  8.   var pattern = /\{\d+\}/g;
  9.   var args = arguments;
  10.   return this.replace(pattern, function (capture) { return args[capture.match(/\d+/)]; });
  11. };
  12.  
  13. Number.prototype.prettyNumber = function () {
  14.   return $.format(+this, "n0");
  15. };
  16.  
  17. var USER = {};
  18. USER.isFollowing = false;
  19.  
  20. USER.followText = function (yes, is_protected) {
  21.   var locale = System.Gadget.document.parentWindow.APP.locale;
  22.   return yes ? locale.showuser_yes : is_protected ? locale.showuser_protected : locale.showuser_no;
  23. };
  24.  
  25. USER.friendship = function (screen_name, is_protected) {
  26.   var parentWindow = System.Gadget.document.parentWindow;
  27.   parentWindow.APP.showUserParams.model.comm.get("https://api.twitter.com/1.1/friendships/show.json",
  28.     { "target_screen_name": screen_name, "source_screen_name": System.Gadget.document.parentWindow.APP.settings.username() },
  29.     function (data) {
  30.       var locale = System.Gadget.document.parentWindow.APP.locale;
  31.       $("#waiting").css("visibility", "hidden");
  32.       USER.isFollowing = data.relationship.source.following;
  33.       $("#following").text(USER.followText(USER.isFollowing, is_protected)).attr("title",
  34.         USER.isFollowing ? locale.showuser_unfollow : is_protected ? locale.showuser_protected : locale.showuser_follow);
  35.       $("#follower").text(USER.followText(data.relationship.source.followed_by));
  36.     });
  37. };
  38.  
  39. USER.rateField = function (label, data) {
  40.   return $("<div>").append($("<span>", { text: label, "class": "label" }), ($("<span>", { text: data, "class": "right" })));
  41. };
  42.  
  43. USER.rateLimitStatus = function (userName) {
  44.   $("#following").parent().css("display", "none");
  45.   var div = $("#follower").parent().empty();
  46.   var parentWindow = System.Gadget.document.parentWindow;
  47.   parentWindow.APP.showUserParams.model.comm.get("http://twitter.com/account/rate_limit_status.json", null, function (data) {
  48.     var locale = System.Gadget.document.parentWindow.APP.locale;
  49.     var limit = USER.rateField(locale.showuser_hourly_limit, data.hourly_limit.prettyNumber());
  50.     var remaining = USER.rateField(locale.showuser_remaining, data.remaining_hits.prettyNumber());
  51.     var reset = USER.rateField(locale.showuser_reset, USER.minutesRemaining(data.reset_time_in_seconds)).append(" " + locale.showuser_minutes);
  52.     div.append(limit, remaining, reset);
  53.   });
  54. };
  55.  
  56. USER.minutesRemaining = function (seconds) {
  57.   var start = new Date().getTime();
  58.   var end = new Date(seconds * 1000).getTime();
  59.   var expires = new Date(end - start);
  60.   return expires.getMinutes().toString();
  61. };
  62.  
  63. USER.localize = function (locale) {
  64.   $("#followers_label").text(locale.showuser_followers);
  65.   $("#friends_label").text(locale.showuser_friends);
  66.   $("#tweets_label").text(locale.showuser_tweets);
  67.   $("#following_label").text(locale.showuser_following);
  68.   $("#followed_by_label").text(locale.showuser_followed_by);
  69.   $("#message").text(locale.showuser_message);
  70.   $("#close").text(locale.showuser_close);
  71. };
  72.  
  73. $(function () {
  74.   var parentWindow = System.Gadget.document.parentWindow;
  75.   $("#style_sheet").attr("href", parentWindow.APP.settings.styleSheet());
  76.   var screenName = parentWindow.APP.showUserParams.showUserName.replace("@", "");
  77.   var userName = parentWindow.APP.settings.username();
  78.   USER.localize(parentWindow.APP.locale);
  79.   parentWindow.APP.twitter.getUserInfo(parentWindow.APP.showUserParams.model, screenName, function (user) {
  80.     $("#info").html(
  81.       "<b>" + user.name + "</b> <i>" + "@" + user.screen_name + " - " + (user.location || "no location specified") + "</i><br/>" +
  82.       (user.description || "no description specified"));
  83.     $("#userUrl").html((user.url) ? ("<a href='" + user.url + "'>" + user.url + "</a>") : "no link specified");
  84.     $("#pic").attr("src", user.profile_image_url);
  85.     $("#followers").text(user.followers_count.prettyNumber());
  86.     $("#friends").text(user.friends_count.prettyNumber());
  87.     $("#tweets").text(user.statuses_count.prettyNumber());
  88.     var homePage = "http://twitter.com/" + screenName;
  89.     $("#homepage").attr("href", homePage).text(homePage);
  90.     $("#message").click(function () {
  91.       parentWindow.APP.showUserParams.view.edit.show("msg_button", { screen_name: "@" + screenName });
  92.       System.Gadget.Flyout.show = false;
  93.     });
  94.     if (screenName != userName) { USER.friendship(screenName, user["protected"]); }
  95.     else { USER.rateLimitStatus(); }
  96.   },
  97.   function (xhr, status) {
  98.     var json = $.parseJSON(xhr.responseText);
  99.     $("#content").empty().append(json.error);
  100.   });
  101.  
  102.   $("#close").bind("click", function (e) {
  103.     System.Gadget.Flyout.show = false;
  104.   });
  105.  
  106.   $("#following").live("click", function () {
  107.     $("#waiting").css("visibility", "visible");
  108.     var friendship = (USER.isFollowing) ?
  109.       parentWindow.APP.twitter.deleteFriendship :
  110.       parentWindow.APP.twitter.createFriendship;
  111.     friendship(parentWindow.APP.showUserParams.model, screenName, function () {
  112.       USER.friendship(screenName);
  113.     });
  114.   });
  115. });
  116.