HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux WebLive 5.15.0-79-generic #86-Ubuntu SMP Mon Jul 10 16:07:21 UTC 2023 x86_64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/html/wptoho/wp-content/themes/themify-ultra/theme-functions.php
<?php
/***************************************************************************
 *  					Theme Functions
 * 	----------------------------------------------------------------------
 * 						DO NOT EDIT THIS FILE
 *	----------------------------------------------------------------------
 *
 *  					Copyright (C) Themify
 * 						https://themify.me
 *
 *  To add custom PHP functions to the theme, create a child theme (https://themify.me/docs/child-theme) and add it to the child theme functions.php file.
 *  They will be added to the theme automatically.
 *
 ***************************************************************************/
/////// Constants ///////
/** Compatibility with portfolio posts plugin */
const THEMIFY_PORTFOLIO_POSTS_COMPAT_MODE=true;
/////// Actions ////////
// Init post, page and additional post types if they exist
add_action( 'after_setup_theme', 'themify_theme_init_types' );

// Enqueue scripts and styles required by theme
add_filter( 'themify_google_fonts', 'themify_theme_google_fonts' );

add_filter('themify_register_sidebars','themify_theme_register_sidebars');

// Add additional sidebar
add_action( 'themify_content_after', 'themify_theme_add_sidebar_alt' );

// CPT Sidebars
add_filter( 'themify_post_type_theme_sidebars', 'themify_CPT_sidebar_option', 10, 2 );

// Exclude CPT for sidebar
add_filter( 'themify_exclude_CPT_for_sidebar', 'themify_CPT_exclude_sidebar' );

// Set class on body tag according to layout width
add_filter( 'body_class', 'themify_theme_body_class', 99 );

Themify_Enqueue_Assets::$mediaMaxWidth=false;
/**
 * Enqueue Stylesheets and Scripts in header
 * will be called class-themify-enqueue.php 
 * @since 1.0.0
 */

function themify_theme_enqueue_header() {
	global $themify;
	// Get theme version for Themify theme scripts and styles
	$theme_version = Themify_Enqueue_Assets::$themeVersion;
	$header=themify_theme_get_header_design();
	
	Themify_Mega_Menu_Walker::$disableAssetsLoading=$header==='header-leftpane' || $header==='header-rightpane' || $header==='header-minbar' || $header==='header-overlay'  || $header==='header-slide-out';
	// Prepare JS variables
	$themify_script_vars = array(
		'headerType'=>$header,
		'sticky_header'=>themify_theme_sticky_logo(),
		'pageLoaderEffect' => page_loader_status(),
		'infiniteEnable'=>('slider' !== $themify->post_layout && ( is_home() || is_archive() || themify_is_query_page() || is_search() ))?1:0
	);
	///////////////////
	//Enqueue scripts
	///////////////////
	if ( themify_theme_is_fullpage_scroll() && (!class_exists('Themify_Builder_Model',false) || !Themify_Builder_Model::is_front_builder_activate()) ){
	    $themify_script_vars['breakpoints']=themify_get_breakpoints();
	    if('on' !== themify_get( 'section_scrolling_mobile' )){
		$themify_script_vars['f_s_d']=$themify_script_vars['breakpoints']['tablet'][1]+1;
	    }
	    Themify_Enqueue_Assets::addPrefetchJs(THEME_URI . '/js/modules/fullpage.js',$theme_version);
	    Themify_Enqueue_Assets::preFetchAnimtion();
	    if( 'on' !== themify_get('section_scrolling_parallax') ) {
		$themify_script_vars['fullpage_parallax']=true;
	    }

	    $media=!empty($themify_script_vars['f_s_d'])?'(min-width:'.$themify_script_vars['f_s_d'].'px)':null;
	    themify_enque_style( 'themify-section-scroll', THEME_URI . '/styles/fullpage/section-scroll.css', null, $theme_version,$media,true);
	}

	// Slide mobile navigation menu
	Themify_Enqueue_Assets::preFetchSideMenuJs();

	if($themify_script_vars['infiniteEnable']===1){
		$themify_script_vars['autoInfinite']= themify_check( 'setting-autoinfinite',true ) ? 'no': 'auto';
		$themify_script_vars['infiniteURL']=!themify_check( 'setting-infinite-url',true ) ? 1 :'';
	}
	if( themify_is_woocommerce_active() ) {
            $cart_delay=intval(themify_get( 'setting-cart_show_seconds','',true ));
	    if($cart_delay>0){
                $themify_script_vars['ajaxCartSeconds']=$cart_delay;
            }
            if(is_product() && !themify_check( 'setting-single_ajax_cart',true )){
                $themify_script_vars['ajaxSingleCart']=true;
                $themify_script_vars['redirect'] = get_option( 'woocommerce_cart_redirect_after_add' ) === 'yes' ? wc_get_cart_url() : false;
            }
            Themify_Enqueue_Assets::addPrefetchJs(THEME_URI . '/js/modules/wc.js',$theme_version);
	}
	$dark_mode=themify_theme_dark_mode();
	if ( 'schedule'===$dark_mode ) {
        $start = themify_get( 'setting-dark_mode_start',null,true );
        $end = themify_get( 'setting-dark_mode_end',null,true );
        if(!empty($start) && !empty($end)){
            $themify_script_vars['darkmode']=array(
                'start'=>$start,
                'end'=>$end
            );
        }
	} 
	elseif ( 'user' === $dark_mode ) {
		$themify_script_vars['darkmode'] = 1;
	}

	if ( themify_check( 'menu_tooltips' ) ) {
		Themify_Enqueue_Assets::addLocalization( 'menu_tooltips', '#main-nav', 'arr' );
	}

	// Pass variable values to JavaScript
	wp_localize_script( 'themify-main-script', 'themifyScript', apply_filters('themify_script_vars', $themify_script_vars ) );
	if ( 'header-menu-split' === $header ) {
		add_filter( 'themify_theme_show_site_logo', '__return_false' ); // disable default div#site-logo in the header
		add_filter( 'wp_nav_menu_objects', 'themify_theme_split_menu_wp_nav_menu_objects', 10, 2 );
		if('header-menu-split' !== themify_get('setting-header_design','',true)){
           add_filter( 'wp_nav_menu_args', 'themify_theme_split_menu_args_filter');
        }
	}

	/**
	 * WooCommerce Product Search patch
	 * @link https://woocommerce.com/products/woocommerce-product-search/
	 */
	if ( ! is_admin() && themify_is_woocommerce_active() && function_exists( 'woocommerce_product_search_boot' ) ) {
		themify_enque_script( 'themify_woocommerce_product_search', THEME_URI . '/js/modules/woocommerce-product-search.js', Themify_Enqueue_Assets::$themeVersion, array( 'jquery' ) );
	}
}

function themify_theme_split_menu_updated($manager) {
    if(!empty( $manager ) && 'header-menu-split'===themify_theme_get_header_design()){
        themify_clear_menu_cache();
    }
}

/**
 * Enqueue Google Fonts/Styles
 * @since 1.0.0
 */
function themify_theme_enqueue_footer() {
	global $themify;
	$theme_version = Themify_Enqueue_Assets::$themeVersion;
	add_action('themify_after_skin_css','themify_theme_after_skin');
	
	$header = themify_theme_get_header_design();

	if ( $header !== 'default' && $header !== 'header-none') {
		if('header-menu-split' === $header){
			Themify_Enqueue_Assets::loadThemeStyleModule('site-logo');
		}
		themify_enque_style( 'ultra-header', THEME_URI . '/styles/headers/' . $header . '.css', null, $theme_version );
		Themify_Enqueue_Assets::addMobileMenuCss('header-'.$header.'-menu',THEME_URI . '/styles/headers/media/'.$header.'.css');
	}
	
	// Themify Mobile Menu
	$menu_style = themify_theme_get_menu_style();
	if (  $menu_style!==false ) {
	    if(in_array($menu_style, array('boxed','dropdown','fadein-down','flip-down','flipin-left','flipin-right','slide-left-content','slidein-left','slidein-right','split','swing-left-to-right','swing-right-to-left','swing-top-to-bottom','swipe-left','swipe-right'),true)){
			Themify_Enqueue_Assets::addMobileMenuCss('menu-animations',THEME_URI . '/styles/menus/animations.css');
	    }
	    Themify_Enqueue_Assets::addMobileMenuCss( 'mobile-menu-' . $menu_style ,  THEME_URI . '/styles/menus/'. $menu_style . '.css');
	}
	if (! empty($themify->google_fonts )){
		Themify_Enqueue_Assets::addGoogleFont(array(substr( $themify->google_fonts, 0, -1 )));
	}
	// Themify base styling
	if( themify_is_woocommerce_active() ) {
		Themify_Enqueue_Assets::addPrefetchJs(THEME_URI.'/js/modules/wc.js',$theme_version);
	}
}

function themify_theme_after_skin(){
	$font = themify_theme_get_header_font();
	$color = themify_theme_get_header_color();
	if ( $font !== 'default' ) {
		$font=str_replace('theme-font-','',$font);
		themify_enque_style( 'ultra-font-'.$font, THEME_URI . '/styles/fonts/' . $font . '.min.css', null,  Themify_Enqueue_Assets::$themeVersion );
	}
	if ($color !== 'default' ) {
		$color=str_replace('theme-color-','',$color);
		themify_enque_style( 'ultra-color-'.$color, THEME_URI . '/styles/colors/' . $color . '.css', null,  Themify_Enqueue_Assets::$themeVersion );	
	}
	if(themify_theme_is_single_infinite_enabled()){
		Themify_Enqueue_Assets::addPrefetchJs(THEME_URI . '/js/modules/single-infinite.js',Themify_Enqueue_Assets::$themeVersion);
		Themify_Enqueue_Assets::addPrefetchJs(THEMIFY_URI . '/js/modules/infinite.js',THEMIFY_VERSION);
		themify_theme_loaded_css();
	}
    if('always'===themify_theme_dark_mode()){
        Themify_Enqueue_Assets::loadThemeStyleModule('dark-mode');
    }
}
	
add_action( 'comment_form', 'themify_theme_comment_form_css' );

function themify_theme_comment_form_css(){
	remove_action( 'comment_form', 'themify_comment_form_css' );
	Themify_Enqueue_Assets::loadThemeStyleModule('comments');
}
add_action( 'pre_get_search_form', 'themify_theme_search_form_css' );
function themify_theme_search_form_css(){
    remove_action( 'pre_get_search_form', 'themify_theme_search_form_css' );
    Themify_Enqueue_Assets::loadThemeStyleModule('search-form');
}
function themify_theme_loaded_css(){
	?>
	<template id="tf_infinity_css">
	<?php echo json_encode(Themify_Enqueue_Assets::get_css())?>
	</template>
	<?php
}

/**
 * Load Google fonts used by the theme
 *
 * @return array
 */
