|
|
document.addEventListener("alpine:init", function () { |
|
|
Alpine.store('generatedImage', ''); |
|
|
Alpine.store('busy', false); |
|
|
Alpine.store('prompt', ''); |
|
|
|
|
|
Alpine.effect('busy', function () { |
|
|
return { |
|
|
loading: false, |
|
|
run(){ |
|
|
this.id = window.setInterval(() => { |
|
|
this.loading = !this.loading; |
|
|
this.forceUpdate(); |
|
|
}, 1000); |
|
|
} |
|
|
}; |
|
|
}); |
|
|
|
|
|
Alpine.data('diffusion', { |
|
|
generateImage() { |
|
|
console.log('Generating image...'); |
|
|
const prompt = document.getElementById('prompt').value; |
|
|
if (prompt.trim() === '' || prompt.indexOf('{') === 0) { |
|
|
return; |
|
|
} |
|
|
Alpine.store('busy', true); |
|
|
setTimeout(async () => { |
|
|
const result = await fetch('/api/generate-image', { |
|
|
method: 'POST', |
|
|
headers: { |
|
|
'Content-Type': 'application/json' |
|
|
}, |
|
|
body: JSON.stringify({ |
|
|
prompt: prompt |
|
|
}) |
|
|
}); |
|
|
const data = await result.json(); |
|
|
Alpine.store('busy', false); |
|
|
Alpine.store('generatedImage', data.url); |
|
|
}, 2000); |
|
|
}, |
|
|
onSubmit(event) { |
|
|
event.preventDefault(); |
|
|
this.generateImage(); |
|
|
} |
|
|
}); |
|
|
}); |
|
|
|
|
|
const app = new App(); |
|
|
|
|
|
app.use(AppProviders); |
|
|
|
|
|
app.use('/api/generate-image', async (request) => { |
|
|
const {prompt} = request.payload(); |
|
|
|
|
|
|
|
|
|
|
|
const imageUrl = `https://dummyimage.com/600x400/000/fff&text=prompt=${encodeURIComponent(prompt)}`; |
|
|
return { |
|
|
status: 200, |
|
|
headers: { |
|
|
'Content-Type': 'application/json' |
|
|
}, |
|
|
body: { |
|
|
url: imageUrl |
|
|
} |
|
|
}; |
|
|
}); |
|
|
|
|
|
app.run(); |