{
"name": "API",
"classes": ["mw.Api*"]
+ },
+ {
+ "name": "Language",
+ "classes": [
+ "mw.language*",
+ "mw.cldr"
+ ]
}
]
},
"../../resources/mediawiki.action/mediawiki.action.view.postEdit.js",
"../../resources/mediawiki.page/mediawiki.page.startup.js",
"../../resources/mediawiki.api",
+ "../../resources/mediawiki.language",
"../../resources/jquery/jquery.localize.js",
"../../resources/jquery/jquery.spinner.js"
]
-/**
+/*!
* Bosnian (bosanski) language functions
*/
-/**
+/*!
* Lower Sorbian (Dolnoserbski) language functions
*/
-/**
- * Finnish (Suomi) language functions
- * @author Santhosh Thottingal
+/*!
+ * Finnish (Suomi) language functions
+ * @author Santhosh Thottingal
*/
mediaWiki.language.convertGrammar = function ( word, form ) {
-/**
+/*!
* Irish (Gaeilge) language functions
*/
-/**
+/*!
* Hebrew (עברית) language functions
*/
-/**
+/*!
* Upper Sorbian (Hornjoserbsce) language functions
*/
-/**
- * Hungarian language functions
- * @author Santhosh Thottingal
+/*!
+ * Hungarian language functions
+ * @author Santhosh Thottingal
*/
mediaWiki.language.convertGrammar = function ( word, form ) {
-/**
+/*!
* Armenian (Հայերեն) language functions
*/
-/**
+/*!
* Latin (lingua Latina) language functions
* @author Santhosh Thottingal
*/
-/**
+/*!
* Ossetian (Ирон) language functions
* @author Santhosh Thottingal
*/
-
mediaWiki.language.convertGrammar = function ( word, form ) {
var grammarForms = mediaWiki.language.getData( 'os', 'grammarForms' ),
// Ending for allative case
-/**
+/*!
* Russian (Русский) language functions
*/
-/**
+/*!
* Slovenian (Slovenščina) language functions
*/
-/**
+/*!
* Ukrainian (Українська) language functions
*/
-/**
- * CLDR related utility methods.
- */
( function ( mw ) {
'use strict';
- var cldr = {
+ /**
+ * Namespace for CLDR-related utility methods.
+ *
+ * @class
+ * @singleton
+ */
+ mw.cldr = {
/**
- * For the number, get the plural for index
- * In case none of the rules passed, we return pluralRules.length
- * That means it is the "other" form.
- * @param number
+ * Get the plural form index for the number.
+ *
+ * In case none of the rules passed, we return `pluralRules.length` -
+ * that means it is the "other" form.
+ *
+ * @param {number} number
* @param {Array} pluralRules
* @return {number} plural form index
*/
}
};
- mw.cldr = cldr;
-
}( mediaWiki ) );
-/**
- * Base language object with methods for storing and getting
- * language data.
- */
( function ( mw ) {
-
- var language = {
+ /**
+ * Base language object with methods related to language support, attempting to mirror some of the
+ * functionality of the Language class in MediaWiki:
+ *
+ * - storing and retrieving language data
+ * - transforming message syntax (`{{PLURAL:}}`, `{{GRAMMAR:}}`, `{{GENDER:}}`)
+ * - formatting numbers
+ *
+ * @class
+ * @singleton
+ */
+ mw.language = {
/**
- * @var data {Object} Language related data (keyed by language,
- * contains instances of mw.Map).
- * @example Set data
- * <code>
+ * Language-related data (keyed by language, contains instances of mw.Map). Loaded dynamically
+ * (see ResourceLoaderLanguageDataModule in PHP docs, aka mediawiki.language.data module).
+ *
+ * To set data:
+ *
* // Override, extend or create the language data object of 'nl'
* mw.language.setData( 'nl', 'myKey', 'My value' );
*
* // Set multiple values at once
- * mw.language.setData( 'nl', { 'foo': 'X', 'bar': 'Y' } );
- * </code>
- * @example Get GrammarForms data for language 'nl':
- * <code>
+ * mw.language.setData( 'nl', { foo: 'X', bar: 'Y' } );
+ *
+ * To get GrammarForms data for language 'nl':
+ *
* var grammarForms = mw.language.getData( 'nl', 'grammarForms' );
- * </code>
+ *
+ * Possible data keys:
+ *
+ * - `digitTransformTable`
+ * - `separatorTransformTable`
+ * - `grammarForms`
+ * - `pluralRules`
+ * - `digitGroupingPattern`
+ *
+ * @property
*/
data: {},
/**
- * Convenience method for retreiving language data by language code and data key,
- * covering for the potential inexistance of a data object for this langiage.
- * @param langCode {String}
- * @param dataKey {String}
- * @return {mixed} Value stored in the mw.Map (or undefined if there is no map for
- the specified langCode).
+ * Convenience method for retrieving language data.
+ *
+ * Structured by language code and data key, covering for the potential inexistence of a
+ * data object for this language.
+ *
+ * @param {string} langCode
+ * @param {string} dataKey
+ * @return {Mixed} Value stored in the mw.Map (or `undefined` if there is no map for the specified
+ * langCode).
*/
getData: function ( langCode, dataKey ) {
- var langData = language.data;
+ var langData = mw.language.data;
if ( langData && langData[langCode] instanceof mw.Map ) {
return langData[langCode].get( dataKey );
}
},
/**
- * Convenience method for setting language data by language code and data key.
+ * Convenience method for setting language data.
+ *
* Creates the data mw.Map if there isn't one for the specified language already.
*
- * @param langCode {String}
- * @param dataKey {String|Object} Key or object of key/values.
- * @param value {mixed} Value for dataKey, ignored if dataKey is an object.
+ * @param {string} langCode
+ * @param {string|Object} dataKey Key or object of key/values.
+ * @param {Mixed} value Value for dataKey, ignored if dataKey is an object.
*/
setData: function ( langCode, dataKey, value ) {
- var langData = language.data;
+ var langData = mw.language.data;
if ( !( langData[langCode] instanceof mw.Map ) ) {
langData[langCode] = new mw.Map();
}
}
};
- mw.language = language;
-
}( mediaWiki ) );
-/**
- * Localized Language support attempts to mirror some of the functionality of
- * Language.php in MediaWiki.
- * This adds methods for transforming message text.
+/*
+ * Methods for transforming message syntax.
*/
( function ( mw, $ ) {
-var language = {
+/**
+ * @class mw.language
+ */
+$.extend( mw.language, {
/**
* Process the PLURAL template substitution
*
- * @param {object} template Template object
- * @format template
- * {
- * 'title': [title of template],
- * 'parameters': [template parameters]
- * }
- * @example {{Template:title|params}}
+ * @private
+ * @param {Object} template Template object
+ * @param {string} template.title
+ * @param {Array} template.parameters
+ * @return {string}
*/
procPLURAL: function ( template ) {
if ( template.title && template.parameters && mw.language.convertPlural ) {
/**
* Plural form transformations, needed for some languages.
*
- * @param count integer Non-localized quantifier
- * @param forms array List of plural forms
- * @return string Correct form for quantifier in this language
+ * @param {number} count Non-localized quantifier
+ * @param {Array} forms List of plural forms
+ * @return {string} Correct form for quantifier in this language
*/
convertPlural: function ( count, forms ) {
var pluralRules,
/**
* Pads an array to a specific length by copying the last one element.
*
- * @param forms array Number of forms given to convertPlural
- * @param count integer Number of forms required
- * @return array Padded array of forms
+ * @private
+ * @param {Array} forms Number of forms given to convertPlural
+ * @param {number} count Number of forms required
+ * @return {Array} Padded array of forms
*/
preConvertPlural: function ( forms, count ) {
while ( forms.length < count ) {
/**
* Provides an alternative text depending on specified gender.
- * Usage {{gender:[gender|user object]|masculine|feminine|neutral}}.
+ *
+ * Usage in message text: `{{gender:[gender|user object]|masculine|feminine|neutral}}`.
* If second or third parameter are not specified, masculine is used.
*
* These details may be overriden per language.
*
- * @param gender string male, female, or anything else for neutral.
- * @param forms array List of gender forms
- *
+ * @param {string} gender 'male', 'female', or anything else for neutral.
+ * @param {Array} forms List of gender forms
* @return string
*/
gender: function ( gender, forms ) {
/**
* Grammatical transformations, needed for inflected languages.
- * Invoked by putting {{grammar:form|word}} in a message.
- * The rules can be defined in $wgGrammarForms global or grammar
- * forms can be computed dynamically by overriding this method per language
+ * Invoked by putting `{{grammar:form|word}}` in a message.
+ *
+ * The rules can be defined in $wgGrammarForms global or computed
+ * dynamically by overriding this method per language.
*
- * @param word {String}
- * @param form {String}
- * @return {String}
+ * @param {string} word
+ * @param {string} form
+ * @return {string}
*/
convertGrammar: function ( word, form ) {
var grammarForms = mw.language.getData( mw.config.get( 'wgUserLanguage' ), 'grammarForms' );
return word;
}
-};
-
-$.extend( mw.language, language );
+} );
}( mediaWiki, jQuery ) );
-/**
+/*
* Transfer of month names from messages into mw.language.
*
* Loading this module also ensures the availability of appropriate messages via mw.msg.
* Information about month names in current UI language.
*
* Object keys:
+ *
* - `names`: array of month names (in nominative case in languages which have the distinction),
* zero-indexed
* - `genitive`: array of month names in genitive case, zero-indexed
* for appropriate messages which can be passed to mw.msg.
*
* @property
+ * @member mw.language
*/
mw.language.months = {
keys: {
/*
- * Number related utilities for mediawiki.language
+ * Number-related utilities for mediawiki.language.
*/
( function ( mw, $ ) {
+ /**
+ * @class mw.language
+ */
/**
* Pad a string to guarantee that it is at least `size` length by
* filling with the character `ch` at either the start or end of the
* string. Pads at the start, by default.
- * example:
- * Fill the string to length 10 with '+' characters on the right. Yields 'blah++++++'.
- * pad('blah', 10, '+', true);
*
+ * Example: Fill the string to length 10 with '+' characters on the right.
+ *
+ * pad('blah', 10, '+', true); // => 'blah++++++'
+ *
+ * @private
* @param {string} text The string to pad
- * @param {Number} size To provide padding
- * @param {string} ch Character to pad, defaults to '0'
- * @param {Boolean} end Adds padding at the end if true, otherwise pads at start
+ * @param {number} size The length to pad to
+ * @param {string} [ch='0'] Character to pad with
+ * @param {boolean} [end=false] Adds padding at the end if true, otherwise pads at start
* @return {string}
*/
- function pad ( text, size, ch, end ) {
+ function pad( text, size, ch, end ) {
if ( !ch ) {
ch = '0';
}
}
/**
- * Efficiently replicate a string n times.
+ * Efficiently replicate a string `n` times.
*
+ * @private
* @param {string} str The string to replicate
- * @param {Number} num Number of times to replicate the string
+ * @param {number} num Number of times to replicate the string
* @return {string}
*/
- function replicate ( str, num ) {
+ function replicate( str, num ) {
if ( num <= 0 || !str ) {
return '';
}
* Adapted from dojo/number library with thanks
* http://dojotoolkit.org/reference-guide/1.8/dojo/number.html
*
- * @param {Number} value the number to be formatted, ignores sign
+ * @private
+ * @param {number} value the number to be formatted, ignores sign
* @param {string} pattern the number portion of a pattern (e.g. `#,##0.00`)
- * @param {string} options.decimalThe decimal separator
- * @param {string} options.group The group separator
- *
+ * @param {Object} [options] If provided, both option keys must be present:
+ * @param {string} options.decimal The decimal separator. Defaults to: `'.'`.
+ * @param {string} options.group The group separator. Defaults to: `','`.
* @return {string}
*/
function commafyNumber( value, pattern, options ) {
$.extend( mw.language, {
/**
- * Converts a number using digitTransformTable.
+ * Converts a number using #getDigitTransformTable.
*
- * @param {Number} num Value to be converted
- * @param {boolean} integer Convert the return value to an integer
- * @return {Number|string} Formatted number
+ * @param {number} num Value to be converted
+ * @param {boolean} [integer=false] Whether to convert the return value to an integer
+ * @return {number|string} Formatted number
*/
convertNumber: function ( num, integer ) {
var i, tmp, transformTable, numberString, convertedNumber, pattern;
return integer ? parseInt( convertedNumber, 10 ) : convertedNumber;
},
+ /**
+ * Get the digit transform table for current UI language.
+ * @return {Object|Array}
+ */
getDigitTransformTable: function () {
return mw.language.getData( mw.config.get( 'wgUserLanguage' ),
'digitTransformTable' ) || [];
},
+ /**
+ * Get the separator transform table for current UI language.
+ * @return {Object|Array}
+ */
getSeparatorTransformTable: function () {
return mw.language.getData( mw.config.get( 'wgUserLanguage' ),
'separatorTransformTable' ) || [];
},
/**
- * Apply pattern to format value as a string using as per
- * unicode.org TR35 - http://www.unicode.org/reports/tr35/#Number_Format_Patterns.
+ * Apply pattern to format value as a string.
+ *
+ * Using patterns from [Unicode TR35](http://www.unicode.org/reports/tr35/#Number_Format_Patterns).
*
- * @param {Number} value
+ * @param {number} value
* @param {string} pattern Pattern string as described by Unicode TR35
- * @throws Error
- * @returns {String}
+ * @throws {Error} If unable to find a number expression in `pattern`.
+ * @return {string}
*/
commafy: function ( value, pattern ) {
var numberPattern,
QUnit.module( 'mediawiki.jqueryMsg', QUnit.newMwEnvironment( {
setup: function () {
- this.orgMwLangauge = mw.language;
- mw.language = $.extend( true, {}, this.orgMwLangauge );
+ this.originalMwLanguage = mw.language;
// Messages that are reused in multiple tests
mw.messages.set( {
} );
},
teardown: function () {
- mw.language = this.orgMwLangauge;
+ mw.language = this.originalMwLanguage;
}
} ) );