function themify_theme_google_fonts(array $fonts= array()):array {
	 if(!themify_get_skin()){
		$font = themify_theme_get_header_font();

		/* translators: If there are characters in your language that are not supported by Public Sans, translate this to 'off'. Do not translate into your own language. */
		if ( 'off' !== _x( 'on', 'Public Sans font: on or off', 'themify' ) ) {
			$fonts['public-sans'] = 'Public+Sans:400i,600i,700i,400,600,700';
		}
		if( $font === 'theme-font-slab' || $font === 'theme-font-slab-sans' ) {
			/* translators: If there are characters in your language that are not supported by Roboto Slab, translate this to 'off'. Do not translate into your own language. */
			if ( 'off' !== _x( 'on', 'Roboto Slab font: on or off', 'themify' ) ) {
				$fonts['roboto-slab'] = 'Roboto+Slab:300,700,400';
			}
		}
		if( $font === 'theme-font-serif' || $font === 'theme-font-slab-sans' ) {
			/* translators: If there are characters in your language that are not supported by Sorts Mill Goudy, translate this to 'off'. Do not translate into your own language. */
			if ( 'off' !== _x( 'on', 'Sorts Mill Goudy font: on or off', 'themify' ) ) {
				$fonts['sorts-mill-goudy'] = 'Sorts+Mill+Goudy:400,400i';
			}
		}
    }
    return apply_filters( 'themify_theme_google_fonts', $fonts );
}
//Remove class has-post-thumbnail when hide_image is yes 

add_filter('post_class','themify_hide_feature_image',10,1);

function themify_hide_feature_image($classes){
	global $themify;
	if($themify->hide_image==='yes' && ($index=array_search('has-post-thumbnail', $classes))!==false){
		unset($classes[$index]);
	}
	return $classes;
}

/**
 * Check whether fullpage scrolling is enabled
 *
 * @return bool
 * @since 1.5.4
 */
function themify_theme_is_fullpage_scroll():bool {
	static $is = null;
	if($is===null){
		$is = is_search() ? false :  'yes' === themify_get( 'section_full_scrolling' );
		$is = apply_filters( 'themify_theme_is_fullpage_scroll', $is );
	}
	return $is;
}

function themify_theme_is_footer_fullpage_scroll():bool{
	static $is=null;
	if($is===null){
		$is=themify_theme_is_fullpage_scroll() && themify_check( 'fullpage_footer_section' )?true:false;
	}
	return $is;
}
/**
 * Logic for fixed header. Checks, if it applies, custom fields first and then theme settings.
 *
 * @since 1.0.0
 *
 * @return string
 */
function themify_theme_fixed_header():string {
	static $is = NULL;
	if($is===null){
	$header = themify_theme_get_header_design();
	if ( in_array( $header, array( 'header-leftpane', 'header-minbar','header-bottom', 'boxed-content', 'none', 'header-rightpane','header-slide-down' ),true ) ) {
		$is = '';
		return $is;
	}
	$fixed_header_field = themify_get( 'fixed_header' );
		if ( 'yes' === $fixed_header_field ) {
			$is = 'fixed-header-enabled';
			return $is;
		} 
		elseif ( 'no' === $fixed_header_field ) {
			$is = '';
			return $is;
		}
		$is = themify_check( 'setting-fixed_header_disabled',true ) ? '' : 'fixed-header-enabled';
	}
	return $is;
}

/* Custom Write Panels
/***************************************************************************/

///////////////////////////////////////
// Build Write Panels
///////////////////////////////////////

if ( ! function_exists( 'themify_theme_init_types' ) ) {
	/**
	 * Initialize custom panel with its definitions
	 * Custom panel definitions are located in admin/post-type-TYPE.php
	 * @since 1.0.0
	 */
	function themify_theme_init_types() {
	    add_theme_support( 'post-thumbnails' );
	    // Load Themify Mega Menu
	    add_theme_support( 'themify-mega-menu' );
	    // Load Themify Toggle dropdown menu
	    add_theme_support( 'themify-toggle-dropdown' );

		/* disable Builder lightbox's default template */
		add_theme_support( 'themify-builder-lightbox-template' );

	    $supportedCss=array(
		'auto_tiles',
		'grid2-thumb',
		'grid2',
		'grid3',
		'grid4',
		'grid5',
		'grid6',
		'list-large-image',
		'list-post',
		'list-thumb-image',
		'widget_calendar',
		'widget_recent-comments',
		'widget_text',
		'widget_themify-feature-posts',
		'widget_themify-flickr',
		'widget_themify-social-links',
		'comments'
	    );
	    foreach ($supportedCss as $css){
		Themify_Enqueue_Assets::add_theme_support_css($css);
	    }
	    if(themify_is_woocommerce_active()){
		// Load Sticky cart feature
		add_theme_support( 'themify-sticky-buy' );
		// Load Single Product Accordion tab
		add_theme_support( 'themify-wc-accordion-tabs' );
		//add wc css 
		Themify_Enqueue_Assets::add_theme_support_css( 'wc' );
		$supportedCss=array('wc_account','wc_cart','wc_checkout','wc_single_product');
		foreach ($supportedCss as $css){
		    Themify_Enqueue_Assets::add_theme_support_css($css);
		}
	    }
	    unset($supportedCss);
	    
	    require_once( THEME_DIR.'/admin/post-type-portfolio.php' );
	    register_nav_menus( array(
		    'main-nav' => __( 'Main Navigation', 'themify' ),
		    'footer-nav' => __( 'Footer Navigation', 'themify' ),
	    ));
	    if(is_child_theme()){
		    include THEME_DIR.'/deprecated.php';
	    }
	    add_action('customize_save_after', 'themify_theme_split_menu_updated');
	}
}
/**
 * Register sidebars
 * @since 1.0.0
 */
function themify_theme_register_sidebars($sidebars) {
	$sidebars[]=array(
			'name' => __('Sidebar Narrow', 'themify'),
			'id' => 'sidebar-alt',
			'before_widget' => '<div id="%1$s" class="widget %2$s">',
			'after_widget' => '</div>',
			'before_title' => '<h4 class="widgettitle">',
			'after_title' => '</h4>'
		);
	$sidebars[]=array(
		'name' => __( 'Footer Social Widget', 'themify' ),
			'id' => 'footer-social-widget',
			'before_widget' => '<div id="%1$s" class="widget %2$s">',
			'after_widget' => '</div>',
			'before_title' => '<strong class="widgettitle">',
			'after_title' => '</strong>'
	);

	// Header Sidebars
	themify_register_grouped_widgets( array(
		'headerwidget-4col' => 4,
		'headerwidget-3col'=> 3,
		'headerwidget-2col' => 2,
		'headerwidget-1col' => 1,
		'none'=> 0
	), array(
		'sidebar_name' => __( 'Header Widget', 'themify' ),
		'sidebar_id' => 'header-widget',
		'before_widget' => '<div id="%1$s" class="widget %2$s">',
		'after_widget' => '</div>',
		'before_title' => '<h4 class="widgettitle">',
		'after_title' => '</h4>',
	), 'setting-header_widgets', 'headerwidget-3col' );

	return $sidebars;
}

if( ! function_exists('themify_theme_add_sidebar_alt') ) {
	/**
	 * Includes second sidebar
	 * @since 1.0.0
	 */
	function themify_theme_add_sidebar_alt() {
		global $themify;
		if( 'sidebar2' === $themify->layout || 'sidebar2 content-left' === $themify->layout || 'sidebar2 content-right' === $themify->layout ){
			get_template_part( 'includes/sidebar-alt');
		}
	}
}

if( ! function_exists('themify_CPT_sidebar_option') ) {
	/**
	 * Includes second sidebar
	 * @since 2.0.1
	 */
	function themify_CPT_sidebar_option($option,$default = true) {

		$option = array();

		if ($default) {
			$option[] = array('value' => 'default', 'img' => 'themify/img/default.svg', 'selected' => true, 'title' => __('Default', 'themify'));
		}

		return array_merge($option, array(
					array('value' => 'sidebar1', 'img' => 'images/layout-icons/sidebar1.png', 'selected' => true, 'title' => __('Sidebar Right', 'themify')),
					array('value' => 'sidebar1 sidebar-left', 'img' => 'images/layout-icons/sidebar1-left.png', 'title' => __('Sidebar Left', 'themify')),
					array('value' => 'sidebar2', 'img' => 'images/layout-icons/sidebar2.png', 'title' => __('Left and Right', 'themify')),
					array('value' => 'sidebar2 content-left', 'img' => 'images/layout-icons/sidebar2-content-left.png', 'title' => __('2 Right Sidebars', 'themify')),
					array('value' => 'sidebar2 content-right', 'img' => 'images/layout-icons/sidebar2-content-right.png', 'title' => __('2 Left Sidebars', 'themify')),
					array('value' => 'sidebar-none', 'img' => 'images/layout-icons/sidebar-none.png', 'title' => __('No Sidebar', 'themify')),
					array('value' => 'full_width', 'img' => 'themify/img/fullwidth.svg', 'title' => __('Fullwidth (Builder Page)', 'themify')),
				) );
	}
}

if( ! function_exists('themify_CPT_exclude_sidebar') ) {
	/**
	 * Disable showing sidebar options (Settings > Default Layouts) for specific post types
	 * @since 2.0.1
	 */
	function themify_CPT_exclude_sidebar($CPT = array()):array {
		$CPT[]='portfolio';
		if ( themify_is_woocommerce_active() ) {
			$CPT[] = 'product';
		}
		return $CPT;
	}
}

// Widget Search ajax feature
if( ! function_exists('themify_theme_widget_search_ajax_option') ) {
    function themify_theme_widget_search_ajax_option($widget, $return, $instance) {
        if($widget->id_base!=='search'){
            return;
        }
        $key='tf_search_ajax';
        $v = isset( $instance[$key] ) ? $instance[$key] : '';
        ob_start();
        ?>
        <p>
            <label for="<?php echo esc_attr( $widget->get_field_id( $key ) ) ?>">
                <input class="widefat" <?php echo checked( $v ,1, false ) ?> value="1" id="<?php echo esc_attr( $widget->get_field_id( $key ) ) ?>" name="<?php echo esc_attr( $widget->get_field_name( $key ) ) ?>" type="checkbox" />
                <?php _e( 'Enable Ajax search', 'themify' ) ?>
            </label>
        </p>
        <p>
            <label for="<?php echo esc_attr( $widget->get_field_id( 'tf_search_placeholder' ) ) ?>"><?php _e( 'Placeholder Text', 'themify' ) ?></label>
			<input class="widefat" value="<?php echo isset( $instance['tf_search_placeholder'] ) ? esc_attr( $instance['tf_search_placeholder'] ) : ''; ?>" id="<?php echo esc_attr( $widget->get_field_id( 'tf_search_placeholder' ) ) ?>" name="<?php echo esc_attr( $widget->get_field_name( 'tf_search_placeholder' ) ) ?>" />
        </p>
        <?php
        ob_get_flush();
    }
    add_action( 'in_widget_form', 'themify_theme_widget_search_ajax_option', 10, 3 );
}

if ( ! function_exists( 'themify_theme_widget_search_ajax_update' ) ) {
    add_action( 'widget_update_callback', 'themify_theme_widget_search_ajax_update', 10, 2 );
    function themify_theme_widget_search_ajax_update( $instance, $new_instance ) {
        $key='tf_search_ajax';
        $instance[$key] = ! empty( $new_instance[$key] ) ? $new_instance[$key] : '';
        $instance['tf_search_placeholder'] = ! empty( $new_instance['tf_search_placeholder'] ) ? $new_instance['tf_search_placeholder'] : '';
        return $instance;
    }
}
function themify_theme_search_widget( $instance, $widget_obj, $args){
    if($widget_obj instanceof WP_Widget_Search ){
        global $tf_isWidget, $tf_search_placeholder;
        $tf_isWidget=!empty($instance['tf_search_ajax']);
		$tf_search_placeholder = ! empty( $instance['tf_search_placeholder'] ) ? $instance['tf_search_placeholder'] : null;
    }
    return $instance;
}
add_filter('widget_display_callback','themify_theme_search_widget',100,3);


