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('