Make WordPress Core

Ticket #40974: 40974.3.diff

File 40974.3.diff, 3.2 KB (added by azaozz, 7 years ago)
  • src/wp-admin/js/widgets.js

     
    4141                $(document.body).bind('click.widgets-toggle', function(e) {
    4242                        var target = $(e.target),
    4343                                css = { 'z-index': 100 },
    44                                 widget, inside, targetWidth, widgetWidth, margin,
     44                                inside, targetWidth, widgetWidth, margin,
     45                                widget = target.closest('div.widget'),
    4546                                toggleBtn = target.closest( '.widget' ).find( '.widget-top button.widget-action' );
    4647
    4748                        if ( target.parents('.widget-top').length && ! target.parents('#available-widgets').length ) {
    48                                 widget = target.closest('div.widget');
    4949                                inside = widget.children('.widget-inside');
    5050                                targetWidth = parseInt( widget.find('input.widget-width').val(), 10 ),
    5151                                widgetWidth = widget.parent().width();
     
    8282                                }
    8383                                e.preventDefault();
    8484                        } else if ( target.hasClass('widget-control-save') ) {
     85                                $document.trigger( 'wp-widget-before-save', widget );
    8586                                wpWidgets.save( target.closest('div.widget'), 0, 1, 0 );
    8687                                e.preventDefault();
    8788                        } else if ( target.hasClass('widget-control-remove') ) {
  • src/wp-admin/js/widgets/text-widgets.js

     
    230230
    231231                                        // If a prior mce instance was replaced, and it was in text mode, toggle to text mode.
    232232                                        if ( restoreTextMode ) {
    233                                                 switchEditors.go( id, 'toggle' );
     233                                                switchEditors.go( id, 'html' );
    234234                                        }
    235235
    236236                                        // Show the pointer.
     
    269269                                }
    270270
    271271                                control.editorFocused = false;
    272                                 triggerChangeIfDirty = function() {
     272
     273                                triggerChangeIfDirty = function( event ) {
    273274                                        var updateWidgetBuffer = 300; // See wp.customize.Widgets.WidgetControl._setupUpdateUI() which uses 250ms for updateWidgetDebounced.
    274                                         if ( editor.isDirty() ) {
     275                                        if ( editor.isDirty() || ( event && event.type === 'paste' ) ) {
    275276
    276277                                                /*
    277278                                                 * Account for race condition in customizer where user clicks Save & Publish while
     
    296297                                                textarea.trigger( 'change' );
    297298                                        }
    298299                                };
    299                                 editor.on( 'focus', function() {
     300                                editor.on( 'focus', function onEditorFocus() {
    300301                                        control.editorFocused = true;
    301302                                });
     303                                editor.on( 'paste', function onEditorPaste( event ) {
     304                                        triggerChangeIfDirty( event );
     305                                });
    302306                                editor.on( 'NodeChange', _.debounce( triggerChangeIfDirty, changeDebounceDelay ) );
    303                                 editor.on( 'blur', function() {
     307                                editor.on( 'blur hide', function onEditorBlur( event ) {
    304308                                        control.editorFocused = false;
    305                                         triggerChangeIfDirty();
     309                                        triggerChangeIfDirty( event );
    306310                                });
    307311
    308312                                control.editor = editor;
     
    309313                        }
    310314
    311315                        buildEditor();
     316
     317                        // Force-update the hidden input fields.
     318                        $( document ).on( 'wp-widget-before-save', function( event, widget ) {
     319                                var $widget = $( widget );
     320
     321                                $widget.find( '.widget-content input.title' ).val( control.fields.title.val() );
     322                                $widget.find( '.widget-content input.text' ).val( control.fields.text.val() );
     323                        });
    312324                }
    313325        });
    314326