Advertisement
Pijomir

Untitled

Feb 29th, 2024
641
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function attachEvents() {
  2.     const locationElementRef = document.getElementById('location');
  3.     const forecastElementRef = document.getElementById('forecast');
  4.     const currentElementRef = document.getElementById('current');
  5.     const upcomingElementRef = document.getElementById('upcoming');
  6.     const submitBtnElementRef = document.getElementById('submit');
  7.     submitBtnElementRef.addEventListener('click', onsubmitBtnClick);
  8.  
  9.     const htmlEntities = {
  10.         Sunny: "☀",
  11.         "Partly sunny": "⛅",
  12.         Overcast: "☁",
  13.         Rain: "☔",
  14.         Degrees: "°"
  15.     };
  16.  
  17.     async function onsubmitBtnClick() {
  18.         try {
  19.             const url = 'http://localhost:3030/jsonstore/forecaster/locations';
  20.             let response = await fetch(url);
  21.             let data = await response.json();
  22.             let { code } = data.find(el => el.name === locationElementRef.value);
  23.             forecastElementRef.style.display = 'block';
  24.             await getCurrentDayForecast(code);
  25.             await getUpcomingDaysForecast(code);
  26.         } catch {
  27.             forecastElementRef.style.display = 'block';
  28.             forecastElementRef.textContent = 'Error';
  29.         }
  30.     }
  31.  
  32.     async function getCurrentDayForecast(code) {
  33.         try {
  34.             let currentDayUrl = `http://localhost:3030/jsonstore/forecaster/today/${code}`;
  35.             let response = await fetch(currentDayUrl);
  36.             let data = await response.json();
  37.  
  38.             currentElementRef.innerHTML = `<div class="label">Current conditions</div>
  39.             <div class="forecasts">
  40.             <span class="condition symbol">${htmlEntities[data.forecast.condition]}</span>
  41.             <span class="condition">
  42.              <span class="forecast-data">${data.name}</span>
  43.              <span class="forecast-data">${data.forecast.low}${htmlEntities.Degrees}/${data.forecast.high}${htmlEntities.Degrees}</span>
  44.              <span class="forecast-data">${data.forecast.condition}</span>
  45.             </span>
  46.             </div>`
  47.         } catch {
  48.             forecastElementRef.style.display = 'block';
  49.             forecastElementRef.textContent = 'Error';
  50.         }
  51.     }
  52.  
  53.     async function getUpcomingDaysForecast(code) {
  54.         try {
  55.             let url = `http://localhost:3030/jsonstore/forecaster/upcoming/${code}`;
  56.             let response = await fetch(url);
  57.             let data = await response.json();
  58.  
  59.             upcomingElementRef.innerHTML = `<div class="label">Three-day forecast</div>
  60.             <div class="forecast-info">
  61.             <span class="upcoming">
  62.              <span class="symbol">${htmlEntities[data.forecast[0].condition]}</span>
  63.              <span class="forecast-data">${data.forecast[0].low}${htmlEntities.Degrees}/${data.forecast[0].high}${htmlEntities.Degrees}</span>
  64.              <span class="forecast-data">${data.forecast[0].condition}</span>
  65.             </span>
  66.             <span class="upcoming">
  67.              <span class="symbol">${htmlEntities[data.forecast[1].condition]}</span>
  68.              <span class="forecast-data">${data.forecast[1].low}${htmlEntities.Degrees}/${data.forecast[1].high}${htmlEntities.Degrees}</span>
  69.              <span class="forecast-data">${data.forecast[1].condition}</span>
  70.            </span>
  71.            <span class="upcoming">
  72.             <span class="symbol">${htmlEntities[data.forecast[2].condition]}</span>
  73.             <span class="forecast-data">${data.forecast[2].low}${htmlEntities.Degrees}/${data.forecast[2].high}${htmlEntities.Degrees}</span>
  74.             <span class="forecast-data">${data.forecast[2].condition}</span>
  75.           </span>
  76.           </div>`
  77.         } catch {
  78.             forecastElementRef.style.display = 'block';
  79.             forecastElementRef.textContent = 'Error';
  80.         }
  81.     }
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement