X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/38ac4bc40322ecdc4052db4263466573e01fa51f..ef91a7f4f3c6468973e192335a27ec0e0faca0b5:/wp-admin/js/widgets.js diff --git a/wp-admin/js/widgets.js b/wp-admin/js/widgets.js index 7fdd0295..aa439ea5 100644 --- a/wp-admin/js/widgets.js +++ b/wp-admin/js/widgets.js @@ -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, @@ -74,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(); } }); @@ -94,6 +103,7 @@ wpWidgets = { helper: 'clone', zIndex: 100, containment: '#wpwrap', + refreshPositions: true, start: function( event, ui ) { var chooser = $(this).find('.widgets-chooser'); @@ -117,6 +127,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,12 +173,15 @@ wpWidgets = { cursor: 'move', distance: 2, 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'); } @@ -147,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(); @@ -245,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) { @@ -258,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 = $('