35591-vm/assets/js/main.js
Flatlogic Bot 062a594521 1
2025-11-09 09:51:13 +00:00

130 lines
4.3 KiB
JavaScript

document.addEventListener('DOMContentLoaded', function () {
// --- Feather Icons ---
feather.replace();
// --- Theme Switcher ---
const themeSwitch = document.getElementById('checkbox');
const currentTheme = localStorage.getItem('theme');
if (currentTheme) {
document.documentElement.setAttribute('data-theme', currentTheme);
if (currentTheme === 'dark') {
themeSwitch.checked = true;
}
}
function switchTheme(e) {
if (e.target.checked) {
document.documentElement.setAttribute('data-theme', 'dark');
localStorage.setItem('theme', 'dark');
} else {
document.documentElement.setAttribute('data-theme', 'light');
localStorage.setItem('theme', 'light');
}
}
themeSwitch.addEventListener('change', switchTheme, false);
// --- Generator Form: Photo Upload ---
const uploadArea = document.getElementById('upload-area');
const fileInput = document.getElementById('photo-upload');
const photoPreview = document.getElementById('photo-preview');
const MAX_FILES = 5;
let uploadedFiles = [];
if (uploadArea) {
uploadArea.addEventListener('click', () => fileInput.click());
uploadArea.addEventListener('dragover', (e) => {
e.preventDefault();
uploadArea.style.borderColor = 'var(--color-primary)';
});
uploadArea.addEventListener('dragleave', (e) => {
e.preventDefault();
uploadArea.style.borderColor = 'var(--border-color)';
});
uploadArea.addEventListener('drop', (e) => {
e.preventDefault();
uploadArea.style.borderColor = 'var(--border-color)';
const files = e.dataTransfer.files;
handleFiles(files);
});
fileInput.addEventListener('change', (e) => {
const files = e.target.files;
handleFiles(files);
});
}
function handleFiles(files) {
for (const file of files) {
if (uploadedFiles.length < MAX_FILES && file.type.startsWith('image/')) {
uploadedFiles.push(file);
}
}
updatePreview();
}
function updatePreview() {
photoPreview.innerHTML = '';
uploadedFiles.forEach((file, index) => {
const reader = new FileReader();
reader.onload = (e) => {
const previewItem = document.createElement('div');
previewItem.classList.add('preview-item');
const img = document.createElement('img');
img.src = e.target.result;
previewItem.appendChild(img);
const removeBtn = document.createElement('button');
removeBtn.classList.add('remove-img-btn');
removeBtn.innerHTML = '&times;';
removeBtn.addEventListener('click', () => {
uploadedFiles.splice(index, 1);
updatePreview();
});
previewItem.appendChild(removeBtn);
photoPreview.appendChild(previewItem);
};
reader.readAsDataURL(file);
});
}
// --- Copy to Clipboard ---
const copyBtn = document.getElementById('copy-btn');
if(copyBtn) {
copyBtn.addEventListener('click', () => {
const title = document.getElementById('result-title')?.innerText || '';
const shortDesc = document.getElementById('result-short-desc')?.innerText || '';
const desc = document.getElementById('result-desc')?.innerText || '';
const measurements = document.getElementById('result-measurements')?.innerText || '';
const hashtags = document.getElementById('result-hashtags')?.innerText || '';
const fullText = `
${title}
${shortDesc}
${desc}
Measurements: ${measurements}
${hashtags}
`;
navigator.clipboard.writeText(fullText.trim()).then(() => {
const originalText = copyBtn.innerHTML;
copyBtn.innerHTML = 'Copied!';
setTimeout(() => {
copyBtn.innerHTML = originalText;
}, 2000);
}).catch(err => {
console.error('Failed to copy: ', err);
});
});
}
});