Delete loops.js

This commit is contained in:
buffbears 2021-04-01 22:05:13 -04:00 committed by GitHub
parent b81de8d728
commit 80d28109c4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 0 additions and 522 deletions

View File

@ -1,522 +0,0 @@
function Loops(bindDataManager) {
var //dataManager,
obsData,
foreDataDaily,
foreDataHourly;
obsData = bindDataManager.observations;
foreDataDaily = bindDataManager.forecasts('daily');
foreDataHourly = bindDataManager.forecasts('hourly');
// init the display loops
displayAtmospheric(0);
displayForecast(0);
function displayAtmospheric(idx) {
var displays = {
conditions() {
return (getCC(obsData(0).current.weather[0].id + obsData(0).current.weather[0].icon, obsData(0).current.wind_speed)).toLowerCase();
},
wind(){ return 'wind ' + degToCompass(obsData(0).current.wind_deg) + ' ' + Math.round(parseInt(obsData(0).current.wind_speed)); },
gusts(){
if ( obsData(1)!=undefined ) {
return obsData(1).windGust.value!=null ? 'gusts ' + mps2mph( obsData(1).windGust.value ) : '';
}
},
humidity(){ return 'humidity ' + obsData(0).current.humidity + '%'; },
dewpoint(){ return 'dew point ' + dewPoint(obsData(0).current.temp, obsData(0).current.humidity ) + '°'; },
heatindex_windchill(){
var windchill = 35.74 + (0.6215 * parseInt(obsData(0).current.temp)) + (0.4275 * parseInt(obsData(0).current.temp) - 35.75) * parseInt(obsData(0).current.wind_speed) ^ 0.16;
if (parseInt(obsData(0).current.temp)<80 && windchill < parseInt(obsData(0).current.temp)) {
return 'wind chill ' + windchill + '&deg;';
} else if (parseInt(obsData(0).current.temp)>=80 && parseInt(obsData(0).current.humidity)>=40 ){
return 'heat index ' + heatIndex(obsData(0).current.temp, obsData(0).current.humidity) + '&deg;';
}
else return '';
},
pressure(){ return 'pressure ' + (obsData(0).current.pressure*0.0295301).toFixed(2) },
//+ ['S','R','F'][obsData(0).current.rising];
visibility() { return 'visibility ' + (parseInt(obsData(0).current.visibility) / 1000) + ' mile' + (obsData(0).current.visibility != 1 ? 's' : ''); },
uvindex() { return 'UV index ' + obsData(0).current.uvi; },
},
keys = Object.keys(displays),
text = displays[ keys[idx] ]();
// increment the pointer
idx = (++idx===keys.length ? 0 : idx);
if (text) {
$('#current-info').html(text);
setTimeout(function(){ displayAtmospheric(idx) }, 6000); // 6 second increment loop
} else {
// nothing to display - skip to the next one
setTimeout(function(){ displayAtmospheric(idx) }, 0);
}
} // end function
function displayForecast(idx) {
var displays = {
text1() {
$('#forecast-title').text( possessiveForecast(foreDataDaily[0].name) );
resizeText(foreDataDaily[0].detailedForecast);
},
text2() {
$('#forecast-title').text( possessiveForecast(foreDataDaily[1].name) );
resizeText(foreDataDaily[1].detailedForecast);
},
fiveday() {
var newtile, weekend, icons,
startidx = (foreDataDaily[0].name==='Tonight' ? 1 : 2),
days = ['SUN','MON','TUE','WED','THU','FRI','SAT'];
$('#forecast-title').text("5 DAY FORECAST");
$('#forecast-tiles').empty();
for (var i=startidx; i<=10; i+=2 ) {
weekend = ( dateFns.isWeekend(foreDataDaily[i].startTime) ? ' weekend' : '');
newtile = $("<div class='forecast-tile daily" + weekend + "'></div>");
$("<div class='header'></div>") .appendTo(newtile) .text(days[ dateFns.getDay(foreDataDaily[i].startTime) ]);
icons = mapNWSicons(foreDataDaily[i].icon);
for (x=icons.length-1; x>=0; x--){
$("<img class='icon' src=''/>") .appendTo(newtile) .attr('src', icons[x]);
}
$("<div class='high'></div>") .appendTo(newtile) .text(foreDataDaily[i].temperature);
$("<div class='low'></div>") .appendTo(newtile) .text(foreDataDaily[i+1].temperature);
$('#forecast-tiles').append(newtile);
}
$('#forecast-tiles').css('display','flex');
},
hourly() {
var newtile, icons, sizer, highbar,
indexes = calcHourlyReport(foreDataHourly),
data, label, temps=[];
$('#forecast-title').text( buildHourlyHeaderTitle(foreDataHourly[indexes[0]].startTime) );
$('#forecast-tiles').empty();
for (var i of indexes) {
data = foreDataHourly[i];
newtile = $("<div class='forecast-tile hourly'></div>");
sizer = $("<div class='width-sizer'></div>").appendTo(newtile);
icons = mapNWSicons(data.icon);
for (var x=icons.length-1; x>=0; x--){
$("<img class='icon' src=''/>") .appendTo(sizer) .attr('src', icons[x]);
}
$("<div class='footer'></div>") .appendTo(newtile) .text(buildHourlyTimeTitle(data.startTime));
highbar = $("<div class='hourly-high'></div>") .appendTo(sizer);
$("<div class='high'></div>") .appendTo(highbar) .text(data.temperature);
temps.push(data.temperature);
$("<div class='temp-bar'></div>") .appendTo(highbar);
$('#forecast-tiles').append(newtile);
}
$('#forecast-tiles').css('display','flex');
// animate grow and show temp
var min = Math.min(...temps), // 54
max = Math.max(...temps), // 73
range = (max-min),
prange = (95-78), // percent range for bar height
temp, value;
$('.forecast-tile').each(function(){
temp = $(this).find('.high').first().text();
value = ((temp-min)/range) * prange + 78; // find percentage of range and translate to percent and add that to the starting css % height number
$(this).find('.hourly-high').animate({height:value+"%"}, 1500,function(){
$(this).find('.high').fadeTo('slow', 1);
});
})
},
dummy(){}
},
keys = Object.keys(displays);
displays[ keys[idx] ]();
// increment the pointer
idx = (++idx===keys.length ? 0 : idx);
setTimeout(function(){ displayForecast(idx) }, 15000); // 15 second increment loop
}
function resizeText(text){
var s = 38,
$test = $('<div style="position:absolute;top:100%;"></div>') .appendTo('#forecast-text') .css('font-size', s + 'px') .html(text);
$test.width($('#forecast-text').width() );
//setTimeout(function() {
while ($test.outerHeight(true) >= ($('#forecast-text').height()) ) {
s -= 1;
$test.css('font-size', s + 'px');
}
$('#forecast-text div') .text(text) .css('font-size', s + 'px');
$test.remove();
$('#forecast-tiles').hide();
//},100); // delay is a workaround for Interstate font not updating display
}
function possessiveForecast(text){
return text + (text.toUpperCase() != 'OVERNIGHT' ? "'S" : '') + ' FORECAST';
}
} // end Loops class
function buildHourlyHeaderTitle(time) {
var today = new Date(),
tomorrow = dateFns.addDays(today, 1),
sforecast = "'s Forecast";
// title based on the first hour reported
switch (dateFns.getHours(time)) {
case 6: // 6 - Nextday's Forecast / Today's Forecast
// if 6am today
if (dateFns.isToday(time)) {
return dateFns.format(today, 'dddd') + sforecast;
}
case 0: // 0 - Nextday's Forecast
return dateFns.format(tomorrow, 'dddd') + sforecast;
case 12:
return 'This Afternoon';
case 15:
return "Today's Forecast";
case 17:
return "Tonight's Forecast";
case 20:
return dateFns.format(today, 'ddd') + ' Night/' + dateFns.format(tomorrow, 'ddd');
}
}
function buildHourlyTimeTitle(time){
var hour=dateFns.getHours(time);
if (hour===0) {
return 'midnight';
} else if (hour===12){
return 'noon';
}
return dateFns.format(time,'h a');
}
// finds the intervals to report on the hourly forecast
function calcHourlyReport(data) {
var ret = [],
targets = [0, 6, 12, 15, 17, 20], // hours that we report
current = dateFns.getHours(new Date()),
now = new Date(),
//firsthour = targets[ getNextHighestIndex(targets, current) ],
start,
hour, i=0;
switch (true) {
case (current < 3):
start = 6;
case (current < 9):
start = 12; break;
case (current < 12):
start = 15; break;
case (current < 15):
start = 17; break;
case (current < 17):
start = 20; break;
case (current < 20):
start = 0; break;
default:
start = 6;
}
while(ret.length<4){
// hour must be equal or greater than current
hour = dateFns.getHours( data[i].startTime );
if ( dateFns.isAfter(data[i].startTime, now) && (hour==start || ret.length>0) ) {
if ( targets.indexOf(hour)>=0 ) { // it is in our target list so record its index
ret.push(i);
}
}
i++;
}
return ret;
}
function mapNWSicons(url){
var map = {
skc:[26,25],
few:[28,27],
sct:[24,23],
bkn:[22,21],
ovc:[20,20],
wind_skc:[26,25,47],
wind_few:[28,27,47],
wind_sct:[24,23,47],
wind_bkn:[22,21,47],
wind_ovc:[20,20,47],
snow:[10,10],
rain_snow:[2,2],
rain_sleet:[38,38],
snow_sleet:[3,3],
fzra:[6,6],
rain_fzra:[6,6],
snow_fzra:[44,44],
sleet:[13,13],
rain:[8,8],
rain_showers:[7,7],
rain_showers_hi:[5,5],
tsra:[1,1],
tsra_sct:[29,37],
tsra_hi:[29,37],
tornado:[46,46],
hurr_warn:[45,45],
hurr_watch:[45,45],
ts_warn:[45,45],
ts_watch:[45,45],
ts_hurr_warn:[45,45],
dust:[14,14],
smoke:[16,16],
haze:[16,16],
hot:[16,16],
cold:[42,42],
blizzard:[11,11],
fog:[15,15]
},
matches = url.match(/icons\/land\/(day|night)\/([a-z_]*)\/?([a-z_]*)/), // day or night followed by one or more condition codes
idx = {day:0, night:1}[matches[1]],
ret=[], match;
for (i=2; i<matches.length; i++){
if (matches[i]) {
match = map[ matches[i] ];
ret.push( match[idx] );
// some icons are 2 layered
if (match.length>2) {
ret.push( match[2] );
}
}
}
// place word icons last so they render on top
if (ret.length>1 && [15,47,41,42, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 20, 31, 33, 34, 38, 39, 40, 44].indexOf( ret[1] )>-1) {
ret.swap(0,1);
}
return ret.map(function(num){
return 'images/icons/' + ('0'+num).slice(-2) + '.png';
});
}
/*
wind E 14
gusts 17 mph
humidity 58%
dew point 72(degree symbol)
heat index 95(degree symbol) / wind chill
pressure 30.02 S
visibility 10 miles
uv index High
partly cloudy
*/
// sample data
/*
https://query.yahooapis.com/v1/public/yql?format=json&q=select * from weather.forecast where woeid=2402292
"units":{
"distance":"mi",
"pressure":"in",
"speed":"mph",
"temperature":"F"
},
"title":"Yahoo! Weather - Fargo, ND, US",
"link":"http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-2402292/",
"description":"Yahoo! Weather for Fargo, ND, US",
"language":"en-us",
"lastBuildDate":"Thu, 12 Oct 2017 10:10 PM CDT",
"ttl":"60",
"location":{
"city":"Fargo",
"country":"United States",
"region":" ND"
},
"wind":{
"chill":"52",
"direction":"295",
"speed":"18"
},
"atmosphere":{
"humidity":"54",
"pressure":"978.0",
"rising":"0",
"visibility":"16.1"
},
"astronomy":{
"sunrise":"7:41 am",
"sunset":"6:46 pm"
},
"image":{
"title":"Yahoo! Weather",
"width":"142",
"height":"18",
"link":"http://weather.yahoo.com",
"url":"http://l.yimg.com/a/i/brand/purplelogo//uh/us/news-wea.gif"
},
"item":{
"title":"Conditions for Fargo, ND, US at 09:00 PM CDT",
"lat":"46.865089",
"long":"-96.829224",
"link":"http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-2402292/",
"pubDate":"Thu, 12 Oct 2017 09:00 PM CDT",
"condition":{
"code":"27",
"date":"Thu, 12 Oct 2017 09:00 PM CDT",
"temp":"55",
"text":"Mostly Cloudy"
},
"forecast":[
{
"code":"30",
"date":"12 Oct 2017",
"day":"Thu",
"high":"70",
"low":"48",
"text":"Partly Cloudy"
},
{
"code":"32",
"date":"13 Oct 2017",
"day":"Fri",
"high":"58",
"low":"37",
"text":"Sunny"
},
{
"code":"39",
"date":"14 Oct 2017",
"day":"Sat",
"high":"49",
"low":"38",
"text":"Scattered Showers"
},
{
"code":"34",
"date":"15 Oct 2017",
"day":"Sun",
"high":"56",
"low":"31",
"text":"Mostly Sunny"
},
{
"code":"34",
"date":"16 Oct 2017",
"day":"Mon",
"high":"65",
"low":"35",
"text":"Mostly Sunny"
},
{
"code":"34",
"date":"17 Oct 2017",
"day":"Tue",
"high":"65",
"low":"39",
"text":"Mostly Sunny"
},
{
"code":"30",
"date":"18 Oct 2017",
"day":"Wed",
"high":"64",
"low":"48",
"text":"Partly Cloudy"
},
{
"code":"30",
"date":"19 Oct 2017",
"day":"Thu",
"high":"65",
"low":"44",
"text":"Partly Cloudy"
},
{
"code":"30",
"date":"20 Oct 2017",
"day":"Fri",
"high":"66",
"low":"49",
"text":"Partly Cloudy"
},
{
"code":"28",
"date":"21 Oct 2017",
"day":"Sat",
"high":"61",
"low":"49",
"text":"Mostly Cloudy"
}
],
"description":"<![CDATA[<img src=\"http://l.yimg.com/a/i/us/we/52/27.gif\"/>\n<BR />\n<b>Current Conditions:</b>\n<BR />Mostly Cloudy\n<BR />\n<BR />\n<b>Forecast:</b>\n<BR /> Thu - Partly Cloudy. High: 70Low: 48\n<BR /> Fri - Sunny. High: 58Low: 37\n<BR /> Sat - Scattered Showers. High: 49Low: 38\n<BR /> Sun - Mostly Sunny. High: 56Low: 31\n<BR /> Mon - Mostly Sunny. High: 65Low: 35\n<BR />\n<BR />\n<a href=\"http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-2402292/\">Full Forecast at Yahoo! Weather</a>\n<BR />\n<BR />\n<BR />\n]]>",
"guid":{
"isPermaLink":"false"
}
}
Current Conditions:</b>\n<BR />Mostly Cloudy\n<BR />\n<BR />\n<b>
Forecast:</b>\n<BR /> Thu - Partly Cloudy. High: 70Low: 48\n<BR /> Fri - Sunny. High: 58Low: 37\n<BR /> Sat - Scattered Showers. High: 49Low: 38\n<BR /> Sun - Mostly Sunny. High: 56Low: 31\n<BR />
Mon - Mostly Sunny. High: 65Low: 35\n<BR />\n<BR />\n<a href=\"http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-2402292/\">Full Forecast at Yahoo! Weather</a>\n<BR />\n<BR />\n<BR />\n]]>",
"guid":{
*/