PluginProbe
Gutenberg / 23.6.0
Gutenberg v23.6.0
23.9.1 23.9.0 23.8.0 23.7.2 23.7.1 23.7.0 23.6.1 23.6.2 23.6.0 23.5.3 23.5.2 23.5.1 23.5.0 23.4.0 23.3.2 23.3.1 23.3.0 23.2.0 23.2.1 23.2.2 23.1.1 23.1.0 23.0.1 12.6.0 7.4.0 All 402 releases
gutenberg / build / widgets.php

widgets.php in Gutenberg 23.6.0, at build/widgets.php

114 lines 3.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Widget registration - Auto-generated by build process.
4 * Registers all widget script modules discovered from widgets/.
5 * Do not edit this file manually.
6 *
7 * @package gutenberg
8 */
9
10 /**
11 * Register widget script modules.
12 *
13 * Registers each widget's render and metadata as script modules via
14 * wp_register_script_module.
15 *
16 * Module IDs follow core's route pattern and use the widget directory name:
17 * wp/widgets/{widget-dir-name}/render
18 * wp/widgets/{widget-dir-name}/widget
19 */
20 function gutenberg_register_widget_modules() {
21 $widgets = gutenberg_get_registered_widget_modules();
22 if ( empty( $widgets ) ) {
23 return;
24 }
25
26 $build_constants = require __DIR__ . '/constants.php';
27 $extension = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '.js' : '.min.js';
28
29 foreach ( $widgets as $widget ) {
30 $widget_name = $widget['dir_name'];
31
32 // Register render script module if built.
33 if ( ! empty( $widget['render_module'] ) ) {
34 $render_asset_path = __DIR__ . "/widgets/{$widget_name}/render.min.asset.php";
35 if ( file_exists( $render_asset_path ) ) {
36 $render_asset = require $render_asset_path;
37 // Deregister first to override any previously registered version
38 // (e.g., Core's default modules when running as a plugin).
39 wp_deregister_script_module( $widget['render_module'] );
40 wp_register_script_module(
41 $widget['render_module'],
42 $build_constants['build_url'] . 'widgets/' . $widget_name . '/render' . $extension,
43 $render_asset['module_dependencies'] ?? array(),
44 $render_asset['version'] ?? false
45 );
46 }
47 }
48
49 // Register widget metadata script module if built.
50 if ( ! empty( $widget['widget_module'] ) ) {
51 $widget_asset_path = __DIR__ . "/widgets/{$widget_name}/widget.min.asset.php";
52 if ( file_exists( $widget_asset_path ) ) {
53 $widget_asset = require $widget_asset_path;
54 // Deregister first to override any previously registered version
55 // (e.g., Core's default modules when running as a plugin).
56 wp_deregister_script_module( $widget['widget_module'] );
57 wp_register_script_module(
58 $widget['widget_module'],
59 $build_constants['build_url'] . 'widgets/' . $widget_name . '/widget' . $extension,
60 $widget_asset['module_dependencies'] ?? array(),
61 $widget_asset['version'] ?? false
62 );
63 }
64 }
65 }
66 }
67
68 // Register immediately if init already fired, otherwise defer.
69 if ( did_action( 'init' ) ) {
70 gutenberg_register_widget_modules();
71 } else {
72 add_action( 'init', 'gutenberg_register_widget_modules' );
73 }
74
75 /**
76 * Returns the widgets discovered by the build pipeline, with their
77 * script-module handles resolved.
78 *
79 * Reads `build/widgets/registry.php` once and memoizes the result for the
80 * remainder of the request. Each entry is augmented with `render_module`
81 * and `widget_module` (the script-module handles), kept null when the
82 * corresponding source file was not present at build time. Consumers
83 * should treat the array as read-only; authoring of widget types is
84 * build-driven via the `widgets/` folder.
85 *
86 * @return array<int, array<string, mixed>> List of widgets with resolved
87 * module handles.
88 */
89 function gutenberg_get_registered_widget_modules() {
90 static $widgets = null;
91
92 if ( null === $widgets ) {
93 $registry_file = __DIR__ . '/widgets/registry.php';
94 $raw = file_exists( $registry_file ) ? require $registry_file : array();
95 if ( ! is_array( $raw ) ) {
96 $raw = array();
97 }
98 $widgets = array_map(
99 static function ( $widget ) {
100 $widget['render_module'] = ! empty( $widget['has_render'] )
101 ? 'wp/widgets/' . $widget['dir_name'] . '/render'
102 : null;
103 $widget['widget_module'] = ! empty( $widget['has_widget'] )
104 ? 'wp/widgets/' . $widget['dir_name'] . '/widget'
105 : null;
106 return $widget;
107 },
108 $raw
109 );
110 }
111
112 return $widgets;
113 }
114