https://www.mediawiki.org/wiki/Special:Code/MediaWiki/114763

Revision: 114763
Author:   kaldari
Date:     2012-04-06 06:27:51 +0000 (Fri, 06 Apr 2012)
Log Message:
-----------
improving more link, adding support for infinite scrolling, fixing layout of 
stats bar, etc.

Modified Paths:
--------------
    trunk/extensions/PageTriage/PageTriage.php
    trunk/extensions/PageTriage/SpecialPageTriage.php
    trunk/extensions/PageTriage/api/ApiPageTriageGetMetadata.php
    
trunk/extensions/PageTriage/modules/ext.pageTriage.models/ext.pageTriage.article.js
    
trunk/extensions/PageTriage/modules/ext.pageTriage.views/ext.pageTriage.listStatsNav.css
    
trunk/extensions/PageTriage/modules/ext.pageTriage.views/ext.pageTriage.listStatsNav.js
    
trunk/extensions/PageTriage/modules/ext.pageTriage.views/ext.pageTriage.listView.css
    
trunk/extensions/PageTriage/modules/ext.pageTriage.views/ext.pageTriage.listView.js

Modified: trunk/extensions/PageTriage/PageTriage.php
===================================================================
--- trunk/extensions/PageTriage/PageTriage.php  2012-04-06 05:06:27 UTC (rev 
114762)
+++ trunk/extensions/PageTriage/PageTriage.php  2012-04-06 06:27:51 UTC (rev 
114763)
@@ -44,7 +44,8 @@
 );
 
 // Begin configuration variables
-$wgPageTriagePageIdPerRequest = 20;
+$wgPageTriagePagesPerRequest = 20; // Maximum number of articles for the API 
to retrieve at once
+$wgPageTriageInfiniteScrolling = false; // Whether or not to use infinite 
scrolling in the page list
 // End configuration variables
 
 $dir = dirname( __FILE__ ) . '/';
