MP_Calculator_Enqueue

Class MP_Calculator_Enqueue


Source Source

File: mortgage-platform/Inc/Calculators/MortgageCalculator/MP_Calculator_Enqueue.php

class MP_Calculator_Enqueue {

	/**
	 * Style settings.
	 * @var mixed|void style settings
	 * @since  1.0.0
	 * @access protected
	 */
	protected $style_settings;


	/**
	 * Enqueue constructor.
	 * @since  1.0.0
	 * @access public
	 */
	public function __construct() {
		$this->style_settings      = get_option( MortgagePlatform::$prefix . 'style' );
		$this->calculator_settings = get_option( MortgagePlatform::$prefix . 'mortgage_calculator' );
		$this->analytics_settings  = get_option( MortgagePlatform::$prefix . 'analytics' );
		$this->lead_settings = get_option(MortgagePlatform::$prefix . 'leads');
	}


	/**
	 * Enqueue styles and scripts.
	 * @since  1.0.0
	 * @access public
	 */
	public function enqueue_scripts($font) {

		$this->add_styles($font);
		$this->add_scripts();

		MP_Calculator_Widgets::widget_form();

	}

	/**
     * Add styles.
     *
     * @access private
     * @since 1.0.0
     *
	 * @param string $font font
	 */
	private function add_styles($font){

		wp_enqueue_style( MortgagePlatform::$prefix . 'main-styles', plugins_url( '../assets/css/mortgage_platform_calculators.main.min.css', __FILE__ ), array(), MortgagePlatform::$mortgage_platform_version );

		wp_enqueue_style( 'jquery.mCustomScrollbar', plugins_url( '../assets/css/jquery.mCustomScrollbar.min.css', __FILE__ ) );
		if ( 'default' !== $font ) {
			wp_enqueue_style( MortgagePlatform::$prefix . 'font', 'https://fonts.googleapis.com/css?family=' . $font . '', array(), MortgagePlatform::$mortgage_platform_version );
		}
		wp_enqueue_style( MortgagePlatform::$prefix . 'print', plugins_url( '../assets/css/print.min.css', __FILE__ ), array(), MortgagePlatform::$mortgage_platform_version, 'print' );

		if ( get_option( MortgagePlatform::$prefix . 'style' )['primary_color'] ) {
			ob_start();
			/**
			 * Custom css.
			 */
			require_once plugin_dir_path( __FILE__ ) . '../assets/css/mortgage-calculator-custom.php';
			$custom_styles = ob_get_clean();

			wp_add_inline_style( MortgagePlatform::$prefix . 'main-styles', $custom_styles );
		}
    }


	/**
	 * Add scripts.
     *
     * @access private
     * @since 1.0.0
	 */
    private function add_scripts(){

	    wp_enqueue_script( 'jquery' );
	    wp_enqueue_script( 'jquery.mCustomScrollbar.concat', plugins_url( '../assets/js/jquery.mCustomScrollbar.concat.min.js', __FILE__ ), array( 'jquery' ), MortgagePlatform::$mortgage_platform_version, false );
	    wp_enqueue_script( 'chart.js', 'https://cdn.jsdelivr.net/npm/chart.js@2.8.0', array(), MortgagePlatform::$mortgage_platform_version, true );


	    wp_enqueue_script( MortgagePlatform::$prefix . 'main', plugins_url( 'assets/js/mortgage_calculator.main.min.js', __FILE__ ), array( 'jquery.mCustomScrollbar.concat' ), MortgagePlatform::$mortgage_platform_version, true );
	    wp_localize_script( MortgagePlatform::$prefix . 'main', MortgagePlatform::$domain, $this->get_data_for_localize_script() );

	    if(isset($this->analytics_settings['abandoned_leads']) && $this->analytics_settings['abandoned_leads']){
		    wp_enqueue_script( 'mortgage_abandoned_fields', plugins_url( 'assets/js/mortgage_abandoned_fields.min.js', __FILE__ ), array( 'jquery', MortgagePlatform::$prefix . 'main-js' ), MortgagePlatform::$mortgage_platform_version, true );
	    }

    }


