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 = $('
  • ').text( $.trim( name ) ); @@ -299,12 +354,12 @@ wpWidgets = { if ( $target.hasClass('button-primary') ) { self.addWidget( chooser ); self.closeChooser(); - } else if ( $target.hasClass('button-secondary') ) { + } else if ( $target.hasClass( 'widgets-chooser-cancel' ) ) { self.closeChooser(); } }).on( 'keyup.widgets-chooser', function( event ) { if ( event.which === $.ui.keyCode.ENTER ) { - if ( $( event.target ).hasClass('button-secondary') ) { + if ( $( event.target ).hasClass( 'widgets-chooser-cancel' ) ) { // Close instead of adding when pressing Enter on the Cancel button self.closeChooser(); } else { @@ -335,6 +390,7 @@ wpWidgets = { }); $.post( ajaxurl, data, function() { + $( '#inactive-widgets-control-remove' ).prop( 'disabled' , ! $( '#wp_inactive_widgets .widget' ).length ); $( '.spinner' ).removeClass( 'is-active' ); }); }, @@ -379,6 +435,10 @@ 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' ); @@ -386,14 +446,38 @@ wpWidgets = { $( 'div.widget-content', widget ).html( r ); wpWidgets.appendTitle( 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() || ''; @@ -490,6 +574,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; } };