NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name xenForo - Endless Forum Pages jQuery 2016 // @namespace https://openuserjs.org/users/HankLloydright // @description Makes xenForo forum pages infinitely long by adding a 'Load More Posts' button at the top and bottom of every page. Loads 20 more posts 'in-line' without page refresh -- based off of script by https://openuserjs.org/users/ardiman // @grant none // @author HankLloydright // @icon https://raw.githubusercontent.com/ardiman/userscripts/master/scriptlogo.gif // @include http://www.tivocommunity.com/community/index.php?threads/* // @include https://www.tivocommunity.com/community/index.php?threads/* // @include https://teslamotorsclub.com/tmc/threads/* // @license CC BY-NC-SA 3.0; https://creativecommons.org/licenses/by-nc-sa/3.0/ // @version 1.3.0 // @date 2016-11-14 // ==/UserScript== var nextURL = null; // the URL for next, or null for pending/none var newpagenav=null; setNextURL(document); window.addEventListener("load", init, false); function init() { setNextURL(document); addMoreButton(); // pullMore(); } function addMoreButton() { if (nextURL!==null) { $(".pageNavHeader").html("<button type='button' style='font-size:16px;' class='loadmoreclass'>Load more posts...</button>"); $(".loadmoreclass").click( function() { pullMore(); }); } } function pullMore() { $(".pageNavHeader").html("<span style='font-size:12pt;font-weight:bold;'>Loading more posts Please Wait...</span>"); var iframe = document.createElement("iframe"); iframe.addEventListener("load", whee, false); iframe.width = 1; iframe.height = 1; iframe.id = "childframe"; iframe.style.visibility = "hidden"; iframe.src = nextURL; document.body.appendChild(iframe); // Don't pull this more than once. nextURL = null; function whee() { var iframeDoc = iframe.contentDocument; // Update nextURL for when we reach the bottom of the page again. setNextURL(iframeDoc); // Move posts into the main page's table. siphon(iframeDoc); // Get rid of the iframe to free memory once it's GCed and so on. // Use a setTimeout to work around bug 305471 and to spread out the CPU usage to keep Firefox responsive. setTimeout( function() { iframe.parentNode.removeChild(iframe); }, 1500); } } function findNextLink(doc) { var lnks=doc.links; newpagenav=doc.getElementsByClassName("pageNavLinkGroup"); // console.log(newpagenav[1].innerHTML); for (var i = 0, len = lnks.length; i < len; i++) { var lnk=lnks[i].href; var loc=lnk.indexOf("page-"); var htm=lnks[i].innerHTML.indexOf("Next >"); if (loc>0 && htm>=0) { // console.log("found next link @"+ i +": Loc:"+loc+"/htm:"+htm+" "+lnk); return lnk; } else { docpagenav=document.getElementsByClassName("pageNavLinkGroup")[1]; $(docpagenav).html(newpagenav[0].innerHTML); } } return null; } function setNextURL(doc) { nextURL = findNextLink(doc); } function siphon(childWindow) { var currentDiscussionList = $("#messageList"); $(childWindow).ready(function() { var childFrame = $("#childframe").contents().find("#messageList"); var nodesToAppend = childFrame.children(); nodesToAppend.appendTo(currentDiscussionList); docpagenav=document.getElementsByClassName("pageNavLinkGroup")[1]; $(docpagenav).html(newpagenav[1].innerHTML); addMoreButton(); }); }