* * @version 1.0.0 * @package HFG */ namespace HFG\Core; use HFG\Core\Builder\Abstract_Builder; use HFG\Core\Interfaces\Builder; use HFG\Core\Settings\Config; use HFG\Main; use HFG\Traits\Core; use WP_Customize_Manager; /** * Class Customizer * * @package HFG\Core */ class Customizer { use Core; /** * Holds the builders to register. * * @since 1.0.0 * @access private * @var array $builders */ private $builders = array(); /** * Customizer constructor. * * @since 1.0.0 * @access public */ public function __construct() { $theme_support = get_theme_support( 'hfg_support' ); $theme_support = apply_filters( 'hfg_theme_support_filter', $theme_support ); if ( empty( $theme_support ) ) { return; } $theme_support = reset( $theme_support ); $theme_support = apply_filters( 'hfg_support_components_filter', $theme_support ); foreach ( $theme_support['builders'] as $builder => $components ) { if ( class_exists( $builder ) && in_array( 'HFG\Core\Interfaces\Builder', class_implements( $builder ) ) ) { /** * A new builder instance. * * @var Abstract_Builder $new_builder */ $new_builder = new $builder(); foreach ( $components as $component ) { $new_builder->register_component( $component ); } $this->builders[ $new_builder->get_id() ] = $new_builder; } } if ( is_admin() ) { add_action( 'customize_controls_enqueue_scripts', array( $this, 'scripts' ) ); add_action( 'customize_controls_print_footer_scripts', array( $this, 'template' ) ); } if ( is_admin() || is_customize_preview() ) { add_action( 'customize_register', array( $this, 'register' ), PHP_INT_MAX ); add_action( 'customize_preview_init', array( $this, 'preview_js' ), PHP_INT_MAX ); } add_filter( 'body_class', array( $this, 'hfg_body_classes' ) ); } /** * Classes for the body tag. * * @param array $classes List of body classes. * * @return array * @since 1.0.0 * @access public */ public function hfg_body_classes( $classes ) { if ( is_customize_preview() ) { $classes[] = 'customize-previewing'; } $sidebar_class = 'menu_sidebar_' . get_theme_mod( 'hfg_header_layout_sidebar_layout', 'slide_left' ); $classes[] = $sidebar_class; return $classes; } /** * Customizer script register. * * @since 1.0.0 * @access public */ public function scripts() { $suffix = $this->get_assets_suffix(); wp_enqueue_style( 'hfg-customizer-control', esc_url( Config::get_url() ) . '/assets/css/admin/customizer/customizer' . $suffix . '.css', array(), Main::VERSION ); wp_register_script( 'hfg-layout-builder', esc_url( Config::get_url() ) . '/assets/js/customizer/builder' . $suffix . '.js', array( 'customize-controls', 'jquery-ui-resizable', 'jquery-ui-droppable', 'jquery-ui-draggable', ), Main::VERSION, true ); wp_localize_script( 'hfg-layout-builder', 'HFG_Layout_Builder', array( 'footer_moved_widgets_text' => '', 'builders' => $this->get_builders_data(), 'is_rtl' => is_rtl(), ) ); wp_enqueue_script( 'hfg-layout-builder' ); /** * A Builder Class instance. * * @var Builder $builder */ foreach ( $this->builders as $builder ) { $builder->scripts(); } } /** * Returns list of builders. * * @return array * @since 1.0.0 * @access public */ public function get_builders_data() { $builders_list = array(); /** * A Builder Class instance. * * @var Builder $builder */ foreach ( $this->builders as $key => $builder ) { $builders_list[ $key ] = $builder->get_builder(); } return $builders_list; } /** * Return builder object or whole list. * * @param string $name Builder id. * * @return Abstract_Builder[]|Abstract_Builder Builder object or list. */ public function get_builders( $name = '' ) { if ( isset( $this->builders[ $name ] ) ) { return $this->builders[ $name ]; } return $this->builders; } /** * Binds JS handlers to make Theme Customizer preview reload changes asynchronously. * * @since 1.0.0 * @access public */ public function preview_js() { if ( ! is_customize_preview() ) { return; } $suffix = $this->get_assets_suffix(); wp_enqueue_script( 'hfg-customizer', esc_url( Config::get_url() ) . '/assets/js/customizer/customizer' . $suffix . '.js', array( 'customize-preview', 'customize-selective-refresh', ), Main::VERSION, true ); } /** * Register builder controls and settings. * * @param WP_Customize_Manager $wp_customize The Customize Manager. * * @since 1.0.0 * @access public */ public function register( WP_Customize_Manager $wp_customize ) { /** * A Builder Class instance. * * @var Builder $builder */ foreach ( $this->builders as $builder ) { $builder->customize_register( $wp_customize ); } } /** * The Customizer templates. * * @since 1.0.0 * @access public */ public function template() { require_once Config::get_path() . '/templates/rows.php'; ?>