Gab.ai Endlessly Scrollable Content

Automatically loads more Gab.ai content when you scroll to the ended of the loaded content.

  1. // ==UserScript==
  2. // @name Gab.ai Endlessly Scrollable Content
  3. // @namespace http://gab.ai/Jeremy20_9
  4. // @version 0.3
  5. // @description Automatically loads more Gab.ai content when you scroll to the ended of the loaded content.
  6. // @author Jeremiah 20:9
  7. // @match https://gab.ai
  8. // @match https://gab.ai/*
  9. // @grant none
  10. // ==/UserScript==
  11.  
  12. var itvwait = -1;
  13. var clicked = false;
  14. $(document).ready(function(){
  15. $(window).scroll(function(){
  16. if(clicked)
  17. return;
  18. var posts = $("post");
  19. if(posts.length < 2)
  20. return;
  21. var elem = $("a.post-list__load-more:last")[0];
  22. if(elem !== undefined && elementInViewport(elem))
  23. {
  24. // http://stackoverflow.com/a/27761213/2381712
  25. var evt = new MouseEvent("click", {
  26. view: window,
  27. bubbles: true,
  28. cancelable: true,
  29. clientX: 20
  30. });
  31. var ele = $("a.post-list__load-more")[0];
  32. ele.dispatchEvent(evt);
  33. clicked = true;
  34. itvwait = setTimeout(function(){clicked = false;}, 3000);
  35. }
  36. });
  37. });
  38.  
  39. // http://stackoverflow.com/questions/123999/how-to-tell-if-a-dom-element-is-visible-in-the-current-viewport
  40. function elementInViewport(el) {
  41. var top = el.offsetTop;
  42. var left = el.offsetLeft;
  43. var width = el.offsetWidth;
  44. var height = el.offsetHeight;
  45.  
  46. while(el.offsetParent) {
  47. el = el.offsetParent;
  48. top += el.offsetTop;
  49. left += el.offsetLeft;
  50. }
  51.  
  52. return (
  53. top >= window.pageYOffset &&
  54. left >= window.pageXOffset &&
  55. (top + height) <= (window.pageYOffset + window.innerHeight) &&
  56. (left + width) <= (window.pageXOffset + window.innerWidth)
  57. );
  58. }