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

Revision: 114641
Author:   raindrift
Date:     2012-03-31 01:26:01 +0000 (Sat, 31 Mar 2012)
Log Message:
-----------
created an event aggregator (eventBus) for sending events between views
used the eventBus to change the control nav's model from stats to the articles 
collection (which it mostly modifies)
moved the stats display in controlNav so it's event-based instead
hooked up the controls in controlNav, got namespace-based filtering working 
(sorta), still need to connect the rest

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

Modified: trunk/extensions/PageTriage/SpecialPageTriage.php
===================================================================
--- trunk/extensions/PageTriage/SpecialPageTriage.php   2012-03-31 01:07:43 UTC 
(rev 114640)
+++ trunk/extensions/PageTriage/SpecialPageTriage.php   2012-03-31 01:26:01 UTC 
(rev 114641)
@@ -155,7 +155,7 @@
                                
                                <script type="text/template" 
id="listControlNavTemplate">
                                        <span 
class="mwe-pt-control-label"><b><%= gM( 'pagetriage-showing' ) %></b> some 
things</span>
-                                       <span 
class="mwe-pt-control-label-right"><%= gM( 'pagetriage-article-count', 
ptr_untriaged_article_count, 'untriaged' ) %></span><br/>
+                                       <span 
class="mwe-pt-control-label-right" id="mwe-pt-control-stats"></span><br/>
                                        <span 
id="mwe-pt-filter-dropdown-control" class="mwe-pt-control-label">
                                                <b>
                                                        <%= gM( 
'pagetriage-filter-list-prompt' ) %>
@@ -202,7 +202,7 @@
                                                        <input type="checkbox" 
/> <%= gM( 'pagetriage-filter-blocked' ) %> <br/>
                                                </div>
                                                <div 
class="mwe-pt-control-options">
-                                                       <a 
class="mwe-pt-filter-set-button ui-button-green"></a>
+                                                       <div 
id="mwe-pt-filter-set-button" class="mwe-pt-filter-set-button 
ui-button-green"><%= gM( 'pagetriage-filter-set-button' ) %></div>
                                                </div>
                                        </div>
                                        </form>

Modified: 
trunk/extensions/PageTriage/modules/ext.pageTriage.models/ext.pageTriage.article.js
===================================================================
--- 
trunk/extensions/PageTriage/modules/ext.pageTriage.models/ext.pageTriage.article.js
 2012-03-31 01:07:43 UTC (rev 114640)
+++ 
trunk/extensions/PageTriage/modules/ext.pageTriage.models/ext.pageTriage.article.js
 2012-03-31 01:26:01 UTC (rev 114641)
@@ -57,19 +57,34 @@
                        */
                },
                
+               initialize: function( options ) {
+                       this.eventBus = options.eventBus;
+                       this.eventBus.bind( "filterSet", this.setParams );
+                       //this.eventBus.bind( "paramsSet", this.fetch );
+               },
+               
                url: function() {
                        var paramString = '';
                        for ( var key in this.apiParams ) {
                                paramString += '&' + key + '=' + 
this.apiParams[key];
                        }
                        var url = mw.util.wikiScript( 'api' ) + 
'?action=pagetriagelist&format=json' + paramString;
+                       console.log('fetching ' + url);
                        return url;
                },
 
                parse: function( response ) {
                        // extract the useful bits of json.
                        return response.pagetriagelist.pages;
+               },
+               
+               setParams: function( apiParams ) {
+                       console.log('setParams called with ' + apiParams);
+                       
+                       this.apiParams = apiParams;
+                       this.eventBus.trigger( "paramsSet", this.apiParams );
                }
+               
        } );
        
 } );

Modified: 
trunk/extensions/PageTriage/modules/ext.pageTriage.views/ext.pageTriage.listControlNav.js
===================================================================
--- 
trunk/extensions/PageTriage/modules/ext.pageTriage.views/ext.pageTriage.listControlNav.js
   2012-03-31 01:07:43 UTC (rev 114640)
