Santhosh has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/75582


Change subject: Lazy initialization of language settings and ULS from interface 
triggers
......................................................................

Lazy initialization of language settings and ULS from interface triggers

1. For interlanguage position, initialize language settings on first
click on cog
2. For personal toolbar position, initialie ULS on first click of
ULS trigger

Change-Id: Icda498f676d1d3ddaefad75fd9212150f6966666
---
M resources/js/ext.uls.interface.js
1 file changed, 69 insertions(+), 56 deletions(-)


  git pull 
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/UniversalLanguageSelector 
refs/changes/82/75582/1

diff --git a/resources/js/ext.uls.interface.js 
b/resources/js/ext.uls.interface.js
index e1eba25..231b1df 100644
--- a/resources/js/ext.uls.interface.js
+++ b/resources/js/ext.uls.interface.js
@@ -263,10 +263,8 @@
 
        $( document ).ready( function () {
                mw.uls.init( function () {
-                       var $ulsSettingsTrigger,
-                               $triggers,
+                       var $triggers,
                                $pLang,
-                               ulsOptions,
                                $ulsTrigger = $( '.uls-trigger' ),
                                rtlPage = $( 'body' ).hasClass( 'rtl' ),
                                anonMode = ( mw.user.isAnon() &&
@@ -274,16 +272,17 @@
                                ulsPosition = mw.config.get( 'wgULSPosition' );
 
                        if ( ulsPosition === 'interlanguage' ) {
+                               // TODO: Refactor this block
                                // The interlanguage links section
                                $pLang = $( '#p-lang' );
                                // Add an element near the interlanguage links 
header
-                               $ulsSettingsTrigger = $( '<span>' )
+                               $ulsTrigger = $( '<span>' )
                                        .addClass( 'uls-settings-trigger' )
                                        .attr( 'title', $.i18n( 
'ext-uls-language-settings-title' ) );
                                // Append ULS cog to languages section, but 
make sure it is visible.
-                               $pLang.show().prepend( $ulsSettingsTrigger );
+                               $pLang.show().prepend( $ulsTrigger );
                                // Take care of any other elements with this 
class.
-                               $ulsSettingsTrigger = $( 
'.uls-settings-trigger' );
+                               $ulsTrigger = $( '.uls-settings-trigger' );
                                // Remove the dummy link, which was added to 
make sure that the section appears
                                $pLang.find( '.uls-p-lang-dummy' ).remove();
 
@@ -298,68 +297,82 @@
                                                $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( {
+                               $ulsTrigger.attr( {
                                        title: $.i18n( 
'ext-uls-select-language-settings-icon-tooltip' )
                                } );
+                               $ulsTrigger.on( 'click', function ( e ) {
+                                       var languagesettings = 
$ulsTrigger.data( 'languagesettings' ),
+                                               langaugeSettingsOptions;
 
-                               $ulsSettingsTrigger.languagesettings( {
-                                       defaultModule: 'display',
-                                       onVisible: function () {
-                                               var topRowHeight, caretHeight, 
caretWidth,
-                                                       $caretBefore = $( 
'<span>' ).addClass( 'caret-before' ),
-                                                       $caretAfter = $( 
'<span>' ).addClass( 'caret-after' ),
-                                                       ulsTriggerWidth = 
this.$element.width(),
-                                                       ulsTriggerOffset = 
this.$element.offset();
+                                       if ( !languagesettings ) {
+                                               langaugeSettingsOptions = {
+                                                       defaultModule: 
'display',
+                                                       onVisible: function () {
+                                                               var 
topRowHeight, caretHeight, caretWidth,
+                                                                       
$caretBefore = $( '<span>' ).addClass( 'caret-before' ),
+                                                                       
$caretAfter = $( '<span>' ).addClass( 'caret-after' ),
+                                                                       
ulsTriggerWidth = this.$element.width(),
+                                                                       
ulsTriggerOffset = this.$element.offset();
 
-                                               // Add the callout caret 
triangle
-                                               // pointing to the trigger icon
-                                               this.$window.addClass( 
'callout' );
-                                               this.$window.prepend( 
$caretBefore, $caretAfter );
+                                                               // Add the 
callout caret triangle
+                                                               // pointing to 
the trigger icon
+                                                               
this.$window.addClass( 'callout' );
+                                                               
this.$window.prepend( $caretBefore, $caretAfter );
 
-                                               // Calculate the positioning of 
the panel
-                                               // according to the position of 
the trigger icon
-                                               if ( rtlPage ) {
-                                                       caretWidth = parseInt( 
$caretBefore.css( 'border-left-width' ), 10 );
-                                                       this.left = 
ulsTriggerOffset.left - this.$window.width() - caretWidth;
-                                               } else {
-                                                       caretWidth = parseInt( 
$caretBefore.css( 'border-right-width' ), 10 );
-                                                       this.left = 
ulsTriggerOffset.left + ulsTriggerWidth + caretWidth;
-                                               }
+                                                               // Calculate 
the positioning of the panel
+                                                               // according to 
the position of the trigger icon
+                                                               if ( rtlPage ) {
+                                                                       
caretWidth = parseInt( $caretBefore.css( 'border-left-width' ), 10 );
+                                                                       
this.left = ulsTriggerOffset.left - this.$window.width() - caretWidth;
+                                                               } else {
+                                                                       
caretWidth = parseInt( $caretBefore.css( 'border-right-width' ), 10 );
+                                                                       
this.left = ulsTriggerOffset.left + ulsTriggerWidth + caretWidth;
+                                                               }
 
-                                               topRowHeight = 
this.$window.find( '.row' ).height();
-                                               caretHeight = parseInt( 
$caretBefore.css( 'top' ), 10 );
-                                               this.top = ulsTriggerOffset.top 
- topRowHeight - caretHeight / 2;
+                                                               topRowHeight = 
this.$window.find( '.row' ).height();
+                                                               caretHeight = 
parseInt( $caretBefore.css( 'top' ), 10 );
+                                                               this.top = 
ulsTriggerOffset.top - topRowHeight - caretHeight / 2;
 
-                                               this.position();
+                                                               this.position();
+                                                       }
+                                               };
+                                               $ulsTrigger.languagesettings( 
langaugeSettingsOptions ).click();
+                                               e.stopPropagation();
                                        }
                                } );
                        } else if ( anonMode ) {
-                               $ulsTrigger.languagesettings();
-                       } else {
-                               $ulsTrigger.uls( ulsOptions );
-                       }
+                               $ulsTrigger.on( 'click', function ( e ) {
+                                       var languagesettings = 
$ulsTrigger.data( 'languagesettings' );
 
+                                       if ( !languagesettings ) {
+                                               
$ulsTrigger.languagesettings().click();
+                                               e.stopPropagation();
+                                       }
+                               } );
+                       } else {
+                               $ulsTrigger.on( 'click', function ( e ) {
+                                       var uls = $ulsTrigger.data( 'uls' ),
+                                               ulsOptions;
+
+                                       if ( !uls ) {
+                                               // 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 );
+                                                       }
+                                               };
+                                               $ulsTrigger.uls( ulsOptions 
).click();
+                                               e.stopPropagation();
+                                       }
+                               } );
+                       }
                        // At this point we don't care which kind of trigger it 
is
                        $triggers = $( '.uls-settings-trigger, .uls-trigger' );
                        addAccessibilityFeatures( $triggers );

-- 
To view, visit https://gerrit.wikimedia.org/r/75582
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Icda498f676d1d3ddaefad75fd9212150f6966666
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/UniversalLanguageSelector
Gerrit-Branch: master
Gerrit-Owner: Santhosh <santhosh.thottin...@gmail.com>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to