adv0catus

Untitled

Sep 27th, 2016
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.34 KB | None | 0 0
  1. // ==UserScript==
  2. // @name Kongregate ThreadHide
  3. // @description Enables you to hide certain threads on the Kongregate forums.
  4. // @version 1.0.0
  5. // @namespace http://www.kongregate.com/
  6. // @include http://www.kongregate.com/forums/*
  7. // @exclude http://www.kongregate.com/forums/*/*
  8. // @grant GM_setValue
  9. // @grant GM_getValue
  10.  
  11. // ==/UserScript==
  12.  
  13. GM_setValue("version", 1);
  14.  
  15. var MAX_MEMORY_TIME = 4838400000; //Eight weeks
  16.  
  17. var hiddenThreads;
  18. var currentTime = new Date().getTime();
  19.  
  20. function handleThreads() {
  21. var threads = document.getElementsByClassName("hentry");
  22. //if(!threads) return;
  23.  
  24. var len = threads.length, i, tid;
  25. for(i=len;i--;) {
  26. tid = parseInt(threads[i].getElementsByClassName("c2")[0].innerHTML.match(/\/topics\/([0-9]+)/)[1]);
  27. if(isHidden(tid)) {
  28. updateViewDate(tid);
  29. deleteThread(threads[i]); //Deleting known troll treads.
  30. } else {
  31. addHideLink(threads[i], tid);
  32. }
  33. }
  34. saveMemory();
  35. }
  36.  
  37. function deleteThread(thread) { //Removing a thread from the list.
  38. if(thread.parentNode) thread.parentNode.removeChild(thread);
  39. }
  40.  
  41. function addHideLink(thread, threadId) { //Adds the link to hide the thread
  42. var threadContainer = thread.getElementsByClassName("c2")[0];
  43. var smallElement = document.createElement("small");
  44. var hideLink = document.createElement("a");
  45. hideLink.innerHTML = "hide";
  46. hideLink.href = "javascript:void(0);";
  47. hideLink.addEventListener("dblclick", generateHideCallback(thread, threadId), false);
  48. smallElement.appendChild(hideLink);
  49. threadContainer.appendChild(smallElement);
  50. }
  51.  
  52. function getHiddenThreadDataById(threadId) {
  53. if(!hiddenThreads) return null;
  54. for each(var i in hiddenThreads) {
  55. if(i.id == threadId) return i;
  56. }
  57. return null;
  58. }
  59.  
  60. function isHidden(threadId) { //Checks if the thread is hidden
  61. if(getHiddenThreadDataById(threadId)) return true;
  62. else return false;
  63. }
  64.  
  65. function updateViewDate(threadId) { //Updates the last time that thread was seen
  66. var threadData = getHiddenThreadDataById(threadId);
  67. if(!threadData) return;
  68. threadData.time = currentTime;
  69. }
  70.  
  71. function addHiddenThread(thread, threadId) {
  72. deleteThread(thread);
  73. hiddenThreads.push({
  74. id: threadId,
  75. time: currentTime
  76. });
  77. saveMemory();
  78. }
  79.  
  80. function generateHideCallback(thread, threadId) {
  81. return (function(event) {
  82. addHiddenThread(thread, threadId);
  83. });
  84. }
  85.  
  86. function loadMemory() {
  87. hiddenThreads = [];
  88. var data = GM_getValue("threadData", "");
  89. if(!data) return;
  90. var splitData = data.split(";");
  91. var dataFragments, threadDate;
  92. for each(var i in splitData) {
  93. dataFragments = i.split("_"); //id_date;id_date;id_date
  94. threadDate = parseInt(dataFragments[1])*86400000;
  95. if(currentTime-threadDate < MAX_MEMORY_TIME) {
  96. hiddenThreads.push({
  97. id: parseInt(dataFragments[0]),
  98. time: threadDate
  99. });
  100. }
  101. }
  102. }
  103.  
  104. function saveMemory() {
  105. var saveString = "";
  106. for each(var i in hiddenThreads) {
  107. if(saveString) saveString += ";";
  108. saveString += i.id+"_"+parseInt(i.time/86400000); //This is a day. We're dividing for compression purposes.
  109. }
  110. GM_setValue("threadData", saveString);
  111. }
  112.  
  113. function deleteMemory() {
  114. hiddenThreads = [];
  115. GM_deleteValue("threadData");
  116. }
  117.  
  118. try {
  119. loadMemory();
  120. handleThreads();
  121. GM_registerMenuCommand("Reset Hidden Thread Memory", deleteMemory);
  122. } catch(e) {
  123.  
  124. }
Advertisement
Add Comment
Please, Sign In to add comment