Export mw.Message's string formatter as mw.format
authorOri Livneh <ori@wikimedia.org>
Tue, 6 Jan 2015 18:23:41 +0000 (10:23 -0800)
committerOri Livneh <ori@wikimedia.org>
Thu, 8 Jan 2015 23:28:47 +0000 (15:28 -0800)
For very simple string formatting, make mw.Message's `$N` substring
interpolation functionality available publicly as mw.format.

Change-Id: I87f62ac478aab80994caf79d3c89e1215cf088d4

resources/src/mediawiki/mediawiki.js

index 6bf93f4..3d5c19c 100644 (file)
                }
        }
 
+       // String format helper. Replaces $1, $2 .. $N placeholders with positional
+       // args. Used by Message.prototype.parser() and exported as mw.format().
+       function format( formatString ) {
+               var parameters = slice.call( arguments, 1 );
+               return formatString.replace( /\$(\d+)/g, function ( str, match ) {
+                       var index = parseInt( match, 10 ) - 1;
+                       return parameters[index] !== undefined ? parameters[index] : '$' + match;
+               } );
+       }
+
        /* Object constructors */
 
        /**
                 * This function will not be called for nonexistent messages.
                 */
                parser: function () {
-                       var parameters = this.parameters;
-                       return this.map.get( this.key ).replace( /\$(\d+)/g, function ( str, match ) {
-                               var index = parseInt( match, 10 ) - 1;
-                               return parameters[index] !== undefined ? parameters[index] : '$' + match;
-                       } );
+                       return format.apply( null, [ this.map.get( this.key ) ].concat( this.parameters ) );
                },
 
                /**
                                function () { return +new Date(); };
                }() ),
 
+               /**
+                * Format a string. Replace $1, $2 ... $N with positional arguments.
+                *
+                * @method
+                * @since 1.25
+                * @param {string} fmt Format string
+                * @param {Mixed...} parameters Substitutions for $N placeholders.
+                * @return {string} Formatted string
+                */
+               format: format,
+
                /**
                 * Track an analytic event.
                 *