Developer Subscriber

Subscribe to developers by playlisting games

目前为 2016-03-22 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Developer Subscriber
  3. // @namespace tag://kongregate
  4. // @description Subscribe to developers by playlisting games
  5. // @author UnknownGuardian
  6. // @version 1.0.1
  7. // @date 03.22.2013
  8. // @include http://www.kongregate.com*
  9. // ==/UserScript==
  10.  
  11. function main() {
  12. var dom = (typeof unsafeWindow === "undefined"?window:unsafeWindow);
  13. console.log("wat");
  14. function init() {
  15. console.log("I love developers init");
  16.  
  17.  
  18. var url = dom.location.href;
  19. url = url.substr(url.indexOf(".com/") + ".com/".length);
  20.  
  21. var directory;
  22. if(url.indexOf("/") != -1)
  23. directory = url.substring(0,url.indexOf("/"));
  24. else
  25. directory = url;
  26.  
  27. directory = directory.split("?")[0];
  28. console.log("directory: " + directory);
  29.  
  30. if(directory == "games")
  31. {
  32. //add buttons to subscribe
  33. addSubscribeButton();
  34. }
  35. else if(directory == "my_playlist" || directory == "play_laters")
  36. {
  37. //show all devs subscribed to
  38. showAllSubscriptions();
  39. }
  40. else if(directory == "accounts")
  41. {
  42. //show profile button
  43. addProfileSubscribeButton();
  44. }
  45.  
  46.  
  47. var lastCheck = getLastDateChecked();
  48. var today = new Date();
  49. if(lastCheck == "" || (today.getTime() - new Date(lastCheck).getTime())/(1000*60*60) > 12)
  50. {
  51. pullLastGamesFromDevelopers();
  52. }
  53. }
  54.  
  55. function pullLastGamesFromDevelopers()
  56. {
  57. Cookie.set('DevSubscribeLastCheck', "" + new Date(), 100000000,'/');
  58. console.log("Pulling games from all devs");
  59. var list = getAllSubscribed();
  60. list.each(function(item){
  61. new Ajax.Request("http://www.kongregate.com/accounts/" + item, {
  62. method:'get',
  63. onComplete: function(transport){
  64. console.log("Pulled list from developer" + item);
  65. handleDevProfilePage(item, transport.responseText);
  66. //alert('Yay' + transport.responseText + 'asdasd');
  67. //return false;
  68. }
  69. });
  70. });
  71. }
  72.  
  73. function handleDevProfilePage(developer, text)
  74. {
  75. if(text.indexOf("pod_head_header") != 0 )
  76. {
  77. var start = text.indexOf("pod_game_header") + "pod_game_header".length + 18;
  78. var subtext = text.substr(start,250);
  79. var end = subtext.indexOf('" class="')
  80. var gameURL = subtext.substring(0,end);
  81. console.log("got game url at " + gameURL);
  82. text = text.substring(start + end + 50);
  83.  
  84. if(gameURL == "")
  85. return;
  86.  
  87. var lastGameRead = getLastGameSavedFromDev(developer);
  88. var gameName = gameURL.substring(gameURL.lastIndexOf("/"))+1;
  89. if(lastGameRead == "")
  90. {
  91. Cookie.set("sub_last_" + developer, gameName, 100000000,'/');
  92. console.log("we didn't have any last saved, so lets just store what exists")
  93. }
  94. else if(lastGameRead != gameName)
  95. {
  96. //set to last game pulled
  97. Cookie.set("s_l_" + developer, gameName, 100000000,'/');
  98. //POST to http://www.kongregate.com/play_laters
  99. new Ajax.Request(gameURL + "/metrics.json", {
  100. method:'get',
  101. onComplete: function(transport){
  102. addToPlayList(transport.responseText);
  103.  
  104. //alert('Yay' + transport.responseText + 'asdasd');
  105. //return false;
  106. }
  107. });
  108. }
  109. }
  110. }
  111.  
  112. function addToPlayList(text)
  113. {
  114. var id = text.substring(text.indexOf("?game_id=") + "?game_id=".length);
  115. id = id.substring(0,id.indexOf('"')-1)
  116. new Ajax.Request("http://www.kongregate.com/play_laters", {
  117. method:'post',
  118. parameters: {
  119. "game_id":id
  120. },
  121. onComplete: function(transport){
  122. console.log("Success adding " + id + " to play list");
  123. }
  124. });
  125. }
  126.  
  127. function showAllSubscriptions()
  128. {
  129. console.log("showing all subscriptions");
  130. var table = '<div class="category_listing"><div class="category_listing_header"><div class="sort_filter mrm"><span class="plm">Subscriptions</span></div><div class="clear"></div></div><div class="category_games_listing hasLayout"><div class="large_sub_pod_column_one"><div class="sub_listing" style="font-size:12px;background-color: #FFFFFF;"id="sub_browser_game_row_1"></div></div><div class="clear"></div></div></div><div><div class="clear"></div><br />';
  131. var target = $$(".adspacer").length == 0? $$(".category_listing")[0] : $$(".adspacer")[0];
  132. target.insert({after:table});
  133. console.log("showing all subscriptions kinda");
  134.  
  135. var list = getAllSubscribed();
  136.  
  137. //case insensitive sort
  138. list.sort(
  139. function(a, b) {
  140. if (a.toLowerCase() < b.toLowerCase()) return -1;
  141. if (a.toLowerCase() > b.toLowerCase()) return 1;
  142. return 0;
  143. }
  144. );
  145.  
  146.  
  147. list.each(function(item){
  148. console.log("Adding item " + item);
  149.  
  150. var container = new Element("div", {"style":"display:block;"});
  151.  
  152.  
  153. var linkElement = new Element("a", {"style":"min-width:200px; float:left; padding-top:2px; padding-bottom:2px;", "href":"http://www.kongregate.com/accounts/" + item});
  154. linkElement.update(item);
  155. var subElement = new Element("a",{"href":"#", "style":"min-width:500px;color:#888;float:left;padding-left: 4px;padding-top:2px; padding-bottom:2px;"});
  156. subElement.update("Unsubscribe");
  157. subElement.id = "unsubscribe_" + item;
  158. subElement.onclick = unsubscribeToADev;
  159.  
  160.  
  161. container.insert(linkElement);
  162. container.insert(subElement);
  163.  
  164. $("sub_browser_game_row_1").insert(container)
  165. });
  166. }
  167.  
  168. function addProfileSubscribeButton()
  169. {
  170. //use something generic that is on profiles to prevent other pages from passing this possibly.
  171. if($$("#games_by_user_pod").length == 0)
  172. return;
  173.  
  174. var subElement = new Element("a",{"href":"#", "style":"color:#888;padding-left: 4px;"});
  175. var devname = dom.location.href.substring(dom.location.href.indexOf(".com/accounts/") + ".com/accounts/".length);
  176. if(!isDevSubscribedTo(devname))
  177. {
  178. subElement.update("Subscribe");
  179. subElement.id = "subscribe_" + devname;
  180. subElement.onclick = subscribeToADev;
  181. }
  182. else
  183. {
  184. subElement.update("Unsubscribe");
  185. subElement.id = "unsubscribe_" + devname;
  186. subElement.onclick = unsubscribeToADev;
  187. }
  188.  
  189. $$("#games_by_user_pod")[0].down().down().down().insert(subElement);
  190. }
  191.  
  192. function addSubscribeButton() {
  193. //change css
  194. var rulesText = ".game_details_outer .game_dev { float: none;}";
  195. rulesText += ".game_details_outer {padding-bottom:5px;}"
  196. rulesText += ".game_details_outer .game_detail {padding-bottom:5px;}"
  197. var head = document.getElementsByTagName('head')[0],
  198. style = document.createElement('style'),
  199. rules = document.createTextNode(rulesText);
  200. style.type = 'text/css';
  201. if(style.styleSheet)
  202. style.styleSheet.cssText = rules.nodeValue;
  203. else style.appendChild(rules);
  204. head.appendChild(style);
  205.  
  206. //add links
  207. var btn = '<a><span class="kong_ico" aria-hidden="true">b </span>Subscribe</a>';
  208. var devs = $$(".game_dev");
  209. devs.each(function(item){
  210. var devurl = item.down().href;
  211. var devname = devurl.substring(devurl.lastIndexOf("/")+1);
  212.  
  213. var subElement = new Element("a",{"href":"#", "style":"color:#888;padding-left: 4px;"});
  214. if(!isDevSubscribedTo(devname))
  215. {
  216. subElement.update("Subscribe");
  217. subElement.id = "subscribe_" + devname;
  218. subElement.onclick = subscribeToADev;
  219. }
  220. else
  221. {
  222. subElement.update("Unsubscribe");
  223. subElement.id = "unsubscribe_" + devname;
  224. subElement.onclick = unsubscribeToADev;
  225. }
  226. item.insert(subElement);
  227. });
  228. }
  229.  
  230. function subscribeToADev(e)
  231. {
  232. e.preventDefault();
  233.  
  234. var list = getAllSubscribed();
  235. var dev = this.id.substring("subscribe_".length)
  236. list.push(dev)
  237. var savelist = list.join(",");
  238. Cookie.set('DevSubscribeList', savelist, 100000000,'/');
  239.  
  240. this.id= "unsubscribe_" + dev;
  241. this.update("Unsubscribe");
  242. this.onclick = unsubscribeToADev;
  243.  
  244. return false;
  245. }
  246.  
  247. function unsubscribeToADev(e)
  248. {
  249. e.preventDefault();
  250.  
  251. var list = getAllSubscribed();
  252. var dev = this.id.substring("unsubscribe_".length)
  253. if(list.indexOf(dev) != -1)
  254. {
  255. list.splice(list.indexOf(dev),1);
  256. }
  257.  
  258. var savelist = list.join(",");
  259. Cookie.set('DevSubscribeList', savelist, 100000000,'/');
  260.  
  261. this.id= "subscribe_" + dev;
  262. this.update("Subscribe");
  263. this.onclick = subscribeToADev;
  264. return false;
  265. }
  266.  
  267. function isDevSubscribedTo(devName)
  268. {
  269. var list = getAllSubscribed();
  270. if(list.indexOf(devName) == -1)
  271. return false;
  272. return true;
  273. }
  274.  
  275. function getAllSubscribed() {
  276. var list = Cookie.get("DevSubscribeList");
  277. if(list == null)
  278. return [];
  279. return list.split(",");
  280. }
  281.  
  282. function getLastDateChecked() {
  283. var time = Cookie.get("DevSubscribeLastCheck");
  284. if(time == null)
  285. time = new Date(0);
  286. return time;
  287. }
  288.  
  289. function getLastGameSavedFromDev(developer) {
  290. var game = Cookie.get("s_l_" + developer);
  291. if(game == null)
  292. game = "";
  293. return game;
  294. }
  295. init();
  296. }
  297.  
  298. // This injects our script onto the page.
  299. // Borrowed from: http://stackoverflow.com/a/2303228
  300. var script = document.createElement('script');
  301. script.appendChild(document.createTextNode('('+ main +')();'));
  302. (document.body || document.head || document.documentElement).appendChild(script);