Merge "selenium: invoke jobs to enforce eventual consistency"
[lhc/web/wiklou.git] / resources / src / mediawiki.language / mediawiki.language.init.js
1 ( function () {
2 /**
3 * Base language object with methods related to language support, attempting to mirror some of the
4 * functionality of the Language class in MediaWiki:
5 *
6 * - storing and retrieving language data
7 * - transforming message syntax (`{{PLURAL:}}`, `{{GRAMMAR:}}`, `{{GENDER:}}`)
8 * - formatting numbers
9 *
10 * @class
11 * @singleton
12 */
13 mw.language = {
14 /**
15 * Language-related data (keyed by language, contains instances of mw.Map).
16 *
17 * Exported dynamically by the ResourceLoaderLanguageDataModule class in PHP.
18 *
19 * To set data:
20 *
21 * // Override, extend or create the language data object of 'nl'
22 * mw.language.setData( 'nl', 'myKey', 'My value' );
23 *
24 * // Set multiple key/values pairs at once
25 * mw.language.setData( 'nl', { foo: 'X', bar: 'Y' } );
26 *
27 * To get GrammarForms data for language 'nl':
28 *
29 * var grammarForms = mw.language.getData( 'nl', 'grammarForms' );
30 *
31 * Possible data keys:
32 *
33 * - `digitTransformTable`
34 * - `separatorTransformTable`
35 * - `minimumGroupingDigits`
36 * - `grammarForms`
37 * - `pluralRules`
38 * - `digitGroupingPattern`
39 * - `fallbackLanguages`
40 *
41 * @property
42 */
43 data: {},
44
45 /**
46 * Convenience method for retrieving language data.
47 *
48 * Structured by language code and data key, covering for the potential inexistence of a
49 * data object for this language.
50 *
51 * @param {string} langCode
52 * @param {string} dataKey
53 * @return {Mixed} Value stored in the mw.Map (or `undefined` if there is no map for the
54 * specified langCode)
55 */
56 getData: function ( langCode, dataKey ) {
57 var langData = mw.language.data;
58 langCode = langCode.toLowerCase();
59 if ( langData && langData[ langCode ] instanceof mw.Map ) {
60 return langData[ langCode ].get( dataKey );
61 }
62 return undefined;
63 },
64
65 /**
66 * Convenience method for setting language data.
67 *
68 * Creates the data mw.Map if there isn't one for the specified language already.
69 *
70 * @param {string} langCode
71 * @param {string|Object} dataKey Key or object of key/values
72 * @param {Mixed} [value] Value for dataKey, omit if dataKey is an object
73 */
74 setData: function ( langCode, dataKey, value ) {
75 var langData = mw.language.data;
76 langCode = langCode.toLowerCase();
77 if ( !( langData[ langCode ] instanceof mw.Map ) ) {
78 langData[ langCode ] = new mw.Map();
79 }
80 if ( arguments.length > 2 ) {
81 langData[ langCode ].set( dataKey, value );
82 } else {
83 langData[ langCode ].set( dataKey );
84 }
85 }
86 };
87
88 }() );