Amire80 has uploaded a new change for review.

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


Change subject: Scroll language settings on all changes
......................................................................

Scroll language settings on all changes

Change-Id: I550f309d713cb6aac6b18b326379b879dc0b9589
---
M resources/js/ext.uls.displaysettings.js
M resources/js/ext.uls.languagesettings.js
2 files changed, 70 insertions(+), 5 deletions(-)


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

diff --git a/resources/js/ext.uls.displaysettings.js 
b/resources/js/ext.uls.displaysettings.js
index 19889d8..5b29f88 100644
--- a/resources/js/ext.uls.displaysettings.js
+++ b/resources/js/ext.uls.displaysettings.js
@@ -532,7 +532,14 @@
                        } );
 
                        $tabButtons.on( 'click', function () {
-                               var $button = $( this );
+                               var scrollPosition,
+                                       panelHeight, panelTop, panelBottom,
+                                       padding,
+                                       $window,
+                                       windowHeight,
+                                       windowScrollTop,
+                                       windowBottom,
+                                       $button = $( this );
 
                                if ( $button.hasClass( 'down' ) ) {
                                        return;
@@ -550,6 +557,33 @@
 
                                $tabButtons.filter( '.down' ).removeClass( 
'down');
                                $button.addClass( 'down' );
+
+                               padding = 10;
+                               $window = $( window );
+                               windowHeight = $window.height();
+                               windowScrollTop = $window.scrollTop();
+                               windowBottom = windowScrollTop + windowHeight;
+
+                               panelHeight = 
displaySettings.$parent.$window.height();
+                               panelTop = 
displaySettings.$parent.$window.offset().top;
+                               panelBottom = panelTop + panelHeight;
+
+                               // If the ULS panel is out of the viewport,
+                               // scroll the window to show it
+                               if ( ( panelTop < windowScrollTop ) || ( 
panelBottom > windowBottom ) ) {
+                                       if ( panelHeight > windowHeight ) {
+                                               // Scroll to show as much of 
the upper
+                                               // part of ULS as possible
+                                               scrollPosition = panelTop - 
padding;
+                                       } else {
+                                               // Scroll just enough to show 
the ULS panel
+                                               scrollPosition = panelBottom - 
windowHeight + padding;
+                                       }
+
+                                       $( 'html, body' ).stop().animate( {
+                                               scrollTop: scrollPosition
+                                       }, 500 );
+                               }
                        } );
                },
 
diff --git a/resources/js/ext.uls.languagesettings.js 
b/resources/js/ext.uls.languagesettings.js
index 592f8fb..89ee7fd 100644
--- a/resources/js/ext.uls.languagesettings.js
+++ b/resources/js/ext.uls.languagesettings.js
@@ -96,10 +96,11 @@
                 * @param active boolean Make this module active and show by 
default
                 */
                renderModule: function ( moduleName, active ) {
-                       var $settingsMenuItems, module, $settingsText, 
$settingsTitle, $settingsLink;
+                       var $settingsMenuItems, module, $settingsText, 
$settingsTitle, $settingsLink,
+                               languageSettings = this;
 
-                       $settingsMenuItems = this.$window.find( 
'.settings-menu-items' );
-                       module = new $.fn.languagesettings.modules[moduleName]( 
this );
+                       $settingsMenuItems = languageSettings.$window.find( 
'.settings-menu-items' );
+                       module = new $.fn.languagesettings.modules[moduleName]( 
languageSettings );
                        $settingsTitle = $( '<div>' )
                                .addClass( 'settings-title' )
                                .text( module.name );
@@ -116,8 +117,38 @@
                        $settingsMenuItems.append( $settingsLink );
 
                        $settingsLink.on( 'click', function () {
-                               var module = $( this ).data( 'module' );
+                               var scrollPosition,
+                                       panelHeight, panelTop, panelBottom,
+                                       padding = 10,
+                                       $window = $( window ),
+                                       windowHeight = $window.height(),
+                                       windowScrollTop = $window.scrollTop(),
+                                       windowBottom = windowScrollTop + 
windowHeight,
+                                       module = $( this ).data( 'module' );
+
                                module.render();
+
+                               panelHeight = languageSettings.$window.height();
+                               panelTop = 
languageSettings.$window.offset().top;
+                               panelBottom = panelTop + panelHeight;
+
+                               // If the ULS panel is out of the viewport,
+                               // scroll the window to show it
+                               if ( ( panelTop < windowScrollTop ) || ( 
panelBottom > windowBottom ) ) {
+                                       if ( panelHeight > windowHeight ) {
+                                               // Scroll to show as much of 
the upper
+                                               // part of ULS as possible
+                                               scrollPosition = panelTop - 
padding;
+                                       } else {
+                                               // Scroll just enough to show 
the ULS panel
+                                               scrollPosition = panelBottom - 
windowHeight + padding;
+                                       }
+
+                                       $( 'html, body' ).stop().animate( {
+                                               scrollTop: scrollPosition
+                                       }, 500 );
+                               }
+
                                $settingsMenuItems.find( '.menu-section' 
).removeClass( 'active' );
                                $( this ).addClass( 'active' );
                        } );

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I550f309d713cb6aac6b18b326379b879dc0b9589
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/UniversalLanguageSelector
Gerrit-Branch: master
Gerrit-Owner: Amire80 <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to