	/**
     * Get data for locolize script.
     *
     * @access public
     * @since 1.0.0
     *
	 * @return array
	 */
	public function get_data_for_localize_script(){

	    $data = array(
		    'ajax_url'                             => admin_url( 'admin-ajax.php' ),
		    MortgagePlatform::$prefix . 'nonce'    => wp_create_nonce( MortgagePlatform::$prefix . 'nonce' ),
		    MortgagePlatform::$prefix . 'searches' => wp_create_nonce( MortgagePlatform::$prefix . 'searches' ),
		    'primary_color'                        => $this->style_settings['primary_color'] ?? false,
		    'rounded_elements'                     => isset( $this->style_settings['rounded_elements'] ) ? $this->style_settings['rounded_elements'] : false,
		    'first_input'                          => isset( $this->style_settings['first_input'] ) ? $this->style_settings['first_input'] : false,
		    'mortgagescroll'                       => isset( $this->analytics_settings['ga_scroll_tracking'] ) ? $this->analytics_settings['ga_scroll_tracking'] : false,
		    'mortgagegoals'                        => isset( $this->analytics_settings['ga_goals'] ) ? $this->analytics_settings['ga_goals'] : false,
		    'mortgageconversion'                   => isset( $this->analytics_settings['ga_conversion_tracking'] ) ? $this->analytics_settings['ga_conversion_tracking'] : false,

	    );

	    return $data;
    }


	/**
	 * Register styles.
	 * @since  1.0.0
	 * @access public
	 */
	public function register_styles() {
		wp_register_style( MortgagePlatform::$prefix . 'fullpage', plugins_url( '../assets/css/fullpage.min.css', __FILE__ ), array( MortgagePlatform::$prefix . 'main-styles' ), MortgagePlatform::$mortgage_platform_version, false );
		wp_register_style( MortgagePlatform::$prefix . 'darktheme', plugins_url( '../assets/css/darktheme.min.css', __FILE__ ), array( MortgagePlatform::$prefix . 'main-styles' ), MortgagePlatform::$mortgage_platform_version, false );
	}


	/**
	 * Dynamic enqueue styles and scripts.
	 * @since  1.0.0
	 * @access public
	 */
	public function dynamic_enqueue_scripts( $atts ) {

		$list             = 'enqueued';
		$enqueue_css_list = array();

		$style_theme = isset( $atts['type_style'] ) ? $atts['type_style'] : get_option( MortgagePlatform::$prefix . 'style' )['type_style'];
		switch ( $style_theme ) {
			case ( 'darktheme' ):
				$enqueue_css_list = array( MortgagePlatform::$prefix . 'darktheme' );
				break;
			case ( 'fullpage' ):
				$enqueue_css_list = array( MortgagePlatform::$prefix . 'fullpage' );
				break;
		}

		foreach ( $enqueue_css_list as $css ) {
			if ( wp_style_is( $css, $list ) ) {
				return;
			} else {
				wp_enqueue_style( $css );
			}
		}

		$enqueue_js_list = array();
		foreach ( $enqueue_js_list as $js ) {
			if ( wp_script_is( $js, $list ) ) {
				return;
			} else {
				wp_enqueue_script( $js );
			}
		}

	}


	/**
	 * Enqueue scripts and styles for Iframe emded.
	 * @since  1.0.0
	 * @access public
	 */
	public static function iframe_scripts() {
		?>

        <link rel="stylesheet"
              href="<?php echo esc_url( plugins_url( '../assets/css/jquery.mCustomScrollbar.min.css', __FILE__ ) ); ?>">
        <link rel="stylesheet"
              href="<?php echo esc_url( plugins_url( '../assets/css/mortgage_platform_calculators.main.min.css', __FILE__ ) ); ?>">

        <script src="https://cdn.jsdelivr.net/npm/chart.js@2.8.0"></script>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
        <script src="<?php echo esc_url( plugins_url( '../assets/js/jquery.mCustomScrollbar.concat.min.js', __FILE__ ) ); ?>"></script>
        <script>
          var <?php echo esc_attr( MortgagePlatform::$domain ); ?> =
          {
            'ajax_url'
          :
            '<?php echo esc_url( admin_url( 'admin-ajax.php' ) ); ?>',
              '<?php echo esc_attr( MortgagePlatform::$prefix ); ?>nonce"
          :
            '<?php echo esc_attr( wp_create_nonce( MortgagePlatform::$prefix . 'nonce' ) ); ?>'
          }
        </script>
        <script src="<?php echo esc_url( plugins_url( 'assets/js/mortgage_calculator.main.min.js', __FILE__ ) ); ?>"></script>

		<?php

		echo esc_js( self::iframe_additional_script() );
	}


