Jdlrobson has uploaded a new change for review. https://gerrit.wikimedia.org/r/232857
Change subject: Add infinite scrolling on collection ...................................................................... Add infinite scrolling on collection Bug: T104736 Change-Id: Iebd18fc5ab4afeb7f5fbe828a73211e2743b8cca --- M resources/ext.gather.collections.models/Collection.js M resources/ext.gather.special.usercollections/init.js 2 files changed, 69 insertions(+), 3 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Gather refs/changes/57/232857/1 diff --git a/resources/ext.gather.collections.models/Collection.js b/resources/ext.gather.collections.models/Collection.js index c0207e6..f24064d 100644 --- a/resources/ext.gather.collections.models/Collection.js +++ b/resources/ext.gather.collections.models/Collection.js @@ -1,6 +1,10 @@ -( function ( M ) { +( function ( M, $ ) { var Collection, + CollectionItemCard = M.require( 'ext.gather.collections.models/CollectionItemCard' ), + InfiniteScroll = M.require( 'InfiniteScroll' ), + api = new mw.Api(), + Page = M.require( 'Page' ), View = M.require( 'View' ); /** @@ -23,9 +27,70 @@ add: function ( collectionItemCard ) { this.options.items.push( collectionItemCard ); this.$( '.collection-cards' ).append( collectionItemCard.$el ); + }, + /** + * Set the query required to retrieve more items in the collection + * @private + * @param {String} query + */ + _setQuery: function ( query ) { + var data = {}; + query.split( '&' ).map( function ( nameVal ) { + nameVal = nameVal.split( '=' ); + data[nameVal[0]] = decodeURIComponent( nameVal[1] ); + } ); + data.formatversion = 2; + // Server side rendering of image differs from client + // (client cannot calculate thumbnail url from page image title) + data.pithumbsize = 480; + this.continueArgs = data; + }, + /** + * Load new items into the collection from the associated api if available + * @private + */ + _loadItems: function () { + var self = this; + if ( this.continueArgs ) { + api.get( this.continueArgs ).done( function ( resp ) { + // Record that there is nothing left to show. + if ( !resp.continue ) { + self.continueArgs = false; + } else { + $.extend( self.continueArgs, resp.continue ); + } + $( resp.query.pages ).each( function () { + var itemOptions = { + page: new Page( this ) + }; + itemOptions.extract = this.extract; + // todo: pageimage + itemOptions.hasExtract = Boolean( this.extract ); + itemOptions.hasImage = Boolean( this.thumbnail ); + self.add( + new CollectionItemCard( itemOptions ) + ); + } ); + } ).always( function () { + self.infiniteScroll.enable(); + } ); + } + }, + /** @inheritdoc */ + initialize: function ( options ) { + var $btn; + View.prototype.initialize.call( this, options ); + $btn = this.$( '.collections-pagination a' ); + if ( $btn.length ) { + this.infiniteScroll = new InfiniteScroll(); + this.infiniteScroll.setElement( this.$el ); + this._query = this._setQuery( $btn.data( 'pagination-query' ) ); + this.infiniteScroll.on( 'load', $.proxy( this, '_loadItems' ) ); + $btn.remove(); + } } } ); M.define( 'ext.gather.collections.models/Collection', Collection ); -} )( mw.mobileFrontend ); +} )( mw.mobileFrontend, jQuery ); diff --git a/resources/ext.gather.special.usercollections/init.js b/resources/ext.gather.special.usercollections/init.js index bea8ca9..987dc64 100644 --- a/resources/ext.gather.special.usercollections/init.js +++ b/resources/ext.gather.special.usercollections/init.js @@ -15,7 +15,8 @@ } ); new Collection( { el: $collection, - enhance: true + enhance: true, + items: [] } ); } ); -- To view, visit https://gerrit.wikimedia.org/r/232857 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Iebd18fc5ab4afeb7f5fbe828a73211e2743b8cca Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/Gather Gerrit-Branch: master Gerrit-Owner: Jdlrobson <jrob...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits