jenkins-bot has submitted this change and it was merged.
Change subject: Make generic localization utility for lang code keyed objects
......................................................................
Make generic localization utility for lang code keyed objects
Utilize in OO.ui.IconedElement and ve.dm.TemplateSpecModel
Change-Id: I0883a73cb478d4f7509f61aebed2b2957ddb9ce8
---
M modules/oojs-ui/OO.ui.js
M modules/oojs-ui/elements/OO.ui.IconedElement.js
M modules/ve-mw/dm/models/ve.dm.MWTemplateSpecModel.js
3 files changed, 51 insertions(+), 23 deletions(-)
Approvals:
Catrope: Looks good to me, approved
jenkins-bot: Verified
diff --git a/modules/oojs-ui/OO.ui.js b/modules/oojs-ui/OO.ui.js
index 4bba184..cd1eee4 100644
--- a/modules/oojs-ui/OO.ui.js
+++ b/modules/oojs-ui/OO.ui.js
@@ -16,8 +16,9 @@
OO.ui.bind = $.proxy;
/**
- * Get the user's language and any fallback languages. These language codes
are used by
- * OO.ui.IconedElement to select localized icons in the user's language.
+ * Get the user's language and any fallback languages.
+ *
+ * These language codes are used to localize user interface elements in the
user's language.
*
* In environments that provide a localization system, this function should be
overridden to
* return the user's language(s). The default implementation returns English
(en) only.
@@ -28,6 +29,41 @@
return [ 'en' ];
};
+/**
+ * Get a value in an object keyed by language code.
+ *
+ * @param {Object.<string,Mixed>} obj Object keyed by language code
+ * @param {string|null} [lang] Language code, if omitted or null defaults to
any user language
+ * @param {string} [fallback] Fallback code, used if no matching language can
be found
+ * @returns {Mixed} Local value
+ */
+OO.ui.getLocalValue = function ( obj, lang, fallback ) {
+ var i, len, langs;
+
+ // Requested language
+ if ( obj[lang] ) {
+ return obj[lang];
+ }
+ // Known user language
+ langs = OO.ui.getUserLanguages();
+ for ( i = 0, len = langs.length; i < len; i++ ) {
+ lang = langs[i];
+ if ( obj[lang] ) {
+ return obj[lang];
+ }
+ }
+ // Fallback language
+ if ( obj[fallback] ) {
+ return obj[fallback];
+ }
+ // First existing language
+ for ( lang in obj ) {
+ return obj[lang];
+ }
+
+ return undefined;
+};
+
( function () {
/**
diff --git a/modules/oojs-ui/elements/OO.ui.IconedElement.js
b/modules/oojs-ui/elements/OO.ui.IconedElement.js
index 09612f0..5771d7d 100644
--- a/modules/oojs-ui/elements/OO.ui.IconedElement.js
+++ b/modules/oojs-ui/elements/OO.ui.IconedElement.js
@@ -40,21 +40,7 @@
* @chainable
*/
OO.ui.IconedElement.prototype.setIcon = function ( value ) {
- var i, len, icon, lang,
- langs = OO.ui.getUserLanguages();
-
- if ( OO.isPlainObject( value ) ) {
- icon = value['default'];
- for ( i = 0, len = langs.length; i < len; i++ ) {
- lang = langs[i];
- if ( value[lang] ) {
- icon = value[lang];
- break;
- }
- }
- } else {
- icon = value;
- }
+ var icon = OO.isPlainObject( value ) ? OO.ui.getLocalValue( value,
null, 'default' ) : value;
if ( this.icon ) {
this.$icon.removeClass( 'oo-ui-icon-' + this.icon );
diff --git a/modules/ve-mw/dm/models/ve.dm.MWTemplateSpecModel.js
b/modules/ve-mw/dm/models/ve.dm.MWTemplateSpecModel.js
index 13b6be5..934052a 100644
--- a/modules/ve-mw/dm/models/ve.dm.MWTemplateSpecModel.js
+++ b/modules/ve-mw/dm/models/ve.dm.MWTemplateSpecModel.js
@@ -141,10 +141,12 @@
* Get template description.
*
* @method
+ * @param {string} [lang] Language to get description in
* @returns {string|null} Template description or null if not available
*/
-ve.dm.MWTemplateSpecModel.prototype.getDescription = function () {
- return this.description;
+ve.dm.MWTemplateSpecModel.prototype.getDescription = function ( lang ) {
+ var value = this.description;
+ return ve.isPlainObject( value ) ? OO.ui.getLocalValue( value, lang ) :
value;
};
/**
@@ -176,10 +178,12 @@
*
* @method
* @param {string} name Parameter name
+ * @param {string} [lang] Language to get label in
* @returns {string} Parameter label
*/
-ve.dm.MWTemplateSpecModel.prototype.getParameterLabel = function ( name ) {
- return this.params[name].label || name;
+ve.dm.MWTemplateSpecModel.prototype.getParameterLabel = function ( name, lang
) {
+ var value = this.params[name].label;
+ return ve.isPlainObject( value ) ? OO.ui.getLocalValue( value, lang ) :
value;
};
/**
@@ -187,10 +191,12 @@
*
* @method
* @param {string} name Parameter name
+ * @param {string} [lang] Language to get description
* @returns {string|null} Parameter description
*/
-ve.dm.MWTemplateSpecModel.prototype.getParameterDescription = function ( name
) {
- return this.params[name].description;
+ve.dm.MWTemplateSpecModel.prototype.getParameterDescription = function ( name,
lang ) {
+ var value = this.params[name].description;
+ return ve.isPlainObject( value ) ? OO.ui.getLocalValue( value, lang ) :
value;
};
/**
--
To view, visit https://gerrit.wikimedia.org/r/95082
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I0883a73cb478d4f7509f61aebed2b2957ddb9ce8
Gerrit-PatchSet: 5
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Trevor Parscal <[email protected]>
Gerrit-Reviewer: Catrope <[email protected]>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits