Skip to content

Commit bee3356

Browse files
committed
Administration: Add view transitions throughout WP Admin.
This changeset enables smooth transitions between the different admin screens. For the admin menu items, distinct view transition names are used to facilitate a simple visual slide effect when the active submenu changes between screens. Props westonruter, mukesh27, joedolson. Fixes #64470. git-svn-id: https://develop.svn.wordpress.org/trunk@61491 602fd350-edb4-49c9-b593-d223f7449a82
1 parent 98e8753 commit bee3356

File tree

6 files changed

+108
-0
lines changed

6 files changed

+108
-0
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
@view-transition {
2+
navigation: auto;
3+
}
4+
5+
#adminmenu > .menu-top {
6+
view-transition-name: attr(id type(<custom-ident>), none);
7+
}

src/wp-includes/default-filters.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -599,6 +599,7 @@
599599
add_action( 'admin_enqueue_scripts', 'wp_localize_jquery_ui_datepicker', 1000 );
600600
add_action( 'admin_enqueue_scripts', 'wp_common_block_scripts_and_styles' );
601601
add_action( 'admin_enqueue_scripts', 'wp_enqueue_command_palette_assets' );
602+
add_action( 'admin_enqueue_scripts', 'wp_enqueue_view_transitions_admin_css' );
602603
add_action( 'enqueue_block_assets', 'wp_enqueue_classic_theme_styles' );
603604
add_action( 'enqueue_block_assets', 'wp_enqueue_registered_block_scripts_and_styles' );
604605
add_action( 'enqueue_block_assets', 'enqueue_block_styles_assets', 30 );

src/wp-includes/script-loader.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1744,6 +1744,9 @@ function wp_default_styles( $styles ) {
17441744
$wp_edit_blocks_dependencies
17451745
);
17461746

1747+
$styles->add( 'wp-view-transitions-admin', false );
1748+
did_action( 'init' ) && $styles->add_inline_style( 'wp-view-transitions-admin', wp_get_view_transitions_admin_css() );
1749+
17471750
$package_styles = array(
17481751
'block-editor' => array( 'wp-components', 'wp-preferences' ),
17491752
'block-library' => array(),
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
/**
3+
* View Transitions API.
4+
*
5+
* @package WordPress
6+
* @subpackage View Transitions
7+
* @since 7.0.0
8+
*/
9+
10+
/**
11+
* Enqueues View Transitions CSS for the admin.
12+
*
13+
* @since 7.0.0
14+
*/
15+
function wp_enqueue_view_transitions_admin_css(): void {
16+
wp_enqueue_style( 'wp-view-transitions-admin' );
17+
}
18+
19+
/**
20+
* Gets the CSS for View Transitions in the admin.
21+
*
22+
* @since 7.0.0
23+
*
24+
* @return string The CSS.
25+
*/
26+
function wp_get_view_transitions_admin_css(): string {
27+
$affix = SCRIPT_DEBUG ? '' : '.min';
28+
$path = ABSPATH . "wp-admin/css/view-transitions{$affix}.css";
29+
return file_get_contents( $path );
30+
}

src/wp-settings.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,7 @@
429429
require ABSPATH . WPINC . '/class-wp-url-pattern-prefixer.php';
430430
require ABSPATH . WPINC . '/class-wp-speculation-rules.php';
431431
require ABSPATH . WPINC . '/speculative-loading.php';
432+
require ABSPATH . WPINC . '/view-transitions.php';
432433

433434
add_action( 'after_setup_theme', array( wp_script_modules(), 'add_hooks' ) );
434435
add_action( 'after_setup_theme', array( wp_interactivity(), 'add_hooks' ) );
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
<?php
2+
/**
3+
* Tests for the wp_enqueue_view_transitions_admin_css() function.
4+
*
5+
* @package WordPress
6+
* @subpackage View Transitions
7+
*/
8+
9+
/**
10+
* @group view-transitions
11+
* @covers ::wp_enqueue_view_transitions_admin_css
12+
*/
13+
class Tests_View_Transitions_wpEnqueueViewTransitionsAdminCss extends WP_UnitTestCase {
14+
15+
private ?WP_Styles $original_wp_styles = null;
16+
17+
public function set_up() {
18+
global $wp_styles;
19+
20+
parent::set_up();
21+
$this->original_wp_styles = $wp_styles;
22+
}
23+
24+
public function tear_down() {
25+
global $wp_styles;
26+
27+
$wp_styles = $this->original_wp_styles;
28+
parent::tear_down();
29+
}
30+
31+
/**
32+
* Tests that the hook for enqueuing admin view transitions CSS is set up.
33+
*
34+
* @ticket 64470
35+
*/
36+
public function test_hook() {
37+
$this->assertSame( 10, has_action( 'admin_enqueue_scripts', 'wp_enqueue_view_transitions_admin_css' ) );
38+
}
39+
40+
/**
41+
* Tests that the admin view transitions style handle includes the inline CSS.
42+
*
43+
* @ticket 64470
44+
*
45+
* @covers ::wp_get_view_transitions_admin_css
46+
*/
47+
public function test_inline_css_included() {
48+
$after_data = wp_styles()->get_data( 'wp-view-transitions-admin', 'after' );
49+
$this->assertIsArray( $after_data, 'Expected `after` data to be an array.' );
50+
$css = wp_get_view_transitions_admin_css();
51+
$this->assertStringContainsString( '@view-transition', $css );
52+
$this->assertContains( $css, $after_data );
53+
}
54+
55+
/**
56+
* Tests enqueuing admin view transitions CSS.
57+
*
58+
* @ticket 64470
59+
*/
60+
public function test_wp_enqueue_view_transitions_admin_css() {
61+
$this->assertFalse( wp_style_is( 'wp-view-transitions-admin' ) );
62+
63+
wp_enqueue_view_transitions_admin_css();
64+
$this->assertTrue( wp_style_is( 'wp-view-transitions-admin' ) );
65+
}
66+
}

0 commit comments

Comments
 (0)