Torn Helper

Adds extra information to different pages all around Torn.

目前为 2016-12-22 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name Torn Helper
  3. // @namespace Jebster.Torn
  4. // @author Jeggy
  5. // @description Adds extra information to different pages all around Torn.
  6. // @include *.torn.com/profiles.php?XID=*
  7. // @version 0.0.4
  8. // @require http://code.jquery.com/jquery-2.2.4.min.js
  9. // @grant GM_addStyle
  10. // ==/UserScript==
  11.  
  12.  
  13. var data = {};
  14.  
  15. (function() {
  16. 'use strict';
  17.  
  18. var site = window.location.pathname;
  19.  
  20. load();
  21.  
  22. if(site.indexOf('profiles.php') > 0) profileView();
  23.  
  24. })();
  25.  
  26. function profileView(){
  27. var userid = getParameterByName('XID');
  28. var userData = data[userid];
  29. var content =
  30. '<div id="compareStats">' +
  31. 'Loading...' +
  32. '<br />' +
  33. '</div>' +
  34. '<hr />' +
  35. '<b>Notes</b><br />' +
  36. getUserValue(userid, 'notes')+
  37. '';
  38.  
  39. var compareFunc = function(){$('#compareStats').replaceWith(compareTemplate(userid, data.userid));};
  40. apiUserStats(userid, compareFunc);
  41. apiUserStats(data.userid, compareFunc);
  42.  
  43. var block = $(
  44. '<div class="profile-wrapper medals-wrapper m-top10">' +
  45. '<div class="menu-header">Torn Helper</div>' +
  46. '<div class="profile-container"> ' +
  47. '<div class="profile-container-description">'+content+'</div>' +
  48. '</div>' +
  49. '<div class="clear"></div></div>');
  50.  
  51. $(block).insertAfter('.tutorial-cont + .profile-wrapper');
  52. }
  53.  
  54. function getUserValue(userid, property){
  55. var user = data[userid];
  56. if(user){
  57. if($.isArray(property)){
  58. for(var i = 0; i < property.length; i++){
  59. user = user[property[i]];
  60. }
  61. return user;
  62. }else{
  63. var userData = user[property];
  64. if(userData){
  65. return userData;
  66. }
  67. }
  68. }
  69. return -1;
  70. }
  71.  
  72. function setUserValue(userid, property, value){
  73. if(data[userid] === undefined) data[userid] = {};
  74. data[userid][property] = value;
  75. }
  76.  
  77. function load(){
  78. data = {
  79. apikey: 'eQ2BlOZ6',
  80. settings: {online: false},
  81. userid: 1526723,
  82. 1526723: {color: '#33cc00', notes: 'Some extra notes', difficulty: 'hard'}
  83. };
  84. }
  85.  
  86. function apiUserStats(userid, cb){
  87. var lastRequest = getUserValue(userid, 'lastRequest');
  88. var now = new Date();
  89. if(lastRequest === 0 || lastRequest < now.getTime() - (60*60*5)){ // TODO:
  90. var selections = 'personalstats,basic';
  91. var url = 'https://api.torn.com/user/'+userid+'?selections='+selections+'&key='+data.apikey;
  92. $.ajax({
  93. url: url,
  94. type: 'GET',
  95. success: function(data) {
  96. setUserValue(userid, 'stats', data.personalstats);
  97. setUserValue(userid, 'lastRequest', now.getTime());
  98. setUserValue(userid, 'username', data.name);
  99. cb(data);
  100. }
  101. });
  102. }else{
  103. cb(data[userid].stats);
  104. }
  105. }
  106.  
  107. function compareTemplate(user1Id, user2Id){
  108. console.log('user1: '+user1Id + ', user2: '+user2Id);
  109. console.log(data[user1Id].stats);
  110. console.log(data[user2Id].stats);
  111. return '<ul class="basic-list">' +
  112. '<li>' +
  113. '<div class="user-information-section left"><span class="bold"></span></div>' +
  114. '<div class="user-information-section left"><span class="bold">'+getUserValue(user1Id, 'username')+'</span></div>' +
  115. '<div><span class="bold">'+getUserValue(user2Id, 'username')+' (You)</span></div>' +
  116. '</li>' +
  117.  
  118. '<li>'+
  119. '<div class="user-information-section left"><span class="bold">Xanax taken</span></div>' +
  120. '<div class="user-information-section left">'+getUserValue(user1Id, ['stats', 'xantaken'])+'</div>' +
  121. '<div>'+getUserValue(user2Id, ['stats', 'xantaken'])+'</div>' +
  122. '</li>' +
  123.  
  124. '<li>'+
  125. '<div class="user-information-section left"><span class="bold">Logins</span></div>' +
  126. '<div class="user-information-section left">'+getUserValue(user1Id, ['stats', 'logins'])+'</div>' +
  127. '<div>'+getUserValue(user2Id, ['stats', 'logins'])+'</div>' +
  128. '</li>' +
  129. '</ul>';
  130. }
  131.  
  132. // Taken from: http://stackoverflow.com/a/15724300/1832471
  133. function getCookieValue(name) {
  134. var value = "; " + document.cookie;
  135. var parts = value.split("; " + name + "=");
  136. if (parts.length == 2) return parts.pop().split(";").shift();
  137. }
  138.  
  139. // Taken from: http://stackoverflow.com/a/901144/1832471
  140. function getParameterByName(name, url) {
  141. if (!url) {
  142. url = window.location.href;
  143. }
  144. name = name.replace(/[\[\]]/g, "\\$&");
  145. var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
  146. results = regex.exec(url);
  147. if (!results) return null;
  148. if (!results[2]) return '';
  149. return decodeURIComponent(results[2].replace(/\+/g, " "));
  150. }