Commit 5f4794df3a876524da2d080c08aafaf6c3c7e6b9
1 parent
e2b6c2fa
Exists in
staging
and in
25 other branches
Add infinite pagination js library
Showing
2 changed files
with
60 additions
and
0 deletions
Show diff stats
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 |
| @@ -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 | +}; |