/**
 * Enable menu link highlight.
 *
 * @since 1.9.9
 *
 * @param boolean $allow.
 *
 * @return boolean.
 */
add_filter( 'themify_menu_highlight_link', '__return_true', 10 );

if ( ! function_exists( 'themify_theme_custom_post_css' ) ) {
	/**
	 * Outputs custom post CSS at the end of a post
	 *
	 * @since 1.0.0
	 */
	function themify_theme_custom_post_css() {
		global $themify;

		if ( is_singular() || themify_is_shop() ) {
			$post_id = get_the_ID();
			$queried_id = get_queried_object_id();

			if( ! empty( $post_id ) && ! empty( $queried_id ) && $post_id !== $queried_id ) {
				global $post;
				$old_post = $post;
				$post = get_post( $queried_id ) ? get_post( $queried_id ) : $post;
			}

			if ( is_page() ) {
				$entry_id = '.page-id-' . $post_id;
				$archive_entry_id = '.page-' . $post_id;
			} elseif ( themify_is_shop() ) {
				$entry_id = '.woocommerce';
				$archive_entry_id = '.post-' . $post_id;
			} else {
				$entry_id = '.postid-' . $post_id;
				$archive_entry_id = '.post-' . $post_id;
			}
			$headerwrap = $entry_id . ' #headerwrap';
			$site_logo = $entry_id . ' #site-logo';
			$site_description = $entry_id . ' #site-description';
			$main_nav = $entry_id . ' #main-nav';
			$navbar_wrapper = $entry_id . ' .navbar-wrapper';
			$css = array();
			$style = '';
			$rules = array();
			$header_type = themify_get( 'header_wrap' );

			if ( 'transparent' !== $header_type ) {
				$rules = array(
					"$entry_id #site-logo span:after, $entry_id #headerwrap #searchform, $entry_id #main-nav .current_page_item a, $entry_id #main-nav .current-menu-item a" => array(
							array(
								'prop' => 'border-color',
								'key'  => 'headerwrap_text_color'
							),
					),
				);
				if ( 'solid' === $header_type || !$header_type || 'video' === $header_type ) {
					$rules[$headerwrap] = array(
						array(
							'prop' => 'background-color',
							'key'  => 'background_color'
						),
						array(
							'prop' => 'background-image',
							'key'  => 'background_image',
							'dependson' => array(
								'prop' => 'background-repeat',
								'key'  => 'background_repeat'
							),
						)
					);
				}
			}
						
			$custom_color =  themify_get( 'color_scheme_mode', 'color-presets' ) === 'color-custom';
			$custom_font =  themify_get( 'typography_mode' ) === 'typography-custom';
			if (($custom_color || $custom_font)  && ( is_singular() || themify_is_shop() ) ) {
				if($custom_font){
					$rules = array_merge( $rules, array(
						'.skin-styles' => array(
							array(
								'prop' => 'font-family',
								'key'  => 'body_font'
							),
							array(
								'prop' => 'color',
								'key'  => 'body_text_color'
							),
						),
						'.skin-styles .post-meta, .skin-styles #site-description, .skin-styles .post-date .year, .skin-styles .post-date .month, .skin-styles .post-date .day, .skin-styles .loops-wrapper .entry-content' => array(
							array(
								'prop' => 'font-family',
								'key'  => 'body_font'
							),
						),
					));
					// No space between .skin-styles and $main_nav because the latter has the body classes prepended.
					$rules[".skin-styles a, .skin-styles .post-nav .arrow"] = array(
						array(
							'prop' => 'color',
							'key'  => 'body_link_color'
						),
					);

					$rules['.skin-styles h1, .skin-styles h2, .skin-styles h3, .skin-styles h4, .skin-styles h5, .skin-styles h6'] = array(
						array(
							'prop' => 'color',
							'key'  => 'heading_color'
						),
						array(
							'prop' => 'font-family',
							'key'  => 'heading_font'
						),
					);
				}
				if($custom_color){
					// Accent Background Color
					$rules['.skin-styles #headerwrap,.skin-styles #footerwrap,.skin-styles input[type=reset],.skin-styles input[type=submit],.skin-styles button,.skin-styles #respond #cancel-comment-reply-link,.skin-styles .commentlist .comment-reply-link,.skin-styles.footer-horizontal-left .back-top .arrow-up a,.skin-styles.footer-horizontal-right .back-top .arrow-up a,.skin-styles.footer-left-col .back-top .arrow-up a,.skin-styles.footer-right-col .back-top .arrow-up a,.skin-styles.woocommerce #content input.button,.skin-styles.woocommerce #respond input#submit,.skin-styles.woocommerce a.button,.skin-styles.woocommerce button.button,.skin-styles.woocommerce input.button,.skin-styles.woocommerce-page #content input.button,.skin-styles.woocommerce-page #respond input#submit,.skin-styles.woocommerce-page a.button,.skin-styles.woocommerce-page button.button,.skin-styles.woocommerce-page input.button,.skin-styles.woocommerce #content input.button.alt,.skin-styles.woocommerce #respond input#submit.alt,.skin-styles.woocommerce a.button.alt,.skin-styles.woocommerce button.button.alt,.skin-styles.woocommerce input.button.alt,.skin-styles.woocommerce-page #content input.button.alt,.skin-styles.woocommerce-page #respond input#submit.alt,.skin-styles.woocommerce-page a.button.alt,.skin-styles.woocommerce-page button.button.alt,.skin-styles.woocommerce-page input.button.alt,.skin-styles.woocommerce ul.products li.product .button,.skin-styles.woocommerce span.onsale,.skin-styles.woocommerce-page span.onsale,.skin-styles.woocommerce ul.products li.product .onsale,.skin-styles.woocommerce-page ul.products li.product .onsale,.skin-styles.woocommerce-checkout #payment div.payment_box,.skin-styles.woocommerce #content nav.woocommerce-pagination ul li a:focus,.skin-styles.woocommerce #content nav.woocommerce-pagination ul li a:hover,.skin-styles.woocommerce #content nav.woocommerce-pagination ul li span.current,.skin-styles.woocommerce nav.woocommerce-pagination ul li a:focus,.skin-styles.woocommerce nav.woocommerce-pagination ul li a:hover,.skin-styles.woocommerce nav.woocommerce-pagination ul li span.current,.skin-styles.woocommerce-page #content nav.woocommerce-pagination ul li a:focus,.skin-styles.woocommerce-page #content nav.woocommerce-pagination ul li a:hover,.skin-styles.woocommerce-page #content nav.woocommerce-pagination ul li span.current,.skin-styles.woocommerce-page nav.woocommerce-pagination ul li a:focus,.skin-styles.woocommerce-page nav.woocommerce-pagination ul li a:hover,.skin-styles.woocommerce-page nav.woocommerce-pagination ul li span.current,.skin-styles.woocommerce #content table.cart a.remove:hover,.skin-styles.woocommerce table.cart a.remove:hover,.skin-styles.woocommerce-page #content table.cart a.remove:hover,.skin-styles.woocommerce-page table.cart a.remove:hover'] = array(
						array(
							'prop' => 'background-color',
							'key'  => 'scheme_background'
						),
					);

					// Accent Font Color
					$rules['.skin-styles #headerwrap,.skin-styles #footerwrap,.footer-widgets .widgettitle,.skin-styles #site-description,.skin-styles input[type=reset],.skin-styles input[type=submit],.skin-styles button,.skin-styles #respond #cancel-comment-reply-link,.skin-styles .commentlist .comment-reply-link,.skin-styles .post-title a,.skin-styles #main-nav > li > a,.skin-styles #main-nav > .current_page_item > a,.skin-styles #main-nav > .current-menu-item > a,.skin-styles #main-nav > li > a:hover,.skin-styles.footer-horizontal-left .back-top .arrow-up a,.skin-styles.footer-horizontal-right .back-top .arrow-up a,.skin-styles.footer-left-col .back-top .arrow-up a,.skin-styles.footer-right-col .back-top .arrow-up a,.skin-styles.woocommerce #content input.button,.skin-styles.woocommerce #respond input#submit,.skin-styles.woocommerce a.button,.skin-styles.woocommerce button.button,.skin-styles.woocommerce input.button,.skin-styles.woocommerce-page #content input.button,.skin-styles.woocommerce-page #respond input#submit,.skin-styles.woocommerce-page a.button,.skin-styles.woocommerce-page button.button,.skin-styles.woocommerce-page input.button,.skin-styles.woocommerce #content input.button.alt,.skin-styles.woocommerce #respond input#submit.alt,.skin-styles.woocommerce a.button.alt,.skin-styles.woocommerce button.button.alt,.skin-styles.woocommerce input.button.alt,.skin-styles.woocommerce-page #content input.button.alt,.skin-styles.woocommerce-page #respond input#submit.alt,.skin-styles.woocommerce-page a.button.alt,.skin-styles.woocommerce-page button.button.alt,.skin-styles.woocommerce-page input.button.alt,.skin-styles.woocommerce ul.products li.product .button,.skin-styles.woocommerce span.onsale,.skin-styles.woocommerce-page span.onsale,.skin-styles.woocommerce ul.products li.product .onsale,.skin-styles.woocommerce-page ul.products li.product .onsale,.skin-styles.woocommerce-checkout #payment div.payment_box,.skin-styles.woocommerce #content nav.woocommerce-pagination ul li a:focus,.skin-styles.woocommerce #content nav.woocommerce-pagination ul li a:hover,.skin-styles.woocommerce #content nav.woocommerce-pagination ul li span.current,.skin-styles.woocommerce nav.woocommerce-pagination ul li a:focus,.skin-styles.woocommerce nav.woocommerce-pagination ul li a:hover,.skin-styles.woocommerce nav.woocommerce-pagination ul li span.current,.skin-styles.woocommerce-page #content nav.woocommerce-pagination ul li a:focus,.skin-styles.woocommerce-page #content nav.woocommerce-pagination ul li a:hover,.skin-styles.woocommerce-page #content nav.woocommerce-pagination ul li span.current,.skin-styles.woocommerce-page nav.woocommerce-pagination ul li a:focus,.skin-styles.woocommerce-page nav.woocommerce-pagination ul li a:hover,.skin-styles.woocommerce-page nav.woocommerce-pagination ul li span.current,.skin-styles.woocommerce #content table.cart a.remove:hover,.skin-styles.woocommerce table.cart a.remove:hover,.skin-styles.woocommerce-page #content table.cart a.remove:hover,.skin-styles.woocommerce-page table.cart a.remove:hover'] = array(
						array(
							'prop' => 'color',
							'key'  => 'scheme_color'
						),
					);

					// Accent Link Color
					$rules['.skin-styles #headerwrap a, .skin-styles #footerwrap a, .skin-styles .sidemenu a, .skin-styles .post-nav .arrow, .skin-styles .widget .social-links a, .skin-styles .widget .social-links a:hover, .skin-styles .footer-nav li a'] = array(
						array(
							'prop' => 'color',
							'key'  => 'scheme_link'
						),
					);

					$rules['.skin-styles.woocommerce .woocommerce-error,.skin-styles.woocommerce .woocommerce-info,.skin-styles.woocommerce .woocommerce-message,.skin-styles.woocommerce-page .woocommerce-error,.skin-styles.woocommerce-page .woocommerce-info,.skin-styles.woocommerce-page .woocommerce-message'] = array(
						array(
							'prop' => 'border-top-color',
							'key'  => 'scheme_background'
						),
					);

					$rules['.skin-styles.woocommerce-checkout #payment div.payment_box:after'] = array(
						array(
							'prop' => 'border-bottom-color',
							'key'  => 'scheme_background'
						),
					);

					$rules['.skin-styles .post-title a:hover'] = array(
						array(
							'prop' => 'color',
							'key'  => 'scheme_background'
						),
					);
				}
			}

			// Body background color, image and image repeat is not influenced by presets.
			$body_bg_color_image = array(
				array(
					'prop' => 'background-color',
					'key'  => 'body_background_color'
				),
				array(
					'prop' => 'background-image',
					'key'  => 'body_background_image',
					'dependson' => array(
						'prop' => 'background-repeat',
						'key'  => 'body_background_repeat'
					),
				)
			);
			if ( isset( $rules['.skin-styles'] ) ) {
				// If there is some preset styling, merge body background color and image
				$rules['.skin-styles'] = array_merge( $rules['.skin-styles'], $body_bg_color_image);
			} else {
				// Otherwise create the key and assign body background color and image
				$rules['.skin-styles'] = $body_bg_color_image;
			}

			$rules["$headerwrap, $site_logo, $site_description"] = array(
				array(
					'prop' => 'color',
					'key'  => 'headerwrap_text_color'
				),
			);

			$rules["$site_logo a, $site_description a, $navbar_wrapper a, $main_nav > li > a, $headerwrap .header-icons a"] = array(
				array(
					'prop' => 'color',
					'key'  => 'headerwrap_link_color'
				),
			);

			foreach ( $rules as $selector => $property ) {
				foreach ( $property as $val ) {
					$prop = $val['prop'];
					$key = $val['key'];
					$k=is_array( $key )?$key[0]:$key;
					if(themify_check( $k )){
					    $v=themify_get( $k );
					    if ( $prop === 'font-size' && $k!==$key) {
						    $css[$selector][$prop] = $prop . ': ' . $v . themify_get( $key[1] );
					    }
					    elseif ( 'default' !== $v){
						if ( $prop === 'color' || stripos( $prop, 'color' ) ) {
							if ( 'scheme_background' === $key ) {
								$header_bg_opacity = 'transparent' === $v? '0.9': '1';
								$css[$selector][$prop] = $prop . ':' . themify_theme_set_color_opacity( $v, $header_bg_opacity );
							} else {
								$css[$selector][$prop] = $prop . ': ' . themify_get_color( $key );
							}
						}
						elseif ( $prop === 'background-image' && 'default' !== $v ) {
							if(isset($val['dependson']) &&  $val['dependson']['prop']==='background-repeat'){
								$v2 = themify_get(  $val['dependson']['key'] );
								if ( $v2 === 'fullcover' && $selector === '.skin-styles' ) {
									$selector.=':before';
								}
							}
							themify_generateWebp($v);
							$css[$selector][$prop] = $prop .': url(' . $v . ')';
							if ( isset( $v2 ) ) {
								if ( $v2 === 'fullcover' ) {
									if ( $selector === '.skin-styles:before' ) {
										$css[$selector]['background-size'] = '
											background-size: cover;
											content: "";
											position: fixed;
											width: 100%;
											height: 100%;
											left: 0;
											top: 0;
											pointer-events: none;
											z-index: -1';
									} else {
										$css[ $selector ]['background-size'] = 'background-size: cover';
									}
								} else {
									$css[ $selector ]['background-repeat'] = 'background-repeat: ' . $v2;
								}
								$css[$selector][$prop] = $prop .': url(' . $v . ')';
							}
						}
						elseif ( $prop === 'font-family' ) {
							$css[$selector][$prop] = $prop .': '. $v;
							if ( ! in_array( $v, themify_get_web_safe_font_list( true ) ) ) {
								$themify->google_fonts .= str_replace( ' ', '+', $v.'|' );
							}
						}
						else {
							$css[$selector][$prop] = $prop .': '. $v;
						}
					    }
					}
				}
				if ( ! empty( $css[$selector] ) ) {
					$style .= "$selector {\n\t" . implode( ";\n\t", $css[$selector] ) . "\n}\n";
				
				}
			}

			if( isset( $old_post ) ) {
				$post = $old_post;
			}

			if ( '' != $style ) {
				echo "\n<!-- Entry Style -->\n<style>\n$style</style>\n<!-- End Entry Style -->\n";
			}
		}
	}
	add_action( 'wp_head', 'themify_theme_custom_post_css', 77 );
}
/**
 * Checks if .animated-bg class must be output and sets the first animation color as initial background
 * Displays the data-bg and class attributes, including the background image and fullcover class
 *
 * @since 1.0.0
 *
 * @param string $area
 * @param string $classes Additional CSS classes to output for this element
 */
