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