WordPress.org

Make WordPress Core

Ticket #40862: scrollToOpenedWidgets.diff

File scrollToOpenedWidgets.diff, 1.9 KB (added by jpurdy647, 3 years ago)

Patch to scroll clipped widgets into view

  • .js"

    diff --git "a/C:\\Users\\Josh\\AppData\\Local\\Temp\\TortoiseGit\\widgets-6698543.000.js" "b/C:\\xampp\\htdocs\\wordpress\\wp-admin\\js\\widgets.js"
    index aa439ea55..d5970ddbb 100644
    old new wpWidgets = { 
    4141                $(document.body).bind('click.widgets-toggle', function(e) {
    4242                        var target = $(e.target),
    4343                                css = { 'z-index': 100 },
    44                                 widget, inside, targetWidth, widgetWidth, margin;
     44                                widget, inside, targetWidth, widgetWidth, margin, viewportBounds, widgetBounds;
    4545
    4646                        if ( target.parents('.widget-top').length && ! target.parents('#available-widgets').length ) {
    4747                                widget = target.closest('div.widget');
    4848                                inside = widget.children('.widget-inside');
    4949                                targetWidth = parseInt( widget.find('input.widget-width').val(), 10 ),
    5050                                widgetWidth = widget.parent().width();
     51                viewportBounds = {
     52                                        top: $(window).scrollTop(),
     53                                        bottom:  $(window).scrollTop() + $(window).height()
     54                                };
     55                /* This is the assumed bounds of the widget once it is fully opened */
     56                                widgetBounds = {
     57                                        top: widget.offset().top,
     58                                        bottom: widget.offset().top + widget.height() + inside.height()
     59                                }
    5160
    5261                                if ( inside.is(':hidden') ) {
    5362                                        if ( targetWidth > 250 && ( targetWidth + 30 > widgetWidth ) && widget.closest('div.widgets-sortables').length ) {
    wpWidgets = { 
    6069                                                css[ margin ] = widgetWidth - ( targetWidth + 30 ) + 'px';
    6170                                                widget.css( css );
    6271                                        }
     72                                               
     73                                        /*
     74                                         * Check if newly opened widget is fully in viewport
     75                                         * If it is not, then scroll it into view
     76                                         *
     77                                         */
     78                                        if (widgetBounds.bottom + 130 > viewportBounds.bottom) {
     79                                                $( 'html, body' ).animate({
     80                                                        scrollTop: widgetBounds.bottom + 130 - $(window).height()
     81                                                }, 200 );
     82                                        }
     83
    6384                                        widget.addClass( 'open' );
    6485                                        inside.slideDown('fast');
    6586                                } else {