function themify_theme_header_background( $area = 'header', $classes = '' ) {
	$class = '';
	$repeat = '';
	$data_bg = '';
	$area_wrap = themify_get( $area . '_wrap' );
	if ( 'header' === $area && ($area_wrap==='video' || $area_wrap==='slider')) {
		$back_key = 'styling-background-header_wrap_background-background_image-value-value';
		$mode_key = 'styling-background-header_wrap_background-background_mode-value-value';
		$header_customizer = json_decode( get_theme_mod( 'headerwrap_background' ) );
		$image = null;
		if ( !empty( $header_customizer->src )) {
			$image = $header_customizer->src;
			$repeat = isset( $header_customizer->style ) ? $header_customizer->style : 'fullcover';
		} elseif ( themify_check( $back_key ) ) {
			$image = themify_get( $back_key );
			$repeat = themify_check( $mode_key )? themify_get( $mode_key ): 'fullcover';
		}

		if ( is_singular() || themify_is_shop() ) {
			global $themify;

			if ( themify_is_shop() ) {
				$post_id = themify_shop_pageId();
			} else {
				$post_id = is_page() ? $themify->page_id : get_the_ID();
			}
			
			$image_meta = get_post_meta($post_id, 'background_image', true);
			if ( $image_meta ) {
				$image = $image_meta;
				$repeat_meta = get_post_meta($post_id, 'background_repeat', true);
				if ( $repeat_meta ) {
					$repeat = $repeat_meta;
				}
			}
			
			if ( $area_wrap === 'slider' ) {
                            $background_color = get_post_meta( $post_id, 'background_color', true );
                            if($background_color != ''){
                                $data_bg .= "data-bgcolor='$background_color'";
                            }
			}
                        elseif ( 'video' === $area_wrap ) {
                            $video = get_post_meta( $post_id, 'video_file', true );
                            if($video!=''){
								Themify_Enqueue_Assets::loadThemeStyleModule('header-video');
                                $data_bg .= " data-fullwidthvideo='$video'";
                            }
			}
			$background_gallery = get_post_meta( $post_id, 'background_gallery', true );
			$nobg_key = 'styling-background-header_wrap_background-background_image-value-none';
			$nobg = themify_get( $nobg_key ) || ( isset( $header_customizer->noimage ) && 'noimage' === $header_customizer->noimage );
			if ( $gallery = ( ( $area_wrap === 'slider' ) || ( $area_wrap === '' && $background_gallery != '' ) ) ) {
				$repeat = 'fullcover header-gallery';
			} elseif ( $nobg ) {
				// Checks $image_meta because $image might have been set in customizer and we don't need to check that.
				if ( $image_meta && is_singular()) {
					$data_bg .= " data-bg='$image'";
				}
			} elseif ( $image ) {
				$data_bg .= " data-bg='$image'";
			}
		}
	}

	if ( $repeat || $classes!=='' ) {
		$class = "class='$repeat $classes'";
	}

	echo "$data_bg $class";
}


/**
 * Returns options for header design. Used in custom panel and theme settings.
 *
 * @since 1.0.0
 *
 * @return array List of header design options.
 */
function themify_theme_header_design_options() {
	return apply_filters( 'themify_theme_header_design_options', array(
		array(
			'value' => 'default',
			'img'   => 'themify/img/default.svg',
			'title' => __( 'Default', 'themify' ),
			'selected' => true,
		),
		array(
			'value' => 'header-block',
			'img'   => 'images/layout-icons/header-block.png',
			'title' => __( 'Header Block', 'themify' ),
		),
		array(
			'value' => 'header-horizontal',
			'img'   => 'images/layout-icons/header-horizontal.png',
			'title' => __( 'Header Horizontal', 'themify' ),
		),
		array(
			'value' => 'header-top-widgets',
			'img'   => 'images/layout-icons/header-top-widget.png',
			'title' => __( 'Header Top Widget', 'themify' ),
		),
		array(
			'value' => 'boxed-content', // hides sticky header
			'img'   => 'images/layout-icons/boxed-content.png',
			'title' => __( 'Header Boxed Content', 'themify' ),
		),
		array(
			'value' => 'boxed-layout',
			'img'   => 'images/layout-icons/boxed-layout.png',
			'title' => __( 'Header Boxed Layout', 'themify' ),
		),
		array(
			'value' => 'header-leftpane', // hides sticky header
			'img'   => 'images/layout-icons/leftpanel.png',
			'title' => __( 'Header Left Pane', 'themify' ),
		),
		array(
			'value' => 'header-slide-out', // hides sticky header
			'img'   => 'images/layout-icons/slide-out.png',
			'title' => __( 'Header Slide Out', 'themify' ),
		),
		array(
			'value' => 'header-minbar', // hides sticky header
			'img'   => 'images/layout-icons/minbar.png',
			'title' => __( 'Header Min Bar', 'themify' ),
		),
		array(
			'value' => 'header-top-bar', // hides sticky header
			'img'   => 'images/layout-icons/header-top-bar.png',
			'title' => __( 'Header Top Bar', 'themify' ),
		),
		array(
			'value' => 'boxed-compact', // hides sticky header
			'img'   => 'images/layout-icons/boxed-compact.png',
			'title' => __( 'Boxed Compact', 'themify' ),
		),
		array(
			'value' => 'header-overlay', // hides sticky header
			'img'   => 'images/layout-icons/header-overlay.png',
			'title' => __( 'Header Overlay ', 'themify' ),
		),
		array(
			'value' => 'header-rightpane', // hides sticky header
			'img'   => 'images/layout-icons/rightpanel.png',
			'title' => __( 'Header Right Pane ', 'themify' ),
		),
		array(
			'value' => 'header-menu-split', // hides sticky header
			'img'   => 'images/layout-icons/menu-split.png',
			'title' => __( 'Menu Split', 'themify' ),
		),
		array(
			'value' => 'header-stripe',
			'img'   => 'images/layout-icons/header-stripe.png',
			'title' => __( 'Header Stripe', 'themify' ),
		),
		array(
			'value' => 'header-magazine',
			'img'   => 'images/layout-icons/header-magazine.png',
			'title' => __( 'Header Magazine', 'themify' ),
		),
		array(
			'value' => 'header-classic',
			'img'   => 'images/layout-icons/header-classic.png',
			'title' => __( 'Header Classic', 'themify' ),
		),
		array(
			'value' => 'header-bottom',
			'img'   => 'images/layout-icons/header-bottom.png',
			'title' => __( 'Header Bottom', 'themify' ),
		),
		array(
			'value' => 'header-slide-down',
			'img'   => 'images/layout-icons/header-slide-down.png',
			'title' => __( 'Header Slide Down', 'themify' ),
		),
		array(
			'value' => 'none', // hides sticky header
			'img'   => 'images/layout-icons/none.png',
			'title' => __( 'No Header ', 'themify' ),
		)
	));
}

/**
 * Returns options for font design. Used in custom panel and theme settings.
 *
 * @since 1.0.0
 *
 * @return array List of font design options.
 */
