333 lines
8.0 KiB
PHP
333 lines
8.0 KiB
PHP
<?php
|
|
/**
|
|
* UAGB Block Module.
|
|
*
|
|
* @since 2.0.0
|
|
*
|
|
* @package uagb
|
|
*/
|
|
|
|
// Exit if accessed directly.
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit;
|
|
}
|
|
|
|
if ( ! class_exists( 'UAGB_Block_Module' ) ) {
|
|
|
|
/**
|
|
* Class doc
|
|
*/
|
|
class UAGB_Block_Module {
|
|
|
|
/**
|
|
* Member Variable
|
|
*
|
|
* @var instance
|
|
*/
|
|
private static $instance;
|
|
|
|
/**
|
|
* Block Attributes
|
|
*
|
|
* @var block_attributes
|
|
*/
|
|
public static $block_attributes = null;
|
|
|
|
/**
|
|
* Block Assets
|
|
*
|
|
* @var array<mixed> block_assets
|
|
*/
|
|
public static $block_assets = null;
|
|
|
|
/**
|
|
* Initiator
|
|
*/
|
|
public static function get_instance() {
|
|
if ( ! isset( self::$instance ) ) {
|
|
self::$instance = new self();
|
|
}
|
|
return self::$instance;
|
|
}
|
|
|
|
/**
|
|
* Constructor
|
|
*/
|
|
public function __construct() {
|
|
add_filter( 'uag_register_block_static_dependencies', array( __CLASS__, 'uag_register_block_static_dependencies' ) );
|
|
}
|
|
|
|
/**
|
|
* Add Blocks Static Assets.
|
|
*
|
|
* @since 2.0.0
|
|
*
|
|
* @param array $block_assets Block Assets.
|
|
* @return array
|
|
*/
|
|
public static function uag_register_block_static_dependencies( $block_assets ) {
|
|
|
|
$blocks = self::get_blocks_info();
|
|
|
|
foreach ( $blocks as $block ) {
|
|
if ( ! isset( $block['static_dependencies'] ) ) {
|
|
continue;
|
|
}
|
|
|
|
foreach ( $block['static_dependencies'] as $key => $static_dependencies ) {
|
|
if ( ! isset( $static_dependencies['src'] ) ) {
|
|
continue;
|
|
}
|
|
$block_assets[ $key ] = $static_dependencies;
|
|
}
|
|
}
|
|
|
|
return $block_assets;
|
|
}
|
|
|
|
/**
|
|
* Get frontend CSS.
|
|
*
|
|
* @since 2.0.0
|
|
*
|
|
* @param string $slug Block slug.
|
|
* @param array $attr Block attributes.
|
|
* @param string $id Block id.
|
|
* @param bool $is_gbs Is Global Block Style.
|
|
* @return array
|
|
*/
|
|
public static function get_frontend_css( $slug, $attr, $id, $is_gbs = false ) {
|
|
return self::get_frontend_assets( $slug, $attr, esc_attr( $id ), 'css', $is_gbs );
|
|
}
|
|
|
|
/**
|
|
* Get frontend JS.
|
|
*
|
|
* @since 2.0.0
|
|
*
|
|
* @param string $slug Block slug.
|
|
* @param array $attr Block attributes.
|
|
* @param string $id Block id.
|
|
* @return array
|
|
*/
|
|
public static function get_frontend_js( $slug, $attr, $id ) {
|
|
return self::get_frontend_assets( $slug, $attr, esc_attr( $id ), 'js' );
|
|
}
|
|
|
|
/**
|
|
* Filter GBS Placeholder Attributes.
|
|
*
|
|
* @param array $attributes Block attributes.
|
|
* @since 2.9.0
|
|
* @return array $attributes Block attributes by removing 0.001020304.
|
|
*/
|
|
public static function gbs_filter_placeholder_attributes( $attributes ) {
|
|
if ( ! empty( $attributes ) && is_array( $attributes ) ) {
|
|
foreach ( $attributes as $key => $attribute ) {
|
|
// Replace 0.001020304 with empty string.
|
|
if ( 0.001020304 === $attribute ) {
|
|
$attributes[ $key ] = '';
|
|
}
|
|
}
|
|
return $attributes;
|
|
}
|
|
return array();
|
|
}
|
|
|
|
/**
|
|
* Get frontend Assets.
|
|
*
|
|
* @since 2.0.0
|
|
*
|
|
* @param string $slug Block slug.
|
|
* @param array $attr Block attributes.
|
|
* @param string $id Block id.
|
|
* @param string $type Asset Type.
|
|
* @param bool $is_gbs Is Global Block Style.
|
|
* @return array
|
|
*/
|
|
public static function get_frontend_assets( $slug, $attr, $id, $type = 'css', $is_gbs = false ) {
|
|
|
|
$attr = self::gbs_filter_placeholder_attributes( $attr ); // Filter out GBS Placeholders if any added.
|
|
|
|
$assets = array();
|
|
|
|
if ( 'js' === $type ) {
|
|
$assets = '';
|
|
}
|
|
|
|
$blocks_info = self::get_blocks_info();
|
|
|
|
if ( ! isset( $blocks_info[ 'uagb/' . $slug ] ) || ! isset( $blocks_info[ 'uagb/' . $slug ]['dynamic_assets'] ) ) {
|
|
return $assets;
|
|
}
|
|
|
|
$blocks = array(
|
|
$slug => $blocks_info[ 'uagb/' . $slug ]['dynamic_assets'],
|
|
);
|
|
|
|
if ( isset( $blocks[ $slug ] ) ) {
|
|
|
|
$main_dir = UAGB_DIR;
|
|
|
|
if ( isset( $blocks[ $slug ]['plugin-dir'] ) ) {
|
|
$main_dir = $blocks[ $slug ]['plugin-dir'];
|
|
}
|
|
|
|
$block_dir = $main_dir . 'includes/blocks/' . $blocks[ $slug ]['dir'];
|
|
|
|
$assets_file = realpath( $block_dir . '/frontend.' . $type . '.php' );
|
|
|
|
if ( is_string( $assets_file ) && file_exists( $assets_file ) ) {
|
|
|
|
|
|
// Set default attributes.
|
|
$attr_file = realpath( $block_dir . '/attributes.php' );
|
|
|
|
if ( is_string( $attr_file ) && file_exists( $attr_file ) ) {
|
|
|
|
$default_attr = include $attr_file;
|
|
|
|
$attr = self::get_fallback_values( $default_attr, $attr );
|
|
|
|
if ( ! empty( $attr['globalBlockStyleId'] ) && $is_gbs ) {
|
|
$gbs_class = UAGB_Helper::get_gbs_selector( $attr['globalBlockStyleId'] );
|
|
}
|
|
}
|
|
|
|
// Get Assets.
|
|
$assets = include $assets_file;
|
|
}
|
|
}
|
|
|
|
return $assets;
|
|
|
|
}
|
|
|
|
/**
|
|
* Get Widget List.
|
|
*
|
|
* @since 2.0.0
|
|
*
|
|
* @return array The Widget List.
|
|
*/
|
|
public static function get_blocks_info() {
|
|
|
|
return uagb_block()->get_blocks();
|
|
}
|
|
|
|
/**
|
|
* Get Block Assets.
|
|
*
|
|
* @since 1.13.4
|
|
*
|
|
* @return array The Asset List.
|
|
*/
|
|
public static function get_block_dependencies() {
|
|
|
|
$blocks = UAGB_Admin_Helper::get_block_options();
|
|
|
|
if ( null === self::$block_assets && defined( 'UAGB_URL' ) ) {
|
|
self::$block_assets = array(
|
|
// Lib.
|
|
'uagb-imagesloaded' => array(
|
|
'src' => UAGB_URL . 'assets/js/imagesloaded.min.js',
|
|
'dep' => array( 'jquery' ),
|
|
'type' => 'js',
|
|
),
|
|
'uagb-slick-js' => array(
|
|
'src' => UAGB_URL . 'assets/js/slick.min.js',
|
|
'dep' => array( 'jquery' ),
|
|
'type' => 'js',
|
|
),
|
|
'uagb-slick-css' => array(
|
|
'src' => UAGB_URL . 'assets/css/slick.min.css',
|
|
'dep' => array(),
|
|
'type' => 'css',
|
|
),
|
|
'uagb-masonry' => array(
|
|
'src' => UAGB_URL . 'assets/js/isotope.min.js',
|
|
'dep' => array( 'jquery' ),
|
|
'type' => 'js',
|
|
),
|
|
'uagb-cookie-lib' => array(
|
|
'src' => UAGB_URL . 'assets/js/js_cookie.min.js',
|
|
'dep' => array( 'jquery' ),
|
|
'skipEditor' => true,
|
|
'type' => 'js',
|
|
),
|
|
'uagb-bodymovin-js' => array(
|
|
'src' => UAGB_URL . 'assets/js/uagb-bodymovin.min.js',
|
|
'dep' => array(),
|
|
'skipEditor' => true,
|
|
'type' => 'js',
|
|
),
|
|
'uagb-countUp-js' => array(
|
|
'src' => UAGB_URL . 'assets/js/countUp.min.js',
|
|
'dep' => array(),
|
|
'type' => 'js',
|
|
),
|
|
'uagb-swiper-js' => array(
|
|
'src' => UAGB_URL . 'assets/js/swiper-bundle.min.js',
|
|
'dep' => array(),
|
|
'skipEditor' => true,
|
|
'type' => 'js',
|
|
),
|
|
'uagb-swiper-css' => array(
|
|
'src' => UAGB_URL . 'assets/css/swiper-bundle.min.css',
|
|
'dep' => array(),
|
|
'type' => 'css',
|
|
),
|
|
'uagb-aos-js' => array(
|
|
'src' => UAGB_URL . 'assets/js/aos.min.js',
|
|
'dep' => array(),
|
|
'type' => 'js',
|
|
),
|
|
'uagb-aos-css' => array(
|
|
'src' => UAGB_URL . 'assets/css/aos.min.css',
|
|
'dep' => array(),
|
|
'type' => 'css',
|
|
),
|
|
'uagb-block-positioning-js' => array(
|
|
'src' => UAGB_URL . 'assets/js/spectra-block-positioning.min.js',
|
|
'dep' => array(),
|
|
'type' => 'js',
|
|
),
|
|
'uagb-block-positioning-css' => array(
|
|
'src' => UAGB_URL . 'assets/css/spectra-block-positioning.min.css',
|
|
'dep' => array(),
|
|
'type' => 'css',
|
|
),
|
|
);
|
|
}
|
|
|
|
return apply_filters( 'uag_register_block_static_dependencies', self::$block_assets );
|
|
}
|
|
|
|
/**
|
|
* Returns attributes array with default value wherever required.
|
|
*
|
|
* @param array $default_attr default attribute value array from attributes.php.
|
|
* @param array $attr saved attributes data from database.
|
|
* @return array
|
|
* @since 2.3.2
|
|
*/
|
|
public static function get_fallback_values( $default_attr, $attr ) {
|
|
foreach ( $default_attr as $key => $value ) {
|
|
// sets default value if key is not available in database.
|
|
if ( ! isset( $attr[ $key ] ) ) {
|
|
$attr[ $key ] = $value;
|
|
}
|
|
}
|
|
|
|
return $attr;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Prepare if class 'UAGB_Block_Module' exist.
|
|
* Kicking this off by calling 'get_instance()' method
|
|
*/
|
|
UAGB_Block_Module::get_instance();
|