	/**
	 * Additional script for iframe.
	 * @since  1.0.0
	 * @access protected
	 * @static
	 */
	protected static function iframe_additional_script() {
		$ajax_url = admin_url( 'admin-ajax.php' );
		$nonce    = wp_create_nonce( MortgagePlatform::$prefix . 'nonce' );
		?>

        <script>

          var form = window.parent.document.querySelector('#mortgageCalculatorIframe')
          var data = []

          var arr = [
            'mortgageamount',
            'languages',
            'mortgageamount_default',
            'interestrate',
            'interestrate_default',
            'downpayment',
            'downpayment_default',
            'term',
            'termyears',
            'termmonths',
            'term_default',
            'button_text',
            'button_reset_text',
            'type_style',
            'primary_color',
            'fonts',
            'type_inputs',
            'rounded_elements',
            'slider_for_input',
            'type_slyder',
          ]

          if (form) checkDataset()

          function checkDataset () {

            arr.forEach(function (i) {
              if (Object.keys(form.dataset).length !== 0) {
                if (form.dataset[i] !== undefined) {
                  data[i] = form.dataset[i]
                }
              }
            })

            var script = document.querySelector('#mortgageCalculatorIframe script')

            if (data['type_style'] === 'fullpage') {
              var cssMortgagecalculatorFullpage = document.createElement('link')
              cssMortgagecalculatorFullpage.rel = 'stylesheet'
              cssMortgagecalculatorFullpage.type = 'text/css'
              cssMortgagecalculatorFullpage.href = '<?php echo esc_url( plugins_url( '../assets/css/fullpage.min.css', __FILE__ ) ); ?>'
              document.querySelector('body').appendChild(cssMortgagecalculatorFullpage)
            }

            if (data['type_style'] === 'darktheme') {
              var cssMortgagecalculatorFullpage = document.createElement('link')
              cssMortgagecalculatorFullpage.rel = 'stylesheet'
              cssMortgagecalculatorFullpage.type = 'text/css'
              cssMortgagecalculatorFullpage.href = '<?php echo esc_url( plugins_url( '../assets/css/darktheme.min.css', __FILE__ ) ); ?>'
              document.querySelector('body').appendChild(cssMortgagecalculatorFullpage)
            }

            var xhr = new XMLHttpRequest()
            var body = ''
            for (var key in data) {
              body += key + '=' + data[key] + '&'
            }

            xhr.open('POST',
              '<?php echo esc_url( $ajax_url ); ?>?action=iframe_mortgagecalculator&nonce=<?php echo esc_attr( $nonce ); ?>',
              true)
            xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')

            xhr.onreadystatechange = function () {
              if (xhr.readyState !== 4) return

              if (xhr.readyState === 4 && xhr.status === 200) {
                var responseBody = xhr.responseText
                var div = document.createElement('div')
                div.innerHTML = responseBody
                document.querySelector('body').appendChild(div)
                mortgageCalculator.init()

              } else {
                //console.log(xhr.statusText);
              }
            }

            xhr.send(body)
          }

          setTimeout(function () {
            parent.postMessage(Number(document.body.scrollHeight), '*')
          }, 4000)
        </script>
		<?php
	}
}

Top ↑

Methods Methods


Top ↑

Changelog Changelog

Changelog
Version Description
1.0.0 Introduced.