]> scripts.mit.edu Git - autoinstalls/wordpress.git/blobdiff - wp-admin/js/widgets.js
WordPress 4.3
[autoinstalls/wordpress.git] / wp-admin / js / widgets.js
index 7fdd02957be210d5206a8ed035ca78b8499db17a..000921a0be6b4567c7ec1a6177af5261c935669d 100644 (file)
@@ -4,6 +4,12 @@ var wpWidgets;
        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,
@@ -94,6 +100,7 @@ wpWidgets = {
                        helper: 'clone',
                        zIndex: 100,
                        containment: '#wpwrap',
+                       refreshPositions: true,
                        start: function( event, ui ) {
                                var chooser = $(this).find('.widgets-chooser');
 
@@ -117,6 +124,45 @@ 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',
@@ -124,6 +170,8 @@ wpWidgets = {
                        cursor: 'move',
                        distance: 2,
                        containment: '#wpwrap',
+                       tolerance: 'pointer',
+                       refreshPositions: true,
                        start: function( event, ui ) {
                                var height, $this = $(this),
                                        $wrap = $this.parent(),
@@ -147,6 +195,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();
@@ -490,6 +541,19 @@ 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;
        }
 };