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.7
  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 save(){
  78. localStorage.setItem('data', JSON.stringify(data));
  79. }
  80.  
  81. function load(){
  82. data = localStorage.getItem('data');
  83. if(data === undefined || data === null){
  84. data = {};
  85. }else{
  86. data = JSON.parse(data);
  87. }
  88.  
  89. if(data.apikey === undefined || data.apikey === ''){
  90. getApiKey();
  91. }
  92. }
  93.  
  94. function getApiKey(){
  95. var key = prompt('You API Key', 'key');
  96. data.apikey = key;
  97. save();
  98. }
  99.  
  100. function apiUserStats(userid, cb){
  101. var lastRequest = getUserValue(userid, 'lastRequest');
  102. var now = new Date();
  103. if(lastRequest === 0 || lastRequest < now.getTime() - (60*60*5)){ // TODO:
  104. var selections = 'personalstats,basic';
  105. var url = 'https://api.torn.com/user/'+userid+'?selections='+selections+'&key='+data.apikey;
  106. $.ajax({
  107. url: url,
  108. type: 'GET',
  109. success: function(data) {
  110. if(data.error) getApiKey();
  111. else{
  112. setUserValue(userid, 'stats', data.personalstats);
  113. setUserValue(userid, 'lastRequest', now.getTime());
  114. setUserValue(userid, 'username', data.name);
  115. save();
  116. cb(data);
  117. }
  118. }
  119. });
  120. }else{
  121. cb(data[userid].stats);
  122. }
  123. }
  124.  
  125. function compareTemplate(user1Id, user2Id){
  126. return '<ul class="basic-list">' +
  127. '<li>' +
  128. '<div class="user-information-section left"><span class="bold"></span></div>' +
  129. '<div class="user-information-section left"><span class="bold">'+getUserValue(user1Id, 'username')+'</span></div>' +
  130. '<div><span class="bold">'+getUserValue(user2Id, 'username')+' (You)</span></div>' +
  131. '</li>' +
  132.  
  133. '<li>'+
  134. '<div class="user-information-section left"><span class="bold">Xanax taken</span></div>' +
  135. '<div class="user-information-section left">'+getUserValue(user1Id, ['stats', 'xantaken'])+'</div>' +
  136. '<div>'+getUserValue(user2Id, ['stats', 'xantaken'])+'</div>' +
  137. '</li>' +
  138.  
  139. '<li>'+
  140. '<div class="user-information-section left"><span class="bold">Logins</span></div>' +
  141. '<div class="user-information-section left">'+getUserValue(user1Id, ['stats', 'logins'])+'</div>' +
  142. '<div>'+getUserValue(user2Id, ['stats', 'logins'])+'</div>' +
  143. '</li>' +
  144. '</ul>';
  145. }
  146.  
  147. // Taken from: http://stackoverflow.com/a/15724300/1832471
  148. function getCookieValue(name) {
  149. var value = "; " + document.cookie;
  150. var parts = value.split("; " + name + "=");
  151. if (parts.length == 2) return parts.pop().split(";").shift();
  152. }
  153.  
  154. // Taken from: http://stackoverflow.com/a/901144/1832471
  155. function getParameterByName(name, url) {
  156. if (!url) {
  157. url = window.location.href;
  158. }
  159. name = name.replace(/[\[\]]/g, "\\$&");
  160. var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
  161. results = regex.exec(url);
  162. if (!results) return null;
  163. if (!results[2]) return '';
  164. return decodeURIComponent(results[2].replace(/\+/g, " "));
  165. }