Hacked Together simple desktop weather app
This commit is contained in:
commit
0d4873cc8c
65
index.html
Normal file
65
index.html
Normal file
@ -0,0 +1,65 @@
|
||||
<!DOCTYPE html>
|
||||
<head>
|
||||
<title>WeatherXi</title>
|
||||
<link rel="stylesheet" href="style.css">
|
||||
<!--Angular-->
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.js"></script>
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.7.8/angular.min.js"></script>
|
||||
<!--END Angular-->
|
||||
<script>
|
||||
var lat = 43.2099824;
|
||||
var lon = -79.9958742;
|
||||
//This needs to be dynamic somehow
|
||||
</script>
|
||||
</head>
|
||||
<body ng-app="mainPage" ng-controller="body">
|
||||
<div class="container">
|
||||
<div class="weather-side">
|
||||
<div class="weather-gradient"></div>
|
||||
<div class="date-container">
|
||||
<h2 class="date-dayname">Today</h2><span class="date-day">DATE</span><span class="location">Ancaster</span>
|
||||
</div>
|
||||
<div class="weather-container"><i class="weather-icon" data-feather="sun"></i>
|
||||
<h1 class="weather-temp">{{weather.current.temp}}°C</h1>
|
||||
<h3 class="weather-desc">{{weather.current.weather[0].main}}</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-side">
|
||||
<div class="today-info-container">
|
||||
<div class="today-info">
|
||||
<div class="precipitation"> <span class="title">PRECIPITATION</span><span class="value">{{weather.minutely[0].precipitation}} %</span>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
<div class="humidity"> <span class="title">HUMIDITY</span><span class="value">{{weather.current.humidity}} %</span>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
<div class="wind"> <span class="title">WIND</span><span class="value">{{weather.current.wind_speed}} km/h</span>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
<div class="wind"> <span class="title">DIRECTION</span><span class="value">{{weather.current.wind_deg}} °</span>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="week-container">
|
||||
<ul class="week-list">
|
||||
<li></i><span class="day-name">+1h</span><span class="day-temp">{{weather.hourly[0].temp}}°C</span></li>
|
||||
<li></i><span class="day-name">+2h</span><span class="day-temp">{{weather.hourly[1].temp}}°C</span></li>
|
||||
<li></i><span class="day-name">+4h</span><span class="day-temp">{{weather.hourly[3].temp}}°C</span></li>
|
||||
<li></i><span class="day-name">+8h</span><span class="day-temp">{{weather.hourly[7].temp}}°C</span></li>
|
||||
<div class="clear"></div>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var app = angular.module('mainPage', []);
|
||||
app.controller('body', function($scope, $http) {
|
||||
//Some sort of async function so location is got before the script called
|
||||
$http.get("https://api.openweathermap.org/data/2.5/onecall?lat=" + lat + "&lon=" + lon + "&units=metric&appid=5292f0a17ecbe4b523fe0609ed2c556f").then(function (response) {
|
||||
$scope.weather = response.data;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
1829
sample.json
Normal file
1829
sample.json
Normal file
File diff suppressed because it is too large
Load Diff
243
style.css
Normal file
243
style.css
Normal file
@ -0,0 +1,243 @@
|
||||
@import url('https://fonts.googleapis.com/css?family=Montserrat:400,700,900&display=swap');
|
||||
|
||||
:root {
|
||||
--gradient: linear-gradient( 135deg, #72EDF2 10%, #5151E5 100%);
|
||||
}
|
||||
|
||||
* {
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
line-height: 1.25em;
|
||||
}
|
||||
|
||||
.clear {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
font-family: 'Montserrat', sans-serif;
|
||||
background-color: #343d4b;
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-webkit-box-align: center;
|
||||
-ms-flex-align: center;
|
||||
align-items: center;
|
||||
-webkit-box-pack: center;
|
||||
-ms-flex-pack: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.container {
|
||||
border-radius: 25px;
|
||||
-webkit-box-shadow: 0 0 70px -10px rgba(0, 0, 0, 0.2);
|
||||
box-shadow: 0 0 70px -10px rgba(0, 0, 0, 0.2);
|
||||
background-color: #222831;
|
||||
color: #ffffff;
|
||||
height: 400px;
|
||||
}
|
||||
|
||||
.weather-side {
|
||||
position: relative;
|
||||
height: 100%;
|
||||
border-radius: 25px;
|
||||
background-image: url("https://images.unsplash.com/photo-1559963110-71b394e7494d?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=675&q=80");
|
||||
width: 300px;
|
||||
-webkit-box-shadow: 0 0 20px -10px rgba(0, 0, 0, 0.2);
|
||||
box-shadow: 0 0 20px -10px rgba(0, 0, 0, 0.2);
|
||||
-webkit-transition: -webkit-transform 300ms ease;
|
||||
transition: -webkit-transform 300ms ease;
|
||||
-o-transition: transform 300ms ease;
|
||||
transition: transform 300ms ease;
|
||||
transition: transform 300ms ease, -webkit-transform 300ms ease;
|
||||
-webkit-transform: translateZ(0) scale(1.02) perspective(1000px);
|
||||
transform: translateZ(0) scale(1.02) perspective(1000px);
|
||||
float: left;
|
||||
}
|
||||
|
||||
.weather-side:hover {
|
||||
-webkit-transform: scale(1.1) perspective(1500px) rotateY(10deg);
|
||||
transform: scale(1.1) perspective(1500px) rotateY(10deg);
|
||||
}
|
||||
|
||||
.weather-gradient {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
top: 0;
|
||||
left: 0;
|
||||
background-image: var(--gradient);
|
||||
border-radius: 25px;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
.date-container {
|
||||
position: absolute;
|
||||
top: 25px;
|
||||
left: 25px;
|
||||
}
|
||||
|
||||
.date-dayname {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.date-day {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.location {
|
||||
display: inline-block;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.location-icon {
|
||||
display: inline-block;
|
||||
height: 0.8em;
|
||||
width: auto;
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
.weather-container {
|
||||
position: absolute;
|
||||
bottom: 25px;
|
||||
left: 25px;
|
||||
}
|
||||
|
||||
.weather-icon.feather {
|
||||
height: 60px;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.weather-temp {
|
||||
margin: 0;
|
||||
font-weight: 700;
|
||||
font-size: 4em;
|
||||
}
|
||||
|
||||
.weather-desc {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.info-side {
|
||||
position: relative;
|
||||
float: left;
|
||||
height: 100%;
|
||||
padding-top: 25px;
|
||||
}
|
||||
|
||||
.today-info {
|
||||
padding: 15px;
|
||||
margin: 0 25px 25px 25px;
|
||||
/* box-shadow: 0 0 50px -5px rgba(0, 0, 0, 0.25); */
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
.today-info>div:not(:last-child) {
|
||||
margin: 0 0 10px 0;
|
||||
}
|
||||
|
||||
.today-info>div .title {
|
||||
float: left;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.today-info>div .value {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.week-list {
|
||||
list-style-type: none;
|
||||
padding: 0;
|
||||
margin: 10px 35px;
|
||||
-webkit-box-shadow: 0 0 50px -5px rgba(0, 0, 0, 0.25);
|
||||
box-shadow: 0 0 50px -5px rgba(0, 0, 0, 0.25);
|
||||
border-radius: 10px;
|
||||
background: #
|
||||
}
|
||||
|
||||
.week-list>li {
|
||||
float: left;
|
||||
padding: 15px;
|
||||
cursor: pointer;
|
||||
-webkit-transition: 200ms ease;
|
||||
-o-transition: 200ms ease;
|
||||
transition: 200ms ease;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
.week-list>li:hover {
|
||||
-webkit-transform: scale(1.1);
|
||||
-ms-transform: scale(1.1);
|
||||
transform: scale(1.1);
|
||||
background: #fff;
|
||||
color: #222831;
|
||||
-webkit-box-shadow: 0 0 40px -5px rgba(0, 0, 0, 0.2);
|
||||
box-shadow: 0 0 40px -5px rgba(0, 0, 0, 0.2)
|
||||
}
|
||||
|
||||
.week-list>li.active {
|
||||
background: #fff;
|
||||
color: #222831;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
.week-list>li .day-name {
|
||||
display: block;
|
||||
margin: 10px 0 0 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.week-list>li .day-icon {
|
||||
display: block;
|
||||
height: 30px;
|
||||
width: auto;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.week-list>li .day-temp {
|
||||
display: block;
|
||||
text-align: center;
|
||||
margin: 10px 0 0 0;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.location-container {
|
||||
padding: 25px 35px;
|
||||
}
|
||||
|
||||
.location-button {
|
||||
outline: none;
|
||||
width: 100%;
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
border: none;
|
||||
border-radius: 25px;
|
||||
padding: 10px;
|
||||
font-family: 'Montserrat', sans-serif;
|
||||
background-image: var(--gradient);
|
||||
color: #ffffff;
|
||||
font-weight: 700;
|
||||
-webkit-box-shadow: 0 0 30px -5px rgba(0, 0, 0, 0.25);
|
||||
box-shadow: 0 0 30px -5px rgba(0, 0, 0, 0.25);
|
||||
cursor: pointer;
|
||||
-webkit-transition: -webkit-transform 200ms ease;
|
||||
transition: -webkit-transform 200ms ease;
|
||||
-o-transition: transform 200ms ease;
|
||||
transition: transform 200ms ease;
|
||||
transition: transform 200ms ease, -webkit-transform 200ms ease;
|
||||
}
|
||||
|
||||
.location-button:hover {
|
||||
-webkit-transform: scale(0.95);
|
||||
-ms-transform: scale(0.95);
|
||||
transform: scale(0.95);
|
||||
}
|
||||
|
||||
.location-button .feather {
|
||||
height: 1em;
|
||||
width: auto;
|
||||
margin-right: 5px;
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user