' )
- .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 = $( '
' )
- .addClass( 'settings-title' )
- .attr( 'title', inputSettingsText );
- $inputSettings = $( '
' )
- .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(
- $( '' ).addClass( 'caret-before' ),
- $( '' ).addClass( 'caret-after' )
- );
- } );
- } else if ( anonMode ) {
- $ulsTrigger.languagesettings();
- } else {
- $ulsTrigger.uls( ulsOptions );
- }
-
if ( previousLang === currentLang ) {
// Do not show tooltip nor update language list
return true;
@@ -265,5 +212,83 @@
$ulsTrigger.on( 'click', function () {
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 = $( '' )
+ .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(
+ $( '' ).addClass( 'caret-before' ),
+ $( '' ).addClass( 'caret-after' )
+ );
+ } );
+ } else if ( anonMode ) {
+ $ulsTrigger.languagesettings();
+ } else {
+ $ulsTrigger.uls( ulsOptions );
+ }
+
+ showULSTooltip();
} );
-}( jQuery, mediaWiki, window, document ) );
+}( jQuery, mediaWiki ) );