Skip to content
This repository has been archived by the owner on Nov 6, 2022. It is now read-only.

Global styles #371

Merged
merged 5 commits into from Jul 23, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 2 additions & 2 deletions bin/install-wp-tests.sh
Expand Up @@ -107,8 +107,8 @@ install_test_suite() {
if [ ! -d $WP_TESTS_DIR ]; then
# set up testing suite
mkdir -p $WP_TESTS_DIR
svn co --quiet https://develop.svn.wordpress.org/${WP_TESTS_TAG}/tests/phpunit/includes/ $WP_TESTS_DIR/includes
svn co --quiet https://develop.svn.wordpress.org/${WP_TESTS_TAG}/tests/phpunit/data/ $WP_TESTS_DIR/data
svn co https://develop.svn.wordpress.org/${WP_TESTS_TAG}/tests/phpunit/includes/ $WP_TESTS_DIR/includes
svn co https://develop.svn.wordpress.org/${WP_TESTS_TAG}/tests/phpunit/data/ $WP_TESTS_DIR/data
fi

if [ ! -f wp-tests-config.php ]; then
Expand Down
33 changes: 33 additions & 0 deletions php/blocks/class-loader.php
Expand Up @@ -105,6 +105,8 @@ public function editor_assets() {
$this->enqueue_block_styles( $block_name, array( 'preview', 'block' ) );
}

$this->enqueue_global_styles();

// Used to conditionally show notices for blocks belonging to an author.
$author_blocks = get_posts(
array(
Expand Down Expand Up @@ -277,6 +279,12 @@ public function render_block_template( $block, $attributes ) {
}

$this->enqueue_block_styles( $block->name, 'block' );

/**
* The wp_enqueue_style function handles duplicates, so we don't need to worry about multiple blocks
* loading the global styles more than once.
*/
$this->enqueue_global_styles();
}

$block_lab_attributes = $attributes;
Expand Down Expand Up @@ -352,6 +360,31 @@ public function enqueue_block_styles( $name, $type = 'block' ) {
}
}

/**
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not a big deal, but this should probably have an empty line above it.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 16befc7.

* Enqueues global block styles.
*/
public function enqueue_global_styles() {
$locations = array(
'blocks/css/blocks.css',
'blocks/blocks.css',
);

$stylesheet_path = block_lab_locate_template( $locations );
$stylesheet_url = str_replace( untrailingslashit( ABSPATH ), '', $stylesheet_path );

/**
* Enqueue the stylesheet, if it exists.
*/
if ( ! empty( $stylesheet_url ) ) {
wp_enqueue_style(
'block-lab__global-styles',
$stylesheet_url,
array(),
wp_get_theme()->get( 'Version' )
);
}
}

/**
* Loads a block template to render the block.
*
Expand Down
63 changes: 53 additions & 10 deletions tests/php/blocks/test-class-loader.php
Expand Up @@ -47,34 +47,39 @@ public function test_render_block_template() {
$block->from_array( array( 'name' => $block_name ) );

// Test that the do_action() call with this action runs, and that it allows enqueuing a script.
add_action( 'block_lab_render_template', function( $block ) use ( $block_name, $slug, $script_url) {
if ( $block_name === $block->name ) {
wp_enqueue_script( $slug, $script_url, array(), '0.1', true );
add_action(
'block_lab_render_template',
function( $block ) use ( $block_name, $slug, $script_url ) {
if ( $block_name === $block->name ) {
wp_enqueue_script( $slug, $script_url, array(), '0.1', true );
}
}
} );
);

$this->instance->render_block_template( $block, array() );
$scripts = wp_scripts();
$script = $scripts->registered[ $slug ];

$this->assertTrue( in_array( $slug, $scripts->queue ) );
$this->assertTrue( in_array( $slug, $scripts->queue, true ) );
$this->assertEquals( $slug, $script->handle );
$this->assertEquals( $script_url, $script->src );


// Test that the do_action() call with the dynamic name runs, like 'block_lab_render_template_bl-dynamic-testing-slug'.
$slug = 'bl-dynamic-testing-slug';
$script_url = 'https://example.com/another-script.js';

add_action( "block_lab_render_template_{$block_name}", function( $block ) use ( $block_name, $slug, $script_url) {
wp_enqueue_script( $slug, $script_url, array(), '0.1', true );
} );
add_action(
"block_lab_render_template_{$block_name}",
function( $block ) use ( $block_name, $slug, $script_url ) {
wp_enqueue_script( $slug, $script_url, array(), '0.1', true );
}
);

$this->instance->render_block_template( $block, array() );
$scripts = wp_scripts();
$script = $scripts->registered[ $slug ];

$this->assertTrue( in_array( $slug, $scripts->queue ) );
$this->assertTrue( in_array( $slug, $scripts->queue, true ) );
lukecarbis marked this conversation as resolved.
Show resolved Hide resolved
$this->assertEquals( $slug, $script->handle );
$this->assertEquals( $script_url, $script->src );
}
Expand Down Expand Up @@ -131,4 +136,42 @@ public function test_enqueue_block_styles() {
$this->assertNotContains( $block_handle, $wp_styles->queue );
$this->assertArrayNotHasKey( $block_handle, $wp_styles->registered );
}

/**
* Test enqueue_global_styles.
*
* @covers \Block_Lab\Blocks\Loader::enqueue_global_styles()
*/
public function test_enqueue_global_styles() {
$wp_styles = wp_styles();
$enqueue_handle = 'block-lab__global-styles';
$stylesheet_path = get_template_directory();

if ( ! file_exists( $stylesheet_path . '/blocks/' ) ) {
mkdir( $stylesheet_path . '/blocks/' );
mkdir( $stylesheet_path . '/blocks/css/' );
lukecarbis marked this conversation as resolved.
Show resolved Hide resolved
}

// In order of reverse priority.
$files = array(
"{$stylesheet_path}/blocks/blocks.css",
"{$stylesheet_path}/blocks/css/blocks.css",
);

// Check that the correct stylesheet is enqueued.
foreach ( $files as $key => $file ) {
lukecarbis marked this conversation as resolved.
Show resolved Hide resolved
file_put_contents( $file, '' ); // @codingStandardsIgnoreLine
$file_url = str_replace( untrailingslashit( ABSPATH ), '', $file );

$this->instance->enqueue_global_styles();

$this->assertContains( $enqueue_handle, $wp_styles->queue );
$this->assertArrayHasKey( $enqueue_handle, $wp_styles->registered );
$this->assertSame( $wp_styles->registered[ $enqueue_handle ]->src, $file_url, "Trying to enqueue file #{$key} ({$file_url})." );

wp_deregister_style( $enqueue_handle );
wp_dequeue_style( $enqueue_handle );
unlink( $file );
}
}
}