Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/itchief/feedbackForm.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoritchief <alex.malcev1980@gmail.comm>2022-10-09 12:22:19 +0300
committeritchief <alex.malcev1980@gmail.comm>2022-10-09 12:22:19 +0300
commit66413fb930cdbf8e62948b36382ecd5b85ea0a7d (patch)
tree7ccfc5cd37e738d2216cc7fefb0942320d9910e9
parentf89d1d75820c32884dfc309aa8b0997ca4a17f25 (diff)
Updatev.4.0.5
-rw-r--r--feedback/examples/form-processing-1.php (renamed from feedback/examples/form-processing.php)20
-rw-r--r--feedback/examples/form-processing-2.php20
-rw-r--r--feedback/examples/two-forms.html224
-rw-r--r--feedback/form-processing.php28
-rw-r--r--feedback/index.html8
-rw-r--r--feedback/js/form-processing.js24
6 files changed, 274 insertions, 50 deletions
diff --git a/feedback/examples/form-processing.php b/feedback/examples/form-processing-1.php
index 97a0057..95a7aae 100644
--- a/feedback/examples/form-processing.php
+++ b/feedback/examples/form-processing-1.php
@@ -19,7 +19,7 @@ if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
}
// имя файла для хранения логов
-define('LOG_FILE', 'logs/' . date('Y-m-d') . '.log');
+define('LOG_FILE', '../logs/' . date('Y-m-d') . '.log');
// писать предупреждения и ошибки в лог
const HAS_WRITE_LOG = true;
// проверять ли капчу
@@ -31,7 +31,7 @@ const ALLOWED_MIME_TYPES = ['image/jpeg', 'image/gif', 'image/png'];
// максимально-допустимый размер файла
const MAX_FILE_SIZE = 512 * 1024;
// директория для хранения файлов
-define('UPLOAD_PATH', dirname(__FILE__) . '/uploads/');
+const UPLOAD_PATH = '../uploads/';
// отправлять письмо
const HAS_SEND_EMAIL = true;
@@ -110,7 +110,7 @@ if (!empty($_POST['message'])) {
// проверка капчи
if (HAS_CHECK_CAPTCHA) {
session_start();
- if ($_POST['captcha'] === $_SESSION['captcha']) {
+ if ($_POST['captcha'] === $_SESSION['captcha-1']) {
$data['form']['captcha'] = $_POST['captcha'];
} else {
$data['result'] = 'error';
@@ -174,13 +174,13 @@ use PHPMailer\PHPMailer\PHPMailer;
//use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
-require 'vendor/phpmailer/phpmailer/src/Exception.php';
-require 'vendor/phpmailer/phpmailer/src/PHPMailer.php';
-require 'vendor/phpmailer/phpmailer/src/SMTP.php';
+require '../vendor/phpmailer/phpmailer/src/Exception.php';
+require '../vendor/phpmailer/phpmailer/src/PHPMailer.php';
+require '../vendor/phpmailer/phpmailer/src/SMTP.php';
-if ($data['result'] == 'success' && HAS_SEND_EMAIL == true) {
+if ($data['result'] == 'success' && HAS_SEND_EMAIL) {
// получаем содержимое email шаблона и заменяем в нём
- $template = file_get_contents(dirname(__FILE__) . '/template/email.tpl');
+ $template = file_get_contents('../template/email.tpl');
$search = ['%subject%', '%name%', '%email%', '%message%', '%date%'];
$replace = [EMAIL_SETTINGS['subject'], $data['form']['name'], $data['form']['email'], $data['form']['message'], date('d.m.Y H:i')];
$body = str_replace($search, $replace, $template);
@@ -239,7 +239,7 @@ if ($data['result'] == 'success' && HAS_SEND_NOTIFICATION) {
$mail->clearAllRecipients();
$mail->clearAttachments();
// получаем содержимое email шаблона и заменяем в нём плейсхолдеры на соответствующие им значения
- $template = file_get_contents(dirname(__FILE__) . '/template/email_client.tpl');
+ $template = file_get_contents('../template/email_client.tpl');
$search = ['%subject%', '%name%', '%date%'];
$replace = [SUBJECT_FOR_CLIENT, $data['form']['name'], date('d.m.Y H:i')];
$body = str_replace($search, $replace, $template);
@@ -267,7 +267,7 @@ if ($data['result'] == 'success' && HAS_WRITE_TXT) {
}
}
$output = '=====================';
- error_log($output, 3, 'logs/forms.log');
+ error_log($output, 3, '../logs/forms.log');
}
echo json_encode($data);
diff --git a/feedback/examples/form-processing-2.php b/feedback/examples/form-processing-2.php
index 97a0057..600a198 100644
--- a/feedback/examples/form-processing-2.php
+++ b/feedback/examples/form-processing-2.php
@@ -19,7 +19,7 @@ if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
}
// имя файла для хранения логов
-define('LOG_FILE', 'logs/' . date('Y-m-d') . '.log');
+define('LOG_FILE', '../logs/' . date('Y-m-d') . '.log');
// писать предупреждения и ошибки в лог
const HAS_WRITE_LOG = true;
// проверять ли капчу
@@ -31,7 +31,7 @@ const ALLOWED_MIME_TYPES = ['image/jpeg', 'image/gif', 'image/png'];
// максимально-допустимый размер файла
const MAX_FILE_SIZE = 512 * 1024;
// директория для хранения файлов
-define('UPLOAD_PATH', dirname(__FILE__) . '/uploads/');
+const UPLOAD_PATH = '../uploads/';
// отправлять письмо
const HAS_SEND_EMAIL = true;
@@ -110,7 +110,7 @@ if (!empty($_POST['message'])) {
// проверка капчи
if (HAS_CHECK_CAPTCHA) {
session_start();
- if ($_POST['captcha'] === $_SESSION['captcha']) {
+ if ($_POST['captcha'] === $_SESSION['captcha-2']) {
$data['form']['captcha'] = $_POST['captcha'];
} else {
$data['result'] = 'error';
@@ -174,13 +174,13 @@ use PHPMailer\PHPMailer\PHPMailer;
//use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
-require 'vendor/phpmailer/phpmailer/src/Exception.php';
-require 'vendor/phpmailer/phpmailer/src/PHPMailer.php';
-require 'vendor/phpmailer/phpmailer/src/SMTP.php';
+require '../vendor/phpmailer/phpmailer/src/Exception.php';
+require '../vendor/phpmailer/phpmailer/src/PHPMailer.php';
+require '../vendor/phpmailer/phpmailer/src/SMTP.php';
-if ($data['result'] == 'success' && HAS_SEND_EMAIL == true) {
+if ($data['result'] == 'success' && HAS_SEND_EMAIL) {
// получаем содержимое email шаблона и заменяем в нём
- $template = file_get_contents(dirname(__FILE__) . '/template/email.tpl');
+ $template = file_get_contents('../template/email.tpl');
$search = ['%subject%', '%name%', '%email%', '%message%', '%date%'];
$replace = [EMAIL_SETTINGS['subject'], $data['form']['name'], $data['form']['email'], $data['form']['message'], date('d.m.Y H:i')];
$body = str_replace($search, $replace, $template);
@@ -239,7 +239,7 @@ if ($data['result'] == 'success' && HAS_SEND_NOTIFICATION) {
$mail->clearAllRecipients();
$mail->clearAttachments();
// получаем содержимое email шаблона и заменяем в нём плейсхолдеры на соответствующие им значения
- $template = file_get_contents(dirname(__FILE__) . '/template/email_client.tpl');
+ $template = file_get_contents('../template/email_client.tpl');
$search = ['%subject%', '%name%', '%date%'];
$replace = [SUBJECT_FOR_CLIENT, $data['form']['name'], date('d.m.Y H:i')];
$body = str_replace($search, $replace, $template);
@@ -267,7 +267,7 @@ if ($data['result'] == 'success' && HAS_WRITE_TXT) {
}
}
$output = '=====================';
- error_log($output, 3, 'logs/forms.log');
+ error_log($output, 3, '../logs/forms.log');
}
echo json_encode($data);
diff --git a/feedback/examples/two-forms.html b/feedback/examples/two-forms.html
index 4bdcfcb..44fcb99 100644
--- a/feedback/examples/two-forms.html
+++ b/feedback/examples/two-forms.html
@@ -1,10 +1,224 @@
<!DOCTYPE html>
-<html lang="en">
+<html lang="ru">
+
<head>
- <meta charset="UTF-8">
- <title>$Title$</title>
+ <meta charset="utf-8">
+ <title>Форма обратной связи</title>
+ <link rel="stylesheet" href="/feedback/css/style.css">
</head>
+
<body>
-$END$
+
+<div class="container">
+ <h1>Форма обратной связи</h1>
+
+ <div class="form-container form__wrapper">
+ <!-- Форма обратной связи -->
+ <form id="form-1" action="/feedback/examples/form-processing-1.php" enctype="multipart/form-data" novalidate>
+ <div class="form-row">
+ <!-- Имя пользователя -->
+ <div class="form-group">
+ <label for="form-1-name" class="control-label">Имя</label>
+ <input id="form-1-name" type="text" name="name" class="form-control" value="" placeholder="Имя" minlength="2"
+ maxlength="30" required="required">
+ <div class="invalid-feedback"></div>
+ </div>
+ <!-- Email пользователя -->
+ <div class="form-group">
+ <label for="form-1-email" class="control-label">Email-адрес</label>
+ <input id="form-1-email" type="email" name="email" required="required" class="form-control" value=""
+ placeholder="Email-адрес">
+ <div class="invalid-feedback"></div>
+ </div>
+ </div>
+ <!-- Сообщение пользователя -->
+ <div class="form-group">
+ <label for="form-1-message" class="control-label">Сообщение (не менее 20 символов)</label>
+ <textarea id="form-1-message" name="message" class="form-control" rows="3"
+ placeholder="Сообщение (не менее 20 символов)" minlength="20" maxlength="500"
+ required="required"></textarea>
+ <div class="invalid-feedback"></div>
+ </div>
+
+ <!-- Файлы, для прикрепления к форме -->
+ <div class="form-group form-attach" data-count="5">
+ <div class="form-attach__label">Файлы (не более <span class="form-attach__count">5</span>)</div>
+ <div class="form-attach__wrapper">
+ <input type="file" name="attach[]" multiple required>
+ <div class="form-attach__description">
+ <div>Нажмите для загрузки файлов или перетащите их</div>
+ <div class="text-sm">PNG, JPG, GIF (до 512 Кбайт)</div>
+ </div>
+ <div class="form-attach__items"></div>
+ </div>
+ <div class="invalid-feedback"></div>
+ </div>
+
+ <!-- Капча -->
+ <div class="form-group form-captcha">
+ <img class="form-captcha__image" src="/feedback/captcha/captcha.php?id=captcha-1" data-src="/feedback/captcha/captcha.php?id=captcha-1"
+ width="132" height="46" alt="Капча">
+ <div class="form-captcha__refresh">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="16" height="16">
+ <path fill="currentColor"
+ d="M440.65 12.57l4 82.77A247.16 247.16 0 0 0 255.83 8C134.73 8 33.91 94.92 12.29 209.82A12 12 0 0 0 24.09 224h49.05a12 12 0 0 0 11.67-9.26 175.91 175.91 0 0 1 317-56.94l-101.46-4.86a12 12 0 0 0-12.57 12v47.41a12 12 0 0 0 12 12H500a12 12 0 0 0 12-12V12a12 12 0 0 0-12-12h-47.37a12 12 0 0 0-11.98 12.57zM255.83 432a175.61 175.61 0 0 1-146-77.8l101.8 4.87a12 12 0 0 0 12.57-12v-47.4a12 12 0 0 0-12-12H12a12 12 0 0 0-12 12V500a12 12 0 0 0 12 12h47.35a12 12 0 0 0 12-12.6l-4.15-82.57A247.17 247.17 0 0 0 255.83 504c121.11 0 221.93-86.92 243.55-201.82a12 12 0 0 0-11.8-14.18h-49.05a12 12 0 0 0-11.67 9.26A175.86 175.86 0 0 1 255.83 432z">
+ </path>
+ </svg>
+ </div>
+ <div class="form-group form-captcha__input">
+ <label for="form-1-captcha" class="control-label d-none">Код, показанный на изображении</label>
+ <input type="text" name="captcha" maxlength="6" required="required" id="form-1-captcha"
+ class="form-control captcha" placeholder="******" autocomplete="off" value="">
+ <div class="invalid-feedback"></div>
+ </div>
+ </div>
+
+ <!-- Пользовательское солашение -->
+ <div class="form-group form-agree form-check">
+ <input class="form-check-input" type="checkbox" name="agree" id="form-1-agree" required value="true">
+ <label class="form-check-label" for="form-1-agree">Нажимая кнопку, я принимаю условия <a href="#">Пользовательского
+ соглашения</a> и даю своё согласие на обработку моих персональных данных</label>
+ <div class="invalid-feedback"></div>
+ </div>
+
+ <!-- Сообщение об ошибке -->
+ <div class="form-error form-error_hide">Исправьте данные и отправьте форму ещё раз.</div>
+
+ <!-- Кнопка для отправки формы на сервер -->
+ <div class="form-submit">
+ <button type="submit">Отправить сообщение</button>
+ </div>
+ </form>
+
+ <!-- Сообщение об успешной отправки формы -->
+ <div class="form-success form-success_hide">
+ <div class="form-success__message">
+ Форма успешно отправлена.
+ Нажмите <button type="button" class="form-success__btn">здесь</button>, если нужно отправить ещё одну форму.
+ </div>
+ </div>
+ </div>
+
+ <div class="form-container form__wrapper">
+ <!-- Форма обратной связи -->
+ <form id="form-2" action="/feedback/examples/form-processing-2.php" enctype="multipart/form-data" novalidate>
+ <div class="form-row">
+ <!-- Имя пользователя -->
+ <div class="form-group">
+ <label for="form-2-name" class="control-label">Имя</label>
+ <input id="form-2-name" type="text" name="name" class="form-control" value="" placeholder="Имя" minlength="2"
+ maxlength="30" required="required">
+ <div class="invalid-feedback"></div>
+ </div>
+ <!-- Email пользователя -->
+ <div class="form-group">
+ <label for="form-2-email" class="control-label">Email-адрес</label>
+ <input id="form-2-email" type="email" name="email" required="required" class="form-control" value=""
+ placeholder="Email-адрес">
+ <div class="invalid-feedback"></div>
+ </div>
+ </div>
+ <!-- Сообщение пользователя -->
+ <div class="form-group">
+ <label for="form-2-message" class="control-label">Сообщение (не менее 20 символов)</label>
+ <textarea id="form-2-message" name="message" class="form-control" rows="3"
+ placeholder="Сообщение (не менее 20 символов)" minlength="20" maxlength="500"
+ required="required"></textarea>
+ <div class="invalid-feedback"></div>
+ </div>
+
+ <!-- Файлы, для прикрепления к форме -->
+ <div class="form-group form-attach" data-count="5">
+ <div class="form-attach__label">Файлы (не более <span class="form-attach__count">5</span>)</div>
+ <div class="form-attach__wrapper">
+ <input type="file" name="attach[]" multiple required>
+ <div class="form-attach__description">
+ <div>Нажмите для загрузки файлов или перетащите их</div>
+ <div class="text-sm">PNG, JPG, GIF (до 512 Кбайт)</div>
+ </div>
+ <div class="form-attach__items"></div>
+ </div>
+ <div class="invalid-feedback"></div>
+ </div>
+
+ <!-- Капча -->
+ <div class="form-group form-captcha">
+ <img class="form-captcha__image" src="/feedback/captcha/captcha.php?id=captcha-2" data-src="/feedback/captcha/captcha.php?id=captcha-2"
+ width="132" height="46" alt="Капча">
+ <div class="form-captcha__refresh">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="16" height="16">
+ <path fill="currentColor"
+ d="M440.65 12.57l4 82.77A247.16 247.16 0 0 0 255.83 8C134.73 8 33.91 94.92 12.29 209.82A12 12 0 0 0 24.09 224h49.05a12 12 0 0 0 11.67-9.26 175.91 175.91 0 0 1 317-56.94l-101.46-4.86a12 12 0 0 0-12.57 12v47.41a12 12 0 0 0 12 12H500a12 12 0 0 0 12-12V12a12 12 0 0 0-12-12h-47.37a12 12 0 0 0-11.98 12.57zM255.83 432a175.61 175.61 0 0 1-146-77.8l101.8 4.87a12 12 0 0 0 12.57-12v-47.4a12 12 0 0 0-12-12H12a12 12 0 0 0-12 12V500a12 12 0 0 0 12 12h47.35a12 12 0 0 0 12-12.6l-4.15-82.57A247.17 247.17 0 0 0 255.83 504c121.11 0 221.93-86.92 243.55-201.82a12 12 0 0 0-11.8-14.18h-49.05a12 12 0 0 0-11.67 9.26A175.86 175.86 0 0 1 255.83 432z">
+ </path>
+ </svg>
+ </div>
+ <div class="form-group form-captcha__input">
+ <label for="form-2-captcha" class="control-label d-none">Код, показанный на изображении</label>
+ <input type="text" name="captcha" maxlength="6" required="required" id="form-2-captcha"
+ class="form-control captcha" placeholder="******" autocomplete="off" value="">
+ <div class="invalid-feedback"></div>
+ </div>
+ </div>
+
+ <!-- Пользовательское солашение -->
+ <div class="form-group form-agree form-check">
+ <input class="form-check-input" type="checkbox" name="agree" id="form-2-agree" required value="true">
+ <label class="form-check-label" for="form-2-agree">Нажимая кнопку, я принимаю условия <a href="#">Пользовательского
+ соглашения</a> и даю своё согласие на обработку моих персональных данных</label>
+ <div class="invalid-feedback"></div>
+ </div>
+
+ <!-- Сообщение об ошибке -->
+ <div class="form-error form-error_hide">Исправьте данные и отправьте форму ещё раз.</div>
+
+ <!-- Кнопка для отправки формы на сервер -->
+ <div class="form-submit">
+ <button type="submit">Отправить сообщение</button>
+ </div>
+ </form>
+
+ <!-- Сообщение об успешной отправки формы -->
+ <div class="form-success form-success_hide">
+ <div class="form-success__message">
+ Форма успешно отправлена.
+ Нажмите <button type="button" class="form-success__btn">здесь</button>, если нужно отправить ещё одну форму.
+ </div>
+ </div>
+ </div>
+
+
+</div>
+
+<script src="/feedback/js/form-processing.js"></script>
+<script>
+ /*
+ attachMaxItems: 3,
+ attachMaxFileSize: 128,
+ attachExt: ['png', 'jpg']
+ */
+
+ document.querySelectorAll('form').forEach((el) => {
+ ItcSubmitForm.getOrCreateInstance(el);
+ })
+
+ document.addEventListener('itc.successSendForm', (e) => {
+ const el = e.target.closest('.form-container').querySelector('.form-success');
+ el.classList.remove('form-success_hide');
+ });
+
+ // при клике на .form-success__btn
+ document.addEventListener('click', (e) => {
+ if (!e.target.closest('.form-success__btn')) {
+ return;
+ }
+ const el = e.target.closest('.form-container').querySelector('form');
+ const form = ItcSubmitForm.getOrCreateInstance(el);
+ form.reset();
+ e.target.closest('.form-container').querySelector('.form-success').classList.add('form-success_hide');
+ });
+
+</script>
+
</body>
-</html> \ No newline at end of file
+
+</html>
diff --git a/feedback/form-processing.php b/feedback/form-processing.php
index e02980f..97a0057 100644
--- a/feedback/form-processing.php
+++ b/feedback/form-processing.php
@@ -21,23 +21,23 @@ if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
// имя файла для хранения логов
define('LOG_FILE', 'logs/' . date('Y-m-d') . '.log');
// писать предупреждения и ошибки в лог
-define('HAS_WRITE_LOG', true);
+const HAS_WRITE_LOG = true;
// проверять ли капчу
-define('HAS_CHECK_CAPTCHA', true);
+const HAS_CHECK_CAPTCHA = true;
// обязательно ли наличие файлов, прикреплённых к форме
-define('HAS_ATTACH_REQUIRED', false);
+const HAS_ATTACH_REQUIRED = false;
// разрешённые mime типы файлов
-define('ALLOWED_MIME_TYPES', ['image/jpeg', 'image/gif', 'image/png']);
+const ALLOWED_MIME_TYPES = ['image/jpeg', 'image/gif', 'image/png'];
// максимально-допустимый размер файла
-define('MAX_FILE_SIZE', 512 * 1024);
+const MAX_FILE_SIZE = 512 * 1024;
// директория для хранения файлов
define('UPLOAD_PATH', dirname(__FILE__) . '/uploads/');
// отправлять письмо
-define('HAS_SEND_EMAIL', true);
+const HAS_SEND_EMAIL = true;
// добавить ли прикреплённые файлы в тело письма в виде ссылок
-define('HAS_ATTACH_IN_BODY', true);
-define('EMAIL_SETTINGS', [
+const HAS_ATTACH_IN_BODY = true;
+const EMAIL_SETTINGS = [
'addresses' => ['manager@domain.com'], // кому необходимо отправить письмо
'from' => ['no-reply@domain.com', 'Имя сайта'], // от какого email и имени необходимо отправить письмо
'subject' => 'Сообщение с формы обратной связи', // тема письма
@@ -45,12 +45,12 @@ define('EMAIL_SETTINGS', [
'username' => 'name@yandex.ru', // // SMTP-пользователь
'password' => '*********', // SMTP-пароль
'port' => '465' // SMTP-порт
-]);
-define('HAS_SEND_NOTIFICATION', false);
-define('BASE_URL', 'https://domain.com');
-define('SUBJECT_FOR_CLIENT', 'Ваше сообщение доставлено');
+];
+const HAS_SEND_NOTIFICATION = false;
+const BASE_URL = 'https://domain.com';
+const SUBJECT_FOR_CLIENT = 'Ваше сообщение доставлено';
//
-define('HAS_WRITE_TXT', true);
+const HAS_WRITE_TXT = true;
function itc_log($message)
{
@@ -115,7 +115,7 @@ if (HAS_CHECK_CAPTCHA) {
} else {
$data['result'] = 'error';
$data['errors']['captcha'] = 'Код не соответствует изображению.';
- itc_log('Не пройдена капча. Указанный код ' . $captcha . ' не соответствует ' . $_SESSION['captcha']);
+ itc_log('Не пройдена капча. Указанный код ' . $_POST['captcha'] . ' не соответствует ' . $_SESSION['captcha']);
}
}
diff --git a/feedback/index.html b/feedback/index.html
index ee914b4..fd93bf1 100644
--- a/feedback/index.html
+++ b/feedback/index.html
@@ -109,7 +109,7 @@
attachExt: ['png', 'jpg']
*/
- const form = new ItcSubmitForm('form');
+ ItcSubmitForm.getOrCreateInstance('form');
document.addEventListener('itc.successSendForm', (e) => {
const el = e.target.closest('.form-container').querySelector('.form-success');
@@ -119,10 +119,10 @@
// при клике на .form-success__btn
document.querySelector('.form-success__btn').addEventListener('click', (e) => {
const el = e.target.closest('.form-container').querySelector('form');
- const found = ItcSubmitForm.contains.find((item) => item.el === el);
- found.instance.reset();
+ const form = ItcSubmitForm.getOrCreateInstance(el);
+ form.reset();
e.target.closest('.form-container').querySelector('.form-success').classList.add('form-success_hide');
- })
+ });
</script>
diff --git a/feedback/js/form-processing.js b/feedback/js/form-processing.js
index 3a34a31..d0b779e 100644
--- a/feedback/js/form-processing.js
+++ b/feedback/js/form-processing.js
@@ -7,9 +7,20 @@
class ItcSubmitForm {
- static contains = [];
+ static instances = [];
- constructor(selector = 'form', config = {}) {
+ static getOrCreateInstance(target, config) {
+ const elForm = typeof target === 'string' ? document.querySelector(target) : target;
+ const found = this.instances.find(el => el.target === elForm);
+ if (found) {
+ return found.instance;
+ }
+ const form = new this(elForm, config);
+ this.instances.push({target: elForm, instance: form});
+ return this;
+ }
+
+ constructor(target, config = {}) {
this._attach = {
index: 0,
maxItems: config['attachMaxItems'] || 5,
@@ -18,8 +29,7 @@ class ItcSubmitForm {
items: []
};
this._isCheckValidationOnClient = config['isCheckValidationOnClient'] !== false;
- this._elForm = document.querySelector(selector);
- this.constructor.contains.push({el: this._elForm, instance: this})
+ this._elForm = target;
this._init();
}
@@ -100,7 +110,7 @@ class ItcSubmitForm {
if (item.file.size > this._attach.maxFileSize * 1024) {
this._setStateValidaion(elAttach, 'error', `Размер файла больше ${this._attach.maxFileSize}Кб`);
valid = false;
- } else if (!ItcSubmitForm._checkExt(item.file.name, this._attach.ext)) {
+ } else if (!this.constructor._checkExt(item.file.name, this._attach.ext)) {
this._setStateValidaion(elAttach, 'error', 'Тип не является допустимым');
valid = false;
} else {
@@ -283,10 +293,10 @@ class ItcSubmitForm {
const reader = new FileReader();
reader.readAsDataURL(file);
reader.addEventListener('load', (e) => {
- this._elForm.querySelector('.form-attach__items').innerHTML += ItcSubmitForm._getAttachTemplate(index, file, e.target);
+ this._elForm.querySelector('.form-attach__items').innerHTML += this.constructor._getAttachTemplate(index, file, e.target);
});
} else {
- this._elForm.querySelector('.form-attach__items').innerHTML += ItcSubmitForm._getAttachTemplate(index, file);
+ this._elForm.querySelector('.form-attach__items').innerHTML += this.constructor._getAttachTemplate(index, file);
}
}
target.value = '';