awsmug/torro-forms

View on GitHub
assets/dist/js/admin-fixed-sidebar.js

Summary

Maintainability
F
4 days
Test Coverage
/*!
 * Torro Forms Version 1.0.8 (https://torro-forms.com)
 * Licensed under GNU General Public License v2 (or later) (http://www.gnu.org/licenses/gpl-2.0.html)
 */
( function( $ ) {
    'use strict';

    var $sideSortables = $( '#postbox-container-1 #side-sortables' );
    var extraMargin = 20;
    var height, offsetTop, offsetBottom, windowHeight, toolbarOffset, lastScroll = 0;

    if ( ! $sideSortables.length ) {
        return;
    }

    function checkRightContainerOffset() {
        var scrollTop = $( window ).scrollTop();

        if ( height < windowHeight - toolbarOffset - offsetTop ) {
            if ( scrollTop + toolbarOffset >= offsetTop - extraMargin ) {
                $sideSortables.css({
                    position: 'fixed',
                    top: toolbarOffset + extraMargin,
                    bottom: 'auto'
                });
            } else {
                $sideSortables.css({
                    position: 'relative',
                    top: 'auto',
                    bottom: 'auto'
                });
            }
        } else {
            if ( scrollTop > lastScroll ) {
                if ( scrollTop + windowHeight >= $( document ).height() - offsetBottom + extraMargin ) {
                    $sideSortables.css({
                        position: 'fixed',
                        top: 'auto',
                        bottom: scrollTop + windowHeight - $( document ).height() + offsetBottom - extraMargin
                    });
                } else if ( scrollTop + windowHeight >= offsetTop + height ) {
                    $sideSortables.css({
                        position: 'fixed',
                        top: 'auto',
                        bottom: extraMargin
                    });
                } else {
                    $sideSortables.css({
                        position: 'relative',
                        top: 'auto',
                        bottom: 'auto'
                    });
                }
            } else {
                if ( scrollTop + toolbarOffset >= $( document ).height() - offsetBottom - height - extraMargin ) {
                    $sideSortables.css({
                        position: 'fixed',
                        top: 'auto',
                        bottom: scrollTop + windowHeight - $( document ).height() + offsetBottom - extraMargin
                    });
                } else if ( scrollTop + toolbarOffset >= offsetTop ) {
                    $sideSortables.css({
                        position: 'fixed',
                        top: toolbarOffset + extraMargin,
                        bottom: 'auto'
                    });
                } else {
                    $sideSortables.css({
                        position: 'relative',
                        top: 'auto',
                        bottom: 'auto'
                    });
                }
            }
        }

        lastScroll = scrollTop;
    }

    function refreshParams() {
        height = $sideSortables.height();
        offsetTop = $sideSortables.offset().top;
        offsetBottom = $( document ).height() - $( '#poststuff' ).offset().top - $( '#poststuff' ).outerHeight();

        windowHeight = $( window ).height();

        toolbarOffset = 0;
        if ( $( 'body' ).hasClass( 'admin-bar' ) ) {
            if ( document.documentElement.clientWidth <= 782 ) {
                toolbarOffset = 46;
            } else {
                toolbarOffset = 32;
            }
        }

        checkRightContainerOffset();
    }

    refreshParams();

    $( window ).on( 'resize', refreshParams );
    $( window ).on( 'scroll', checkRightContainerOffset );

}( window.jQuery ) );