Trevor Parscal has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/95082


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, 48 insertions(+), 21 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/VisualEditor 
refs/changes/82/95082/1

diff --git a/modules/oojs-ui/OO.ui.js b/modules/oojs-ui/OO.ui.js
index 4bba184..2f58e1e 100644
--- a/modules/oojs-ui/OO.ui.js
+++ b/modules/oojs-ui/OO.ui.js
@@ -28,6 +28,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: newchange
Gerrit-Change-Id: I0883a73cb478d4f7509f61aebed2b2957ddb9ce8
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Trevor Parscal <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to