Theopolisme has uploaded a new change for review.
https://gerrit.wikimedia.org/r/104168
Change subject: Add support for language variants in LanguageOverlay
......................................................................
Add support for language variants in LanguageOverlay
Also consolidate API requests so that only one is
necessary to get langage and language variant data.
Bug: 58988
Change-Id: I706e29d554bf09393ba27523f360e5d28f4576b8
---
M javascripts/common/PageApi.js
M javascripts/modules/languagesNew/languages.js
M templates/modules/languagesNew/LanguageOverlay.html
3 files changed, 61 insertions(+), 36 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/MobileFrontend
refs/changes/68/104168/1
diff --git a/javascripts/common/PageApi.js b/javascripts/common/PageApi.js
index 4b59e9e..394dcc1 100644
--- a/javascripts/common/PageApi.js
+++ b/javascripts/common/PageApi.js
@@ -102,58 +102,84 @@
},
/**
- * Gathers a mapping of all available language codes on the
site and their human readable names
+ * Gets language list for a page; helper function for
getPageLanguages()
*
- * @return {jQuery.Deferred} where argument is a javascript
object with language codes as keys
+ * @param {object} data Data from API
+ * @return {array} List of language objects
*/
- _getAllLanguages: function() {
- if ( !this._languageCache ) {
- this._languageCache = this.get( {
- action: 'query',
- meta: 'siteinfo',
- siprop: 'languages'
- } ).then( function( data ) {
- var languages = {};
- data.query.languages.forEach( function(
item ) {
- languages[ item.code ] = item[
'*' ];
- } );
- return languages;
- } );
+ _getLanguagesFromData: function( data ) {
+ // allAvailableLanguages is a mapping of all codes to
language names
+ var allAvailableLanguages = {};
+ data.query.languages.forEach( function( item ) {
+ allAvailableLanguages[ item.code ] = item[ '*'
];
+ } );
+
+ // FIXME: API returns an object when a list makes much
more sense
+ var pages = $.map( data.query.pages, function( v ) {
return v; } ),
+ // FIXME: "|| []" wouldn't be needed if API was more
consistent
+ langlinks = pages[0] ? pages[0].langlinks || [] : [];
+
+ langlinks.forEach( function( item, i ) {
+ langlinks[ i ].langname =
allAvailableLanguages[ item.lang ];
+ } );
+
+ return langlinks;
+ },
+
+ /**
+ * Gets language variant list for a page; helper function for
getPageLanguages()
+ *
+ * @param {string} title Name of the page to obtain variants
for
+ * @param {object} data Data from API
+ * @return {array} List of language variant objects
+ */
+ _getLanguageVariantsFromData: function( title, data ) {
+ var generalData = data.query.general,
+ variantPath = generalData.variantarticlepath,
+ variants = [];
+
+ // Fallback if variant path not set
+ if ( !variantPath ) {
+ variantPath = mw.util.getUrl( title, {
'variant' : '' } ) + '$1';
}
- return this._languageCache;
+
+ // Create the data object for each variant and store it
+ generalData.variants.forEach( function( item ) {
+ variants.push( {
+ langname: item.name,
+ lang: item.code,
+ url: variantPath
+ .replace( '$1', item.code )
+ .replace( '$2', title )
+ } );
+ } );
+
+ return variants;
},
/**
* Retrieve available languages for a given title
*
- * FIXME: Return language variants as well. Requires an
upstream change.
- *
* @param {string} title the title of the page languages should
be retrieved for
- * @return {jQuery.Deferred} which is called with a mapping of
language codes to language names
+ * @return {jQuery.Deferred} which is called with an object
containing langlinks and variant links
*/
getPageLanguages: function( title ) {
var self = this, result = $.Deferred();
- this._getAllLanguages().done( function(
allAvailableLanguages ) {
- self.get( {
+ self.get( {
action: 'query',
+ meta: 'siteinfo',
+ siprop: 'general|languages',
prop: 'langlinks',
llurl: true,
lllimit: 'max',
titles: title
} ).done( function( resp ) {
- // FIXME: API returns an object when a
list makes much more sense
- var pages = $.map( resp.query.pages,
function( v ) { return v; } ),
- // FIXME: "|| []" wouldn't be needed if
API was more consistent
- langlinks = pages[0] ?
pages[0].langlinks || [] : [];
-
- langlinks.forEach( function( item, i ) {
- langlinks[ i ].langname =
allAvailableLanguages[ item.lang ];
+ result.resolve( {
+ languages:
self._getLanguagesFromData( resp ),
+ variants:
self._getLanguageVariantsFromData( title, resp )
} );
-
- result.resolve( langlinks );
} ).fail( $.proxy( result, 'reject' ) );
- } );
return result;
}
diff --git a/javascripts/modules/languagesNew/languages.js
b/javascripts/modules/languagesNew/languages.js
index ca04175..239999e 100644
--- a/javascripts/modules/languagesNew/languages.js
+++ b/javascripts/modules/languagesNew/languages.js
@@ -17,11 +17,10 @@
loadingOverlay = new LoadingOverlay();
loadingOverlay.show();
- // FIXME: Once getPageLanguages() can return
language variants,
- // pass these to languageOverlay as well.
- M.pageApi.getPageLanguages( mw.config.get(
'wgPageName' ) ).done( function ( langlinks ) {
+ M.pageApi.getPageLanguages( mw.config.get(
'wgPageName' ) ).done( function ( data ) {
var languageOverlay = new
LanguageOverlay( {
- languages: langlinks
+ languages:
data.languages,
+ variants: data.variants
} );
loadingOverlay.hide();
languageOverlay.show();
diff --git a/templates/modules/languagesNew/LanguageOverlay.html
b/templates/modules/languagesNew/LanguageOverlay.html
index b79ba1a..ef90450 100644
--- a/templates/modules/languagesNew/LanguageOverlay.html
+++ b/templates/modules/languagesNew/LanguageOverlay.html
@@ -6,7 +6,7 @@
<ul class="page-list">
{{#variants}}
<li>
- <a href="{{url}}" hreflang="{{lang}}"
lang="{{lang}}"><span>{{langname}}</span>{{#*}} ({{*}}){{/*}}</a>
+ <a href="{{url}}" hreflang="{{lang}}"
lang="{{lang}}">{{langname}}</a>
</li>
{{/variants}}
</ul>
--
To view, visit https://gerrit.wikimedia.org/r/104168
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I706e29d554bf09393ba27523f360e5d28f4576b8
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/MobileFrontend
Gerrit-Branch: master
Gerrit-Owner: Theopolisme <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits