<?php
/**
 * Premium Lottie Animations.
 */

namespace PremiumAddons\Widgets;

// Elementor Classes.
use Elementor\Plugin;
use Elementor\Widget_Base;
use Elementor\Controls_Manager;
use Elementor\Group_Control_Border;
use Elementor\Group_Control_Css_Filter;
use Elementor\Group_Control_Box_Shadow;

// PremiumAddons Classes.
use PremiumAddons\Includes\Helper_Functions;
use PremiumAddons\Includes\Controls\Premium_Post_Filter;

if ( ! defined( 'ABSPATH' ) ) {
	exit; // If this file is called directly, abort.
}

/**
 * Class Premium_Lottie
 */
class Premium_Lottie extends Widget_Base {

	/**
	 * Retrieve Widget Name.
	 *
	 * @since 1.0.0
	 * @access public
	 */
	public function get_name() {
		return 'premium-lottie';
	}

	/**
	 * Retrieve Widget Dependent CSS.
	 *
	 * @since 1.0.0
	 * @access public
	 *
	 * @return array CSS style handles.
	 */
	public function get_style_depends() {
		return array(
			'premium-addons',
		);
	}

	/**
	 * Retrieve Widget Dependent JS.
	 *
	 * @since 1.0.0
	 * @access public
	 *
	 * @return array JS script handles.
	 */
	public function get_script_depends() {

		$is_edit = Helper_Functions::is_edit_mode();

		$scripts = array();
		if ( $is_edit || 'true' === $this->get_settings( 'mouse_tilt' ) ) {
			$scripts[] = 'pa-tilt';
		}

		$scripts[] = 'lottie-js';

		return $scripts;
	}

	/**
	 * Retrieve Widget Title.
	 *
	 * @since 1.0.0
	 * @access public
	 */
	public function get_title() {
		return __( 'Lottie Animations', 'premium-addons-for-elementor' );
	}

	/**
	 * Retrieve Widget Icon.
	 *
	 * @since 1.0.0
	 * @access public
	 *
	 * @return string widget icon.
	 */
	public function get_icon() {
		return 'pa-lottie-animations';
	}

	/**
	 * Retrieve Widget Keywords.
	 *
	 * @since 1.0.0
	 * @access public
	 *
	 * @return array Widget keywords.
	 */
	public function get_keywords() {
		return array( 'pa', 'premium', 'premium lottie', 'animation', 'json', 'vector', 'motion' );
	}

	/**
	 * Retrieve Widget Categories.
	 *
	 * @since 1.5.1
	 * @access public
	 *
	 * @return array Widget categories.
	 */
	public function get_categories() {
		return array( 'premium-elements' );
	}

	protected function is_dynamic_content(): bool {
		return false;
	}

	/**
	 * Retrieve Widget Support URL.
	 *
	 * @access public
	 *
	 * @return string support URL.
	 */
	public function get_custom_help_url() {
		return 'https://premiumaddons.com/support/';
	}

	public function has_widget_inner_wrapper(): bool {
		return ! Helper_Functions::check_elementor_experiment( 'e_optimized_markup' );
	}

