83 lines
2.1 KiB
PHP
83 lines
2.1 KiB
PHP
<?php
|
|
/**
|
|
* Google Calendar Block.
|
|
*
|
|
* @since 8.3.0
|
|
*
|
|
* @package automattic/jetpack
|
|
*/
|
|
|
|
namespace Automattic\Jetpack\Extensions\Google_Calendar;
|
|
|
|
use Automattic\Jetpack\Blocks;
|
|
use Jetpack_Gutenberg;
|
|
|
|
/**
|
|
* Registers the block for use in Gutenberg
|
|
* This is done via an action so that we can disable
|
|
* registration if we need to.
|
|
*/
|
|
function register_block() {
|
|
Blocks::jetpack_register_block(
|
|
__DIR__,
|
|
array(
|
|
'render_callback' => __NAMESPACE__ . '\load_assets',
|
|
)
|
|
);
|
|
}
|
|
add_action( 'init', __NAMESPACE__ . '\register_block' );
|
|
|
|
/**
|
|
* Google Calendar block registration/dependency declaration.
|
|
*
|
|
* @param array $attr Array containing the Google Calendar block attributes.
|
|
* @return string
|
|
*/
|
|
function load_assets( $attr ) {
|
|
$height = isset( $attr['height'] ) ? $attr['height'] : '600';
|
|
$url = isset( $attr['url'] )
|
|
? Jetpack_Gutenberg::validate_block_embed_url( $attr['url'], array( 'calendar.google.com' ) ) :
|
|
'';
|
|
$classes = Blocks::classes( Blocks::get_block_feature( __DIR__ ), $attr );
|
|
|
|
Jetpack_Gutenberg::load_assets_as_required( __DIR__ );
|
|
|
|
if ( empty( $url ) ) {
|
|
return '';
|
|
}
|
|
|
|
$sandbox = 'allow-scripts allow-same-origin allow-popups';
|
|
if ( Blocks::is_amp_request() ) {
|
|
$noscript_src = str_replace(
|
|
'//calendar.google.com/calendar/embed',
|
|
'//calendar.google.com/calendar/htmlembed',
|
|
$url
|
|
);
|
|
|
|
$iframe = sprintf(
|
|
'<amp-iframe src="%1$s" frameborder="0" scrolling="no" height="%2$d" layout="fixed-height" sandbox="%3$s">%4$s%5$s</amp-iframe>',
|
|
esc_url( $url ),
|
|
absint( $height ),
|
|
esc_attr( $sandbox ),
|
|
sprintf(
|
|
'<a href="%s" placeholder>%s</a>',
|
|
esc_url( $url ),
|
|
esc_html__( 'Google Calendar', 'jetpack' )
|
|
),
|
|
sprintf(
|
|
'<noscript><iframe src="%1$s" frameborder="0" scrolling="no" sandbox="%2$s"></iframe></noscript>',
|
|
esc_url( $noscript_src ),
|
|
esc_attr( $sandbox )
|
|
)
|
|
);
|
|
} else {
|
|
$iframe = sprintf(
|
|
'<iframe src="%1$s" frameborder="0" style="border:0" scrolling="no" height="%2$d" width="100%%" sandbox="%3$s"></iframe>',
|
|
esc_url( $url ),
|
|
absint( $height ),
|
|
esc_attr( $sandbox )
|
|
);
|
|
}
|
|
|
|
return sprintf( '<div class="%s">%s</div>', esc_attr( $classes ), $iframe );
|
|
}
|