SweClockers JavaScript sidladdare

Lägger till en knapp som läser in kommande inlägg utan uppdatering av sidan.

当前为 2015-05-16 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name SweClockers JavaScript sidladdare
  3. // @namespace hAPsdWxok4bTePK8JZdG
  4. // @author LemonIllusion
  5. // @version 1.1.1
  6. // @match http://www.sweclockers.com/forum/trad/*
  7. // @match http://www.sweclockers.com/forum/post/*
  8. // @description Lägger till en knapp som läser in kommande inlägg utan uppdatering av sidan.
  9. // ==/UserScript==
  10.  
  11. /**
  12. * Get HTML asynchronously
  13. * @param {String} url The URL to get HTML from
  14. * @param {Function} callback A callback funtion. Pass in "response" variable to use returned HTML.
  15. * Source: http://gomakethings.com/getting-html-asynchronously-from-another-page/
  16. */
  17. var getHTML = function ( url, callback ) {
  18.  
  19. // Feature detection
  20. if ( !window.XMLHttpRequest ) return;
  21.  
  22. // Create new request
  23. var xhr = new XMLHttpRequest();
  24.  
  25. // Setup callback
  26. xhr.onload = function() {
  27. if ( callback && typeof( callback ) === 'function' ) {
  28. callback( this.responseXML );
  29. }
  30. }
  31.  
  32. // Get the HTML
  33. xhr.open( 'GET', url );
  34. xhr.responseType = 'document';
  35. xhr.send();
  36.  
  37. };
  38.  
  39. function loadPage () {
  40. if (nextExists) { // Förutsatt att det finns fler sidor
  41. nextButton.onclick = ""; // Förhindra att flera sidor laddas in samtidigt
  42. nextButton.style.cssText = "margin-bottom:16px"; // Ta bort klickpekaren
  43. nextButton.getElementsByClassName("cell")[0].innerHTML = "Laddar..."; // Ändra texten
  44. getHTML( nextURL, function (response) { // Hämta nästa sida
  45. document.getElementsByClassName("forumPosts")[0].innerHTML += response.getElementsByClassName("forumPosts")[0].innerHTML; // Lägg till inlägg från nästa sida
  46. console.log("SweClockers JavaScript sidladdare: Nästa sida har lästs in");
  47. if (response.getElementsByClassName("next-page")[0] !== undefined) { // Kolla om det finns fler sidor efter den senast inlästa
  48. nextExists = true;
  49. nextURL = response.getElementsByClassName("next-page")[0].href;
  50. nextButton.getElementsByClassName("cell")[0].innerHTML = "Ladda fler inlägg"; // Ändra texten
  51. nextButton.style.cssText = "margin-bottom:16px;cursor:pointer"; // Lägg tillbaka klickpekaren
  52. nextButton.onclick = loadPage; // Låt funktionen köras ytterligare gånger
  53. console.log("SweClockers JavaScript sidladdare: Det finns fler sidor att läsa in.");
  54. } else {
  55. nextExists = false;
  56. nextButton.getElementsByClassName("cell")[0].innerHTML = "Det finns inga fler inlägg att ladda"; // Ändra texten
  57. console.log("SweClockers JavaScript sidladdare: Det finns inga fler sidor att läsa in.");
  58. }
  59. });
  60. } else {
  61. console.log("SweClockers JavaScript sidladdare: Sista sidan har redan laddats.");
  62. }
  63. }
  64.  
  65. // Justera margin på .forumPosts så att knappen passar in bättre
  66. document.getElementsByClassName("forumPosts")[0].style.cssText = "margin-bottom:8px";
  67.  
  68. // Skapa ruta/knapp
  69. var nextButton = document.createElement("div");
  70. nextButton.style.cssText = "margin-bottom:16px";
  71. nextButton.className = "forumPost"; // Alla klasser och divar på den här raden och raden under är till för att forumets stylesheet (både vanligt och Blargmode) ska appliceras korrekt
  72. nextButton.innerHTML = '<div class="postHeader table"><div class="row"><div class="cell headerLink" style="text-align:center"></div></div></div>';
  73. document.getElementsByClassName("forumControls")[0].parentNode.insertBefore(nextButton, document.getElementsByClassName("forumControls")[1]); // Sätt in elementet efter alla inlägg
  74.  
  75. // Kolla om det finns fler sidor
  76. if (document.getElementsByClassName("next-page")[0] !== undefined) { // Om knappen "Nästa" finns
  77. var nextExists = true;
  78. var nextURL = document.getElementsByClassName("next-page")[0].href;
  79. console.log("SweClockers JavaScript sidladdare: Det finns fler sidor att läsa in.");
  80. nextButton.getElementsByClassName("cell")[0].innerHTML = "Ladda fler inlägg"; // Ändra texten
  81. nextButton.style.cssText = "margin-bottom:16px;cursor:pointer"; // Lägg till klickpekare för knappen
  82. nextButton.onclick = loadPage; // Lägg till funktion för att ladda nästa sida
  83. } else { // Om knappen "Nästa" inte finns
  84. var nextExists = false; // Förhindra att funktionern över huvud taget kan köras
  85. nextButton.getElementsByClassName("cell")[0].innerHTML = "Det finns inga fler inlägg att ladda"; // Ändra texten
  86. console.log("SweClockers JavaScript sidladdare: Det finns inga fler sidor att läsa in.");
  87. }