	/**
	 * Register Testimonials controls.
	 *
	 * @since 3.20.0
	 * @access protected
	 */
	protected function register_controls() { // phpcs:ignore PSR2.Methods.MethodDeclaration.Underscore

		$this->start_controls_section(
			'section_general_settings',
			array(
				'label' => __( 'General Settings', 'premium-addons-for-elementor' ),
			)
		);

		$demo = Helper_Functions::get_campaign_link( 'https://premiumaddons.com/elementor-lottie-animations-widget/', 'lottie', 'wp-editor', 'demo' );
		Helper_Functions::add_templates_controls( $this, 'lottie-animations', $demo );

		$this->add_control(
			'source',
			array(
				'label'   => __( 'File Source', 'premium-addons-for-elementor' ),
				'type'    => Controls_Manager::SELECT,
				'options' => array(
					'url'  => __( 'External URL', 'premium-addons-for-elementor' ),
					'file' => __( 'Media File', 'premium-addons-for-elementor' ),
				),
				'default' => 'url',
			)
		);

		$this->add_control(
			'lottie_url',
			array(
				'label'       => __( 'Animation JSON URL', 'premium-addons-for-elementor' ),
				'type'        => Controls_Manager::TEXT,
				'dynamic'     => array( 'active' => true ),
				'description' => 'Get JSON code URL from <a href="https://lottiefiles.com/" target="_blank">here</a>',
				'label_block' => true,
				'condition'   => array(
					'source' => 'url',
				),
				'ai'          => array(
					'active' => false,
				),
			)
		);

		$this->add_control(
			'lottie_file',
			array(
				'label'              => __( 'Upload JSON File', 'premium-addons-for-elementor' ),
				'type'               => Controls_Manager::MEDIA,
				'media_type'         => 'application/json',
				'frontend_available' => true,
				'condition'          => array(
					'source' => 'file',
				),
			)
		);

		$this->add_control(
			'lottie_loop',
			array(
				'label'        => __( 'Loop', 'premium-addons-for-elementor' ),
				'type'         => Controls_Manager::SWITCHER,
				'return_value' => 'true',
				'default'      => 'true',
			)
		);

		$this->add_control(
			'lottie_loop_times',
			array(
				'label'       => __( 'Times', 'premium-addons-for-elementor' ),
				'type'        => Controls_Manager::NUMBER,
				'description' => __( 'Total number of times the animation plays before it pauses. Leave empty to loop forever.', 'premium-addons-for-elementor' ),
				'min'         => 1,
				'step'        => 1,
				'condition'   => array(
					'lottie_loop' => 'true',
					'trigger!'    => 'scroll',
				),
			)
		);

		$this->add_control(
			'lottie_reverse',
			array(
				'label'        => __( 'Reverse', 'premium-addons-for-elementor' ),
				'type'         => Controls_Manager::SWITCHER,
				'return_value' => 'true',
			)
		);

		$this->add_control(
			'lottie_speed',
			array(
				'label'   => __( 'Animation Speed', 'premium-addons-for-elementor' ),
				'type'    => Controls_Manager::NUMBER,
				'default' => 1,
				'min'     => 0.1,
				'max'     => 3,
				'step'    => 0.1,
			)
		);

		$this->add_control(
			'lottie_delay',
			array(
				'label' => __( 'Animation Delay (sec)', 'premium-addons-for-elementor' ),
				'type'  => Controls_Manager::NUMBER,
				'min'   => 0,
				'max'   => 5,
				'step'  => 0.1,
			)
		);

		$this->add_control(
			'trigger',
			array(
				'label'              => __( 'Trigger', 'premium-addons-for-elementor' ),
				'type'               => Controls_Manager::SELECT,
				'options'            => array(
					'none'     => __( 'None', 'premium-addons-for-elementor' ),
					'viewport' => __( 'Viewport', 'premium-addons-for-elementor' ),
					'hover'    => __( 'Hover', 'premium-addons-for-elementor' ),
					'scroll'   => __( 'Scroll', 'premium-addons-for-elementor' ),
					'click'    => __( 'Click', 'premium-addons-for-elementor' ),
				),
				'frontend_available' => true,
			)
		);

		$this->add_control(
			'hover_leave_reverse',
			array(
				'label'        => __( 'Reset on Mouse Leave', 'premium-addons-for-elementor' ),
				'type'         => Controls_Manager::SWITCHER,
				'return_value' => 'true',
				'condition'    => array(
					'trigger'         => 'hover',
					'lottie_reverse!' => 'true',
				),
			)
		);

		$this->add_control(
			'lottie_hover',
			array(
				'label'        => __( 'Play on Hover', 'premium-addons-for-elementor' ),
				'type'         => Controls_Manager::HIDDEN,
				'return_value' => 'true',
			)
		);

		$this->add_control(
			'animate_on_scroll',
			array(
				'label'        => __( 'Play On Scroll', 'premium-addons-for-elementor' ),
				'type'         => Controls_Manager::HIDDEN,
				'return_value' => 'true',
			)
		);

		$this->add_control(
			'animate_speed',
			array(
				'label'     => __( 'Speed', 'premium-addons-for-elementor' ),
				'type'      => Controls_Manager::SLIDER,
				'default'   => array(
					'size' => 4,
				),
				'range'     => array(
					'px' => array(
						'max'  => 10,
						'step' => 0.1,
					),
				),
				'condition' => array(
					'trigger'         => 'scroll',
					'lottie_reverse!' => 'true',
				),
			)
		);

		$this->add_control(
			'animate_view',
			array(
				'label'     => __( 'Viewport', 'premium-addons-for-elementor' ),
				'type'      => Controls_Manager::SLIDER,
				'default'   => array(
					'sizes' => array(
						'start' => 0,
						'end'   => 100,
					),
					'unit'  => '%',
				),
				'labels'    => array(
					__( 'Bottom', 'premium-addons-for-elementor' ),
					__( 'Top', 'premium-addons-for-elementor' ),
				),
				'scales'    => 1,
				'handles'   => 'range',
				'condition' => array(
					'trigger'         => array( 'scroll', 'viewport' ),
					'lottie_reverse!' => 'true',
				),
			)
		);

		$this->add_responsive_control(
			'animation_size',
			array(
				'label'      => __( 'Size', 'premium-addons-for-elementor' ),
				'type'       => Controls_Manager::SLIDER,
				'size_units' => array( 'px', 'em', '%', 'vw' ),
				'default'    => array(
					'unit' => 'px',
					'size' => 200,
				),
				'range'      => array(
					'px' => array(
						'min' => 1,
						'max' => 800,
					),
					'em' => array(
						'min' => 1,
						'max' => 30,
					),
				),
				'separator'  => 'before',
				'selectors'  => array(
					'{{WRAPPER}}.premium-lottie-canvas .premium-lottie-animation, {{WRAPPER}}.premium-lottie-svg svg'    => 'width: {{SIZE}}{{UNIT}} !important;',
				),
			)
		);

		$this->add_responsive_control(
			'lottie_rotate',
			array(
				'label'       => __( 'Rotate (degrees)', 'premium-addons-for-elementor' ),
				'type'        => Controls_Manager::SLIDER,
				'description' => __( 'Set rotation value in degrees', 'premium-addons-for-elementor' ),
				'range'       => array(
					'px' => array(
						'min' => -180,
						'max' => 180,
					),
				),
				'default'     => array(
					'size' => 0,
				),
				'selectors'   => array(
					'{{WRAPPER}} .premium-lottie-animation' => 'transform: rotate({{SIZE}}deg)',
				),
			)
		);

		$this->add_responsive_control(
			'animation_align',
			array(
				'label'     => __( 'Alignment', 'premium-addons-for-elementor' ),
				'type'      => Controls_Manager::CHOOSE,
				'options'   => array(
					'left'   => array(
						'title' => __( 'Left', 'premium-addons-for-elementor' ),
						'icon'  => 'eicon-text-align-left',
					),
					'center' => array(
						'title' => __( 'Center', 'premium-addons-for-elementor' ),
						'icon'  => 'eicon-text-align-center',
					),
					'right'  => array(
						'title' => __( 'Right', 'premium-addons-for-elementor' ),
						'icon'  => 'eicon-text-align-right',
					),
				),
				'default'   => 'center',
				'toggle'    => false,
				'separator' => 'before',
				'selectors' => array(
					'{{WRAPPER}}' => 'text-align: {{VALUE}}',
				),
			)
		);

		$this->add_control(
			'link_switcher',
			array(
				'label' => __( 'Link', 'premium-addons-for-elementor' ),
				'type'  => Controls_Manager::SWITCHER,
			)
		);

		$this->add_control(
			'link_selection',
			array(
				'label'       => __( 'Link Type', 'premium-addons-for-elementor' ),
				'type'        => Controls_Manager::SELECT,
				'options'     => array(
					'url'  => __( 'URL', 'premium-addons-for-elementor' ),
					'link' => __( 'Existing Page', 'premium-addons-for-elementor' ),
				),
				'default'     => 'url',
				'label_block' => true,
				'condition'   => array(
					'link_switcher' => 'yes',
				),
			)
		);

		$this->add_control(
			'link',
			array(
				'label'       => __( 'Link', 'premium-addons-for-elementor' ),
				'type'        => Controls_Manager::URL,
				'dynamic'     => array( 'active' => true ),
				'default'     => array(
					'url' => '#',
				),
				'placeholder' => 'https://premiumaddons.com/',
				'label_block' => true,
				'separator'   => 'after',
				'condition'   => array(
					'link_switcher'  => 'yes',
					'link_selection' => 'url',
				),
			)
		);

		$this->add_control(
			'existing_link',
			array(
				'label'       => __( 'Existing Page', 'premium-addons-for-elementor' ),
				'type'        => Premium_Post_Filter::TYPE,
				'label_block' => true,
				'multiple'    => false,
				'source'      => array( 'post', 'page' ),
				'condition'   => array(
					'link_switcher'  => 'yes',
					'link_selection' => 'link',
				),
			)
		);

		$this->add_control(
			'lottie_renderer',
			array(
				'label'        => __( 'Render As', 'premium-addons-for-elementor' ),
				'type'         => Controls_Manager::SELECT,
				'options'      => array(
					'svg'    => __( 'SVG', 'premium-addons-for-elementor' ),
					'canvas' => __( 'Canvas', 'premium-addons-for-elementor' ),
				),
				'default'      => 'svg',
				'prefix_class' => 'premium-lottie-',
				'render_type'  => 'template',
				'label_block'  => true,
				'separator'    => 'before',
			)
		);

		$this->add_control(
			'render_notice',
			array(
				'raw'             => __( 'Set render type to canvas if you\'re having performance issues on the page.', 'premium-addons-for-elementor' ),
				'type'            => Controls_Manager::RAW_HTML,
				'content_classes' => 'elementor-panel-alert elementor-panel-alert-info',
			)
		);

		$this->add_control(
			'mouse_tilt',
			array(
				'label'        => __( 'Enable Mouse Tilt', 'premium-addons-for-elementor' ),
				'type'         => Controls_Manager::SWITCHER,
				'return_value' => 'true',
			)
		);

		$this->add_control(
			'mouse_tilt_rev',
			array(
				'label'        => __( 'Reverse', 'premium-addons-for-elementor' ),
				'type'         => Controls_Manager::SWITCHER,
				'return_value' => 'true',
				'condition'    => array(
					'mouse_tilt' => 'true',
				),
			)
		);

		$this->end_controls_section();

		$this->start_controls_section(
			'section_pa_docs',
			array(
				'label' => __( 'Help & Docs', 'premium-addons-for-elementor' ),
			)
		);

		$docs = array(
			'https://www.youtube.com/watch?v=0QWzUpF57dw' => __( 'Check the video tutorial »', 'premium-addons-for-elementor' ),
			'https://premiumaddons.com/docs/elementor-lottie-animations-widget-tutorial/' => __( 'Check the documentation article »', 'premium-addons-for-elementor' ),
			'https://premiumaddons.com/docs/how-to-speed-up-elementor-pages-with-many-lottie-animations' => __( 'How to speed up Elementor pages with many Lottie animations »', 'premium-addons-for-elementor' ),
			'https://premiumaddons.com/docs/customize-elementor-lottie-widget/' => __( 'How to Customize Lottie Animations »', 'premium-addons-for-elementor' ),
		);

		$doc_index = 1;
		foreach ( $docs as $url => $title ) {

			$doc_url = Helper_Functions::get_campaign_link( $url, 'lottie-widget', 'wp-editor', 'get-support' );

			$this->add_control(
				'doc_' . $doc_index,
				array(
					'type'            => Controls_Manager::RAW_HTML,
					'raw'             => sprintf( '<a href="%s" target="_blank">%s</a>', $doc_url, $title ),
					'content_classes' => 'editor-pa-doc',
				)
			);

			++$doc_index;

		}

		Helper_Functions::register_element_feedback_controls( $this );

		$this->end_controls_section();

		Helper_Functions::register_papro_promotion_controls( $this, 'lottie' );

		$this->start_controls_section(
			'section_animation_style',
			array(
				'label' => __( 'Animation', 'premium-addons-for-elementor' ),
				'tab'   => Controls_Manager::TAB_STYLE,
			)
		);

		$this->start_controls_tabs( 'tabs_lottie' );

		$this->start_controls_tab(
			'tab_lottie_normal',
			array(
				'label' => __( 'Normal', 'premium-addons-for-elementor' ),
			)
		);

		$this->add_control(
			'lottie_background',
			array(
				'label'     => __( 'Background Color', 'premium-addons-for-elementor' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					'{{WRAPPER}} .premium-lottie-animation'  => 'background-color: {{VALUE}}',
				),
			)
		);

		$this->add_control(
			'opacity',
			array(
				'label'     => __( 'Opacity', 'premium-addons-for-elementor' ),
				'type'      => Controls_Manager::SLIDER,
				'range'     => array(
					'px' => array(
						'max'  => 1,
						'min'  => 0.10,
						'step' => 0.01,
					),
				),
				'selectors' => array(
					'{{WRAPPER}} .premium-lottie-animation' => 'opacity: {{SIZE}}',
				),
			)
		);

		$this->add_group_control(
			Group_Control_Css_Filter::get_type(),
			array(
				'name'     => 'css_filters',
				'selector' => '{{WRAPPER}} .premium-lottie-animation',
			)
		);

		$this->end_controls_tab();

		$this->start_controls_tab(
			'tab_lottie_hover',
			array(
				'label' => __( 'Hover', 'premium-addons-for-elementor' ),
			)
		);

		$this->add_control(
			'lottie_hover_background',
			array(
				'label'     => __( 'Background Color', 'premium-addons-for-elementor' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => array(
					'{{WRAPPER}} .premium-lottie-animation:hover'  => 'background-color: {{VALUE}}',
				),
			)
		);

		$this->add_control(
			'hover_opacity',
			array(
				'label'     => __( 'Opacity', 'premium-addons-for-elementor' ),
				'type'      => Controls_Manager::SLIDER,
				'range'     => array(
					'px' => array(
						'max'  => 1,
						'min'  => 0.10,
						'step' => 0.01,
					),
				),
				'selectors' => array(
					'{{WRAPPER}} .premium-lottie-animation:hover' => 'opacity: {{SIZE}}',
				),
			)
		);

		$this->add_group_control(
			Group_Control_Css_Filter::get_type(),
			array(
				'name'     => 'hover_css_filters',
				'selector' => '{{WRAPPER}} .premium-lottie-animation:hover',
			)
		);

		$this->end_controls_tab();

		$this->end_controls_tabs();

		$this->add_group_control(
			Group_Control_Border::get_type(),
			array(
				'name'      => 'lottie_border',
				'selector'  => '{{WRAPPER}} .premium-lottie-animation',
				'separator' => 'before',
			)
		);

		$this->add_control(
			'lottie_border_radius',
			array(
				'label'      => __( 'Border Radius', 'premium-addons-for-elementor' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', '%', 'em' ),
				'selectors'  => array(
					'{{WRAPPER}} .premium-lottie-animation' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}',
				),
				'condition'  => array(
					'lottie_adv_radius!' => 'yes',
				),
			)
		);

		$this->add_control(
			'lottie_adv_radius',
			array(
				'label'       => __( 'Advanced Border Radius', 'premium-addons-for-elementor' ),
				'type'        => Controls_Manager::SWITCHER,
				'description' => __( 'Apply custom radius values. Get the radius value from ', 'premium-addons-for-elementor' ) . '<a href="https://9elements.github.io/fancy-border-radius/" target="_blank">here</a>' . __( '. See ', 'premium-addons-for-elementor' ) . '<a href="https://www.youtube.com/watch?v=S0BJazLHV-M" target="_blank">tutorial</a>',
			)
		);

		$this->add_control(
			'lottie_adv_radius_value',
			array(
				'label'     => __( 'Border Radius', 'premium-addons-for-elementor' ),
				'type'      => Controls_Manager::TEXT,
				'dynamic'   => array( 'active' => true ),
				'selectors' => array(
					'{{WRAPPER}} .premium-lottie-animation' => 'border-radius: {{VALUE}};',
				),
				'condition' => array(
					'lottie_adv_radius' => 'yes',
				),
				'ai'        => array(
					'active' => false,
				),
			)
		);

		$this->add_responsive_control(
			'animation_padding',
			array(
				'label'      => __( 'Padding', 'premium-addons-for-elementor' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => array( 'px', 'em', '%' ),
				'selectors'  => array(
					'{{WRAPPER}} .premium-lottie-animation' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}',
				),
			)
		);

		$this->end_controls_section();
	}

	/**
	 * Render Lottie Animations output on the frontend.
	 *
	 * Written in PHP and used to generate the final HTML.
	 *
	 * @since 3.20.2
	 * @access protected
	 */
	protected function render() {

		$settings = $this->get_settings_for_display();

		$anim_url = 'url' === $settings['source'] ? $settings['lottie_url'] : $settings['lottie_file']['url'];

		if ( empty( $anim_url ) ) {
			return;
		}

		if ( '' !== $settings['trigger'] ) {
			$settings['lottie_hover']      = false;
			$settings['animate_on_scroll'] = false;
		}

		$this->add_render_attribute(
			'lottie',
			array(
				'class'                  => 'premium-lottie-animation',
				'data-lottie-url'        => $anim_url,
				'data-lottie-loop'       => $settings['lottie_loop'],
				'data-lottie-loop-times' => $settings['lottie_loop_times'],
				'data-lottie-reverse'    => $settings['lottie_reverse'],
				'data-lottie-hover'      => $settings['lottie_hover'] || 'hover' === $settings['trigger'],
				'data-lottie-speed'      => $settings['lottie_speed'],
				'data-lottie-render'     => $settings['lottie_renderer'],
				'data-lottie-delay'      => $settings['lottie_delay'],
			)
		);

		if ( 'hover' === $settings['trigger'] && 'true' === $settings['hover_leave_reverse'] ) {
			$this->add_render_attribute( 'lottie', 'data-lottie-reset', 'true' );
		}

		if ( $settings['animate_on_scroll'] || 'scroll' === $settings['trigger'] ) {

			$this->add_render_attribute(
				'lottie',
				array(
					'class'              => 'premium-lottie-scroll',
					'data-lottie-scroll' => 'true',
					'data-scroll-start'  => isset( $settings['animate_view']['sizes']['start'] ) ? $settings['animate_view']['sizes']['start'] : '0',
					'data-scroll-end'    => isset( $settings['animate_view']['sizes']['end'] ) ? $settings['animate_view']['sizes']['end'] : '100',
					'data-scroll-speed'  => isset( $settings['animate_speed']['size'] ) ? $settings['animate_speed']['size'] : 4,
				)
			);

		} elseif ( 'viewport' === $settings['trigger'] ) {
			$this->add_render_attribute(
				'lottie',
				array(
					'data-lottie-viewport' => 'true',
					'data-scroll-start'    => isset( $settings['animate_view']['sizes']['start'] ) ? $settings['animate_view']['sizes']['start'] : '0',
					'data-scroll-end'      => isset( $settings['animate_view']['sizes']['end'] ) ? $settings['animate_view']['sizes']['end'] : '100',
				)
			);
		} elseif ( 'click' === $settings['trigger'] ) {
			$this->add_render_attribute(
				'lottie',
				array(
					'data-lottie-click' => 'true',
				)
			);
		}

		if ( 'yes' === $settings['link_switcher'] ) {

			if ( 'url' === $settings['link_selection'] ) {
				$this->add_link_attributes( 'link', $settings['link'] );
			} else {
				$this->add_render_attribute( 'link', 'href', get_permalink( $settings['existing_link'] ) );
			}
		}

		if ( 'true' === $settings['mouse_tilt'] ) {
			$this->add_render_attribute( 'lottie', 'data-box-tilt', 'true' );
			if ( 'true' === $settings['mouse_tilt_rev'] ) {
				$this->add_render_attribute( 'lottie', 'data-box-tilt-reverse', 'true' );
			}
		}

		?>

		<div <?php $this->print_render_attribute_string( 'lottie' ); ?>>
			<?php if ( 'yes' === $settings['link_switcher'] ) : ?>
				<a <?php $this->print_render_attribute_string( 'link' ); ?>></a>
			<?php endif; ?>
		</div>

		<?php
	}

	/**
	 * Render Testimonials widget output in the editor.
	 *
	 * Written as a Backbone JavaScript template and used to generate the live preview.
	 *
	 * @since 3.20.2
	 * @access protected
	 */
	protected function content_template() {

		?>

		<#

		var anim_url = null;

		if( 'url' === settings.source ) {
			anim_url = settings.lottie_url
		} else if( settings.lottie_file ) {
			anim_url = settings.lottie_file.url;
		}

		if( ! anim_url )
			return;

		if( '' !== settings.trigger ) {
			settings.lottie_hover = false;
			settings.animate_on_scroll = false;
		}

		view.addRenderAttribute( 'lottie', {
			'class': 'premium-lottie-animation',
			'data-lottie-url': anim_url,
			'data-lottie-loop': settings.lottie_loop,
			'data-lottie-loop-times': settings.lottie_loop_times,
			'data-lottie-reverse': settings.lottie_reverse,
			'data-lottie-hover': settings.lottie_hover || 'hover' === settings.trigger,
			'data-lottie-speed': settings.lottie_speed,
			'data-lottie-render': settings.lottie_renderer,
			'data-lottie-delay': settings.lottie_delay
		});

		if( 'hover' === settings.trigger && 'true' === settings.hover_leave_reverse ) {
			view.addRenderAttribute( 'lottie', 'data-lottie-reset', 'true' );
		}

		if( settings.animate_on_scroll || 'scroll' === settings.trigger ) {

			view.addRenderAttribute( 'lottie', {
				'class': 'premium-lottie-scroll',
				'data-lottie-scroll': 'true',
				'data-scroll-start': settings.animate_view.sizes.start,
				'data-scroll-end': settings.animate_view.sizes.end,
				'data-scroll-speed': settings.animate_speed.size,
			});

		} else if( 'viewport' === settings.trigger ) {

			view.addRenderAttribute( 'lottie', {
				'data-lottie-viewport': 'true',
				'data-scroll-start': settings.animate_view.sizes.start,
				'data-scroll-end': settings.animate_view.sizes.end,
			});

		} else if ( 'click' === settings.trigger ) {

			view.addRenderAttribute( 'lottie', {
				'data-lottie-click': 'true',
			});
		}

		if( 'yes' === settings.link_switcher ) {

			var button_url = '';

			if( settings.link_selection === 'url' ) {
				button_url = settings.link.url;
			} else {
				button_url = settings.existing_link;
			}

			view.addRenderAttribute( 'link', 'href', button_url );

		}

		if ( 'true' === settings.mouse_tilt ) {
			view.addRenderAttribute( 'lottie', 'data-box-tilt', 'true' );
			if ( 'true' === settings.mouse_tilt_rev ) {
				view.addRenderAttribute( 'lottie', 'data-box-tilt-reverse', 'true' );
			}
		}


	#>

		<div {{{ view.getRenderAttributeString('lottie') }}}>
			<# if( 'yes' === settings.link_switcher && '' !== button_url ) { #>
				<a {{{ view.getRenderAttributeString('link') }}}></a>
			<# } #>
		</div>

		<?php
	}
}
