default( [] ); $schema[ self::TRANSITION_KEY ] = String_Prop_Type::make()->enum( self::TRANSITIONS )->default( 'fade' ); $schema[ self::ANIMATION_KEY ] = String_Prop_Type::make()->enum( self::ANIMATIONS )->default( 'kenburns' ); $schema[ self::OVERLAY_KEY ] = String_Prop_Type::make()->enum( array_merge( [ '' ], self::OVERLAYS ) )->default( '' ); $schema[ self::COVER_KEY ] = Boolean_Prop_Type::make()->default( true ); $schema[ self::DELAY_KEY ] = Number_Prop_Type::make()->default( 5000 ); $schema[ self::TIMER_KEY ] = Boolean_Prop_Type::make()->default( true ); return $schema; } /** * @param array $controls Element controls. * @param object $element v4 element. * @return array */ public static function add_controls( $controls, $element ) { if ( ! Atomic_Extensions::is_container( $element ) ) { return $controls; } $controls[] = Section::make() ->set_id( 'eae_bg_slider_section' ) ->set_label( __( 'AE - Background Slider', 'wts-eae' ) ) ->set_items( [ Repeatable_Control::bind_to( self::IMAGES_KEY ) ->set_repeaterLabel( __( 'Images', 'wts-eae' ) ) ->set_child_control_type( 'image' ) ->set_child_control_props( [ 'sizes' => Image_Sizes::get_all() ] ) ->set_initialValues( self::get_initial_image() ) ->set_patternLabel( __( 'Image', 'wts-eae' ) ) ->set_placeholder( __( 'Empty image', 'wts-eae' ) ) ->set_prop_key( Image_Array_Prop_Type::get_key() ), Select_Control::bind_to( self::TRANSITION_KEY ) ->set_label( __( 'Transition', 'wts-eae' ) ) ->set_options( self::to_options( self::TRANSITIONS ) ), Select_Control::bind_to( self::ANIMATION_KEY ) ->set_label( __( 'Animation', 'wts-eae' ) ) ->set_options( self::to_options( self::ANIMATIONS ) ), Select_Control::bind_to( self::OVERLAY_KEY ) ->set_label( __( 'Overlay', 'wts-eae' ) ) ->set_options( self::get_overlay_options() ), Switch_Control::bind_to( self::COVER_KEY ) ->set_label( __( 'Cover', 'wts-eae' ) ), Number_Control::bind_to( self::DELAY_KEY ) ->set_label( __( 'Delay (ms)', 'wts-eae' ) ) ->set_min( 500 ) ->set_step( 500 ), Switch_Control::bind_to( self::TIMER_KEY ) ->set_label( __( 'Timer Bar', 'wts-eae' ) ), ] ); return $controls; } /** * @param object $transformers Settings transformers registry. */ public static function register_transformer( $transformers ) { $transformers->register( Image_Array_Prop_Type::get_key(), new Array_Transformer() ); } /** * @param object $element Element being rendered. */ public static function collect_config( $element ) { if ( ! Atomic_Extensions::is_container( $element ) ) { return; } $settings = $element->get_data( 'settings' ); $images = Atomic_Extensions::get_value( $settings, self::IMAGES_KEY ); $slides = []; foreach ( is_array( $images ) ? $images : [] as $item ) { $src = self::get_image_url( $item ); if ( $src ) { $slides[] = [ 'src' => $src ]; } } if ( empty( $slides ) ) { return; } $transition = Atomic_Extensions::get_value( $settings, self::TRANSITION_KEY ); $animation = Atomic_Extensions::get_value( $settings, self::ANIMATION_KEY ); $overlay = Atomic_Extensions::get_value( $settings, self::OVERLAY_KEY ); $cover = Atomic_Extensions::get_value( $settings, self::COVER_KEY ); $delay = absint( Atomic_Extensions::get_value( $settings, self::DELAY_KEY ) ); $timer = Atomic_Extensions::get_value( $settings, self::TIMER_KEY ); Atomic_Extensions::add_config( self::NAME, $element->get_id(), [ 'slides' => $slides, 'transition' => in_array( $transition, self::TRANSITIONS, true ) ? $transition : 'fade', 'animation' => in_array( $animation, self::ANIMATIONS, true ) ? $animation : 'kenburns', 'overlay' => in_array( $overlay, self::OVERLAYS, true ) ? $overlay : '', 'cover' => null === $cover ? true : (bool) $cover, 'delay' => $delay ? max( 500, $delay ) : 5000, 'timer' => null === $timer ? true : (bool) $timer, ] ); } public static function register_assets() { Atomic_Extensions::register_assets( self::NAME, self::HANDLE, 'assets/js/atomic-bg-slider.js', [ 'jquery', 'vegas' ], 'assets/css/atomic-bg-slider.css' ); // Vegas' own stylesheet is loaded on every page by the classic BG Slider module. wp_localize_script( self::HANDLE, 'eaeAtomicBgSlider', [ 'overlayUrl' => EAE_URL . 'assets/lib/vegas/overlays/', ] ); } /** * URL of one repeater item, which is stored as a v4 image value. * * @param mixed $item Raw item. * @return string */ private static function get_image_url( $item ) { if ( ! is_array( $item ) || ! empty( $item['disabled'] ) ) { return ''; } $image = Atomic_Extensions::get_value( [ 'image' => $item ], 'image' ); $src = is_array( $image ) ? Atomic_Extensions::get_value( $image, 'src' ) : null; $size = is_array( $image ) ? Atomic_Extensions::get_value( $image, 'size' ) : null; if ( ! is_array( $src ) ) { return ''; } $id = absint( Atomic_Extensions::get_value( $src, 'id' ) ); if ( $id ) { $url = wp_get_attachment_image_url( $id, is_string( $size ) && $size ? $size : 'full' ); return $url ? $url : ''; } $url = Atomic_Extensions::get_value( $src, 'url' ); return is_string( $url ) ? esc_url_raw( $url ) : ''; } private static function get_initial_image() { return [ 'src' => Image_Src_Prop_Type::generate( [ 'id' => null, 'url' => Url_Prop_Type::generate( Placeholder_Image::get_placeholder_image() ), ] ), 'size' => String_Prop_Type::generate( 'full' ), ]; } /** * @param string[] $values Option values. * @return array */ private static function to_options( array $values ) { return array_map( function ( $value ) { return [ 'value' => $value, 'label' => ucfirst( preg_replace( '/([a-z])([A-Z0-9])/', '$1 $2', $value ) ), ]; }, $values ); } private static function get_overlay_options() { $options = [ [ 'value' => '', 'label' => __( 'None', 'wts-eae' ), ], ]; foreach ( self::OVERLAYS as $index => $value ) { $options[] = [ 'value' => $value, /* translators: %d: overlay style number. */ 'label' => sprintf( __( 'Style %d', 'wts-eae' ), $index + 1 ), ]; } return $options; } }