by Weston Ruter on WordPress.org
A prototype of next generation of widgets in core, embracing JS for UI and powering the Widgets REST API.
Important note: This project was first started before the Gutenberg feature plugin was started. As such, the JS Widgets plugin should now be considered a prototype which may inform the way that widget blocks get implemented in Gutenberg. This plugin will no longer be actively developed.
Also could be known as Widget Customizer 2.0, Widgets 3.0, or Widgets Next Generation.
Warning: The APIs provided by this plugin are still in flux. If creating new widgets that extend the WP_JS_Widget class, please look at the changelog and ensure compatibility with your extended widgets before deploying.
This plugin implements:
Features:
encoded_serialized_instance anywhere to be seen.update-widget Ajax request can be eliminated since the JS control can directly manipulate the widget instance data.WP_JS_Widget will editable from both the customizer and the widgets admin page using the same Form JS interface. This Form is also able to be embedded in other contexts, like on the frontend and as a Shortcake (Shortcode UI) form. See #11.validate and sanitize methods that work on the instance array as a whole.WP_Error from its validate or sanitize method. For example, the RSS widget will show an error message if the feed URL provided is invalid and the widget will block from saving until the URL is corrected.js-widgets/v1 namespace, for example to list all Recent Posts widgets via the /js-widgets/v1/widgets/recent-posts or to get the Text widget with the “ID” (number) of 6, /js-widgets/v1/widgets/text/6.widget_{id_base}[{number}]) are directly mutated via JavaScript instead of needing to do an update-widget Admin Ajax roundtrip; this greatly speeds up previewing.WP_JS_Widget API.This plugin doesn’t yet implement any widgets that use JS templating for frontend rendering of the widgets. For that, please see the Next Recent Posts Widget plugin.
Limitations/Caveats:
WP_JS_Widget will be exposed via the REST API. The plugin includes a WP_JS_Widget adapter class which demonstrates how to adapt existing WP_Widget classes for the new widget functionality.