function themify_theme_font_design_options() {
	return apply_filters( 'themify_theme_font_design_options', array(
		array(
			'value' => 'default',
			'img'   => 'themify/img/default.svg',
			'title' => __( 'Theme Default', 'themify' ),
			'selected' => true,
		),
		array(
			'value' => 'theme-font-sans-serif',
			'img'   => 'images/layout-icons/font-sans-serif.png',
			'title' => __( 'Sans Serif', 'themify' ),
		),
		array(
			'value' => 'theme-font-serif',
			'img'   => 'images/layout-icons/font-serif.png',
			'title' => __( 'Serif', 'themify' ),
		),
		array(
			'value' => 'theme-font-slab-sans',
			'img'   => 'images/layout-icons/font-slab-sans.png',
			'title' => __( 'Slab Sans', 'themify' ),
		),
		array(
			'value' => 'theme-font-slab',
			'img'   => 'images/layout-icons/font-slab.png',
			'title' => __( 'Slab', 'themify' ),
		),
	));
}

/**
 * Returns options for color design. Used in custom panel and theme settings.
 *
 * @since 1.0.0
 *
 * @return array List of color design options.
 */
function themify_theme_color_design_options() {
	return apply_filters( 'themify_theme_color_design_options', array(
		array(
			'value' => 'default',
			'img'   => 'images/layout-icons/color-default.png',
			'title' => __( 'Theme Default', 'themify' ),
			'selected' => true,
		),
		array(
			'value' => 'theme-color-black',
			'img'   => 'images/layout-icons/color-black.png',
			'title' => __( 'Black', 'themify' ),
		),
		array(
			'value' => 'theme-color-blue',
			'img'   => 'images/layout-icons/color-blue.png',
			'title' => __( 'Blue', 'themify' ),
		),
		array(
			'value' => 'theme-color-brown',
			'img'   => 'images/layout-icons/color-brown.png',
			'title' => __( 'Brown', 'themify' ),
		),
		array(
			'value' => 'theme-color-burgundy',
			'img'   => 'images/layout-icons/color-burgundy.png',
			'title' => __( 'Burgundy', 'themify' ),
		),
		array(
			'value' => 'theme-color-green',
			'img'   => 'images/layout-icons/color-green.png',
			'title' => __( 'Green', 'themify' ),
		),
		array(
			'value' => 'theme-color-grey',
			'img'   => 'images/layout-icons/color-grey.png',
			'title' => __( 'Grey', 'themify' ),
		),
		array(
			'value' => 'theme-color-lime',
			'img'   => 'images/layout-icons/color-lime.png',
			'title' => __( 'Lime', 'themify' ),
		),
		array(
			'value' => 'theme-color-magenta',
			'img'   => 'images/layout-icons/color-magenta.png',
			'title' => __( 'Magenta', 'themify' ),
		),
		array(
			'value' => 'theme-color-orange',
			'img'   => 'images/layout-icons/color-orange.png',
			'title' => __( 'Orange', 'themify' ),
		),
		array(
			'value' => 'theme-color-pink',
			'img'   => 'images/layout-icons/color-pink.png',
			'title' => __( 'Pink', 'themify' ),
		),
		array(
			'value' => 'theme-color-purple',
			'img'   => 'images/layout-icons/color-purple.png',
			'title' => __( 'Purple', 'themify' ),
		),
		array(
			'value' => 'theme-color-red',
			'img'   => 'images/layout-icons/color-red.png',
			'title' => __( 'Red', 'themify' ),
		),
		array(
			'value' => 'theme-color-turquoise',
			'img'   => 'images/layout-icons/color-turquoise.png',
			'title' => __( 'Turquoise', 'themify' ),
		),
		array(
			'value' => 'theme-color-violet',
			'img'   => 'images/layout-icons/color-violet.png',
			'title' => __( 'Violet', 'themify' ),
		),
		array(
			'value' => 'theme-color-yellow',
			'img'   => 'images/layout-icons/color-yellow.png',
			'title' => __( 'Yellow', 'themify' ),
		),
	));
}

/**
 * Returns options for footer design. Used in custom panel and theme settings.
 *
 * @since 1.0.0
 *
 * @return array List of footer design options.
 */
function themify_theme_footer_design_options() {
	return apply_filters( 'themify_theme_footer_design_options', array(
		array(
			'value' => 'default',
			'img'   => 'themify/img/default.svg',
			'title' => __( 'Theme Default', 'themify' ),
			'selected' => true,
		),
		array(
			'value' => 'footer-block',
			'img'   => 'images/layout-icons/footer-block.png',
			'title' => __( 'Footer Block', 'themify' ),
		),
		array(
			'value' => 'footer-left-col',
			'img'   => 'images/layout-icons/footer-left-col.png',
			'title' => __( 'Footer Left Column', 'themify' ),
		),
		array(
			'value' => 'footer-right-col',
			'img'   => 'images/layout-icons/footer-right-col.png',
			'title' => __( 'Footer Right Column', 'themify' ),
		),
		array(
			'value' => 'footer-horizontal-left',
			'img'   => 'images/layout-icons/footer-horizontal-left.png',
			'title' => __( 'Footer Horizontal Left', 'themify' ),
		),
		array(
			'value' => 'footer-horizontal-right',
			'img'   => 'images/layout-icons/footer-horizontal-right.png',
			'title' => __( 'Footer Horizontal Right', 'themify' ),
		),
		array(
			'value' => 'none',
			'img'   => 'images/layout-icons/none.png',
			'title' => __( 'No Footer ', 'themify' ),
		)
	)); // default, footer-left-col, footer-right-col, footer-horizontal-left, footer-horizontal-right
}

function themify_theme_get_header_design():string {
    static $is=null;
    if($is===null){
		$is = themify_area_design( 'header', array(
			'default' => 'header-horizontal',
			'values'  => wp_list_pluck( themify_theme_header_design_options(), 'value' ),
		) );
		if('none' === $is){
		   $is='header-none';
		}
		elseif($is===''){
			$is='header-horizontal';
		}
    }
    return $is;
}

function themify_theme_get_header_color():string{
	static $is=null;
	if($is===null){
		$is = themify_area_design( 'color', array(
			'default' => '',
			'values'  => wp_list_pluck( themify_theme_color_design_options(), 'value' ),
		) );
		if($is===''){
			$is='default';
		}
	}
	return $is;
}
function themify_theme_get_header_font():string{
	static $is=null;
	if($is===null){
		$is = themify_area_design( 'font', array(
			'default' => '',
			'values'  => wp_list_pluck( themify_theme_font_design_options(), 'value' ),
		) );
		if($is===''){
			$is='default';
		}
	}
	return $is;
}

function themify_theme_get_menu_style(){
	static $is=null;
	if($is===null){
	    $is=false;
	    if (  themify_theme_show_area( 'menu_navigation' ) && themify_theme_do_not_exclude_all( 'mobile-menu' )) {
		    $menu_style = themify_get_both( 'mobile_menu_styles', 'setting-mobile-menu-styles','default' );
		    if ($menu_style!=='default') {
			    $is=$menu_style;
		    }
	    }
	}
	return $is;
}
if ( ! function_exists( 'themify_theme_body_class' ) ) {
	/**
	 * Adds body classes for special theme features.
	 *
	 * @since 1.0.0
	 *
	 * @param $classes
	 *
	 * @return array
	 */
	function themify_theme_body_class(array $classes ):array {

	    $is_fullpage_scroll=themify_theme_is_fullpage_scroll() && is_page();
		if (!Themify_Builder_Model::is_front_builder_activate() && (themify_theme_is_fullpage_scroll() || page_loader_status())  ) {
			$classes[] = 'hidden-view';
			if ( $is_fullpage_scroll ===true ) {
				$classes[] = 'query-section';
				$classes[] = 'full-section-scrolling tf_lazy_disable';
				if( 'horizontal' === themify_get( 'section_scrolling_direction' ) ){
					$classes[] = 'full-section-scrolling-horizontal';
				}
				if( 'single' === themify_get( 'section_scrolling_style' ) ){
					$classes[] = 'full-section-scrolling-single';
				}
				$classes[] = 'fp-effect-' . themify_get( 'section_scrolling_effect', 'scroll' );
			}
		} else {
			if($is_fullpage_scroll===true){
                $classes[] = 'full-section-scrolling';
            }
		    $classes[] = 'ready-view';
		}
		if ( $is_fullpage_scroll===true && themify_theme_is_footer_fullpage_scroll()) {
			$classes[] = 'fullpage-footer';
		}
		
		$header = themify_theme_get_header_design();
		$classes[] = $header;
		

		if ( ! in_array( $header, array( 'header-leftpane', 'header-rightpane', 'header-minbar', 'header-none' ),true ) ) {
			if($header!=='header-bottom' && $header!=='header-slide-down'){
				$classes[] = themify_theme_fixed_header() && !in_array('full-section-scrolling-horizontal',$classes) ? 'fixed-header-enabled' : ( themify_theme_revealing_header_enabled() ? '' : 'no-fixed-header' );
			}
			// Add transparent-header class to body if user selected it in custom panel
			if ( 'transparent' === themify_get( 'header_wrap' ) && ( is_single() || is_page() || themify_is_shop() )) {
				Themify_Enqueue_Assets::loadThemeStyleModule('transparent-header');
				$classes[] = 'transparent-header';
			}
			if ( themify_theme_revealing_header_enabled() ){
                $classes[] = 'revealing-header';
			}
			if('header-slide-out' !== $header && 'boxed-content' !== $header && 'header-block' === $header && 'yes' === themify_get_both( 'full_height_header','setting-full_height_header' ) ){
				Themify_Enqueue_Assets::loadThemeStyleModule('header-full-height');
				$classes[] = 'header-full-height';
			}
		}

		// Footer Design
		$footer = themify_area_design( 'footer', array(
			'default' => 'footer-horizontal-left',
			'values'  => wp_list_pluck( themify_theme_footer_design_options(), 'value' ),
		) );
		if('none' !== $footer){
		    if($footer==='default'){
			$footer='footer-block';
		    }
		    $classes[]=$footer;
		    if($footer==='footer-left-col' || $footer==='footer-horizontal-left'){
				Themify_Enqueue_Assets::loadThemeStyleModule('footers/left');
		    }
		    elseif($footer!=='footer-block'){
				Themify_Enqueue_Assets::loadThemeStyleModule('footers/right');
		    }
		}
		else{
		    $classes[]='footer-none';
		}
		// Theme Color
		$color = themify_theme_get_header_color();
		if($color!=='default'){
			$classes[] = $color;
		}

		// Typography
		$font = themify_theme_get_header_font();
		if($font!=='default'){
			$classes[] = $font;
		}

		// Exclusion classes
		if ( ! themify_theme_show_area( 'site_logo' ) ) {
			$classes[] = 'logo-off';
		}
		if ( ! themify_theme_show_area( 'site_tagline' ) ) {
			$classes[] = 'tagline-off';
		}
		if ( ! themify_theme_show_area( 'social_widget' ) ) {
			$classes[] = 'social-widget-off';
		}
		if ( ! themify_theme_show_area( 'search_form' ) ) {
			$classes[] = 'search-off';
		}
		if ( ! themify_theme_show_area( 'menu_navigation' ) ) {
			$classes[] = 'menu-navigation-off';
		}
		else{
			$menu_style = themify_theme_get_menu_style();
			if (  $menu_style!==false ) {
				$classes[] = 'menu-' . $menu_style;
			}
		}
		if ( ! themify_theme_show_area( 'footer' ) ) {
			$classes[] = 'footer-off';
		}
		elseif('none' !== $footer){
			if ( themify_theme_revealing_footer_enabled() && !Themify_Builder_Model::is_front_builder_activate() ) {
				Themify_Enqueue_Assets::loadThemeStyleModule('revealing-footer');
				$classes[] = 'revealing-footer';
			}
		}

		if ( ! themify_theme_show_area( 'footer_widgets' ) ) {
			$classes[] = 'footer-widgets-off';
		}
		if ( ! themify_theme_show_area( 'footer_menu_navigation' ) ) {
			$classes[] = 'footer-menu-navigation-off';
		}
		if ( ! themify_theme_show_area( 'header_widgets' ) ) {
			$classes[] = 'header-widgets-off';
		}

		// Image Filters
		$image_filter_options = [ 'options' => 'none', 'options_hover' => 'none', 'applyto' => 'featured-only' ];
		foreach ( $image_filter_options as $key => $value ) {
			$image_filter_options[ $key ] = themify_get( 'setting-imagefilter_' . $key, $value, true );
			if ( is_singular() || themify_is_shop() ) {
				$value = themify_get( 'imagefilter_' . $key );
				if ( $value && 'initial' !== $value ) {
					$image_filter_options[ $key ] = $value;
				}
			}
		}
		if ( ! ( $image_filter_options['options'] === 'none' && $image_filter_options['options_hover'] === 'none' ) ) {
			$classes[] = 'filter-' . $image_filter_options['options'];
			$classes[] = 'filter-hover-' . $image_filter_options['options_hover'];
			/* normalize "applyto" value */
			if ( $image_filter_options['applyto'] === 'allimages' ) {
				$image_filter_options['applyto'] = 'all';
			} else if ( $image_filter_options['applyto'] === 'featuredonly' ) {
				$image_filter_options['applyto'] = 'featured-only';
			}
			$classes[] = 'filter-' . $image_filter_options['applyto'];
		}
		unset( $image_filter_options );

		global $themify;
		if ( is_singular() || themify_is_shop()) {
			if(is_single()){
				$layout = $themify->post_layout_type;
				if ($layout && $layout!=='default'){
					if ($layout === 'split') {
						foreach ($classes as $key => $class) {
							if (false !== stripos($class, 'sidebar')) {
								unset($classes[$key]);
							}
						}
						$classes[] = 'sidebar-none';					
					}
					if($layout!=='classic'){
						if($layout==='gallery'){
							Themify_Enqueue_Assets::loadGalleryCss();
						}
					    Themify_Enqueue_Assets::loadThemeStyleModule( 'layouts/' . $layout);
					}
				    $classes[] = 'single-' . $layout . '-layout';
				}
			}
			// Skin Styles
			if ( ( '' != themify_get( 'body_background_color' ) || '' != themify_get( 'body_background_image' ) || '' != themify_get( 'body_font' ) || '' != themify_get( 'body_text_color' ) || '' != themify_get( 'body_link_color' ) || '' != themify_get( 'heading_font' ) || '' != themify_get( 'heading_color' ) || '' != themify_get( 'scheme_background' ) || '' != themify_get( 'scheme_color' ) ) ) {
				$classes[] = 'skin-styles';
			}
		}

		if($themify->layout !== 'sidebar-none'){
			$sidebar= false !== strpos($themify->layout,'sidebar1')?'sidebar1':'sidebar2';
			Themify_Enqueue_Assets::loadThemeStyleModule('sidebars/'.$sidebar);
			if ( $themify->sticky_sidebar) {
				Themify_Enqueue_Assets::loadThemeStyleModule('sidebars/sticky');
				$classes[] = 'sticky_sidebar_enabled';
			}
		}
		if ( themify_is_woocommerce_active() && themify_theme_show_area( 'cart_icon' ) && themify_show_slide_cart() ) {
		    $classes[] = 'slide-cart';
		}
		if(themify_theme_is_fullpage_scroll() && 'on' !== themify_get('section_scrolling_parallax') ) {
		    $classes[] = 'section-scrolling-parallax-enabled';
		}
		$classes[] ='sidemenu-active';

		// Reset corners
        if(themify_check( 'setting-rounded_corners_images',true)) {
            $classes[] = 'no-rounded-image';
            Themify_Enqueue_Assets::loadThemeStyleModule('rounded-images');
        }
        if(themify_check( 'setting-rounded_corners_inputs',true)) {
            $classes[] = 'no-rounded-input';
            Themify_Enqueue_Assets::loadThemeStyleModule('rounded-inputs');
        }
        if('always'===themify_theme_dark_mode()){
            $classes[] ='tf_darkmode';
        }
		return $classes;
	}
}
/**
 * Apply theme-specific row settings
 *
 * @return 	array
 */
