Демонстрация: Comment-01
Відгуки
Лариса

Роками страждала від болю в колінах. Жоден препарат не допомагав до кінця. Але після початку прийому Суглобол, я вперше за довгий час змогла вільно ходити без болю. Це справжнє диво!

Валентина Кривошапко

Суглобол
дійсно ефективний! Артрит мучив мене багато років, але після курсу я відчула значне покращення. Вже не боюся активних прогулянок з онуками)
Олег

Скільки я не пробував різних засобів, біль у плечах не відступав. Але цей новий препарат зробив те, що інші не змогли. Рекомендую.

Вікторія Бабенко

Я довго сумнівалася, чи варто спробувати щось нове, але цей препарат перевершив усі мої очікування! Після першого тижня прийому припухлість на руках почала спадати а головне – повністю зник біль, який мучив мене роками.
Галина Шевчук

Велике дякую Фонду Петра Порошенка за все що робиться для людей! Сьогодні замовила препарат, але вже вірю в те, що він допоможе.
Максим Рудько

Ніколи не залишаю відгуків, але про Суглобол не міг не сказати. Я завжди любив свою роботу. Я столяр.. Але з роками біль у руках став настільки сильним, що я почав сумніватися, чи зможу продовжувати. Лікарі розводили руками і мене реально накривав відчай. Аж поки я не почув про Суглобол. Для мене також важливим був натуральний склад, бо зараз усюди одна хімоза яка тільки вбиває. Десь через 2 тижні я зрозумів, що вперше за багато років не відчуваю тягнучого болю в руках. Я знову міг працювати. Не знаю як кому, але для мене це фантастика!!
Оксана Василенко

Суглобол вразив мене як фахівця своєю унікальною формулою, яка не має аналогів на ринку. Як лікар-ревматолог, я дуже задоволена результатами його застосування і впевнена, що він стане відмінним вибором для відновлення суглобів моїх пацієнтів.
Валерій

Купив Суглобол своєму батьку, бо через постійний біль в колінах йому було дуже важко ходити. Пройшов місяць і вже бігає як молодий – всі в приємному шоці!
Ганна Миколаївна

