blur-admin/src/app/pages/dashboard/weather/WeatherCtrl.js

144 lines
4.3 KiB
JavaScript

/**
* @author v.lugovksy
* created on 16.12.2015
*/
(function () {
'use strict';
angular.module('BlurAdmin.pages.dashboard')
.controller('WeatherCtrl', WeatherCtrl);
/** @ngInject */
function WeatherCtrl($scope, $http, $timeout, $element) {
var url = 'http://api.openweathermap.org/data/2.5/forecast';
var method = 'GET';
var key = '2de143494c0b295cca9337e1e96b00e0';
var middleOfTheDay = 15;
$scope.units = 'metric';
$scope.weatherIcons = {
'01d': 'ion-ios-sunny-outline',
'02d': 'ion-ios-partlysunny-outline',
'03d': 'ion-ios-cloud-outline',
'04d': 'ion-ios-cloud',
'09d': 'ion-ios-rainy',
'10d': 'ion-ios-rainy-outline',
'11d': 'ion-ios-thunderstorm-outline',
'13d': 'ion-ios-snowy',
'50d': 'ion-ios-cloudy-outline',
'01n': 'ion-ios-cloudy-night-outline',
'02n': 'ion-ios-cloudy-night',
'03n': 'ion-ios-cloud-outline',
'04n': 'ion-ios-cloud',
'09n': 'ion-ios-rainy',
'10n': 'ion-ios-rainy-outline',
'11n': 'ion-ios-thunderstorm',
'13n': 'ion-ios-snowy',
'50n': 'ion-ios-cloudy-outline'
};
$scope.weather = {};
$scope.switchUnits = function (name) {
$scope.units = name;
$scope.updateWeather();
};
$scope.switchDay = function (day) {
$scope.weather.current = day;
makeChart($scope.weather.days[$scope.weather.current].timeTemp)
};
$scope.updateWeather = function () {
$http({
method: method, url: url, params: {
appid: key,
lat: $scope.geoData.geoplugin_latitude,
lon: $scope.geoData.geoplugin_longitude,
units: $scope.units
}
}).then(function success(response) {
saveWeatherData(response.data);
makeChart($scope.weather.days[$scope.weather.current].timeTemp)
}, function error() {
console.log("WEATHER FAILED")
});
};
function updateGeoData() {
$http.jsonp('http://www.geoplugin.net/json.gp?jsoncallback=JSON_CALLBACK').then(function success(response) {
$scope.geoData = response.data;
$scope.updateWeather();
}, function error() {
console.log("GEO FAILED")
});
}
function makeChart(data) {
AmCharts.makeChart('tempChart', {
type: 'serial',
theme: 'blur',
handDrawn: true,
categoryField: 'time',
dataProvider: data,
valueAxes: [
{
axisAlpha: 0.3,
gridAlpha: 0
}
],
graphs: [
{
bullet: 'square',
fillAlphas: 0.3,
fillColorsField: 'lineColor',
legendValueText: '[[value]]',
lineColorField: 'lineColor',
title: 'Temp',
valueField: 'temp'
}
],
categoryAxis: {
gridAlpha: 0,
axisAlpha: 0.3
}
}).write('tempChart');
}
function saveWeatherData(data) {
var firstItem = data.list[0];
var weather = {
days: [{
date: new Date(),
timeTemp: [],
main: firstItem.weather[0].main,
description: firstItem.weather[0].description,
icon: firstItem.weather[0].icon,
temp: firstItem.main.temp
}], current: 0
};
data.list.forEach(function (item, i) {
var itemDate = new Date(item.dt_txt);
if (itemDate.getDate() !== weather.days[weather.days.length - 1].date.getDate()) {
weather.days.push({date: itemDate, timeTemp: []});
}
var lastItem = weather.days[weather.days.length - 1];
lastItem.timeTemp.push({
time: itemDate.getHours(),
temp: item.main.temp
});
if ((weather.days.length > 1 && itemDate.getHours() == middleOfTheDay) || i == data.list.length - 1) {
lastItem.main = item.weather[0].main;
lastItem.description = item.weather[0].description;
lastItem.icon = item.weather[0].icon;
lastItem.temp = item.main.temp;
lastItem.date.setHours(i == data.list.length - 1 ? 0 : middleOfTheDay);
lastItem.date.setMinutes(0);
}
});
console.log(weather.days[weather.current].date);
weather.days = weather.days.slice(0, $element.attr('forecast') || 5);
$scope.weather = weather;
}
updateGeoData();
}
})();