Scroll the ULS panel into view automatically

Change-Id: I9c46fcaaa13de62147ca0a8151e4e8706a6b09ee
This commit is contained in:
Amir E. Aharoni
2013-04-24 00:07:57 +03:00
parent 74941191fc
commit 0d5a4780e2

View File

@@ -22,6 +22,7 @@
$( document ).ready( function () { $( document ).ready( function () {
var $ulsTrigger, $pLang, var $ulsTrigger, $pLang,
uls, ulsOptions,
previousLanguages, previousLang, previousLanguages, previousLang,
ulsPosition = mw.config.get( 'wgULSPosition' ), ulsPosition = mw.config.get( 'wgULSPosition' ),
tipsyGravity = { tipsyGravity = {
@@ -118,7 +119,7 @@
} ); } );
} }
$ulsTrigger.uls( { ulsOptions = {
onReady: function () { onReady: function () {
if ( $.fn.languagesettings ) { if ( $.fn.languagesettings ) {
addDisplaySettings( this ); addDisplaySettings( this );
@@ -133,12 +134,43 @@
quickList: function () { quickList: function () {
return mw.uls.getFrequentLanguageList(); return mw.uls.getFrequentLanguageList();
} }
} ); };
if ( ulsPosition === 'interlanguage' ) { if ( ulsPosition === 'interlanguage' ) {
$ulsTrigger.attr( 'title', $.i18n( 'ext-uls-select-language-settings-icon-tooltip' ) ); $ulsTrigger.attr( 'title', $.i18n( 'ext-uls-select-language-settings-icon-tooltip' ) );
// This is a hook that runs in the ULS scope
ulsOptions.onVisible = function () {
var scrollPosition,
padding = 10,
$window = $( window ),
windowHeight = $window.height(),
windowScrollTop = $window.scrollTop(),
windowBottom = windowScrollTop + windowHeight,
ulsHeight = this.$menu.height(),
ulsTop = this.$menu.offset().top,
ulsBottom = ulsTop + ulsHeight;
if ( ( ulsTop < windowScrollTop ) || ( ulsBottom > windowBottom ) ) {
if ( ulsHeight > windowHeight ) {
// Scroll to show as much of the upper
// side of ULS as possible
scrollPosition = ulsTop - padding;
} else {
scrollPosition = ulsBottom - windowHeight + padding;
}
$( 'html, body' ).stop().animate( {
scrollTop: scrollPosition
}, 500 );
}
}
} }
$ulsTrigger.uls( ulsOptions );
uls = $ulsTrigger.data( 'uls' );
if ( !previousLang ) { if ( !previousLang ) {
previousLanguages.push( currentLang ); previousLanguages.push( currentLang );
mw.uls.setPreviousLanguages( previousLanguages ); mw.uls.setPreviousLanguages( previousLanguages );
@@ -212,7 +244,7 @@
// manually show the tooltip // manually show the tooltip
$ulsTrigger.on( 'mouseover', function () { $ulsTrigger.on( 'mouseover', function () {
// show only if the ULS panel is not shown // show only if the ULS panel is not shown
if ( !$ulsTrigger.data( 'uls' ).shown ) { if ( !uls.shown ) {
showTipsy( 3000 ); showTipsy( 3000 );
} }
} ); } );