File: /var/www/html/insiders/wp-load/wp-content/plugins/breadly/block-extensions/core-navigation.php
<?php
defined( 'GTM_BLOCK_SUPPORT_PROPS_KEY' ) || define( 'GTM_BLOCK_SUPPORT_PROPS_KEY', 'gtmBlockProps' );
class GTM_Core_Navigation_Style {
private static $instance;
public static $style_class = 'gtm-core-navigation-style';
public $registered = [];
public static function get_instance() {
if ( ! self::$instance ) {
self::$instance = new self();
}
return self::$instance;
}
public function __construct() {
}
/**
* For registering a block style that will use gutenmate's navigation menu props
*
* @return void
*/
public function register( $block_style_name ) {
$this->registered[] = $block_style_name;
}
/**
* For checking the current class has the registered styles
*
* @param [string] $className, from $attributes['className']
* @return boolean
*/
public function has_registered( $className ) {
if ( ! empty( $className ) ) {
foreach ( $this->registered as $style ) {
if ( stripos( $className, 'is-style-' . $style ) !== false ) {
return true;
}
}
}
return false;
}
}
// Register built-in styles
GTM_Core_Navigation_Style::get_instance()->register( 'gtm-core-navigation-gutenmate' );
GTM_Core_Navigation_Style::get_instance()->register( 'gtm-core-navigation-list-mini' );
add_filter( 'gtm_config', 'gtm_core_navigation_style_editor_config' );
function gtm_core_navigation_style_editor_config( $config ) {
$config['gtm_core_navigation_styles'] = GTM_Core_Navigation_Style::get_instance()->registered;
$config['gtm_core_navigation_style_class'] = GTM_Core_Navigation_Style::$style_class;
return $config;
};
/**
* Render block style
*/
add_filter( 'gtm.BlockStyleCompiler.core/navigation', 'gtm_compile_block_css_core_navigation', 10, 3 );
function gtm_compile_block_css_core_navigation( $output, $attributes, $blockName ) {
$shouldHaveSubmenuAppearance = ( $attributes['layout']['orientation'] ?? '' ) == 'horizontal' && ( $attributes['overlayMenu'] ?? '' ) != "always";
$block_style = ['classes' => [], 'style' => []];
if ( version_compare( gtm_get_gutenberg_version(), '12', '<' ) ) {
$block_style['classes'][] = gtm_get_gutenberg_version_class();
}
if ( ! empty( $attributes['className'] ) && GTM_Core_Navigation_Style::get_instance()->has_registered( $attributes['className'] ) ) {
$block_style['classes'][] = 'gtm-core-navigation-style';
}
if ( ! empty( $attributes['showSubmenuIcon'] ) ) {
$block_style['classes'][] = 'gtm-has-core-navigation-show-submenu-icon';
}
/* Top level */
gtm_css_compileCssVar( $block_style, "core-navigation-top-level-item-typography", gtm_css_parseTypographyProps( $attributes['gtmTopLevelItemTypography'] ?? null ) );
gtm_css_compileCssVar( $block_style, "core-navigation-top-level-item-spacing", gtm_css_parseSpacingValue( $attributes['gtmTopLevelItemSpacing'] ?? null ) );
gtm_css_compileCssVar( $block_style, "core-navigation-top-level-icon-size", $attributes['gtmTopLevelIconSize'] ?? null );
gtm_css_compileCssVar( $block_style, "core-navigation-top-level-icon-spacing", gtm_css_parseSpacingValue( $attributes['gtmTopLevelIconSpacing'] ?? null ) );
gtm_css_compileCssVar( $block_style, "core-navigation-top-level-link-radius", gtm_css_parseBorderRadiusValue( $attributes['gtmTopLevelLinkRadius'] ?? null ) );
gtm_css_compileCssVar( $block_style, "core-navigation-top-level-link-padding", gtm_css_parseResponsiveBoxProps( $attributes['gtmTopLevelLinkPadding'] ?? null ) );
gtm_css_compileCssVar( $block_style, "core-navigation-top-level-link-color", gtm_css_parseColorValue( $attributes['gtmTopLevelLinkColor'] ?? null ) );
gtm_css_compileCssVar( $block_style, "core-navigation-top-level-link-bg", gtm_css_parseColorValue( $attributes['gtmTopLevelLinkBg'] ?? null ) );
gtm_css_compileCssVar( $block_style, "core-navigation-top-level-link-hover-color", gtm_css_parseColorValue( $attributes['gtmTopLevelLinkHoverColor'] ?? null ) );
gtm_css_compileCssVar( $block_style, "core-navigation-top-level-link-hover-bg", gtm_css_parseColorValue( $attributes['gtmTopLevelLinkHoverBg'] ?? null ) );
/* Sub level */
gtm_css_compileCssVar( $block_style, "core-navigation-sub-level-item-typography", gtm_css_parseTypographyProps( $attributes['gtmSubLevelItemTypography'] ?? null ) );
gtm_css_compileCssVar( $block_style, "core-navigation-sub-level-item-spacing", gtm_css_parseSpacingValue( $attributes['gtmSubLevelItemSpacing'] ?? null ) );
gtm_css_compileCssVar( $block_style, "core-navigation-sub-level-icon-size", $attributes['gtmSubLevelIconSize'] ?? null );
gtm_css_compileCssVar( $block_style, "core-navigation-sub-level-icon-spacing", gtm_css_parseSpacingValue( $attributes['gtmSubLevelIconSpacing'] ?? null ) );
gtm_css_compileCssVar( $block_style, "core-navigation-sub-level-link-radius", gtm_css_parseBorderRadiusValue( $attributes['gtmSubLevelLinkRadius'] ?? null ) );
gtm_css_compileCssVar( $block_style, "core-navigation-sub-level-link-padding", gtm_css_parseResponsiveBoxProps( $attributes['gtmSubLevelLinkPadding'] ?? null ) );
gtm_css_compileCssVar( $block_style, "core-navigation-sub-level-link-color", gtm_css_parseColorValue( $attributes['gtmSubLevelLinkColor'] ?? null ) );
gtm_css_compileCssVar( $block_style, "core-navigation-sub-level-link-bg", gtm_css_parseColorValue( $attributes['gtmSubLevelLinkBg'] ?? null ) );
gtm_css_compileCssVar( $block_style, "core-navigation-sub-level-link-hover-color", gtm_css_parseColorValue( $attributes['gtmSubLevelLinkHoverColor'] ?? null ) );
gtm_css_compileCssVar( $block_style, "core-navigation-sub-level-link-hover-bg", gtm_css_parseColorValue( $attributes['gtmSubLevelLinkHoverBg'] ?? null ) );
/* Submenu appearance */
gtm_css_compileCssVar( $block_style, "core-navigation-submenu-spacing", gtm_css_parseSpacingValue( $attributes['gtmSubmenuSpacing'] ?? null ) );
gtm_css_compileCssVar( $block_style, "core-navigation-submenu-padding", gtm_css_parseResponsiveBoxProps( $attributes['gtmSubmenuPadding'] ?? null ) );
if ( $shouldHaveSubmenuAppearance ) {
gtm_css_compileCssVar( $block_style, "core-navigation-submenu-width", $attributes['gtmSubmenuWidth'] ?? null );
gtm_css_compileCssVar( $block_style, "core-navigation-submenu-radius", gtm_css_parseBorderRadiusValue( $attributes['gtmSubmenuRadius'] ?? null ) );
gtm_css_compileCssVar( $block_style, "core-navigation-submenu-bg", gtm_css_parseColorValue( $attributes['gtmSubmenuBg'] ?? null ) );
}
/* Overlay menu */
if ( ( $attributes['overlayMenu'] ?? '' ) !== 'never' ) {
gtm_css_compileCssVar( $block_style, "core-navigation-overlay-menu-icon-size", $attributes['gtmOverlayMenuIconSize'] ?? null );
gtm_css_compileCssVar( $block_style, "core-navigation-overlay-menu-close-icon-size", $attributes['gtmOverlayMenuCloseIconSize'] ?? null );
gtm_css_compileCssVar( $block_style, "core-navigation-overlay-menu-submenu-indent", gtm_css_parseSpacingValue( $attributes['gtmOverlayMenuSubmenuIndent'] ?? null ) );
gtm_css_compileCssVar( $block_style, "core-navigation-overlay-menu-icon-color", gtm_css_parseColorValue( $attributes['gtmOverlayMenuIconColor'] ?? null ) );
gtm_css_compileCssVar( $block_style, "core-navigation-overlay-menu-close-icon-color", gtm_css_parseColorValue( $attributes['gtmOverlayMenuCloseIconColor'] ?? null ) );
gtm_css_compileCssVar( $block_style, "core-navigation-overlay-menu-bg", gtm_css_parseColorValue( $attributes['gtmOverlayMenuBg'] ?? null ) );
gtm_css_compileCssVar( $block_style, "core-navigation-overlay-menu-link-color", gtm_css_parseColorValue( $attributes['gtmOverlayMenuLinkColor'] ?? null ) );
gtm_css_compileCssVar( $block_style, "core-navigation-overlay-menu-link-hover-color", gtm_css_parseColorValue( $attributes['gtmOverlayMenuLinkHoverColor'] ?? null ) );
}
// Apply to output
$block_style['style'] = ['{{BLOCK}}' => $block_style['style']];
return [
'classes' => array_merge( $output['classes'], $block_style['classes'] ),
'style' => array_replace_recursive( $output['style'], $block_style['style'] ),
];
}