Your IP : 216.73.216.103


Current Path : /var/www/rustam/data/www/kran-balka.com/exform/
Upload File :
Current File : /var/www/rustam/data/www/kran-balka.com/exform/exform.js

(function ($) {
    $.fn.exform = function (options) {
        // Установка значений по умолчанию для параметров
        var settings = $.extend(
            {
                path: '/exform/',
                name: true,
                phone: true,
                email: true,
                message: true,
                theme: 'mform',
                wrapper: 'body',
            },
            options
        );

        var wrapperSelector = settings.wrapper === 'body' ? settings.wrapper : '.' + settings.wrapper;
        var exformWrapper = '.exform-wrapper.' + settings.theme;

        // Инициализация формы
        if (settings.wrapper === 'body') {
            $(this).click(initForm);
        } else {
            initForm();
        }

        // Подключение зависимостей
        function initDependencies() {
            var cssThemePath = settings.path + 'themes/' + settings.theme + '/css/exform.css';

            if (!$('head').find(`link[href="${cssThemePath}"]`).length) {
                $('head').append(`<link rel="stylesheet" type="text/css" href="${cssThemePath}" />`);
            }

            //Если есть капча, то подключаем скрипт.
            //Получение данных по капчи из exform.php
            $.post(settings.path + 'exform.php', { getYandexCaptchaData: true, mfPath: settings.path }, function (response) {
                var response = $.parseJSON(response);

                if (response.enableYandexCaptcha) {
                    setTimeout(() => {
                        $('head').append(`<script src="https://smartcaptcha.yandexcloud.net/captcha.js" defer></script>`); //скрипт капчи
                    }, 1000);
                }
            });
        }

        // Функция для инициализации формы
        function initForm() {
            initDependencies();

            if ($(exformWrapper).length === 0) {
                var formParams = {
                    initForm: true,
                    mfPath: settings.path,
                    mfTheme: settings.theme,
                };

                if (settings.wrapper === 'body') {
                    $('body').append('<div class="exform-bg"></div>');
                    $('.exform-bg').fadeTo(200, 0.3, function () {
                        $.post(settings.path + 'exform.php', formParams, renderForm);
                    });
                } else {
                    $.post(settings.path + 'exform.php', formParams, renderForm);
                }
            }

            return false;
        }

        // Отображения формы
        function renderForm(response) {
            if (settings.wrapper === 'body') {
                $('body').append($(response));
                setupForm();
                centerForm();
                $(exformWrapper).show();
            } else {
                $('.' + settings.wrapper).html(response);
                $(exformWrapper).css({ display: 'block' });
                $(exformWrapper + ' .mf-submit input[type=button]').remove();

                setupForm();
            }

            if ($(exformWrapper + '.finmsg p').length > 0) {
                setTimeout(hideForm, 4000);
            }
        }

        // Настройка событий формы
        function setupForm() {
            var thisForm = $(exformWrapper + ' form[name="exform"]');

            if (thisForm.length > 0) {
                clearFormInputs();
                $(exformWrapper + ' input[name="mfCurrentUrl"]').val(window.location.href);
                $('.exform-bg, ' + exformWrapper + ' .mf-submit input[type="button"]').click(hideForm);
                $(exformWrapper + ' form[name="exform"]').submit(submitForm);
            }
        }

        // Обработка отправки формы
        function submitForm(event) {
            event.preventDefault();

            let form = $(this);
            let error = false;

            //Если есть капча, то подключаем скрипт. //Получение данных по капчи из exform.php
            if (form.find('input[name="smart-token"]').length) {
                let element = form.find('input[name="smart-token"]');
                if (!element.val()) {
                    alert('Вы не прошли проверку YandexCaptcha! Попробуйте ещё раз');
                    error = true;
                }
            }

            if (form.find('input[name="confirmPolitic"]').length) {
                if (!form.find('input[name="confirmPolitic"]').is(':checked')) {
                    alert('Вы не согласились с политикой конфиденциальности!');
                    error = true;
                }
            }

            if (!error) {
                // Если проверка пройдена - отправляем форму
                if ($(exformWrapper + ' input[name="userName"]').val().length === 0) {
                    $(exformWrapper + ' .mf-submit button[type="submit"]').attr('disabled', 'disabled');

                    $.post(settings.path + 'exform.php', $(exformWrapper + ' form[name="exform"]').serialize(), function (response) {
                        if (settings.wrapper === 'body') {
                            $(exformWrapper).remove();
                            renderForm(response);
                        } else {
                            $('.' + settings.wrapper).html(response);
                            $(exformWrapper).css({ display: 'block' });
                            $(exformWrapper + ' .mf-submit input[type=button]').remove();
                            setupForm();

                            $('body').append('<div class="exform-bg"></div>');
                            $('.exform-bg').fadeTo(200, 0.3);
                            $(exformWrapper + '.finmsg')
                                .fadeIn(500)
                                .delay(1000)
                                .fadeOut(1000, function () {
                                    location.reload();
                                });
                        }
                    });
                } else {
                    hideForm();
                }
            } else {
                // Если проверка не пройдена - отменяем отправку форму
                return false;
            }
        }

        // Очистка полей ввода
        function clearFormInputs() {
            if (settings.name) $(exformWrapper + ' .mfMame').remove();
            if (settings.phone) $(exformWrapper + ' .mfPhone').remove();
            if (settings.email) $(exformWrapper + ' .mfEmail').remove();
            if (settings.message) $(exformWrapper + ' .mfMessage').remove();
        }

        // Центрирование формы на экране
        function centerForm() {
            var wrapperWidth = parseInt($(exformWrapper).css('width'));
            var wrapperHeight = parseInt($(exformWrapper).css('height'));
            $(exformWrapper).css({
                position: 'fixed',
                left: '50%',
                top: '50%',
                'margin-left': '-' + wrapperWidth / 2 + 'px',
                'margin-top': '-' + wrapperHeight / 2 + 'px',
            });
        }

        // Скрытие формы
        function hideForm() {
            $('.exform-bg, ' + exformWrapper).fadeOut(500, function () {
                $(this).remove();
            });
        }
    };
})(jQuery);