diff --git a/resources/js/ext.uls.displaysettings.js b/resources/js/ext.uls.displaysettings.js index 19889d8e..5b29f881 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 592f8fb6..89ee7fd4 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 = $( '