From 63e6ebb8fac41e8d57aa7f9677d4419155b01fc1 Mon Sep 17 00:00:00 2001 From: Alex Monk Date: Fri, 4 Jul 2014 18:02:07 +0100 Subject: [PATCH] mw.Title: Add method to get title relative to an arbitrary namespace I'm not sure where this kind of thing could be used outside of dealing with templates/transclusion. Making it generic anyway. Bug: 67448 Change-Id: Ie554adefec43997d362b5d7b45c30403912743b5 --- resources/src/mediawiki/mediawiki.Title.js | 22 ++++++++++++ .../mediawiki/mediawiki.Title.test.js | 36 +++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/resources/src/mediawiki/mediawiki.Title.js b/resources/src/mediawiki/mediawiki.Title.js index fc8e7e9cca..95b18a8123 100644 --- a/resources/src/mediawiki/mediawiki.Title.js +++ b/resources/src/mediawiki/mediawiki.Title.js @@ -535,6 +535,28 @@ return text( this.getPrefixedDb() ); }, + /** + * Get the page name relative to a namespace + * + * Example: + * + * - "Foo:Bar" relative to the Foo namespace becomes "Bar". + * - "Bar" relative to any non-main namespace becomes ":Bar". + * - "Foo:Bar" relative to any namespace other than Foo stays "Foo:Bar". + * + * @param {number} namespace The namespace to be relative to + * @return {string} + */ + getRelativeText: function ( namespace ) { + if ( this.getNamespaceId() === namespace ) { + return this.getMainText(); + } else if ( this.getNamespaceId() === NS_MAIN ) { + return ':' + this.getPrefixedText(); + } else { + return this.getPrefixedText(); + } + }, + /** * Get the fragment (if any). * diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js index 077ce70336..5ece31b83e 100644 --- a/tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js +++ b/tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js @@ -436,4 +436,40 @@ } } ); + QUnit.test( 'getRelativeText', 5, function ( assert ) { + var cases = [ + { + text: 'asd', + relativeTo: 123, + expectedResult: ':Asd' + }, + { + text: 'dfg', + relativeTo: 0, + expectedResult: 'Dfg' + }, + { + text: 'Template:Ghj', + relativeTo: 0, + expectedResult: 'Template:Ghj' + }, + { + text: 'Template:1', + relativeTo: 10, + expectedResult: '1' + }, + { + text: 'User:Hi', + relativeTo: 10, + expectedResult: 'User:Hi' + } + ], i, thisCase, title; + + for ( i = 0; i < cases.length; i++ ) { + thisCase = cases[i]; + + title = mw.Title.newFromText( thisCase.text ); + assert.equal( title.getRelativeText( thisCase.relativeTo ), thisCase.expectedResult ); + } + } ); }( mediaWiki, jQuery ) ); -- 2.20.1