Commit 5f4794df3a876524da2d080c08aafaf6c3c7e6b9

Authored by Braulio Bhavamitra
1 parent e2b6c2fa

Add infinite pagination js library

public/javascripts/application.js
@@ -23,6 +23,7 @@ @@ -23,6 +23,7 @@
23 *= require_self 23 *= require_self
24 *= require modal.js 24 *= require modal.js
25 *= require loading-overlay.js 25 *= require loading-overlay.js
  26 +*= require pagination.js
26 * views speficics 27 * views speficics
27 *= require add-and-join.js 28 *= require add-and-join.js
28 *= require report-abuse.js 29 *= require report-abuse.js
public/javascripts/pagination.js 0 → 100644
@@ -0,0 +1,59 @@ @@ -0,0 +1,59 @@
  1 +
  2 +pagination = {
  3 + loading: false,
  4 +
  5 + showMore: function(newPagination, appendFunction) {
  6 + if (newPagination) {
  7 + jQuery('.pagination').replaceWith(newPagination);
  8 + jQuery('.pagination').addClass('infinite-scroll');
  9 + } else
  10 + jQuery('.pagination').remove();
  11 +
  12 + appendFunction();
  13 + },
  14 +
  15 + click: function(callback) {
  16 + jQuery(document).on('click', '.pagination a', function(e) {
  17 + e.preventDefault();
  18 + if (callback)
  19 + callback(e, this)
  20 + else {
  21 + // what to have as default?
  22 + }
  23 + });
  24 + },
  25 +
  26 + // inspired by http://stackoverflow.com/questions/13555101/infinite-scroll-and-will-paginate-appending-the-next-page-of-items-multiple-ti
  27 + infiniteScroll: function(text, options) {
  28 + options = options || {};
  29 +
  30 + jQuery(function() {
  31 + jQuery('.pagination').addClass('infinite-scroll');
  32 + });
  33 +
  34 + jQuery(window).scroll(function () {
  35 + // Bail out right away if we're busy loading the next chunk.
  36 + if (pagination.loading)
  37 + return;
  38 +
  39 + var url = jQuery('.pagination .next_page').attr('href')
  40 + if (url && jQuery(window).scrollTop() > (jQuery('.pagination').offset().top - jQuery(window).height() - 50)) {
  41 +
  42 + jQuery('.pagination').html(
  43 + jQuery('<div class=loading>').text(text)
  44 + );
  45 +
  46 + pagination.loading = true
  47 +
  48 + if (options.load)
  49 + // don't forget to set pagination.loading to false!
  50 + options.load(url)
  51 + else
  52 + jQuery.getScript(url).always(function() {
  53 + pagination.loading = false
  54 + });
  55 + }
  56 + });
  57 + },
  58 +
  59 +};