From 5f4794df3a876524da2d080c08aafaf6c3c7e6b9 Mon Sep 17 00:00:00 2001 From: Braulio Bhavamitra Date: Sun, 14 Jun 2015 16:53:27 -0300 Subject: [PATCH] Add infinite pagination js library --- public/javascripts/application.js | 1 + public/javascripts/pagination.js | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 0 deletions(-) create mode 100644 public/javascripts/pagination.js diff --git a/public/javascripts/application.js b/public/javascripts/application.js index 1c53182..eff0920 100644 --- a/public/javascripts/application.js +++ b/public/javascripts/application.js @@ -23,6 +23,7 @@ *= require_self *= require modal.js *= require loading-overlay.js +*= require pagination.js * views speficics *= require add-and-join.js *= require report-abuse.js diff --git a/public/javascripts/pagination.js b/public/javascripts/pagination.js new file mode 100644 index 0000000..d385d5d --- /dev/null +++ b/public/javascripts/pagination.js @@ -0,0 +1,59 @@ + +pagination = { + loading: false, + + showMore: function(newPagination, appendFunction) { + if (newPagination) { + jQuery('.pagination').replaceWith(newPagination); + jQuery('.pagination').addClass('infinite-scroll'); + } else + jQuery('.pagination').remove(); + + appendFunction(); + }, + + click: function(callback) { + jQuery(document).on('click', '.pagination a', function(e) { + e.preventDefault(); + if (callback) + callback(e, this) + else { + // what to have as default? + } + }); + }, + + // inspired by http://stackoverflow.com/questions/13555101/infinite-scroll-and-will-paginate-appending-the-next-page-of-items-multiple-ti + infiniteScroll: function(text, options) { + options = options || {}; + + jQuery(function() { + jQuery('.pagination').addClass('infinite-scroll'); + }); + + jQuery(window).scroll(function () { + // Bail out right away if we're busy loading the next chunk. + if (pagination.loading) + return; + + var url = jQuery('.pagination .next_page').attr('href') + if (url && jQuery(window).scrollTop() > (jQuery('.pagination').offset().top - jQuery(window).height() - 50)) { + + jQuery('.pagination').html( + jQuery('
').text(text) + ); + + pagination.loading = true + + if (options.load) + // don't forget to set pagination.loading to false! + options.load(url) + else + jQuery.getScript(url).always(function() { + pagination.loading = false + }); + } + }); + }, + +}; -- libgit2 0.21.2