// Image to Image Generator Functionality
document.addEventListener('DOMContentLoaded', function() {
// Initialize image upload functionality
const dropArea = document.getElementById('drop-area');
const fileInput = document.getElementById('file-input');
const uploadBtn = document.getElementById('upload-btn');
const previewContainer = document.getElementById('preview-container');
const previewImage = document.getElementById('preview-image');
const uploadContainer = document.getElementById('upload-container');
const removeImageBtn = document.getElementById('remove-image');
const generateBtn = document.getElementById('generate-btn');
const strengthSlider = document.getElementById('strength-slider');
const strengthValue = document.getElementById('strength-value');
const resultsGrid = document.getElementById('results-grid');
const generateText = document.getElementById('generate-text');
const loadingSpinner = document.getElementById('loading-spinner');
// Prevent default drag behaviors
['dragenter', 'dragover', 'dragleave', 'drop'].forEach(eventName => {
dropArea.addEventListener(eventName, preventDefaults, false);
});
function preventDefaults(e) {
e.preventDefault();
e.stopPropagation();
}
// Highlight drop area when item is dragged over it
['dragenter', 'dragover'].forEach(eventName => {
dropArea.addEventListener(eventName, highlight, false);
});
['dragleave', 'drop'].forEach(eventName => {
dropArea.addEventListener(eventName, unhighlight, false);
});
function highlight() {
dropArea.classList.add('border-secondary-pink', 'bg-tertiary-black');
}
function unhighlight() {
dropArea.classList.remove('border-secondary-pink', 'bg-tertiary-black');
}
// Handle dropped files
dropArea.addEventListener('drop', handleDrop, false);
fileInput.addEventListener('change', handleFiles, false);
uploadBtn.addEventListener('click', () => fileInput.click());
function handleDrop(e) {
const dt = e.dataTransfer;
const files = dt.files;
handleFiles({ target: { files } });
}
function handleFiles(e) {
const files = e.target.files;
if (files.length) {
const file = files[0];
if (file.type.match('image.*')) {
const reader = new FileReader();
reader.onload = function(e) {
previewImage.src = e.target.result;
uploadContainer.classList.add('hidden');
previewContainer.classList.remove('hidden');
};
reader.readAsDataURL(file);
}
}
}
// Remove image
removeImageBtn.addEventListener('click', () => {
previewImage.src = '';
fileInput.value = '';
uploadContainer.classList.remove('hidden');
previewContainer.classList.add('hidden');
});
// Update strength value display
strengthSlider.addEventListener('input', () => {
strengthValue.textContent = strengthSlider.value;
});
// Generate variations
generateBtn.addEventListener('click', async () => {
if (!previewImage.src || previewImage.src === '') {
alert('Please upload an image first');
return;
}
generateBtn.disabled = true;
generateText.textContent = 'Generating...';
loadingSpinner.classList.remove('hidden');
try {
// In a real implementation, you would call an AI API here
// For demo purposes, we'll simulate API call with setTimeout
setTimeout(() => {
// Mock generated images
const mockImages = [
'http://static.photos/abstract/640x360/1',
'http://static.photos/abstract/640x360/2',
'http://static.photos/abstract/640x360/3',
'http://static.photos/abstract/640x360/4'
];
// Clear previous results
resultsGrid.innerHTML = '';
// Add new results
mockImages.forEach(imgSrc => {
const imgContainer = document.createElement('div');
imgContainer.className = 'bg-secondary-black aspect-square rounded-lg overflow-hidden border border-tertiary-black';
imgContainer.innerHTML = `
${post.prompt}
${post.user}
${post.timestamp}
Loading community creations...