document.addEventListener('DOMContentLoaded',function(){// Add CSS styles to the documentconst style = document.createElement('style');
style.textContent =`@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300&display=swap');*{
margin:0;
padding:0;
box-sizing: border-box;
font-family:"Poppins", sans-serif;}
all{
background: black;}
body {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
min-height:100vh;
background:#151515;
color: white;}.container {
margin:20px;
text-align: center;
width:80%;
max-width:600px;}
h1 {
margin-bottom:0.5em;
color:#00fd0a;
text-shadow:2px2px4px rgba(0,253,10,0.5);}
h3 {
margin:1em0;
color:#ddd;}#selected-year,#rangeValue {
font-size:2em;
color:#00fd0a;
margin-bottom:1em;}.range {
width:100%;
height:25px;-webkit-appearance: none;
background:#333;
outline: none;
border-radius:15px;
overflow: hidden;
box-shadow: inset 005px rgba(0,0,0,1);
cursor: pointer;}.range::-webkit-slider-thumb {-webkit-appearance: none;
width:25px;
height:25px;
border-radius:50%;
background:#00fd0a;
border: none;
box-shadow:-407px00400px#00fd0a;
transition: transform 0.3s ease;}.range::-webkit-slider-thumb:hover {
transform: scale(1.2);}
input, button {
margin:10px;
padding:10px;
border-radius:5px;
border: none;
transition: background-color 0.3s ease;}
button {
background-color:#00fd0a;
cursor: pointer;
font-weight: bold;
box-shadow:04px8px rgba(0,253,10,0.3);}
button:hover {
background-color:#00db0a;}#api-key-container {
background-color:#222;
padding:15px;
border-radius:8px;
box-shadow:04px8px rgba(0,0,0,0.5);}#api-key {
width: calc(100%-130px);}#output {
min-height:150px;
display: flex;
justify-content: center;
align-items: center;
color:#aaa;
margin-bottom:0;/* Reduce the bottom margin */}.loading {
display: flex;
justify-content: center;
align-items: center;
margin-top:0px;}.loading div {
width:1em;
height:1em;
margin:0.2em;
background-color:#00fd0a;
border-radius:50%;
animation: bounce 0.6s infinite alternate;}.loading div:nth-child(2){
animation-delay:0.2s;}.loading div:nth-child(3){
animation-delay:0.4s;}@keyframes bounce {
to {
opacity:0.1;
transform: translate3d(0,-0.5em,0);}}/* Responsive Design */@media(max-width:768px){.container {
width:95%;}#api-key {
width: calc(100%-140px);}}`;
document.head.appendChild(style);// Inject the HTML structure into the body
document.body.innerHTML =`<div id="all"><h1>TimeMachine powered by DALLยทE</h1><div class="container" id="api-key-container"><h3>Enter API Key</h3><input type="text" id="api-key" placeholder="Enter your API Key..."><button id="set-api-key">Set API Key</button></div><div class="container"><h3>EnterYear and Location</h3><input class="range" id="year-slider" type="range" min="-2020" max="2020" step="10" value="0" oninput="updateYearSlider(this.value)" onchange="updateYearSlider(this.value)"><p><span id="selected-year">1 AD</span></p><input type="text" id="location-input" placeholder="Enter a location..."><button id="submit-prompt">GenerateImage</button></div><div class="container"><h3>Disclaimer</h3><p class="disclaimer">The images generated by AI are based on data models and may not be always historically or factually accurate.They are for illustrative purposes only and should not be used as a sole source of truth.</p><h3>GeneratedImage</h3><div id="output"></div><div class="loading" id="loading-animation" style="display:none;"><div></div><div></div><div></div></div></div></div>`;
let apiKey ='';// Function to set API key and hide the API key divfunction setApiKey(){
apiKey = document.querySelector("#api-key").value.trim();if(apiKey){
console.log("API Key set:", apiKey);
document.querySelector("#api-key-container").style.display ='none';}else{
alert("Please enter an API key.");}}// Function to display the year with BC/AD notation and update the sliderfunction updateYearSlider(value){const yearSpan = document.querySelector("#selected-year");
let year = parseInt(value);if(year <0){
yearSpan.textContent =`${Math.abs(year)} BC`;}elseif(year >0){
yearSpan.textContent =`${year} AD`;}else{
yearSpan.textContent =`1`;// Handling the year 0 as 1}}// Function to show the loading animationfunction showLoading(){
document.getElementById('loading-animation').style.display ='flex';}// Function to hide the loading animationfunction hideLoading(){
document.getElementById('loading-animation').style.display ='none';}// Function to generate image based on selected year and locationfunction generateImage(year, location){
showLoading();// Show loading animationconst adjustedYear = year <0?`${Math.abs(year)} BC`:`${year} AD`;const prompt =`Generate a photorealistic image of ${location} in the decade starting in the year ${adjustedYear}.`;const outputDiv = document.querySelector("#output");
outputDiv.innerHTML ='';// Making the API request
fetch('https://api.openai.com/v1/images/generations',{
method:'POST',
headers:{'Content-Type':'application/json','Authorization':`Bearer ${apiKey}`},
body: JSON.stringify({
model:"dall-e-3",
prompt: prompt,
n:1,
size:"1024x1024"})}).then(response =>{if(!response.ok){thrownewError('Network response was not ok: '+ response.statusText);}return response.json();}).then(data =>{if(data && data.data && data.data.length >0){const imageUrl = data.data[0].url;
outputDiv.innerHTML =`<img src="${imageUrl}" alt="Generated Image" style="max-width:100%; height:auto;"/>`;}else{
outputDiv.textContent ="No image generated.";}
hideLoading();// Hide loading animation}).catch(error =>{
console.error("Error while generating image:", error);
outputDiv.textContent ="Error: "+ error.message;
hideLoading();// Hide loading animation});}// Event listeners
document.querySelector("#set-api-key").addEventListener('click', setApiKey);
document.querySelector("#submit-prompt").addEventListener('click',function(){const year = parseInt(document.querySelector("#year-slider").value);const location = document.querySelector("#location-input").value.trim();if(apiKey && location){
generateImage(year, location);}else{
alert("Please set the API key and enter a location.");}});// Update displayed year when the slider is movedconst yearSlider = document.querySelector("#year-slider");
yearSlider.addEventListener('input',function(){
updateYearSlider(this.value);});});