aboutsummaryrefslogtreecommitdiff
path: root/views/default/js/infinite_scroll/infinite_scroll.php
diff options
context:
space:
mode:
Diffstat (limited to 'views/default/js/infinite_scroll/infinite_scroll.php')
-rw-r--r--views/default/js/infinite_scroll/infinite_scroll.php88
1 files changed, 88 insertions, 0 deletions
diff --git a/views/default/js/infinite_scroll/infinite_scroll.php b/views/default/js/infinite_scroll/infinite_scroll.php
new file mode 100644
index 000000000..98b7fac05
--- /dev/null
+++ b/views/default/js/infinite_scroll/infinite_scroll.php
@@ -0,0 +1,88 @@
+<?php
+/**
+ * Load next page of a listing through ajax when a button clicked
+ *
+ * @package ElggInfiniteScroll
+ */
+?>
+
+elgg.provide('elgg.infinite_scroll');
+
+elgg.infinite_scroll.load = function($list, offset, callback) {
+ var $params = elgg.parse_str(elgg.parse_url(location.href).query);
+ $params = $.extend($params, {
+ path: elgg.parse_url(location.href).path,
+ items_type: $list.hasClass('elgg-list-entity') ? 'entity' :
+ $list.hasClass('elgg-gallery') ? 'entity' :
+ $list.hasClass('elgg-list-river') ? 'river' :
+ $list.hasClass('elgg-list-annotation') ? 'annotation' : false,
+ offset: offset,
+ });
+
+ var url = "/ajax/view/infinite_scroll/list?" + $.param($params);
+ elgg.get(url, callback);
+}
+
+elgg.infinite_scroll.load_next = function(event, direction) {
+ var $bottom = $(this).parent();
+ elgg.infinite_scroll.bottom = $bottom;
+
+ $bottom.addClass('elgg-infinite-scroll-ajax-loading')
+ .find('.elgg-button').css('visibility', 'hidden');
+
+ var $list = $bottom.siblings('.elgg-list, .elgg-gallery');
+ var offset = $list.children().length;
+ elgg.infinite_scroll.load($list, offset, elgg.infinite_scroll.append);
+
+ return false;
+}
+
+elgg.infinite_scroll.append = function(data) {
+ var $bottom = elgg.infinite_scroll.bottom;
+ $bottom.removeClass('elgg-infinite-scroll-ajax-loading');
+ var $list = $bottom.siblings('.elgg-list, .elgg-gallery');
+
+ var more = false;
+ if (data) {
+ $list.append($(data).children());
+ if ($(data).children().length == $list.data('elgg-infinite-scroll-limit')) {
+ $bottom.find('.elgg-button').css('visibility', 'visible');
+ more = true;
+ }
+ }
+ if (!more) {
+ $bottom.html(elgg.echo('infinite_scroll:list_end'));
+ }
+ $bottom.find('.elgg-button').trigger('append', data);
+}
+
+elgg.infinite_scroll.init = function() {
+
+ // Select all paginated .elgg-list or .elgg-gallery witch aren't into widgets
+ $list = $('.elgg-pagination').siblings('.elgg-list, .elgg-gallery').filter(':not(.elgg-module *)')
+
+ // Hide pagination
+ .siblings('.elgg-pagination').hide().end()
+
+ // Set limit as HTML5 data attribute
+ .each(function(){
+ $(this).data('elgg-infinite-scroll-limit', $(this).children().length);
+ })
+
+ // Add load more button at the final of the list
+ .after(
+ $('<div class="elgg-infinite-scroll-bottom"></div>')
+ .append(
+ $('<?php
+ echo elgg_view('output/url', array(
+ 'text' => elgg_echo('infinite_scroll:load_more'),
+ 'href' => '',
+ 'class' => 'elgg-button',
+ ));
+ ?>').click(elgg.infinite_scroll.load_next)
+ )
+ );
+
+};
+
+elgg.register_hook_handler('init', 'system', elgg.infinite_scroll.init);