MediaWiki:Gadget-ScrollingSidebar.js
Revision as of 09:27, 3 June 2022 by Scientific Guy (talk | contribs) (Created page with "→* * Scroll the sidebar with the rest of the content window * From AIOWiki.com: authors Reddo (Mark Redekop) and Eugene (Matthew Bird) *: ( function( $ ) { var $body, $window, $sidebar, adminbarOffset, top = false, bottom = false, windowWidth, windowHeight, lastWindowPos = 0, topOffset = 0, bodyHeight, sidebarHeight, resizeTimer, secondary, button; function onResizeARIA() { /*if ( 955 > $window.width() ) { button.attr( 'aria-expanded', 'false...")
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Press Ctrl-F5.
/** * Scroll the sidebar with the rest of the content window * From AIOWiki.com: authors Reddo (Mark Redekop) and Eugene (Matthew Bird) * */ ( function( $ ) { var $body, $window, $sidebar, adminbarOffset, top = false, bottom = false, windowWidth, windowHeight, lastWindowPos = 0, topOffset = 0, bodyHeight, sidebarHeight, resizeTimer, secondary, button; function onResizeARIA() { /*if ( 955 > $window.width() ) { button.attr( 'aria-expanded', 'false' ); secondary.attr( 'aria-expanded', 'false' ); button.attr( 'aria-controls', 'secondary' ); } else { button.removeAttr( 'aria-expanded' ); secondary.removeAttr( 'aria-expanded' ); button.removeAttr( 'aria-controls' ); }*/ } // Sidebar scrolling. function resize() { windowWidth = $window.width(); if ( 955 > windowWidth ) { top = bottom = false; $sidebar.removeAttr( 'style' ); } } function scroll() { var windowPos = $window.scrollTop(); if ( 955 > windowWidth ) { return; } sidebarHeight = $sidebar.height() + 20; windowHeight = $window.height(); bodyHeight = $body.height(); if ( sidebarHeight + adminbarOffset > windowHeight ) { if ( windowPos > lastWindowPos ) { if ( top ) { top = false; topOffset = ( $sidebar.offset().top > 0 ) ? $sidebar.offset().top - adminbarOffset : 0; $sidebar.attr( 'style', 'top: ' + topOffset + 'px;' ); } else if ( ! bottom && windowPos + windowHeight > sidebarHeight + $sidebar.offset().top && sidebarHeight + adminbarOffset < bodyHeight ) { bottom = true; $sidebar.attr( 'style', 'position: fixed; bottom: 0; top: unset;' ); } } else if ( windowPos < lastWindowPos ) { if ( bottom ) { bottom = false; topOffset = ( $sidebar.offset().top > 0 ) ? $sidebar.offset().top - adminbarOffset : 0; $sidebar.attr( 'style', 'top: ' + topOffset + 'px;' ); } else if ( ! top && windowPos + adminbarOffset < $sidebar.offset().top ) { top = true; $sidebar.attr( 'style', 'position: fixed;' ); } } else { top = bottom = false; topOffset = ( $sidebar.offset().top > 0 ) ? $sidebar.offset().top - adminbarOffset : 0; $sidebar.attr( 'style', 'top: ' + topOffset + 'px;' ); } } else if ( ! top ) { top = true; $sidebar.attr( 'style', 'position: fixed;' ); } lastWindowPos = windowPos; } function resizeAndScroll() { resize(); scroll(); } $( document ).ready( function() { $body = $( document.body ); $window = $( window ); $sidebar = $( '#mw-panel' ).first(); adminbarOffset = $body.is( '.admin-bar' ) ? $( '#wpadminbar' ).height() : 0; $window .on( 'scroll', scroll ) /* .on( 'load', onResizeARIA ) */ .on( 'resize', function() { clearTimeout( resizeTimer ); resizeTimer = setTimeout( resizeAndScroll, 500 ); onResizeARIA(); } ); $sidebar.on( 'click keydown', 'button', resizeAndScroll ); resizeAndScroll(); for ( var i = 1; i < 6; i++ ) { setTimeout( resizeAndScroll, 100 * i ); } function injectStyles(rule) { var div = $("<div></div>", { html: '­<style>' + rule + '</style>' }).appendTo("body"); } injectStyles('html { height: unset; } #mw-panel { padding-bottom: 20px; }'); } ); } )( jQuery );