WordPress.org

Make WordPress Core

Ticket #23875: 23875.1.diff

File 23875.1.diff, 3.9 KB (added by lancewillett, 5 years ago)
  • wp-content/themes/twentythirteen/js/functions.js

     
    1111            _window       = $( window ),
    1212            navbarOffset  = -1,
    1313            toolbarOffset = body.is( '.admin-bar' ) ? 28 : 0,
     14            debounce,
     15            adjustFooter,
     16            adjustAnchor;
    1417
    15             twentyThirteen = {
    16                 /**
    17                  * Adds a top margin to the footer if the sidebar widget area is
    18                  * higher than the rest of the page, to help the footer always
    19                  * visually clear the sidebar.
    20                  */
    21                 adjustFooter : function() {
    22                         var sidebar   = $( '#secondary .widget-area' ),
    23                             secondary = ( 0 == sidebar.length ) ? -40 : sidebar.height(),
    24                             margin    = $( '#tertiary .widget-area' ).height() - $( '#content' ).height() - secondary;
     18        /**
     19         * Sets up a timeout function to throttle events.
     20         */
     21        debounce = function( fn, delay ) {
     22                var timeout;
     23                return function() {
     24                        var args = arguments;
    2525
    26                         if ( margin > 0 && _window.innerWidth() > 999 )
    27                                 $( '#colophon' ).css( 'margin-top', margin + 'px' );
    28                 },
     26                        clearTimeout( timeout );
     27                        timeout = setTimeout( function() {
     28                                timeout = null;
     29                                fn.apply( this, args );
     30                        }, delay );
     31                };
     32        };
    2933
    30                 /**
    31                  * Repositions the window on jump-to-anchor to account for navbar
    32                  * height.
    33                  */
    34                 adjustAnchor : function() {
    35                         if ( window.location.hash )
    36                                 window.scrollBy( 0, -49 );
    37                 }
     34        /**
     35         * Adds a top margin to the footer if the sidebar widget area is
     36         * higher than the rest of the page, to help the footer always
     37         * visually clear the sidebar.
     38         */
     39        adjustFooter = function() {
     40                var sidebar   = $( '#secondary .widget-area' ),
     41                    secondary = ( 0 == sidebar.length ) ? -40 : sidebar.height(),
     42                    margin    = $( '#tertiary .widget-area' ).height() - $( '#content' ).height() - secondary;
     43
     44                if ( margin > 0 && _window.innerWidth() > 999 )
     45                        $( '#colophon' ).css( 'margin-top', margin + 'px' );
    3846        };
    3947
     48        /**
     49         * Repositions the window on jump-to-anchor to account for navbar
     50         * height.
     51         */
     52        adjustAnchor = function() {
     53                if ( window.location.hash )
     54                        window.scrollBy( 0, -49 );
     55        };
     56
    4057        $( function() {
    41                 twentyThirteen.adjustAnchor();
     58                adjustAnchor();
    4259
    4360                if ( body.is( '.sidebar' ) )
    44                         twentyThirteen.adjustFooter();
     61                        adjustFooter();
    4562        } );
    46         _window.on( 'hashchange', twentyThirteen.adjustAnchor );
     63        _window.on( 'hashchange.twentythirteen', adjustAnchor );
    4764
    4865        /**
    4966         * Displays the fixed navbar based on screen position.
    5067         */
    51         _window.scroll( function() {
     68        _window.on( 'scroll.twentythirteen', debounce( function() {
    5269                var scrollOffset = ( typeof window.scrollY === 'undefined' ) ? document.documentElement.scrollTop : window.scrollY;
     70
    5371                if ( navbarOffset < 0 )
    5472                        navbarOffset = navbar.offset().top - toolbarOffset;
    5573
     
    5775                        html.addClass( 'navbar-fixed' );
    5876                else
    5977                        html.removeClass( 'navbar-fixed' );
    60         } );
     78        }, 50 ) );
    6179
    6280        /**
    6381         * Allows clicking the navbar to scroll to top.
    6482         */
    65         navbar.on( 'click', function( event ) {
     83        navbar.on( 'click.twentythirteen', function( event ) {
    6684                // Ensure that the navbar element was the target of the click.
    6785                if ( 'navbar' == event.target.id  || 'site-navigation' == event.target.id )
    6886                        $( 'html, body' ).animate( { scrollTop: 0 }, 'fast' );
     
    87105                        return;
    88106                }
    89107
    90                 $( '.menu-toggle' ).on( 'click', function() {
     108                $( '.menu-toggle' ).on( 'click.twentythirteen', function() {
    91109                        nav.toggleClass( 'toggled-on' );
    92110                } );
    93111        } )();
    94112
    95 
    96113        /**
    97114         * Makes "skip to content" link work correctly in IE9 and Chrome for better
    98115         * accessibility.
    99116         *
    100117         * @link http://www.nczonline.net/blog/2013/01/15/fixing-skip-to-content-links/
    101118         */
    102         _window.on( 'hashchange', function() {
     119        _window.on( 'hashchange.twentythirteen', function() {
    103120                var element = $( location.hash );
    104121
    105122                if ( element ) {