Skip to content

Commit

Permalink
Deleted past commits
Browse files Browse the repository at this point in the history
  • Loading branch information
jomon joy committed Aug 10, 2024
0 parents commit 7f1d017
Show file tree
Hide file tree
Showing 11 changed files with 567 additions and 0 deletions.
50 changes: 50 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
## *Weather App*

<img src="https://github.com/Jomonh/Weather-App/blob/main/assets/preview.png" alt="Project Screenshot" width="500"/>

### 🔗 *Demo Site*
- Check out the live demo of this project: [Demo Site](https://Jomonh.github.io/Weather-App)

### *Key Features*
- Responsive
- Clean UI
- Location based weather
- search by city

### *Technologies Used*
- HTML
- CSS
- JavaScript
- Api used : <a href="https://openweathermap.org/">OpenWeatherMap.org<a>

## Getting Started

To get started with this project, you have two options:

### 1. *Clone the Repository*
- Use the following link to clone the repository to your local machine:

```bash
git clone https://github.com/Jomonh/Weather-App.git


- Once cloned, navigate to the project directory:

```bash
cd Weather-App
### 2. *Fork the Repository*
- If you prefer, you can directly *fork* this repository.
- Click the *Fork* button at the top-right of this page.
- After forking, clone the repository from your account:
```bash
git clone https://github.com/your-username/your-forked-repository.git


### 🌟 *Don’t Forget to Star!*
- If you find this project useful, please consider giving it a star ⭐.It helps others discover it too!

### *License*
- This project is licensed under the MIT License - see the [LICENSE](https://opensource.org/license/MIT) file for details.
Binary file added assets/cloud.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/humidity.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/loading.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/location.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/preview.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/search.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/wind.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
104 changes: 104 additions & 0 deletions index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>weather app</title>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Merriweather+Sans:wght@300;400;500;600;700&display=swap"
rel="stylesheet" />
<link rel="stylesheet" href="style.css">
</head>
<body>

<div class="wrapper">

<h1>Weather App</h1>

<div class="tab-container">
<p class="tab" data-userWeather>Your Weather</p>
<p class="tab" data-searchWeather>Search Weather</p>
</div>

<div class="weather-container">

<!-- grant location container-->
<div class="sub-container grant-location-container">
<img src="./assets/location.png" width="80" height="80" loading="lazy">
<p>Grant Location Access</p>
<p>Allow Access to get weather Information</p>
<button class="btn" data-grantAccess>Grant Access</button>
</div>

<!-- search form -> form-container-->
<form class="form-container" data-searchForm>
<input placeholder="Search for City..." data-searchInput>
<button class="btn" type="submit">
<img src="./assets/search.png" width="20" height="20" loading="lazy">
</button>
</form>

<!--- loading screen container -->
<div class="sub-container loading-container">
<img src="./assets/loading.gif" width="150" height="150">
<p>Loading</p>
</div>

<!-- show weather info -->
<div class="sub-container user-info-container">

<!--city name and Flag-->
<div class="name">
<p data-cityName></p>
<img data-countryIcon>
</div>

<!-- weather descriptuion-->
<p data-weatherDesc></p>
<!--weather Icon-->
<img data-weatherIcon>
<!--temperature-->
<p data-temp></p>

<!--3 cards - parameters-->
<div class="parameter-container">

<!--card 1-->
<div class="parameter">
<img src="./assets/wind.png" >
<p>windspeed</p>
<p data-windspeed></p>
</div>

<!--card 2-->
<div class="parameter">
<img src="./assets/humidity.png" >
<p>humidity</p>
<p data-humidity></p>
</div>

<!--card 3-->
<div class="parameter">
<img src="./assets/cloud.png" >
<p>Clouds</p>
<p data-cloudiness></p>
</div>

</div>


</div>



</div>


</div>


<script src="script.js"></script>
</body>
</html>
170 changes: 170 additions & 0 deletions script.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,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 = "720818d89500ff08044dcb0a47d5e6ef";
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
}
}
Loading

0 comments on commit 7f1d017

Please sign in to comment.