HTMLify
index.js
Views: 17 | Author: cody
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 | const userTab = document.querySelector("[data-userWeather]"); const searchTab = document.querySelector("[data-searchWeather]"); const userContainer = document.querySelector(".weather-container"); const grantAccessContainer = document.querySelector(".grant-location-container"); const searchForm = document.querySelector("[data-searchForm]"); const loadingScreen = document.querySelector(".loading-container"); const userInfoContainer = document.querySelector(".user-info-container"); //initially vairables need???? let oldTab = userTab; const API_KEY = "d1845658f92b31c64bd94f06f7188c9c"; oldTab.classList.add("current-tab"); getfromSessionStorage(); function switchTab(newTab) { if(newTab != oldTab) { oldTab.classList.remove("current-tab"); oldTab = newTab; oldTab.classList.add("current-tab"); if(!searchForm.classList.contains("active")) { //kya search form wala container is invisible, if yes then make it visible userInfoContainer.classList.remove("active"); grantAccessContainer.classList.remove("active"); searchForm.classList.add("active"); } else { //main pehle search wale tab pr tha, ab your weather tab visible karna h searchForm.classList.remove("active"); userInfoContainer.classList.remove("active"); //ab main your weather tab me aagya hu, toh weather bhi display karna poadega, so let's check local storage first //for coordinates, if we haved saved them there. getfromSessionStorage(); } } } userTab.addEventListener("click", () => { //pass clicked tab as input paramter switchTab(userTab); }); searchTab.addEventListener("click", () => { //pass clicked tab as input paramter switchTab(searchTab); }); //check if cordinates are already present in session storage function getfromSessionStorage() { const localCoordinates = sessionStorage.getItem("user-coordinates"); if(!localCoordinates) { //agar local coordinates nahi mile grantAccessContainer.classList.add("active"); } else { const coordinates = JSON.parse(localCoordinates); fetchUserWeatherInfo(coordinates); } } async function fetchUserWeatherInfo(coordinates) { const {lat, lon} = coordinates; // make grantcontainer invisible grantAccessContainer.classList.remove("active"); //make loader visible loadingScreen.classList.add("active"); //API CALL try { const response = await fetch( `https://api.openweathermap.org/data/2.5/weather?lat=${lat}&lon=${lon}&appid=${API_KEY}&units=metric` ); const data = await response.json(); loadingScreen.classList.remove("active"); userInfoContainer.classList.add("active"); renderWeatherInfo(data); } catch(err) { loadingScreen.classList.remove("active"); //HW } } function renderWeatherInfo(weatherInfo) { //fistly, we have to fethc the elements const cityName = document.querySelector("[data-cityName]"); const countryIcon = document.querySelector("[data-countryIcon]"); const desc = document.querySelector("[data-weatherDesc]"); const weatherIcon = document.querySelector("[data-weatherIcon]"); const temp = document.querySelector("[data-temp]"); const windspeed = document.querySelector("[data-windspeed]"); const humidity = document.querySelector("[data-humidity]"); const cloudiness = document.querySelector("[data-cloudiness]"); console.log(weatherInfo); //fetch values from weatherINfo object and put it UI elements cityName.innerText = weatherInfo?.name; countryIcon.src = `https://flagcdn.com/144x108/${weatherInfo?.sys?.country.toLowerCase()}.png`; desc.innerText = weatherInfo?.weather?.[0]?.description; weatherIcon.src = `http://openweathermap.org/img/w/${weatherInfo?.weather?.[0]?.icon}.png`; temp.innerText = `${weatherInfo?.main?.temp} °C`; windspeed.innerText = `${weatherInfo?.wind?.speed} m/s`; humidity.innerText = `${weatherInfo?.main?.humidity}%`; cloudiness.innerText = `${weatherInfo?.clouds?.all}%`; } function getLocation() { if(navigator.geolocation) { navigator.geolocation.getCurrentPosition(showPosition); } else { //HW - show an alert for no gelolocation support available } } function showPosition(position) { const userCoordinates = { lat: position.coords.latitude, lon: position.coords.longitude, } sessionStorage.setItem("user-coordinates", JSON.stringify(userCoordinates)); fetchUserWeatherInfo(userCoordinates); } const grantAccessButton = document.querySelector("[data-grantAccess]"); grantAccessButton.addEventListener("click", getLocation); const searchInput = document.querySelector("[data-searchInput]"); searchForm.addEventListener("submit", (e) => { e.preventDefault(); let cityName = searchInput.value; if(cityName === "") return; else fetchSearchWeatherInfo(cityName); }) async function fetchSearchWeatherInfo(city) { loadingScreen.classList.add("active"); userInfoContainer.classList.remove("active"); grantAccessContainer.classList.remove("active"); try { const response = await fetch( `https://api.openweathermap.org/data/2.5/weather?q=${city}&appid=${API_KEY}&units=metric` ); const data = await response.json(); loadingScreen.classList.remove("active"); userInfoContainer.classList.add("active"); renderWeatherInfo(data); } catch(err) { //hW } } |