NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Soup.io - no endless scroll // @description Disables endless loading of content on soup.io and adds navigation links instead // @namespace https://projects.universe-factory.net/ // @match http://*.soup.io/* // @version 1 // @grant none // ==/UserScript== function urlForOlder(url) { return url.replace(/&newer=1/,'').replace(/newer=1&/,''); } // disarm endless scolling var next_url; if (SOUP.Endless) { next_url = SOUP.Endless.next_url; SOUP.Endless = function() {} } // remove default links var endlessnotice = document.evaluate("//div[contains(concat(' ',normalize-space(@class),' '),' endlessnotice ')]", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); for (var i = 0; i < endlessnotice.snapshotLength; i++) { var node = endlessnotice.snapshotItem(i); node.parentNode.removeChild(node); } var posts = document.getElementById("posts"); // try to add some HTML code from noscript tags var parser = new DOMParser(); var noscripts = document.evaluate("//noscript", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); for (var i = 0; i < noscripts.snapshotLength; i++) { var node = noscripts.snapshotItem(i); var doc = parser.parseFromString(node.innerHTML, "text/html"); var paginationTopSnapshot = doc.evaluate("//div[contains(concat(' ',normalize-space(@class),' '),' paginationtop ')]", doc, null, XPathResult.ANY_UNORDERED_NODE_TYPE, null); if (paginationTopSnapshot.singleNodeValue != null) { var paginationTop = document.createElement("div"); paginationTop.innerHTML = paginationTopSnapshot.singleNodeValue.innerHTML; paginationTop.className = "pagination paginationtop"; posts.parentNode.insertBefore(paginationTop, posts); } var paginationBottomSnapshot = doc.evaluate("//div[contains(concat(' ',normalize-space(@class),' '),' paginationbottom ')]", doc, null, XPathResult.ANY_UNORDERED_NODE_TYPE, null); if (paginationBottomSnapshot.singleNodeValue != null) { var paginationBottom = document.createElement("div"); paginationBottom.innerHTML = paginationBottomSnapshot.singleNodeValue.innerHTML; paginationBottom.className = "pagination paginationbottom"; try { document.evaluate("//a[@name='more']", paginationBottom, null, XPathResult.ANY_UNORDERED_NODE_TYPE, null).singleNodeValue.rel = "next"; } catch (e) { } try { document.evaluate("//a[@name='back']", paginationBottom, null, XPathResult.ANY_UNORDERED_NODE_TYPE, null).singleNodeValue.rel = "prev"; } catch (e) { } posts.parentNode.insertBefore(paginationBottom, posts.nextSibling); } } // add an own "more" link if we still don't have one var paginationBottomCount = document.evaluate("count(//div[contains(concat(' ',normalize-space(@class),' '),' paginationbottom ')])", document, null, XPathResult.ANY_TYPE, null); if (paginationBottomCount.numberValue == 0 && next_url && next_url != "none") { var paginationBottom = document.createElement("div"); paginationBottom.style.marginBottom = "2em"; var next_link_strong = document.createElement("strong"); next_link_strong.style.fontSize = "150%"; var next_link = document.createElement("a"); next_link.href = urlForOlder(next_url); next_link.rel = "next"; next_link.innerHTML = "More →"; next_link_strong.appendChild(next_link); paginationBottom.appendChild(next_link_strong); posts.parentNode.insertBefore(paginationBottom, posts.nextSibling); }