auto-patch 102-dev-dev01-2023-12-11T19_15_32 * auto-patch 102-dev-dev01-2023-12-11T19_15_32
732 lines
19 KiB
PHP
732 lines
19 KiB
PHP
<?php
|
|
/**
|
|
* Schema Pro Helper.
|
|
*
|
|
* @package Schema Pro
|
|
*/
|
|
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit; // Exit if accessed directly.
|
|
}
|
|
|
|
if ( ! class_exists( 'BSF_SP_Helper' ) ) {
|
|
|
|
/**
|
|
* Class BSF_SP_Helper.
|
|
*/
|
|
final class BSF_SP_Helper {
|
|
|
|
|
|
/**
|
|
* Member Variable
|
|
*
|
|
* @since 2.2.0
|
|
* @var instance
|
|
*/
|
|
private static $instance;
|
|
|
|
/**
|
|
* Member Variable
|
|
*
|
|
* @since 2.2.0
|
|
* @var instance
|
|
*/
|
|
public static $block_list;
|
|
|
|
/**
|
|
* Schema Pro FAQ Layout Flag
|
|
*
|
|
* @since 1.18.1
|
|
* @var wpsp_faq_layout
|
|
*/
|
|
public static $wpsp_faq_layout = false;
|
|
|
|
/**
|
|
* Current Block List
|
|
*
|
|
* @since 2.2.0
|
|
* @var current_block_list
|
|
*/
|
|
public static $current_block_list = array();
|
|
|
|
/**
|
|
* Schema Pro Block Flag
|
|
*
|
|
* @since 2.2.0
|
|
* @var wpsp_flag
|
|
*/
|
|
public static $wpsp_flag = false;
|
|
|
|
/**
|
|
* Schema Pro File Generation Flag
|
|
*
|
|
* @since 2.2.0
|
|
* @var file_generation
|
|
*/
|
|
public static $file_generation = 'disabled';
|
|
|
|
/**
|
|
* Schema Pro File Generation Fallback Flag for CSS
|
|
*
|
|
* @since 2.2.0
|
|
* @var file_generation
|
|
*/
|
|
public static $fallback_css = false;
|
|
|
|
/**
|
|
* Schema Pro File Generation Fallback Flag for JS
|
|
*
|
|
* @since 2.2.0
|
|
* @var file_generation
|
|
*/
|
|
public static $fallback_js = false;
|
|
|
|
/**
|
|
* Enque Style and Script Variable
|
|
*
|
|
* @since 2.2.0
|
|
* @var instance
|
|
*/
|
|
public static $css_file_handler = array();
|
|
|
|
/**
|
|
* Stylesheet
|
|
*
|
|
* @since 2.2.0
|
|
* @var stylesheet
|
|
*/
|
|
public static $stylesheet;
|
|
|
|
/**
|
|
* Script
|
|
*
|
|
* @since 2.2.0
|
|
* @var script
|
|
*/
|
|
public static $script;
|
|
|
|
/**
|
|
* Store Json variable
|
|
*
|
|
* @since 2.2.0
|
|
* @var instance
|
|
*/
|
|
public static $icon_json;
|
|
|
|
/**
|
|
* Page Blocks Variable
|
|
*
|
|
* @since 2.2.0
|
|
* @var instance
|
|
*/
|
|
public static $page_blocks;
|
|
|
|
/**
|
|
* Google fonts to enqueue
|
|
*
|
|
* @var array
|
|
*/
|
|
public static $gfonts = array();
|
|
|
|
/**
|
|
* Initiator
|
|
*
|
|
* @since 2.2.0
|
|
*/
|
|
public static function get_instance() {
|
|
if ( ! isset( self::$instance ) ) {
|
|
self::$instance = new self();
|
|
}
|
|
return self::$instance;
|
|
}
|
|
|
|
/**
|
|
* Constructor
|
|
*/
|
|
public function __construct() {
|
|
|
|
require BSF_AIOSRS_PRO_DIR . 'wpsp-blocks/classes/class-bsf-sp-config.php';
|
|
require BSF_AIOSRS_PRO_DIR . 'wpsp-blocks/classes/class-bsf-sp-block-helper.php';
|
|
require BSF_AIOSRS_PRO_DIR . 'wpsp-blocks/classes/class-bsf-sp-block-js.php';
|
|
|
|
self::$block_list = BSF_SP_Config::get_block_attributes();
|
|
|
|
add_action( 'wp', array( $this, 'generate_assets' ), 99 );
|
|
add_action( 'wp_enqueue_scripts', array( $this, 'block_assets' ), 10 );
|
|
add_action( 'wp_head', array( $this, 'frontend_gfonts' ), 120 );
|
|
add_action( 'wp_head', array( $this, 'print_stylesheet' ), 80 );
|
|
add_action( 'wp_footer', array( $this, 'print_script' ), 1000 );
|
|
|
|
}
|
|
|
|
/**
|
|
* Enqueue Gutenberg block assets for both frontend + backend.
|
|
*
|
|
* @since 2.2.0
|
|
*/
|
|
public function block_assets() {
|
|
|
|
$block_list_for_assets = self::$current_block_list;
|
|
|
|
$blocks = BSF_SP_Config::get_block_attributes();
|
|
|
|
foreach ( $block_list_for_assets as $key => $curr_block_name ) {
|
|
|
|
$js_assets = ( isset( $blocks[ $curr_block_name ]['js_assets'] ) ) ? $blocks[ $curr_block_name ]['js_assets'] : array();
|
|
|
|
$css_assets = ( isset( $blocks[ $curr_block_name ]['css_assets'] ) ) ? $blocks[ $curr_block_name ]['css_assets'] : array();
|
|
|
|
foreach ( $js_assets as $asset_handle => $val ) {
|
|
// Scripts.
|
|
if ( 'wpsp-faq-js' === $val ) {
|
|
if ( self::$wpsp_faq_layout ) {
|
|
wp_enqueue_script( 'wpsp-faq-js' );
|
|
}
|
|
} else {
|
|
wp_enqueue_script( $val );
|
|
}
|
|
}
|
|
|
|
foreach ( $css_assets as $asset_handle => $val ) {
|
|
// Styles.
|
|
wp_enqueue_style( $val );
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Print the Script in footer.
|
|
*/
|
|
public function print_script() {
|
|
|
|
ob_start();
|
|
?>
|
|
<script type="text/javascript" id="wpsp-script-frontend"><?php echo self::$script; //phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped ?></script>
|
|
<?php
|
|
ob_end_flush();
|
|
}
|
|
|
|
/**
|
|
* Print the Stylesheet in header.
|
|
*/
|
|
public function print_stylesheet() {
|
|
|
|
ob_start();
|
|
?>
|
|
<style id="wpsp-style-frontend"><?php echo self::$stylesheet; //phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped ?></style>
|
|
<?php
|
|
ob_end_flush();
|
|
}
|
|
|
|
/**
|
|
* Load the front end Google Fonts.
|
|
*/
|
|
public function frontend_gfonts() {
|
|
|
|
if ( empty( self::$gfonts ) ) {
|
|
return;
|
|
}
|
|
$show_google_fonts = apply_filters( 'wpsp_blocks_show_google_fonts', true );
|
|
if ( ! $show_google_fonts ) {
|
|
return;
|
|
}
|
|
$link = '';
|
|
$subsets = array();
|
|
foreach ( self::$gfonts as $key => $gfont_values ) {
|
|
if ( ! empty( $link ) ) {
|
|
$link .= '%7C'; // Append a new font to the string.
|
|
}
|
|
$link .= $gfont_values['fontfamily'];
|
|
if ( ! empty( $gfont_values['fontvariants'] ) ) {
|
|
$link .= ':';
|
|
$link .= implode( ',', $gfont_values['fontvariants'] );
|
|
}
|
|
if ( ! empty( $gfont_values['fontsubsets'] ) ) {
|
|
foreach ( $gfont_values['fontsubsets'] as $subset ) {
|
|
if ( ! in_array( $subset, $subsets, true ) ) {
|
|
array_push( $subsets, $subset );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if ( ! empty( $subsets ) ) {
|
|
$link .= '&subset=' . implode( ',', $subsets );
|
|
}
|
|
if ( isset( $link ) && ! empty( $link ) ) {
|
|
echo '<link href="//fonts.googleapis.com/css?family=' . esc_attr( str_replace( '|', '%7C', $link ) ) . '" rel="stylesheet">'; //phpcs:ignore WordPress.WP.EnqueuedResources.NonEnqueuedStylesheet
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Parse CSS into correct CSS syntax.
|
|
*
|
|
* @param array $selectors The block selectors.
|
|
* @param string $id The selector ID.
|
|
* @since 2.2.0
|
|
*/
|
|
public static function generate_css( $selectors, $id ) {
|
|
$styling_css = '';
|
|
|
|
if ( empty( $selectors ) ) {
|
|
return '';
|
|
}
|
|
|
|
foreach ( $selectors as $key => $value ) {
|
|
|
|
$css = '';
|
|
|
|
foreach ( $value as $j => $val ) {
|
|
|
|
if ( 'font-family' === $j && 'Default' === $val ) {
|
|
continue;
|
|
}
|
|
|
|
if ( ! empty( $val ) || 0 === $val ) {
|
|
if ( 'font-family' === $j ) {
|
|
$css .= $j . ': "' . $val . '";';
|
|
} else {
|
|
$css .= $j . ': ' . $val . ';';
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( ! empty( $css ) ) {
|
|
$styling_css .= $id;
|
|
$styling_css .= $key . '{';
|
|
$styling_css .= $css . '}';
|
|
}
|
|
}
|
|
|
|
return $styling_css;
|
|
}
|
|
|
|
/**
|
|
* Get CSS value
|
|
*
|
|
* Syntax:
|
|
*
|
|
* get_css_value( VALUE, UNIT );
|
|
*
|
|
* E.g.
|
|
*
|
|
* get_css_value( VALUE, 'em' );
|
|
*
|
|
* @param string $value CSS value.
|
|
* @param string $unit CSS unit.
|
|
* @since 2.2.0
|
|
*/
|
|
public static function get_css_value( $value = '', $unit = '' ) {
|
|
|
|
if ( '' == $value ) { // phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison
|
|
return $value;
|
|
}
|
|
|
|
$css_val = '';
|
|
|
|
if ( ! empty( $value ) ) {
|
|
$css_val = esc_attr( $value ) . $unit;
|
|
}
|
|
|
|
return $css_val;
|
|
}
|
|
|
|
/**
|
|
* Generates CSS recurrsively.
|
|
*
|
|
* @param object $block The block object.
|
|
* @since 2.2.0
|
|
*/
|
|
public function get_block_css_and_js( $block ) {
|
|
|
|
$block = (array) $block;
|
|
|
|
$name = $block['blockName'];
|
|
$css = array();
|
|
$js = '';
|
|
$block_id = '';
|
|
|
|
if ( ! isset( $name ) ) {
|
|
return array(
|
|
'css' => array(),
|
|
'js' => '',
|
|
);
|
|
}
|
|
$blockattr = array();
|
|
if ( isset( $block['attrs'] ) && is_array( $block['attrs'] ) ) {
|
|
$blockattr = $block['attrs'];
|
|
if ( isset( $blockattr['block_id'] ) ) {
|
|
$block_id = $blockattr['block_id'];
|
|
}
|
|
}
|
|
|
|
self::$current_block_list[] = $name;
|
|
|
|
if ( strpos( $name, 'wpsp/' ) !== false ) {
|
|
self::$wpsp_flag = true;
|
|
}
|
|
|
|
switch ( $name ) {
|
|
|
|
case 'wpsp/faq':
|
|
if ( ! empty( $blockattr ) ) {
|
|
$css = BSF_SP_Block_Helper::get_faq_css( $blockattr, $block_id );
|
|
if ( ! isset( $blockattr['layout'] ) ) {
|
|
self::$wpsp_faq_layout = true;
|
|
}
|
|
BSF_SP_Block_JS::blocks_faq_gfont( $blockattr );
|
|
}
|
|
break;
|
|
case 'wpsp/how-to':
|
|
if ( ! empty( $blockattr ) ) {
|
|
$css += BSF_SP_Block_Helper::get_how_to_css( $blockattr, $block_id );
|
|
BSF_SP_Block_JS::blocks_how_to_gfont( $blockattr );
|
|
}
|
|
break;
|
|
case 'wpsp/how-to-child':
|
|
if ( ! empty( $blockattr ) ) {
|
|
$css += BSF_SP_Block_Helper::get_how_to_child_css( $blockattr, $block_id );
|
|
BSF_SP_Block_JS::blocks_how_to_child_gfont( $blockattr );
|
|
}
|
|
break;
|
|
default:
|
|
// Nothing to do here.
|
|
break;
|
|
}
|
|
|
|
if ( isset( $block['innerBlocks'] ) ) {
|
|
foreach ( $block['innerBlocks'] as $j => $inner_block ) {
|
|
if ( 'core/block' === $inner_block['blockName'] ) {
|
|
$id = ( isset( $inner_block['attrs']['ref'] ) ) ? $inner_block['attrs']['ref'] : 0;
|
|
|
|
if ( $id ) {
|
|
$content = get_post_field( 'post_content', $id );
|
|
|
|
$reusable_blocks = $this->parse( $content );
|
|
|
|
$assets = $this->get_assets( $reusable_blocks );
|
|
|
|
self::$stylesheet .= $assets['css'];
|
|
self::$script .= $assets['js'];
|
|
}
|
|
} else {
|
|
// Get CSS for the Block.
|
|
$inner_assets = $this->get_block_css_and_js( $inner_block );
|
|
$inner_block_css = $inner_assets['css'];
|
|
|
|
$css_desktop = ( isset( $css['desktop'] ) ? $css['desktop'] : '' );
|
|
$css_tablet = ( isset( $css['tablet'] ) ? $css['tablet'] : '' );
|
|
$css_mobile = ( isset( $css['mobile'] ) ? $css['mobile'] : '' );
|
|
|
|
if ( isset( $inner_block_css['desktop'] ) ) {
|
|
$css['desktop'] = $css_desktop . $inner_block_css['desktop'];
|
|
$css['tablet'] = $css_tablet . $inner_block_css['tablet'];
|
|
$css['mobile'] = $css_mobile . $inner_block_css['mobile'];
|
|
}
|
|
|
|
$js .= $inner_assets['js'];
|
|
}
|
|
}
|
|
}
|
|
|
|
self::$current_block_list = array_unique( self::$current_block_list );
|
|
|
|
return array(
|
|
'css' => $css,
|
|
'js' => $js,
|
|
);
|
|
|
|
}
|
|
|
|
/**
|
|
* Adds Google fonts all blocks.
|
|
*
|
|
* @param array $load_google_font the blocks attr.
|
|
* @param array $font_family the blocks attr.
|
|
* @param array $font_weight the blocks attr.
|
|
* @param array $font_subset the blocks attr.
|
|
*/
|
|
public static function blocks_google_font( $load_google_font, $font_family, $font_weight, $font_subset ) {
|
|
|
|
if ( true === $load_google_font ) {
|
|
if ( ! array_key_exists( $font_family, self::$gfonts ) ) {
|
|
$add_font = array(
|
|
'fontfamily' => $font_family,
|
|
'fontvariants' => ( isset( $font_weight ) && ! empty( $font_weight ) ? array( $font_weight ) : array() ),
|
|
'fontsubsets' => ( isset( $font_subset ) && ! empty( $font_subset ) ? array( $font_subset ) : array() ),
|
|
);
|
|
self::$gfonts[ $font_family ] = $add_font;
|
|
} else {
|
|
if ( isset( $font_weight ) && ! empty( $font_weight ) && ! in_array( $font_weight, self::$gfonts[ $font_family ]['fontvariants'], true ) ) {
|
|
array_push( self::$gfonts[ $font_family ]['fontvariants'], $font_weight );
|
|
}
|
|
if ( isset( $font_subset ) && ! empty( $font_subset ) && ! in_array( $font_subset, self::$gfonts[ $font_family ]['fontsubsets'], true ) ) {
|
|
array_push( self::$gfonts[ $font_family ]['fontsubsets'], $font_subset );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Generates stylesheet and appends in head tag.
|
|
*
|
|
* @since 2.2.0
|
|
*/
|
|
public function generate_assets() {
|
|
|
|
$this_post = array();
|
|
|
|
global $post;
|
|
$this_post = $post;
|
|
|
|
if ( ! is_object( $this_post ) ) {
|
|
return;
|
|
}
|
|
|
|
/**
|
|
* Filters the post to build stylesheet for.
|
|
*
|
|
* @param \WP_Post $this_post The global post.
|
|
*/
|
|
$this_post = apply_filters( 'wpsp_post_for_stylesheet', $this_post );
|
|
|
|
$this->get_generated_stylesheet( $this_post );
|
|
|
|
}
|
|
|
|
/**
|
|
* Generates stylesheet in loop.
|
|
*
|
|
* @param object $this_post Current Post Object.
|
|
* @since 2.2.0
|
|
*/
|
|
public function get_generated_stylesheet( $this_post ) {
|
|
|
|
if ( ! is_object( $this_post ) ) {
|
|
return;
|
|
}
|
|
|
|
if ( ! isset( $this_post->ID ) ) {
|
|
return;
|
|
}
|
|
if ( function_exists( 'has_blocks' ) && has_blocks( $this_post->ID ) && isset( $this_post->post_content ) ) {
|
|
$blocks = $this->parse( $this_post->post_content );
|
|
self::$page_blocks = $blocks;
|
|
|
|
if ( ! is_array( $blocks ) || empty( $blocks ) ) {
|
|
return;
|
|
}
|
|
|
|
$assets = $this->get_assets( $blocks );
|
|
|
|
self::$stylesheet .= $assets['css'];
|
|
self::$script .= $assets['js'];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Parse Guten Block.
|
|
*
|
|
* @param string $content the content string.
|
|
* @since 2.2.0
|
|
*/
|
|
public function parse( $content ) {
|
|
|
|
global $wp_version;
|
|
|
|
return ( version_compare( $wp_version, '5', '>=' ) ) ? parse_blocks( $content ) : gutenberg_parse_blocks( $content );
|
|
}
|
|
|
|
/**
|
|
* Generates stylesheet for reusable blocks.
|
|
*
|
|
* @param array $blocks Blocks array.
|
|
* @since 2.2.0
|
|
*/
|
|
public function get_assets( $blocks ) {
|
|
|
|
$desktop = '';
|
|
$tablet = '';
|
|
$mobile = '';
|
|
|
|
$tab_styling_css = '';
|
|
$mob_styling_css = '';
|
|
|
|
$js = '';
|
|
|
|
foreach ( $blocks as $i => $block ) {
|
|
|
|
if ( is_array( $block ) ) {
|
|
|
|
if ( '' === $block['blockName'] ) {
|
|
continue;
|
|
}
|
|
if ( 'core/block' === $block['blockName'] ) {
|
|
$id = ( isset( $block['attrs']['ref'] ) ) ? $block['attrs']['ref'] : 0;
|
|
|
|
if ( $id ) {
|
|
$content = get_post_field( 'post_content', $id );
|
|
|
|
$reusable_blocks = $this->parse( $content );
|
|
|
|
$assets = $this->get_assets( $reusable_blocks );
|
|
|
|
self::$stylesheet .= $assets['css'];
|
|
self::$script .= $assets['js'];
|
|
|
|
}
|
|
} else {
|
|
|
|
$block_assets = $this->get_block_css_and_js( $block );
|
|
|
|
// Get CSS for the Block.
|
|
$css = $block_assets['css'];
|
|
|
|
if ( isset( $css['desktop'] ) ) {
|
|
$desktop .= $css['desktop'];
|
|
$tablet .= $css['tablet'];
|
|
$mobile .= $css['mobile'];
|
|
}
|
|
|
|
$js .= $block_assets['js'];
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( ! empty( $tablet ) ) {
|
|
$tab_styling_css .= '@media only screen and (max-width: ' . WPSP_TABLET_BREAKPOINT . 'px) {';
|
|
$tab_styling_css .= $tablet;
|
|
$tab_styling_css .= '}';
|
|
}
|
|
|
|
if ( ! empty( $mobile ) ) {
|
|
$mob_styling_css .= '@media only screen and (max-width: ' . WPSP_MOBILE_BREAKPOINT . 'px) {';
|
|
$mob_styling_css .= $mobile;
|
|
$mob_styling_css .= '}';
|
|
}
|
|
|
|
return array(
|
|
'css' => $desktop . $tab_styling_css . $mob_styling_css,
|
|
'js' => $js,
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Get Typography Dynamic CSS.
|
|
*
|
|
* @param array $attr The Attribute array.
|
|
* @param string $slug The field slug.
|
|
* @param string $selector The selector array.
|
|
* @param array $combined_selectors The combined selector array.
|
|
* @since 2.2.0
|
|
* @return bool|string
|
|
*/
|
|
public static function get_typography_css( $attr, $slug, $selector, $combined_selectors ) {
|
|
|
|
$typo_css_desktop = array();
|
|
$typo_css_tablet = array();
|
|
$typo_css_mobile = array();
|
|
|
|
$already_selectors_desktop = ( isset( $combined_selectors['desktop'][ $selector ] ) ) ? $combined_selectors['desktop'][ $selector ] : array();
|
|
$already_selectors_tablet = ( isset( $combined_selectors['tablet'][ $selector ] ) ) ? $combined_selectors['tablet'][ $selector ] : array();
|
|
$already_selectors_mobile = ( isset( $combined_selectors['mobile'][ $selector ] ) ) ? $combined_selectors['mobile'][ $selector ] : array();
|
|
|
|
$family_slug = ( '' === $slug ) ? 'fontFamily' : $slug . 'FontFamily';
|
|
$weight_slug = ( '' === $slug ) ? 'fontWeight' : $slug . 'FontWeight';
|
|
|
|
$l_ht_slug = ( '' === $slug ) ? 'lineHeight' : $slug . 'LineHeight';
|
|
$f_sz_slug = ( '' === $slug ) ? 'fontSize' : $slug . 'FontSize';
|
|
$l_ht_type_slug = ( '' === $slug ) ? 'lineHeightType' : $slug . 'LineHeightType';
|
|
$f_sz_type_slug = ( '' === $slug ) ? 'fontSizeType' : $slug . 'FontSizeType';
|
|
|
|
$typo_css_desktop[ $selector ] = array(
|
|
'font-family' => $attr[ $family_slug ],
|
|
'font-weight' => $attr[ $weight_slug ],
|
|
'font-size' => ( isset( $attr[ $f_sz_slug ] ) ) ? self::get_css_value( $attr[ $f_sz_slug ], $attr[ $f_sz_type_slug ] ) : '',
|
|
'line-height' => ( isset( $attr[ $l_ht_slug ] ) ) ? self::get_css_value( $attr[ $l_ht_slug ], $attr[ $l_ht_type_slug ] ) : '',
|
|
);
|
|
|
|
$typo_css_desktop[ $selector ] = array_merge(
|
|
$typo_css_desktop[ $selector ],
|
|
$already_selectors_desktop
|
|
);
|
|
|
|
$typo_css_tablet[ $selector ] = array(
|
|
'font-size' => ( isset( $attr[ $f_sz_slug . 'Tablet' ] ) ) ? self::get_css_value( $attr[ $f_sz_slug . 'Tablet' ], $attr[ $f_sz_type_slug ] ) : '',
|
|
'line-height' => ( isset( $attr[ $l_ht_slug . 'Tablet' ] ) ) ? self::get_css_value( $attr[ $l_ht_slug . 'Tablet' ], $attr[ $l_ht_type_slug ] ) : '',
|
|
);
|
|
|
|
$typo_css_tablet[ $selector ] = array_merge(
|
|
$typo_css_tablet[ $selector ],
|
|
$already_selectors_tablet
|
|
);
|
|
|
|
$typo_css_mobile[ $selector ] = array(
|
|
'font-size' => ( isset( $attr[ $f_sz_slug . 'Mobile' ] ) ) ? self::get_css_value( $attr[ $f_sz_slug . 'Mobile' ], $attr[ $f_sz_type_slug ] ) : '',
|
|
'line-height' => ( isset( $attr[ $l_ht_slug . 'Mobile' ] ) ) ? self::get_css_value( $attr[ $l_ht_slug . 'Mobile' ], $attr[ $l_ht_type_slug ] ) : '',
|
|
);
|
|
|
|
$typo_css_mobile[ $selector ] = array_merge(
|
|
$typo_css_mobile[ $selector ],
|
|
$already_selectors_mobile
|
|
);
|
|
|
|
return array(
|
|
'desktop' => array_merge(
|
|
$combined_selectors['desktop'],
|
|
$typo_css_desktop
|
|
),
|
|
'tablet' => array_merge(
|
|
$combined_selectors['tablet'],
|
|
$typo_css_tablet
|
|
),
|
|
'mobile' => array_merge(
|
|
$combined_selectors['mobile'],
|
|
$typo_css_mobile
|
|
),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Parse CSS into correct CSS syntax.
|
|
*
|
|
* @param array $combined_selectors The combined selector array.
|
|
* @param string $id The selector ID.
|
|
* @since 2.2.0
|
|
*/
|
|
public static function generate_all_css( $combined_selectors, $id ) {
|
|
|
|
return array(
|
|
'desktop' => self::generate_css( $combined_selectors['desktop'], $id ),
|
|
'tablet' => self::generate_css( $combined_selectors['tablet'], $id ),
|
|
'mobile' => self::generate_css( $combined_selectors['mobile'], $id ),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Get an instance of WP_Filesystem_Direct.
|
|
*
|
|
* @since 1.14.4
|
|
* @return object A WP_Filesystem_Direct instance.
|
|
*/
|
|
public function get_filesystem() {
|
|
global $wp_filesystem;
|
|
|
|
require_once ABSPATH . '/wp-admin/includes/file.php';
|
|
|
|
WP_Filesystem();
|
|
|
|
return $wp_filesystem;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Prepare if class 'BSF_SP_Helper' exist.
|
|
* Kicking this off by calling 'get_instance()' method
|
|
*/
|
|
BSF_SP_Helper::get_instance();
|
|
}
|
|
|