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,
widget.removeClass( 'open' );
wpWidgets.close( widget );
e.preventDefault();
+ } else if ( target.attr( 'id' ) === 'inactive-widgets-control-remove' ) {
+ wpWidgets.removeInactiveWidgets();
+ e.preventDefault();
}
});
helper: 'clone',
zIndex: 100,
containment: '#wpwrap',
+ refreshPositions: true,
start: function( event, ui ) {
var chooser = $(this).find('.widgets-chooser');
}
});
+ /**
+ * 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',
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');
}
$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();
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) {
// 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 ) );
});
$.post( ajaxurl, data, function() {
+ $( '#inactive-widgets-control-remove' ).prop( 'disabled' , ! $( '#wp_inactive_widgets .widget' ).length );
$( '.spinner' ).removeClass( 'is-active' );
});
},
});
} else {
widget.remove();
+
+ if ( sidebarId === 'wp_inactive_widgets' ) {
+ $( '#inactive-widgets-control-remove' ).prop( 'disabled' , ! $( '#wp_inactive_widgets .widget' ).length );
+ }
}
} else {
$( '.spinner' ).removeClass( 'is-active' );
$( '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() || '';
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;
}
};