Reddit - Auto Load More Comments

Automatically load more comments at the bottom of a Reddit comment page

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като Tampermonkey.

За да инсталирате този скрипт, трябва да имате инсталиран скриптов мениджър.

(Вече имам скриптов мениджър, искам да го инсталирам!)

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

(Вече имам инсталиран мениджър на стиловете, искам да го инсталирам!)

// ==UserScript==
// @name        Reddit - Auto Load More Comments
// @description Automatically load more comments at the bottom of a Reddit comment page
// @namespace   valacar.reddit.auto-load-more-comments
// @include     /^https?://www\.reddit\.com/r/[^/]+/comments//
// @version     0.1.1
// @grant       none
// @compatible  firefox Firefox with GreaseMonkey
// @compatible  chrome Chrome with TamperMonkey
// @author      valacar
// ==/UserScript==

// Note: most of this code is adapted from StackOverflow...
// http://stackoverflow.com/a/7557433
// http://stackoverflow.com/a/19343058

function TriggerMouseEvent(node, eventType) {
	var clickEvent = document.createEvent('MouseEvents');
	clickEvent.initEvent (eventType, true, true);
	//console.log('clicking');
	node.dispatchEvent (clickEvent);
}

function MoreCommentsLinkHandler() {
	var el = document.querySelector('.nestedlisting > div:nth-last-of-type(2) .morecomments a');

	if (el) {
		var rect = el.getBoundingClientRect();

		if (rect.top >= 0 && rect.left >= 0 &&
			rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
			rect.right <= (window.innerWidth || document.documentElement.clientWidth)
		   )
		{
			//console.log('visible');

			if (MoreCommentsLinkHandler.lastTime == undefined)
			{
				MoreCommentsLinkHandler.lastTime = new Date();
				MoreCommentsLinkHandler.firstTime = true;
			}
			else
			{
				var now = new Date();
				MoreCommentsLinkHandler.firstTime = false;
				var elapsedTime = now - MoreCommentsLinkHandler.lastTime;
				//console.log('elapsed: ' + elapsedTime);
				MoreCommentsLinkHandler.lastTime = now;
			}

			/* only click if one second has passed since the last time the link was visible */
			if (MoreCommentsLinkHandler.firstTime || elapsedTime > 1000) {
				TriggerMouseEvent(el, "click");
			}
		}
	}

}

document.addEventListener('DOMContentLoaded', MoreCommentsLinkHandler, false);
document.addEventListener('load', MoreCommentsLinkHandler, false);
document.addEventListener('scroll', MoreCommentsLinkHandler, false);
document.addEventListener('resize', MoreCommentsLinkHandler, false);