default( '' ); return $schema; } public static function get_settings( $element ) { if ( ! is_object( $element ) || ! method_exists( $element, 'get_atomic_setting' ) ) { return null; } $value = $element->get_atomic_setting( self::PROP ); $settings = is_string( $value ) ? json_decode( $value, true ) : null; return is_array( $settings ) ? $settings : null; } public static function start_buffer( $element ) { $settings = self::get_settings( $element ); if ( ! $settings || ! in_array( $settings['advanced_animation_enable'] ?? '', array( 'yes', true, 1 ), true ) ) { return; } self::$buffers[ spl_object_id( $element ) ] = array( 'level' => ob_get_level() + 1, 'settings' => wpaddons_build_animation_attributes( $settings ), ); ob_start(); } public static function finish_buffer( $element ) { $id = spl_object_id( $element ); if ( ! isset( self::$buffers[ $id ] ) ) { return; } $buffer = self::$buffers[ $id ]; unset( self::$buffers[ $id ] ); if ( ob_get_level() !== $buffer['level'] ) { return; } $html = ob_get_clean(); echo self::add_attributes( $html, $element->get_id(), $buffer['settings'], method_exists( $element, 'get_interaction_id' ) ? $element->get_interaction_id() : null ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } public static function add_attributes( $html, $id, $settings, $interaction_id = null ) { if ( ! class_exists( 'WP_HTML_Tag_Processor' ) ) { return $html; } $processor = new WP_HTML_Tag_Processor( $html ); while ( $processor->next_tag() ) { // Atomic layouts retain data-id; widget Twig roots expose only their // interaction ID (which can be an origin ID for component instances). if ( (string) $processor->get_attribute( 'data-id' ) !== (string) $id && (string) $processor->get_attribute( 'data-interaction-id' ) !== (string) ( $interaction_id ?? $id ) ) { continue; } $processor->set_attribute( 'data-advanced-animation', 'yes' ); $processor->set_attribute( 'data-animation-settings', wp_json_encode( $settings ) ); break; } return $processor->get_updated_html(); } } add_action( 'elementor/init', array( 'WPAddons_Atomic_Animation', 'init' ) );