/* * Garden's jQuery MorePager (1.0.0) * by Mark O'Sullivan (www.markosullivan.ca) * mark@vanillaforums.com * * Copyright (c) 2009 Mark O'Sullivan (www.markosullivan.ca) * Licensed under the GPL v2. * * * NOTE: This script requires jQuery to work. Download jQuery at www.jquery.com */ (function(jQuery) { var self = null; jQuery.fn.morepager = function(o) { return this.each(function() { new jQuery.morepager(this, o); }); }; /** * The morepager object. * * @constructor * @name jQuery.morepager * @param Object e The element containing the "more" link. * @param Hash o A set of key/value pairs to set as configuration properties. * @cat Plugins/morepager */ jQuery.morepager = function (e, o) { this.options = o || {}; this.pager_loading_class = this.options.pagerLoadingClass || 'Loading'; this.page_container_selector = this.options.pageContainerSelector || 'undefined'; this.pager_in_container = this.options.pagerInContainer || false; this.page_container = jQuery(this.page_container_selector); this.pager_row = jQuery(e); this.pager_row_id = this.pager_row.attr('id'); this.extra_pager_data = this.options.extraPagerData || ''; this.after_page_loaded = this.options.afterPageLoaded; this.init(); }; jQuery.morepager.fn = jQuery.morepager.prototype = { morepager: '1.0.0' }; jQuery.morepager.fn.extend = jQuery.morepager.extend = jQuery.extend; jQuery.morepager.fn.extend({ init: function() { var self = this; $('#' + this.pager_row_id + ' a').live('click', function() { var anchor = this; self.page_source = self.options.pageSource || $(anchor).attr('href'); self.page(anchor); return false; }); }, page: function(anchor) { var self = this; $(anchor).html(' ').addClass(self.pager_loading_class); var type = self.pager_row_id.substr(self.pager_row_id.length - 4, self.pager_row_id.length).toLowerCase() == 'more' ? 'more' : 'less'; $.ajax({ type: "POST", url: self.page_source, data: 'DeliveryType=VIEW&DeliveryMethod=JSON&Form/TransientKey=' + gdn.definition('TransientKey', '') + self.extra_pager_data, dataType: 'json', error: function(XMLHttpRequest, textStatus, errorThrown) { // Popup the error $.popup({}, XMLHttpRequest.responseText); }, success: function(json) { json = $.postParseJson(json); if (self.pager_in_container == true) { if (type == 'more') { self.pager_row.before(json.Data); self.pager_row.before(json.MoreRow); } else { self.pager_row.after(json.Data); self.pager_row.after(json.LessRow); } } else { if (type == 'more') { self.page_container.append(json.Data); self.pager_row.before(json.MoreRow); } else { self.page_container.prepend(json.Data); self.pager_row.after(json.LessRow); } } self.pager_row.remove(); self.pager_row = $('#' + self.pager_row_id); if (self.after_page_loaded != null) self.after_page_loaded(); } }); } }); })(jQuery);