Components -> Background * */ if ( ! defined( 'ABSPATH' ) ) exit; function tbkkt_background_resolve_image_url( array $attrs ): string { $id = isset( $attrs['backgroundImageId'] ) ? (int) $attrs['backgroundImageId'] : 0; if ( $id > 0 ) : $url = wp_get_attachment_image_url( $id, 'full' ); return is_string( $url ) ? $url : ''; endif; $url = isset( $attrs['backgroundImageUrl'] ) ? trim( (string) $attrs['backgroundImageUrl'] ) : ''; return $url !== '' ? esc_url_raw( $url ) : ''; } function tbkkt_background_resolve_video_url( array $attrs ): string { $id = isset( $attrs['backgroundVideoId'] ) ? (int) $attrs['backgroundVideoId'] : 0; if ( $id > 0 ) : $url = wp_get_attachment_url( $id ); if ( ! is_string( $url ) || $url === '' ) return ''; $mime = get_post_mime_type( $id ); if ( ! is_string( $mime ) || ! str_starts_with( strtolower( $mime ), 'video/' ) ) : return ''; endif; return $url; endif; $url = isset( $attrs['backgroundVideoUrl'] ) ? trim( (string) $attrs['backgroundVideoUrl'] ) : ''; return $url !== '' ? esc_url_raw( $url ) : ''; } function tbkkt_background_resolve_video_poster_url( array $attrs ): string { $id = isset( $attrs['backgroundVideoPosterId'] ) ? (int) $attrs['backgroundVideoPosterId'] : 0; if ( $id > 0 ) : $url = wp_get_attachment_image_url( $id, 'full' ); return is_string( $url ) ? $url : ''; endif; $url = isset( $attrs['backgroundVideoPosterUrl'] ) ? trim( (string) $attrs['backgroundVideoPosterUrl'] ) : ''; return $url !== '' ? esc_url_raw( $url ) : ''; } function tbkkt_background_build_overlay_opacity_class( $opacity_value ): string { if ( ! is_numeric( $opacity_value ) ) return ''; $opacity = (float) $opacity_value; if ( $opacity < 0 ) $opacity = 0; if ( $opacity > 1 ) $opacity = 1; $percent = (int) round( ( $opacity * 100 ) / 5 ) * 5; if ( $percent <= 0 ) return ''; if ( $percent > 100 ) $percent = 100; $suffix = $percent < 10 ? '0' . $percent : (string) $percent; return 'tbkkt-opacity-' . $suffix; } function tbkkt_background_build_object_fit_class( string $value ): string { $allowed = array( 'cover', 'contain', 'fill', 'none', 'scale-down' ); $sanitized = tbkkt_block_markup_sanitize_class_slug( $value ); return in_array( $sanitized, $allowed, true ) ? 'object-fit-' . $sanitized : ''; } function tbkkt_background_build_object_position_class( string $value ): string { $allowed = array( 'top', 'bottom', 'left', 'right', 'center', 'top-left', 'top-right', 'bottom-left', 'bottom-right' ); $sanitized = tbkkt_block_markup_sanitize_class_slug( $value ); return in_array( $sanitized, $allowed, true ) ? 'object-position-' . $sanitized : ''; } function tbkkt_background_build_background_repeat_class( string $value ): string { $allowed = array( 'no-repeat', 'repeat', 'repeat-x', 'repeat-y', 'space', 'round' ); $sanitized = tbkkt_block_markup_sanitize_class_slug( $value ); return in_array( $sanitized, $allowed, true ) ? 'background-repeat-' . $sanitized : ''; } function tbkkt_background_build_background_position_class( string $value ): string { $allowed = array( 'top', 'bottom', 'left', 'right', 'center', 'top-left', 'top-right', 'bottom-left', 'bottom-right' ); $sanitized = tbkkt_block_markup_sanitize_class_slug( $value ); return in_array( $sanitized, $allowed, true ) ? 'background-position-' . $sanitized : ''; } function tbkkt_background_build_background_size_class( string $value ): string { $allowed = array( 'auto', 'cover', 'contain' ); $sanitized = tbkkt_block_markup_sanitize_class_slug( $value ); return in_array( $sanitized, $allowed, true ) ? 'background-size-' . $sanitized : ''; } function tbkkt_background_render_markup( array $args ): string { $type = isset( $args['type'] ) ? tbkkt_block_markup_sanitize_class_slug( (string) $args['type'] ) : 'none'; $image_url = isset( $args['image_url'] ) ? trim( (string) $args['image_url'] ) : ''; $video_url = isset( $args['video_url'] ) ? trim( (string) $args['video_url'] ) : ''; $video_poster_url = isset( $args['video_poster_url'] ) ? trim( (string) $args['video_poster_url'] ) : ''; $overlay_opacity = isset( $args['overlay_opacity'] ) && is_numeric( $args['overlay_opacity'] ) ? (float) $args['overlay_opacity'] : 0.0; $wrapper_class = isset( $args['wrapper_class'] ) ? trim( (string) $args['wrapper_class'] ) : 'tbkkt-background'; $background_wrapper_class_name = isset( $args['background_wrapper_class_name'] ) ? trim( (string) $args['background_wrapper_class_name'] ) : ''; if ( $background_wrapper_class_name !== '' ) : $wrapper_class = trim( $wrapper_class . ' ' . $background_wrapper_class_name ); endif; $image_class_base = isset( $args['image_class'] ) ? trim( (string) $args['image_class'] ) : 'tbkkt-background-image'; $image_object_fit_class = isset( $args['image_object_fit_class'] ) ? trim( (string) $args['image_object_fit_class'] ) : ''; $image_object_position_class = isset( $args['image_object_position_class'] ) ? trim( (string) $args['image_object_position_class'] ) : ''; $image_class = trim( $image_class_base . ( $image_object_fit_class !== '' ? ' ' . $image_object_fit_class : '' ) . ( $image_object_position_class !== '' ? ' ' . $image_object_position_class : '' ) ); $video_class = isset( $args['video_class'] ) ? trim( (string) $args['video_class'] ) : 'tbkkt-background-video'; $overlay_class = isset( $args['overlay_class'] ) ? trim( (string) $args['overlay_class'] ) : 'tbkkt-background-overlay'; $overlay_opacity_class = isset( $args['overlay_opacity_class'] ) ? trim( (string) $args['overlay_opacity_class'] ) : ''; $overlay_color_class = isset( $args['overlay_color_class'] ) ? trim( (string) $args['overlay_color_class'] ) : ''; $use_layer = isset( $args['use_layer'] ) && $args['use_layer'] === true; $layer_class_base = isset( $args['layer_class'] ) ? trim( (string) $args['layer_class'] ) : 'tbkkt-background-layer'; $layer_repeat_class = isset( $args['layer_repeat_class'] ) ? trim( (string) $args['layer_repeat_class'] ) : ''; $layer_position_class = isset( $args['layer_position_class'] ) ? trim( (string) $args['layer_position_class'] ) : ''; $layer_size_class = isset( $args['layer_size_class'] ) ? trim( (string) $args['layer_size_class'] ) : ''; $layer_size_custom = isset( $args['layer_size_custom'] ) ? trim( (string) $args['layer_size_custom'] ) : ''; $layer_size_is_custom = isset( $args['layer_size_is_custom'] ) && $args['layer_size_is_custom'] === true; $layer_class = trim( $layer_class_base . ( $layer_repeat_class !== '' ? ' ' . $layer_repeat_class : '' ) . ( $layer_position_class !== '' ? ' ' . $layer_position_class : '' ) . ( $layer_size_class !== '' ? ' ' . $layer_size_class : '' ) . ( $layer_size_is_custom ? ' background-size-custom' : '' ) ); $background_always_render = isset( $args['background_always_render'] ) && $args['background_always_render'] === true; $media_markup = ''; if ( $type === 'image' && $image_url !== '' ) : if ( $use_layer ) : $layer_style_parts = array(); $layer_image_url_esc = esc_url( $image_url ); if ( $layer_image_url_esc !== '' ) : $layer_style_parts[] = '--tbkkt--background--image:url(' . $layer_image_url_esc . ')'; endif; if ( $layer_size_custom !== '' ) : $layer_style_parts[] = '--tbkkt--background--size-custom:' . sanitize_text_field( $layer_size_custom ); endif; $layer_style_attr = count( $layer_style_parts ) > 0 ? ' style="' . esc_attr( implode( ';', $layer_style_parts ) . ';' ) . '"' : ''; $media_markup .= '
'; else : $media_markup .= '