Skip to content

Commit

Permalink
Merge pull request getblocklab#371 from getblocklab/feature/351-globa…
Browse files Browse the repository at this point in the history
…l-styles

Global styles
  • Loading branch information
lukecarbis committed Jul 23, 2019
2 parents e9b1928 + 0942e34 commit 0fa2490
Show file tree
Hide file tree
Showing 3 changed files with 88 additions and 12 deletions.
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' ) {
}
}

/**
* 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 ) );
$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/' );
}

// 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 ) {
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 );
}
}
}

0 comments on commit 0fa2490

Please sign in to comment.