Implement language-selection-method event

Change-Id: If2d207f8a221c8f2a560b1399ad69a3032b2064b
This commit is contained in:
Amir E. Aharoni
2013-08-19 10:56:22 +03:00
committed by Nikerabbit
parent e5891b83b5
commit a3bca89a42
5 changed files with 52 additions and 4 deletions

View File

@@ -177,7 +177,7 @@ $wgExtensionFunctions[] = function() {
$wgResourceModules['schema.UniversalLanguageSelector'] = array( $wgResourceModules['schema.UniversalLanguageSelector'] = array(
'class' => 'ResourceLoaderSchemaModule', 'class' => 'ResourceLoaderSchemaModule',
'schema' => 'UniversalLanguageSelector', 'schema' => 'UniversalLanguageSelector',
'revision' => 5573536, 'revision' => 5729800,
); );
} else { } else {
wfWarn( 'UniversalLanguageSelector is configured to use EventLogging, but ' wfWarn( 'UniversalLanguageSelector is configured to use EventLogging, but '

View File

@@ -295,12 +295,18 @@
); );
}, },
onVisible: function () { onVisible: function () {
var $parent;
mw.uls.addEventLoggingTriggers();
if ( !displaySettings.$parent.$window.hasClass( 'callout' ) ) { if ( !displaySettings.$parent.$window.hasClass( 'callout' ) ) {
// callout menus will have position rules. others use // callout menus will have position rules. others use
// default position // default position
return; return;
} }
var $parent = $( '#language-settings-dialog' );
$parent = $( '#language-settings-dialog' );
// Re-position the element according to the window that called it // Re-position the element according to the window that called it
if ( parseInt( $parent.css( 'left' ), 10 ) ) { if ( parseInt( $parent.css( 'left' ), 10 ) ) {
this.$menu.css( 'left', $parent.css( 'left' ) ); this.$menu.css( 'left', $parent.css( 'left' ) );

View File

@@ -146,11 +146,17 @@
* @param {jQuery.Deferred} deferred * @param {jQuery.Deferred} deferred
*/ */
interfaceLanguageChange: function ( language, deferred ) { interfaceLanguageChange: function ( language, deferred ) {
this.log( { var logParams = {
action: 'language-change', action: 'language-change',
context: 'interface', context: 'interface',
interfaceLanguage: language interfaceLanguage: language
} ).always( deferred.resolve ); };
if ( mw.uls.languageSelectionMethod !== undefined ) {
logParams.languageSelectionMethod = mw.uls.languageSelectionMethod;
}
this.log( logParams ).always( deferred.resolve );
}, },
/** /**

View File

@@ -39,6 +39,39 @@
mw.uls.previousLanguagesCookie = 'uls-previous-languages'; mw.uls.previousLanguagesCookie = 'uls-previous-languages';
mw.uls.languageSettingsModules = ['ext.uls.inputsettings', 'ext.uls.displaysettings']; mw.uls.languageSettingsModules = ['ext.uls.inputsettings', 'ext.uls.displaysettings'];
// What was the last thing that the user did to select the language:
// * 'map' - clicked the map
// * 'search' - typed in the search box
// * 'common' - clicked a link in the "Common languages" section
// If the user just clicked in some other section, it remains undefined.
// This is useful for logging.
mw.uls.languageSelectionMethod = undefined;
/**
* Add event logging triggers, which are common to different
* ULS instances
*/
mw.uls.addEventLoggingTriggers = function () {
// Remove previous values when reinitializing
mw.uls.languageSelectionMethod = undefined;
$( '#map-block' ).on( 'click', function () {
mw.uls.languageSelectionMethod = 'map';
} );
$( '#languagefilter' ).on( 'keydown', function () {
// If it's the first letter,
// log the usage of the search box
if ( $( this ).val() === '' ) {
mw.uls.languageSelectionMethod = 'search';
}
} );
$( '#uls-lcd-quicklist a' ).on( 'click', function () {
mw.uls.languageSelectionMethod = 'common';
} );
};
/** /**
* Change the language of wiki using setlang URL parameter * Change the language of wiki using setlang URL parameter
* @param {string} language Language code. * @param {string} language Language code.

View File

@@ -420,6 +420,9 @@
}, },
onSelect: function ( language ) { onSelect: function ( language ) {
mw.uls.changeLanguage( language ); mw.uls.changeLanguage( language );
},
onVisible: function () {
mw.uls.addEventLoggingTriggers();
} }
} ).trigger( 'click', eventParams ); } ).trigger( 'click', eventParams );