Greasy Fork

SweClockers JavaScript sidladdare

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

目前为 2015-05-16 提交的版本。查看 最新版本

// ==UserScript==
// @name         SweClockers JavaScript sidladdare
// @namespace    hAPsdWxok4bTePK8JZdG
// @author       LemonIllusion
// @version      1.1
// @match        http://www.sweclockers.com/forum/trad/*
// @match        http://www.sweclockers.com/forum/post/*
// @description  Lägger till en knapp som läser in kommande inlägg utan uppdatering av sidan.
// ==/UserScript==

/**
 * Get HTML asynchronously
 * @param  {String}   url      The URL to get HTML from
 * @param  {Function} callback A callback funtion. Pass in "response" variable to use returned HTML.
 * Source: http://gomakethings.com/getting-html-asynchronously-from-another-page/
 */
var getHTML = function ( url, callback ) {

    // Feature detection
    if ( !window.XMLHttpRequest ) return;

    // Create new request
    var xhr = new XMLHttpRequest();

    // Setup callback
    xhr.onload = function() {
        if ( callback && typeof( callback ) === 'function' ) {
            callback( this.responseXML );
        }
    }

    // Get the HTML
    xhr.open( 'GET', url );
    xhr.responseType = 'document';
    xhr.send();

};

function loadPage () {
    if (nextExists) { // Förutsatt att det finns fler sidor
        nextButton.onclick = ""; // Förhindra att flera sidor laddas in samtidigt
        nextButton.style.cssText = "margin-bottom:16px"; // Ta bort klickpekaren
        nextButton.getElementsByClassName("cell")[0].innerHTML = "Laddar..."; // Ändra texten
        getHTML( nextURL, function (response) { // Hämta nästa sida
            document.getElementsByClassName("forumPosts")[0].innerHTML += response.getElementsByClassName("forumPosts")[0].innerHTML; // Lägg till inlägg från nästa sida
            console.log("SweClockers JavaScript sidladdare: Nästa sida har lästs in");
            if (response.getElementsByClassName("next-page")[0] !== undefined) { // Kolla om det finns fler sidor efter den senast inlästa
                nextExists = true;
                nextURL = response.getElementsByClassName("next-page")[0].href;
                nextButton.getElementsByClassName("cell")[0].innerHTML = "Ladda fler"; // Ändra texten
                nextButton.style.cssText = "margin-bottom:16px;cursor:pointer"; // Lägg tillbaka klickpekaren
                nextButton.onclick = loadPage; // Låt funktionen köras ytterligare gånger
                console.log("SweClockers JavaScript sidladdare: Det finns fler sidor att läsa in.");
            } else {
                nextExists = false;
                nextButton.getElementsByClassName("cell")[0].innerHTML = "Det finns inga fler inlägg att ladda"; // Ändra texten
                console.log("SweClockers JavaScript sidladdare: Det finns inga fler sidor att läsa in.");
            }
        });
    } else {
        console.log("SweClockers JavaScript sidladdare: Sista sidan har redan laddats.");
    }
}

// Justera margin på .forumPosts så att knappen passar in bättre
document.getElementsByClassName("forumPosts")[0].style.cssText = "margin-bottom:8px";

// Skapa ruta/knapp
var nextButton = document.createElement("div");
nextButton.style.cssText = "margin-bottom:16px";
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
nextButton.innerHTML = '<div class="postHeader table"><div class="row"><div class="cell headerLink" style="text-align:center"></div></div></div>';
document.getElementsByClassName("forumControls")[0].parentNode.insertBefore(nextButton, document.getElementsByClassName("forumControls")[1]); // Sätt in elementet efter alla inlägg

// Kolla om det finns fler sidor
if (document.getElementsByClassName("next-page")[0] !== undefined) { // Om knappen "Nästa" finns
    var nextExists = true;
    var nextURL = document.getElementsByClassName("next-page")[0].href;
    console.log("SweClockers JavaScript sidladdare: Det finns fler sidor att läsa in.");
    nextButton.getElementsByClassName("cell")[0].innerHTML = "Ladda fler"; // Ändra texten
    nextButton.style.cssText = "margin-bottom:16px;cursor:pointer"; // Lägg till klickpekare för knappen
    nextButton.onclick = loadPage; // Lägg till funktion för att ladda nästa sida
} else { // Om knappen "Nästa" inte finns
    var nextExists = false; // Förhindra att funktionern över huvud taget kan köras
    nextButton.getElementsByClassName("cell")[0].innerHTML = "Det finns inga fler inlägg att ladda"; // Ändra texten
    console.log("SweClockers JavaScript sidladdare: Det finns inga fler sidor att läsa in.");
}