function themify_theme_builder_row_attributes(array $attr,array $settings, $builder_id):array {
	if(!themify_theme_is_fullpage_scroll()){
		remove_filter( 'themify_builder_row_attributes', 'themify_theme_builder_row_attributes');
	}
	elseif (isset($attr['class']) && !str_contains( $attr['class'], 'not_editable_builder' ) && $builder_id === get_queried_object_id() ) {
		if ( ! empty( $settings['row_scroll_direction'] ) ) {
			$attr['class'] .= ' ' . $settings['row_scroll_direction'];
		}else{ 
			$attr['class'] .= 'horizontal' === themify_get( 'section_scrolling_direction' ) ? ' module_row_slide' : ' module_row_section';
		}
		$breakpoints=array('desktop'=>'')+themify_get_breakpoints();
		foreach($breakpoints as $bp=>$v){
			$padding='';
			$st=$bp==='desktop'?$settings:($settings['breakpoint_'.$bp]??array());
			if(isset($st['checkbox_padding_apply_all']) && '1'===$st['checkbox_padding_apply_all']){
				if(isset($st['padding_top']) && $st['padding_top']!==''){
					$padding=$st['padding_top'].($st['padding_top_unit']??'px');
				}
			}
			else{
				if(isset($st['padding_top']) && $st['padding_top']!==''){
					$padding=$st['padding_top'].($st['padding_top_unit']??'px');
				}
				$padding.=' ';
				if(isset($st['padding_bottom']) && $st['padding_bottom']!==''){
					$padding.=$st['padding_bottom'].($st['padding_bottom_unit']??'px');
				}
				else{
					$padding.=' ';
				}
			}
			$padding=trim($padding);
			if($padding!==''){
				$attr['data-'.$bp.'-pd']=$padding;
			}
		}
		if ( ! empty( $settings['row_title'] ) ) {
			$attr['data-row-title'] = $settings['row_title'];
		}
		/* disable row animation effects */
		unset( $attr['data-sticky-active'], $attr['data-lax'], $attr['data-lax-anchor'], $attr['data-lax-optimize'], $attr['data-lax-no-op'] );
	}

	return $attr;
}
add_filter( 'themify_builder_row_attributes', 'themify_theme_builder_row_attributes', 10, 3 );


/**
 * Adds page loading animation
 *
 * @since 1.3.6
 */
add_action('themify_body_start','themify_theme_add_section_loader');
function themify_theme_add_section_loader() {

	if ( !Themify_Builder_Model::is_front_builder_activate() && (themify_theme_is_fullpage_scroll() || page_loader_status()) ) {
		$color = themify_get_color('setting-page_loader_color',false,true);
		$icon = themify_get('setting-page_loader_icon',false,true);
		$duration = themify_get('setting-page_loader_duration',false,true);
		$sensitivy = themify_get('setting-page_loader_sensitivity',false,true);
		$cl = $bg = '';
		if ( $icon ) {
			// check if the value is a valid icon name
			$cl = themify_get_icon( $icon );
			// not an icon, it's an image
			if ( empty( $cl ) ) {
			    $cl='';
			    $bg = 'background:transparent url(' . $icon . ') center/cover no-repeat';
			}
			else{
			    $bg = 'background:0';
			}
		}
		$bp=themify_get_breakpoints('tablet');
		$media=(themify_theme_is_fullpage_scroll() && !page_loader_status() && 'on'!==themify_get( 'section_scrolling_mobile' ))?'(min-width:'.($bp[1]+1).'px)':null;
		Themify_Enqueue_Assets::loadThemeStyleModule('loader',$media);
		if($duration==='custom'){
		    $duration=themify_get('setting-page_loader_duration_sec',false,true);
		}
		?>
		<?php if($color || $bg || $sensitivy || $duration):?>
		    <style<?php echo !empty($media)?' media="'.$media.'"':'';?>>
			<?php if($color):?>
			    body.hidden-view:after,.section_loader{background-color:<?php echo $color ?>}
			<?php endif;?>
			<?php if($bg):?>
			    .section_loader .section_spinner{<?php echo $bg ?>}
			<?php endif;?>
			<?php if($sensitivy || $duration):?>
			    .themify_builder{
				<?php if($sensitivy):?>
				    --tf_section_sensitivy:<?php echo $sensitivy?>;
				<?php endif;?>
				<?php if($duration):?>
				    --tf_section_duration:<?php echo $duration?>s
				<?php endif;?>
			    }
			<?php endif;?>
		    </style>
		<?php endif;?>
		<div class="section_loader tf_textc tf_w tf_h">
		    <div class="section_spinner tf_rel"><?php echo $cl ?></div>
		</div>
		<?php
	}
}


if ( ! function_exists( 'themify_theme_show_area' ) ) {
	/**
	 * Checks whether to show a certain layout area or not.
	 *
	 * @param string $area
	 *
	 * @return bool
	 */
	function themify_theme_show_area( $area = '' ) {
		static $arr=array(); 
		if(!isset($arr[$area])){
			$show = true;
			switch ( $area ) {
				case 'header':
					$show = 'none' !== themify_area_design( $area, array( 'values'  => wp_list_pluck( themify_theme_header_design_options(), 'value' ) ) );
					break;
				case 'footer':
					$show = 'none' !== themify_area_design( $area, array( 'values'  => wp_list_pluck( themify_theme_footer_design_options(), 'value' ) ) );
					break;
				case 'site_logo' :
					if ( themify_theme_get_header_design() === 'header-menu-split' ) {
						return true;
					} /* @note: no break, cascade to default */
				default:
					if ( ( is_singular() && ! is_attachment() ) || themify_is_shop() ) {
						$exclude = themify_get( 'exclude_' . $area );
						$show = 'yes' === $exclude? false : ('no'===$exclude? true : (!themify_check( 'setting-exclude_' . $area,true )));
					} elseif ( themify_check( 'setting-exclude_' . $area,true ) ) {
						$show = false;
					}

					break;
			}
			$arr[$area]=apply_filters( "themify_theme_show_{$area}", $show );
		}
		return $arr[$area];
	}
}

if ( ! function_exists( 'themify_theme_do_not_exclude_all' ) ) {
	/**
	 * Checks if all the elements in a certain area have been excluded.
	 *
	 * @since 1.0.0
	 *
	 * @param string $area
	 *
	 * @return bool
	 */
	function themify_theme_do_not_exclude_all(string $area = 'header' ):bool {
		if ( 'mobile-menu' === $area ) {
			return themify_theme_show_area( 'search_form' ) || themify_theme_show_area( 'social_widget' ) || themify_theme_show_area( 'header_widgets' ) || themify_theme_show_area( 'menu_navigation' );
		} elseif ( 'header' === $area ) {
			return themify_theme_show_area( 'site_logo' ) || themify_theme_show_area( 'site_tagline' ) || themify_theme_show_area( 'search_form' ) || themify_theme_show_area( 'social_widget' ) || themify_theme_show_area( 'header_widgets' ) || themify_theme_show_area( 'menu_navigation' );
		} elseif ( 'footer' === $area ) {
			return themify_theme_show_area( 'footer_site_logo' ) || themify_theme_show_area( 'footer_menu_navigation' ) || themify_theme_show_area( 'footer_texts' ) || themify_theme_show_area( 'footer_widgets' ) || themify_theme_show_area( 'footer_back' );
		}
		return false;
	}
}

