add swipe functionality
This commit is contained in:
		
							parent
							
								
									ebb715d362
								
							
						
					
					
						commit
						5ace925557
					
				
					 14 changed files with 206 additions and 337 deletions
				
			
		
							
								
								
									
										2
									
								
								dist/index.html
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								dist/index.html
									
									
									
									
										vendored
									
									
								
							| 
						 | 
					@ -1 +1 @@
 | 
				
			||||||
<!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"><head><meta charset="utf-8"><link rel="preload" href="fonts/Star4000.woff" as="font" crossorigin="anonymous"><link rel="preload" href="fonts/Star 4 Radar.woff" as="font" crossorigin="anonymous"><link rel="preload" href="fonts/Star4000 Extended.woff" as="font" crossorigin="anonymous"><link rel="preload" href="fonts/Star4000 Large Compressed.woff" as="font" crossorigin="anonymous"><link rel="preload" href="fonts/Star4000 Large.woff" as="font" crossorigin="anonymous"><link rel="preload" href="fonts/Star4000 Small.woff" as="font" crossorigin="anonymous"><title>WeatherStar 4000+</title><meta name="description" content="Web based WeatherStar 4000 simulator that reports current and forecast weather conditions plus a few extras!"><meta name="keywords" content="WeatherStar 4000+"><meta name="author" content="Matt Walsh"><meta name="application-name" content="WeatherStar 4000+"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"><link rel="manifest" href="manifest.json"><link rel="icon" href="images/Logo192.png"><link rel="stylesheet" type="text/css" href="resources/ws.min.css?_=3.6.2"><script type="text/javascript" src="resources/data.min.js?_=3.6.2"></script><script type="text/javascript" src="resources/ws.min.js?_=3.6.2"></script></head><body><div id="divQuery"><form id="frmGetLatLng"><input id="txtAddress" type="text" value="" placeholder="Zip or City, State"><button id="btnGetGps" type="button" title="Get GPS Location"><img id="imgGetGps" src="images/nav/ic_gps_fixed_black_18dp_1x.png"></button> <input id="btnGetLatLng" type="submit" value="GO"> <input id="btnClearQuery" type="reset" value="Reset"></form><div id="divLat"></div><div id="divLng"></div></div><br><img id="imgPause1x" src="images/nav/ic_pause_white_24dp_1x.png"> <img id="imgPause2x" src="images/nav/ic_pause_white_24dp_2x.png"><div id="version" style="display:none">3.6.2</div><div id="divTwc"><div id="container"><div id="loading" width="640" height="480"><div><div class="title">WeatherStar 4000+</div><div class="instructions">Enter your location above to continue</div></div></div></div><div id="divTwcBottom"><div id="divTwcBottomLeft"><img id="NavigateMenu" class="navButton" src="images/nav/ic_menu_white_24dp_1x.png" title="Menu"> <img id="NavigatePrevious" class="navButton" src="images/nav/ic_skip_previous_white_24dp_1x.png" title="Previous"> <img id="NavigateNext" class="navButton" src="images/nav/ic_skip_next_white_24dp_1x.png" title="Next"> <img id="NavigatePlay" class="navButton" src="images/nav/ic_play_arrow_white_24dp_1x.png" title="Play"></div><div id="divTwcBottomMiddle"><img id="NavigateRefresh" class="navButton" src="images/nav/ic_refresh_white_24dp_1x.png" title="Refresh"></div><div id="divTwcBottomRight"><img id="ToggleFullScreen" class="navButton" src="images/nav/ic_fullscreen_exit_white_24dp_1x.png" title="Exit Fullscreen"></div></div></div><br><div class="info"><a href="https://github.com/netbymatt/ws4kp#weatherstar-4000">More information</a></div><div class="heading">Selected displays</div><div id="enabledDisplays"></div><div id="divInfo">Location: <span id="spanCity"></span> <span id="spanState"></span><br>Station Id: <span id="spanStationId"></span><br>Radar Id: <span id="spanRadarId"></span><br>Zone Id: <span id="spanZoneId"></span><br></div><div id="divRefresh">Last Update: <span id="spanLastRefresh">(None)</span><br><input id="chkAutoRefresh" name="chkAutoRefresh" type="checkbox"><label id="lblRefreshCountDown" for="chkAutoRefresh">Auto Refresh: <span id="spanRefreshCountDown">--:--</span></label></div><div id="divUnits">Units: <input id="radEnglish" name="radUnits" type="radio" value="ENGLISH"><label for="radEnglish">English</label> <input id="radMetric" name="radUnits" type="radio" value="METRIC"><label for="radMetric">Metric</label></div></body></html>
 | 
					<!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"><head><meta charset="utf-8"><link rel="preload" href="fonts/Star4000.woff" as="font" crossorigin="anonymous"><link rel="preload" href="fonts/Star 4 Radar.woff" as="font" crossorigin="anonymous"><link rel="preload" href="fonts/Star4000 Extended.woff" as="font" crossorigin="anonymous"><link rel="preload" href="fonts/Star4000 Large Compressed.woff" as="font" crossorigin="anonymous"><link rel="preload" href="fonts/Star4000 Large.woff" as="font" crossorigin="anonymous"><link rel="preload" href="fonts/Star4000 Small.woff" as="font" crossorigin="anonymous"><title>WeatherStar 4000+</title><meta name="description" content="Web based WeatherStar 4000 simulator that reports current and forecast weather conditions plus a few extras!"><meta name="keywords" content="WeatherStar 4000+"><meta name="author" content="Matt Walsh"><meta name="application-name" content="WeatherStar 4000+"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"><link rel="manifest" href="manifest.json"><link rel="icon" href="images/Logo192.png"><link rel="stylesheet" type="text/css" href="resources/ws.min.css?_=3.6.3"><script type="text/javascript" src="resources/data.min.js?_=3.6.3"></script><script type="text/javascript" src="resources/ws.min.js?_=3.6.3"></script></head><body><div id="divQuery"><form id="frmGetLatLng"><input id="txtAddress" type="text" value="" placeholder="Zip or City, State"><button id="btnGetGps" type="button" title="Get GPS Location"><img id="imgGetGps" src="images/nav/ic_gps_fixed_black_18dp_1x.png"></button> <input id="btnGetLatLng" type="submit" value="GO"> <input id="btnClearQuery" type="reset" value="Reset"></form><div id="divLat"></div><div id="divLng"></div></div><br><img id="imgPause1x" src="images/nav/ic_pause_white_24dp_1x.png"> <img id="imgPause2x" src="images/nav/ic_pause_white_24dp_2x.png"><div id="version" style="display:none">3.6.3</div><div id="divTwc"><div id="container"><div id="loading" width="640" height="480"><div><div class="title">WeatherStar 4000+</div><div class="instructions">Enter your location above to continue</div></div></div></div><div id="divTwcBottom"><div id="divTwcBottomLeft"><img id="NavigateMenu" class="navButton" src="images/nav/ic_menu_white_24dp_1x.png" title="Menu"> <img id="NavigatePrevious" class="navButton" src="images/nav/ic_skip_previous_white_24dp_1x.png" title="Previous"> <img id="NavigateNext" class="navButton" src="images/nav/ic_skip_next_white_24dp_1x.png" title="Next"> <img id="NavigatePlay" class="navButton" src="images/nav/ic_play_arrow_white_24dp_1x.png" title="Play"></div><div id="divTwcBottomMiddle"><img id="NavigateRefresh" class="navButton" src="images/nav/ic_refresh_white_24dp_1x.png" title="Refresh"></div><div id="divTwcBottomRight"><img id="ToggleFullScreen" class="navButton" src="images/nav/ic_fullscreen_exit_white_24dp_1x.png" title="Exit Fullscreen"></div></div></div><br><div class="info"><a href="https://github.com/netbymatt/ws4kp#weatherstar-4000">More information</a></div><div class="heading">Selected displays</div><div id="enabledDisplays"></div><div id="divInfo">Location: <span id="spanCity"></span> <span id="spanState"></span><br>Station Id: <span id="spanStationId"></span><br>Radar Id: <span id="spanRadarId"></span><br>Zone Id: <span id="spanZoneId"></span><br></div><div id="divRefresh">Last Update: <span id="spanLastRefresh">(None)</span><br><input id="chkAutoRefresh" name="chkAutoRefresh" type="checkbox"><label id="lblRefreshCountDown" for="chkAutoRefresh">Auto Refresh: <span id="spanRefreshCountDown">--:--</span></label></div><div id="divUnits">Units: <input id="radEnglish" name="radUnits" type="radio" value="ENGLISH"><label for="radEnglish">English</label> <input id="radMetric" name="radUnits" type="radio" value="METRIC"><label for="radMetric">Metric</label></div></body></html>
 | 
				
			||||||
							
								
								
									
										15
									
								
								dist/resources/ws.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								dist/resources/ws.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| 
						 | 
					@ -30,6 +30,7 @@ const js_sources = [
 | 
				
			||||||
	'server/scripts/vendor/auto/jquery.js',
 | 
						'server/scripts/vendor/auto/jquery.js',
 | 
				
			||||||
	'server/scripts/vendor/jquery.autocomplete.min.js',
 | 
						'server/scripts/vendor/jquery.autocomplete.min.js',
 | 
				
			||||||
	'server/scripts/vendor/auto/nosleep.js',
 | 
						'server/scripts/vendor/auto/nosleep.js',
 | 
				
			||||||
 | 
						'server/scripts/vendor/auto/swiped-events.js',
 | 
				
			||||||
	'server/scripts/index.js',
 | 
						'server/scripts/index.js',
 | 
				
			||||||
	'server/scripts/libgif.js',
 | 
						'server/scripts/libgif.js',
 | 
				
			||||||
	'server/scripts/vendor/auto/luxon.js',
 | 
						'server/scripts/vendor/auto/luxon.js',
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,6 +12,7 @@ const vendor_files = [
 | 
				
			||||||
	'./node_modules/nosleep.js/dist/NoSleep.js',
 | 
						'./node_modules/nosleep.js/dist/NoSleep.js',
 | 
				
			||||||
	'./node_modules/jquery/dist/jquery.js',
 | 
						'./node_modules/jquery/dist/jquery.js',
 | 
				
			||||||
	'./node_modules/suncalc/suncalc.js',
 | 
						'./node_modules/suncalc/suncalc.js',
 | 
				
			||||||
 | 
						'./node_modules/swiped-events/src/swiped-events.js',
 | 
				
			||||||
];
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const copy = () => gulp.src(vendor_files)
 | 
					const copy = () => gulp.src(vendor_files)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										2
									
								
								gulpserver/jquery.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								gulpserver/jquery.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								gulpserver/luxon.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								gulpserver/luxon.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										2
									
								
								gulpserver/nosleep.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								gulpserver/nosleep.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| 
						 | 
					@ -1,310 +0,0 @@
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 (c) 2011-2015, Vladimir Agafonkin
 | 
					 | 
				
			||||||
 SunCalc is a JavaScript library for calculating sun/moon position and light phases.
 | 
					 | 
				
			||||||
 https://github.com/mourner/suncalc
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(function () { 'use strict';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// shortcuts for easier to read formulas
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
var PI   = Math.PI,
 | 
					 | 
				
			||||||
    sin  = Math.sin,
 | 
					 | 
				
			||||||
    cos  = Math.cos,
 | 
					 | 
				
			||||||
    tan  = Math.tan,
 | 
					 | 
				
			||||||
    asin = Math.asin,
 | 
					 | 
				
			||||||
    atan = Math.atan2,
 | 
					 | 
				
			||||||
    acos = Math.acos,
 | 
					 | 
				
			||||||
    rad  = PI / 180;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// sun calculations are based on http://aa.quae.nl/en/reken/zonpositie.html formulas
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// date/time constants and conversions
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
var dayMs = 1000 * 60 * 60 * 24,
 | 
					 | 
				
			||||||
    J1970 = 2440588,
 | 
					 | 
				
			||||||
    J2000 = 2451545;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function toJulian(date) { return date.valueOf() / dayMs - 0.5 + J1970; }
 | 
					 | 
				
			||||||
function fromJulian(j)  { return new Date((j + 0.5 - J1970) * dayMs); }
 | 
					 | 
				
			||||||
function toDays(date)   { return toJulian(date) - J2000; }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// general calculations for position
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
var e = rad * 23.4397; // obliquity of the Earth
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function rightAscension(l, b) { return atan(sin(l) * cos(e) - tan(b) * sin(e), cos(l)); }
 | 
					 | 
				
			||||||
function declination(l, b)    { return asin(sin(b) * cos(e) + cos(b) * sin(e) * sin(l)); }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function azimuth(H, phi, dec)  { return atan(sin(H), cos(H) * sin(phi) - tan(dec) * cos(phi)); }
 | 
					 | 
				
			||||||
function altitude(H, phi, dec) { return asin(sin(phi) * sin(dec) + cos(phi) * cos(dec) * cos(H)); }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function siderealTime(d, lw) { return rad * (280.16 + 360.9856235 * d) - lw; }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function astroRefraction(h) {
 | 
					 | 
				
			||||||
    if (h < 0) // the following formula works for positive altitudes only.
 | 
					 | 
				
			||||||
        h = 0; // if h = -0.08901179 a div/0 would occur.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // formula 16.4 of "Astronomical Algorithms" 2nd edition by Jean Meeus (Willmann-Bell, Richmond) 1998.
 | 
					 | 
				
			||||||
    // 1.02 / tan(h + 10.26 / (h + 5.10)) h in degrees, result in arc minutes -> converted to rad:
 | 
					 | 
				
			||||||
    return 0.0002967 / Math.tan(h + 0.00312536 / (h + 0.08901179));
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// general sun calculations
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function solarMeanAnomaly(d) { return rad * (357.5291 + 0.98560028 * d); }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function eclipticLongitude(M) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    var C = rad * (1.9148 * sin(M) + 0.02 * sin(2 * M) + 0.0003 * sin(3 * M)), // equation of center
 | 
					 | 
				
			||||||
        P = rad * 102.9372; // perihelion of the Earth
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return M + C + P + PI;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function sunCoords(d) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    var M = solarMeanAnomaly(d),
 | 
					 | 
				
			||||||
        L = eclipticLongitude(M);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return {
 | 
					 | 
				
			||||||
        dec: declination(L, 0),
 | 
					 | 
				
			||||||
        ra: rightAscension(L, 0)
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
var SunCalc = {};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// calculates sun position for a given date and latitude/longitude
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
SunCalc.getPosition = function (date, lat, lng) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    var lw  = rad * -lng,
 | 
					 | 
				
			||||||
        phi = rad * lat,
 | 
					 | 
				
			||||||
        d   = toDays(date),
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        c  = sunCoords(d),
 | 
					 | 
				
			||||||
        H  = siderealTime(d, lw) - c.ra;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return {
 | 
					 | 
				
			||||||
        azimuth: azimuth(H, phi, c.dec),
 | 
					 | 
				
			||||||
        altitude: altitude(H, phi, c.dec)
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// sun times configuration (angle, morning name, evening name)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
var times = SunCalc.times = [
 | 
					 | 
				
			||||||
    [-0.833, 'sunrise',       'sunset'      ],
 | 
					 | 
				
			||||||
    [  -0.3, 'sunriseEnd',    'sunsetStart' ],
 | 
					 | 
				
			||||||
    [    -6, 'dawn',          'dusk'        ],
 | 
					 | 
				
			||||||
    [   -12, 'nauticalDawn',  'nauticalDusk'],
 | 
					 | 
				
			||||||
    [   -18, 'nightEnd',      'night'       ],
 | 
					 | 
				
			||||||
    [     6, 'goldenHourEnd', 'goldenHour'  ]
 | 
					 | 
				
			||||||
];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// adds a custom time to the times config
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
SunCalc.addTime = function (angle, riseName, setName) {
 | 
					 | 
				
			||||||
    times.push([angle, riseName, setName]);
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// calculations for sun times
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
var J0 = 0.0009;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function julianCycle(d, lw) { return Math.round(d - J0 - lw / (2 * PI)); }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function approxTransit(Ht, lw, n) { return J0 + (Ht + lw) / (2 * PI) + n; }
 | 
					 | 
				
			||||||
function solarTransitJ(ds, M, L)  { return J2000 + ds + 0.0053 * sin(M) - 0.0069 * sin(2 * L); }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function hourAngle(h, phi, d) { return acos((sin(h) - sin(phi) * sin(d)) / (cos(phi) * cos(d))); }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// returns set time for the given sun altitude
 | 
					 | 
				
			||||||
function getSetJ(h, lw, phi, dec, n, M, L) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    var w = hourAngle(h, phi, dec),
 | 
					 | 
				
			||||||
        a = approxTransit(w, lw, n);
 | 
					 | 
				
			||||||
    return solarTransitJ(a, M, L);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// calculates sun times for a given date and latitude/longitude
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
SunCalc.getTimes = function (date, lat, lng) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    var lw = rad * -lng,
 | 
					 | 
				
			||||||
        phi = rad * lat,
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        d = toDays(date),
 | 
					 | 
				
			||||||
        n = julianCycle(d, lw),
 | 
					 | 
				
			||||||
        ds = approxTransit(0, lw, n),
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        M = solarMeanAnomaly(ds),
 | 
					 | 
				
			||||||
        L = eclipticLongitude(M),
 | 
					 | 
				
			||||||
        dec = declination(L, 0),
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        Jnoon = solarTransitJ(ds, M, L),
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        i, len, time, Jset, Jrise;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    var result = {
 | 
					 | 
				
			||||||
        solarNoon: fromJulian(Jnoon),
 | 
					 | 
				
			||||||
        nadir: fromJulian(Jnoon - 0.5)
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    for (i = 0, len = times.length; i < len; i += 1) {
 | 
					 | 
				
			||||||
        time = times[i];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        Jset = getSetJ(time[0] * rad, lw, phi, dec, n, M, L);
 | 
					 | 
				
			||||||
        Jrise = Jnoon - (Jset - Jnoon);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        result[time[1]] = fromJulian(Jrise);
 | 
					 | 
				
			||||||
        result[time[2]] = fromJulian(Jset);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return result;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// moon calculations, based on http://aa.quae.nl/en/reken/hemelpositie.html formulas
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function moonCoords(d) { // geocentric ecliptic coordinates of the moon
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    var L = rad * (218.316 + 13.176396 * d), // ecliptic longitude
 | 
					 | 
				
			||||||
        M = rad * (134.963 + 13.064993 * d), // mean anomaly
 | 
					 | 
				
			||||||
        F = rad * (93.272 + 13.229350 * d),  // mean distance
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        l  = L + rad * 6.289 * sin(M), // longitude
 | 
					 | 
				
			||||||
        b  = rad * 5.128 * sin(F),     // latitude
 | 
					 | 
				
			||||||
        dt = 385001 - 20905 * cos(M);  // distance to the moon in km
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return {
 | 
					 | 
				
			||||||
        ra: rightAscension(l, b),
 | 
					 | 
				
			||||||
        dec: declination(l, b),
 | 
					 | 
				
			||||||
        dist: dt
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
SunCalc.getMoonPosition = function (date, lat, lng) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    var lw  = rad * -lng,
 | 
					 | 
				
			||||||
        phi = rad * lat,
 | 
					 | 
				
			||||||
        d   = toDays(date),
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        c = moonCoords(d),
 | 
					 | 
				
			||||||
        H = siderealTime(d, lw) - c.ra,
 | 
					 | 
				
			||||||
        h = altitude(H, phi, c.dec),
 | 
					 | 
				
			||||||
        // formula 14.1 of "Astronomical Algorithms" 2nd edition by Jean Meeus (Willmann-Bell, Richmond) 1998.
 | 
					 | 
				
			||||||
        pa = atan(sin(H), tan(phi) * cos(c.dec) - sin(c.dec) * cos(H));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    h = h + astroRefraction(h); // altitude correction for refraction
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return {
 | 
					 | 
				
			||||||
        azimuth: azimuth(H, phi, c.dec),
 | 
					 | 
				
			||||||
        altitude: h,
 | 
					 | 
				
			||||||
        distance: c.dist,
 | 
					 | 
				
			||||||
        parallacticAngle: pa
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// calculations for illumination parameters of the moon,
 | 
					 | 
				
			||||||
// based on http://idlastro.gsfc.nasa.gov/ftp/pro/astro/mphase.pro formulas and
 | 
					 | 
				
			||||||
// Chapter 48 of "Astronomical Algorithms" 2nd edition by Jean Meeus (Willmann-Bell, Richmond) 1998.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
SunCalc.getMoonIllumination = function (date) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    var d = toDays(date || new Date()),
 | 
					 | 
				
			||||||
        s = sunCoords(d),
 | 
					 | 
				
			||||||
        m = moonCoords(d),
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        sdist = 149598000, // distance from Earth to Sun in km
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        phi = acos(sin(s.dec) * sin(m.dec) + cos(s.dec) * cos(m.dec) * cos(s.ra - m.ra)),
 | 
					 | 
				
			||||||
        inc = atan(sdist * sin(phi), m.dist - sdist * cos(phi)),
 | 
					 | 
				
			||||||
        angle = atan(cos(s.dec) * sin(s.ra - m.ra), sin(s.dec) * cos(m.dec) -
 | 
					 | 
				
			||||||
                cos(s.dec) * sin(m.dec) * cos(s.ra - m.ra));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return {
 | 
					 | 
				
			||||||
        fraction: (1 + cos(inc)) / 2,
 | 
					 | 
				
			||||||
        phase: 0.5 + 0.5 * inc * (angle < 0 ? -1 : 1) / Math.PI,
 | 
					 | 
				
			||||||
        angle: angle
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function hoursLater(date, h) {
 | 
					 | 
				
			||||||
    return new Date(date.valueOf() + h * dayMs / 24);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// calculations for moon rise/set times are based on http://www.stargazing.net/kepler/moonrise.html article
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
SunCalc.getMoonTimes = function (date, lat, lng, inUTC) {
 | 
					 | 
				
			||||||
    var t = new Date(date);
 | 
					 | 
				
			||||||
    if (inUTC) t.setUTCHours(0, 0, 0, 0);
 | 
					 | 
				
			||||||
    else t.setHours(0, 0, 0, 0);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    var hc = 0.133 * rad,
 | 
					 | 
				
			||||||
        h0 = SunCalc.getMoonPosition(t, lat, lng).altitude - hc,
 | 
					 | 
				
			||||||
        h1, h2, rise, set, a, b, xe, ye, d, roots, x1, x2, dx;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // go in 2-hour chunks, each time seeing if a 3-point quadratic curve crosses zero (which means rise or set)
 | 
					 | 
				
			||||||
    for (var i = 1; i <= 24; i += 2) {
 | 
					 | 
				
			||||||
        h1 = SunCalc.getMoonPosition(hoursLater(t, i), lat, lng).altitude - hc;
 | 
					 | 
				
			||||||
        h2 = SunCalc.getMoonPosition(hoursLater(t, i + 1), lat, lng).altitude - hc;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        a = (h0 + h2) / 2 - h1;
 | 
					 | 
				
			||||||
        b = (h2 - h0) / 2;
 | 
					 | 
				
			||||||
        xe = -b / (2 * a);
 | 
					 | 
				
			||||||
        ye = (a * xe + b) * xe + h1;
 | 
					 | 
				
			||||||
        d = b * b - 4 * a * h1;
 | 
					 | 
				
			||||||
        roots = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (d >= 0) {
 | 
					 | 
				
			||||||
            dx = Math.sqrt(d) / (Math.abs(a) * 2);
 | 
					 | 
				
			||||||
            x1 = xe - dx;
 | 
					 | 
				
			||||||
            x2 = xe + dx;
 | 
					 | 
				
			||||||
            if (Math.abs(x1) <= 1) roots++;
 | 
					 | 
				
			||||||
            if (Math.abs(x2) <= 1) roots++;
 | 
					 | 
				
			||||||
            if (x1 < -1) x1 = x2;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (roots === 1) {
 | 
					 | 
				
			||||||
            if (h0 < 0) rise = i + x1;
 | 
					 | 
				
			||||||
            else set = i + x1;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        } else if (roots === 2) {
 | 
					 | 
				
			||||||
            rise = i + (ye < 0 ? x2 : x1);
 | 
					 | 
				
			||||||
            set = i + (ye < 0 ? x1 : x2);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (rise && set) break;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        h0 = h2;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    var result = {};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (rise) result.rise = hoursLater(t, rise);
 | 
					 | 
				
			||||||
    if (set) result.set = hoursLater(t, set);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (!rise && !set) result[ye > 0 ? 'alwaysUp' : 'alwaysDown'] = true;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return result;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// export as Node module / AMD module / browser variable
 | 
					 | 
				
			||||||
if (typeof exports === 'object' && typeof module !== 'undefined') module.exports = SunCalc;
 | 
					 | 
				
			||||||
else if (typeof define === 'function' && define.amd) define(SunCalc);
 | 
					 | 
				
			||||||
else window.SunCalc = SunCalc;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}());
 | 
					 | 
				
			||||||
							
								
								
									
										15
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										15
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| 
						 | 
					@ -3285,6 +3285,12 @@
 | 
				
			||||||
        "to-regex": "^3.0.1"
 | 
					        "to-regex": "^3.0.1"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "natives": {
 | 
				
			||||||
 | 
					      "version": "1.1.6",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.6.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-6+TDFewD4yxY14ptjKaS63GVdtKiES1pTPyxn9Jb0rBqPMZ7VcCiooEhPNsr+mqHtMGxa/5c/HhcC4uPEUw/nA==",
 | 
				
			||||||
 | 
					      "dev": true
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "natural-compare": {
 | 
					    "natural-compare": {
 | 
				
			||||||
      "version": "1.4.0",
 | 
					      "version": "1.4.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
 | 
				
			||||||
| 
						 | 
					@ -4515,6 +4521,15 @@
 | 
				
			||||||
        "es6-symbol": "^3.1.1"
 | 
					        "es6-symbol": "^3.1.1"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "swiped-events": {
 | 
				
			||||||
 | 
					      "version": "1.1.4",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/swiped-events/-/swiped-events-1.1.4.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-r7aIa2gjDXYWFP9VgqWIbCxGV6JOoaQ8urLWwNYxdufEW3hr4NwmRQ2WU1qXMVDvxwbn+nF8I2e4nQrl5LwVXQ==",
 | 
				
			||||||
 | 
					      "dev": true,
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "natives": "^1.1.6"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "table": {
 | 
					    "table": {
 | 
				
			||||||
      "version": "5.4.6",
 | 
					      "version": "5.4.6",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -33,7 +33,8 @@
 | 
				
			||||||
    "jquery-touchswipe": "^1.6.19",
 | 
					    "jquery-touchswipe": "^1.6.19",
 | 
				
			||||||
    "luxon": "^1.25.0",
 | 
					    "luxon": "^1.25.0",
 | 
				
			||||||
    "nosleep.js": "^0.11.0",
 | 
					    "nosleep.js": "^0.11.0",
 | 
				
			||||||
    "suncalc": "^1.8.0"
 | 
					    "suncalc": "^1.8.0",
 | 
				
			||||||
 | 
					    "swiped-events": "^1.1.4"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "dependencies": {}
 | 
					  "dependencies": {}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -159,6 +159,10 @@ const index = (() => {
 | 
				
			||||||
			document.getElementById('chkAutoRefresh').checked = false;
 | 
								document.getElementById('chkAutoRefresh').checked = false;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// swipe functionality
 | 
				
			||||||
 | 
							document.getElementById('container').addEventListener('swiped-left', () => swipeCallBack('left'));
 | 
				
			||||||
 | 
							document.getElementById('container').addEventListener('swiped-right', () => swipeCallBack('right'));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	const changeUnits = (e) => {
 | 
						const changeUnits = (e) => {
 | 
				
			||||||
| 
						 | 
					@ -277,24 +281,20 @@ const index = (() => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		postMessage('latLon', latLon);
 | 
							postMessage('latLon', latLon);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		const SwipeCallBack = (event, direction) => {
 | 
					 | 
				
			||||||
			switch (direction) {
 | 
					 | 
				
			||||||
			case 'left':
 | 
					 | 
				
			||||||
				btnNavigateNext_click();
 | 
					 | 
				
			||||||
				break;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'right':
 | 
						};
 | 
				
			||||||
			default:
 | 
					 | 
				
			||||||
				btnNavigatePrevious_click();
 | 
					 | 
				
			||||||
				break;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// display.swipe({
 | 
						const swipeCallBack = (direction) => {
 | 
				
			||||||
		// //Generic swipe handler for all directions
 | 
							switch (direction) {
 | 
				
			||||||
		// 	swipeRight: SwipeCallBack,
 | 
							case 'left':
 | 
				
			||||||
		// 	swipeLeft: SwipeCallBack,
 | 
								btnNavigateNext_click();
 | 
				
			||||||
		// });
 | 
								break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							case 'right':
 | 
				
			||||||
 | 
							default:
 | 
				
			||||||
 | 
								btnNavigatePrevious_click();
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	const AssignLastUpdate = () => {
 | 
						const AssignLastUpdate = () => {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										156
									
								
								server/scripts/vendor/auto/swiped-events.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										156
									
								
								server/scripts/vendor/auto/swiped-events.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,156 @@
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 * swiped-events.js - v@version@
 | 
				
			||||||
 | 
					 * Pure JavaScript swipe events
 | 
				
			||||||
 | 
					 * https://github.com/john-doherty/swiped-events
 | 
				
			||||||
 | 
					 * @inspiration https://stackoverflow.com/questions/16348031/disable-scrolling-when-touch-moving-certain-element
 | 
				
			||||||
 | 
					 * @author John Doherty <www.johndoherty.info>
 | 
				
			||||||
 | 
					 * @license MIT
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					(function (window, document) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    'use strict';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // patch CustomEvent to allow constructor creation (IE/Chrome)
 | 
				
			||||||
 | 
					    if (typeof window.CustomEvent !== 'function') {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        window.CustomEvent = function (event, params) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            params = params || { bubbles: false, cancelable: false, detail: undefined };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var evt = document.createEvent('CustomEvent');
 | 
				
			||||||
 | 
					            evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
 | 
				
			||||||
 | 
					            return evt;
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        window.CustomEvent.prototype = window.Event.prototype;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    document.addEventListener('touchstart', handleTouchStart, false);
 | 
				
			||||||
 | 
					    document.addEventListener('touchmove', handleTouchMove, false);
 | 
				
			||||||
 | 
					    document.addEventListener('touchend', handleTouchEnd, false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    var xDown = null;
 | 
				
			||||||
 | 
					    var yDown = null;
 | 
				
			||||||
 | 
					    var xDiff = null;
 | 
				
			||||||
 | 
					    var yDiff = null;
 | 
				
			||||||
 | 
					    var timeDown = null;
 | 
				
			||||||
 | 
					    var startEl = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Fires swiped event if swipe detected on touchend
 | 
				
			||||||
 | 
					     * @param {object} e - browser event object
 | 
				
			||||||
 | 
					     * @returns {void}
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    function handleTouchEnd(e) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // if the user released on a different target, cancel!
 | 
				
			||||||
 | 
					        if (startEl !== e.target) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        var swipeThreshold = parseInt(getNearestAttribute(startEl, 'data-swipe-threshold', '20'), 10); // default 20px
 | 
				
			||||||
 | 
					        var swipeTimeout = parseInt(getNearestAttribute(startEl, 'data-swipe-timeout', '500'), 10);    // default 500ms
 | 
				
			||||||
 | 
					        var timeDiff = Date.now() - timeDown;
 | 
				
			||||||
 | 
					        var eventType = '';
 | 
				
			||||||
 | 
					        var changedTouches = e.changedTouches || e.touches || [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (Math.abs(xDiff) > Math.abs(yDiff)) { // most significant
 | 
				
			||||||
 | 
					            if (Math.abs(xDiff) > swipeThreshold && timeDiff < swipeTimeout) {
 | 
				
			||||||
 | 
					                if (xDiff > 0) {
 | 
				
			||||||
 | 
					                    eventType = 'swiped-left';
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                else {
 | 
				
			||||||
 | 
					                    eventType = 'swiped-right';
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else if (Math.abs(yDiff) > swipeThreshold && timeDiff < swipeTimeout) {
 | 
				
			||||||
 | 
					            if (yDiff > 0) {
 | 
				
			||||||
 | 
					                eventType = 'swiped-up';
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else {
 | 
				
			||||||
 | 
					                eventType = 'swiped-down';
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (eventType !== '') {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var eventData = {
 | 
				
			||||||
 | 
					                dir: eventType.replace(/swiped-/, ''),
 | 
				
			||||||
 | 
					                xStart: parseInt(xDown, 10),
 | 
				
			||||||
 | 
					                xEnd: parseInt((changedTouches[0] || {}).clientX || -1, 10),
 | 
				
			||||||
 | 
					                yStart: parseInt(yDown, 10),
 | 
				
			||||||
 | 
					                yEnd: parseInt((changedTouches[0] || {}).clientY || -1, 10)
 | 
				
			||||||
 | 
					            };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // fire `swiped` event event on the element that started the swipe
 | 
				
			||||||
 | 
					            startEl.dispatchEvent(new CustomEvent('swiped', { bubbles: true, cancelable: true, detail: eventData }));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // fire `swiped-dir` event on the element that started the swipe
 | 
				
			||||||
 | 
					            startEl.dispatchEvent(new CustomEvent(eventType, { bubbles: true, cancelable: true, detail: eventData }));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // reset values
 | 
				
			||||||
 | 
					        xDown = null;
 | 
				
			||||||
 | 
					        yDown = null;
 | 
				
			||||||
 | 
					        timeDown = null;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Records current location on touchstart event
 | 
				
			||||||
 | 
					     * @param {object} e - browser event object
 | 
				
			||||||
 | 
					     * @returns {void}
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    function handleTouchStart(e) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // if the element has data-swipe-ignore="true" we stop listening for swipe events
 | 
				
			||||||
 | 
					        if (e.target.getAttribute('data-swipe-ignore') === 'true') return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        startEl = e.target;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        timeDown = Date.now();
 | 
				
			||||||
 | 
					        xDown = e.touches[0].clientX;
 | 
				
			||||||
 | 
					        yDown = e.touches[0].clientY;
 | 
				
			||||||
 | 
					        xDiff = 0;
 | 
				
			||||||
 | 
					        yDiff = 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Records location diff in px on touchmove event
 | 
				
			||||||
 | 
					     * @param {object} e - browser event object
 | 
				
			||||||
 | 
					     * @returns {void}
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    function handleTouchMove(e) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!xDown || !yDown) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        var xUp = e.touches[0].clientX;
 | 
				
			||||||
 | 
					        var yUp = e.touches[0].clientY;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        xDiff = xDown - xUp;
 | 
				
			||||||
 | 
					        yDiff = yDown - yUp;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Gets attribute off HTML element or nearest parent
 | 
				
			||||||
 | 
					     * @param {object} el - HTML element to retrieve attribute from
 | 
				
			||||||
 | 
					     * @param {string} attributeName - name of the attribute
 | 
				
			||||||
 | 
					     * @param {any} defaultValue - default value to return if no match found
 | 
				
			||||||
 | 
					     * @returns {any} attribute value or defaultValue
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    function getNearestAttribute(el, attributeName, defaultValue) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // walk up the dom tree looking for data-action and data-trigger
 | 
				
			||||||
 | 
					        while (el && el !== document.documentElement) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var attributeValue = el.getAttribute(attributeName);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (attributeValue) {
 | 
				
			||||||
 | 
					                return attributeValue;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            el = el.parentNode;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return defaultValue;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}(window, document));
 | 
				
			||||||
| 
						 | 
					@ -1 +1 @@
 | 
				
			||||||
module.exports = '3.6.2';
 | 
					module.exports = '3.6.3';
 | 
				
			||||||
| 
						 | 
					@ -31,6 +31,7 @@
 | 
				
			||||||
		<script type="text/javascript" src="scripts/vendor/auto/jquery.js"></script>
 | 
							<script type="text/javascript" src="scripts/vendor/auto/jquery.js"></script>
 | 
				
			||||||
		<script type="text/javascript" src="scripts/vendor/jquery.autocomplete.min.js"></script>
 | 
							<script type="text/javascript" src="scripts/vendor/jquery.autocomplete.min.js"></script>
 | 
				
			||||||
		<script type="text/javascript" src="scripts/vendor/auto/nosleep.js"></script>
 | 
							<script type="text/javascript" src="scripts/vendor/auto/nosleep.js"></script>
 | 
				
			||||||
 | 
							<script type="text/javascript" src="scripts/vendor/auto/swiped-events.js"></script>
 | 
				
			||||||
		<script type="text/javascript" src="scripts/vendor/jquery.touchswipe.min.js"></script>
 | 
							<script type="text/javascript" src="scripts/vendor/jquery.touchswipe.min.js"></script>
 | 
				
			||||||
		<script type="text/javascript" src="scripts/index.js"></script>
 | 
							<script type="text/javascript" src="scripts/index.js"></script>
 | 
				
			||||||
		<script type="text/javascript" src="scripts/data/states.js"></script>
 | 
							<script type="text/javascript" src="scripts/data/states.js"></script>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue