-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathWeatherManager.js
More file actions
80 lines (71 loc) · 2.61 KB
/
WeatherManager.js
File metadata and controls
80 lines (71 loc) · 2.61 KB
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
export class WeatherManager {
constructor() {
this.weather = {};
this.latitude = 0;
this.longitude = 0;
}
isGeolocationEnabled() {
if (window.navigator.geolocation) {
return true;
} else {
return false;
}
}
getUserLocation() {
if (this.isGeolocationEnabled()) {
window.navigator.geolocation.getCurrentPosition(this.getUserLocationSuccess, this.getUserLocationError);
}
}
getUserLocationSuccess(position) {
this.setLatitudeAndLongitude(position.coords.latitude, position.coords.longitude);
}
getUserLocationError() {
document.getElementById("weather").innerHTML = "geolocation not supported by browser";
}
async getWeather() {
const url = `https://api.openweathermap.org/data/2.5/weather?lat=${this.latitude}&lon=${this.longitude}&appid=b02825401afe8e67744e41e265592144`;
const request = await fetch(url);
const data = await request.json();
this.weather = data;
return this.weather;
}
convertKelvinToFahrenheit(kelvin) {
return Math.ceil((kelvin * 9) / 5 - 459.67);
}
setLatitudeAndLongitude(latitude, longitude) {
this.latitude = latitude;
this.longitude = longitude;
}
appendGeolocationErrorToDOM(element) {
element.innerHTML = "err: browser blocked geolocation api";
}
appendGeolocationSuccessToDOM(element) {
element.innerHTML = `
<div class="weather">
<h2 id="weather__city">${this.weather.name}, ${this.weather.sys.country}</h2>
<p id="weather__condition">${this.weather.weather[0].description}</p>
<img id="weather__icon" src="/assets/weather-icons/${this.weather.weather[0].icon}.svg">
<div id="weather__temperature">
<p id="weather__current">${this.convertKelvinToFahrenheit(this.weather.main.temp)}</p>
<p id="weather__range">${this.convertKelvinToFahrenheit(this.weather.main.temp_min)} - ${this.convertKelvinToFahrenheit(this.weather.main.temp_max)}</p>
</div>
<div class="weather__row">
<p class="weather__label">feels like</p>
<p class="weather__data">${this.convertKelvinToFahrenheit(this.weather.main.feels_like)}</p>
</div>
<div class="weather__row">
<p class="weather__label">wind</p>
<p class="weather__data">${this.weather.main.speed} mph</p>
</div>
<div class="weather__row">
<p class="weather__label">humidity</p>
<p class="weather__data">${this.weather.main.humidity}%</p>
</div>
<div class="weather__row">
<p class="weather__label">cloudiness</p>
<p class="weather__data">${this.weather.clouds.all}%</p>
</div>
</div>
`;
}
}