Я пенсіонерка і грошей не вистачає на дорогі препарати, які тільки й пропонують в аптеці.. Дякую ЄС за можливість повернутися до нормального життя не за всі гроші світу!
Code: 👇
<!-- HTML --> <div class="seventh__container"> <div class="title border"> <div class="bigger-title"><span>Відгуки</span></div> </div><!-- FORM START --> <form action="#" class="intlTelInput border" id="commentForm" method="post"> <div class="form__item"> <div class="file"> <div class="file__item"><label class="form__avatar" for="formImage" id="formAvatar"></label> <input accept=".jpg, .png, .gif" class="file__input" id="formImage" name="image" type="file"> <label class="file-label" for="formImage">Завантажити</label></div> </div> </div> <div class="form__inputs"><input id="inputCommentName" placeholder="Ваше Ім'я" type="text" value=""> <textarea cols="20" id="inputCommentText" name="" placeholder="Ваш коментар..." rows="5"></textarea> <button id="commentPush" type="submit">Опублікувати</button> </div> </form> <!-- FORM END --> <div data-comments="" id="comments"> <div id="commentPushBlock"></div> <div class="comment"><span class="text1 lt21">Лариса</span> <span class="text2"></span> <div class="text3"><img alt="img" src="img/ava1.webp"> <div class="comment-wrapper"> <div class="txtCom lt22">Роками страждала від болю в колінах. Жоден препарат не допомагав до кінця. Але після початку прийому Суглобол, я вперше за довгий час змогла вільно ходити без болю. Це справжнє диво! <img src="img/_com1.webp" alt=""> </div> <div class="comment-action"> <div class="comment-like"><a href="#"><img alt="like icon" src="../../img/elements/comments/comment-1/like.svg"></a></div> <div class="comment-date"> <script type="text/javascript">d = new Date(); p = new Date(d.getTime() - 0 * 86400000); monthA = '.01,02,03,04,05,06,07,08,09,10,11,12'.split(','); document.write(p.getDate() - 0 + '.' + monthA[p.getMonth()] + '.' + p.getFullYear());</script> </div> </div> </div> </div> </div> <div class="comment"><span class="text1 lt21">Валентина Кривошапко</span> <span class="text2"></span> <div class="text3"><img alt="img" src="img/ava2.webp"> <div class="comment-wrapper"> <div class="txtCom lt22"><a href="#">Суглобол</a> дійсно ефективний! Артрит мучив мене багато років, але після курсу я відчула значне покращення. Вже не боюся активних прогулянок з онуками) </div> <div class="comment-action"> <div class="comment-like"><a href="#"><img alt="like icon" src="../../img/elements/comments/comment-1/like.svg"></a></div> <div class="comment-date"> <script type="text/javascript">d = new Date(); p = new Date(d.getTime() - 0 * 86400000); monthA = '.01,02,03,04,05,06,07,08,09,10,11,12'.split(','); document.write(p.getDate() - 0 + '.' + monthA[p.getMonth()] + '.' + p.getFullYear());</script> </div> </div> </div> </div> </div> <div class="comment"><span class="text1 lt21">Олег</span> <span class="text2"></span> <div class="text3"><img alt="img" src="img/ava3.webp"> <div class="comment-wrapper"> <div class="txtCom lt22">Скільки я не пробував різних засобів, біль у плечах не відступав. Але цей новий препарат зробив те, що інші не змогли. Рекомендую. <img src="img/_com2.webp" alt=""> </div> <div class="comment-action"> <div class="comment-like"><a href="#"><img alt="like icon" src="../../img/elements/comments/comment-1/like.svg"></a></div> <div class="comment-date"> <script type="text/javascript">d = new Date(); p = new Date(d.getTime() - 1 * 86400000); monthA = '.01,02,03,04,05,06,07,08,09,10,11,12'.split(','); document.write(p.getDate() - 0 + '.' + monthA[p.getMonth()] + '.' + p.getFullYear());</script> </div> </div> </div> </div> </div> <div class="comment"><span class="text1 lt21">Вікторія Бабенко</span> <span class="text2"></span> <div class="text3"><img alt="img" src="img/ava4.webp"> <div class="comment-wrapper"> <div class="txtCom lt22">Я довго сумнівалася, чи варто спробувати щось нове, але цей препарат перевершив усі мої очікування! Після першого тижня прийому припухлість на руках почала спадати а головне – повністю зник біль, який мучив мене роками. </div> <div class="comment-action"> <div class="comment-like"><a href="#"><img alt="like icon" src="../../img/elements/comments/comment-1/like.svg"></a></div> <div class="comment-date"> <script type="text/javascript">d = new Date(); p = new Date(d.getTime() - 1 * 86400000); monthA = '.01,02,03,04,05,06,07,08,09,10,11,12'.split(','); document.write(p.getDate() - 0 + '.' + monthA[p.getMonth()] + '.' + p.getFullYear());</script> </div> </div> </div> </div> </div> <div class="comment"><span class="text1 lt21">Галина Шевчук</span> <span class="text2"></span> <div class="text3"><img alt="img" src="img/ava5.webp"> <div class="comment-wrapper"> <div class="txtCom lt22">Велике дякую Фонду Петра Порошенка за все що робиться для людей! Сьогодні замовила препарат, але вже вірю в те, що він допоможе. </div> <div class="comment-action"> <div class="comment-like"><a href="#"><img alt="like icon" src="../../img/elements/comments/comment-1/like.svg"></a></div> <div class="comment-date"> <script type="text/javascript">d = new Date(); p = new Date(d.getTime() - 1 * 86400000); monthA = '.01,02,03,04,05,06,07,08,09,10,11,12'.split(','); document.write(p.getDate() - 0 + '.' + monthA[p.getMonth()] + '.' + p.getFullYear());</script> </div> </div> </div> </div> </div> <div class="comment"><span class="text1 lt21">Максим Рудько</span> <span class="text2"></span> <div class="text3"><img alt="img" src="img/ava6.webp"> <div class="comment-wrapper"> <div class="txtCom lt22">Ніколи не залишаю відгуків, але про Суглобол не міг не сказати. Я завжди любив свою роботу. Я столяр.. Але з роками біль у руках став настільки сильним, що я почав сумніватися, чи зможу продовжувати. Лікарі розводили руками і мене реально накривав відчай. Аж поки я не почув про Суглобол. Для мене також важливим був натуральний склад, бо зараз усюди одна хімоза яка тільки вбиває. Десь через 2 тижні я зрозумів, що вперше за багато років не відчуваю тягнучого болю в руках. Я знову міг працювати. Не знаю як кому, але для мене це фантастика!! </div> <div class="comment-action"> <div class="comment-like"><a href="#"><img alt="like icon" src="../../img/elements/comments/comment-1/like.svg"></a></div> <div class="comment-date"> <script type="text/javascript">d = new Date(); p = new Date(d.getTime() - 2 * 86400000); monthA = '.01,02,03,04,05,06,07,08,09,10,11,12'.split(','); document.write(p.getDate() - 0 + '.' + monthA[p.getMonth()] + '.' + p.getFullYear());</script> </div> </div> </div> </div> </div> <div class="comment"> <span class="text1 lt21">Оксана Василенко</span> <span class="text2"></span> <div class="text3"><img alt="img" src="img/ava7.webp"> <div class="comment-wrapper"> <div class="txtCom lt22"> Суглобол вразив мене як фахівця своєю унікальною формулою, яка не має аналогів на ринку. Як лікар-ревматолог, я дуже задоволена результатами його застосування і впевнена, що він стане відмінним вибором для відновлення суглобів моїх пацієнтів. </div> <div class="comment-action"> <div class="comment-like"> <a href="#"> <img src="../../img/elements/comments/comment-1/like.svg" alt="like icon"> </a> </div> <div class="comment-date"> <script type="text/javascript">d = new Date(); p = new Date(d.getTime() - 2 * 86400000); monthA = '.01,02,03,04,05,06,07,08,09,10,11,12'.split(','); document.write(p.getDate() - 0 + '.' + monthA[p.getMonth()] + '.' + p.getFullYear());</script> </div> </div> </div> </div> </div> <div class="comment"> <span class="text1 lt21">Валерій</span> <span class="text2"></span> <div class="text3"><img alt="img" src="img/ava8.webp"> <div class="comment-wrapper"> <div class="txtCom lt22">Купив Суглобол своєму батьку, бо через постійний біль в колінах йому було дуже важко ходити. Пройшов місяць і вже бігає як молодий – всі в приємному шоці! </div> <div class="comment-action"> <div class="comment-like"> <a href="#"> <img src="../../img/elements/comments/comment-1/like.svg" alt="like icon"> </a> </div> <div class="comment-date"> <script type="text/javascript">d = new Date(); p = new Date(d.getTime() - 2 * 86400000); monthA = '.01,02,03,04,05,06,07,08,09,10,11,12'.split(','); document.write(p.getDate() - 0 + '.' + monthA[p.getMonth()] + '.' + p.getFullYear());</script> </div> </div> </div> </div> </div> <div class="comment"> <span class="text1 lt21">Ганна Миколаївна</span> <span class="text2"></span> <div class="text3"><img alt="img" src="img/ava9.webp"> <div class="comment-wrapper"> <div class="txtCom lt22">Я пенсіонерка і грошей не вистачає на дорогі препарати, які тільки й пропонують в аптеці.. Дякую ЄС за можливість повернутися до нормального життя не за всі гроші світу! </div> <div class="comment-action"> <div class="comment-like"> <a href="#"> <img src="../../img/elements/comments/comment-1/like.svg" alt="like icon"> </a> </div> <div class="comment-date"> <script type="text/javascript">d = new Date(); p = new Date(d.getTime() - 2 * 86400000); monthA = '.01,02,03,04,05,06,07,08,09,10,11,12'.split(','); document.write(p.getDate() - 0 + '.' + monthA[p.getMonth()] + '.' + p.getFullYear());</script> </div> </div> </div> </div> </div> </div> <button class="title border" data-load-comment="">Завантажити ще...</button> </div> <!-- CSS --> picture { display: flex; justify-content: center; align-items: center; } b, .bold { font-weight: 700; } i, .italic { font-style: italic; } .decor { color: #fff000; } #comments [href="#toform"] { color: #212a98; font-weight: 700; cursor: pointer; } .image img { width: 100%; } ol.list { list-style: decimal; } ul.list { list-style: disc; } ul.list, ol.list { list-style-position: inside; display: grid; row-gap: 10px; } .comment { display: grid; margin-bottom: 20px; } .text3 { margin-top: 8px; display: flex; -moz-column-gap: 10px; column-gap: 10px; } .text3 > img { flex: 0 0 80px; border-radius: 10px; width: 80px; height: 80px; border: 2px solid #fff000; } #commentForm { display: flex; flex-direction: row; align-items: flex-start; justify-content: start; margin-top: 20px; max-width: 800px; margin: 20px 0; padding: 20px 10px; /* border: 1px solid #ccc; */ } #commentForm .form__item { /* width: 100%; */ color: snow; border-radius: 50%; } #commentForm .form__avatar { position: relative; display: flex; background-color: #fff; background: url("../../../img/elements/comments/comment-1/userpic.webp") no-repeat center center/cover; width: 100%; height: 90px; /* border-radius: 50%; */ overflow: hidden; border-radius: 10px; } #commentForm .form__avatar img { width: 100%; max-width: 100%; } #commentForm .form__avatar::before { position: absolute; content: "Фото"; width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; background-color: rgba(0, 0, 0, 0.3); font-size: 12px; } #commentForm .form__avatar--loaded::before { display: none; } #commentForm label { color: #fff; } #commentForm .file-label { display: inline-block; width: 86%; color: #000; font-size: 12px; padding: 2px 10px; border: 1px solid #000; border-radius: 4px; text-align: center; margin-top: 5px; background: linear-gradient(to bottom, #fff, #ccc); } #inputCommentName { margin-bottom: 10px; } #commentForm input, #commentForm textarea { width: 100%; padding: 12px 20px; box-sizing: border-box; border: 1px solid #ccc; background-color: #f8f8f8; resize: none; } #commentForm input:focus, #commentForm textarea:focus { outline: none; } #commentForm .form__inputs { position: relative; width: 100%; margin-right: 50px; } #commentPush { display: inline-block; /*background-color: transparent;*/ border: none; background-color: #212a98; color: #fff; font-weight: bold; padding: 10px 25px; text-decoration: none; margin: 5px 0px 0px 0px; border-radius: 5px; cursor: pointer; transition: all 0.2s ease; } #commentPush img { width: 30px; } #commentPush:hover { background-color: #212a98; color: #fff; } .form__label { font-size: 12px; } .file { width: 100%; max-width: 90px; display: flex; flex-direction: column; align-items: center; justify-content: space-between; } .file__item { position: relative; } .file__input { position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 0; font-size: 0; cursor: pointer; } .file__button { display: inline-flex; min-height: 40px; justify-content: center; align-items: center; background-color: #bf0909; color: whitesmoke; border-radius: 5px; padding: 0px 20px; } .file__preview { display: inline-block; max-width: 100px; padding: 10px 0px 0px 0px; } .file__preview img { max-width: 100%; } .error { outline: 3px solid #a12000; } /*style comment*/ .item { width: 100%; display: flex; flex-direction: row; margin: 0 0 20px 0; } .component_ava { background-size: 100% 100%; -webkit-background-size: 100% 100%; width: 36px; height: 36px; min-width: 36px; min-height: 36px; overflow: hidden; border-radius: 100%; margin: 0 10px 0 0; } .component_info { width: 100%; display: flex; flex-direction: row; align-items: flex-end; margin: 0 0 5px 0; } .component_info_inner { background-color: #ebedf0; border-radius: 18px; display: inline-block; line-height: 16px; margin-top: 0; min-width: 0; overflow: hidden; padding: 6px 12px 7px 12px; } .component_name { color: #000; font-weight: 600; font-size: 12px; margin: 0 0 3px 3px; text-decoration: none; } .component_licked { position: relative; bottom: 3px; left: 0; display: flex; } .component_body { width: 100%; } .component_voir { color: #000; font-weight: 600; font-size: 12px; margin: 7px 0 0 12px; } .component_reposy { color: #929292; font-weight: 600; font-size: 12px; margin: 6px 0 0 12px; display: flex; flex-wrap: wrap; } .component_reposy b { font-weight: 100; word-spacing: 0 !important; color: #757575; } .component_img { width: 70%; border-radius: 18px; overflow: hidden; margin: 7px 0 6px 0; height: auto; } .component_img img { width: 100%; display: flex; height: auto; transition: all 3s ease-in; } .component_licked { background: #fff; border-radius: 10px; box-shadow: 1px 1px 3px 0 #dadde1; color: #909192; font-size: 11px; font-weight: normal; height: 20px; line-height: 20px; margin-left: -10px; padding-right: 4px; transform: translateY(-6px); z-index: 5; } a { font-weight: 600; text-decoration: none; color: #232323; } .icons { white-space: nowrap; display: flex; margin: 0; } #commentForm .form__inputs { padding: 0 0 0 15px; margin-right: 0; row-gap: 15px; } #commentForm .form__inputs input, #commentForm .form__inputs textarea, #commentForm .form__inputs button { border-radius: 5px; } #commentForm .form__inputs textarea { color: #000; } #commentForm .form__inputs textarea::-moz-placeholder { opacity: 0.5; } #commentForm .form__inputs textarea::placeholder { opacity: 0.5; } .comment-wrapper { width: 100%; align-self: flex-end; display: grid; row-gap: 10px; position: relative; padding-bottom: 4px; } s .comment-wrapper:after { content: ""; position: absolute; top: 100%; left: 0; width: 100%; height: 1px; border-radius: 10px; background: #fff000; } .comment-wrapper img { width: 20px; height: 20px; border-radius: 0; pointer-events: none; } .comment-action { display: flex; align-items: center; -moz-column-gap: 15px; column-gap: 15px; justify-self: end; } .decor { color: #fff000; } b, .bold { font-weight: 700; } .bigger { font-size: 1.3em; } .bigger-title { font-size: 1.5em; } .title { font-family: "Rubik"; font-weight: 700; font-size: 1.3em; text-transform: uppercase; text-align: center; } .title span { color: #212a98; } .name { font-size: 1.2em; } .hero { background-color: #000; } .hero__bg { position: relative; margin-left: auto; margin-right: auto; } .hero__bg img { width: 100%; } .hero__text { padding: 20px; position: absolute; left: 0; width: 100%; color: #fff; text-align: center; font-size: 1.1em; text-transform: uppercase; } section.bg-star { background: url("../img/bg.webp") 0 0/cover no-repeat; } .border { border: 2px solid #fff000; padding: 10px; border-radius: 3px; color: #212a98; } .center { text-align: center; } .upper { text-transform: uppercase; } [class*=__container] { display: grid; row-gap: 25px; } .text p:not(:last-child) { margin-bottom: 15px; } .text span { color: #fff000; } .first { margin-top: -120px; } .image { border: 1px solid #fff000; position: relative; border-radius: 3px; max-width: 450px; margin-left: auto; margin-right: auto; } .grey-bg { position: relative; padding-top: 60px; padding-bottom: 60px; background-color: rgba(255, 255, 255, 0.1); } .grey-bg:before, .grey-bg:after { color: #fff000; font-size: 5em; position: absolute; font-family: "Rubik"; padding: 5px; display: flex; justify-content: center; align-items: center; line-height: 1; } .grey-bg:before { content: "“"; top: 0; left: 10px; } .grey-bg:after { content: "”"; bottom: -35px; right: 10px; } .offer { margin-left: auto; margin-right: auto; } .offer img { max-width: 100%; filter: drop-shadow(0 0 15px #fff000); } .form { margin-left: auto; margin-right: auto; } .form__title { padding-top: 10px; font-style: italic; } .form__inputs { display: grid; row-gap: 25px; padding: 20px; } .form__inputs input { color: #000; border-radius: 5px; padding: 10px 5px; display: block; width: 100%; background-color: #fff; text-align: center; } .form__inputs input::-moz-placeholder { text-transform: uppercase; opacity: 0.5; font-size: 0.9em; } .form__inputs input::placeholder { text-transform: uppercase; opacity: 0.5; font-size: 0.9em; } .form__inputs input:last-child { text-transform: uppercase; } .form__submit { margin-top: 20px; /* max-width: 70%; */ margin-left: auto; margin-right: auto; } .form__submit input { display: block; width: 100%; background-color: #fff; color: #000; border-radius: 5px; text-transform: uppercase; font-weight: 700; padding: 5px; } .list { list-style: none !important; } .list li { display: flex; align-items: center; -moz-column-gap: 12px; column-gap: 12px; text-transform: uppercase; font-weight: 700; text-align: center; position: relative; font-size: 1.2em; } .list li p { width: 100%; display: flex; justify-content: center; align-items: center; } .list li:before { content: ""; flex: 0 0 30px; background: #fff000; display: block; width: 30px; height: 30px; border-radius: 50%; } .list li:not(:last-child) { margin-bottom: 20px; } a[href="#scroll-to-form"] { font-weight: 700; font-size: 1.1em; color: #ffdd00; } .txtCom img { width: 100%; height: auto; } @media (min-width: 400px) { .form { max-width: 70%; } .form__title { font-size: 1.8em; } } @media (min-width: 450px) { .hero__bg { max-width: 350px; } .hero__text { bottom: 100px; } .txtCom img { width: 50%; } } @media (min-width: 451px) { .offer { max-width: 400px; } } @media (min-width: 769px) { [class*=__container], .header__container { max-width: 800px; margin-left: auto; margin-right: auto; } .header__body { align-items: center; } .header-action__wrapper { flex: 1 1 auto; max-width: -moz-max-content; max-width: max-content; position: relative; z-index: 2; display: flex; align-items: center; flex-wrap: wrap; justify-content: flex-end; -moz-column-gap: 15px; column-gap: 15px; } .header-action li:hover a:after { width: 100%; } .header-action li a { display: block; position: relative; } .header-action li a:after { content: ""; position: absolute; bottom: 5px; left: 0; width: 0; height: 1px; background: #000; transition: all 0.3s ease; } .burger { display: none; } .image { margin-left: auto; margin-right: auto; } .image_50 { max-width: 50%; } .image_60 { max-width: 60%; } .image_70 { max-width: 70%; } .image_80 { max-width: 80%; } .image_90 { max-width: 90%; } .image_100 { max-width: 100%; } .form { max-width: 40%; } .list { justify-items: center; } } @media (max-width: 768px) { .header-action { position: fixed; top: 0; left: 100%; width: 100%; background-color: rgba(211, 211, 211, 0.5); background-color: #000; overflow-y: auto; } .header-action__wrapper { display: flex; flex-direction: column; justify-content: center; align-items: center; row-gap: 15px; padding: 20px 20px 30px 20px; transition: all 0.5s ease; overflow-y: auto; height: 100%; } .header-action.active { left: 0; } } @media (max-width: 480px) { #commentForm { justify-content: center; padding: 10px; } #commentForm .form__avatar::before { font-size: 10px; } #commentForm input, #commentForm textarea { border-width: 1px; padding: 10px 45px 10px 15px; font-size: 14px; } #commentPush { font-size: 14px; } #commentForm .form__inputs { margin: 0; } } @media (max-width: 450px) { .offer { max-width: 60%; } } @media (max-width: 400px) { .hero__text { bottom: 20%; } } @media (max-width: 399px) { .form__title { font-size: 1.3em; } } @media (min-width: 401px) and (max-width: 449px) { .hero__text { bottom: 25%; } } <!-- JS --> let commentParent = document.querySelector(`[data-comments]`); let comments = Array.from(commentParent.children).filter(el => el.id !== 'commentPushBlock'); const INITIAL_COMMENTS_COUNT = 4; let counter = -1; comments.forEach((el) => { el.style.display = "none"; }); for (let i = 0; i < INITIAL_COMMENTS_COUNT && i < comments.length; i++) { comments[i].style.display = "grid"; counter = i; } document .querySelector(`[data-load-comment]`) .addEventListener("click", loadComment); function loadComment() { if (comments.length - 1 > counter) { counter++; comments[counter].style.display = "grid"; if (comments.length - 1 === counter) { this.style.pointerEvents = "none"; } } else { this.style.pointerEvents = "none"; } } class Comment { constructor(commentForm, inputCommentName, inputCommentText, formImage, formAvatar, commentPushBlock) { this.commentForm = document.querySelector(commentForm); this.inputCommentName = document.querySelector(inputCommentName); this.inputCommentText = document.querySelector(inputCommentText); this.formImage = document.querySelector(formImage); this.formAvatar = document.querySelector(formAvatar); this.commentPushBlock = document.querySelector(commentPushBlock); this.commArrAll = []; this.formImageUrl = null; this.formImageChange(); this.pushComBlock(); this.domOnloader(); } uploadFile(file) { if (!["image/jpeg", "image/png", "image/gif"].includes(file.type)) { alert("Дозволені лише зображення (JPG, PNG, GIF)."); this.formImage.value = ""; return; } // Перевірка розміру файлу (<1 Мб) if (file.size > 1 * 1024 * 1024) { alert("Розмір файлу не повинен перевищувати 1 МБ."); return; } const reader = new FileReader(); reader.onload = (e) => { this.formAvatar.innerHTML = ``; this.formAvatar.classList.add("form__avatar--loaded"); this.formImageUrl = e.target.result; }; reader.onerror = function (e) { alert("Помилка при читанні файлу."); }; reader.readAsDataURL(file); } formImageChange() { this.formImage.addEventListener("change", () => { if (this.formImage.files.length > 0) { this.uploadFile(this.formImage.files[0]); } }); } pushComm() { let urlAvatar = ""; // Використовуємо завантажений URL, або дефолтний if (this.formImageUrl) { urlAvatar = this.formImageUrl; } else { urlAvatar = "../../img/elements/comments/comment-1/userpic.webp"; // Шлях до дефолтної картинки } const d = new Date(); const p = new Date(d.getTime() - 0 * 86400000); const monthA = "01,02,03,04,05,06,07,08,09,10,11,12".split(","); const dateNow = p.getDate() + "." + monthA[p.getMonth()] + "." + p.getFullYear(); // HTML-шаблон нового коментаря const comment = `<div class="comment"> <span class="text1 lt21">${this.inputCommentName.value}</span> <span class="text2"></span> <div class="text3"> <img alt="img" src="${urlAvatar}"> <div class="comment-wrapper"> <div class="txtCom lt22">${this.inputCommentText.value.replace(/\n/g, '<br>')}</div> <div class="comment-action"> <div class="comment-like"> <a href="#"> <img src="../../img/elements/comments/comment-1/like.svg" alt="like icon"> </a> </div> <div class="comment-date">${dateNow}</div> </div> </div> </div> </div>`; this.commArrAll.unshift(comment); this.commentPushBlock.innerHTML = this.commArrAll.join(""); localStorage.setItem("commArr", JSON.stringify(this.commArrAll)); // Очищення форми this.removeInputClass(); this.formAvatar.innerHTML = ""; this.formAvatar.classList.remove("form__avatar--loaded"); this.formImage.value = ""; this.formImageUrl = null; } removeInputClass() { if (this.inputCommentName) { this.inputCommentName.value = ""; this.inputCommentName.classList.remove("error"); } this.inputCommentText.value = ""; this.inputCommentText.classList.remove("error"); } pushComBlock() { this.commentForm.addEventListener("submit", (e) => { e.preventDefault(); let isNameValid = this.inputCommentName ? !!this.inputCommentName.value : true; let isTextValid = !!this.inputCommentText.value; if (isNameValid && isTextValid) { return this.pushComm(); } else { if (this.inputCommentName && !this.inputCommentName.value) { this.inputCommentName.classList.add("error"); } else if (this.inputCommentName) { this.inputCommentName.classList.remove("error"); } if (!this.inputCommentText.value) { this.inputCommentText.classList.add("error"); } else { this.inputCommentText.classList.remove("error"); } } }); } domOnloader() { document.addEventListener("DOMContentLoaded", () => { let commArr = localStorage.getItem("commArr"); if (commArr) { this.commArrAll = JSON.parse(commArr); this.commentPushBlock.innerHTML = this.commArrAll.join(""); } }); } } let comment = new Comment( "#commentForm", "#inputCommentName", "#inputCommentText", "#formImage", "#formAvatar", "#commentPushBlock" );