jenkins-bot has submitted this change and it was merged.

Change subject: Ensure namespace is passed when history code loaded
......................................................................


Ensure namespace is passed when history code loaded

Note you can still lazy load from search via a talk page so
URL should be rewritten correctly

Also ensure that the page doesn't get re-rendered with a talk
icon after talk page is edited.

Address a FIXME in process

Bug: 55594
Change-Id: Ib140dcff8bc6252abb3a7106554c86d50ff68b2b
---
M javascripts/common/Page.js
M javascripts/common/history-alpha.js
M tests/javascripts/common/test_Page.js
3 files changed, 53 insertions(+), 5 deletions(-)

Approvals:
  Kaldari: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/javascripts/common/Page.js b/javascripts/common/Page.js
index 8bd1635..5b49a98 100644
--- a/javascripts/common/Page.js
+++ b/javascripts/common/Page.js
@@ -41,6 +41,8 @@
                render: function( options ) {
                        var pageTitle = options.title, self = this,
                                $el = this.$el, _super = self._super;
+                       // prevent talk icon being re-rendered after an edit to 
a talk page
+                       options.isTalkPage = self.isTalkPage();
 
                        // FIXME: this is horrible, because it makes preRender 
run _during_ render...
                        if ( !options.sections ) {
@@ -74,9 +76,20 @@
                        }
                },
 
-               // FIXME: [ajax page loading] Note this will not work when we 
ajax load namespaces other than main which we currently do not do.
+               getNamespaceId: function() {
+                       var args = this.options.title.split( ':' ), nsId;
+                       if ( args[1] ) {
+                               nsId = mw.config.get( 'wgNamespaceIds' )[ 
args[0].toLowerCase().replace( ' ', '_' ) ] || 0;
+                       } else {
+                               nsId = 0;
+                       }
+                       return nsId;
+               },
+
                isTalkPage: function() {
-                       return M.inNamespace( 'talk' );
+                       var ns = this.getNamespaceId();
+                       // all talk pages are odd numbers (except the case of 
special pages)
+                       return ns > 0 && ns % 2 === 1;
                },
 
                preRender: function( options ) {
diff --git a/javascripts/common/history-alpha.js 
b/javascripts/common/history-alpha.js
index 9676c88..fb87b7d 100644
--- a/javascripts/common/history-alpha.js
+++ b/javascripts/common/history-alpha.js
@@ -23,7 +23,8 @@
 
        // do not run more than once
        function init() {
-               var title = mw.config.get( 'wgTitle' ),
+               // use wgPageName to ensure we keep the namespace prefix
+               var title = mw.config.get( 'wgPageName' ),
                        currentUrl = mw.util.wikiGetlink( title, M.query );
                // initial history state does not contain title
                // run before binding to avoid nasty surprises
diff --git a/tests/javascripts/common/test_Page.js 
b/tests/javascripts/common/test_Page.js
index 9c0dee4..8645662 100644
--- a/tests/javascripts/common/test_Page.js
+++ b/tests/javascripts/common/test_Page.js
@@ -1,4 +1,4 @@
-( function( M ) {
+( function( M, $ ) {
        var Page = M.require( 'Page' );
 
        QUnit.module( 'MobileFrontend Page' );
@@ -10,4 +10,38 @@
                assert.strictEqual( p2.isMainPage(), false, 'check not marked 
as main page' );
        } );
 
-}( mw.mobileFrontend ) );
+       QUnit.test( '#getNamespaceId', 8, function( assert ) {
+               var testCases = [
+                       [ 'Main Page', 0 ],
+                       [ 'San Francisco', 0 ],
+                       [ 'San Francisco: Talk:2', 0 ],
+                       [ 'San Francisco: The Sequel', 0 ],
+                       [ 'Talk:Foo', 1 ],
+                       [ 'Project:Bar', 4 ],
+                       [ 'User talk:Jon', 3 ],
+                       [ 'Special:Nearby', -1 ]
+               ];
+               $.each( testCases, function( i, tc ) {
+                       var p = new Page( { title: tc[0] } );
+                       assert.strictEqual( p.getNamespaceId(), tc[1], 'Check 
namespace is as expected' );
+               } );
+       } );
+
+       QUnit.test( '#isTalkPage', 8, function( assert ) {
+               var testCases = [
+                       [ 'Main Page', false ],
+                       [ 'San Francisco', false ],
+                       [ 'San Francisco: Talk:2', false ],
+                       [ 'San Francisco: The Sequel', false ],
+                       [ 'Talk:Foo', true ],
+                       [ 'Project talk:Bar', true ],
+                       [ 'User talk:Jon', true ],
+                       [ 'Special:Nearby', false ]
+               ];
+               $.each( testCases, function( i, tc ) {
+                       var p = new Page( { title: tc[0] } );
+                       assert.strictEqual( p.isTalkPage(), tc[1], 'Check test 
is as expected' );
+               } );
+       } );
+
+}( mw.mobileFrontend, jQuery ) );

-- 
To view, visit https://gerrit.wikimedia.org/r/90072
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ib140dcff8bc6252abb3a7106554c86d50ff68b2b
Gerrit-PatchSet: 3
Gerrit-Project: mediawiki/extensions/MobileFrontend
Gerrit-Branch: master
Gerrit-Owner: Jdlrobson <jrob...@wikimedia.org>
Gerrit-Reviewer: JGonera <jgon...@wikimedia.org>
Gerrit-Reviewer: Jdlrobson <jrob...@wikimedia.org>
Gerrit-Reviewer: Kaldari <rkald...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to