AjaxPipeHelper

Page => AJAX Page

  1. // ==UserScript==
  2. // @name AjaxPipeHelper
  3. // @author -
  4. // @namespace AjaxPipeHelper - Scripts
  5. // @description Page => AJAX Page
  6. // @license Creative Commons Attribution License
  7. // @version 0.1
  8. // @include *://old.reddit.com/*
  9. // @grant none
  10. // @run-at document-start
  11. // ==/UserScript==
  12.  
  13. function GM_getParentByTagName(el, tagName) {
  14. tagName = tagName.toLowerCase();
  15. if (el.tagName.toLowerCase() == tagName) {
  16. return el;
  17. }
  18. while (el && el.parentNode) {
  19. el = el.parentNode;
  20. if (el.tagName && el.tagName.toLowerCase() == tagName) {
  21. return el;
  22. }
  23. }
  24. return "undefined";
  25. }
  26. function parseResponseHeaders(headerStr) {
  27. var headers = {};
  28. if (!headerStr) {
  29. return headers;
  30. }
  31. var headerPairs = headerStr.split('\u000d\u000a');
  32. for (var i = 0, len = headerPairs.length; i < len; i++) {
  33. var headerPair = headerPairs[i];
  34. var index = headerPair.indexOf('\u003a\u0020');
  35. if (index > 0) {
  36. var key = headerPair.substring(0, index);
  37. var val = headerPair.substring(index + 2);
  38. headers[key.toLowerCase()] = val;
  39. }
  40. }
  41. return headers;
  42. }
  43.  
  44. function ajaxpiperenabler() {
  45. document.addEventListener("click", onclickact);
  46. window.addEventListener("popstate", poppye);
  47.  
  48. function poppye() {
  49. ajaxpipefetcher(location.href)
  50. }
  51.  
  52. function ajaxpipefetcher(currenttag) {
  53. GM_xmlhttpRequest({
  54. method: "GET",
  55. url: currenttag,
  56. stillpagefilter: true,
  57. onload: function (response) {
  58. var responseheaders = parseResponseHeaders(response.responseHeaders)
  59. if (responseheaders['content-type'].indexOf('text/html') != -1) {
  60. document.body.innerHTML = response.responseText;
  61. } else {
  62. location = currenttag
  63. }
  64. scrollTo(0, 0)
  65. window.history.pushState(null, null, currenttag);
  66. }
  67. });
  68.  
  69. }
  70.  
  71. function onclickact(e) {
  72. //re = "(?:javascript|.(?:jpe?g|gif|png|js|css|json|exe|zip|rar|iso|7z|ahk))";
  73. var currenttag = GM_getParentByTagName(e.target, "a")
  74. if (e.button === 0) {
  75. if ((currenttag.nodeName == "A") && (currenttag.href.indexOf(location.hostname) != -1) && (!currenttag.getAttribute("onclick")) && (!currenttag.getAttribute("data-toggle"))) {
  76. e.preventDefault();
  77. ajaxpipefetcher(currenttag.href)
  78. }
  79. }
  80. }
  81. }
  82. ajaxpiperenabler()