/* ===== Public screens ===== */ const D = window.DATA; const CYRILLIC_TO_LATIN = { а:'a', б:'b', в:'v', г:'g', д:'d', е:'e', ё:'e', ж:'zh', з:'z', и:'i', й:'y', к:'k', л:'l', м:'m', н:'n', о:'o', п:'p', р:'r', с:'s', т:'t', у:'u', ф:'f', х:'h', ц:'ts', ч:'ch', ш:'sh', щ:'sch', ъ:'', ы:'y', ь:'', э:'e', ю:'yu', я:'ya', }; function slugifyText(text=''){ return String(text || '') .toLowerCase() .split('') .map(char=>CYRILLIC_TO_LATIN[char] ?? char) .join('') .replace(/[^a-z0-9]+/g, '-') .replace(/^-+|-+$/g, '') .replace(/-{2,}/g, '-'); } function plainTextFromHtml(html=''){ return String(html || '') .replace(//gi, ' ') .replace(//gi, ' ') .replace(/<[^>]+>/g, ' ') .replace(/ /gi, ' ') .replace(/\s+/g, ' ') .trim(); } function excerptFromHtml(html='', maxLength=180){ const text = plainTextFromHtml(html); if(text.length <= maxLength) return text; return `${text.slice(0, maxLength).trimEnd()}…`; } function newsHtmlContent(html=''){ const raw = String(html || '').trim(); if(!raw) return '

Текст новости пока не заполнен.

'; if(/<[^>]+>/.test(raw)) return raw; return raw .split(/\n{2,}/) .map(chunk=>`

${chunk.replace(/\n/g,'
')}

`) .join(''); } function newsRouteParam(news){ if(!news) return ''; const slug = slugifyText(news.title || ''); return slug ? `${news.id}-${slug}` : String(news.id); } function newsIdFromParam(param=''){ const value = String(param || '').trim(); if(!value) return ''; const [first] = value.split('-'); return /^\d+$/.test(first) ? first : value; } function findNewsByParam(param, list=(window.DATA?.news || [])){ const id = newsIdFromParam(param); return list.find(item=>String(item.id)===String(id)) || null; } function raceRouteParam(race){ if(!race) return ''; const slug = slugifyText(race.title || ''); return slug ? `${race.id}-${slug}` : String(race.id); } function raceIdFromParam(param=''){ const value = String(param || '').trim(); if(!value) return ''; const [first] = value.split('-'); return /^\d+$/.test(first) ? first : value; } function findRaceByParam(param, list=(window.DATA?.races || [])){ const id = raceIdFromParam(param); return list.find(item=>String(item.id)===String(id)) || null; } function SiteAd({ slotId, variant='slot', className='', style={} }){ const ad = (D.ads && D.ads[slotId]) || {}; const enabled = !!ad.active && !!(ad.title || ad.text || ad.img || ad.url); const showPlaceholder = ad.showPlaceholder !== false; const baseClass = variant==='banner' ? 'ad-banner card' : 'ad-slot card'; if(!enabled){ if(!showPlaceholder) return null; return (
{variant==='banner' ? <>РЕКЛАМАМесто для рекламы свободноЭтот рекламный блок доступен для размещения : 'Место для рекламы свободно'}
); } const Tag = ad.url ? 'a' : 'div'; const props = ad.url ? {href:ad.url, target:'_blank', rel:'noreferrer'} : {}; return ( {ad.img && {ad.title}
{variant==='banner' ? (
{ad.tag || 'РЕКЛАМА'} {ad.title || 'Рекламный баннер'} {ad.text && {ad.text}} {ad.button && {ad.button}}
) : (
{ad.tag || 'РЕКЛАМА'} {ad.title || 'Рекламный блок'} {ad.text && {ad.text}} {ad.button && {ad.button}}
)}
); } /* ---------------- HERO VARIANTS ---------------- */ function HeroVideo({ go }){ return (
Студенты лаборатории БПЛА
Лаборатория БПЛА · КРСУ

Твой полёт начинается
здесь

Современные курсы по БПЛА: теория, симулятор и практика. Учитесь управлять, снимать, анализировать данные и работать с дронами профессионально.

); } function HeroSplit({ go }){ return (
Лаборатория БПЛА · КРСУ

Твой полёт начинается здесь

Курсы по FPV-пилотированию, агродронам, аэрофотосъёмке, рейсингу и научным исследованиям. Учитесь онлайн, тренируйтесь на симуляторе, защищайте аттестацию.

Сертификат КРСУ
после аттестации
ПРОГРЕСС КУРСА
72%
); } function HeroMinimal({ go }){ return (
Новый набор · весна 2026

Небо — это
учебный класс

Лаборатория БПЛА КРСУ обучает управлению дронами, аэросъёмке и инженерии. Онлайн-теория, симулятор и реальная практика.

); } /* ---------------- PROGRAM PICKER ---------------- */ function ProgramPicker({ go }){ const [active, setActive] = useState(0); const tabs = [ { icon:'award', color:'#22c55e', label:'Сертификат оператора БПЛА КР', sub:'Официальный документ государственного образца', features:[ 'Курсы FPV-пилотирования, агродронов и аэрофотосъёмки', 'Онлайн-обучение + полевые тренировки с инструктором', 'Итоговая аттестация → гос. сертификат оператора БПЛА', 'Группы с 18 лет — младшая и старшая', ], cta:'Выбрать курс', }, { icon:'trophy', color:'#f59e0b', label:'Спорт', sub:'FPV-гонки, лига и федерация дронов', features:[ 'Тренировки на симуляторе и реальных трассах', 'Участие в официальной лиге гонок дронов КР', 'Членство в Федерации гонок дронов Кыргызстана', 'Соревнования, рейтинг, сообщество пилотов', ], cta:'Войти в спорт', }, { icon:'target', color:'#6366f1', label:'Карьера', sub:'Профессия пилота-оператора и инженера БПЛА', features:[ 'Агродроны — обработка полей и точное земледелие', 'Аэрофотосъёмка и видеопроизводство с воздуха', 'Диплом о квалификации от лаборатории БПЛА КРСУ', 'Научные исследования и инженерные проекты', ], cta:'Построить карьеру', }, ]; const t = tabs[active]; return (
{tabs.map((tab,i)=>( ))}
    {t.features.map((f,i)=>(
  • {f}
  • ))}
); } /* ---------------- LANDING ---------------- */ const AUTUMN_SCHOOL_IMAGES = Array.from({length:8},(_,index)=> `assets/autumn-school/autumn-school-${String(index+1).padStart(2,'0')}.jpg` ); const AUTUMN_SCHOOL_SLIDES = [ { image:AUTUMN_SCHOOL_IMAGES[0], eyebrow:'Новый набор · 12–17 лет', title:'Прокачай свою осень в небе', text:'Осенняя «Школа дронов» 2026 — проект Лаборатории БПЛА КРСУ для тех, кто хочет не просто смотреть на дроны, а управлять ими.', }, { image:AUTUMN_SCHOOL_IMAGES[3], eyebrow:'Level 1 · 30% курса', title:'Онлайн-база без отрыва от школы', text:'Сентябрь и октябрь: симуляторы, устройство и ремонт FPV, теория полёта и правила безопасности.', }, { image:AUTUMN_SCHOOL_IMAGES[4], eyebrow:'Level 2 · 70% курса', title:'Полный газ на Иссык-Куле', text:'Во время осенних каникул — 7 дней погружения на базе «Жаштык»: ежедневные полёты, инструкторы и всё необходимое оборудование.', }, { image:AUTUMN_SCHOOL_IMAGES[5], eyebrow:'Практика', title:'Навыки, которые останутся с тобой', text:'Уверенное ручное управление, сборка и ремонт дрона, пайка, а также базовые навыки первой помощи.', }, { image:AUTUMN_SCHOOL_IMAGES[6], eyebrow:'Результат', title:'Сертификат КРСУ после экзамена', text:'В финале участники проходят итоговую аттестацию и получают официальный сертификат КРСУ установленного образца.', }, ]; function AutumnSchoolCarousel({ go }){ const [active,setActive]=useState(0); const [paused,setPaused]=useState(false); const slide=AUTUMN_SCHOOL_SLIDES[active]; const move=direction=>setActive(index=>(index+direction+AUTUMN_SCHOOL_SLIDES.length)%AUTUMN_SCHOOL_SLIDES.length); useEffect(()=>{ if(paused || window.matchMedia?.('(prefers-reduced-motion: reduce)').matches) return; const timer=setInterval(()=>move(1),6000); return ()=>clearInterval(timer); },[paused]); return
setPaused(true)} onMouseLeave={()=>setPaused(false)}>
{slide.eyebrow}

{slide.title}

{slide.text}

Сентябрь — ноябрь 2026
{slide.title}/
{String(active+1).padStart(2,'0')} / {String(AUTUMN_SCHOOL_SLIDES.length).padStart(2,'0')}
{AUTUMN_SCHOOL_SLIDES.map((item,index)=>)}
; } function AutumnSchoolPage({ go }){ const galleryAlts=[ 'Анонс Осенней школы дронов 2026', 'Идеальный баланс учёбы и осенней практики', 'Комбинированный формат обучения', 'Программа онлайн-модуля', 'Лётная практика на Иссык-Куле', 'Навыки участников Школы дронов', 'Сертификат КРСУ после аттестации', 'Осенний набор 2026', ]; return
Осенний набор открыт

Прокачай свою осень в небе!

Осенняя «Школа дронов» 2026 — проект Лаборатории БПЛА КРСУ для подростков от 12 до 17 лет.

Онлайн-теория без отрыва от школы и интенсивная лётная практика на Иссык-Куле во время осенних каникул.

{galleryAlts[0]}/
Формат обучения

Два этапа — одно полное погружение

Комбинированный формат помогает плавно войти в мир БПЛА и совместить занятия со школьной учёбой.

01
30% курса

Level 1: онлайн

Сентябрь — октябрь 2026

Начни летать, не выходя из дома. Базовая теория и тренировки в симуляторе готовят к реальным полётам.

  • обычные и гоночные дроны в симуляторе;
  • устройство и ремонт FPV;
  • теория полёта и законы.
02
70% курса

Level 2: Иссык-Куль

Ноябрь 2026 · 7 дней

Полное погружение в лагере КРСУ «Жаштык» во время осенних каникул.

  • ежедневные полёты в ручном режиме;
  • работа с инструкторами;
  • дроны и оборудование предоставляет КРСУ.
Твои новые скиллы

Не просто летать — понимать технику

{[ {icon:'target',title:'Уверенный Manual',text:'Полный контроль над реальным дроном в сложных погодных условиях.'}, {icon:'wrench',title:'Сборка с нуля',text:'Устройство дронов, пайка, диагностика и ремонт систем.'}, {icon:'shield',title:'Первая помощь',text:'Отработка реальных навыков спасения и безопасности полётов.'}, ].map((skill,index)=>

{skill.title}

{skill.text}

)}
Результат обучения

Главный лут сезона

Сдаёшь итоговый экзамен и получаешь официальный сертификат КРСУ установленного образца.

ЭкзаменСертификат КРСУ
{galleryAlts[6]}
Программа в кадрах

Осенняя миссия от старта до сертификата

{AUTUMN_SCHOOL_IMAGES.map((image,index)=>{galleryAlts[index]})}
Места в эскадрилью ограничены

Готов собрать и запустить свой первый дрон этой осенью?

Старт онлайн-модуля — сентябрь 2026. Практика на Иссык-Куле — ноябрь 2026.

Забронировать место
; } function Landing({ go, heroVariant }){ const Hero = heroVariant==='split'?HeroSplit : heroVariant==='minimal'?HeroMinimal : HeroVideo; const steps = [ { n:'01', t:'Пробный урок', d:'Занятия проходят полностью онлайн — подключайтесь из любой точки мира.' }, { n:'02', t:'Выбираете курс', d:'Каталог программ под вашу цель — от хобби до профессии.' }, { n:'03', t:'Оплачиваете', d:'Обучение — по реквизитам КРСУ, гонки — по отдельному QR-коду.' }, { n:'04', t:'Учитесь онлайн и практикуетесь', d:'Видео, материалы, симулятор и полевые тренировки под наставничеством инструкторов.' }, { n:'05', t:'Получаете сертификат оператора БПЛА Кыргызской Республики', d:'После итоговой аттестации выдаётся официальный документ государственного образца.' }, { n:'06', t:'Диплом о присвоении квалификации', d:'Подтверждает уровень профессиональной подготовки выпускника лаборатории БПЛА КРСУ.' }, { n:'07', t:'Становитесь членом федерации гонок дронов', d:'Открывается доступ к официальным соревнованиям, лиге и сообществу пилотов Кыргызстана.' }, ]; const mediaTeasers = (D.media || []).filter(item=>item.active).slice(0,3); const nearestRace = (D.races || [])[0]; const nearestRaceTitle = nearestRace ? `${nearestRace.title} — ${String(nearestRace.status || '').toLowerCase()}` : 'Ближайшая гонка дронов'; return (
{/* directions */}
Направления обучения

Программы обучения — для неба, земли и науки

Выберите, что вам подходит

{/* media gallery teaser */}
Медиа-галерея

Начните с того, что вдохновляет

{mediaTeasers.map((m,i)=>( ))}
{/* how it works */}
Как это работает

Путь от заявки до сертификата

{steps.map((s,i)=>(
{s.n}
{s.t}

{s.d}

))}
{/* why us band */}
Почему КРСУ

Учебная база, практика и экспертиза в одном месте

Лаборатория БПЛА Кыргызско-Российского Славянского университета объединяет преподавателей, инженеров и действующих пилотов. Симуляторный зал, парк учебных дронов и собственная площадка для полётов.

{[ { i:'shield', t:'Безопасность', d:'Регламенты и разбор аварийных ситуаций' }, { i:'users', t:'Менторы', d:'Действующие пилоты и инженеры' }, { i:'layers', t:'Симулятор', d:'Тренажёрный зал для отработки' }, { i:'award', t:'Сертификат', d:'Аттестация и документ КРСУ' }, ].map((f,i)=>(
{f.t} {f.d}
))}
{/* racing teaser */}
Дрон-рейсинг
Гонки на дронах

{nearestRaceTitle}

Анонсы, расписание квалификаций и трансляции — на наших каналах. Вся основная информация о гонках публикуется в социальных сетях лаборатории.

YouTube Instagram
{/* news teaser */}

Единое окно новостей

{D.news.slice(0,3).map((n,i)=>())}
{/* CTA */}

Готовы поднять свой первый дрон в воздух?

Приходите на пробное занятие и познакомьтесь с обучением.

); } /* ---------------- shared cards ---------------- */ function CourseCard({ c, go, enrollment=null }){ const purchased=enrollment?.access==='open'; const pending=enrollment?.access==='pending'; return ( ); } function NewsCard({ n, go }){ const img = n.img || 'assets/pic_bg_new.png'; return (
go && go('news-item', newsRouteParam(n))} style={{cursor:go ? 'pointer' : 'default'}}>
{n.title}
{n.cat} {n.date}
{n.title}

{excerptFromHtml(n.text, 150)}

{n.src}
); } Object.assign(window, { Landing, CourseCard, NewsCard, SiteAd, plainTextFromHtml, excerptFromHtml, newsHtmlContent, slugifyText, newsRouteParam, newsIdFromParam, findNewsByParam, raceRouteParam, raceIdFromParam, findRaceByParam });