+ /**
+ * Message object, similar to Message in PHP
+ */
+ function Message( map, key, parameters ) {
+ this.format = 'parse';
+ this.map = map;
+ this.key = key;
+ this.parameters = typeof parameters === 'undefined' ? [] : $.makeArray( parameters );
+ };
+
+ /**
+ * Appends parameters for replacement
+ *
+ * @param {mixed} args First in a list of variadic arguments to append as message parameters
+ */
+ Message.prototype.params = function( parameters ) {
+ for ( var i = 0; i < parameters.length; i++ ) {
+ this.parameters[this.parameters.length] = parameters[i];
+ }
+ return this;
+ };
+
+ /**
+ * Converts message object to it's string form based on the state of format
+ *
+ * @return {string} String form of message
+ */
+ Message.prototype.toString = function() {
+ if ( !this.map.exists( this.key ) ) {
+ // Return <key> if key does not exist
+ return '<' + this.key + '>';
+ }
+ var text = this.map.get( this.key );
+ var parameters = this.parameters;
+ text = text.replace( /\$(\d+)/g, function( string, match ) {
+ var index = parseInt( match, 10 ) - 1;
+ return index in parameters ? parameters[index] : '$' + match;
+ } );
+ /* This should be fixed up when we have a parser
+ if ( this.format === 'parse' && 'language' in mediaWiki ) {
+ text = mediaWiki.language.parse( text );
+ }
+ */
+ return text;
+ };
+
+ /**
+ * Changes format to parse and converts message to string
+ *
+ * @return {string} String form of parsed message
+ */
+ Message.prototype.parse = function() {
+ this.format = 'parse';
+ return this.toString();
+ };