Merge "Only use jQuery.tipsy for undo popover"

This commit is contained in:
jenkins-bot
2015-11-12 08:55:48 +00:00
committed by Gerrit Code Review
3 changed files with 22 additions and 25 deletions

View File

@@ -112,7 +112,6 @@ $wgResourceModules['ext.uls.interface'] = array(
'scripts' => 'resources/js/ext.uls.interface.js', 'scripts' => 'resources/js/ext.uls.interface.js',
'dependencies' => array( 'dependencies' => array(
'ext.uls.init', 'ext.uls.init',
'jquery.tipsy',
'mediawiki.jqueryMsg', 'mediawiki.jqueryMsg',
'mediawiki.user', 'mediawiki.user',
// We cannot delay the loading of the basic webfonts library // We cannot delay the loading of the basic webfonts library

View File

@@ -197,7 +197,6 @@
"scripts": "js/ext.uls.interface.js", "scripts": "js/ext.uls.interface.js",
"dependencies": [ "dependencies": [
"ext.uls.init", "ext.uls.init",
"jquery.tipsy",
"mediawiki.jqueryMsg", "mediawiki.jqueryMsg",
"mediawiki.user", "mediawiki.user",
"ext.uls.webfonts" "ext.uls.webfonts"

View File

@@ -174,9 +174,11 @@
autonym = $.cookie( mw.uls.previousLanguageAutonymCookie ); autonym = $.cookie( mw.uls.previousLanguageAutonymCookie );
if ( autonym ) { if ( autonym ) {
deferred.resolve( autonym ); mw.loader.using( 'jquery.tipsy', function () {
deferred.resolve( autonym );
} );
} else { } else {
mw.loader.using( 'jquery.uls.data', function () { mw.loader.using( [ 'jquery.uls.data', 'jquery.tipsy' ], function () {
deferred.resolve( $.uls.data.getAutonym( code ) ); deferred.resolve( $.uls.data.getAutonym( code ) );
} ); } );
} }
@@ -184,12 +186,22 @@
return deferred.promise(); return deferred.promise();
} }
function userCanChangeLanguage() {
return mw.config.get( 'wgULSAnonCanChangeLanguage') || !mw.user.isAnon();
}
function userHasChangedLanguage() {
var previousLang = mw.uls.getPreviousLanguages().slice( -1 )[ 0 ],
currentLang = mw.config.get( 'wgUserLanguage' );
return previousLang && previousLang !== currentLang;
}
/** /**
* The tooltip to be shown when language changed using ULS. * The tooltip to be shown when language changed using ULS.
* It also allows to undo the language selection. * It also allows to undo the language selection.
*/ */
function showULSTooltip() { function showUndoTooltip() {
var previousLang, $ulsTrigger, anonMode, showUndo, newLanguage, previousLanguages, var previousLanguages, previousLang, $ulsTrigger,
ulsPosition = mw.config.get( 'wgULSPosition' ), ulsPosition = mw.config.get( 'wgULSPosition' ),
currentLang = mw.config.get( 'wgUserLanguage' ), currentLang = mw.config.get( 'wgUserLanguage' ),
rtlPage = $( 'body' ).hasClass( 'rtl' ), rtlPage = $( 'body' ).hasClass( 'rtl' ),
@@ -202,26 +214,11 @@
$( '.uls-settings-trigger' ) : $( '.uls-settings-trigger' ) :
$( '.uls-trigger' ); $( '.uls-trigger' );
previousLanguages = mw.uls.getPreviousLanguages() || []; previousLanguages = mw.uls.getPreviousLanguages();
previousLang = previousLanguages.slice( -1 )[0]; previousLang = previousLanguages.slice( -1 )[0];
// Whether we see current language for the first time previousLanguages.push( currentLang );
newLanguage = currentLang !== previousLang; mw.uls.setPreviousLanguages( previousLanguages );
// Whether user is able to change language
anonMode = ( mw.user.isAnon() && !mw.config.get( 'wgULSAnonCanChangeLanguage' ) );
// Whether user is able to change language, and just did so
showUndo = !anonMode && newLanguage && previousLang !== undefined;
if ( newLanguage ) {
previousLanguages.push( currentLang );
mw.uls.setPreviousLanguages( previousLanguages );
}
if ( !showUndo ) {
// In interlanguage mode, we will have normal tooltip, make it look same using tipsy
$ulsTrigger.tipsy( { gravity: tipsyGravity[ulsPosition] } );
return;
}
getUndoAutonym( previousLang ).done( function( autonym ) { getUndoAutonym( previousLang ).done( function( autonym ) {
// Attach a tipsy tooltip to the trigger // Attach a tipsy tooltip to the trigger
@@ -475,7 +472,9 @@
return false; return false;
} ); } );
showULSTooltip(); if ( userCanChangeLanguage() && userHasChangedLanguage() ) {
showUndoTooltip();
}
$( 'body' ).on( 'focus.imeinit', imeSelector, function () { $( 'body' ).on( 'focus.imeinit', imeSelector, function () {
var $input = $( this ); var $input = $( this );