NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name HackerNews Infinite Scroll // @namespace http://openuserjs.org/users/brijeshb42 // @version 0.1.6 // @description Adds infinite scroll to hackernews front page // @author Brijesh Bittu // @match https://news.ycombinator.com/ // @match https://news.ycombinator.com/news // @match https://news.ycombinator.com/newest // @grant none // @license MIT // ==/UserScript== (function () { 'use strict'; var pageLoading = false; var moreLink = document.querySelector('.morelink'); var observer; function loadNextPage() { if (pageLoading) { return; } var lastMoreLink = moreLink; moreLink = document.querySelector('.morelink'); pageLoading = true; if (!moreLink) { return; } var link = moreLink.href; var xhr = new XMLHttpRequest(); xhr.open('GET', link); moreLink.innerHTML = 'Loading page: ' + link.split('p=').pop(); xhr.onreadystatechange = function () { if (xhr.readyState === 4 && xhr.status === 200) { var tmpNode = document.createElement('div'); tmpNode.innerHTML = xhr.responseText; var tableData = tmpNode.querySelector('.itemlist>tbody'); var originalTable = document.querySelector('.itemlist>tbody'); originalTable.removeChild(moreLink.parentElement.parentElement); originalTable.innerHTML += tableData.innerHTML; pageLoading = false; moreLink = document.querySelector('.morelink'); if (observer) { observer.unobserve(lastMoreLink); observer.observe(moreLink); } } }; xhr.send(); } function moveSearch() { var form = document.querySelector('form'); if (!form) { return; } form.parentNode.removeChild(form); form.setAttribute('style', 'float:right;margin:0;padding:0;color: #000'); var pageTop = document.querySelector('.pagetop'); pageTop.parentNode.appendChild(form); form.querySelector('input').focus(); } moveSearch(); function handleIntersection(entries, observer) { entries.forEach(function (entry) { if (!entry.isIntersecting) { return; } loadNextPage(); }); } observer = new IntersectionObserver(handleIntersection, { threshold: 1.0 }); observer.observe(moreLink); })();