User Info Popover

Adds a popover with user info.

  1. // ==UserScript==
  2. // @name User Info Popover
  3. // @namespace pxgamer
  4. // @version 0.1
  5. // @description Adds a popover with user info.
  6. // @author pxgamer
  7. // @include *kat.cr/community/show/*
  8. // @grant none
  9. // ==/UserScript==
  10.  
  11.  
  12.  
  13. (function() {
  14. 'use strict';
  15.  
  16. $('body').append(' <div id="userInfoPop" style="display: none; padding: 3px; position: fixed; background: white; border: 1px solid black; border-radius: 4px; top: 60px; left: 5px;">'+
  17. '<table><tr><th>User Details:</th><th style="text-align: right;"><a href="javascript:$(\'#userInfoPop\').hide();"<i class="ka ka16 ka-delete ka-red"></i></th>'+
  18. ' <tr>'+
  19. ' <td>Username</td>'+
  20. ' <td class="unValue InfoPop"></td>'+
  21. ' </tr>'+
  22. ' <tr>'+
  23. ' <td>Reputation</td>'+
  24. ' <td class="repuVal InfoPop"></td>'+
  25. ' </tr>'+
  26. ' <tr>'+
  27. ' <td>Rank</td>'+
  28. ' <td class="rankValue InfoPop"></td>'+
  29. ' </tr>'+
  30. ' <tr>'+
  31. ' <td>Friends</td>'+
  32. ' <td class="friendValue InfoPop"></td>'+
  33. ' </tr>'+
  34. ' <tr>'+
  35. ' <td>Cheevos</td>'+
  36. ' <td class="cheevoValue InfoPop"></td>'+
  37. ' </tr>'+
  38. '</table>'+
  39. '</div>');
  40. $('.badgeInfo .badgeUsernamejs.font12px').each(function() {
  41. $(this).after(' <span class="ka ka16 ka-faq lower userInfoPopover"></span>');
  42. });
  43.  
  44. $('.userInfoPopover').on('click', function() {
  45. var username = $(this).parent().find('.badgeUsernamejs .plain[href^="/user/"]').text();
  46. var userInfo = getUserInfo(username);
  47.  
  48. $('#userInfoPop').css('display', '');
  49. $('.InfoPop.unValue').html('<a href="/user/'+userInfo.username+'/">'+userInfo.username+'</a>');
  50. $('.InfoPop.repuVal').text(userInfo.rep);
  51. $('.InfoPop.rankValue').text(userInfo.rank);
  52. $('.InfoPop.friendValue').text(userInfo.friends);
  53. $('.InfoPop.cheevoValue').text(userInfo.cheevos);
  54. });
  55.  
  56. function getUserInfo(username) {
  57. var returnedData;
  58. var matches;
  59. var userInfo = {
  60. username: username
  61. };
  62.  
  63. var userRank = /<div class="lightgrey font12px"><span class="aclColor_.*">([a-z 0-9]+)<\/span>/gi;
  64. var userRep = /<span title="Reputation" class="repValue positive">([0-9]+)<\/span>\n <\/h1>/gi;
  65. var userCheevo = /<h2><a class="ka ka16 ka-eye" title="Toggle Achievements" id="toggleAch"><\/a> User Achievements \(([0-9]+) opened\)/gi;
  66. var userUploads = /<span>uploads <i class="menuValue">([0-9]+)<\/i><\/span>/gi;
  67. var userFriends = /<span>Friends <i class="menuValue">([0-9]+)<\/i><\/span>/gi;
  68.  
  69. $.ajax({
  70. type: 'GET',
  71. url: '/user/' + username + '/',
  72. async: false,
  73. success: function (data) {
  74. returnedData = data;
  75. while (matches = userRank.exec(returnedData.html)) {
  76. userInfo.rank = matches[1];
  77. }
  78. while (matches = userRep.exec(returnedData.html)) {
  79. userInfo.rep = matches[1];
  80. }
  81. while (matches = userCheevo.exec(returnedData.html)) {
  82. userInfo.cheevos = matches[1];
  83. }
  84. while (matches = userUploads.exec(returnedData.html)) {
  85. userInfo.uploads = matches[1];
  86. }
  87. while (matches = userFriends.exec(returnedData.html)) {
  88. userInfo.friends = matches[1];
  89. }
  90. },
  91. returnData: "json"
  92. });
  93. return userInfo;
  94. }
  95. })();