PluginProbe
Gutenberg / 23.5.3
Gutenberg v23.5.3
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 / lib / experimental / omnibar / load.php

load.php in Gutenberg 23.5.3, at lib/experimental/omnibar/load.php

178 lines 4.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Omnibar experiment.
4 *
5 * @package gutenberg
6 */
7
8 /**
9 * Enables the omnibar experiment.
10 */
11 function gutenberg_enable_omnibar_experiment() {
12 $screen = get_current_screen();
13 if (
14 ! $screen ||
15 ! is_admin_bar_showing() ||
16 ! gutenberg_is_experiment_enabled( 'gutenberg-omnibar' )
17 ) {
18 return;
19 }
20
21 $is_post_editor = 'post' === $screen->base && $screen->is_block_editor();
22 $is_site_editor = 'site-editor' === $screen->id;
23 if ( ! $is_post_editor && ! $is_site_editor ) {
24 return;
25 }
26
27 wp_add_inline_script(
28 'wp-block-editor',
29 'window.__experimentalAdminBarInEditor = true',
30 'before'
31 );
32 }
33
34 add_action( 'admin_enqueue_scripts', 'gutenberg_enable_omnibar_experiment' );
35
36 /**
37 * Adds a body class when the omnibar experiment is enabled.
38 *
39 * Applied on every admin page where the admin bar is shown, so that
40 * pages that use wp-build (such as `font-library-wp-admin`)
41 * will get the experiment treatment.
42 *
43 * @param string $classes Space-separated list of admin body classes.
44 * @return string Filtered list of admin body classes.
45 */
46 function gutenberg_omnibar_body_class( $classes ) {
47 if (
48 ! is_admin_bar_showing() ||
49 ! gutenberg_is_experiment_enabled( 'gutenberg-omnibar' )
50 ) {
51 return $classes;
52 }
53
54 return $classes . ' has-admin-bar-in-editor';
55 }
56
57 add_filter( 'admin_body_class', 'gutenberg_omnibar_body_class' );
58
59 /**
60 * Enables the omnibar experiment on the site-editor-v2 page.
61 */
62 function gutenberg_enable_omnibar_in_site_editor_v2() {
63 if (
64 ! is_admin_bar_showing() ||
65 ! gutenberg_is_experiment_enabled( 'gutenberg-omnibar' )
66 ) {
67 return;
68 }
69
70 add_action( 'admin_head', 'wp_admin_bar_header' );
71 remove_action( 'admin_bar_menu', 'wp_admin_bar_sidebar_toggle', 0 );
72 add_action( 'admin_footer-site-editor-v2', 'wp_admin_bar_render' );
73
74 $admin_color = get_user_option( 'admin_color' );
75 if ( empty( $admin_color ) ) {
76 $admin_color = 'fresh';
77 }
78 $admin_color_class = 'admin-color-' . sanitize_html_class( $admin_color );
79
80 add_action(
81 'admin_head-site-editor-v2',
82 static function () use ( $admin_color_class ) {
83 echo '<script>'
84 . 'window.__experimentalAdminBarInEditor = true;'
85 . 'document.addEventListener("DOMContentLoaded", function () { document.body.classList.add("has-admin-bar-in-editor", ' . wp_json_encode( $admin_color_class ) . '); });'
86 . '</script>';
87 }
88 );
89
90 wp_enqueue_style( 'admin-bar' );
91 wp_enqueue_style( 'colors' );
92 }
93
94 add_action( 'site-editor-v2_init', 'gutenberg_enable_omnibar_in_site_editor_v2' );
95
96 /**
97 * Replaces the home/odometer dashicon in the admin bar site menu with the
98 * actual site icon, if one is set.
99 *
100 * @param WP_Admin_Bar $wp_admin_bar The WP_Admin_Bar instance.
101 */
102 function gutenberg_omnibar_site_icon( $wp_admin_bar ) {
103 if (
104 ! is_admin_bar_showing() ||
105 ! gutenberg_is_experiment_enabled( 'gutenberg-omnibar' )
106 ) {
107 return;
108 }
109
110 $node = $wp_admin_bar->get_node( 'site-name' );
111 if ( ! $node ) {
112 return;
113 }
114
115 $site_icon_url = get_site_icon_url( 64 );
116 if ( ! $site_icon_url ) {
117 return;
118 }
119
120 $meta = (array) $node->meta;
121 $meta['class'] = isset( $meta['class'] ) ? trim( $meta['class'] . ' has-site-icon' ) : 'has-site-icon';
122
123 $wp_admin_bar->add_node(
124 array(
125 'id' => 'site-name',
126 'title' => '<img class="site-icon" src="' . esc_url( $site_icon_url ) . '" alt="" />' . $node->title,
127 'meta' => $meta,
128 )
129 );
130 }
131
132 add_action( 'admin_bar_menu', 'gutenberg_omnibar_site_icon', 31 );
133
134 /**
135 * Adds the styles for the admin bar site icon.
136 */
137 function gutenberg_omnibar_site_icon_styles() {
138 if (
139 ! is_admin_bar_showing() ||
140 ! gutenberg_is_experiment_enabled( 'gutenberg-omnibar' )
141 ) {
142 return;
143 }
144
145 $css = <<<CSS
146 #wpadminbar #wp-admin-bar-site-name.has-site-icon > .ab-item:before {
147 content: none;
148 }
149
150 #wpadminbar #wp-admin-bar-site-name > .ab-item .site-icon {
151 width: 20px;
152 height: 20px;
153 margin: 0;
154 margin-inline-end: 6px;
155 vertical-align: -5px;
156 background: #f0f0f1;
157 border-radius: 2px;
158 }
159
160 @media screen and (max-width: 782px) {
161 #wpadminbar #wp-admin-bar-site-name > .ab-item .site-icon {
162 position: absolute;
163 top: 9px;
164 inset-inline-start: 12px;
165 width: 28px;
166 height: 28px;
167 margin: 0;
168 border-radius: 4px;
169 }
170 }
171 CSS;
172
173 wp_add_inline_style( 'admin-bar', $css );
174 }
175
176 add_action( 'wp_enqueue_scripts', 'gutenberg_omnibar_site_icon_styles' );
177 add_action( 'admin_enqueue_scripts', 'gutenberg_omnibar_site_icon_styles' );
178