File: /var/www/html/wordpress/wp-content/plugins/feeds-for-youtube/inc/SBY_Display_Elements.php
<?php
namespace SmashBalloon\YouTubeFeed;
use SmashBalloon\YouTubeFeed\SBY_Parse;
use SmashBalloon\YouTubeFeed\Pro\SBY_Parse_Pro;
use Smashballoon\Customizer\Feed_Builder;
class SBY_Display_Elements
{
/**
* Images are hidden initially with the new/transition classes
* except if the js image loading is disabled using the plugin
* settings
*
* @param $settings
*
* @return string
*
* @since 1.0
*/
public static function get_item_classes( $settings ) {
$classes = array( 'sby_new' );
if ( empty( $settings['global_settings'] ) ) {
$settings['global_settings'] = $settings;
}
if ( !$settings['global_settings']['disable_js_image_loading'] ) {
if ( !sby_doing_customizer( $settings ) ) {
$classes[] = 'sby_transition';
}
} else {
$classes[] = 'sby_no_js';
$classes[] = 'sby_no_resraise';
$classes[] = 'sby_js_load_disabled';
}
return ' ' . implode( ' ', $classes );
}
/**
* Returns the list of CSS classes
*
* @param array $settings
* @param array $additional_classes
*
* @return string
*
* @since 2.0
*/
public static function get_feed_container_css_classes( $settings, $additional_classes ) {
$customizer = sby_doing_customizer( $settings );
$classes = '';
$classes_array = array(
'sb_youtube',
'sby_layout_' . esc_attr( $settings['layout'] ),
'sby_col_' . esc_attr( self::get_cols( $settings ) ),
'sby_mob_col_' . esc_attr( self::get_cols_mobile( $settings ) ),
'sby_palette_' . esc_attr( $settings['colorpalette'] ),
);
if ( $customizer ) {
return ' :class="$parent.getFeedContainerClasses()" ';
} else {
$classes = ' class="'. implode(" ", $classes_array ) .' ' . $additional_classes .'"';
}
return $classes;
}
/**
* Get feed container main attributes
*
* @since 2.0
*/
public static function get_feed_container_main_attributes( $settings ) {
$customizer = sby_doing_customizer( $settings );
$atts = self::print_element_attribute(
$customizer,
array(
'attr' => 'data-card-boxshadow',
'vue_content' => ' $parent.customizerFeedData.settings.enableboxshadow',
'php_condition' => $settings['enableboxshadow'] == true,
'php_content' => $settings['enableboxshadow'],
)
);
$atts .= self::print_element_attribute(
$customizer,
array(
'attr' => 'data-videostyle',
'vue_content' => ' $parent.customizerFeedData.settings.videocardstyle',
'php_condition' => $settings['videocardstyle'] === 'boxed',
'php_content' => $settings['videocardstyle'],
)
);
$atts .= self::print_element_attribute(
$customizer,
array(
'attr' => 'data-videocardlayout',
'vue_content' => '$parent.customizerFeedData.settings.videocardlayout',
'php_condition' => isset($settings['videocardlayout']),
'php_content' => $settings['videocardlayout'],
)
);
$atts .= self::print_element_attribute(
$customizer,
array(
'attr' => 'data-cardboxshadow',
'vue_content' => '$parent.customizerFeedData.settings.enableboxshadow',
'php_condition' => isset($settings['enableboxshadow']),
'php_content' => $settings['enableboxshadow'],
)
);
return $atts;
}
/**
* Get text header attributes
*
* @since 2.0
*/
public static function get_text_header_attributes( $settings ) {
$customizer = sby_doing_customizer( $settings );
$atts = self::print_element_attribute(
$customizer,
array(
'attr' => 'data-header-size',
'vue_content' => '$parent.customizerFeedData.settings.customheadersize',
'php_condition' => isset($settings['customheadersize']),
'php_content' => $settings['customheadersize'],
)
);
return $atts;
}
/**
* Print Element HTML Attribute
*
* @param bool $customizer
* @param array $args
*
* @return string
*
* @since 2.0
*/
public static function print_element_attribute( $customizer, $args ) {
if ( $customizer ) {
return ' :' . $args['attr'] . '="' . $args['vue_content'] . '"';
}
if( ( isset( $args['php_condition'] ) && $args['php_condition'] ) || !isset( $args['php_condition'] ) ){
if ( isset( $args['php_content'] ) && !empty( $args['php_content'] ) ) {
return ' ' . $args['attr'] . '="' . esc_attr($args['php_content']) . '"';
}
}
}
public static function get_element_attribute( $element, $settings ) {
$customizer = sby_doing_customizer( $settings );
if ( $customizer ) {
switch ($element) {
case 'icon':
return self::create_condition_show_vue( $customizer, '$parent.valueIsEnabled($parent.customizerFeedData.settings.include.includes(\'icon\'))');
break;
case 'title':
return self::create_condition_show_vue( $customizer, '$parent.valueIsEnabled($parent.customizerFeedData.settings.include.includes(\'title\'))');
break;
case 'user':
return self::create_condition_show_vue( $customizer, '$parent.valueIsEnabled($parent.customizerFeedData.settings.include.includes(\'user\'))');
break;
case 'views':
return self::create_condition_show_vue( $customizer, '$parent.valueIsEnabled($parent.customizerFeedData.settings.include.includes(\'views\'))');
break;
case 'date':
return self::create_condition_show_vue( $customizer, '$parent.valueIsEnabled($parent.customizerFeedData.settings.include.includes(\'date\'))');
break;
case 'countdown':
return self::create_condition_show_vue( $customizer, '$parent.valueIsEnabled($parent.customizerFeedData.settings.include.includes(\'countdown\'))');
break;
case 'stats':
return self::create_condition_show_vue( $customizer, '$parent.valueIsEnabled($parent.customizerFeedData.settings.include.includes(\'stats\'))');
break;
case 'description':
return self::create_condition_show_vue( $customizer, '$parent.valueIsEnabled($parent.customizerFeedData.settings.include.includes(\'description\'))');
break;
case 'duration':
return self::create_condition_show_vue( $customizer, '$parent.valueIsEnabled($parent.customizerFeedData.settings.include.includes(\'duration\'))');
break;
case 'hover_title':
return self::create_condition_show_vue( $customizer, '$parent.valueIsEnabled($parent.customizerFeedData.settings.hoverinclude.includes(\'title\'))');
break;
case 'hover_user':
return self::create_condition_show_vue( $customizer, '$parent.valueIsEnabled($parent.customizerFeedData.settings.hoverinclude.includes(\'user\'))');
break;
case 'hover_countdown':
return self::create_condition_show_vue( $customizer, '$parent.valueIsEnabled($parent.customizerFeedData.settings.hoverinclude.includes(\'countdown\'))');
break;
case 'hover_description':
return self::create_condition_show_vue( $customizer, '$parent.valueIsEnabled($parent.customizerFeedData.settings.hoverinclude.includes(\'description\'))');
break;
case 'hover_date':
return self::create_condition_show_vue( $customizer, '$parent.valueIsEnabled($parent.customizerFeedData.settings.hoverinclude.includes(\'date\'))');
break;
case 'hover_views':
return self::create_condition_show_vue( $customizer, '$parent.valueIsEnabled($parent.customizerFeedData.settings.hoverinclude.includes(\'views\'))');
break;
case 'hover_stats':
return self::create_condition_show_vue( $customizer, '$parent.valueIsEnabled($parent.customizerFeedData.settings.hoverinclude.includes(\'stats\'))');
break;
case 'show_gallery_player':
return self::create_condition_show_vue( $customizer, '$parent.valueIsEnabled($parent.customizerFeedData.settings.layout == \'gallery\')');
break;
}
}
}
/**
* Should Show Print HTML
*
* @param bool $customizer
* @param string $condition
*
* @return string
*
* @since 2.0
*/
public static function create_condition_show_vue( $customizer, $condition ) {
if ( $customizer ) {
return ' v-show="' . $condition . '" ';
}
return '';
}
public static function full_date( $timestamp, $settings, $include_time = false ) {
return date_i18n( self::date_format_setting( $settings['dateformat'], $settings['customdate'] ), $timestamp + sby_get_utc_offset() );
}
public static function date_format_setting( $date_format, $custom_format ) {
if ( empty( $date_format ) ) {
$date_format = get_option( 'date_format' );
if ( ! $date_format ) {
$date_format = 'F j, Y';
}
$time_format = get_option( 'time_format' );
if ( ! $time_format ) {
$date_format .= ' g:i a';
} else {
$date_format .= ' ' . $time_format;
}
return $date_format;
} else {
switch ( $date_format ) {
case '1':
return 'F jS, g:i a';
case '2':
return 'F jS';
case '3':
return 'D F jS';
case '4':
return 'l F jS';
case '5':
return 'D M jS, Y';
case '6':
return 'l F jS, Y - g:i a';
case '7':
return 'm.d.y';
case '8':
return'm.d.y - G:i';
case '9':
return'm/d/y';
break;
case '10':
return 'd.m.y';
case '11':
return 'd/m/y';
case '12':
return 'l jS F Y, G:i';
case 'custom':
if ( empty( $custom_format ) ) {
return 'F jS, g:i a';
}
return $custom_format;
default:
// if the value is not one of the number options and not "custom" then it's likely
// the person set their own custom format in the shortcode
return $date_format;
}
}
}
public static function escaped_formatted_count_string( $count, $type, $no_spinner = false ) {
global $sby_settings;
$type_text = isset( $sby_settings[ $type . 'text' ] ) ? ' ' . esc_attr($sby_settings[ $type . 'text' ]) : '';
if ( '' === $count && false === $no_spinner ) {
return SBY_Display_Elements::spinner() . $type_text;
}
$count = (int)$count;
if ( $count < 1000 ) {
$text = esc_html( number_format_i18n( (float)$count ) );
} elseif ( $count < 1000000 ) {
$thousands = $count/1000;
$num_text = round( $thousands, 1 );
$text = esc_html( $num_text . $sby_settings['thousandstext'] );
} else {
$millions = $count/1000000;
$num_text = round( $millions, 1 );
$text = esc_html( $num_text . $sby_settings['millionstext'] );
}
return $text . $type_text;
}
public static function spinner() {
return '<span class="sby_loader" style="background-color: rgb(255, 255, 255);"></span>';
}
/**
* Get the item media URL
*
* @since 2.0
*/
public static function get_media_url( $settings, $media_url, $media_full_res ) {
return $media_full_res;
}
public static function escaped_live_streaming_time_string( $post, $misc_data = array() ) {
$live_broadcast_type = SBY_Parse::get_live_broadcast_content( $post ); // 'none', 'upcoming', 'live', 'completed'
if ( $live_broadcast_type === 'none' ) {
return '';
}
$scheduled_start_timestamp = SBY_Parse::get_scheduled_start_timestamp( $post, $misc_data );
$actual_start_timestamp = SBY_Parse::get_actual_start_timestamp( $post, $misc_data );
$actual_end_timestamp = SBY_Parse_Pro::get_actual_end_timestamp( $post, $misc_data );
global $sby_settings;
if ( $actual_end_timestamp !== 0
|| $actual_start_timestamp !== 0
|| $live_broadcast_type === 'live'
|| $live_broadcast_type === 'completed' ) {
return esc_html( $sby_settings['watchnowtext'] );
}
if ( $scheduled_start_timestamp === 0 ) {
return esc_html( $sby_settings['beforedatetext'] ) . ' ' . '<span class="sby_loader sby_hidden" style="background-color: rgb(255, 255, 255);"></span>';
}
$now = time();
$difference = $scheduled_start_timestamp - $now;
if ( $difference < 0 ) {
$text = esc_html( $sby_settings['watchnowtext'] );
} elseif ( $difference < 2 * HOUR_IN_SECONDS ) {
$unit_text = $difference < 60 ? $sby_settings['minutetext'] : $sby_settings['minutestext'];
$num_text = round( $difference / 60, 0 );
$text = esc_html( $sby_settings['beforestreamtimetext'] ) . ' ' . $num_text . ' ' . esc_html( $unit_text );
} elseif ( $difference < DAY_IN_SECONDS ) {
$unit_text = $sby_settings['hourstext'];
$num_text = round( $difference / HOUR_IN_SECONDS, 0 );
$text = esc_html( $sby_settings['beforestreamtimetext'] ) . ' ' . $num_text . ' ' . esc_html( $unit_text );
} else {
$text = esc_html( $sby_settings['beforedatetext'] ) . ' ' . esc_html( self::format_date( $scheduled_start_timestamp, $sby_settings, true ) );
}
return $text;
}
public static function format_date( $timestamp, $settings = false, $include_time = false ) {
if ( ! $settings ) {
global $sby_settings;
$settings = $sby_settings;
}
$now = time();
$difference = $now - $timestamp;
$do_not_use_relative = ! $settings['userelative'];
// future date, is a live stream
if ( $difference < 0 || $do_not_use_relative ) {
return self::full_date( $timestamp, $settings, $include_time );
} elseif ( $difference < 2 * HOUR_IN_SECONDS ) {
$unit_text = $difference < 60 ? $settings['minutetext'] : $settings['minutestext'];
$num_text = round( $difference / 60, 0 );
return $num_text . ' ' . esc_html( $unit_text ) . ' ' . esc_html( $settings['agotext'] );
} elseif ( $difference < DAY_IN_SECONDS ) {
$unit_text = $settings['hourstext'];
$num_text = round( $difference / HOUR_IN_SECONDS, 0 );
return $num_text . ' ' . esc_html( $unit_text ) . ' ' . esc_html( $settings['agotext'] );
} else {
return self::full_date( $timestamp, $settings, $include_time );
}
}
/**
* The sby_link element for each item has different styles applied if
* the lightbox is disabled.
*
* @param $settings
*
* @return string
*
* @since 5.0
*/
public static function get_sby_link_classes( $settings ) {
if ( ! empty( $settings['disablelightbox'] ) && ($settings['disablelightbox'] === 'on' || $settings['disablelightbox'] === 'true' || $settings['disablelightbox'] === true) ) {
return ' sby_disable_lightbox';
}
return '';
}
/**
* Get gallery layout player attributes
*
* @since 2.0
*/
public static function get_player_attributes( $settings ) {
$customizer = sby_doing_customizer( $settings );
if ( ! $customizer ) {
return;
}
return self::create_condition_show_vue( $customizer, '$parent.shouldShowPlayer()');
}
/**
* Custom background color for the hover element. Slightly opaque.
*
* @param $settings
*
* @return string
*
* @since 5.0
*/
public static function get_sby_link_styles( $settings ) {
if ( ! empty( $settings['hovercolor'] ) && $settings['hovercolor'] !== '#000' ) {
return 'style="background: rgba(' . esc_attr( sby_hextorgb( $settings['hovercolor'] ) ) . ',0.85)"';
}
return '';
}
/**
* Text color for the hover element.
*
* @param $settings
*
* @return string
*
* @since 5.0
*/
public static function get_hover_styles( $settings ) {
if ( ! empty( $settings['hovertextcolor'] ) && $settings['hovertextcolor'] !== '#000' ) {
return 'style="color: rgba(' . esc_attr( sby_hextorgb( $settings['hovertextcolor'] ) ) . ',1)"';
}
return '';
}
/**
* Inline styles applied to the caption/like count/comment count information appearing
* underneath each post by default.
*
* @param $settings
*
* @return string
*
* @since 5.0
*/
public static function get_sby_info_styles( $settings ) {
$styles = '';
if ( (! empty( $settings['captionsize'] ) && $settings['captionsize'] !== 'inherit') || ! empty( $settings['captioncolor'] ) ) {
$styles = 'style="';
if ( ! empty( $settings['captionsize'] ) && $settings['captionsize'] !== 'inherit' ) {
$styles .= 'font-size: '. esc_attr( $settings['captionsize'] ) . 'px;';
}
if ( ! empty( $settings['captioncolor'] ) ) {
$styles .= 'color: rgb(' . esc_attr( sby_hextorgb( $settings['captioncolor'] ) ). ');';
}
$styles .= '"';
}
return $styles;
}
/**
* Color of the likes heart icon and the comment voice box icon in the
* sby_info area.
*
* @param $settings
*
* @return string
*
* @since 5.0
*/
public static function get_sby_meta_color_styles( $settings ) {
if ( ! empty( $settings['likescolor'] ) ) {
return 'style="color: rgb(' . esc_attr( sby_hextorgb( $settings['likescolor'] ) ). ');"';
}
return '';
}
/**
* Size of the likes heart icon and the comment voice box icon in the
* sby_info area.
*
* @param $settings
*
* @return string
*
* @since 5.0
*/
public static function get_sby_meta_size_color_styles( $settings ) {
$styles = '';
if ( (! empty( $settings['likessize'] ) && $settings['likessize'] !== 'inherit') || ! empty( $settings['likescolor'] ) ) {
$styles = 'style="';
if ( ! empty( $settings['likessize'] ) && $settings['likessize'] !== 'inherit' ) {
$styles .= 'font-size: '. esc_attr( $settings['likessize'] ) . 'px;';
}
if ( ! empty( $settings['likescolor'] ) ) {
$styles .= 'color: rgb(' . esc_attr( sby_hextorgb( $settings['likescolor'] ) ). ');';
}
$styles .= '"';
}
return $styles;
}
/**
* Display header
*
* @since 2.0
*/
public static function display_header( $header_data, $settings ) {
if ( sby_doing_customizer( $settings ) ) {
include sby_get_feed_template_part( 'header', $settings );
include sby_get_feed_template_part( 'header-text', $settings );
} else {
if ( $settings['headerstyle'] == 'standard' ) {
include sby_get_feed_template_part( 'header', $settings );
} else if ( $settings['headerstyle'] == 'text' ) {
include sby_get_feed_template_part( 'header-text', $settings );
}
}
}
/**
* Overwritten in the Pro version.
*
* @param string $type key of the kind of icon needed
* @param string $icon_type svg or font
*
* @return string the complete html for the icon
*
* @since 1.0
*/
public static function get_icon( $type, $icon_type ) {
return self::get_basic_icons( $type, $icon_type );
}
public static function get_cols( $settings ) {
if( $settings['layout'] == 'list' ) {
return 0;
}
if ( isset( $settings['cols'] ) ) {
return $settings['cols'];
}
return 0;
}
public static function get_cols_mobile( $settings ) {
if( $settings['layout'] == 'list' ) {
return 0;
}
if ( isset( $settings['colsmobile'] ) ) {
return $settings['colsmobile'];
}
return 0;
}
public static function get_style_att( $context, $settings, $pos = false ) {
$style_settings = array();
$item_spacing_setting = $settings['itemspacing'];
if ( ! preg_match("/(px)|(%)/", $item_spacing_setting ) ) {
$item_spacing_setting = $item_spacing_setting . $settings['itemspacingunit'];
}
if ( $context === 'player' ) {
$style_settings['margin-bottom'] = $item_spacing_setting;
} elseif ( $context === 'item' ) {
if ( $settings['layout'] === 'list' ) {
$style_settings['margin-bottom'] = $item_spacing_setting;
}
} elseif ( $context === 'items_wrap' || $context === 'player_outer_wrap' ) {
if ( $settings['layout'] !== 'list' ) {
$style_settings['padding'] = $item_spacing_setting;
}
} elseif ( $context === 'header' ) {
if ( $settings['itemspacing'] > 0 ) {
$style_settings['padding'] = $item_spacing_setting;
}
if ( $settings['itemspacing'] < 10 ) {
$style_settings['margin-bottom'] = '10px';
}
$style_settings['padding-bottom'] = '0';
}
if ( $context === 'player_outer_wrap' ) {
$style_settings['padding-bottom'] = 0;
}
$style_att = '';
if ( ! empty( $style_settings ) ) {
$style_att = ' style="';
foreach ( $style_settings as $prop => $val ) {
$style_att .= esc_attr( $prop . ': '. $val . ';' );
}
$style_att .= '"';
}
return $style_att;
}
public static function get_display_avatar( $header_data, $settings ) {
if ( SBY_GDPR_Integrations::doing_gdpr( $settings ) && $settings['global_settings']['disablecdn'] ) {
return trailingslashit( SBY_PLUGIN_URL ) . 'img/placeholder.png';
}
return SBY_Parse::get_avatar( $header_data, $settings );
}
/**
* Get Text Header Attributes
*
* @since 2.0
*/
public static function get_header_text_attr( $settings ) {
if ( sby_doing_customizer( $settings ) ) {
return ' :data-header-subscriber="$parent.checkShouldShowSubscribers()"';
}
// If not doing customizer
$subscribe_shown = $settings['showsubscribe'] == true ? 'shown' : '';
return ' data-header-subscriber="'. $subscribe_shown .'"';
}
/**
* Palette class
*
* @param array $settings
* @param string $context
*
* @return string
*
* @since 2.0
*/
public static function get_palette_class( $settings, $context = '' ) {
$customizer = sby_doing_customizer( $settings );
if ( $customizer ) {
return ' $parent.getPaletteClass() ';
} else {
$feed_id_addition = ! empty( $settings['colorpalette'] ) && $settings['colorpalette'] === 'custom' ? '_' . $settings['feed'] : '';
$palette_class = ! empty( $settings['colorpalette'] ) && $settings['colorpalette'] !== 'inherit' ? ' sby' . $context . '_palette_' . $settings['colorpalette'] . $feed_id_addition : '';
return $palette_class;
}
}
/**
* Palette type
*
* @param array $settings
*
* @return string
*
* @since 2.0
*/
public static function palette_type( $settings ) {
return ! empty( $settings['colorpalette'] ) ? $settings['colorpalette'] : 'inherit';
}
/**
* Returns the best media url for an image based on settings.
* By default a white placeholder image is loaded and replaced
* with the most optimal image size based on the actual dimensions
* of the image element in the feed.
*
* @param array $post data for an individual post
* @param array $settings
* @param array $resized_images (optional) not yet used but
* can pass in existing resized images to use in the source
*
* @return string
*
* @since 1.0
*/
public static function get_optimum_media_url( $post, $settings, $resized_images = array() ) {
$media_url = '';
$optimum_res = $settings['imageres'];
$account_type = isset( $post['images'] ) ? 'personal' : 'business';
if ( empty( $settings['global_settings'] ) ) {
$settings['global_settings'] = $settings;
}
// only use the placeholder if it will be replaced using JS
if ( ! $settings['global_settings']['disable_js_image_loading'] || ($settings['global_settings']['disablecdn'] && $settings['global_settings']['gdpr'] === 'yes')) {
return trailingslashit( SBY_PLUGIN_URL ) . 'img/placeholder.png';
} else {
$optimum_res = 'full';
$settings['imageres'] = 'full';
}
$media_url = SBY_Parse::get_media_url( $post, 'lightbox' );
return $media_url;
}
/**
* Creates a style attribute that contains all of the styles for
* the main feed div.
*
* @param $settings
*
* @return string
*/
public static function get_feed_style( $settings ) {
$styles = '';
$bg_color = str_replace( '#', '', $settings['background'] );
if ( ! empty( $settings['imagepadding'] )
|| ! empty( $bg_color )
|| ! empty( $settings['width'] )
|| ! empty( $settings['height'] ) ) {
$styles = ' style="';
if ( ! empty( $settings['imagepadding'] ) ) {
$styles .= 'padding-bottom: ' . ((int)$settings['imagepadding'] * 2) . esc_attr( $settings['imagepaddingunit'] ) . ';';
}
if ( ! empty( $bg_color ) ) {
$styles .= 'background-color: rgb(' . esc_attr( sby_hextorgb( $bg_color ) ). ');';
}
if ( ! empty( $settings['width'] ) ) {
$styles .= 'width: ' . (int)$settings['width'] . esc_attr( $settings['widthunit'] ) . ';';
}
if ( ! empty( $settings['height'] ) ) {
$styles .= 'height: ' . (int)$settings['height'] . esc_attr( $settings['heightunit'] ) . ';';
}
$styles .= '"';
}
return $styles;
}
/**
* Creates a style attribute for the sby_images div
*
* @param $settings
*
* @return string
*
* @since 1.0
*/
public static function get_items_wrap_style( $settings ) {
if ( ! empty ( $settings['imagepadding'] ) ) {
return 'style="padding: '.(int)$settings['imagepadding'] . esc_attr( $settings['imagepaddingunit'] ) . ';"';
}
return '';
}
/**
* Creates a style attribute for the header. Can be used in
* several places based on the header style
*
* @param $settings
*
* @return string
*
* @since 1.0
*/
public static function get_header_text_color_styles( $settings ) {
$header_color = str_replace( '#', '', $settings['headercolor'] );
if ( ! empty( $header_color ) ) {
return 'style="color: rgb(' . esc_attr( sby_hextorgb( $header_color ) ). ');"';
}
return '';
}
/**
* Header icon and text size is styled using the class added here.
*
* @param $settings
*
* @return string
*
* @since 1.0
*/
public static function get_header_size_class( $settings ) {
$header_size_class = in_array( strtolower( $settings['headersize'] ), array( 'medium', 'large' ) ) ? ' sby_'.strtolower( $settings['headersize'] ) : '';
return $header_size_class;
}
/**
* Creates a style attribute for the subscribe button. Can be in
* the feed footer or in a boxed header.
*
* @param $settings
*
* @return string
*
* @since 1.0
*/
public static function get_subscribe_styles( $settings ) {
$styles = '';
$subscribe_color = str_replace( '#', '', $settings['subscribecolor'] );
$subscribe_text_color = str_replace( '#', '', $settings['subscribetextcolor'] );
if ( ! empty( $subscribe_color ) || ! empty( $subscribe_text_color ) ) {
$styles = 'style="';
if ( ! empty( $subscribe_color ) ) {
$styles .= 'background: rgb(' . esc_attr( sby_hextorgb( $subscribe_color ) ) . ');';
}
if ( ! empty( $subscribe_text_color ) ) {
$styles .= 'color: rgb(' . esc_attr( sby_hextorgb( $subscribe_text_color ) ). ');';
}
$styles .= '"';
}
return $styles;
}
/**
* Creates a style attribute for styling the load more button.
*
* @param $settings
*
* @return string
*
* @since 1.0
*/
public static function get_load_button_styles( $settings ) {
$styles = '';
$button_color = str_replace( '#', '', $settings['buttoncolor'] );
$button_text_color = str_replace( '#', '', $settings['buttontextcolor'] );
if ( ! empty( $button_color ) || ! empty( $button_text_color ) ) {
$styles = 'style="';
if ( ! empty( $button_color ) ) {
$styles .= 'background: rgb(' . esc_attr( sby_hextorgb( $button_color ) ) . ');';
}
if ( ! empty( $button_text_color ) ) {
$styles .= 'color: rgb(' . esc_attr( sby_hextorgb( $button_text_color ) ). ');';
}
$styles .= '"';
}
return $styles;
}
/**
* Get load more button attributes
*
* @since 2.0
*/
public static function get_load_button_attribute( $settings ) {
return self::should_print_element_vue( sby_doing_customizer( $settings ), '$parent.customizerFeedData.settings.buttontext' );
}
/**
* Get subscribe button attributes
*
* @since 2.0
*/
public static function get_subscribe_button_attribute( $settings ) {
return self::should_print_element_vue( sby_doing_customizer( $settings ), '$parent.customizerFeedData.settings.subscribetext' );
}
/**
* Get subscribe button attributes
*
* @since 2.0
*/
public static function get_text_header_content( $settings ) {
return self::should_print_element_vue( sby_doing_customizer( $settings ), '$parent.getCustomHeaderText()' );
}
/**
* Channel subscribers data attributes
*
* @param array $settings
*
* @return string
*
* @since 2.0
*/
public static function get_subscribers_data_attributes( $settings ) {
if ( ! sby_doing_customizer( $settings ) ) {
return '';
}
return ' ' . self::display_vue_condition( 'showsubscribers' );
}
/**
* Channel description data attributes
*
* @param array $settings
*
* @return string
*
* @since 2.0
*/
public static function get_description_data_attributes( $settings ) {
if ( ! sby_doing_customizer( $settings ) ) {
return '';
}
return ' ' . self::display_vue_condition( 'showdescription' );
}
/**
* Load button data attributes
*
* @param array $settings
*
* @return string
*
* @since 2.0
*/
public static function get_button_data_attributes( $settings ) {
if ( ! sby_doing_customizer( $settings ) ) {
return '';
}
return ' ' . self::display_vue_condition( 'showbutton' );
}
/**
* Subscribe link bar data attributes
*
* @param array $settings
*
* @return string
*
* @since 2.1
*/
public static function get_subscribe_bar_link_data_attributes( $settings ) {
if ( ! sby_doing_customizer( $settings ) ) {
return '';
}
return ' ' . self::display_vue_condition( 'enablesubscriberlink' );
}
/**
* Subscribe button data attributes
*
* @param array $settings
*
* @return string
*
* @since 2.0
*/
public static function get_subscribe_button_data_attributes( $settings ) {
if ( ! sby_doing_customizer( $settings ) ) {
return '';
}
return ' ' . self::display_vue_condition( 'showsubscribe' );
}
/**
* Customizer feed Header display conditions
*
* @param array $settings
*
* @return string
*
* @since 2.0
*/
public static function get_header_display_condition( $settings ) {
if ( ! sby_doing_customizer( $settings ) ) {
return '';
}
return ' v-show="$parent.shouldShowStandardHeader()"';
}
/**
* Get subscribe button text
*
* @since 2.1
*
* @return string
*/
public static function get_subscribe_btn_text( $settings ) {
if ( sby_doing_customizer( $settings ) ) {
return '';
}
return isset( $settings['subscribetext'] ) ? $settings['subscribetext'] : '';
}
/**
* Customizer feed text header data attributes
*
* @param array $settings
*
* @return string
*
* @since 2.0
*/
public static function get_text_header_display_condition( $settings ) {
if ( ! sby_doing_customizer( $settings ) ) {
return '';
}
return ' v-show="$parent.shouldShowTextHeader()"';
}
/**
* Display vue condition
*
* @param array $setting_name
*
* @return string
*
* @since 6.0
*/
public static function display_vue_condition( $setting_name, $custom_condition = '' ) {
return self::create_condition_vue( true, '$parent.valueIsEnabled( $parent.customizerFeedData.settings.' . $setting_name . ' ) '. $custom_condition );
}
/**
* Should Print HTML
*
* @param bool $customizer
* @param string $condition
*
* @return string
*
* @since 2.0
*/
public static function create_condition_vue( $customizer, $condition ) {
if ( $customizer ) {
return ' v-if="' . $condition . '" ';
}
return '';
}
/**
* A not very elegant but useful method to abstract out how the settings
* work for displaying certain elements in the feed.
*
* @param string $element specific key, view below for supported ones
* @param $settings
*
* @return bool
*
* @since 5.0
*/
public static function should_show_element( $element, $context, $settings ) {
//user, views, date
if ( $context === 'item-hover' ) {
$include_array = is_array( $settings['hoverinclude'] ) ? $settings['hoverinclude'] : explode( ',', str_replace( ' ', '', $settings['hoverinclude'] ) );
} else {
$include_array = is_array( $settings['include'] ) ? $settings['include'] : explode( ',', str_replace( ' ', '', $settings['include'] ) );
}
if ( in_array( $element, $include_array, true ) ) {
return true;
}
return false;
}
/**
* Returns the html for an icon based on the kind requested
*
* @param string $type kind of icon needed (ex "video" is a play button)
* @param string $icon_type svg or font
*
* @return string
*
* @since 1.0
*/
protected static function get_basic_icons( $type, $icon_type ) {
if ( $type === 'carousel' ) {
if ( $icon_type === 'svg' ) {
return '<svg class="svg-inline--fa fa-clone fa-w-16 sby_lightbox_carousel_icon" aria-hidden="true" data-fa-proƒcessed="" data-prefix="far" data-icon="clone" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<path fill="currentColor" d="M464 0H144c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h320c26.51 0 48-21.49 48-48v-48h48c26.51 0 48-21.49 48-48V48c0-26.51-21.49-48-48-48zM362 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h42v224c0 26.51 21.49 48 48 48h224v42a6 6 0 0 1-6 6zm96-96H150a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h308a6 6 0 0 1 6 6v308a6 6 0 0 1-6 6z"></path>
</svg>';
} else {
return '<i class="fa fa-clone sby_carousel_icon" aria-hidden="true"></i>';
}
} elseif ( $type === 'video' ) {
if ( $icon_type === 'svg' ) {
return '<svg style="color: rgba(255,255,255,1)" class="svg-inline--fa fa-play fa-w-14 sby_playbtn" aria-hidden="true" data-fa-processed="" data-prefix="fa" data-icon="play" role="presentation" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M424.4 214.7L72.4 6.6C43.8-10.3 0 6.1 0 47.9V464c0 37.5 40.7 60.1 72.4 41.3l352-208c31.4-18.5 31.5-64.1 0-82.6z"></path></svg>';
} else {
return '<i class="fa fa-play sby_playbtn" aria-hidden="true"></i>';
}
} elseif ( $type === 'youtube' ) {
if ( $icon_type === 'svg' ) {
return '<svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="youtube" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" class="svg-inline--fa fa-youtube fa-w-18"><path fill="currentColor" d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z" class=""></path></svg>';
} else {
return '<i aria-hidden="true" role="img" class="sby_new_logo fab fa-youtube"></i>';
}
} elseif ( $type === 'newlogo' ) {
if ( $icon_type === 'svg' ) {
return '<svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="youtube" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" class="sby_new_logo svg-inline--fa fa-youtube fa-w-18"><path fill="currentColor" d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z" class=""></path></svg>';
} else {
return '<i aria-hidden="true" role="img" class="sby_new_logo fab fa-youtube"></i>';
}
} elseif ( $type === 'play') {
if ( $icon_type === 'svg' ) {
return '<svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="youtube" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" class="svg-inline--fa fa-youtube fa-w-18"><path fill="currentColor" d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z" class=""></path></svg>';
} else {
return '<i aria-hidden="true" role="img" class="fa fas fa-play"></i>';
}
} else {
return '';
}
}
public static function escaped_data_att_string( $atts ) {
if ( empty( $atts ) ) {
return '';
}
$string = '';
foreach ( $atts as $key => $value ) {
$string .= ' ' . esc_attr( $key ) . '="' . esc_attr( $value ) . '"';
}
return $string;
}
/**
* Should Print HTML
*
* @param bool $customizer
* @param string $content
*
* @return string
*
* @since 2.0
*/
public static function should_print_element_vue( $customizer, $content ) {
if ( $customizer ) {
return ' v-html="' . $content . '" ';
}
return '';
}
}