'use strict';
if(typeof SimpleWeather.locale!=='undefined'){
moment.defineLocale('en-SimpleWeather', SimpleWeather.locale);
moment.locale('en-SimpleWeather');
}
Vue.filter('momentjs', function (date, format, convert){
var offset=SimpleWeather.locale.gmtOffset;
var sign=offset.toString().indexOf('-')===0 ? '-':'+';
var hours=parseInt(offset / 3600);
hours=hours < 10 ? '0' + hours:hours;
var minutes=offset % 3600;
minutes=minutes < 10 ? '0' + minutes:minutes;
var utc=sign + hours + ':' + minutes;
moment.defineLocale('en-SimpleWeather', SimpleWeather.locale);
moment.locale('en-SimpleWeather');
return convert!==false ? moment.unix(date).utcOffset(utc).format(format):moment.unix(date).format(format);
});
var simple_weather_apps=[];
Array.prototype.forEach.call(document.querySelectorAll('div.simple-weather--vue'), function (el, index){
var id=el.getAttribute('id').replace('simple-weather--', '');
simple_weather_apps[index]=new Vue({
el: '#simple-weather--' + id,
mounted: function (){
var vm=this;
var classes=['simple-weather--vue-mounted'];
if(typeof vm.atts.text_align!=='undefined'&&vm.atts.text_align!==null&&vm.atts.text_align.length > 0){
classes.push('simple-weather--text-' + vm.atts.text_align);
}
if(typeof vm.atts.style!=='undefined'&&vm.atts.style!==null&&vm.atts.style.length > 0){
classes.push('simple-weather--view-' + vm.atts.style);
}
if(typeof vm.atts.display!=='undefined'&&vm.atts.display==='block'){
classes.push('simple-weather--display-block');
}
if(typeof vm.show_date!=='undefined'&&!vm.filter_var(vm.atts.show_date)){
classes.push('simple-weather--hidden-date');
}
vm.$el.className +=' ' + classes.join(' ');
if(typeof vm.feed!=='undefined'&&Object.keys(vm.feed).length===0&&vm.feed.constructor===Object){
vm.get_weather();
}},
data: function (){
var vm=this;
var error='&nbsp;';
var atts=typeof window['SimpleWeatherAtts']!=='undefined'&&typeof window['SimpleWeatherAtts'][id]!=='undefined' ? window['SimpleWeatherAtts'][id]:{};
var feed={};
var feed_current_weather={};
return {
atts: atts,
feed: feed,
feed_current_weather,
visible: [],
error: error
}},
filters: {
temp: function (temp){
return typeof temp!=='undefined' ? parseInt(temp):'';
}},
computed: {
units: function (){
return typeof this.atts.units!=='undefined'&&this.atts.units==='imperial' ? 'F':'C';
},
units_wind: function (){
return typeof this.atts.units!=='undefined'&&this.atts.units==='imperial' ? 'mph':'kph';
},
onecall: function (){
return false
},
current_weather: function (){
var vm=this;
var out={};
var current=vm.feed_current_weather
console.log('current', vm.feed_current_weather)
if(current?.dt) out.dt=(current.dt / 1);
if(current?.weather?.length > 0&&current?.weather[0]?.id){
out.id=current.weather[0].id;
out.desc=current.weather[0].description;
}
if(current?.main?.temp){
out.temp=current?.main?.temp;
out.humidity=Math.ceil(current?.main?.humidity);
}
if(current?.clouds?.all) out.clouds=Math.ceil(current?.clouds?.all);
if(current?.wind?.deg&&current?.wind?.speed){
out.wind={};
out.wind.deg=vm.getWindDirection(current?.wind?.deg);
out.wind.speed=vm.units==='metric' ? current?.wind?.speed * 3.6:current?.wind?.speed * 3.6 / 1.609344;
out.wind.speed=Math.ceil(out.wind.speed);
}
out.name=typeof current!=='undefined'&&typeof current?.name!=='undefined' ? current?.name:'';
return out;
},
weather_feed: function (){
var vm=this;
var out=[];
var dt=moment().utcOffset(this.get_utc_offset());
var days={};
var feed=vm.feed;
if(feed.length > 0){
feed.forEach(function(val, index){
console.log('val', val)
val.dt_txt=moment.unix(val.dt).utcOffset(vm.get_utc_offset()).format('DD-MM-YYYY');
var dayname=val.dt_txt.split(' ');
dayname=dayname[0];
var add=val.temp
if(typeof days[dayname]!=='undefined'){
days[dayname].push(add);
}else{
days[dayname]=[ add ];
}});
feed.forEach(function(val, index){
var dayname=val.dt_txt.split(' ');
dayname=dayname[0]
if(! dt.isSame(val.dt * 1000, 'day') ){
const all_day_mins=feed?.filter(v=> v.dt_txt.split(' ')[0]===dayname )?.map(v=> v?.main?.temp_min);
const all_day_max=feed?.filter(v=> v.dt_txt.split(' ')[0]===dayname )?.map(v=> v?.main?.temp_max);
const max_of_day=Math.max(...all_day_max);
const min_of_day=Math.min(...all_day_mins);
out.push({
dt: val.dt ,
dt_txt: val.dt_txt?.split('-')?.reverse()?.join('-'),
id: val.weather[0].id,
temp: max_of_day,
temp_min: min_of_day
});
}
dt=moment(val.dt * 1000).utcOffset(vm.get_utc_offset());
});
}
console.log('feeed id', out, vm.feed)
return out.length > 0 ? out:false;
},
style: function (){
var vm=this;
if(typeof vm.atts.style==='undefined') return 'inline';
return vm.atts.style;
}},
methods: {
uniq: function (array){
if(!Array.isArray(array)||array.length===0) return [];
const seen=new Set();
const out=[];
for (const val of array){
if(!seen.has(val)){
seen.add(val);
out.push(val);
}}
return out;
},
get_utc_offset: function (){
var vm=this;
var offset=SimpleWeather.locale.gmtOffset;
var sign=offset.toString().indexOf('-')===0 ? '-':'+';
var hours=parseInt(offset / 3600);
hours=hours < 10 ? '0' + hours:hours;
var minutes=offset % 3600;
minutes=minutes < 10 ? '0' + minutes:minutes;
var utc=sign + hours + ':' + minutes;
return utc;
},
getWindDirection: function ($deg){
if($deg >=0&&$deg < 22.5) return 'N';
else if($deg >=22.5&&$deg < 45) return 'NNE';
else if($deg >=45&&$deg < 67.5) return 'NE';
else if($deg >=67.5&&$deg < 90) return 'ENE';
else if($deg >=90&&$deg < 122.5) return 'E';
else if($deg >=112.5&&$deg < 135) return 'ESE';
else if($deg >=135&&$deg < 157.5) return 'SE';
else if($deg >=157.5&&$deg < 180) return 'SSE';
else if($deg >=180&&$deg < 202.5) return 'S';
else if($deg >=202.5&&$deg < 225) return 'SSW';
else if($deg >=225&&$deg < 247.5) return 'SW';
else if($deg >=247.5&&$deg < 270) return 'WSW';
else if($deg >=270&&$deg < 292.5) return 'W';
else if($deg >=292.5&&$deg < 315) return 'WNW';
else if($deg >=315&&$deg < 337.5) return 'NW';
else if($deg >=337.5&&$deg < 360) return 'NNW';
else return;
},
getWeatherIcon: function (day){
return 'sw-owm-' + day.id;
},
isset: function ($key){
return typeof vm.atts[$key]!=='undefined'&&vm.atts[$key]!==null&&vm.atts[$key].length > 0;
},
hasCurrentWeather: function (){
var vm=this;
return vm.filter_var(vm.atts.show_current)&&Object.keys(vm.current_weather).length > 0&&vm?.current_weather?.dt;
},
isDayVisible: function (index, day){
var vm=this;
var out=false;
var days=parseInt(vm.atts.days);
if(vm.filter_var(vm.atts.show_current)&&moment(vm.current_weather.dt * 1000).utcOffset(this.get_utc_offset()).isSame(day.dt * 1000, 'day')) return false;
return index < days;
},
filter_var: function (test){
return [1, true, 'on', 'true', '1', 'yes'].indexOf(test) >=0 ? true:false;
},
get_weather: function (){
var vm=this;
vm.$http.post(window.SimpleWeather.rest_route + 'simple-weather/v1/get_weather/',
vm.atts,
{
emulateJSON: true
}
).then(vm.successCallback, vm.errorCallback);
},
successCallback: function (response){
var vm=this;
if(vm.filter_var(window.SimpleWeather.settings.console_log)) console.log(response);
console.log('asdasdasd', response?.body)
if(response.status >=200&&response.status <=202){
console.log('response', response)
vm.feed_current_weather=response?.body?.current||JSON.parse(JSON.stringify(vm.feed_current_weather));
vm.feed=response.body?.daily?.list||vm.feed;
}},
errorCallback: function (response){
var vm=this;
if(vm.filter_var(window.SimpleWeather.settings.console_log)) console.log(response);
if(typeof response.body.code!=='undefined'&&['could_not_get_location', 'no_api'].indexOf(response.body.code) >=0){
vm.error=response.body.message;
}}
}});
});