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 @@
+