animation.php (4791B)
1 <?php 2 namespace Elementor; 3 4 if ( ! defined( 'ABSPATH' ) ) { 5 exit; // Exit if accessed directly. 6 } 7 8 /** 9 * Elementor animation control. 10 * 11 * A base control for creating entrance animation control. Displays a select box 12 * with the available entrance animation effects @see Control_Animation::get_animations() . 13 * 14 * @since 1.0.0 15 */ 16 class Control_Animation extends Base_Data_Control { 17 18 /** 19 * Get control type. 20 * 21 * Retrieve the animation control type. 22 * 23 * @since 1.0.0 24 * @access public 25 * 26 * @return string Control type. 27 */ 28 public function get_type() { 29 return 'animation'; 30 } 31 32 /** 33 * Retrieve default control settings. 34 * 35 * Get the default settings of the control. Used to return the default 36 * settings while initializing the control. 37 * 38 * @since 2.5.0 39 * @access protected 40 * 41 * @return array Control default settings. 42 */ 43 protected function get_default_settings() { 44 $default_settings['label_block'] = true; 45 $default_settings['render_type'] = 'none'; 46 47 return $default_settings; 48 } 49 50 /** 51 * Get animations list. 52 * 53 * Retrieve the list of all the available animations. 54 * 55 * @since 1.0.0 56 * @access public 57 * @static 58 * 59 * @return array Control type. 60 */ 61 public static function get_animations() { 62 $animations = [ 63 'Fading' => [ 64 'fadeIn' => 'Fade In', 65 'fadeInDown' => 'Fade In Down', 66 'fadeInLeft' => 'Fade In Left', 67 'fadeInRight' => 'Fade In Right', 68 'fadeInUp' => 'Fade In Up', 69 ], 70 'Zooming' => [ 71 'zoomIn' => 'Zoom In', 72 'zoomInDown' => 'Zoom In Down', 73 'zoomInLeft' => 'Zoom In Left', 74 'zoomInRight' => 'Zoom In Right', 75 'zoomInUp' => 'Zoom In Up', 76 ], 77 'Bouncing' => [ 78 'bounceIn' => 'Bounce In', 79 'bounceInDown' => 'Bounce In Down', 80 'bounceInLeft' => 'Bounce In Left', 81 'bounceInRight' => 'Bounce In Right', 82 'bounceInUp' => 'Bounce In Up', 83 ], 84 'Sliding' => [ 85 'slideInDown' => 'Slide In Down', 86 'slideInLeft' => 'Slide In Left', 87 'slideInRight' => 'Slide In Right', 88 'slideInUp' => 'Slide In Up', 89 ], 90 'Rotating' => [ 91 'rotateIn' => 'Rotate In', 92 'rotateInDownLeft' => 'Rotate In Down Left', 93 'rotateInDownRight' => 'Rotate In Down Right', 94 'rotateInUpLeft' => 'Rotate In Up Left', 95 'rotateInUpRight' => 'Rotate In Up Right', 96 ], 97 'Attention Seekers' => [ 98 'bounce' => 'Bounce', 99 'flash' => 'Flash', 100 'pulse' => 'Pulse', 101 'rubberBand' => 'Rubber Band', 102 'shake' => 'Shake', 103 'headShake' => 'Head Shake', 104 'swing' => 'Swing', 105 'tada' => 'Tada', 106 'wobble' => 'Wobble', 107 'jello' => 'Jello', 108 ], 109 'Light Speed' => [ 110 'lightSpeedIn' => 'Light Speed In', 111 ], 112 'Specials' => [ 113 'rollIn' => 'Roll In', 114 ], 115 ]; 116 117 $additional_animations = []; 118 119 /** 120 * Entrance animations. 121 * 122 * Filters the animations list displayed in the animations control. 123 * 124 * This hook can be used to register animations in addition to the 125 * basic Elementor animations. 126 * 127 * @since 2.4.0 128 * 129 * @param array $additional_animations Additional animations array. 130 */ 131 $additional_animations = apply_filters( 'elementor/controls/animations/additional_animations', $additional_animations ); 132 133 return array_merge( $animations, $additional_animations ); 134 } 135 136 /** 137 * Render animations control template. 138 * 139 * Used to generate the control HTML in the editor using Underscore JS 140 * template. The variables for the class are available using `data` JS 141 * object. 142 * 143 * @since 1.0.0 144 * @access public 145 */ 146 public function content_template() { 147 ?> 148 <div class="elementor-control-field"> 149 <label for="<?php $this->print_control_uid(); ?>" class="elementor-control-title">{{{ data.label }}}</label> 150 <div class="elementor-control-input-wrapper"> 151 <select id="<?php $this->print_control_uid(); ?>" data-setting="{{ data.name }}"> 152 <option value=""><?php echo esc_html__( 'Default', 'elementor' ); ?></option> 153 <option value="none"><?php echo esc_html__( 'None', 'elementor' ); ?></option> 154 <?php foreach ( static::get_animations() as $animations_group_name => $animations_group ) : ?> 155 <optgroup label="<?php echo esc_attr( $animations_group_name ); ?>"> 156 <?php foreach ( $animations_group as $animation_name => $animation_title ) : ?> 157 <option value="<?php echo esc_attr( $animation_name ); ?>"><?php echo esc_html( $animation_title ); ?></option> 158 <?php endforeach; ?> 159 </optgroup> 160 <?php endforeach; ?> 161 </select> 162 </div> 163 </div> 164 <# if ( data.description ) { #> 165 <div class="elementor-control-field-description">{{{ data.description }}}</div> 166 <# } #> 167 <?php 168 } 169 170 public static function get_assets( $setting ) { 171 if ( ! $setting || 'none' === $setting ) { 172 return []; 173 } 174 175 return [ 176 'styles' => [ 'e-animations' ], 177 ]; 178 } 179 }