@@ -189,7 +190,8 @@
        'dependencies' => array(
                'mediawiki.jqueryMsg',
                'ext.pageTriage.models',
-               'jquery.ui.button'
+               'jquery.ui.button',
+               'jquery.spinner'
        ),
        'scripts' => array(
                'ext.pageTriage.views/ext.pageTriage.listItem.js',

Modified: trunk/extensions/PageTriage/SpecialPageTriage.php
===================================================================
--- trunk/extensions/PageTriage/SpecialPageTriage.php   2012-04-06 05:06:27 UTC 
(rev 114762)
+++ trunk/extensions/PageTriage/SpecialPageTriage.php   2012-04-06 06:27:51 UTC 
(rev 114763)
@@ -24,6 +24,7 @@
         * @param $sub string The subpage, if any
         */
        public function execute( $sub ) {
+               global $wgPageTriageInfiniteScrolling;
                $out = $this->getOutput();
                
                // TODO: check user permissions, make sure they're logged in 
and have the pagepatrol userright
@@ -35,6 +36,16 @@
                
                // Output the title of the page
                $out->setPageTitle( wfMessage( 'pagetriage' ) );
+               
+               // Set whether or not to do infinite scrolling
+               if ( is_bool( $wgPageTriageInfiniteScrolling ) ) {
+                       // Convert to string
+                       $infiniteScroll = $wgPageTriageInfiniteScrolling ? 
"true" : "false";
+               } else {
+                       $infiniteScroll = $wgPageTriageInfiniteScrolling;
+               }
+               $out->addScript( "<script 
type=\"text/javascript\">mw.config.set({\"wgPageTriageInfiniteScrolling\":" . 
+                       $infiniteScroll . "});</script>" );
 
                // load the JS
                $out->addModules( array( 'ext.pageTriage.external', 
'ext.pageTriage.models', 'ext.pageTriage.views' ) );
@@ -48,7 +59,10 @@
                
                // TODO: this should load with a spinner instead of "please 
wait"
                $triageInterface .= "<div id='mwe-pt-list-view'>Please 
wait...</div>";
-               $triageInterface .= "<div id='mwe-pt-list-stats-nav' 
class='mwe-pt-navigation-bar mwe-pt-control-gradient'></div>";
+               $triageInterface .= "<div 
id='mwe-pt-list-load-more-anchor'></div>";
+               $triageInterface .= "<div id='mwe-pt-list-stats-nav' 
class='mwe-pt-navigation-bar mwe-pt-control-gradient'>";
+               $triageInterface .= "<div 
id='mwe-pt-list-stats-nav-content'></div>";
+               $triageInterface .= "</div>";
                $triageInterface .= "<div 
id='mwe-pt-list-stats-nav-anchor'></div>";
                
                // These are the templates that backbone/underscore render on 
the client.

Modified: trunk/extensions/PageTriage/api/ApiPageTriageGetMetadata.php
===================================================================
--- trunk/extensions/PageTriage/api/ApiPageTriageGetMetadata.php        
2012-04-06 05:06:27 UTC (rev 114762)
+++ trunk/extensions/PageTriage/api/ApiPageTriageGetMetadata.php        
2012-04-06 06:27:51 UTC (rev 114763)
@@ -3,11 +3,11 @@
 class ApiPageTriageGetMetadata extends ApiBase {
        
        public function execute() {
-               global $wgPageTriagePageIdPerRequest;
+               global $wgPageTriagePagesPerRequest;
 
                $params = $this->extractRequestParams();
 
-               if ( count( $params['page_id'] ) > 
$wgPageTriagePageIdPerRequest ) {
+               if ( count( $params['page_id'] ) > $wgPageTriagePagesPerRequest 
) {
                        $this->dieUsage( 'Too many pages in the request', 
'exceed-page-limit' );
                }
                

Modified: 
trunk/extensions/PageTriage/modules/ext.pageTriage.models/ext.pageTriage.article.js
===================================================================
--- 
trunk/extensions/PageTriage/modules/ext.pageTriage.models/ext.pageTriage.article.js
 2012-04-06 05:06:27 UTC (rev 114762)
+++ 
trunk/extensions/PageTriage/modules/ext.pageTriage.models/ext.pageTriage.article.js
 2012-04-06 06:27:51 UTC (rev 114763)
@@ -47,7 +47,7 @@
                
                apiParams: {
                        namespace: 0,
-                       limit: 50,
+                       limit: 20,
                        dir: 'newestfirst',
                        /*
                        showbots: null,

Modified: 
trunk/extensions/PageTriage/modules/ext.pageTriage.views/ext.pageTriage.listStatsNav.css
===================================================================
--- 
trunk/extensions/PageTriage/modules/ext.pageTriage.views/ext.pageTriage.listStatsNav.css
    2012-04-06 05:06:27 UTC (rev 114762)
+++ 
trunk/extensions/PageTriage/modules/ext.pageTriage.views/ext.pageTriage.listStatsNav.css
    2012-04-06 06:27:51 UTC (rev 114763)
@@ -1,4 +1,4 @@
-#mwe-pt-list-stats-nav {
+#mwe-pt-list-stats-nav-content {
        padding: 0.5em 1em;
 }
 

Modified: 
trunk/extensions/PageTriage/modules/ext.pageTriage.views/ext.pageTriage.listStatsNav.js
===================================================================
--- 
trunk/extensions/PageTriage/modules/ext.pageTriage.views/ext.pageTriage.listStatsNav.js
     2012-04-06 05:06:27 UTC (rev 114762)
+++ 
trunk/extensions/PageTriage/modules/ext.pageTriage.views/ext.pageTriage.listStatsNav.js
     2012-04-06 06:27:51 UTC (rev 114763)
@@ -40,7 +40,7 @@
 
                render: function() {
                        // insert the template into the document.  fill with 
the current model.
-                       $( "#mwe-pt-list-stats-nav").html( this.template( 
this.model.toJSON() ) );
+                       $( "#mwe-pt-list-stats-nav-content" ).html( 
this.template( this.model.toJSON() ) );
 
                        if( $( '#mwe-pt-list-stats-nav-anchor' ).offset().top < 
$.waypoints('viewportHeight') ) {
                                // turn off floating nav, bring the bar back 
into the list.

Modified: 
trunk/extensions/PageTriage/modules/ext.pageTriage.views/ext.pageTriage.listView.css
===================================================================
--- 
trunk/extensions/PageTriage/modules/ext.pageTriage.views/ext.pageTriage.listView.css
        2012-04-06 05:06:27 UTC (rev 114762)
+++ 
trunk/extensions/PageTriage/modules/ext.pageTriage.views/ext.pageTriage.listView.css
        2012-04-06 06:27:51 UTC (rev 114763)
@@ -5,9 +5,17 @@
 
 #mwe-pt-list-more {
        text-align: center;
+       font-size: 17px;
+       line-height: 20px;
        background-color: #E8F2F8;
        margin: 0;
-       padding: 0.5em;
+       padding: 0.4em;
        border-right: 1px solid #ccc;
        border-left: 1px solid #ccc;
+       min-height: 21px;
 }
+
+#mwe-pt-list-more a {
+       cursor: pointer;
+}
+

Modified: 
trunk/extensions/PageTriage/modules/ext.pageTriage.views/ext.pageTriage.listView.js
===================================================================
--- 
trunk/extensions/PageTriage/modules/ext.pageTriage.views/ext.pageTriage.listView.js
 2012-04-06 05:06:27 UTC (rev 114762)
+++ 
trunk/extensions/PageTriage/modules/ext.pageTriage.views/ext.pageTriage.listView.js
 2012-04-06 06:27:51 UTC (rev 114763)
@@ -22,7 +22,7 @@
                        articles.bind( 'add', this.addOne, this );
                        articles.bind( 'reset', this.addAll, this );
                        stats.bind( 'change', this.addStats, this );
-               
+
                        // this event is triggered when the collection finishes 
loading.
                        //articles.bind( 'all', this.render, this );
 
@@ -37,24 +37,50 @@
                        
                        var controlNav = new mw.pageTriage.ListControlNav( { 
eventBus: this.eventBus, model: articles } );
                        controlNav.render();
-                       
-                       // create the more link
+               },
+               
+               initializeInfiniteScrolling: function() {
+                       // make the article list infinitely scrolling
                        _this = this;
-                       $( '#mwe-pt-list-view' ).after( $( '<div 
id="mwe-pt-list-more"></div>' )
-                               .append( $( '<a></a>' ).msg( 'pagetriage-more' )
-                                       .click( function() {
-                                               _this.loadMore();
-                                       } )
-                               )
-                       );
+                       var $anchor = $( '#mwe-pt-list-load-more-anchor' );
+                       opts = { offset: '100%' };
+                       $anchor.waypoint( function( event, direction ) {
+                               if ( direction == 'down' ) {
+                                       _this.automaticLoadMore();
+                               }
+                       }, opts );
                },
                
-               loadMore: function() {
+               automaticLoadMore: function() {
                        var lastArticle = articles.last(1);
                        articles.apiParams.offset = 
lastArticle[0].attributes.creation_date;
-                       articles.fetch( {add: true} );
+                       articles.fetch( {
+                               add: true,
+                               success: function() {
+                                       $( '.mwe-pt-article-row' ).last().css( 
'border-bottom', 'none' );
+                                       $.waypoints( 'refresh' );
+                               }
+                       } );
                },
                
+               manualLoadMore: function() {
+                       $( '#mwe-pt-list-more' ).empty();
+                       $( '#mwe-pt-list-more' ).append( $.createSpinner( 
'more-spinner' ) );
+                       var lastArticle = articles.last(1);
+                       articles.apiParams.offset = 
lastArticle[0].attributes.creation_date;
+                       articles.fetch( {
+                               add: true,
+                               success: function() {
+                                       $.removeSpinner( 'more-spinner' );
+                                       $( '#mwe-pt-list-more' ).append( 
+                                               $( '<a></a>' ).msg( 
'pagetriage-more' ).click( function() {
+                                                       _this.manualLoadMore();
+                                               } )
+                                       );
+                               }
+                       } );
+               },
+               
                // add stats data to the navigation
                addStats: function( stats ) {
                        var statsNav = new mw.pageTriage.ListStatsNav( { 
eventBus: this.eventBus, model: stats } );
@@ -80,8 +106,22 @@
 
                // add all the items in the articles collection
                addAll: function() {
-                       $("#mwe-pt-list-view").empty(); // remove the spinner 
before displaying.
+                       $( '#mwe-pt-list-view' ).empty(); // remove the spinner 
before displaying.
                        articles.forEach( this.addOne, this );
+                       if ( mw.config.get( 'wgPageTriageInfiniteScrolling' ) ) 
{
+                               $( '.mwe-pt-article-row' ).last().css( 
'border-bottom', 'none' );
+                               this.initializeInfiniteScrolling();
+                       } else {
+                               _this = this;
+                               // Add a 'More' link
+                               $( '#mwe-pt-list-view' ).after( $( '<div 
id="mwe-pt-list-more"></div>' )
+                                       .append( $( '<a></a>' ).msg( 
'pagetriage-more' )
+                                               .click( function() {
+                                                       _this.manualLoadMore();
+                                               } )
+                                       )
+                               );
+                       }
                        this.eventBus.trigger( 'listAddAll' );
            }
 


_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to