<?php
if (!defined('ABSPATH')) {
die('No direct access.');
}
/**
* Adds a MetaSlider block to Gutenberg
*/
class MetaSlider_Gutenberg
{
/**
* Init
*/
public function __construct()
{
add_action('enqueue_block_editor_assets', array($this,'enqueue_block_scripts'));
if (isset($_REQUEST['override_preview_style']) && filter_var($_REQUEST['override_preview_style'], FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)) {
add_filter('metaslider_preview_styles', array($this, 'preview_styles'));
}
}
/**
* Enqueues gutenberg scripts
*/
public function enqueue_block_scripts()
{
$version = MetaSliderPlugin::get_instance()->version;
// Enqueue the bundled block JS file
wp_enqueue_script(
'metaslider-blocks',
plugins_url('assets/dist/js/editor-block.js', __FILE__),
array('wp-i18n', 'wp-element', 'wp-block-library', 'wp-components', 'wp-api'),
$version
);
wp_localize_script('metaslider-blocks', 'metaslider_block_config', array(
'preview_url' => add_query_arg('ms_gutenberg_preview', 1, set_url_scheme(home_url())),
'plugin_page' => admin_url('admin.php?page=metaslider')
));
/*
* gutenberg_get_jed_locale_data uses WP function get_translations_for_domain,
* which can be usefull if we want to use wp.18n.__ in the rest of the plugin.
*/
$locale_data = $this->gutenberg_get_jed_locale_data('ml-slider');
wp_add_inline_script(
'metaslider-blocks',
'wp.i18n.setLocaleData(' . json_encode($locale_data) . ', \'ml-slider\');',
'before'
);
// Enqueue optional editor only styles
wp_enqueue_style(
'metaslider-blocks-editor-css',
plugins_url('assets/dist/css/editor-block.css', __FILE__),
array('wp-block-library'),
$version
);
}
/**
* Preview styles
*
* @param string $styles The preview styles
* @return string
*/
public function preview_styles($styles)
{
ob_start(); ?>
body, html {
overflow: hidden;
height: auto;
margin:0;
padding:0;
box-sizing: border-box;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
font-size: 14px;
}
.metaslider {
margin: 0 auto;
}
<?php
return ob_get_clean();
}
/**
* Backup function for Gutenberg's gutenberg_get_jed_locale_data
*
* @param string $domain - The text domain for the strings
*/
private function gutenberg_get_jed_locale_data($domain)
{
if (function_exists('gutenberg_get_jed_locale_data')) {
return gutenberg_get_jed_locale_data($domain);
}
$translations = get_translations_for_domain($domain);
$locale = array(
'' => array(
'domain' => $domain,
'lang' => is_admin() && function_exists('get_user_locale') ? get_user_locale() : get_locale(),
),
);
if (!empty($translations->headers['Plural-Forms'])) {
$locale['']['plural_forms'] = $translations->headers['Plural-Forms'];
}
foreach ($translations->entries as $msgid => $entry) {
$locale[$msgid] = $entry->translations;
}
return $locale;
}
}