mediawiki.util: Use correct encoding for fragment in getUrl
[lhc/web/wiklou.git] / resources / src / mediawiki / mediawiki.util.js
index 7b45248..f9810f9 100644 (file)
                                .replace( /\)/g, '%29' ).replace( /\*/g, '%2A' ).replace( /~/g, '%7E' );
                },
 
+               /**
+                * Encode the string like Sanitizer::escapeId in PHP
+                *
+                * @param {string} str String to be encoded.
+                */
+               escapeId: function ( str ) {
+                       str = String( str );
+                       return util.rawurlencode( str.replace( / /g, '_' ) )
+                               .replace( /%3A/g, ':' )
+                               .replace( /%/g, '.' );
+               },
+
                /**
                 * Encode page titles for use in a URL
                 *
                        var titleFragmentStart,
                                url,
                                fragment = '',
-                               pageName = util.wikiUrlencode( typeof str === 'string' ? str : mw.config.get( 'wgPageName' ) );
+                               pageName = typeof str === 'string' ? str : mw.config.get( 'wgPageName' );
 
                        // Find any fragment should one exist
                        if ( typeof str === 'string' ) {
-                               titleFragmentStart = pageName.indexOf( '%23' );
+                               titleFragmentStart = pageName.indexOf( '#' );
                                if ( titleFragmentStart !== -1 ) {
-                                       fragment = pageName.slice( titleFragmentStart + 3 );
+                                       fragment = pageName.slice( titleFragmentStart + 1 );
                                        // Exclude the fragment from the page name
                                        pageName = pageName.slice( 0, titleFragmentStart );
                                }
                        }
 
-                       url = mw.config.get( 'wgArticlePath' ).replace( '$1', pageName );
+                       url = mw.config.get( 'wgArticlePath' ).replace( '$1', util.wikiUrlencode( pageName ) );
 
                        // Add query string if necessary
                        if ( params && !$.isEmptyObject( params ) ) {
                                url += ( url.indexOf( '?' ) !== -1 ? '&' : '?' ) + $.param( params );
                        }
 
-                       // Insert the already URL-encoded fragment should it exist, replacing % with .
+                       // Append the encoded fragment
                        if ( fragment.length > 0 ) {
-                               url += '#' + fragment.replace( /%/g, '.' );
+                               url += '#' + util.escapeId( fragment );
                        }
 
                        return url;