diff --git a/gutenberg.php b/gutenberg.php index 4e3e6f060b6b1..65cba3efab4ac 100644 --- a/gutenberg.php +++ b/gutenberg.php @@ -47,9 +47,11 @@ function the_gutenberg_project() { @@ -220,7 +222,9 @@ function gutenberg_init( $return, $post ) { */ remove_action( 'admin_print_scripts', 'print_emoji_detection_script' ); + // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores do_action( 'admin_print_styles-widgets.php' ); + // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores do_action( 'admin_print_scripts-widgets.php' ); /* diff --git a/packages/block-library/src/legacy-widget/WidgetEditDomManager.js b/packages/block-library/src/legacy-widget/WidgetEditDomManager.js index af53070276197..30ded7a7a7a6f 100644 --- a/packages/block-library/src/legacy-widget/WidgetEditDomManager.js +++ b/packages/block-library/src/legacy-widget/WidgetEditDomManager.js @@ -7,6 +7,7 @@ import { includes } from 'lodash'; * WordPress dependencies */ import { Component, createRef } from '@wordpress/element'; +import isShallowEqual from '@wordpress/is-shallow-equal'; class WidgetEditDomManager extends Component { constructor() { @@ -20,6 +21,9 @@ class WidgetEditDomManager extends Component { componentDidMount() { this.triggerWidgetEvent( 'widget-added' ); + this.previousFormData = new window.FormData( + this.formRef.current + ); } shouldComponentUpdate( nextProps ) { @@ -29,6 +33,9 @@ class WidgetEditDomManager extends Component { const widgetContent = this.widgetContentRef.current; widgetContent.innerHTML = nextProps.form; this.triggerWidgetEvent( 'widget-updated' ); + this.previousFormData = new window.FormData( + this.formRef.current + ); } return false; } @@ -42,7 +49,11 @@ class WidgetEditDomManager extends Component { ref={ this.formRef } method="post" onBlur={ () => { - //console.log( 'blur' ); + if ( this.shouldTriggerInstanceUpdate() ) { + this.props.onInstanceChange( + this.retrieveUpdatedInstance() + ); + } } } >
+
{ this.widgetEditDomManagerRef = ref; } } + onInstanceChange={ this.onInstanceChange } widgetNumber={ instanceId * -1 } id={ id } idBase={ idBase } form={ form } /> -
); } - updateWidget() { - if ( this.widgetEditDomManagerRef ) { - const instanceChanges = this.widgetEditDomManagerRef.retrieveUpdatedInstance(); - this.requestWidgetUpdater( instanceChanges, ( response ) => { - this.instanceUpdating = response.instance; - this.props.onInstanceChange( response.instance ); - } ); - } + onInstanceChange( instanceChanges ) { + this.requestWidgetUpdater( instanceChanges, ( response ) => { + this.instanceUpdating = response.instance; + this.props.onInstanceChange( response.instance ); + } ); } requestWidgetUpdater( instanceChanges, callback ) { diff --git a/packages/block-library/src/legacy-widget/edit.js b/packages/block-library/src/legacy-widget/edit.js index 2f665ad08ab3f..154ee30ad38ae 100644 --- a/packages/block-library/src/legacy-widget/edit.js +++ b/packages/block-library/src/legacy-widget/edit.js @@ -100,19 +100,18 @@ class LegacyWidgetEdit extends Component { { widgetObject.description } - { ! isPreview && ( - { - this.props.setAttributes( { - instance: newInstance, - } ); - } + { + this.props.setAttributes( { + instance: newInstance, + } ); } - /> - ) } + } + /> { isPreview && ( diff --git a/test/integration/full-content/fixtures/core__legacy-widget.json b/test/integration/full-content/fixtures/core__legacy-widget.json new file mode 100644 index 0000000000000..c9e750dbaa066 --- /dev/null +++ b/test/integration/full-content/fixtures/core__legacy-widget.json @@ -0,0 +1,10 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/legacy-widget", + "isValid": true, + "attributes": {}, + "innerBlocks": [], + "originalContent": "" + } +] diff --git a/test/integration/full-content/fixtures/core__legacy-widget.parsed.json b/test/integration/full-content/fixtures/core__legacy-widget.parsed.json new file mode 100644 index 0000000000000..93ea4bba8f175 --- /dev/null +++ b/test/integration/full-content/fixtures/core__legacy-widget.parsed.json @@ -0,0 +1,18 @@ +[ + { + "blockName": "core/legacy-widget", + "attrs": {}, + "innerBlocks": [], + "innerHTML": "", + "innerContent": [] + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n", + "innerContent": [ + "\n" + ] + } +] diff --git a/test/integration/full-content/fixtures/core__legacy-widget.serialized.html b/test/integration/full-content/fixtures/core__legacy-widget.serialized.html new file mode 100644 index 0000000000000..a94242f7e4e6e --- /dev/null +++ b/test/integration/full-content/fixtures/core__legacy-widget.serialized.html @@ -0,0 +1 @@ +