diff --git a/UniversalLanguageSelector.php b/UniversalLanguageSelector.php index 24b758b3..1d5dd154 100644 --- a/UniversalLanguageSelector.php +++ b/UniversalLanguageSelector.php @@ -177,7 +177,7 @@ $wgExtensionFunctions[] = function() { $wgResourceModules['schema.UniversalLanguageSelector'] = array( 'class' => 'ResourceLoaderSchemaModule', 'schema' => 'UniversalLanguageSelector', - 'revision' => 5573536, + 'revision' => 5729800, ); } else { wfWarn( 'UniversalLanguageSelector is configured to use EventLogging, but ' diff --git a/resources/js/ext.uls.displaysettings.js b/resources/js/ext.uls.displaysettings.js index cf764e66..2be98e20 100644 --- a/resources/js/ext.uls.displaysettings.js +++ b/resources/js/ext.uls.displaysettings.js @@ -295,12 +295,18 @@ ); }, onVisible: function () { + var $parent; + + mw.uls.addEventLoggingTriggers(); + if ( !displaySettings.$parent.$window.hasClass( 'callout' ) ) { // callout menus will have position rules. others use // default position return; } - var $parent = $( '#language-settings-dialog' ); + + $parent = $( '#language-settings-dialog' ); + // Re-position the element according to the window that called it if ( parseInt( $parent.css( 'left' ), 10 ) ) { this.$menu.css( 'left', $parent.css( 'left' ) ); diff --git a/resources/js/ext.uls.eventlogger.js b/resources/js/ext.uls.eventlogger.js index 20ad8273..e0f49bc2 100644 --- a/resources/js/ext.uls.eventlogger.js +++ b/resources/js/ext.uls.eventlogger.js @@ -146,11 +146,17 @@ * @param {jQuery.Deferred} deferred */ interfaceLanguageChange: function ( language, deferred ) { - this.log( { + var logParams = { action: 'language-change', context: 'interface', interfaceLanguage: language - } ).always( deferred.resolve ); + }; + + if ( mw.uls.languageSelectionMethod !== undefined ) { + logParams.languageSelectionMethod = mw.uls.languageSelectionMethod; + } + + this.log( logParams ).always( deferred.resolve ); }, /** diff --git a/resources/js/ext.uls.init.js b/resources/js/ext.uls.init.js index 947b3b24..54820601 100644 --- a/resources/js/ext.uls.init.js +++ b/resources/js/ext.uls.init.js @@ -39,6 +39,39 @@ mw.uls.previousLanguagesCookie = 'uls-previous-languages'; 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 * @param {string} language Language code. diff --git a/resources/js/ext.uls.interface.js b/resources/js/ext.uls.interface.js index 128ac666..994636ac 100644 --- a/resources/js/ext.uls.interface.js +++ b/resources/js/ext.uls.interface.js @@ -420,6 +420,9 @@ }, onSelect: function ( language ) { mw.uls.changeLanguage( language ); + }, + onVisible: function () { + mw.uls.addEventLoggingTriggers(); } } ).trigger( 'click', eventParams );