X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/8ab4a4532479e8db471032b51042ec8c4716d091..138998bbd8f7a1ac38b2f1eacbdf7cd522be4b13:/wp-admin/js/widgets.js diff --git a/wp-admin/js/widgets.js b/wp-admin/js/widgets.js index 46b064a7..de64533b 100644 --- a/wp-admin/js/widgets.js +++ b/wp-admin/js/widgets.js @@ -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 = $('
  • ').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);