Advertisement
Guest User

Untitled

a guest
Jan 30th, 2018
478
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.42 KB | None | 0 0
  1. // ==UserScript==
  2. // @name AveNoel
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.1
  5. // @description try to take over the world!
  6. // @author You
  7. // @match https://avenoel.org/*
  8. // @grant none
  9. // ==/UserScript==
  10.  
  11. var banList = [
  12. {name:"banList1", rank:"0"},
  13. {name:"banList2", rank:"1"},
  14. {name:"banList3", rank:"2"}
  15. ];
  16.  
  17. var surlignes = [
  18. {name:"loveList1", color:"lightgreen"},
  19. {name:"loveList2", color:"lightgreen"}
  20. ];
  21.  
  22. var favs;
  23. var bans;
  24. const url = "https://avenoel.org";
  25.  
  26. (function() {
  27. 'use strict';
  28.  
  29. //debugger;
  30. //localStorage.removeItem("favs");
  31. //localStorage.removeItem("bans");
  32.  
  33. initCache();
  34.  
  35. var path = window.location.pathname;
  36.  
  37. if (path.startsWith('/forum')) {
  38. traiterForum();
  39. } else if (path.startsWith('/topic')) {
  40. traiterTopic();
  41. }
  42.  
  43. ajouterBarFav();
  44.  
  45.  
  46.  
  47. // messages non lus = <tr class="active">
  48.  
  49. })();
  50.  
  51. function initCache() {
  52. favs = localStorage.favs === undefined ? [] : JSON.parse(localStorage.favs);
  53. bans = localStorage.bans === undefined ? [] : JSON.parse(localStorage.bans);
  54. }
  55.  
  56. function ajouterBarFav() {
  57.  
  58. var barFav = document.getElementsByClassName("col-md-3 col-sm-12 col-xs-12 pull-right hidden-sm hidden-xs");
  59. var innerHTML = "<section><div id=\"idCourrier\" ><div></div></div><div>Favoris</div>";
  60.  
  61. for(var i = 0; i < favs.length; ++i) {
  62. var favIn = "";
  63. favs[i].split("-").splice(2).forEach(function(split) {
  64. favIn += split + " ";
  65. });
  66. innerHTML += "<li><a href=\"" + favs[i] + "\">" + favIn + "</a></li>";
  67. }
  68.  
  69. innerHTML += "</section>";
  70. barFav[0].children[1].innerHTML = innerHTML;
  71.  
  72. httpGetAsync("https://avenoel.org/messagerie", function (html) {
  73.  
  74. var mails = html.getElementsByClassName("active");
  75. var innerHTMLCourrier = "<div>Courriers";
  76.  
  77. for(var i = 1; i < mails.length -1; ++i) {
  78. innerHTMLCourrier += "<li>";
  79. innerHTMLCourrier += mails[i].getElementsByClassName("author")[0].innerHTML + " : ";
  80. innerHTMLCourrier += mails[i].getElementsByClassName("title")[0].innerHTML;
  81. innerHTMLCourrier += "</li>";
  82. }
  83.  
  84. innerHTMLCourrier += "</div>";
  85. document.getElementById("idCourrier").innerHTML = innerHTMLCourrier;
  86. });
  87.  
  88. }
  89.  
  90. //-----------------------------------------------------
  91. // Topic
  92. //-----------------------------------------------------
  93.  
  94. function traiterTopic() {
  95. var lstTopic = document.getElementsByClassName("topic-messages");
  96. var trsTopic = lstTopic[0].children;
  97. for(var iTopic = 0; iTopic < trsTopic.length; ++iTopic) {
  98. traiterTrTopic(trsTopic[iTopic]);
  99. }
  100.  
  101. traiterNavBarTopic();
  102. }
  103.  
  104.  
  105. function traiterNavBarTopic() {
  106.  
  107. var relativePath = "";
  108. getPath().split("-").splice(2).forEach(function(split) {
  109. relativePath += split + "-";
  110. });
  111. relativePath = relativePath.slice(0, -1);
  112.  
  113. var buttons = addButtonToNavBar(["buttonFav", "buttonBan"]);
  114. var buttonFav = buttons[0];
  115. var buttonBan = buttons[1];
  116.  
  117. // Bouton des favoris
  118. var isInFav = contentsString(favs, relativePath) != -1;
  119. if (isInFav) {
  120. buttonFav.innerHTML = "- FAVORIS";
  121. buttonFav.onclick = function() {
  122. deleteFromCache(favs, "favs");
  123. };
  124. } else {
  125. buttonFav.innerHTML = "+ FAVORIS";
  126. buttonFav.onclick = function() {
  127. addInCache(favs, "favs");
  128. };
  129. }
  130.  
  131. // Bouton des bans
  132. var isInBan = contentsString(bans, relativePath) != -1;
  133. if (isInBan) {
  134. buttonBan.innerHTML = "DEBAN";
  135. buttonBan.onclick = function() {
  136. deleteFromCache(bans, "bans");
  137. };
  138. } else {
  139. buttonBan.innerHTML = "BAN";
  140. buttonBan.onclick = function() {
  141. addInCache(bans, "bans");
  142. };
  143. }
  144.  
  145. }
  146.  
  147. function addInCache(cacheList, cacheName) {
  148. console.log("addInCache : " + cacheName);
  149. cacheList.push(getPath());
  150. localStorage.setItem(cacheName, JSON.stringify(cacheList));
  151. ajouterBarFav();
  152. traiterNavBarTopic();
  153. }
  154.  
  155. function deleteFromCache(cacheList, cacheName) {
  156. console.log("deleteFromCache : " + cacheName);
  157.  
  158. var relativePath = "";
  159. getPath().split("-").splice(2).forEach(function(split) {
  160. relativePath += split + "-";
  161. });
  162. relativePath = relativePath.slice(0, -1);
  163.  
  164. var i = contentsString(cacheList, relativePath);
  165. if (i !== -1) {
  166. cacheList.splice(i, 1);
  167. localStorage.setItem(cacheName, JSON.stringify(cacheList));
  168. }
  169.  
  170. ajouterBarFav();
  171. traiterNavBarTopic();
  172. }
  173.  
  174. function traiterTrTopic(tr) {
  175.  
  176. // Suppression des FDP
  177. banList.forEach(function(connard) {
  178.  
  179. var message = null;
  180. if (hasProfilLink(tr, connard.name)) {
  181. message = "Réponse sur "+ connard.name;
  182. }
  183. if (hasProfilAvatar(tr, connard.name)) {
  184. message = "Message de "+ connard.name;
  185. }
  186.  
  187. if (message !== null) {
  188. console.log(message);
  189.  
  190. if (connard.rank == 1) {
  191. tr.innerHTML = message;
  192. } else if (connard.rank == 2) {
  193. tr.innerHTML =
  194. "<div class=\"spoiler\">"+ message +
  195. " <span class=\"spoiler-btn\">[Afficher]</span>"+
  196. " <div class=\"spoiler-content\" style=\"display: none;\"> "+ tr.innerHTML + "</div>"+
  197. "</div>";
  198. }
  199.  
  200. return;
  201. }
  202. });
  203. }
  204.  
  205. //-----------------------------------------------------
  206. // Forum
  207. //-----------------------------------------------------
  208.  
  209.  
  210. function traiterForum() {
  211. var lst = document.getElementsByClassName("table table-striped topics");
  212. var trs = lst[0].children[1].children;
  213. for(var i = 0; i < trs.length; ++i) {
  214. traiterTrForum(trs[i]);
  215. }
  216. }
  217.  
  218. function traiterTrForum(tr) {
  219.  
  220. // Suppression des caracteres ching chong
  221. if (tr.innerText.match(/[\u3400-\u9FBF]/)) {
  222. console.log("Suppression des caracteres ching chong");
  223. tr.innerHTML = "";
  224. return;
  225. }
  226.  
  227. // Suppression des FDP
  228. banList.forEach(function(connard) {
  229. if (hasProfilLink(tr, connard.name)) {
  230. console.log("Suppression du FDP : " + connard.name);
  231. tr.innerHTML = "";
  232. return;
  233. }
  234. });
  235.  
  236. bans.forEach(function(url) {
  237. if (hasUrl(tr, url)) {
  238. console.log("Suppression du sujet : " + url);
  239. tr.innerHTML = "";
  240. return;
  241. }
  242. });
  243.  
  244. // Surlignage
  245. surlignes.forEach(function(surligne) {
  246. if (hasProfilLink(tr, surligne.name)) {
  247. console.log("Surlignage : " + surligne.name);
  248. tr.style.background = surligne.color;
  249. return;
  250. }
  251. });
  252.  
  253. }
  254.  
  255. //-----------------------------------------------------
  256. // Utils
  257. //-----------------------------------------------------
  258.  
  259. function httpGetAsync(theUrl, callback)
  260. {
  261. var xmlHttp = new XMLHttpRequest();
  262. xmlHttp.onreadystatechange = function() {
  263. if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
  264. callback(new DOMParser().parseFromString(xmlHttp.responseText, "text/html"));
  265. };
  266. xmlHttp.open("GET", theUrl, true); // true for asynchronous
  267. xmlHttp.send(null);
  268. }
  269.  
  270. function contentsString(list, match) {
  271. for(var i = 0; i < list.length; ++i) {
  272. if (stringContents(list[i], match)) {
  273. return i;
  274. }
  275. }
  276. return -1;
  277. }
  278.  
  279. function getPath() {
  280. return url + window.location.pathname;
  281. }
  282.  
  283. function designTopButton(button) {
  284. button.style.color = "white";
  285. button.style.backgroundColor = "transparent";
  286. button.style.border = "none";
  287. }
  288.  
  289. function hasProfilLink(elem, name) {
  290. return stringContents(elem.innerHTML, "https://avenoel.org/profil/" + name + "\"");
  291. }
  292.  
  293. function hasProfilAvatar(elem, name) {
  294. return stringContents(elem.innerHTML, "alt=\"Avatar de "+ name + "\"");
  295. }
  296.  
  297. function hasUrl(elem, url) {
  298. return stringContents(elem.innerHTML, "<a href=\"" + url + "\">");
  299. }
  300.  
  301. function stringContents(string, match) {
  302. return string.indexOf(match) !== -1;
  303. }
  304.  
  305. function addButtonToNavBar(names) {
  306.  
  307. var buttons = [];
  308.  
  309. if (document.getElementById(names[0]) === null) {
  310. var navbar = document.getElementsByClassName("nav navbar-nav navbar-links");
  311. var innerHTML = "";
  312. names.forEach(function(name) {
  313. innerHTML += "<li class=\"\"><a><button id=\"" + name + "\" ></button></a></li>";
  314. });
  315. navbar[0].innerHTML += innerHTML;
  316. names.forEach(function(name) {
  317. //button = document.getElementById(name);
  318. designTopButton(document.getElementById(name));
  319. });
  320. }
  321.  
  322. names.forEach(function(name) {
  323. buttons.push(document.getElementById(name));
  324. });
  325.  
  326. return buttons;
  327. }
  328.  
  329. //-----------------------------------------------------
  330. // Patch
  331. //-----------------------------------------------------
  332. //
  333. // 1.0.2 : Pastebin => Etape 3
  334. // + ajout de la liste des messages non lus au niveau de la barre des favs
  335. // 1.0.1 : https://pastebin.com/mFv7z7wb
  336. // + correction du bug des bans de topics
  337. // + detection du favoris/ban à chaque page du topic
  338. // 1.0.0 : https://pastebin.com/bjVmYYgM
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement