';
} else {
mediaHTML = '
%20+%20')
';
}
card.innerHTML =
'
' +
'
' +
'
' + (slide.tag || 'Без тега') + '
' +
'
' + (slide.title || '') + '
' +
'
' + (slide.desc || '') + '
' +
'
';
// Play button for video
var playBtn = card.querySelector('.hp-slider__play-btn');
var video = card.querySelector('video');
if (playBtn && video) {
playBtn.addEventListener('click', function(e) {
e.stopPropagation();
if (video.paused) {
video.play();
playBtn.style.opacity = '0';
} else {
video.pause();
playBtn.style.opacity = '1';
}
});
video.addEventListener('click', function() {
if (video.paused) {
video.play();
playBtn.style.opacity = '0';
} else {
video.pause();
playBtn.style.opacity = '1';
}
});
}
// Inline editing
var editableEls = card.querySelectorAll('[contenteditable]');
editableEls.forEach(function(el) {
el.addEventListener('blur', function() {
var idx = parseInt(el.dataset.index);
var field = el.dataset.field;
if (slides[idx]) {
slides[idx][field] = el.textContent;
}
});
el.addEventListener('keydown', function(e) {
if (e.key === 'Enter') {
e.preventDefault();
el.blur();
}
});
});
// Action buttons
var actionBtns = card.querySelectorAll('.hp-slider__action-btn');
actionBtns.forEach(function(btn) {
btn.addEventListener('click', function(e) {
e.stopPropagation();
var action = btn.dataset.action;
var idx = parseInt(btn.dataset.index);
if (action === 'edit') {
openEditModal(idx);
} else if (action === 'delete') {
deleteSlide(idx);
}
});
});
return card;
}
function renderSlider() {
track.innerHTML = '';
slides.forEach(function(slide, i) {
track.appendChild(buildCard(slide, i));
});
// Add button
var addCard = document.createElement('div');
addCard.className = 'hp-slider__add-card';
addCard.innerHTML =
'
' + svgPlus + '
' +
'
Добавить слайд
' +
'';
track.appendChild(addCard);
// Add menu toggle
addCard.addEventListener('click', function(e) {
e.stopPropagation();
var menu = addCard.querySelector('.hp-slider__add-menu');
var isOpen = menu.classList.contains('is-open');
// close all menus
document.querySelectorAll('.hp-slider__add-menu.is-open').forEach(function(m) {
m.classList.remove('is-open');
});
if (!isOpen) {
menu.classList.add('is-open');
}
});
// Add options
var options = addCard.querySelectorAll('.hp-slider__add-option');
options.forEach(function(opt) {
opt.addEventListener('click', function(e) {
e.stopPropagation();
var type = opt.dataset.type;
addNewSlide(type);
var menu = addCard.querySelector('.hp-slider__add-menu');
menu.classList.remove('is-open');
});
});
renderDots();
updateCounter();
}
function addNewSlide(type) {
var imgIdx = slides.length % defaultImages.length;
var newSlide = {
type: type,
src: defaultImages[imgIdx],
videoUrl: type === 'video' ? sampleVideos[0] : '',
title: 'Новый слайд',
desc: 'Нажмите, чтобы отредактировать',
tag: type === 'video' ? 'Видео' : 'Новое'
};
slides.push(newSlide);
renderSlider();
// Scroll to new slide
setTimeout(function() {
var cards = track.querySelectorAll('.hp-slider__card');
if (cards.length > 0) {
cards[cards.length - 1].scrollIntoView({ behavior: 'smooth', inline: 'center', block: 'nearest' });
}
}, 100);
showToast(type === 'video' ? 'Видео добавлено' : 'Изображение добавлено');
}
function deleteSlide(index) {
if (slides.length <= 1) {
showToast('Нельзя удалить последний слайд');
return;
}
slides.splice(index, 1);
renderSlider();
showToast('Слайд удалён');
}
function openEditModal(index) {
var slide = slides[index];
if (!slide) return;
editIndexField.value = index;
editTitleField.value = slide.title || '';
editDescField.value = slide.desc || '';
editTypeField.value = slide.type || 'image';
editTagField.value = slide.tag || '';
editMediaField.value = slide.src || '';
editVideoUrlField.value = slide.videoUrl || '';
modal.classList.add('is-open');
}
function closeModal() {
modal.classList.remove('is-open');
}
function saveEdit() {
var idx = parseInt(editIndexField.value);
if (!slides[idx]) return;
slides[idx].title = editTitleField.value;
slides[idx].desc = editDescField.value;
slides[idx].type = editTypeField.value;
slides[idx].tag = editTagField.value;
slides[idx].src = editMediaField.value;
slides[idx].videoUrl = editVideoUrlField.value;
renderSlider();
closeModal();
showToast('Слайд обновлён');
}
// Event listeners
document.getElementById('hpEditCancel').addEventListener('click', closeModal);
document.getElementById('hpEditSave').addEventListener('click', saveEdit);
modal.addEventListener('click', function(e) {
if (e.target === modal) closeModal();
});
// Nav buttons
document.querySelector('.hp-slider__nav-btn--prev').addEventListener('click', function() {
var cardWidth = track.querySelector('.hp-slider__card')
? track.querySelector('.hp-slider__card').offsetWidth + 40
: 480;
track.scrollBy({ left: -cardWidth, behavior: 'smooth' });
});
document.querySelector('.hp-slider__nav-btn--next').addEventListener('click', function() {
var cardWidth = track.querySelector('.hp-slider__card')
? track.querySelector('.hp-slider__card').offsetWidth + 40
: 480;
track.scrollBy({ left: cardWidth, behavior: 'smooth' });
});
// Scroll tracking
track.addEventListener('scroll', function() {
updateDots();
});
// Dot click
dotsContainer.addEventListener('click', function(e) {
var dot = e.target.closest('.hp-slider__dot');
if (!dot) return;
var idx = parseInt(dot.dataset.index);
var cards = track.querySelectorAll('.hp-slider__card');
if (cards[idx]) {
cards[idx].scrollIntoView({ behavior: 'smooth', inline: 'center', block: 'nearest' });
}
});
// Close menus on outside click
document.addEventListener('click', function(e) {
if (!e.target.closest('.hp-slider__add-card')) {
document.querySelectorAll('.hp-slider__add-menu.is-open').forEach(function(m) {
m.classList.remove('is-open');
});
}
});
// Keyboard nav
document.addEventListener('keydown', function(e) {
if (modal.classList.contains('is-open')) {
if (e.key === 'Escape') closeModal();
return;
}
if (e.key === 'ArrowLeft') {
document.querySelector('.hp-slider__nav-btn--prev').click();
} else if (e.key === 'ArrowRight') {
document.querySelector('.hp-slider__nav-btn--next').click();
}
});
renderSlider();
})();