/**
 * Set the fixed-header selector for the scroll highlight script
 *
 * @since 1.0.0
 */
function themify_theme_scroll_highlight_vars(array $vars=array() ):array {
	if(themify_theme_is_fullpage_scroll()){
	    $vars['scroll']='external';
	}
	return $vars;
}
add_filter( 'themify_builder_scroll_highlight_vars', 'themify_theme_scroll_highlight_vars' );


function page_loader_status():bool {

    return 'on' === themify_get('setting-all_page_loader',false,true);

}

/**
 * Return the status of Single IS.
 *
 * @since 1.0.0
 * @access public
 *
 * @return bool
 */
function themify_theme_is_single_infinite_enabled():bool {
	static $is=null;
	if($is===null){
	    $is=(is_singular('post') || is_singular('portfolio')) && themify_check( 'setting-infinite_single_posts',true) && !themify_theme_is_fullpage_scroll() && (!class_exists('Themify_Builder_Model',false) || !Themify_Builder_Model::is_front_builder_activate());
	}
	return $is;
}

function themify_theme_prev_single_post($before='%link',$after=''){
	$post_type = 'portfolio' === get_post_type() ? 'portfolio' : 'post';
	$in_same_cat = themify_check( "setting-{$post_type}_nav_same_cat",true );
	$this_taxonomy = 'post' === $post_type ? 'category' : $post_type . '-category';
	return get_previous_post_link( $before, $after, $in_same_cat, '', $this_taxonomy );

}

/**
 * Checks if the sidebars in a group have widgets or not.
 *
 * @since 1.0.0
 *
 * @param string $sidebar_prefix Prefix for sidebars.
 * @param array $areas Areas to check.
 *
 * @return bool
 */
function themify_theme_has_widgets(string $sidebar_prefix='',array $areas=array() ):bool {
	$x = 0;
	foreach ( $areas as $col ) {
		++$x;
		if ( is_active_sidebar( $sidebar_prefix . $x ) ) {
			return true;
		}
	}
	return false;
}



/**
 * Set portfolio post type slug
 *
 * @since 1.1.0
 * @return string
 */
function themify_theme_portfolio_post_rewrite($slugs) {
	$slug = themify_get( 'themify_portfolio_slug',false,true );
    if(is_array($slugs)){
        $slugs['post'] = empty( $slug ) ? apply_filters( 'themify_portfolio_rewrite', $slugs['post'] ) : $slug;
		$category_slug = themify_get( 'themify_portfolio_category_slug',false,true);
		$slugs['tax'] = empty( $category_slug ) ? apply_filters( 'themify_portfolio_category_rewrite', $slugs['tax'] ) : $category_slug;    
    }else{
		$slugs = empty( $slug ) ? apply_filters( 'themify_portfolio_rewrite', 'project' ) : $slug;
    }
	return $slugs;
}
add_filter( 'themify_portfolio_post_rewrite', 'themify_theme_portfolio_post_rewrite' );

function themify_theme_announcement_bar_script_vars(array $vars ):array {
	$header_design = themify_theme_get_header_design();
	if( $header_design === 'header-minbar' ) {
		$vars['margin_top_to_bar_height'] = 'null';
	} elseif( $header_design === 'header-leftpane' ) {
		$vars['margin_top_to_bar_height'] = '#header'; // @todo: the scroll bar fails to calculate the height
	} else {
		$vars['margin_top_to_bar_height'] = '#headerwrap';
	}

	$header = themify_theme_get_header_design();
	if ( ! in_array( $header, array( 'header-leftpane', 'header-rightpane', 'header-minbar', 'header-none' ), true ) ) {
		if ( 'transparent' === themify_get( 'header_wrap' ) && ( is_single() || is_page() || themify_is_shop() )) {
			$vars['padding_top_to_bar_height'] = '#pagewrap';
			$vars['abar_position'] = 'fixed';
			$vars['include_admin_bar'] = false;
		}
	}

	return $vars;
}
add_filter( 'announcement_bar_script_vars', 'themify_theme_announcement_bar_script_vars' );



// Add Categories link to mega menu
function themify_mega_menu_add_category_link($out,$term_id,$taxonomy){
    return $out.'<a class="themify_mega_menu_category_link" href="'.get_term_link((int)$term_id,$taxonomy).'">'.__('View all').'</a>';
}
add_filter('themify_mega_posts_output','themify_mega_menu_add_category_link',10,3);
if ( ! function_exists( 'themify_theme_set_color_opacity' ) ) {
	/**
	 * Gets a hex or RGBA color code and updates the opacity
	 *
	 * @since 1.2.8
	 * @param string $color
	 * @return string RGBA color
	 */
	function themify_theme_set_color_opacity( $color, $opacity ):string {
		if ( preg_match( '/rgba?\(([\d\s,.]+)\)/', $color, $result ) && ! empty( $result[1] ) ) {
			$color = explode( ',', trim( $result[1] ) );
			unset( $color[3] );
		} else {
			$color = array_map( 'hexdec', str_split( preg_replace( '/(#)?([a-f\d])/', strlen( $color ) > 3 ? '$2' : '$2$2', $color ) , 2 ) );
		}

		return 'rgba( ' . implode( ',', $color ) . ',' . $opacity . ')';
	}
}

/**
 * Color animation effect for rows and header
 *
 * @since 1.2.9
 */
function themify_theme_do_animated_bg() {
	// Set colors for color animation
	$color_key = 'setting-color_stop_';
	$colors = array();
	for ( $i = 1; $i <= 7; ++$i ) {
	    $col=themify_get_color( $color_key . $i,null,true );
	    if ( !empty($col) ) {
		    $colors[] = $col;
	    }
	}
	// If there are no colors set in theme settings, use default colors
	if ( empty( $colors ) ) {
		$colors = array(
			'#33baab',
			'#e33b9e',
			'#4961d7',
			'#2ea85c',
			'#2bb8ed',
			'#dd5135',
		);
	}

	$selector = array(
		'.module_row.animated-bg'
	);
	if( themify_check( 'setting-footer_color_animation_enabled',true  ) ) {
		$selector[] = '#footerwrap';
	}
	if( themify_check( 'setting-header_color_animation_enabled',true  ) || 'colors' === themify_get( 'header_wrap' ) ) {
		/* when using transparent header or Background option is set, do not use the animated bg */
		if( ! ( themify_check( 'background_color' ) || 'transparent' === themify_get( 'header_wrap' ) ) ) {
			$selector[] = '#headerwrap';
		}
	}

	$options = apply_filters( 'themify_animated_bg_params', array(
		'disabled' => themify_check( 'setting-color_animation_disabled',true  ),
		'selector' => $selector,
		'speed' => (int) themify_get( 'setting-color_animation_speed',5,true  ) * 1000,
		'colors' => $colors
	) );

	if( $options['disabled'] )
		return;

	$css_steps = '';
	foreach( $options['colors'] as $i => $val ) {
		$css_steps .= ( $i === 0 ? '0' : round( 100 / $i, 1 ) ) . '%{background-color:' . $val . '}';
	}
	$selector = implode( ',', $options['selector'] );
	$speed = $options['speed'] * count( $colors ); // @note: in CSS the speed for the entire duration of the animation, so so we need to multiply the number of slides

	echo"
	<style>
	@keyframes themifyAnimatedBG{
		{$css_steps}
	}
	{$selector}{
		animation:themifyAnimatedBG {$speed}ms infinite alternate
	}
	</style>
	";
}
add_action( 'wp_head', 'themify_theme_do_animated_bg' );

/**
 * Add a menu item in the middle of the menu that acts as the placeholder for logo
 *
 * @since 1.4.4
 */
function themify_theme_split_menu_wp_nav_menu_objects( $menu_items, $args ) {
	if( $args->theme_location === 'main-nav' && empty($args->module_menu) ){
	    $copy = $menu_items;

	    /* reduce the menu to only top-level menu items */
	    foreach( $copy as $key => $item ) {
		    if( $item->menu_item_parent != 0 ) {
			    unset( $copy[$key] );
		    }
	    }
	    if ( ! empty( $copy ) && count( $copy ) > 1 ) {
			add_filter( 'walker_nav_menu_start_el', 'themify_theme_split_menu_add_logo', 10, 4 );
			/* get the middle item */
			$middle = floor( count( $copy ) / 2 );

			/* reset the keys */
			$copy = array_values( $copy );

			/* make a fake menu item */
			$new_menu_item = clone $copy[0];
			$new_id = 0;
			$new_menu_item->type = $new_menu_item->object = $new_menu_item->title = $new_menu_item->url = '';
			$new_menu_item->ID = $new_menu_item->post_name = $new_menu_item->db_id = $new_id;
			$new_menu_item->classes = array( 'themify-logo-menu-item' );
			$new_menu_item->themify_logo = true;

			$original_position = $copy[$middle - 1]->menu_order;

			/* inject the new menu item in */
			$menu_items = array_merge(
				array_slice( $menu_items, 0, $original_position, true ),
				array( $new_menu_item ),
				array_slice( $menu_items, $original_position, count( $menu_items ) - 1, true )
			);
	    }
	}

	return $menu_items;
}

/**
 * Start looking for menu icons
 */
function themify_theme_split_menu_args_filter(array $args=array() ):array {
    $args['page_id']=get_the_ID();
    return $args;
}

/**
 * Output logo in the menu when using Menu Split layout
 *
 * @since 1.4.4
 */
function themify_theme_split_menu_add_logo( $item_output, $item, $depth, $args ) {
	if(isset( $item->themify_logo )){
		remove_filter( 'walker_nav_menu_start_el', 'themify_theme_split_menu_add_logo', 10, 4 );
		return '';
	}
    return $item_output;
}

function themify_mobile_menu_expand_toggle(){
	if(themify_theme_show_area( 'menu_navigation' ) && themify_theme_do_not_exclude_all( 'mobile-menu' ) && (themify_check( 'setting-mobile_menu_expand',true ) || themify_check( 'setting-mobile_menu_toggle',true ))){
        add_filter( 'themify_main_script_vars', 'themify_mobile_menu_toggle', 10 );
	}
}
add_action('wp_head','themify_mobile_menu_expand_toggle');
/**
 * Localize expand & toggle mobile menu options
 */
function themify_mobile_menu_toggle(array $vars ):array{
    if(themify_check( 'setting-mobile_menu_expand',true )){
        $vars['m_m_expand']=true;
    }
    if(themify_check( 'setting-mobile_menu_toggle',true )){
        $vars['m_m_toggle']=true;
    }
	return $vars;
}

/**
* Customize the skins list in the admin screen
*
* @since 1.4.8
*/
function themify_theme_skins_list(array $skins ):array {
	unset( $skins[0] ); // remove No Skin option

	// set Default as the first choice
	$default = $skins['default'];
	unset( $skins['default'] );
	return  array_merge( array( 'default' => $default ), $skins );
}
add_filter( 'themify_theme_skins', 'themify_theme_skins_list' ); 

