summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.eventlogger.js
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.eventlogger.js')
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.eventlogger.js227
1 files changed, 227 insertions, 0 deletions
diff --git a/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.eventlogger.js b/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.eventlogger.js
new file mode 100644
index 00000000..02cfa88e
--- /dev/null
+++ b/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.eventlogger.js
@@ -0,0 +1,227 @@
+/*!
+ * ULS Event logger
+ *
+ * See https://meta.wikimedia.org/wiki/Schema:UniversalLanguageSelector
+ *
+ * @private
+ * @since 2013.08
+ *
+ * Copyright (C) 2012-2013 Alolita Sharma, Amir Aharoni, Arun Ganesh, Brandon Harris,
+ * Niklas Laxström, Pau Giner, Santhosh Thottingal, Siebrand Mazeland and other
+ * contributors. See CREDITS for a list.
+ *
+ * UniversalLanguageSelector is dual licensed GPLv2 or later and MIT. You don't
+ * have to do anything special to choose one license or the other and you don't
+ * have to notify anyone which license you are using. You are free to use
+ * UniversalLanguageSelector in commercial projects as long as the copyright
+ * header is left intact. See files GPL-LICENSE and MIT-LICENSE for details.
+ *
+ * @file
+ * @ingroup Extensions
+ * @licence GNU General Public Licence 2.0 or later
+ * @licence MIT License
+ */
+
+( function () {
+ 'use strict';
+
+ /**
+ * Try to emit an EventLogging event with schema 'UniversalLanguageSelector'.
+ *
+ * If EventLogging is not installed, this simply does nothing.
+ *
+ * @param {Object} event Event action and optional fields
+ */
+ function log( event ) {
+ event = $.extend( {
+ version: 1,
+ token: mw.user.id(),
+ contentLanguage: mw.config.get( 'wgContentLanguage' ),
+ interfaceLanguage: mw.config.get( 'wgUserLanguage' )
+ }, event );
+
+ mw.track( 'event.UniversalLanguageSelector', event );
+ }
+
+ /**
+ * Log language settings open
+ *
+ * @param {string} context Where it was opened from
+ */
+ function ulsSettingsOpen( context ) {
+ log( {
+ action: 'settings-open',
+ context: context
+ } );
+ }
+
+ /**
+ * Log language revert
+ *
+ * @param {jQuery.Deferred} deferred
+ */
+ function ulsLanguageRevert( deferred ) {
+ log( { action: 'ui-lang-revert' } ).always( deferred.resolve() );
+ }
+
+ /**
+ * Log IME disabling
+ *
+ * @param {string} context Where the setting was changed.
+ */
+ function disableIME( context ) {
+ log( { action: 'ime-disable', context: context } );
+ }
+
+ /**
+ * Log IME enabling
+ *
+ * @param {string} context Where the setting was changed.
+ */
+ function enableIME( context ) {
+ log( { action: 'ime-enable', context: context } );
+ }
+
+ /**
+ * Log IME change
+ *
+ * @param {string} inputMethod
+ */
+ function changeIME( inputMethod ) {
+ log( {
+ action: 'ime-change',
+ inputMethod: inputMethod
+ } );
+ }
+
+ /**
+ * Log login link click in display settings.
+ *
+ * @param {jQuery.Deferred} deferred
+ */
+ function loginClick( deferred ) {
+ log( { action: 'login-click' } );
+ deferred.resolve();
+ }
+
+ /**
+ * Log when "More languages" item in IME menu is clicked.
+ */
+ function imeMoreLanguages() {
+ log( {
+ action: 'more-languages-access',
+ context: 'ime'
+ } );
+ }
+
+ /**
+ * Log interface language change
+ *
+ * @param {string} language language code
+ * @param {jQuery.Deferred} deferred
+ */
+ function interfaceLanguageChange( language, deferred ) {
+ var logParams = {
+ action: 'language-change',
+ context: 'interface',
+ interfaceLanguage: language
+ };
+
+ log( logParams );
+ deferred.resolve();
+ }
+
+ /**
+ * More languages in display settings is clicked
+ */
+ function interfaceMoreLanguages() {
+ log( {
+ action: 'more-languages-access',
+ context: 'interface'
+ } );
+ }
+
+ /**
+ * Log font preference changes
+ *
+ * @param {string} context Either 'interface' or 'content'
+ * @param {string} language
+ * @param {string} font
+ */
+ function fontChange( context, language, font ) {
+ var logParams = {
+ action: 'font-change',
+ context: context
+ };
+
+ if ( context === 'interface' ) {
+ logParams.interfaceFont = font;
+ // Override in case the user changed the ui language but hasn't applied it yet
+ logParams.interfaceLanguage = language;
+ } else {
+ logParams.contentFont = font;
+ }
+
+ log( logParams );
+ }
+
+ /**
+ * Log webfonts disabling
+ *
+ * @param {string} context Where the setting was changed.
+ */
+ function disableWebfonts( context ) {
+ log( { action: 'webfonts-disable', context: context } );
+ }
+
+ /**
+ * Log webfonts enabling
+ *
+ * @param {string} context Where the setting was changed.
+ */
+ function enableWebfonts( context ) {
+ log( { action: 'webfonts-enable', context: context } );
+ }
+
+ /**
+ * Log search strings which produce no search results.
+ *
+ * @param {jQuery.event} event The original event
+ * @param {Object} data Information about the failed search
+ */
+ function noSearchResults( event, data ) {
+ log( {
+ action: 'no-search-results',
+ context: data.query,
+ ulsPurpose: data.ulsPurpose,
+ title: mw.config.get( 'wgPageName' )
+ } );
+ }
+
+ /**
+ * Start listening for event logging
+ */
+ function listen() {
+ // Register handlers for event logging triggers
+ mw.hook( 'mw.uls.settings.open' ).add( ulsSettingsOpen );
+ mw.hook( 'mw.uls.language.revert' ).add( ulsLanguageRevert );
+ mw.hook( 'mw.uls.ime.enable' ).add( enableIME );
+ mw.hook( 'mw.uls.ime.disable' ).add( disableIME );
+ mw.hook( 'mw.uls.ime.change' ).add( changeIME );
+ mw.hook( 'mw.uls.login.click' ).add( loginClick );
+ mw.hook( 'mw.uls.ime.morelanguages' ).add( imeMoreLanguages );
+ mw.hook( 'mw.uls.interface.morelanguages' ).add( interfaceMoreLanguages );
+ mw.hook( 'mw.uls.interface.language.change' ).add( interfaceLanguageChange );
+ mw.hook( 'mw.uls.font.change' ).add( fontChange );
+ mw.hook( 'mw.uls.webfonts.enable' ).add( enableWebfonts );
+ mw.hook( 'mw.uls.webfonts.disable' ).add( disableWebfonts );
+
+ $( 'body' ).on(
+ 'noresults.uls',
+ '.uls-menu .uls-languagefilter',
+ noSearchResults
+ );
+ }
+
+ listen();
+}() );