/
brightwe
/
leader_start
Обзор
Документация
Войти
/
brightwe
/
leader_start
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
script.js
384 строки
17 KB
brightwe
Create: script.js
26 июл 2026, 18:46
Верифицирован
26 июл 2026, 18:46
6775311
Код
Авторство
О чём код?
(function () { "use strict"; // Promo pricing ends 6 Aug 2026: switch to regular price, drop the strikethrough and the deadline note var promoDeadline = new Date(2026, 7, 6, 0, 0, 0); if (new Date() >= promoDeadline) { document.querySelectorAll(".price").forEach(function (price) { var oldPrice = price.querySelector("s"); var currentPrice = price.querySelector(".current-price strong"); if (oldPrice && currentPrice) { currentPrice.textContent = oldPrice.textContent; oldPrice.remove(); } }); var planNote = document.querySelector(".plan-note"); if (planNote) planNote.remove(); var newWidgets = { "getcourse-standard": { scriptId: "d10e059bb309e94842118c590f03e262d59482d5", src: "https://brightwe.online/pl/lite/widget/script?id=1635127", title: "Пакет «Стандарт» — 4900 ₽" }, "getcourse-maximum": { scriptId: "807cb6ea69e1a54b04fb231e45432f7a44c14af0", src: "https://brightwe.online/pl/lite/widget/script?id=1635126", title: "Пакет «Максимум» — 5900 ₽" } }; Object.keys(newWidgets).forEach(function (modalId) { var modal = document.querySelector('.getcourse-modal[data-modal-id="' + modalId + '"]'); if (!modal) return; var info = newWidgets[modalId]; var widgetContainer = modal.querySelector(".getcourse-widget"); if (widgetContainer) { widgetContainer.innerHTML = ""; var script = document.createElement("script"); script.id = info.scriptId; script.src = info.src; widgetContainer.appendChild(script); } var title = modal.querySelector(".getcourse-modal-title"); if (title) title.textContent = info.title; }); } // Post-event mode from 8 Aug 2026: intensive is over, offer only the recording var postEventDate = new Date(2026, 7, 8, 0, 0, 0); if (new Date() >= postEventDate) { function setCtaText(el, text) { if (!el) return; var textNode = el.childNodes[0]; if (textNode && textNode.nodeType === Node.TEXT_NODE) { textNode.textContent = text; } else { el.insertBefore(document.createTextNode(text), el.firstChild); } } document.querySelectorAll('[data-cta="short"]').forEach(function (el) { setCtaText(el, "Заказать запись "); }); document.querySelectorAll('[data-cta="long"]').forEach(function (el) { setCtaText(el, "Заказать запись интенсива "); }); document.querySelectorAll('[data-cta="package"]').forEach(function (el) { setCtaText(el, "Заказать запись "); }); var plansHeading = document.getElementById("plansHeading"); if (plansHeading) plansHeading.textContent = "Закажите запись интенсива"; var maxPlanTitle = document.getElementById("maxPlanTitle"); if (maxPlanTitle) maxPlanTitle.textContent = "Заказать запись"; document.querySelectorAll(".live-only").forEach(function (li) { li.remove(); }); var standardPlan = document.querySelector('[data-plan="standard"]'); if (standardPlan) standardPlan.remove(); var planGrid = document.getElementById("planGrid"); if (planGrid) planGrid.classList.add("single-plan"); document.querySelectorAll(".timeline-item").forEach(function (item) { var time = item.querySelector("time"); if (time) time.remove(); item.classList.add("no-time"); }); var dateCard = document.querySelector('[data-event-date-card="true"]'); if (dateCard) dateCard.remove(); } // Scroll progress bar var progress = document.querySelector(".scroll-progress"); function updateProgress() { if (!progress) return; var h = document.documentElement; var scrollTop = h.scrollTop || document.body.scrollTop; var scrollHeight = h.scrollHeight - h.clientHeight; var ratio = scrollHeight > 0 ? scrollTop / scrollHeight : 0; progress.style.transform = "scaleX(" + ratio + ")"; } document.addEventListener("scroll", updateProgress, { passive: true }); updateProgress(); // Mobile nav toggle var mobileNav = document.querySelector(".mobile-nav"); var toggle = document.querySelector(".mobile-nav-toggle"); var panel = document.querySelector(".mobile-nav-panel"); if (mobileNav && toggle && panel) { var links = panel.querySelectorAll("a"); function setOpen(open) { mobileNav.setAttribute("data-open", open ? "true" : "false"); toggle.setAttribute("aria-expanded", open ? "true" : "false"); toggle.setAttribute("aria-label", open ? "Закрыть меню" : "Открыть меню"); panel.setAttribute("aria-hidden", open ? "false" : "true"); links.forEach(function (a) { a.tabIndex = open ? 0 : -1; }); } toggle.addEventListener("click", function () { var isOpen = mobileNav.getAttribute("data-open") === "true"; setOpen(!isOpen); }); links.forEach(function (a) { a.addEventListener("click", function () { setOpen(false); }); }); } // Scroll reveal var revealEls = document.querySelectorAll("[data-reveal]"); if ("IntersectionObserver" in window) { var io = new IntersectionObserver( function (entries) { entries.forEach(function (entry) { if (entry.isIntersecting) { entry.target.classList.add("is-visible"); io.unobserve(entry.target); } }); }, { threshold: 0.15, rootMargin: "0px 0px -60px 0px" } ); revealEls.forEach(function (el) { io.observe(el); }); } else { revealEls.forEach(function (el) { el.classList.add("is-visible"); }); } // Audience list stagger animation reuses same class as reveal var audienceCopy = document.querySelector(".audience-copy"); if (audienceCopy && "IntersectionObserver" in window) { var ioAudience = new IntersectionObserver( function (entries) { entries.forEach(function (entry) { if (entry.isIntersecting) { entry.target.classList.add("is-visible"); ioAudience.unobserve(entry.target); } }); }, { threshold: 0.2 } ); ioAudience.observe(audienceCopy); } // Simple tilt effect var tiltEls = document.querySelectorAll("[data-tilt]"); tiltEls.forEach(function (el) { el.addEventListener("pointermove", function (e) { var rect = el.getBoundingClientRect(); var x = (e.clientX - rect.left) / rect.width - 0.5; var y = (e.clientY - rect.top) / rect.height - 0.5; el.style.setProperty("--tilt-x", (y * -6).toFixed(2) + "deg"); el.style.setProperty("--tilt-y", (x * 6).toFixed(2) + "deg"); el.style.setProperty("--tilt-lift", "-4px"); }); el.addEventListener("pointerleave", function () { el.style.setProperty("--tilt-x", "0deg"); el.style.setProperty("--tilt-y", "0deg"); el.style.setProperty("--tilt-lift", "0px"); }); }); // Review carousel var track = document.querySelector(".review-track"); var prevBtn = document.querySelector('[aria-label="Предыдущий отзыв"]'); var nextBtn = document.querySelector('[aria-label="Следующий отзыв"]'); var counter = document.querySelector(".review-controls span"); if (track) { var cards = track.querySelectorAll(".review-card"); var total = cards.length; function pad(n) { return n < 10 ? "0" + n : "" + n; } function currentIndex() { var scrollLeft = track.scrollLeft; var best = 0; var bestDiff = Infinity; cards.forEach(function (card, i) { var diff = Math.abs(card.offsetLeft - scrollLeft); if (diff < bestDiff) { bestDiff = diff; best = i; } }); return best; } function updateControls() { var idx = currentIndex(); if (counter) counter.textContent = pad(idx + 1) + " / " + pad(total); if (prevBtn) prevBtn.disabled = idx <= 0; if (nextBtn) nextBtn.disabled = idx >= total - 1; } function scrollToIndex(idx) { idx = Math.max(0, Math.min(total - 1, idx)); cards[idx].scrollIntoView({ behavior: "smooth", inline: "center", block: "nearest" }); } if (prevBtn) { prevBtn.addEventListener("click", function () { scrollToIndex(currentIndex() - 1); }); } if (nextBtn) { nextBtn.addEventListener("click", function () { scrollToIndex(currentIndex() + 1); }); } track.addEventListener("scroll", function () { window.requestAnimationFrame(updateControls); }, { passive: true }); updateControls(); } // Speaker bio modal var speakerBios = { belotserkovskaya: { name: "Юлия Белоцерковская", photo: "belotserkovskaya.jpg", html: "<p>Предприниматель, бизнес-преподаватель, маркетолог. Специалист по продажам, копирайтингу, таргетингу и Яндекс.Директу.</p><ul>" + "<li>Эксперт онлайн-школы bestbabyclub.ru с 2011 года</li>" + "<li>Руководитель онлайн-школы по обучению руководителей и сотрудников детских проектов «Яркие мы» с 2019 года</li>" + "<li>Основатель международной онлайн-школы русского языка для детей-билингвов «iRUS»</li>" + "<li>Более 2000 детских проектов прошли обучение на онлайн- и офлайн-курсах</li>" + "<li>Обучила более 400 менеджеров по продажам</li>" + "<li>Спикер отраслевых конференций, автор обучающих курсов по интернет-маркетингу и продажам</li>" + "</ul>" }, salnikova: { name: "Ирина Сальникова", photo: "salnikova.jpg", html: "<ul>" + "<li>Автор и директор франчайзинговой сети бизнес-школ для детей и подростков «ТОП-ТОП МЕНЕДЖЕР»</li>" + "<li>Партнёр Batyrev Consulting Group</li>" + "<li>Директор Бизнес Академии «СМАРТ ТИМ» для руководителей</li>" + "<li>Вице-президент по PR и маркетингу Ассоциации спикеров СНГ (CISSA)</li>" + "</ul>" }, rylskaya: { name: "Анна Рыльская", photo: "rylskaya.png", html: "<ul>" + "<li>Основатель и собственник федеральной сети Welcome (23 офиса и 20 партнёров, более 5000 учеников)</li>" + "<li>Сертифицированный коуч и бизнес-наставник, ведущая стратегических сессий</li>" + "<li>Дипломированный директор по франчайзингу</li>" + "<li>Программный директор конференций Trendy English</li>" + "<li>Автор книги «Сильнее себя»</li>" + "<li>Спикер множества профильных конференций, автор курсов, мастер-майндов и тренингов для руководителей</li>" + "<li>Лидер проекта «300 тренировок»; морж, марафонец, триатлет и пловец в открытой воде</li>" + "<li>Многодетная мама</li>" + "</ul>" }, kuzmenko: { name: "Ирина Кузьменко-Астафьева", photo: "kuzmenko-astafieva.jpg", html: "<ul>" + "<li>Сертифицированный бизнес-коуч и бизнес-тренер ICTA (International Coaching and Training Association) с 2010 г.</li>" + "<li>Предприниматель-практик, эксперт по системному управлению, построению эффективных команд и антикризисному управлению</li>" + "<li>Более 20 лет опыта управления бизнесом, проектами и командами численностью от 50 до 120 сотрудников</li>" + "<li>Основатель тренингового центра «Высота» и онлайн-школы для руководителей и предпринимателей</li>" + "<li>Автор технологии «7 шагов успешного найма» и программы по системному управлению «Антихаос»</li>" + "<li>Более 400 руководителей из России, стран СНГ и Европы прошли программу «Антихаос» и увеличили прибыль своих компаний от ×2 до ×10</li>" + "<li>Соавтор книги «Навигатор руководителя учебного центра»</li>" + "<li>Спикер бизнес-конференций, приглашённый эксперт радио и телевидения</li>" + "</ul>" + "<blockquote>«Я не учу работать больше. Я учу управлять собой, решениями и бизнесом».</blockquote>" }, shlyueva: { name: "Светлана Шлюева", photo: "shlyueva.png", html: "<ul>" + "<li>Эксперт по маркетингу в детском бизнесе</li>" + "<li>Руководитель детского центра «Умняшки», практик с 10-летним опытом</li>" + "<li>Продвигает идею продвижения через ВАУ-инструменты</li>" + "</ul>" } }; var speakerModal = document.querySelector(".speaker-modal"); if (speakerModal) { var speakerModalPhoto = speakerModal.querySelector(".speaker-modal-photo"); var speakerModalName = speakerModal.querySelector(".speaker-modal-name"); var speakerModalText = speakerModal.querySelector(".speaker-modal-text"); var speakerModalLastFocused = null; function openSpeakerModal(id) { var data = speakerBios[id]; if (!data) return; speakerModalPhoto.src = data.photo; speakerModalPhoto.alt = data.name; speakerModalName.textContent = data.name; speakerModalText.innerHTML = data.html; speakerModalLastFocused = document.activeElement; speakerModal.setAttribute("data-open", "true"); speakerModal.setAttribute("aria-hidden", "false"); document.body.classList.add("modal-open"); speakerModal.querySelector(".speaker-modal-close").focus(); } function closeSpeakerModal() { speakerModal.setAttribute("data-open", "false"); speakerModal.setAttribute("aria-hidden", "true"); document.body.classList.remove("modal-open"); if (speakerModalLastFocused) speakerModalLastFocused.focus(); } document.querySelectorAll("[data-speaker-open]").forEach(function (btn) { btn.addEventListener("click", function () { openSpeakerModal(btn.getAttribute("data-speaker-open")); }); }); speakerModal.querySelectorAll("[data-modal-close]").forEach(function (el) { el.addEventListener("click", closeSpeakerModal); }); document.addEventListener("keydown", function (e) { if (e.key === "Escape" && speakerModal.getAttribute("data-open") === "true") closeSpeakerModal(); }); } // GetCourse package widget modals var getcourseModals = document.querySelectorAll("[data-modal-id]"); function openGetcourseModal(id) { var m = document.querySelector('[data-modal-id="' + id + '"]'); if (!m) return; m.setAttribute("data-open", "true"); m.setAttribute("aria-hidden", "false"); document.body.classList.add("modal-open"); } function closeGetcourseModal(m) { m.setAttribute("data-open", "false"); m.setAttribute("aria-hidden", "true"); document.body.classList.remove("modal-open"); } getcourseModals.forEach(function (m) { m.querySelectorAll("[data-modal-close]").forEach(function (el) { el.addEventListener("click", function () { closeGetcourseModal(m); }); }); }); document.querySelectorAll("[data-modal-open]").forEach(function (btn) { btn.addEventListener("click", function () { openGetcourseModal(btn.getAttribute("data-modal-open")); }); }); document.addEventListener("keydown", function (e) { if (e.key !== "Escape") return; getcourseModals.forEach(function (m) { if (m.getAttribute("data-open") === "true") closeGetcourseModal(m); }); }); })();