Add files via upload

This commit is contained in:
Tomáš Dvořák
2025-05-27 13:18:24 +02:00
committed by GitHub
parent 5ad56a3f0e
commit 910e87cb70
2 changed files with 62 additions and 10 deletions
+51 -4
View File
@@ -1289,35 +1289,82 @@ function applyPreset(preset) {
} }
// Event Listeners // Event Listeners
bannerBgColor.addEventListener('input', () => { // Debounced update for text inputs
const debouncedUpdatePreview = debounce(() => {
updateColorPreviews(); updateColorPreviews();
updateBannerPreview(); updateBannerPreview();
}, 300);
bannerBgColor.addEventListener('input', () => {
// Update color preview immediately
const bgColorPreview = document.getElementById('bgColorPreview');
if (bgColorPreview) {
bgColorPreview.style.backgroundColor = bannerBgColor.value;
}
// Debounce the full preview update
debouncedUpdatePreview();
}); });
bannerTextColor.addEventListener('input', () => { bannerTextColor.addEventListener('input', () => {
updateColorPreviews(); // Update color preview immediately
updateBannerPreview(); const textColorPreview = document.getElementById('textColorPreview');
if (textColorPreview) {
textColorPreview.style.backgroundColor = bannerTextColor.value;
}
// Debounce the full preview update
debouncedUpdatePreview();
}); });
// Connect color pickers to input fields // Connect color pickers to input fields
const bannerBgColorPicker = document.getElementById('bannerBgColorPicker'); const bannerBgColorPicker = document.getElementById('bannerBgColorPicker');
const bannerTextColorPicker = document.getElementById('bannerTextColorPicker'); const bannerTextColorPicker = document.getElementById('bannerTextColorPicker');
// Debounce function to improve performance
function debounce(func, wait) {
let timeout;
return function(...args) {
const context = this;
clearTimeout(timeout);
timeout = setTimeout(() => func.apply(context, args), wait);
};
}
// Update only the color preview during dragging (lightweight)
bannerBgColorPicker.addEventListener('input', () => { bannerBgColorPicker.addEventListener('input', () => {
bannerBgColor.value = bannerBgColorPicker.value; bannerBgColor.value = bannerBgColorPicker.value;
// Only update the color preview (lightweight operation)
const bgColorPreview = document.getElementById('bgColorPreview');
if (bgColorPreview) {
bgColorPreview.style.backgroundColor = bannerBgColorPicker.value;
}
});
// Update the full preview only when the user has finished selecting a color
bannerBgColorPicker.addEventListener('change', () => {
updateColorPreviews(); updateColorPreviews();
updateBannerPreview(); updateBannerPreview();
}); });
// Same for text color picker
bannerTextColorPicker.addEventListener('input', () => { bannerTextColorPicker.addEventListener('input', () => {
bannerTextColor.value = bannerTextColorPicker.value; bannerTextColor.value = bannerTextColorPicker.value;
// Only update the color preview (lightweight operation)
const textColorPreview = document.getElementById('textColorPreview');
if (textColorPreview) {
textColorPreview.style.backgroundColor = bannerTextColorPicker.value;
}
});
// Update the full preview only when the user has finished selecting a color
bannerTextColorPicker.addEventListener('change', () => {
updateColorPreviews(); updateColorPreviews();
updateBannerPreview(); updateBannerPreview();
}); });
// For other form controls, use debounced updates on input
[bannerText, bannerTextAlign, bannerFontSize, bannerPadding, bannerMargin, bannerBorderRadius, bannerVisible].forEach(el => { [bannerText, bannerTextAlign, bannerFontSize, bannerPadding, bannerMargin, bannerBorderRadius, bannerVisible].forEach(el => {
el.addEventListener('change', updateBannerPreview); el.addEventListener('change', updateBannerPreview);
el.addEventListener('input', updateBannerPreview); el.addEventListener('input', debouncedUpdatePreview);
}); });
stylePresets.forEach(preset => { stylePresets.forEach(preset => {
+11 -6
View File
@@ -33,15 +33,18 @@
if (!bannerContainer || !bannerContent) return; if (!bannerContainer || !bannerContent) return;
// Apply styles // Apply styles to container
bannerContainer.style.borderRadius = (banner.style.borderRadius ? `${banner.style.borderRadius}px` : '8px');
// Apply styles to content
Object.assign(bannerContent.style, { Object.assign(bannerContent.style, {
backgroundColor: banner.style.backgroundColor || '#f8d7da', backgroundColor: banner.style.backgroundColor || '#f8d7da',
color: banner.style.textColor || '#721c24', color: banner.style.textColor || '#721c24',
textAlign: banner.style.textAlign || 'center', textAlign: banner.style.textAlign || 'center',
fontSize: banner.style.fontSize || '18px', fontSize: banner.style.fontSize ? `${banner.style.fontSize}px` : '18px',
padding: banner.style.padding || '20px', padding: banner.style.padding ? `${banner.style.padding}px` : '20px',
margin: banner.style.margin ? `${banner.style.margin}px 0` : '20px 0', margin: banner.style.margin ? `${banner.style.margin}px 0` : '20px 0',
borderRadius: banner.style.borderRadius || '8px', borderRadius: banner.style.borderRadius ? `${banner.style.borderRadius}px` : '8px',
boxShadow: '0 2px 4px rgba(0,0,0,0.1)', boxShadow: '0 2px 4px rgba(0,0,0,0.1)',
display: 'block' display: 'block'
}); });
@@ -49,9 +52,11 @@
// Handle image // Handle image
let content = banner.text || ''; let content = banner.text || '';
if (banner.image) { if (banner.image) {
// Apply the same border radius to the image as to the container
const imageRadius = Math.max(parseInt(banner.style.borderRadius || '4'), 0);
content = ` content = `
<div style="margin-bottom: 15px;"> <div style="margin-bottom: 15px; text-align: ${banner.style.textAlign || 'center'};">
<img src="${banner.image}" style="max-width: 100%; max-height: 200px; border-radius: 4px;"> <img src="${banner.image}" style="max-width: 100%; max-height: 200px; border-radius: ${imageRadius}px;">
</div> </div>
${content} ${content}
`; `;