From 3c8584e87fbdb9f98f7db87b0ab72b3d6f8eaecf Mon Sep 17 00:00:00 2001 From: Weston Ruter Date: Sun, 13 Aug 2017 05:24:14 +0000 Subject: [PATCH] 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 --- src/wp-admin/js/widgets/text-widgets.js | 9 +++++---- src/wp-includes/widgets/class-wp-widget-text.php | 7 +++++-- tests/phpunit/tests/widgets/text-widget.php | 7 +++---- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/wp-admin/js/widgets/text-widgets.js b/src/wp-admin/js/widgets/text-widgets.js index 692a0642c9..bb19f2ffb2 100644 --- a/src/wp-admin/js/widgets/text-widgets.js +++ b/src/wp-admin/js/widgets/text-widgets.js @@ -4,7 +4,8 @@ wp.textWidgets = ( function( $ ) { 'use strict'; 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. idBase = widgetForm.find( '> .id_base' ).val(); - if ( 'text' !== idBase ) { + if ( -1 === component.idBases.indexOf( idBase ) ) { return; } @@ -424,7 +425,7 @@ wp.textWidgets = ( function( $ ) { } idBase = widgetForm.find( '> .widget-control-actions > .id_base' ).val(); - if ( 'text' !== idBase ) { + if ( -1 === component.idBases.indexOf( idBase ) ) { return; } @@ -461,7 +462,7 @@ wp.textWidgets = ( function( $ ) { widgetForm = widgetContainer.find( '> .widget-inside > .form, > .widget-inside > form' ); idBase = widgetForm.find( '> .id_base' ).val(); - if ( 'text' !== idBase ) { + if ( -1 === component.idBases.indexOf( idBase ) ) { return; } diff --git a/src/wp-includes/widgets/class-wp-widget-text.php b/src/wp-includes/widgets/class-wp-widget-text.php index c28ed1f317..e6d979347d 100644 --- a/src/wp-includes/widgets/class-wp-widget-text.php +++ b/src/wp-includes/widgets/class-wp-widget-text.php @@ -55,11 +55,13 @@ class WP_Widget_Text extends WP_Widget { } $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(). 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(). - 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. * * @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 ) ); ?>