X-Git-Url: http://git.cyclocoop.org/%24action?a=blobdiff_plain;f=resources%2Fsrc%2Fmediawiki%2Fmediawiki.Title.js;h=ec2a4b1e4c73f7c5eb5cd7520203a3a49a7e726c;hb=f875f3d31867067116641af987dea4511324e96b;hp=910a78f87bb7cc17769f606b94ff6d63c8a8384f;hpb=ee734d0d3c7533bd9a690dbd71f5151da55c32ad;p=lhc%2Fweb%2Fwiklou.git diff --git a/resources/src/mediawiki/mediawiki.Title.js b/resources/src/mediawiki/mediawiki.Title.js index 910a78f87b..ec2a4b1e4c 100644 --- a/resources/src/mediawiki/mediawiki.Title.js +++ b/resources/src/mediawiki/mediawiki.Title.js @@ -6,6 +6,7 @@ ( function ( mw, $ ) { /*jshint latedef:false */ + // jscs:disable jsDoc /** * @class mw.Title * @@ -14,6 +15,23 @@ * logic directly and get null for invalid titles which is easier to work with. * * @constructor + * + * Note that in the constructor amd #newFromText method, `namespace` is the **default** namespace + * only, and can be overridden by a namespace prefix in `title`. If you do not want this behavior, + * use #makeTitle. Compare: + * + * new mw.Title( 'Foo', NS_TEMPLATE ).getPrefixedText(); // => 'Template:Foo' + * mw.Title.newFromText( 'Foo', NS_TEMPLATE ).getPrefixedText(); // => 'Template:Foo' + * mw.Title.makeTitle( NS_TEMPLATE, 'Foo' ).getPrefixedText(); // => 'Template:Foo' + * + * new mw.Title( 'Category:Foo', NS_TEMPLATE ).getPrefixedText(); // => 'Category:Foo' + * mw.Title.newFromText( 'Category:Foo', NS_TEMPLATE ).getPrefixedText(); // => 'Category:Foo' + * mw.Title.makeTitle( NS_TEMPLATE, 'Category:Foo' ).getPrefixedText(); // => 'Template:Category:Foo' + * + * new mw.Title( 'Template:Foo', NS_TEMPLATE ).getPrefixedText(); // => 'Template:Foo' + * mw.Title.newFromText( 'Template:Foo', NS_TEMPLATE ).getPrefixedText(); // => 'Template:Foo' + * mw.Title.makeTitle( NS_TEMPLATE, 'Template:Foo' ).getPrefixedText(); // => 'Template:Template:Foo' + * * @param {string} title Title of the page. If no second argument given, * this will be searched for a namespace * @param {number} [namespace=NS_MAIN] If given, will used as default namespace for the given title @@ -32,6 +50,7 @@ return this; } + // jscs:enable jsDoc /* Private members */ @@ -116,6 +135,18 @@ return id; }, + /** + * @private + * @method getNamespacePrefix_ + * @param {number} namespace + * @return {string} + */ + getNamespacePrefix = function ( namespace ) { + return namespace === NS_MAIN ? + '' : + ( mw.config.get( 'wgFormattedNamespaces' )[ namespace ].replace( / /g, '_' ) + ':' ); + }, + rUnderscoreTrim = /^_+|_+$/g, rSplit = /^(.+?)_*:_*(.*)$/, @@ -212,7 +243,7 @@ ], /** - * Internal helper for #constructor and #newFromtext. + * Internal helper for #constructor and #newFromText. * * Based on Title.php#secureAndSplit * @@ -452,6 +483,10 @@ /** * Constructor for Title objects with a null return instead of an exception for invalid titles. * + * Note that `namespace` is the **default** namespace only, and can be overridden by a namespace + * prefix in `title`. If you do not want this behavior, use #makeTitle. See #constructor for + * details. + * * @static * @param {string} title * @param {number} [namespace=NS_MAIN] Default namespace @@ -472,6 +507,24 @@ return t; }; + /** + * Constructor for Title objects with predefined namespace. + * + * Unlike #newFromText or #constructor, this function doesn't allow the given `namespace` to be + * overridden by a namespace prefix in `title`. See #constructor for details about this behavior. + * + * The single exception to this is when `namespace` is 0, indicating the main namespace. The + * function behaves like #newFromText in that case. + * + * @static + * @param {number} namespace Namespace to use for the title + * @param {string} title + * @return {mw.Title|null} A valid Title object or null if the title is invalid + */ + Title.makeTitle = function ( namespace, title ) { + return mw.Title.newFromText( getNamespacePrefix( namespace ) + title ); + }; + /** * Constructor for Title objects from user input altering that input to * produce a title that MediaWiki will accept as legal @@ -608,7 +661,7 @@ thumbPhpRegex = /thumb\.php/, regexes = [ // Thumbnails - /\/[a-f0-9]\/[a-f0-9]{2}\/([^\s\/]+)\/[^\s\/]+-(?:\1|thumbnail)[^\s\/]*$/, + /\/[a-f0-9]\/[a-f0-9]{2}\/([^\s\/]+)\/[^\s\/]+-[^\s\/]*$/, // Thumbnails in non-hashed upload directories /\/([^\s\/]+)\/[^\s\/]+-(?:\1|thumbnail)[^\s\/]*$/, @@ -761,9 +814,7 @@ * @return {string} */ getNamespacePrefix: function () { - return this.namespace === NS_MAIN ? - '' : - ( mw.config.get( 'wgFormattedNamespaces' )[ this.namespace ].replace( / /g, '_' ) + ':' ); + return getNamespacePrefix( this.namespace ); }, /** @@ -906,7 +957,12 @@ * @return {string} */ getUrl: function ( params ) { - return mw.util.getUrl( this.toString(), params ); + var fragment = this.getFragment(); + if ( fragment ) { + return mw.util.getUrl( this.toString() + '#' + this.getFragment(), params ); + } else { + return mw.util.getUrl( this.toString(), params ); + } }, /**