<?php
/**
* Preloader
*
* @package Ocean_Extra
* @category Core
* @author OceanWP
*/
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
// Start Class
class Ocean_Preloader_Customizer {
/**
* Status
*/
public $active = false;
/**
* Type
*/
public $type = 'default';
/**
* Icon Type
*/
public $icon_type = 'css';
/**
* Icon
*/
public $icon = 'roller';
/**
* Elementor template id
*/
public $template_id = '';
/**
* Initialize
*/
public function __construct() {
add_action( 'customize_register', array( $this, 'customizer_options' ) );
$this->active = get_theme_mod( 'ocean_preloader_enable', false );
$this->type = get_theme_mod( 'ocean_preloader_type', 'default' );
$this->icon_type = get_theme_mod( 'ocean_preloader_icon_type', 'css' );
$this->icon = get_theme_mod( 'ocean_preloader_default_icon', 'roller' );
if ( $this->active ) {
add_filter( 'ocean_head_css', array( $this, 'head_css' ), 15 );
add_filter( 'ocean_typography_settings', array( $this, 'typography_settings' ), 15 );
add_action( 'customize_preview_init', array( $this, 'customize_preview_js' ) );
}
}
/**
* Binds JS handlers to make Theme Customizer preview reload changes asynchronously.
*/
public function customize_preview_js() {
wp_enqueue_script(
'preloader-customizer',
OE_URL . 'includes/preloader/assets/js/customize-preview.min.js',
array( 'customize-preview' ),
OE_VERSION,
true
);
}
/**
* Customizer options
*/
public function customizer_options( $wp_customize ) {
/**
* Add a new section
*/
$section = 'oceanwp_preloader';
$wp_customize->add_section(
$section,
array(
'title' => esc_html__('Preloader', 'ocean-extra'),
'priority' => 15,
'panel' => 'ocean_general_panel',
)
);
/**
* Enable Preloader
*/
$wp_customize->add_setting( 'ocean_preloader_enable', array(
'default' => false,
'sanitize_callback' => 'oceanwp_sanitize_checkbox',
) );
$wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_preloader_enable', array(
'label' => esc_html__( 'Enable OceanWP Preloader', 'ocean-extra' ),
'type' => 'checkbox',
'section' => $section,
'priority' => 10,
) ) );
/**
* Preloader Type
*/
$wp_customize->add_setting( 'ocean_preloader_type', array(
'default' => 'default',
'sanitize_callback' => 'oceanwp_sanitize_select',
) );
$wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_preloader_type', array(
'label' => esc_html__( 'Preloader Type', 'ocean-extra' ),
'type' => 'select',
'section' => $section,
'priority' => 10,
'active_callback' => 'oe_cac_has_preloader',
'choices' => array(
'default' => esc_html__( 'Default', 'ocean-extra' ),
'custom' => esc_html__( 'Custom', 'ocean-extra' ),
),
) ) );
/**
* Preloader Icon Type
*/
$wp_customize->add_setting( 'ocean_preloader_icon_type', array(
'default' => 'css',
'sanitize_callback' => 'oceanwp_sanitize_select',
) );
$wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_preloader_icon_type', array(
'label' => esc_html__( 'Icon Type', 'ocean-extra' ),
'type' => 'select',
'section' => $section,
'priority' => 10,
'active_callback' => 'oe_cac_has_preloader_default',
'choices' => array(
'css' => esc_html__( 'CSS', 'ocean-extra' ),
'image' => esc_html__( 'Image', 'ocean-extra' ),
'logo' => esc_html__( 'Logo', 'ocean-extra' ),
'svg' => esc_html__( 'SVG', 'ocean-extra' ),
),
) ) );
/**
* Preloader icon
*/
$wp_customize->add_setting( 'ocean_preloader_default_icon', array(
'default' => 'roller',
'sanitize_callback' => 'oceanwp_sanitize_select',
) );
$wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_preloader_default_icon', array(
'label' => esc_html__( 'Preloader Icon', 'ocean-extra' ),
'type' => 'select',
'section' => $section,
'priority' => 10,
'active_callback' => 'oe_cac_has_preloader_icon_css',
'choices' => array(
'roller' => esc_html__( 'Roller', 'ocean-extra' ),
'circle' => esc_html__( 'Circle', 'ocean-extra' ),
'ring' => esc_html__( 'Ring', 'ocean-extra' ),
'dual-ring' => esc_html__( 'Dual Ring', 'ocean-extra' ),
'ripple-plain' => esc_html__( 'Ripple Plain', 'ocean-extra' ),
'ripple-circle' => esc_html__( 'Ripple Circle', 'ocean-extra' ),
'heart' => esc_html__( 'Heart', 'ocean-extra' ),
'ellipsis' => esc_html__( 'Ellipsis', 'ocean-extra' ),
'spinner-line' => esc_html__( 'Spinner Line', 'ocean-extra' ),
'spinner-dot' => esc_html__( 'Spinner Dot', 'ocean-extra' ),
),
) ) );
/**
* Image
*/
$wp_customize->add_setting( 'ocean_preloader_icon_image', array(
'default' => '',
'sanitize_callback' => 'oceanwp_sanitize_image',
) );
$wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, 'ocean_preloader_icon_image', array(
'label' => esc_html__( 'Image', 'ocean-extra' ),
'description' => esc_html__( 'Upload svg, gif, png, jpg.', 'ocean-extra' ),
'section' => $section,
'priority' => 10,
'active_callback' => 'oe_cac_has_preloader_icon_image',
) ) );
/**
* SVG image
*/
$wp_customize->add_setting( 'ocean_preloader_icon_svg', array(
'default' => '',
'sanitize_callback' => 'oceanwp_sanitize_image',
) );
$wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, 'ocean_preloader_icon_svg', array(
'label' => esc_html__( 'Upload SVG', 'ocean-extra' ),
'description' => esc_html__( 'Upload svg file here', 'ocean-extra' ),
'section' => $section,
'priority' => 10,
'active_callback' => 'oe_cac_has_preloader_icon_svg',
) ) );
if ( class_exists( 'OceanWP_Customizer_Range_Control' ) ) {
/**
* Image size
*/
$wp_customize->add_setting(
'ocean_preloader_image_size',
array(
'transport' => 'postMessage',
'default' => '100',
'sanitize_callback' => false,
)
);
$wp_customize->add_control(
new OceanWP_Customizer_Range_Control(
$wp_customize, 'ocean_preloader_image_size',
array(
'label' => esc_html__( 'Size (px)', 'ocean-extra' ),
'section' => $section,
'settings' => 'ocean_preloader_image_size',
'priority' => 10,
'active_callback' => 'oe_cac_has_not_preloader_icon_css',
'input_attrs' => array(
'min' => 0,
'max' => 500,
'step' => 1,
),
)
)
);
}
/**
* Custom content.
*/
$wp_customize->add_setting( 'ocean_preloader_content', array(
'default' => 'Site is Loading, Please wait...',
'sanitize_callback' => 'wp_kses_post',
) );
$wp_customize->add_control( 'ocean_preloader_content', array(
'label' => esc_html__( 'Content', 'ocean-extra' ),
'type' => 'textarea',
'section' => $section,
'priority' => 10,
'active_callback' => 'oe_cac_has_preloader_default',
) );
/**
* Container Size
*/
$wp_customize->add_setting( 'ocean_preloader_container_width', array(
'transport' => 'postMessage',
'sanitize_callback' => 'oceanwp_sanitize_number_blank',
) );
$wp_customize->add_setting( 'ocean_preloader_container_width_tablet', array(
'transport' => 'postMessage',
'sanitize_callback' => 'oceanwp_sanitize_number_blank',
) );
$wp_customize->add_setting( 'ocean_preloader_container_width_mobile', array(
'transport' => 'postMessage',
'sanitize_callback' => 'oceanwp_sanitize_number_blank',
) );
$wp_customize->add_control( new OceanWP_Customizer_Slider_Control( $wp_customize, 'ocean_preloader_container_width', array(
'label' => esc_html__( 'Container Width (px)', 'ocean-extra' ),
'description' => esc_html__( 'Set "0" to unset or set your custom container width.', 'ocean-extra' ),
'section' => $section,
'settings' => array(
'desktop' => 'ocean_preloader_container_width',
'tablet' => 'ocean_preloader_container_width_tablet',
'mobile' => 'ocean_preloader_container_width_mobile',
),
'priority' => 10,
'active_callback' => 'oe_cac_has_preloader_default',
'input_attrs' => array(
'min' => 0,
'max' => 2000,
'step' => 1,
),
) ) );
/**
* Preloader template
*/
$wp_customize->add_setting( 'ocean_preloader_template', array(
'default' => '0',
'sanitize_callback' => 'oceanwp_sanitize_select',
) );
$wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_preloader_template', array(
'label' => esc_html__( 'Select Template', 'ocean-extra' ),
'type' => 'select',
'section' => $section,
'priority' => 10,
'active_callback' => 'oe_cac_has_preloader_custom',
'choices' => oceanwp_customizer_helpers( 'library' ),
) ) );
/**
* Dealing with Elementor FOUC issue - Experimental
*/
$wp_customize->add_setting( 'ocean_preloader_elementor_fouc', array(
'default' => true,
'sanitize_callback' => 'oceanwp_sanitize_checkbox',
) );
$wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_preloader_elementor_fouc', array(
'label' => esc_html__( 'Elementor Flickers/FOUC', 'ocean-extra' ),
'description' => esc_html__( 'Experimental (beta) feature which could potentially help resolve Elementor flicker / FOUC issues. No guarantee on resolution at this point.', 'ocean-extra' ),
'type' => 'checkbox',
'section' => $section,
'priority' => 10,
'active_callback' => 'oe_cac_has_preloader_custom',
) ) );
/**
* Overlay color
*/
$wp_customize->add_setting( 'ocean_preloader_overlay_color', array(
'default' => '#000000',
'transport' => 'postMessage',
'sanitize_callback' => 'oceanwp_sanitize_color',
) );
$wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_preloader_overlay_color', array(
'label' => esc_html__( 'Overlay Color', 'ocean-extra' ),
'section' => $section,
'settings' => 'ocean_preloader_overlay_color',
'priority' => 10,
'active_callback' => 'oe_cac_has_preloader',
) ) );
/**
* Icon color
*/
$wp_customize->add_setting( 'ocean_preloader_icon_color', array(
'default' => '#fff',
'transport' => 'postMessage',
'sanitize_callback' => 'oceanwp_sanitize_color',
) );
$wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_preloader_icon_color', array(
'label' => esc_html__( 'Icon Color', 'ocean-extra' ),
'section' => $section,
'settings' => 'ocean_preloader_icon_color',
'priority' => 10,
'active_callback' => 'oe_cac_has_preloader_icon_css',
) ) );
}
/**
* Add typography options
*/
public function typography_settings( $settings ) {
$settings['preloader_after_content'] = array(
'label' => esc_html__( 'Preloader Content', 'ocean-extra' ),
'target' => '.ocean-preloader--active .preloader-after-content',
'defaults' => array(
'font-size' => '20',
'color' => '#333333',
'line-height' => '1.8',
'letter-spacing' => '0.6',
),
'active_callback' => 'oe_cac_has_preloader',
);
return $settings;
}
/**
* Get CSS
*
* @param obj $output CSS Output.
*/
public function head_css( $output ) {
$container_width = get_theme_mod( 'ocean_preloader_container_width' );
$container_width_tablet = get_theme_mod( 'ocean_preloader_container_width_tablet' );
$container_width_mobile = get_theme_mod( 'ocean_preloader_container_width_mobile' );
$overlay_color = get_theme_mod( 'ocean_preloader_overlay_color', '#000000' );
$icon_color = get_theme_mod( 'ocean_preloader_icon_color', '#fff' );
$image_size = get_theme_mod( 'ocean_preloader_image_size', '100' );
$css = '';
if ( ! empty( $overlay_color ) && '#000000' !== $overlay_color ) {
$css .= '.ocean-preloader--active #ocean-preloader{background-color:' . $overlay_color . ';}';
}
if ( 'default' === $this->type ) {
if ( ! empty( $container_width ) ) {
$css .= '.ocean-preloader--active .preloader-inner{width:' . $container_width . 'px;}';
}
if ( ! empty( $container_width_tablet ) ) {
$css .= '@media (max-width: 768px){.ocean-preloader--active .preloader-inner{width:' . $container_width_tablet . 'px;}}';
}
if ( ! empty( $container_width_mobile ) ) {
$css .= '@media (max-width: 480px){.ocean-preloader--active .preloader-inner{width:' . $container_width_mobile . 'px;}}';
}
if ( 'css' === $this->icon_type ) {
if ( ! empty( $icon_color ) && '#fff' !== $icon_color ) {
if ( 'roller' === $this->icon ) {
$css .= '.ocean-preloader--active .preloader-roller div:after{background:' . $icon_color . ';}';
}
if ( 'circle' === $this->icon ) {
$css .= '.ocean-preloader--active .preloader-circle > div{background:' . $icon_color . ';}';
}
if ( 'ripple-plain' === $this->icon ) {
$css .= '.ocean-preloader--active .preloader-ripple-plain div{background:' . $icon_color . ';}';
}
if ( 'ripple-circle' === $this->icon ) {
$css .= '.ocean-preloader--active .preloader-ripple-circle div{border-color:' . $icon_color . ';}';
}
if ( 'ring' === $this->icon ) {
$css .= '.ocean-preloader--active .preloader-ring div{border-top-color:' . $icon_color . ';}';
}
if ( 'dual-ring' === $this->icon ) {
$css .= '.ocean-preloader--active .preloader-dual-ring:after{border-top-color:' . $icon_color . ';}';
$css .= '.ocean-preloader--active .preloader-dual-ring:after{border-bottom-color:' . $icon_color . ';}';
}
if ( 'heart' === $this->icon ) {
$css .= '.ocean-preloader--active .preloader-heart div, .ocean-preloader--active .preloader-heart div::after, .ocean-preloader--active .preloader-heart div::before{background:' . $icon_color . ';}';
}
if ( 'ellipsis' === $this->icon ) {
$css .= '.ocean-preloader--active .preloader-ellipsis div{background:' . $icon_color . ';}';
}
if ( 'spinner-dot' === $this->icon ) {
$css .= '.ocean-preloader--active .preloader-spinner-dot div{background:' . $icon_color . ';}';
}
if ( 'spinner-line' === $this->icon ) {
$css .= '.ocean-preloader--active .preloader-spinner-line div:after{background:' . $icon_color . ';}';
}
}
}
if ( ! empty( $image_size ) && '100' !== $image_size ) {
if ( 'image' === $this->icon_type ) {
$css .= '.ocean-preloader--active .preloader-image {max-width:' . $image_size . 'px;}';
}
if ( 'logo' === $this->icon_type ) {
$css .= '.ocean-preloader--active .preloader-logo {max-width:' . $image_size . 'px;}';
}
if ( 'svg' === $this->icon_type ) {
$css .= '.ocean-preloader--active .preloader-svg svg {width:' . $image_size . 'px; height:' . $image_size . 'px}';
}
}
}
// Return CSS.
if ( ! empty( $css ) ) {
$output .= '/* OceanWP Preloader CSS */' . $css;
}
// Return output css.
return $output;
}
}
new Ocean_Preloader_Customizer();
/**
* Callback function
*/
function oe_cac_has_preloader() {
if ( true === get_theme_mod( 'ocean_preloader_enable', false ) ) {
return true;
} else {
return false;
}
return false;
}
/**
* Callback function
*/
function oe_cac_has_preloader_default() {
if ( true === get_theme_mod( 'ocean_preloader_enable', false ) && 'default' === get_theme_mod( 'ocean_preloader_type', 'default' ) ) {
return true;
} else {
return false;
}
return false;
}
/**
* Callback function
*/
function oe_cac_has_preloader_custom() {
if ( true === get_theme_mod( 'ocean_preloader_enable', false ) && 'custom' === get_theme_mod( 'ocean_preloader_type', 'default' ) ) {
return true;
} else {
return false;
}
return false;
}
/**
* Callback function
*/
function oe_cac_has_preloader_icon_css() {
if ( true === get_theme_mod( 'ocean_preloader_enable', false )
&& 'default' === get_theme_mod( 'ocean_preloader_type', 'default' )
&& 'css' === get_theme_mod( 'ocean_preloader_icon_type', 'css' ) )
{
return true;
} else {
return false;
}
return false;
}
/**
* Callback function
*/
function oe_cac_has_preloader_icon_image() {
if ( true === get_theme_mod( 'ocean_preloader_enable', false )
&& 'default' === get_theme_mod( 'ocean_preloader_type', 'default' )
&& 'image' === get_theme_mod( 'ocean_preloader_icon_type', 'css' ) )
{
return true;
} else {
return false;
}
return false;
}
/**
* Callback function
*/
function oe_cac_has_not_preloader_icon_css() {
if ( true === get_theme_mod( 'ocean_preloader_enable', false )
&& 'default' === get_theme_mod( 'ocean_preloader_type', 'default' )
&& 'css' !== get_theme_mod( 'ocean_preloader_icon_type', 'css' ) )
{
return true;
} else {
return false;
}
return false;
}
/**
* Callback function
*/
function oe_cac_has_preloader_icon_svg() {
if ( true === get_theme_mod( 'ocean_preloader_enable', false )
&& 'default' === get_theme_mod( 'ocean_preloader_type', 'default' )
&& 'svg' === get_theme_mod( 'ocean_preloader_icon_type', 'css' ) )
{
return true;
} else {
return false;
}
return false;
}
|