+++ 
trunk/extensions/PageTriage/modules/ext.pageTriage.views/ext.pageTriage.listControlNav.js
   2012-03-31 01:26:01 UTC (rev 114641)
@@ -6,9 +6,11 @@
                template: _.template( $( "#listControlNavTemplate" ).html() ),
                filterMenuVisible: 0,
 
-               initialize: function() {
+               initialize: function( options ) {
                        var _this = this;
-                       
+
+                       this.eventBus = options.eventBus; // access the eventBus
+
                        // make a floating top navbar
                        // TODO: there's a bump when the control div detaches 
from the page.
                        //       fill some element under it to make it scroll 
smoothly
@@ -26,6 +28,11 @@
                                clearTimeout(mw.pageTriage.resizeTimer);
                                mw.pageTriage.resizeTimer = 
setTimeout(_this.resize, 100);
                        });
+
+                       this.eventBus.bind( "renderStats", function( stats ) {
+                               // fill in the counter when the stats view gets 
loaded.
+                               $( "#mwe-pt-control-stats" ).html( gM( 
'pagetriage-article-count', stats.get('ptr_untriaged_article_count'), 
'untriaged' ) );
+                       } );
                                                                
                        // hover for the dropdown menu control
                        /*
@@ -38,14 +45,17 @@
                render: function() {
                        _this = this;
                        // render and return the template.  fill with the 
current model.
-                       $( "#mwe-pt-list-control-nav").html( this.template( 
this.model.toJSON() ) );
+                       $( "#mwe-pt-list-control-nav").html( this.template( ) );
 
+                       //
                        // now that the template's been inserted, set up some 
events for controlling it
-
+                       //
+                       
                        // make a button
-                       $( ".mwe-pt-filter-set-button" ).button( {
-                               label: mw.msg( 'pagetriage-filter-set-button' ) 
+ ' &#x25b8;'
-                       });
+                       $( ".mwe-pt-filter-set-button" ).button().click( 
function( e ) {
+                               _this.filterSet();
+                               e.stopPropagation();
+                       } );
                        
                        // the filter dropdown menu control
                        $( '#mwe-pt-filter-dropdown-control' ).click( function( 
e ) {
@@ -62,7 +72,7 @@
 
                                _this.toggleFilterMenu();
                                e.stopPropagation();
-                       } );
+                       } );                    
                },
                
                resize: function() {
@@ -83,6 +93,21 @@
                                $( '#mwe-pt-dropdown-arrow' ).html( '&#x25be;' 
);
                                this.filterMenuVisible = 1;                     
        
                        }
-               }               
+               },
+               
+               filterSet: function() {
+                       console.log('clicked');
+                       this.toggleFilterMenu();
+                       
+                       // fetch the values from the menu
+                       var apiParams = {};
+                       if( $('#mwe-pt-filter-namespace').val() ) {
+                               apiParams['namespace'] = 
$('#mwe-pt-filter-namespace').val();
+                       }
+
+                       this.model.apiParams = apiParams;
+                       this.model.fetch();
+               }
+               
        } );
 } );

Modified: 
trunk/extensions/PageTriage/modules/ext.pageTriage.views/ext.pageTriage.listStatsNav.js
===================================================================
--- 
trunk/extensions/PageTriage/modules/ext.pageTriage.views/ext.pageTriage.listStatsNav.js
     2012-03-31 01:07:43 UTC (rev 114640)
+++ 
trunk/extensions/PageTriage/modules/ext.pageTriage.views/ext.pageTriage.listStatsNav.js
     2012-03-31 01:26:01 UTC (rev 114641)
@@ -5,13 +5,17 @@
                tagName: "div",
                template: _.template( $( "#listStatsNavTemplate" ).html() ),
 
-               // listen for changes to the model and re-render.
-               initialize: function() {
+               initialize: function( options ) {
+                       this.eventBus = options.eventBus;
                },
 
                render: function() {
                        // insert the template into the document.  fill with 
the current model.
                        this.$el.html( this.template( this.model.toJSON() ) );
+                       
+                       // broadcast the stats in case any other views want to 
display bits of them.
+                       // (the control view displays a summary)
+                       this.eventBus.trigger( 'renderStats', this.model );
                        return this;
                }               
 

Modified: 
trunk/extensions/PageTriage/modules/ext.pageTriage.views/ext.pageTriage.listView.js
===================================================================
--- 
trunk/extensions/PageTriage/modules/ext.pageTriage.views/ext.pageTriage.listView.js
 2012-03-31 01:07:43 UTC (rev 114640)
+++ 
trunk/extensions/PageTriage/modules/ext.pageTriage.views/ext.pageTriage.listView.js
 2012-03-31 01:26:01 UTC (rev 114641)
@@ -1,9 +1,14 @@
 $( function() {
        // view for the article list
+       
+       // create an event aggregator
+       var eventBus = _.extend( {}, Backbone.Events );
 
        // instantiate the collection of articles
-       var articles = new mw.pageTriage.ArticleList;
-       var stats = new mw.pageTriage.Stats;
+       var articles = new mw.pageTriage.ArticleList( { eventBus: eventBus } );
+       
+       // grab pageTriage statistics
+       var stats = new mw.pageTriage.Stats( { eventBus: eventBus } );
 
        // set the default sort order.
        articles.comparator = function( article ) {
@@ -14,13 +19,14 @@
        // currently, this is the main application view.
        mw.pageTriage.ListView = Backbone.View.extend( {
 
-               initialize: function() {
+               initialize: function( options ) {
+                       this.eventBus = options.eventBus; // access the eventBus
 
                        // these events are triggered when items are added to 
the articles collection
                        this.position = 0;
                        articles.bind( 'add', this.addOne, this );
                        articles.bind( 'reset', this.addAll, this );
-                       stats.bind( 'change', this.addNav, this );
+                       stats.bind( 'change', this.addStats, this );
                
                        // this event is triggered when the collection finishes 
loading.
                        //articles.bind( 'all', this.render, this );
@@ -33,13 +39,14 @@
                render: function() {
                        // reset the position indicator
                        this.position = 0;
+                       
+                       var controlNav = new mw.pageTriage.ListControlNav( { 
eventBus: this.eventBus, model: articles } );
+                       controlNav.render();
                },
                
                // add stats data to the navigation
-               addNav: function( stats ) {
-                       var controlNav = new mw.pageTriage.ListControlNav( { 
model: stats } );
-                       controlNav.render();
-                       var statsNav = new mw.pageTriage.ListStatsNav( { model: 
stats } );
+               addStats: function( stats ) {
+                       var statsNav = new mw.pageTriage.ListStatsNav( { 
eventBus: this.eventBus, model: stats } );
                        $( "#mwe-pt-list-stats-nav").html( statsNav.render().el 
);
                },
 
@@ -53,7 +60,7 @@
                        article.set( 'position', this.position++ );
                        
                        // pass in the specific article instance
-                       var view = new mw.pageTriage.ListItem( { model: article 
} );
+                       var view = new mw.pageTriage.ListItem( { eventBus: 
this.eventBus, model: article } );
                        this.$( "#mwe-pt-list-view" ).append( view.render().el 
);
                        this.$( ".mwe-pt-list-triage-button" ).button({
                                label: mw.msg( 'pagetriage-triage' ),
@@ -70,6 +77,6 @@
        } );
 
        // create an instance of the list view, which makes everything go.
-       var list = new mw.pageTriage.ListView();
+       var list = new mw.pageTriage.ListView( { eventBus: eventBus } );
        list.render();
 } );


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

Reply via email to