Advertisement
Guest User

Untitled

a guest
May 27th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.66 KB | None | 0 0
  1. !function(window, document) {
  2. window.InfiniteScroll = function(options) {
  3. function $(val, node) {
  4. return node = node || document, node.querySelectorAll(val);
  5. }
  6. function isArray(value) {
  7. return void 0 !== value;
  8. }
  9. function render(property) {
  10. return "function" == typeof property;
  11. }
  12. function extend(target, object) {
  13. target = target || {};
  14. var key;
  15. for (key in object) {
  16. target[key] = "object" == typeof object[key] ? extend(target[key], object[key]) : object[key];
  17. }
  18. return target;
  19. }
  20. function value(key, value, name) {
  21. return isArray(key) ? isArray(value) ? void(isArray(name) ? data[key][name] = value : data[key].push(value)) : data[key] : data;
  22. }
  23. function noop(a, i) {
  24. if (isArray(i)) {
  25. delete data[a][i];
  26. } else {
  27. data[a] = [];
  28. }
  29. }
  30. function trigger(name, args) {
  31. if (isArray(data[name])) {
  32. var i;
  33. for (i in data[name]) {
  34. data[name][i](args);
  35. }
  36. }
  37. }
  38. function update() {
  39. return result.innerHTML = state.text.loading, initial = true, id ? (docEl.classList.add(state.state.loading), trigger("loading", [state]), void handler(id, function(s, error) {
  40. docEl.className = getdate + " " + state.state.load;
  41. p = document.createElement("div");
  42. p.innerHTML = s;
  43. var title = $("title", p);
  44. var a = $(state.target.post, p);
  45. var el = $(state.target.anchors + " " + state.target.anchor, p);
  46. var b = $(state.target.post, node);
  47. if (title = title && title[0] ? title[0].innerHTML : "", a.length && b.length) {
  48. var e = b[b.length - 1];
  49. document.title = title;
  50. e.insertAdjacentHTML("afterend", '<span class="fi" id="#fi:' + val + '"></span>');
  51. p = document.createElement("div");
  52. var i = 0;
  53. var l = a.length;
  54. for (; l > i; ++i) {
  55. p.appendChild(a[i]);
  56. }
  57. e.insertAdjacentHTML("afterend", p.innerHTML);
  58. init();
  59. id = el.length ? el[0].href : false;
  60. initial = false;
  61. val++;
  62. trigger("load", [state, s, error]);
  63. }
  64. }, function(event, error) {
  65. docEl.classList.add(state.state.error);
  66. initial = false;
  67. init(1);
  68. trigger("error", [state, event, error]);
  69. })) : (docEl.classList.add(state.state.loaded), result.innerHTML = state.text.loaded, trigger("loaded", [state]));
  70. }
  71. function init(err) {
  72. if (result.innerHTML = "", header) {
  73. p.innerHTML = state.text[err ? "error" : "load"];
  74. var row = p.firstChild;
  75. row.onclick = function() {
  76. return 2 === state.type && (header = false), update(), false;
  77. };
  78. result.appendChild(row);
  79. }
  80. }
  81. var handler = "infinite-scroll-state-";
  82. var state = {
  83. target : {
  84. posts : ".posts",
  85. post : ".post",
  86. anchors : ".anchors",
  87. anchor : ".anchor"
  88. },
  89. text : {
  90. load : "%s",
  91. loading : "%s",
  92. loaded : "%s",
  93. error : "%s"
  94. },
  95. state : {
  96. load : handler + "load",
  97. loading : handler + "loading",
  98. loaded : handler + "loaded",
  99. error : handler + "error"
  100. }
  101. };
  102. var data = {
  103. load : [],
  104. loading : [],
  105. loaded : [],
  106. error : []
  107. };
  108. state = extend(state, options || {});
  109. state.on = value;
  110. state.off = noop;
  111. var p = null;
  112. handler = function(path, callback, body) {
  113. if (window.XMLHttpRequest) {
  114. debugger;
  115. var req = new XMLHttpRequest;
  116. req.onload = function() {
  117. callback(req.responseText, req);
  118. }
  119. req.open("GET", path);
  120. req.send();
  121. }
  122. };
  123. var header = 1 !== state.type;
  124. var initial = false;
  125. var node = $(state.target.posts)[0];
  126. var result = $(state.target.anchors)[0];
  127. var id = $(state.target.anchor, result);
  128. var body = document.body;
  129. var docEl = document.documentElement;
  130. var getdate = docEl.className || "";
  131. var i = node.offsetTop + node.offsetHeight;
  132. var win_height = window.innerHeight;
  133. var myInterval = 0;
  134. var resizeTimeout = null;
  135. var val = 1;
  136. if (id.length) {
  137. id = id[0].href;
  138. node.insertAdjacentHTML("afterbegin", '<span class="fi" id="#fi:0"></span>');
  139. p = document.createElement("div");
  140. init();
  141. var render = function() {
  142. debugger;
  143. i = node.offsetTop + node.offsetHeight;
  144. win_height = window.innerHeight;
  145. myInterval = body.scrollTop || docEl.scrollTop;
  146. if (!(initial || i > myInterval + win_height)) {
  147. update();
  148. }
  149. };
  150. if (0 !== state.type) {
  151. if (2 === state.type) render();
  152. window.addEventListener("scroll", function() {
  153. if (!header) {
  154. if (resizeTimeout) {
  155. window.clearTimeout(resizeTimeout);
  156. }
  157. resizeTimeout = window.setTimeout(render, 500);
  158. }
  159. }, false);
  160. }
  161. }
  162. return state;
  163. };
  164. }(window, document);
  165. new InfiniteScroll({
  166. type : 0,
  167. target : {
  168. posts : ".blog-posts",
  169. post : ".date-outer",
  170. anchors : ".blog-pager",
  171. anchor : ".blog-pager-older-link"
  172. },
  173. text : {
  174. load : '<a class="js-load" href="javascript:;">Muat Lagi</a>',
  175. loading : '<span class="js-loading" style="cursor:wait;">Memuat\u2026</span>',
  176. loaded : '<span class="js-loaded">Dimuat.</span>',
  177. error : '<a class="js-error" href="javascript:;">Kesalahan.</a>'
  178. }
  179. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement