Widgets: Fix extensibility of Text widgets so that JS logic will initialize on subclassed widgets.
Amends [40631]. See #35243. Fixes #41540. git-svn-id: https://develop.svn.wordpress.org/trunk@41245 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
b4a8af7e35
commit
3c8584e87f
|
@ -4,7 +4,8 @@ wp.textWidgets = ( function( $ ) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var component = {
|
var component = {
|
||||||
dismissedPointers: []
|
dismissedPointers: [],
|
||||||
|
idBases: [ 'text' ]
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -357,7 +358,7 @@ wp.textWidgets = ( function( $ ) {
|
||||||
widgetForm = widgetContainer.find( '> .widget-inside > .form, > .widget-inside > form' ); // Note: '.form' appears in the customizer, whereas 'form' on the widgets admin screen.
|
widgetForm = widgetContainer.find( '> .widget-inside > .form, > .widget-inside > form' ); // Note: '.form' appears in the customizer, whereas 'form' on the widgets admin screen.
|
||||||
|
|
||||||
idBase = widgetForm.find( '> .id_base' ).val();
|
idBase = widgetForm.find( '> .id_base' ).val();
|
||||||
if ( 'text' !== idBase ) {
|
if ( -1 === component.idBases.indexOf( idBase ) ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -424,7 +425,7 @@ wp.textWidgets = ( function( $ ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
idBase = widgetForm.find( '> .widget-control-actions > .id_base' ).val();
|
idBase = widgetForm.find( '> .widget-control-actions > .id_base' ).val();
|
||||||
if ( 'text' !== idBase ) {
|
if ( -1 === component.idBases.indexOf( idBase ) ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -461,7 +462,7 @@ wp.textWidgets = ( function( $ ) {
|
||||||
widgetForm = widgetContainer.find( '> .widget-inside > .form, > .widget-inside > form' );
|
widgetForm = widgetContainer.find( '> .widget-inside > .form, > .widget-inside > form' );
|
||||||
|
|
||||||
idBase = widgetForm.find( '> .id_base' ).val();
|
idBase = widgetForm.find( '> .id_base' ).val();
|
||||||
if ( 'text' !== idBase ) {
|
if ( -1 === component.idBases.indexOf( idBase ) ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -55,11 +55,13 @@ class WP_Widget_Text extends WP_Widget {
|
||||||
}
|
}
|
||||||
$this->registered = true;
|
$this->registered = true;
|
||||||
|
|
||||||
|
wp_add_inline_script( 'text-widgets', sprintf( 'wp.textWidgets.idBases.push( %s );', wp_json_encode( $this->id_base ) ) );
|
||||||
|
|
||||||
// Note that the widgets component in the customizer will also do the 'admin_print_scripts-widgets.php' action in WP_Customize_Widgets::print_scripts().
|
// Note that the widgets component in the customizer will also do the 'admin_print_scripts-widgets.php' action in WP_Customize_Widgets::print_scripts().
|
||||||
add_action( 'admin_print_scripts-widgets.php', array( $this, 'enqueue_admin_scripts' ) );
|
add_action( 'admin_print_scripts-widgets.php', array( $this, 'enqueue_admin_scripts' ) );
|
||||||
|
|
||||||
// Note that the widgets component in the customizer will also do the 'admin_footer-widgets.php' action in WP_Customize_Widgets::print_footer_scripts().
|
// Note that the widgets component in the customizer will also do the 'admin_footer-widgets.php' action in WP_Customize_Widgets::print_footer_scripts().
|
||||||
add_action( 'admin_footer-widgets.php', array( $this, 'render_control_template_scripts' ) );
|
add_action( 'admin_footer-widgets.php', array( 'WP_Widget_Text', 'render_control_template_scripts' ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -376,8 +378,9 @@ class WP_Widget_Text extends WP_Widget {
|
||||||
* Render form template scripts.
|
* Render form template scripts.
|
||||||
*
|
*
|
||||||
* @since 4.8.0
|
* @since 4.8.0
|
||||||
|
* @since 4.9.0 The method is now static.
|
||||||
*/
|
*/
|
||||||
public function render_control_template_scripts() {
|
public static function render_control_template_scripts() {
|
||||||
$dismissed_pointers = explode( ',', (string) get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true ) );
|
$dismissed_pointers = explode( ',', (string) get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true ) );
|
||||||
?>
|
?>
|
||||||
<script type="text/html" id="tmpl-widget-text-control-fields">
|
<script type="text/html" id="tmpl-widget-text-control-fields">
|
||||||
|
|
|
@ -64,7 +64,8 @@ class Test_WP_Widget_Text extends WP_UnitTestCase {
|
||||||
$widget->_register();
|
$widget->_register();
|
||||||
|
|
||||||
$this->assertEquals( 10, has_action( 'admin_print_scripts-widgets.php', array( $widget, 'enqueue_admin_scripts' ) ) );
|
$this->assertEquals( 10, has_action( 'admin_print_scripts-widgets.php', array( $widget, 'enqueue_admin_scripts' ) ) );
|
||||||
$this->assertEquals( 10, has_action( 'admin_footer-widgets.php', array( $widget, 'render_control_template_scripts' ) ) );
|
$this->assertEquals( 10, has_action( 'admin_footer-widgets.php', array( 'WP_Widget_Text', 'render_control_template_scripts' ) ) );
|
||||||
|
$this->assertContains( 'wp.textWidgets.idBases.push( "text" );', wp_scripts()->registered['text-widgets']->extra['after'] );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -745,10 +746,8 @@ class Test_WP_Widget_Text extends WP_UnitTestCase {
|
||||||
* @covers WP_Widget_Text::render_control_template_scripts
|
* @covers WP_Widget_Text::render_control_template_scripts
|
||||||
*/
|
*/
|
||||||
function test_render_control_template_scripts() {
|
function test_render_control_template_scripts() {
|
||||||
$widget = new WP_Widget_Text();
|
|
||||||
|
|
||||||
ob_start();
|
ob_start();
|
||||||
$widget->render_control_template_scripts();
|
WP_Widget_Text::render_control_template_scripts();
|
||||||
$output = ob_get_clean();
|
$output = ob_get_clean();
|
||||||
|
|
||||||
$this->assertContains( '<script type="text/html" id="tmpl-widget-text-control-fields">', $output );
|
$this->assertContains( '<script type="text/html" id="tmpl-widget-text-control-fields">', $output );
|
||||||
|
|
Loading…
Reference in New Issue