Refactor interface integration code
Reduce document.ready code by moving functions outside and grouping tooltip related code to a function. Also remove window and document from wrapper anon function since browser: true is defined in .jshintrc Bug: 48156 Change-Id: I7228285cdcb33b915e96e7e2c59e4dbc90f5fc96
This commit is contained in:
committed by
Gerrit Code Review
parent
702197a8a7
commit
8655504371
@@ -760,6 +760,7 @@
|
|||||||
*/
|
*/
|
||||||
selectLanguage: function ( languageCode ) {
|
selectLanguage: function ( languageCode ) {
|
||||||
var ime,
|
var ime,
|
||||||
|
imePref = $.ime.preferences.getIM( languageCode ),
|
||||||
language = $.ime.languages[languageCode];
|
language = $.ime.languages[languageCode];
|
||||||
|
|
||||||
if ( !language ) {
|
if ( !language ) {
|
||||||
@@ -772,7 +773,8 @@
|
|||||||
// Nothing to do. It is same as the current language,
|
// Nothing to do. It is same as the current language,
|
||||||
// but check whether the input method changed.
|
// but check whether the input method changed.
|
||||||
if ( ime.inputmethod &&
|
if ( ime.inputmethod &&
|
||||||
ime.inputmethod.id === $.ime.preferences.getIM( languageCode )
|
ime.inputmethod.id === imePref ||
|
||||||
|
imePref === 'system'
|
||||||
) {
|
) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* ULS Interface language selector
|
* ULS interface integration logic
|
||||||
*
|
*
|
||||||
* Copyright (C) 2012-2013 Alolita Sharma, Amir Aharoni, Arun Ganesh, Brandon Harris,
|
* Copyright (C) 2012-2013 Alolita Sharma, Amir Aharoni, Arun Ganesh, Brandon Harris,
|
||||||
* Niklas Laxström, Pau Giner, Santhosh Thottingal, Siebrand Mazeland and other
|
* Niklas Laxström, Pau Giner, Santhosh Thottingal, Siebrand Mazeland and other
|
||||||
@@ -17,172 +17,119 @@
|
|||||||
* @licence MIT License
|
* @licence MIT License
|
||||||
*/
|
*/
|
||||||
|
|
||||||
( function ( $, mw, window, document, undefined ) {
|
( function ( $, mw ) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
$( document ).ready( function () {
|
/*
|
||||||
var $ulsTrigger,
|
* Construct the display settings link
|
||||||
$ulsSettingsTrigger,
|
*/
|
||||||
$pLang,
|
function displaySettings() {
|
||||||
ulsOptions,
|
var $displaySettingsTitle, displaySettingsText, $displaySettings;
|
||||||
previousLanguages, previousLang,
|
|
||||||
anonMode,
|
displaySettingsText = $.i18n( 'ext-uls-display-settings-desc' );
|
||||||
rtlPage = $( 'body' ).hasClass( 'rtl' ),
|
$displaySettingsTitle = $( '<div data-i18n="ext-uls-display-settings-title">' )
|
||||||
|
.addClass( 'settings-title' )
|
||||||
|
.attr( 'title', displaySettingsText );
|
||||||
|
$displaySettings = $( '<div>' )
|
||||||
|
.addClass( 'display-settings-block' )
|
||||||
|
.prop( 'id', 'display-settings-block' )
|
||||||
|
.append( $displaySettingsTitle );
|
||||||
|
|
||||||
|
return $displaySettings;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Construct the input settings link
|
||||||
|
*/
|
||||||
|
function inputSettings() {
|
||||||
|
var $inputSettingsTitle, inputSettingsText, $inputSettings;
|
||||||
|
|
||||||
|
inputSettingsText = $.i18n( 'ext-uls-input-settings-desc' );
|
||||||
|
$inputSettingsTitle = $( '<div data-i18n="ext-uls-input-settings-title">' )
|
||||||
|
.addClass( 'settings-title' )
|
||||||
|
.attr( 'title', inputSettingsText );
|
||||||
|
$inputSettings = $( '<div>' )
|
||||||
|
.addClass( 'input-settings-block' )
|
||||||
|
.prop( 'id', 'input-settings-block' )
|
||||||
|
.append( $inputSettingsTitle );
|
||||||
|
|
||||||
|
return $inputSettings;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Add display settings link to the settings bar in ULS
|
||||||
|
* @param {Object} uls The ULS object
|
||||||
|
*/
|
||||||
|
function addDisplaySettings( uls ) {
|
||||||
|
var $displaySettings = displaySettings(),
|
||||||
ulsPosition = mw.config.get( 'wgULSPosition' ),
|
ulsPosition = mw.config.get( 'wgULSPosition' ),
|
||||||
|
anonMode = ( mw.user.isAnon() &&
|
||||||
|
!mw.config.get( 'wgULSAnonCanChangeLanguage' ) ),
|
||||||
|
displaySettingsOptions = {
|
||||||
|
defaultModule: 'display'
|
||||||
|
};
|
||||||
|
|
||||||
|
// If the ULS trigger is shown in the top personal menu,
|
||||||
|
// closing the display settings must show the main ULS
|
||||||
|
// languages list, unless we are in anon mode and thus
|
||||||
|
// cannot show the language list
|
||||||
|
if ( ulsPosition === 'personal' && !anonMode ) {
|
||||||
|
displaySettingsOptions.onClose = function () {
|
||||||
|
uls.show();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
$.extend( displaySettingsOptions, uls.position() );
|
||||||
|
|
||||||
|
uls.$menu.find( '#settings-block' ).append( $displaySettings );
|
||||||
|
$displaySettings.languagesettings( displaySettingsOptions );
|
||||||
|
$displaySettings.on( 'click', function () {
|
||||||
|
uls.hide();
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Add input settings link to the settings bar in ULS
|
||||||
|
* @param {Object} uls The ULS object
|
||||||
|
*/
|
||||||
|
function addInputSettings( uls ) {
|
||||||
|
var $inputSettings, position;
|
||||||
|
|
||||||
|
$inputSettings = inputSettings();
|
||||||
|
uls.$menu.find( '#settings-block' ).append( $inputSettings );
|
||||||
|
position = uls.position();
|
||||||
|
|
||||||
|
$inputSettings.languagesettings( {
|
||||||
|
defaultModule: 'input',
|
||||||
|
onClose: function () {
|
||||||
|
uls.show();
|
||||||
|
},
|
||||||
|
top: position.top,
|
||||||
|
left: position.left
|
||||||
|
} );
|
||||||
|
|
||||||
|
$inputSettings.on( 'click', function () {
|
||||||
|
uls.hide();
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The tooltip to be shown when language changed using ULS
|
||||||
|
* It also allows to undo the language selection.
|
||||||
|
*/
|
||||||
|
function showULSTooltip() {
|
||||||
|
var $ulsTrigger = $( '.uls-trigger' ),
|
||||||
|
ulsPosition = mw.config.get( 'wgULSPosition' ),
|
||||||
|
currentLang = mw.config.get( 'wgUserLanguage' ),
|
||||||
|
previousLang,
|
||||||
|
rtlPage = $( 'body' ).hasClass( 'rtl' ),
|
||||||
tipsyGravity = {
|
tipsyGravity = {
|
||||||
personal: 'n',
|
personal: 'n',
|
||||||
interlanguage: rtlPage ? 'e' : 'w'
|
interlanguage: rtlPage ? 'e' : 'w'
|
||||||
},
|
},
|
||||||
currentLang = mw.config.get( 'wgUserLanguage' );
|
previousLanguages = mw.uls.getPreviousLanguages() || [];
|
||||||
|
|
||||||
anonMode = ( mw.user.isAnon() &&
|
|
||||||
!mw.config.get( 'wgULSAnonCanChangeLanguage' ) );
|
|
||||||
|
|
||||||
if ( ulsPosition === 'interlanguage' ) {
|
|
||||||
// The interlanguage links section
|
|
||||||
$pLang = $( '#p-lang' );
|
|
||||||
// Add an element near the interlanguage links header
|
|
||||||
$ulsSettingsTrigger = $( '<span>' )
|
|
||||||
.addClass( 'uls-settings-trigger' )
|
|
||||||
.attr( 'title', $.i18n( 'ext-uls-language-settings-title' ) );
|
|
||||||
$pLang.prepend( $ulsSettingsTrigger );
|
|
||||||
|
|
||||||
// Remove the dummy link that was added to make sure that the section appears
|
|
||||||
$pLang.find( '.uls-p-lang-dummy' ).remove();
|
|
||||||
|
|
||||||
if ( !$pLang.find( 'div ul' ).children().length ) {
|
|
||||||
// Replace the title of the interlanguage links
|
|
||||||
// area if there are no interlanguage links
|
|
||||||
$pLang.find( 'h3' )
|
|
||||||
.text( mw.msg( 'uls-plang-title-languages' ) );
|
|
||||||
|
|
||||||
// Remove the empty box that appears in the monobook skin
|
|
||||||
if ( mw.config.get( 'skin' ) === 'monobook' ) {
|
|
||||||
$pLang.find( 'div.pBody' ).remove();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$ulsTrigger = $( '.uls-trigger' );
|
|
||||||
previousLanguages = mw.uls.getPreviousLanguages() || [];
|
|
||||||
previousLang = previousLanguages.slice( -1 )[0];
|
previousLang = previousLanguages.slice( -1 )[0];
|
||||||
|
|
||||||
function displaySettings() {
|
|
||||||
var $displaySettingsTitle, displaySettingsText, $displaySettings;
|
|
||||||
|
|
||||||
displaySettingsText = $.i18n( 'ext-uls-display-settings-desc' );
|
|
||||||
$displaySettingsTitle = $( '<div data-i18n="ext-uls-display-settings-title">' )
|
|
||||||
.addClass( 'settings-title' )
|
|
||||||
.attr( 'title', displaySettingsText );
|
|
||||||
$displaySettings = $( '<div>' )
|
|
||||||
.addClass( 'display-settings-block' )
|
|
||||||
.prop( 'id', 'display-settings-block' )
|
|
||||||
.append( $displaySettingsTitle );
|
|
||||||
|
|
||||||
return $displaySettings;
|
|
||||||
}
|
|
||||||
|
|
||||||
function inputSettings() {
|
|
||||||
var $inputSettingsTitle, inputSettingsText, $inputSettings;
|
|
||||||
|
|
||||||
inputSettingsText = $.i18n( 'ext-uls-input-settings-desc' );
|
|
||||||
$inputSettingsTitle = $( '<div data-i18n="ext-uls-input-settings-title">' )
|
|
||||||
.addClass( 'settings-title' )
|
|
||||||
.attr( 'title', inputSettingsText );
|
|
||||||
$inputSettings = $( '<div>' )
|
|
||||||
.addClass( 'input-settings-block' )
|
|
||||||
.prop( 'id', 'input-settings-block' )
|
|
||||||
.append( $inputSettingsTitle );
|
|
||||||
|
|
||||||
return $inputSettings;
|
|
||||||
}
|
|
||||||
|
|
||||||
function addDisplaySettings( uls ) {
|
|
||||||
var $displaySettings = displaySettings(),
|
|
||||||
displaySettingsOptions = {
|
|
||||||
defaultModule: 'display'
|
|
||||||
};
|
|
||||||
|
|
||||||
// If the ULS trigger is shown in the top personal menu,
|
|
||||||
// closing the display settings must show the main ULS
|
|
||||||
// languages list, unless we are in anon mode and thus
|
|
||||||
// cannot show the language list
|
|
||||||
if ( ulsPosition === 'personal' && !anonMode ) {
|
|
||||||
displaySettingsOptions.onClose = function () {
|
|
||||||
uls.show();
|
|
||||||
};
|
|
||||||
}
|
|
||||||
$.extend( displaySettingsOptions, uls.position() );
|
|
||||||
|
|
||||||
uls.$menu.find( '#settings-block' ).append( $displaySettings );
|
|
||||||
$displaySettings.languagesettings( displaySettingsOptions );
|
|
||||||
$displaySettings.on( 'click', function () {
|
|
||||||
uls.hide();
|
|
||||||
} );
|
|
||||||
}
|
|
||||||
|
|
||||||
function addInputSettings( uls ) {
|
|
||||||
var $inputSettings, position;
|
|
||||||
|
|
||||||
$inputSettings = inputSettings();
|
|
||||||
uls.$menu.find( '#settings-block' ).append( $inputSettings );
|
|
||||||
position = uls.position();
|
|
||||||
|
|
||||||
$inputSettings.languagesettings( {
|
|
||||||
defaultModule: 'input',
|
|
||||||
onClose: function () {
|
|
||||||
uls.show();
|
|
||||||
},
|
|
||||||
top: position.top,
|
|
||||||
left: position.left
|
|
||||||
} );
|
|
||||||
|
|
||||||
$inputSettings.on( 'click', function () {
|
|
||||||
uls.hide();
|
|
||||||
} );
|
|
||||||
}
|
|
||||||
|
|
||||||
// ULS options that are common to all modes of showing
|
|
||||||
ulsOptions = {
|
|
||||||
onReady: function () {
|
|
||||||
if ( $.fn.languagesettings ) {
|
|
||||||
addDisplaySettings( this );
|
|
||||||
addInputSettings( this );
|
|
||||||
}
|
|
||||||
},
|
|
||||||
onSelect: function ( language ) {
|
|
||||||
mw.uls.changeLanguage( language );
|
|
||||||
},
|
|
||||||
languages: mw.config.get( 'wgULSLanguages' ),
|
|
||||||
searchAPI: mw.util.wikiScript( 'api' ) + '?action=languagesearch',
|
|
||||||
quickList: function () {
|
|
||||||
return mw.uls.getFrequentLanguageList();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
if ( ulsPosition === 'interlanguage' ) {
|
|
||||||
$ulsSettingsTrigger.attr( 'title', $.i18n( 'ext-uls-select-language-settings-icon-tooltip' ) );
|
|
||||||
$ulsSettingsTrigger.languagesettings( {
|
|
||||||
onVisible: function () {
|
|
||||||
var ulsTriggerOffset = $ulsSettingsTrigger.offset();
|
|
||||||
this.left = rtlPage ? ulsTriggerOffset.left - 30
|
|
||||||
:ulsTriggerOffset.left + 30;
|
|
||||||
this.top = ulsTriggerOffset.top - 50;
|
|
||||||
this.position();
|
|
||||||
}
|
|
||||||
} );
|
|
||||||
$( '.uls-menu' ).each( function () {
|
|
||||||
$( this ).prepend(
|
|
||||||
$( '<span>' ).addClass( 'caret-before' ),
|
|
||||||
$( '<span>' ).addClass( 'caret-after' )
|
|
||||||
);
|
|
||||||
} );
|
|
||||||
} else if ( anonMode ) {
|
|
||||||
$ulsTrigger.languagesettings();
|
|
||||||
} else {
|
|
||||||
$ulsTrigger.uls( ulsOptions );
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( previousLang === currentLang ) {
|
if ( previousLang === currentLang ) {
|
||||||
// Do not show tooltip nor update language list
|
// Do not show tooltip nor update language list
|
||||||
return true;
|
return true;
|
||||||
@@ -265,5 +212,83 @@
|
|||||||
$ulsTrigger.on( 'click', function () {
|
$ulsTrigger.on( 'click', function () {
|
||||||
hideTipsy();
|
hideTipsy();
|
||||||
} );
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
|
$( document ).ready( function () {
|
||||||
|
var $ulsTrigger = $( '.uls-trigger' ),
|
||||||
|
$ulsSettingsTrigger,
|
||||||
|
$pLang,
|
||||||
|
ulsOptions,
|
||||||
|
rtlPage = $( 'body' ).hasClass( 'rtl' ),
|
||||||
|
anonMode = ( mw.user.isAnon() &&
|
||||||
|
!mw.config.get( 'wgULSAnonCanChangeLanguage' ) ),
|
||||||
|
ulsPosition = mw.config.get( 'wgULSPosition' );
|
||||||
|
|
||||||
|
if ( ulsPosition === 'interlanguage' ) {
|
||||||
|
// The interlanguage links section
|
||||||
|
$pLang = $( '#p-lang' );
|
||||||
|
// Add an element near the interlanguage links header
|
||||||
|
$ulsSettingsTrigger = $( '<span>' )
|
||||||
|
.addClass( 'uls-settings-trigger' )
|
||||||
|
.attr( 'title', $.i18n( 'ext-uls-language-settings-title' ) );
|
||||||
|
$pLang.prepend( $ulsSettingsTrigger );
|
||||||
|
|
||||||
|
// Remove the dummy link that was added to make sure that the section appears
|
||||||
|
$pLang.find( '.uls-p-lang-dummy' ).remove();
|
||||||
|
|
||||||
|
if ( !$pLang.find( 'div ul' ).children().length ) {
|
||||||
|
// Replace the title of the interlanguage links
|
||||||
|
// area if there are no interlanguage links
|
||||||
|
$pLang.find( 'h3' )
|
||||||
|
.text( mw.msg( 'uls-plang-title-languages' ) );
|
||||||
|
|
||||||
|
// Remove the empty box that appears in the monobook skin
|
||||||
|
if ( mw.config.get( 'skin' ) === 'monobook' ) {
|
||||||
|
$pLang.find( 'div.pBody' ).remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ULS options that are common to all modes of showing
|
||||||
|
ulsOptions = {
|
||||||
|
onReady: function () {
|
||||||
|
if ( $.fn.languagesettings ) {
|
||||||
|
addDisplaySettings( this );
|
||||||
|
addInputSettings( this );
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onSelect: function ( language ) {
|
||||||
|
mw.uls.changeLanguage( language );
|
||||||
|
},
|
||||||
|
languages: mw.config.get( 'wgULSLanguages' ),
|
||||||
|
searchAPI: mw.util.wikiScript( 'api' ) + '?action=languagesearch',
|
||||||
|
quickList: function () {
|
||||||
|
return mw.uls.getFrequentLanguageList();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
if ( ulsPosition === 'interlanguage' ) {
|
||||||
|
$ulsSettingsTrigger.attr( 'title', $.i18n( 'ext-uls-select-language-settings-icon-tooltip' ) );
|
||||||
|
$ulsSettingsTrigger.languagesettings( {
|
||||||
|
onVisible: function () {
|
||||||
|
var ulsTriggerOffset = $ulsSettingsTrigger.offset();
|
||||||
|
this.left = rtlPage ? ulsTriggerOffset.left - 30
|
||||||
|
:ulsTriggerOffset.left + 30;
|
||||||
|
this.top = ulsTriggerOffset.top - 50;
|
||||||
|
this.position();
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
$( '.uls-menu' ).each( function () {
|
||||||
|
$( this ).prepend(
|
||||||
|
$( '<span>' ).addClass( 'caret-before' ),
|
||||||
|
$( '<span>' ).addClass( 'caret-after' )
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
} else if ( anonMode ) {
|
||||||
|
$ulsTrigger.languagesettings();
|
||||||
|
} else {
|
||||||
|
$ulsTrigger.uls( ulsOptions );
|
||||||
|
}
|
||||||
|
|
||||||
|
showULSTooltip();
|
||||||
} );
|
} );
|
||||||
}( jQuery, mediaWiki, window, document ) );
|
}( jQuery, mediaWiki ) );
|
||||||
|
|||||||
Reference in New Issue
Block a user