]> scripts.mit.edu Git - autoinstalls/wordpress.git/blobdiff - wp-admin/js/widgets.js
WordPress 4.4
[autoinstalls/wordpress.git] / wp-admin / js / widgets.js
index 46b064a7808afe0a631c14f3b576cdc5c594e378..de64533bdfaa3e0f5ffd052d14d6ca1dc7e31d0e 100644 (file)
@@ -1,8 +1,15 @@
 /*global ajaxurl, isRtl */
 var wpWidgets;
 (function($) {
+       var $document = $( document );
 
 wpWidgets = {
+       /**
+        * A closed Sidebar that gets a Widget dragged over it.
+        *
+        * @var element|null
+        */
+       hoveredSidebar: null,
 
        init : function() {
                var rem, the_id,
@@ -22,10 +29,13 @@ wpWidgets = {
                        } else {
                                $wrap.addClass('closed');
                        }
+
+                       $document.triggerHandler( 'wp-pin-menu' );
                });
 
                $('#widgets-left .sidebar-name').click( function() {
                        $(this).closest('.widgets-holder-wrap').toggleClass('closed');
+                       $document.triggerHandler( 'wp-pin-menu' );
                });
 
                $(document.body).bind('click.widgets-toggle', function(e) {
@@ -70,6 +80,9 @@ wpWidgets = {
                                widget.removeClass( 'open' );
                                wpWidgets.close( widget );
                                e.preventDefault();
+                       } else if ( target.attr( 'id' ) === 'inactive-widgets-control-remove' ) {
+                               wpWidgets.removeInactiveWidgets();
+                               e.preventDefault();
                        }
                });
 
@@ -89,7 +102,8 @@ wpWidgets = {
                        distance: 2,
                        helper: 'clone',
                        zIndex: 100,
-                       containment: 'document',
+                       containment: '#wpwrap',
+                       refreshPositions: true,
                        start: function( event, ui ) {
                                var chooser = $(this).find('.widgets-chooser');
 
@@ -113,19 +127,61 @@ wpWidgets = {
                        }
                });
 
+               /**
+                * Opens and closes previously closed Sidebars when Widgets are dragged over/out of them.
+                */
+               sidebars.droppable( {
+                       tolerance: 'intersect',
+
+                       /**
+                        * Open Sidebar when a Widget gets dragged over it.
+                        *
+                        * @param event
+                        */
+                       over: function( event ) {
+                               var $wrap = $( event.target ).parent();
+
+                               if ( wpWidgets.hoveredSidebar && ! $wrap.is( wpWidgets.hoveredSidebar ) ) {
+                                       // Close the previous Sidebar as the Widget has been dragged onto another Sidebar.
+                                       wpWidgets.closeSidebar( event );
+                               }
+
+                               if ( $wrap.hasClass( 'closed' ) ) {
+                                       wpWidgets.hoveredSidebar = $wrap;
+                                       $wrap.removeClass( 'closed' );
+                               }
+
+                               $( this ).sortable( 'refresh' );
+                       },
+
+                       /**
+                        * Close Sidebar when the Widget gets dragged out of it.
+                        *
+                        * @param event
+                        */
+                       out: function( event ) {
+                               if ( wpWidgets.hoveredSidebar ) {
+                                       wpWidgets.closeSidebar( event );
+                               }
+                       }
+               } );
+
                sidebars.sortable({
                        placeholder: 'widget-placeholder',
                        items: '> .widget',
                        handle: '> .widget-top > .widget-title',
                        cursor: 'move',
                        distance: 2,
-                       containment: 'document',
+                       containment: '#wpwrap',
+                       tolerance: 'pointer',
+                       refreshPositions: true,
                        start: function( event, ui ) {
                                var height, $this = $(this),
                                        $wrap = $this.parent(),
                                        inside = ui.item.children('.widget-inside');
 
                                if ( inside.css('display') === 'block' ) {
+                                       ui.item.removeClass('open');
                                        inside.hide();
                                        $(this).sortable('refreshPositions');
                                }
@@ -143,6 +199,9 @@ wpWidgets = {
                                        $widget = ui.item,
                                        id = the_id;
 
+                               // Reset the var to hold a previously closed sidebar.
+                               wpWidgets.hoveredSidebar = null;
+
                                if ( $widget.hasClass('deleting') ) {
                                        wpWidgets.save( $widget, 1, 0, 1 ); // delete widget
                                        $widget.remove();
@@ -174,7 +233,7 @@ wpWidgets = {
 
                                        wpWidgets.save( $widget, 0, 0, 1 );
                                        $widget.find('input.add_new').val('');
-                                       $( document ).trigger( 'widget-added', [ $widget ] );
+                                       $document.trigger( 'widget-added', [ $widget ] );
                                }
 
                                $sidebar = $widget.parent();
@@ -241,7 +300,7 @@ wpWidgets = {
 
                                if ( ui.draggable.hasClass('ui-sortable-helper') ) {
                                        $('#removing-widget').show().children('span')
-                                       .html( ui.draggable.find('div.widget-title').children('h4').html() );
+                                       .html( ui.draggable.find( 'div.widget-title' ).children( 'h3' ).html() );
                                }
                        },
                        out: function(e,ui) {
@@ -254,7 +313,7 @@ wpWidgets = {
                // Area Chooser
                $( '#widgets-right .widgets-holder-wrap' ).each( function( index, element ) {
                        var $element = $( element ),
-                               name = $element.find( '.sidebar-name h3' ).text(),
+                               name = $element.find( '.sidebar-name h2' ).text(),
                                id = $element.find( '.widgets-sortables' ).attr( 'id' ),
                                li = $('<li tabindex="0">').text( $.trim( name ) );
 
@@ -331,6 +390,7 @@ wpWidgets = {
                });
 
                $.post( ajaxurl, data, function() {
+                       $( '#inactive-widgets-control-remove' ).prop( 'disabled' , ! $( '#wp_inactive_widgets .widget' ).length );
                        $( '.spinner' ).removeClass( 'is-active' );
                });
        },
@@ -375,21 +435,49 @@ wpWidgets = {
                                        });
                                } else {
                                        widget.remove();
+
+                                       if ( sidebarId === 'wp_inactive_widgets' ) {
+                                               $( '#inactive-widgets-control-remove' ).prop( 'disabled' , ! $( '#wp_inactive_widgets .widget' ).length );
+                                       }
                                }
                        } else {
                                $( '.spinner' ).removeClass( 'is-active' );
                                if ( r && r.length > 2 ) {
                                        $( 'div.widget-content', widget ).html( r );
                                        wpWidgets.appendTitle( widget );
-                                       $( document ).trigger( 'widget-updated', [ widget ] );
+                                       $document.trigger( 'widget-updated', [ widget ] );
+
+                                       if ( sidebarId === 'wp_inactive_widgets' ) {
+                                               $( '#inactive-widgets-control-remove' ).prop( 'disabled' , ! $( '#wp_inactive_widgets .widget' ).length );
+                                       }
                                }
                        }
+
                        if ( order ) {
                                wpWidgets.saveOrder();
                        }
                });
        },
 
+       removeInactiveWidgets : function() {
+               var $element = $( '.remove-inactive-widgets' ), a, data;
+
+               $( '.spinner', $element ).addClass( 'is-active' );
+
+               a = {
+                       action : 'delete-inactive-widgets',
+                       removeinactivewidgets : $( '#_wpnonce_remove_inactive_widgets' ).val()
+               };
+
+               data = $.param( a );
+
+               $.post( ajaxurl, data, function() {
+                       $( '#wp_inactive_widgets .widget' ).remove();
+                       $( '#inactive-widgets-control-remove' ).prop( 'disabled' , true );
+                       $( '.spinner', $element ).removeClass( 'is-active' );
+               } );
+       },
+
        appendTitle : function(widget) {
                var title = $('input[id*="-title"]', widget).val() || '';
 
@@ -446,7 +534,7 @@ wpWidgets = {
                // No longer "new" widget
                widget.find( 'input.add_new' ).val('');
 
-               $( document ).trigger( 'widget-added', [ widget ] );
+               $document.trigger( 'widget-added', [ widget ] );
 
                /*
                 * Check if any part of the sidebar is visible in the viewport. If it is, don't scroll.
@@ -486,9 +574,22 @@ wpWidgets = {
        clearWidgetSelection: function() {
                $( '#widgets-left' ).removeClass( 'chooser' );
                $( '.widget-in-question' ).removeClass( 'widget-in-question' );
+       },
+
+       /**
+        * Closes a Sidebar that was previously closed, but opened by dragging a Widget over it.
+        *
+        * Used when a Widget gets dragged in/out of the Sidebar and never dropped.
+        *
+        * @param sidebar
+        */
+       closeSidebar: function( sidebar ) {
+               this.hoveredSidebar.addClass( 'closed' );
+               $( sidebar.target ).css( 'min-height', '' );
+               this.hoveredSidebar = null;
        }
 };
 
-$(document).ready( function(){ wpWidgets.init(); } );
+$document.ready( function(){ wpWidgets.init(); } );
 
 })(jQuery);