diff --git a/UniversalLanguageSelector.php b/UniversalLanguageSelector.php index 39ceb817..7a7912f4 100644 --- a/UniversalLanguageSelector.php +++ b/UniversalLanguageSelector.php @@ -56,15 +56,6 @@ $wgResourceModules['ext.uls.lcd'] = array( 'localBasePath' => $dir, 'remoteExtPath' => 'UniversalLanguageSelector', 'styles' => 'resources/css/ext.uls.lcd.css', - 'dependencies' => array( - 'jquery.viewport', - ), -); - -$wgResourceModules['jquery.viewport'] = array( - 'scripts' => 'resources/jquery.viewport.js', - 'localBasePath' => $dir, - 'remoteExtPath' => 'UniversalLanguageSelector', ); $wgResourceModules['ext.uls.core'] = array( diff --git a/examples/index.html b/examples/index.html index da3b6ee6..a867fce3 100644 --- a/examples/index.html +++ b/examples/index.html @@ -19,7 +19,6 @@ - diff --git a/resources/ext.uls.lcd.js b/resources/ext.uls.lcd.js index 788cb707..ba7596b2 100644 --- a/resources/ext.uls.lcd.js +++ b/resources/ext.uls.lcd.js @@ -98,12 +98,24 @@ }, listen: function() { - this.$element.scroll( function() { - var inviewRegion = $( 'div.uls-lcd-region-section:in-viewport:first' ).attr( 'id' ); + var that = this; + // The region section need to be in sync with the map filter. + that.$element.scroll( function () { + var inviewRegion = $( 'div.uls-lcd-region-section:first' ).attr( 'id' ); + var listtop = that.$element.position().top; + $( 'div.uls-lcd-region-section' ).each( function () { + var offset = $( this ).position().top - listtop; + if ( offset < 0 ) { + inviewRegion = $( this ).attr( 'id' ); + } else { + return false; + } + } ); + var inview = $.uls.data.regiongroups[inviewRegion]; $( 'div.uls-region' ).removeClass( 'active' ); $( 'div#uls-region-' + inview ).addClass( 'active' ); - }); + } ); } }; diff --git a/resources/jquery.viewport.js b/resources/jquery.viewport.js deleted file mode 100644 index 7826000f..00000000 --- a/resources/jquery.viewport.js +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Viewport - jQuery selectors for finding elements in viewport - * - * Copyright (c) 2008-2009 Mika Tuupola - * - * Licensed under the MIT license: - * http://www.opensource.org/licenses/mit-license.php - * - * Project home: - * http://www.appelsiini.net/projects/viewport - * - */ -(function($) { - - $.belowthefold = function(element, settings) { - var fold = $(window).height() + $(window).scrollTop(); - return fold <= $(element).offset().top - settings.threshold; - }; - - $.abovethetop = function(element, settings) { - var top = $(window).scrollTop(); - return top >= $(element).offset().top + $(element).height() - settings.threshold; - }; - - $.rightofscreen = function(element, settings) { - var fold = $(window).width() + $(window).scrollLeft(); - return fold <= $(element).offset().left - settings.threshold; - }; - - $.leftofscreen = function(element, settings) { - var left = $(window).scrollLeft(); - return left >= $(element).offset().left + $(element).width() - settings.threshold; - }; - - $.inviewport = function(element, settings) { - return !$.rightofscreen(element, settings) && !$.leftofscreen(element, settings) && !$.belowthefold(element, settings) && !$.abovethetop(element, settings); - }; - - $.extend($.expr[':'], { - "below-the-fold": function(a, i, m) { - return $.belowthefold(a, {threshold : 0}); - }, - "above-the-top": function(a, i, m) { - return $.abovethetop(a, {threshold : 0}); - }, - "left-of-screen": function(a, i, m) { - return $.leftofscreen(a, {threshold : 0}); - }, - "right-of-screen": function(a, i, m) { - return $.rightofscreen(a, {threshold : 0}); - }, - "in-viewport": function(a, i, m) { - return $.inviewport(a, {threshold : 0}); - } - }); - - -})(jQuery);