///////////////////////////////////////
// Start Woocommerce functions
///////////////////////////////////////

if ( ! function_exists( 'themify_get_ecommerce_template' ) ) {
	/**
	 * Checks if Woocommerce is active and loads the requested template
	 * @param string $template
	 * @since 1.3.1
	 */
	function themify_get_ecommerce_template( $template = '' ) {
		if ( themify_is_woocommerce_active() ){
			get_template_part( $template );
		}
	}
}
/**
 * Show slide cart or not
 * @return bool
 */
function themify_show_slide_cart():bool{
    $disable_on = themify_get( 'setting-disable-slide-cart',false,true );
    return 'all' === $disable_on || ('mobile' === $disable_on && themify_is_touch())?false:true;
}




//date format
function themify_date_format():array{
    static $date_format = array();
    if(empty($date_format)){
        $format = get_option( 'date_format' );
        $date_items = array('Y'=>'year',
                            'y'=>'year',
                            'm'=>'month',
                            'M'=>'month',
                            'n'=>'month',
                            'F'=>'month',
                            'd'=>'day',
                            'j'=>'day',
                            's'=>'day'
                            );
        foreach($date_items as $i=>$k){
            if(($pos=strpos($format,$i))!==false){
                $date_format[$pos] = array($i,$k);
            }
        }
        ksort ($date_format);
    }
    return $date_format;
}

/**
 * Outputs classes based on certain user-specified parameters.
 *
 * @since 1.0.0
 */
function themify_theme_loops_wrapper_class($class,$post_type,$layout,$type,$moduleArgs=array(),$slug=false) {
	if($type==='shortcode'){
		return $class;
	}
	$is_masonry=$gutter=false;
	$content_layout=! in_array( $layout, array('list-large-image', 'list-thumb-image'),true);
	if($type!=='builder'){
		if($content_layout===true){
			global $themify;
			$content_layout=$themify->post_layout_type;
		}
		if( 'slider' !== $layout ){
		    if(in_array( $layout, array( 'grid2','grid3','grid4','grid5','grid6' ),true )){
			    if($post_type==='portfolio'){
				    $is_masonry = themify_get_both('portfolio_disable_masonry' , 'setting-portfolio_disable_masonry','yes');
				    $gutter=themify_get_both('portfolio_post_gutter' , 'setting-portfolio_gutter',false);
			    }
			    elseif($post_type==='product' && themify_is_woocommerce_active() && (themify_is_shop() || is_product_category() || is_product_tag())){
				    $is_masonry = themify_get('setting-product_disable_masonry' , 'yes',true);
			    }
			    else{
				    $is_masonry = themify_get_both('disable_masonry' , 'setting-disable_masonry','no');
				    $gutter=themify_get_both('post_gutter' , 'setting-post_gutter',false);
			    }
		    }
		    $infinity=$post_type==='portfolio'?themify_get('portfolio_more_posts'):themify_get('more_posts');
		    if($infinity!=='no'){
			$class[] = 'infinite';
		    }
		}
	}
	elseif($slug === 'post' || $slug === 'portfolio' || $slug === 'products' ) {
			if(in_array( $layout, array( 'grid2','grid3','grid4','grid5','grid6', 'grid2-thumb' ),true)){
				$is_masonry=!isset($moduleArgs['disable_masonry'])?'default':$moduleArgs['disable_masonry'];
				if($is_masonry==='default'){
					if($slug === 'portfolio'){
						$is_masonry = themify_get( 'setting-portfolio_disable_masonry',false,true );
					}
					else{
					    $is_masonry = $slug === 'products'?themify_get( 'setting-product_disable_masonry',false,true ):themify_get( 'setting-disable_masonry',false,true );
					}
				}
				$gutter=!isset($moduleArgs[$slug . '_gutter'])?'default':$moduleArgs[$slug . '_gutter'];
				if($gutter==='default'){
					$gutter = themify_get( 'setting-' . $slug . '_gutter',false,true );
			}
			}
			if($content_layout===true){
				$content_layout = !isset($moduleArgs[$slug . '_content_layout'])?'default': $moduleArgs[$slug . '_content_layout'];
				if( $content_layout === 'default' ) {
					$content_layout = themify_get( 'setting-' . $slug . '_content_layout',false,true );
				}
			}
			
	}

    if ( array_search( 'masonry', $class, true ) !== false ) {
        $is_masonry = 'yes';
    }

	if ( 'yes' === $is_masonry) {
		$class[] = 'masonry';
        if($type!=='builder' && themify_check( 'setting-'.$post_type.'_masonry_align',true)) {
            $class[]='masonry-fit-rows';
        }
	}
	if ( 'no-gutter' === $gutter ) {
		$class[] = 'no-gutter';
	}
	
	if( $content_layout && $content_layout!==true && $content_layout!=='no') {
		$class[]=$content_layout;
		if($content_layout==='flip' || $content_layout==='boxed'){
			Themify_Enqueue_Assets::loadThemeStyleModule('post_layouts/'.$content_layout);
		}
		elseif($content_layout==='overlay' || $content_layout==='polaroid'){
			Themify_Enqueue_Assets::loadThemeStyleModule('post_layouts/overlay-polaroid');
		}
	}
	if($post_type==='portfolio'){
		Themify_Enqueue_Assets::loadThemeStyleModule('portfolio');
	}
	return $class;
}


add_filter('themify_loops_wrapper_class','themify_theme_loops_wrapper_class',10,6);

function themify_theme_sticky_logo(){
     if(themify_theme_fixed_header()){
        global $themify_customizer;
        $logo = json_decode($themify_customizer->get_cached_mod('sticky_header_imageselect'));
        return !empty($logo->src)?$logo:false;
     }
     else{
         return false;
     }
}

/**
 * Checks if Top Widgets header design is active
 *
 * @return bool
 */
function themify_is_header_top_widgets():bool {
	return themify_theme_get_header_design() === 'header-top-widgets';
}

/**
 * Checks if Classic and Magazine header design is active
 *
 * @return bool
 */
function themify_is_navigation_bar():bool {
    $header = themify_theme_get_header_design();
    return $header === 'header-classic' || $header=== 'header-magazine';
}


// Load required files
if ( themify_is_woocommerce_active() ) {
    include THEME_DIR . '/woocommerce/themify-wc.php'; // WooCommerce overrides
    /*Extend Search settings*/
    if( 'product' === themify_get( 'setting-search_post_type','all',true ) ) {
            remove_action( 'pre_get_posts', 'themify_search_in_category_filter' );
            remove_filter( 'register_post_type_args', 'themify_register_post_type_args' );
    }
}

/**
 * Template tag to display post date
 *
 * @since 2.6.1
 */
if ( ! function_exists( 'themify_theme_post_date' ) ) :
function themify_theme_post_date() {
    global $themify;
    $is_single = is_single();
    if('list-post'!==$themify->post_layout && (!$is_single || isset($themify->post_module_hook))){
        $inline=true;
    }else{
        if ( is_search() && is_main_query() ) {
            $inline = themify_check( 'setting-search-result_display_date_inline',true );
        } elseif ( $is_single && is_main_query() ) {
            $inline = themify_check( 'setting-default_page_display_date_inline',true );
        } else {
            $inline = themify_check( 'setting-default_display_date_inline',true );
        }
    }
	?>
	<div class="post-date-wrap<?php echo $inline ? ' post-date-inline' : ''; ?>">
		<time class="post-date entry-date updated" datetime="<?php echo esc_attr( get_the_time( 'o-m-d' ) ); ?>">
		<?php if ( $inline ) : ?>
			<span class="year"><?php the_time( get_option( 'date_format' ) ); ?></span>
		<?php else : ?>
			<?php $format = themify_date_format(); ?>
			<?php foreach( $format as $val ) : ?><span class="<?php echo $val[1]?>"><?php the_time( $val[0] ); ?></span> <?php endforeach;?>
		<?php endif;?>
		</time>
	</div><!-- .post-date-wrap -->
	<?php
}
endif;


/**
 * Disable Sticky Rows feature when using Full Page Scrolling
 *
 * @return bool
 */
function themify_theme_sticky_scroll_active(bool $enabled ):bool {
    remove_filter( 'tb_sticky_scroll_active', 'themify_theme_sticky_scroll_active',100,1 );
    return themify_theme_is_fullpage_scroll()?false:$enabled;
}
add_filter( 'tb_sticky_scroll_active', 'themify_theme_sticky_scroll_active',100,1 );

/**
 * Check whether dark mode is enabled
 */
function themify_theme_dark_mode():string {
    static $is = null;
    if($is===null){
        $is = 'on' === themify_get( 'setting-dark_mode_enabled',null,true ) ? themify_get( 'setting-dark_mode_time','always',true ):'';
    }
    return $is;
}

function themify_theme_is_dark_mode():string{//backward
	return themify_theme_dark_mode();
}

/**
 * Add Skip to Content link to site
 *
 * @return string
 */
add_action('themify_body_start','themify_theme_skip_to_content');
function themify_theme_skip_to_content(){
    echo '<a class="screen-reader-text skip-to-content" href="#'.esc_attr(apply_filters('themify_skip_content_id','content')).'">'.__('Skip to content','themify').'</a>';
}

/**
 * Scripts for Themify Builder editor, adds theme-specific options for modules
 *
 * @return array
 */
function themify_theme_builder_active_vars(array $vars ):array {
	$vars['addons'][THEME_URI . '/js/modules/builder-active.js']=Themify_Enqueue_Assets::$themeVersion;
	$i18n = include( THEME_DIR . '/admin/i18n.php' );
	$vars['i18n']['label']+= $i18n;
    if ( themify_theme_is_fullpage_scroll() ) {
        $vars['is_fullSection']=true;
    }
    $vars['theme_url'] = THEME_URI;
    return $vars;
}
add_filter( 'themify_builder_active_vars', 'themify_theme_builder_active_vars', 10, 1 );

function themify_theme_revealing_header_enabled() {
	static $is = null;
	if ( $is === null ) {
		$is = false;
		if ( ! in_array( themify_theme_get_header_design(), [ 'boxed-content', 'header-leftpane', 'header-slide-out', 'header-minbar', 'header-rightpane', 'header-bottom' ], true ) ) {
			$is = is_singular() ? themify_get( 'revealing_header' ) : null;
			$is = $is === null ? themify_get( 'setting-revealing_header', '', true ) === 'on' : $is === 'yes';
		}
	}

	return $is;
}

function themify_theme_revealing_footer_enabled() {
	static $is = null;
	if ( $is === null ) {
		$is = false;
		if ( themify_theme_show_area( 'footer' ) && ! themify_theme_is_footer_fullpage_scroll() ) {
			$is = is_singular() ? themify_get( 'revealing_footer' ) : null;
			$is = $is === null ? themify_get( 'setting-revealing_footer', '', true ) === 'on' : $is === 'yes';
		}
	}

	return $is;
}

function themify_theme_comment_form_defaults( $defaults ) : array {
    foreach( [ 'author', 'email', 'url' ] as $field ) {
        if ( isset( $defaults['fields'][ $field ] ) ) {
            $defaults['fields'][ $field ] = str_replace( '<input ', '<input placeholder=" " ', $defaults['fields'][ $field ] );
        }
    }
    $defaults['comment_field'] = str_replace( '<textarea ', '<textarea placeholder=" " ', $defaults['comment_field'] );

    return $defaults;
}
add_filter( 'comment_form_defaults', 'themify_theme_comment_form_defaults' );

define( 'THEMIFY_NOJQUERY', true );