add sauce
This commit is contained in:
		
				commit
				
					
						b856cb894f
					
				
			
		
					 48 changed files with 28950 additions and 0 deletions
				
			
		
							
								
								
									
										40
									
								
								js/alltimerecdata.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								js/alltimerecdata.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,40 @@ | |||
| // Last modified: 2021/03/19 09:15:55
 | ||||
| 
 | ||||
| 
 | ||||
| $.getJSON("data/websitedata.json", function (json) { | ||||
|     console.log("success"); | ||||
|     var cmx_data = json; | ||||
| 
 | ||||
|     $(document).prop('title', cmx_data['cmx-location'] + ' weather'); | ||||
|     $('meta[name=description]').attr('content', cmx_data['cmx-location'] + ' weather data'); | ||||
|     $('meta[name=keywords]').attr('content', $('meta[name=keywords]').attr('content') + ', ' + cmx_data['cmx-location'] + ' weather data'); | ||||
| 
 | ||||
|     $.getJSON("data/alltimerecdata.json", function (json) { | ||||
|         console.log("success"); | ||||
|         Object.keys(json).forEach(key => { | ||||
|             cmx_data[key] = json[key]; | ||||
|         }); | ||||
| 
 | ||||
|         // Update all spans with id beginning "cmx-"
 | ||||
|         $('span[id^=cmx-]').each(function () { | ||||
|             this.innerHTML = cmx_data[this.id]; | ||||
|         }); | ||||
|         // Update all spans with class beginning "cmx-"
 | ||||
|         $('span[class^=cmx-]').each(function () { | ||||
|             this.innerHTML = cmx_data[this.className]; | ||||
|         }); | ||||
|     }) | ||||
|         .fail(function (jqxhr, textStatus, error) { | ||||
|             var err = textStatus + ", " + error; | ||||
|             console.log("Request Failed: " + err); | ||||
|         }); | ||||
| 
 | ||||
| 
 | ||||
| }) | ||||
|     .fail(function (jqxhr, textStatus, error) { | ||||
|         var err = textStatus + ", " + error; | ||||
|         console.log("Request Failed: " + err); | ||||
|     }); | ||||
| 
 | ||||
| $(document).ready(function () { | ||||
| }); | ||||
							
								
								
									
										2468
									
								
								js/cumuluscharts.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2468
									
								
								js/cumuluscharts.js
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										1134
									
								
								js/historiccharts.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1134
									
								
								js/historiccharts.js
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										36
									
								
								js/menu.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								js/menu.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,36 @@ | |||
| /* | ||||
|  Menu configuration file for NEW CuMX template | ||||
|  Last modified: 2022/07/05 11:39:38 | ||||
|  menu.js - typical name, you define the one used in setpagedata.js | ||||
| 
 | ||||
|  It is STRONGLY RECOMMENDED that if you customise this file, you create a new file with a different name, e.g. mymenu.js | ||||
|  and change setpagedata.js to use that file. This will avoid your customisations being accidentally overwritten during upgrades | ||||
| 
 | ||||
|  Properties: | ||||
|    .menu             - can be 'b' (both menus), 'w' (wide menu ONLY), 'n' (narrow menu ONLY) | ||||
|    .new_window:true  - forces the link to open in new browser window | ||||
|    .forum:true       - flags a forum link menu item, it will use the url provided in CuMX config, if that is blank the menu item will be hidden | ||||
|    .webcam:true      - flags a webcam link menu item, it will use the url provided in CuMX config, if that is blank the menu item will be hidden | ||||
| */ | ||||
| 
 | ||||
| menuSrc = [ | ||||
| 	{title: "Now",          menu: "b",    url: "index.htm"}, | ||||
| 	{title: "Today",        menu: "b",    url: "today.htm"}, | ||||
| 	{title: "Yesterday",    menu: "b",    url: "yesterday.htm"}, | ||||
| 	{title: "Today-Yest",   menu: "b",    url: "todayyest.htm"}, | ||||
| 	{title: "Gauges",       menu: "b",    url: "gauges.htm"}, | ||||
| 	{title: "Records",      menu: "b",    submenu: true,       items: [ | ||||
| 		{title: "This Month",        menu: "b",    url: "thismonth.htm"}, | ||||
| 		{title: "This Year",         menu: "b",    url: "thisyear.htm"}, | ||||
| 		{title: "All Time",          menu: "b",    url: "record.htm"}, | ||||
| 		{title: "Monthly",           menu: "b",    url: "monthlyrecord.htm"} | ||||
| 	]}, | ||||
| 	{title: "Charts",    menu: "b",    submenu: true,    items: [ | ||||
| 		{title: "Trends",            menu: "b",    url: "trends.htm"}, | ||||
| 		{title: "Select-a-graph",    menu: "b",    url: "selectachart.htm"}, | ||||
| 		{title: "Historic",          menu: "b",    url: "historic.htm"} | ||||
| 	]}, | ||||
| 	{title: "Reports",   menu: "b",    url: "noaareport.htm"}, | ||||
| 	{title: "Forum",     menu: "b",    url: "#",    forum: true,    new_window: true}, | ||||
| 	{title: "Webcam",    menu: "b",    url: "#",    webcam: true} | ||||
| ]; | ||||
							
								
								
									
										44
									
								
								js/menuSample.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								js/menuSample.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,44 @@ | |||
| /* | ||||
|  An example extended/modified Menu configuration file for NEW CuMX template | ||||
|  Last modified: 2021/03/19 09:17:14 | ||||
|  menuSample.js - typical name, you define the one used in setpagedata.js | ||||
| 
 | ||||
|  Properties: | ||||
|    .menu             - can be 'b' (both menus), 'w' (wide menu ONLY), 'n' (narrow menu ONLY) | ||||
|    .new_window:true  - forces the link to open in new browser window | ||||
|    .forum:true       - flags a forum link menu item, it will use the url provided in CuMX config, if that is blank the menu item will be hidden | ||||
|    .webcam:true      - flags a webcam link menu item, it will use the url provided in CuMX config, if that is blank the menu item will be hidden | ||||
| */ | ||||
| 
 | ||||
| menuSrc = [ | ||||
| 	{ title: "Now", menu: "b", url: "index.htm" }, | ||||
| 	{ title: "Today", menu: "b", url: "today.htm" }, | ||||
| 	{ title: "Yesterday", menu: "b", url: "yesterday.htm" }, | ||||
| 	{ title: "Gauges", menu: "b", url: "gauges.htm" }, | ||||
| 	{ | ||||
| 		title: "Records", menu: "b", submenu: true, items: [ | ||||
| 			{ title: "This Month", menu: "b", url: "thismonth.htm" }, | ||||
| 			{ title: "This Year", menu: "b", url: "thisyear.htm" }, | ||||
| 			{ title: "All Time", menu: "b", url: "record.htm" }, | ||||
| 			{ title: "Monthly", menu: "b", url: "monthlyrecord.htm" } | ||||
| 		] | ||||
| 	}, | ||||
| 	{ | ||||
| 		title: "Charts", menu: "b", submenu: true, items: [ | ||||
| 			{ title: "Trends", menu: "b", url: "trends.htm" }, | ||||
| 			{ title: "Select-a-graph", menu: "b", url: "selectachart.htm" }, | ||||
| 			{ title: "Historic", menu: "b", url: "historic.htm" } | ||||
| 		] | ||||
| 	}, | ||||
| 	{ title: "Reports", menu: "b", url: "noaareport.htm" }, | ||||
| 	{ title: "Forum", menu: "n", url: "#", new_window: true }, | ||||
| 	{ title: "Webcam", menu: "n", url: "#", new_window: true }, | ||||
| 	{ | ||||
| 		title: "Other Links", menu: "w", submenu: true, items: [ | ||||
| 			{ title: "Cumulus Forum", menu: "w", url: "#", forum: true, new_window: true }, | ||||
| 			{ title: "Webcam", menu: "b", url: "#", webcam: true, new_window: true }, | ||||
| 			{ title: "My Cat", menu: "b", url: "mycatpage.htm" }, | ||||
| 			{ title: "Some Cat", menu: "b", url: "https://pixnio.com/free-images/2020/07/26/2020-07-26-08-52-19-1200x1200.jpg", new_window: true } | ||||
| 		] | ||||
| 	} | ||||
| ]; | ||||
							
								
								
									
										74
									
								
								js/monthlyrecdata.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								js/monthlyrecdata.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,74 @@ | |||
| // Last modified: 2022/07/27 15:35:57
 | ||||
| 
 | ||||
| $(document).ready(function() { | ||||
| 	dataLoadedPromise.then(function() { | ||||
| 		var yesterday = new Date() | ||||
| 		yesterday.setDate(yesterday.getDate() - 1) | ||||
| 		changeData(yesterday.getMonth()); | ||||
| 		$('#btnMon' + yesterday.getMonth()).attr('aria-pressed', true); | ||||
| 	}); | ||||
| }); | ||||
| 
 | ||||
| var monthnames = new Array("January","February","March","April","May","June","July","August","September","October","November","December"); | ||||
| 
 | ||||
| function changeData(month) { | ||||
| 	document.getElementById('MonthName').innerHTML = monthnames[month]; | ||||
| 	document.getElementById('TempH').innerHTML = cmx_data.monthlyrecs.hightemp[month]; | ||||
| 	document.getElementById('TempHT').innerHTML = cmx_data.monthlyrecs.hightempT[month]; | ||||
| 	document.getElementById('TempL').innerHTML = cmx_data.monthlyrecs.lowtemp[month]; | ||||
| 	document.getElementById('TempLT').innerHTML = cmx_data.monthlyrecs.lowtempT[month]; | ||||
| 	document.getElementById('DewPointH').innerHTML = cmx_data.monthlyrecs.highDP[month]; | ||||
| 	document.getElementById('DewPointHT').innerHTML = cmx_data.monthlyrecs.highDPT[month]; | ||||
| 	document.getElementById('DewPointL').innerHTML = cmx_data.monthlyrecs.lowDP[month]; | ||||
| 	document.getElementById('DewPointLT').innerHTML = cmx_data.monthlyrecs.lowDPT[month]; | ||||
| 	document.getElementById('AppTempH').innerHTML = cmx_data.monthlyrecs.highapptemp[month]; | ||||
| 	document.getElementById('AppTempHT').innerHTML = cmx_data.monthlyrecs.highapptempT[month]; | ||||
| 	document.getElementById('AppTempL').innerHTML = cmx_data.monthlyrecs.lowapptemp[month]; | ||||
| 	document.getElementById('AppTempLT').innerHTML = cmx_data.monthlyrecs.lowapptempT[month]; | ||||
| 	document.getElementById('FeelsLikeH').innerHTML = cmx_data.monthlyrecs.highfeelslike[month]; | ||||
| 	document.getElementById('FeelsLikeHT').innerHTML = cmx_data.monthlyrecs.highfeelslikeT[month]; | ||||
| 	document.getElementById('FeelsLikeL').innerHTML = cmx_data.monthlyrecs.lowfeelslike[month]; | ||||
| 	document.getElementById('FeelsLikeLT').innerHTML = cmx_data.monthlyrecs.lowfeelslikeT[month]; | ||||
| 	document.getElementById('WChillL').innerHTML = cmx_data.monthlyrecs.lowchill[month]; | ||||
| 	document.getElementById('WChillLT').innerHTML = cmx_data.monthlyrecs.lowchillT[month]; | ||||
| 	document.getElementById('HeatIndexH').innerHTML = cmx_data.monthlyrecs.highheatindex[month]; | ||||
| 	document.getElementById('HeatIndexHT').innerHTML = cmx_data.monthlyrecs.highheatindexT[month]; | ||||
| 	document.getElementById('MinTempH').innerHTML = cmx_data.monthlyrecs.highmintemp[month]; | ||||
| 	document.getElementById('MinTempHT').innerHTML = cmx_data.monthlyrecs.highmintempT[month]; | ||||
| 	document.getElementById('MaxTempL').innerHTML = cmx_data.monthlyrecs.lowmaxtemp[month]; | ||||
| 	document.getElementById('MaxTempLT').innerHTML = cmx_data.monthlyrecs.lowmaxtempT[month]; | ||||
| 	document.getElementById('HumH').innerHTML = cmx_data.monthlyrecs.highhum[month]; | ||||
| 	document.getElementById('HumHT').innerHTML = cmx_data.monthlyrecs.highhumT[month]; | ||||
| 	document.getElementById('HumL').innerHTML = cmx_data.monthlyrecs.lowhum[month]; | ||||
| 	document.getElementById('HumLT').innerHTML = cmx_data.monthlyrecs.lowhumT[month]; | ||||
| 	document.getElementById('HighDailyTempRange').innerHTML = cmx_data.monthlyrecs.hightemprange[month]; | ||||
| 	document.getElementById('HighDailyTempRangeT').innerHTML = cmx_data.monthlyrecs.hightemprangeT[month]; | ||||
| 	document.getElementById('LowDailyTempRange').innerHTML = cmx_data.monthlyrecs.lowtemprange[month]; | ||||
| 	document.getElementById('LowDailyTempRangeT').innerHTML = cmx_data.monthlyrecs.lowtemprangeT[month]; | ||||
| 	document.getElementById('RainRateH').innerHTML = cmx_data.monthlyrecs.rainrate[month]; | ||||
| 	document.getElementById('RainRateHT').innerHTML = cmx_data.monthlyrecs.rainrateT[month]; | ||||
| 	document.getElementById('HourlyRainH').innerHTML = cmx_data.monthlyrecs.hourlyrain[month]; | ||||
| 	document.getElementById('HourlyRainHT').innerHTML = cmx_data.monthlyrecs.hourlyrainT[month]; | ||||
| 	document.getElementById('Rain24HourH').innerHTML = cmx_data.monthlyrecs.rain24h[month]; | ||||
| 	document.getElementById('Rain24HourHT').innerHTML = cmx_data.monthlyrecs.rain24hT[month]; | ||||
| 	document.getElementById('DailyRainH').innerHTML = cmx_data.monthlyrecs.dailyrain[month]; | ||||
| 	document.getElementById('DailyRainHT').innerHTML = cmx_data.monthlyrecs.dailyrainT[month]; | ||||
| 	document.getElementById('MonthlyRainH').innerHTML = cmx_data.monthlyrecs.monthlyrain[month]; | ||||
| 	document.getElementById('MonthlyRainHT').innerHTML = cmx_data.monthlyrecs.monthlyrainT[month]; | ||||
| 	document.getElementById('LongestDryPeriod').innerHTML = cmx_data.monthlyrecs.dryperiod[month]; | ||||
| 	document.getElementById('LongestDryPeriodT').innerHTML = cmx_data.monthlyrecs.dryperiodT[month]; | ||||
| 	document.getElementById('LongestWetPeriod').innerHTML = cmx_data.monthlyrecs.wetperiod[month]; | ||||
| 	document.getElementById('LongestWetPeriodT').innerHTML = cmx_data.monthlyrecs.wetperiodT[month]; | ||||
| 	document.getElementById('GustH').innerHTML = cmx_data.monthlyrecs.highgust[month]; | ||||
| 	document.getElementById('GustHT').innerHTML = cmx_data.monthlyrecs.highgustT[month]; | ||||
| 	document.getElementById('WindH').innerHTML = cmx_data.monthlyrecs.highwind[month]; | ||||
| 	document.getElementById('WindHT').innerHTML = cmx_data.monthlyrecs.highwindT[month]; | ||||
| 	document.getElementById('WindRunH').innerHTML = cmx_data.monthlyrecs.highwindrun[month]; | ||||
| 	document.getElementById('WindRunHT').innerHTML = cmx_data.monthlyrecs.highwindrunT[month]; | ||||
| 	document.getElementById('PressL').innerHTML = cmx_data.monthlyrecs.lowpress[month]; | ||||
| 	document.getElementById('PressLT').innerHTML = cmx_data.monthlyrecs.lowpressT[month]; | ||||
| 	document.getElementById('PressH').innerHTML = cmx_data.monthlyrecs.highpress[month]; | ||||
| 	document.getElementById('PressHT').innerHTML = cmx_data.monthlyrecs.highpressT[month]; | ||||
| 	$('#btnArray').children('button').attr("aria-pressed", false); | ||||
| 	$('#btnMon' + month).attr('aria-pressed', true); | ||||
| } | ||||
							
								
								
									
										142
									
								
								js/noaarpts.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										142
									
								
								js/noaarpts.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,142 @@ | |||
| /*	---------------------------------------------------------- | ||||
|  *  noaarpts.js | ||||
|  *  Last modified: 2021/07/10 13:19:42 | ||||
|  *  Populates the dropdown menus using the records began date | ||||
|  * | ||||
|  * 	Requires jQuery | ||||
|  * 	----------------------------------------------------------*/ | ||||
| 
 | ||||
| let rptPath = 'data/reports/';  // Your path should have a trailing "/", eg. 'Reports/'
 | ||||
| let startYear, endYear; | ||||
| let startMonth, endMonth; | ||||
| let rptAvail = {}; | ||||
| 
 | ||||
| if (rptPath.length && rptPath.slice(-1) !== '/') | ||||
|     rptPath += '/'; | ||||
| 
 | ||||
| $(document).ready(function () { | ||||
|     dataLoadedPromise.then(function () { | ||||
|         startYear = cmx_data.recordsbegandateISO.split('-')[0] * 1; | ||||
|         startMonth = cmx_data.recordsbegandateISO.split('-')[1] * 1; | ||||
|         endYear = cmx_data.metdateyesterdayISO.split('-')[0] * 1; | ||||
|         endMonth = cmx_data.metdateyesterdayISO.split('-')[1] * 1; | ||||
| 
 | ||||
|         // This does the initial disable of out of range months this year
 | ||||
|         rptAvail[endYear] = []; | ||||
|         for (let m = 1; m < 13; m++) { | ||||
|             // greater than end month
 | ||||
|             rptAvail[endYear][m] = m <= endMonth; | ||||
|             // if start year is this year, then less start month
 | ||||
|             if (startYear == endYear) { | ||||
|                 rptAvail[endYear][m] = rptAvail[endYear][m] && m >= startMonth | ||||
|             } | ||||
|             $('#opt-' + m).prop('hidden', !rptAvail[endYear][m]); | ||||
|         } | ||||
| 
 | ||||
|         // get the current year report and display it whilst we sort out the rest in background
 | ||||
|         getYearRpt(endYear); | ||||
| 
 | ||||
|         // add the year select dropdown values, most recent first
 | ||||
|         for (let y = endYear; y >= startYear; y--) { | ||||
|             let option = $('<option />'); | ||||
|             option.html(y); | ||||
|             option.val(y); | ||||
| 
 | ||||
|             $('#year').append(option); | ||||
| 
 | ||||
|             rptAvail[y] = []; | ||||
| 
 | ||||
|             // The start and end years may be short, so no point in checking months that are out of range
 | ||||
|             let monSt, monEnd; | ||||
|             if (y == startYear || y == endYear) { | ||||
|                 monSt = y == startYear ? startMonth : 1; | ||||
|                 monEnd = y == endYear ? endMonth : 12; | ||||
|             } else { | ||||
|                 monSt = 1; | ||||
|                 monEnd = 12; | ||||
|             } | ||||
| 
 | ||||
|             // we need to process every month though, so we can disbale those out of range as well as MIA
 | ||||
|             for (let m = 1; m <= 12; m++) { | ||||
|                 // assume this month isn't available
 | ||||
|                 rptAvail[y][m] = false; | ||||
| 
 | ||||
|                 if (m >= monSt && m <= monEnd) { | ||||
|                     // assume it's there, then we only have to check for failure
 | ||||
|                     rptAvail[y][m] = true; | ||||
|                     // checking...
 | ||||
|                     $.ajax({ | ||||
|                         url: rptPath + 'NOAAMO' + pad2(m) + pad2(y - 2000) + '.txt', | ||||
|                         type: 'HEAD', | ||||
|                         error: function () { | ||||
|                             rptAvail[y][m] = false; | ||||
|                             // if we are in the year currently being displayed...
 | ||||
|                             if (y == $('#year').val()) { | ||||
|                                 // ...disable of any months that should be available but aren't
 | ||||
|                                 $('#opt-' + m).prop('hidden', true); | ||||
|                             } | ||||
|                         } | ||||
|                     }); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     }); | ||||
| }); | ||||
| 
 | ||||
| // pad two digit numbers with a leading zero
 | ||||
| let pad2 = function (num) { | ||||
|     return (num < 10 ? '0' : '') + num; | ||||
| } | ||||
| 
 | ||||
| // Script assumes that reports use the default name format
 | ||||
| let getMonRpt = function (month) { | ||||
|     let yr = $('#year').val(); | ||||
| 
 | ||||
|     // Is annual selected? If so, show the yearly report
 | ||||
|     if (month === '0') { | ||||
|         getYearRpt(yr); | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     reqRpt = rptPath + 'NOAAMO' + pad2(month) + pad2(yr - 2000) + '.txt'; | ||||
| 
 | ||||
|     $.ajax({ | ||||
|         url: reqRpt, | ||||
|         dataType: 'text', | ||||
|         success: function (data) { | ||||
|             $('#noaareport').text(data); | ||||
|         }, | ||||
|         error: function () { | ||||
|             alert('Did not find the required report\n\nPlease try another date'); | ||||
|         } | ||||
|     }); | ||||
| }; | ||||
| 
 | ||||
| // Script assumes that reports use the default name format
 | ||||
| let getYearRpt = function (yr) { | ||||
|     let reqRpt = rptPath + 'NOAAYR' + yr + '.txt'; | ||||
| 
 | ||||
|     // set the month buttons for the new year
 | ||||
|     for (let m = 1; m < 13; m++) { | ||||
|         $('#opt-' + m).prop('hidden', !rptAvail[yr][m]); | ||||
|     } | ||||
| 
 | ||||
|     // Do we have a month selected? If so show the month report for the new year
 | ||||
|     let mon = $('#month').val(); | ||||
|     if (mon != '0') { | ||||
|         getMonRpt(mon); | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     // get the report text
 | ||||
|     $.ajax({ | ||||
|         url: reqRpt, | ||||
|         dataType: 'text', | ||||
|         success: function (data) { | ||||
|             $('#noaareport').text(data); | ||||
|         }, | ||||
|         error: function () { | ||||
|             alert('Did not find the required report\n\nPlease try another date'); | ||||
|         } | ||||
|     }); | ||||
| }; | ||||
							
								
								
									
										1469
									
								
								js/selectachart.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1469
									
								
								js/selectachart.js
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										237
									
								
								js/setpagedata.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										237
									
								
								js/setpagedata.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,237 @@ | |||
| /*	---------------------------------------------------------- | ||||
|  * 	setpagedata.js		v:0.1.0		d:Mar 2021		a:Neil  Thomas | ||||
|  *  Last modified: 2022/07/02 17:55:10 | ||||
|  * 	Basic scripts for all new at-xxxx.html template pages. | ||||
|  *  Incorporating changes suggested by beteljuice | ||||
|  * 	Requires jQuery | ||||
|  * 	----------------------------------------------------------*/ | ||||
| 
 | ||||
| //	Global variables
 | ||||
| //	Changing these affects every page in the ai-interface
 | ||||
| //	All numbers are pixels.
 | ||||
| 
 | ||||
| let fixedHeader = false;	//	Use only true or false
 | ||||
| let fixedFooter = true;	//	Use only true or false
 | ||||
| let headerMargin = 20;	//	Gap between the header and the main body
 | ||||
| let footerMargin = 10;	//	Gap between the body and the footer
 | ||||
| let load_menu = "js/menu.js"; // menu file to load - path is relative to the page
 | ||||
| 
 | ||||
| 
 | ||||
| //	Thats the only changes you should make unless you know better!
 | ||||
| 
 | ||||
| let cmx_data; | ||||
| let menu = mobileMenu = ""; | ||||
| let initialLoad = true; | ||||
| 
 | ||||
| window.onresize = function () { | ||||
| 	borderpatrol(); | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| let borderpatrol = function () { | ||||
| 	var contentMargin = $("#Header").outerHeight(true); | ||||
| 	if ($('#Header').hasClass('w3-top')) { | ||||
| 		$('#Content').css('margin-top', headerMargin + contentMargin + 'px'); | ||||
| 	} else { | ||||
| 		$('#Content').css('margin-top', headerMargin + 'px'); | ||||
| 	} | ||||
| 	contentMargin = $('#Footer').outerHeight(true); | ||||
| 	if ($('#Footer').hasClass('w3-bottom')) { | ||||
| 		$('#Content').css('margin-bottom', footerMargin + contentMargin + 'px'); | ||||
| 	} else { | ||||
| 		$('#Content').css('margin-bottom', footerMargin + 'px'); | ||||
| 	} | ||||
| }; // end function
 | ||||
| 
 | ||||
| let createMainMenu = function (src, submenu) { | ||||
| 	let classMain = 'w3-bar-item w3-btn w3-theme-hvr at-slim w3-hide-small w3-hide-medium'; | ||||
| 	let classMainSub = 'w3-bar-item w3-btn w3-theme-d5-hvr at-slim'; | ||||
| 
 | ||||
| 	src.forEach(function (itm) { | ||||
| 		if (itm.menu !== 'n') {	// wanted in main menu
 | ||||
| 			if (itm.submenu) { // drop down
 | ||||
| 				menu += '<div class="w3-dropdown-hover">\n'; | ||||
| 				menu += '\t<button id="' + itm.title.replace(/ /g, "_") + '" type="button" class="w3-btn w3-theme-hvr at-slim w3-hide-medium w3-hide-small" onclick="dropDown(this)" aria-expanded="false">' + itm.title + '…</button>\n'; | ||||
| 				menu += '\t<div id="sub_' + itm.title.replace(/ /g, "_") + '" class="w3-dropdown-content w3-bar-block w3-theme">\n'; | ||||
| 				// add the sub-menu items
 | ||||
| 				createMainMenu(itm.items, true); | ||||
| 				menu += '\t\n</div></div>\n'; | ||||
| 			} else { | ||||
| 				infill = (itm.new_window ? ' target="_blank"' : ''); | ||||
| 
 | ||||
| 				if (itm.forum) { | ||||
| 					if (cmx_data.forumurl != '') { | ||||
| 						menu += '<a href="' + cmx_data.forumurl + '"' + infill + ' class="' + (submenu ? classMainSub : classMain) + '">' + itm.title + '</a>\n'; | ||||
| 					} | ||||
| 				} else if (itm.webcam) { | ||||
| 					if (cmx_data.webcamurl != '') { | ||||
| 						menu += '<a href="' + cmx_data.webcamurl + '"' + infill + ' class="' + (submenu ? classMainSub : classMain) + '">' + itm.title + '</a>\n'; | ||||
| 					} | ||||
| 				} else { | ||||
| 					menu += '<a href="' + itm.url + '"' + infill + ' class="' + (submenu ? classMainSub : classMain) + '">' + itm.title + '</a>\n'; | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	}); | ||||
| 
 | ||||
| 	// if we are processing a sub menu, return to the main loop
 | ||||
| 	if (submenu) | ||||
| 		return; | ||||
| 
 | ||||
| 	menu += '<button class="w3-bar-item w3-btn w3-theme-hvr at-slim w3-hide-large w3-right" onClick="toggleMenu(\'Main_Menu_Mobile\')">Menu  ☰</button>'; | ||||
| 
 | ||||
| 	// stick the menus into the page
 | ||||
| 	$('#Main_Menu').html(menu); | ||||
| }; | ||||
| 
 | ||||
| let createMobileMenu = function (src, submenu) { | ||||
| 	let classMobile = 'w3-bar-item w3-btn w3-theme-hvr at-slim'; | ||||
| 	let styleMobile = submenu ? 'padding-left: 30px !important;' : ''; | ||||
| 
 | ||||
| 	src.forEach(function (itm) { | ||||
| 		if (itm.menu !== 'w') { // wanted in narrow menu
 | ||||
| 			// mobile menu
 | ||||
| 			if (itm.submenu) { | ||||
| 				mobileMenu += '\t<button class="w3-btn at-slim" style="cursor: default;">' + itm.title + '…</button>\n'; | ||||
| 				createMobileMenu(itm.items, true); | ||||
| 			} else { | ||||
| 				infill = (itm.new_window ? " target='_blank'" : ""); | ||||
| 				if (itm.forum && cmx_data.forumurl != '') { | ||||
| 					mobileMenu += '<a href="' + cmx_data.forumurl + '"' + infill + ' class="' + classMobile + '" style= "' + styleMobile + '">' + itm.title + '</a>\n'; | ||||
| 				} else if (itm.webcam && cmx_data.webcamurl != '') { | ||||
| 					mobileMenu += '<a href="' + cmx_data.webcamurl + '"' + infill + ' class="' + classMobile + '" style= "' + styleMobile + '">' + itm.title + '</a>\n'; | ||||
| 				} else { | ||||
| 					mobileMenu += '<a href="' + itm.url + '"' + infill + ' class="' + classMobile + '" style= "' + styleMobile + '">' + itm.title + '</a>\n'; | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	}); | ||||
| 
 | ||||
| 	// if we are processing a sub menu, return to the main loop
 | ||||
| 	if (submenu) | ||||
| 		return; | ||||
| 
 | ||||
| 	// stick the menus into the page
 | ||||
| 	$('#Main_Menu_Mobile').html(mobileMenu); | ||||
| }; | ||||
| 
 | ||||
| let setupPage = function () { | ||||
| 
 | ||||
| 	//	static header & footer
 | ||||
| 	if (fixedHeader) { | ||||
| 		$('#Header').addClass('w3-top'); | ||||
| 	} else { | ||||
| 		$('#Header').removeClass('w3-top'); | ||||
| 	} | ||||
| 	if (fixedFooter) { | ||||
| 		$('#Footer').addClass('w3-bottom'); | ||||
| 	} else { | ||||
| 		$('#Footer').removeClass('w3-bottom'); | ||||
| 	} | ||||
| 	//	Page content top and bottom margins
 | ||||
| 	borderpatrol(); | ||||
| }; | ||||
| 
 | ||||
| let toggleMenu = function (menuid) { | ||||
| 	$('#' + menuid).toggleClass('w3-show'); | ||||
| }; | ||||
| 
 | ||||
| let dropDown = function (panel) { | ||||
| 	var btn = $('#' + panel.id); | ||||
| 	var sub = $('#sub_' + panel.id); | ||||
| 	if (sub.hasClass('w3-show')) { | ||||
| 		sub.removeClass('w3-show'); | ||||
| 		btn.attr('aria-expanded', false); | ||||
| 	} else { | ||||
| 		// Close other dropdowns first
 | ||||
| 		$('.w3-dropdown-content').removeClass('w3-show'); | ||||
| 		sub.addClass('w3-show'); | ||||
| 		btn.attr('aria-expanded', true); | ||||
| 	} | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| let getPageData = function (resolve, reject) { | ||||
| 	$.getJSON('data/websitedata.json?_=' + Date.now(), function (json) { | ||||
| 		console.log('Data success'); | ||||
| 		// auto update every 60 seconds, only the index and today pages
 | ||||
| 		// Some sites may have index.htm as the default page, and thus not have a page name
 | ||||
| 		let pageName = window.location.href.split('/').pop().split('.')[0]; | ||||
| 		if (pageName == 'index' || pageName == 'today' || pageName == 'todayYest' || pageName == '') { | ||||
| 			setTimeout(function () { | ||||
| 				getPageData(null, null); | ||||
| 			}, 60 * 1000); | ||||
| 		} | ||||
| 
 | ||||
| 		cmx_data = json; | ||||
| 
 | ||||
| 		// Set some header stuff
 | ||||
| 		$(document).prop('title', cmx_data.location + ' weather'); | ||||
| 		$('meta[name=description]').attr('content', cmx_data.location + ' weather data'); | ||||
| 		$('meta[name=keywords]').attr('content', $('meta[name=keywords]').attr('content') + ', ' + cmx_data.location); | ||||
| 
 | ||||
| 		// do the menus
 | ||||
| 		if (initialLoad) { | ||||
| 			$.getScript(load_menu, function () { // path is relative to the page - allows for multiple vars to be available and ignores comments ;-)
 | ||||
| 				createMainMenu(menuSrc, false); | ||||
| 				createMobileMenu(menuSrc, false); | ||||
| 				borderpatrol(); // duplicated here to ensure things OK if initial menu wrapped
 | ||||
| 			}); | ||||
| 			initialLoad = false; | ||||
| 		} | ||||
| 
 | ||||
| 		// Show/hide Apparent/Feels Like
 | ||||
| 		if (cmx_data.options.useApparent === "1") { | ||||
| 			$('[data-cmx-apparent]').removeClass('w3-hide'); | ||||
| 			$('[data-cmx-feels]').addClass('w3-hide'); | ||||
| 		} | ||||
| 
 | ||||
| 		if (cmx_data.options.showSolar === "1") { | ||||
| 			$('[data-cmx-solar]').removeClass('w3-hide'); | ||||
| 		} else { | ||||
| 			$('[data-cmx-solar-gauge]').addClass('w3-hide'); // Gauges do not draw correctly if hidden from the start
 | ||||
| 		} | ||||
| 
 | ||||
| 		if (cmx_data.options.showUV === "1") { | ||||
| 			$('[data-cmx-uv]').removeClass('w3-hide'); | ||||
| 		} else { | ||||
| 			$('[data-cmx-uv-gauge]').addClass('w3-hide'); // Gauges do not draw correctly if hidden from the start
 | ||||
| 		} | ||||
| 
 | ||||
| 		// Update all spans having data-cmxdata with data values
 | ||||
| 		$('[data-cmxdata]').each(function () { | ||||
| 			this.innerHTML = cmx_data[this.dataset.cmxdata]; | ||||
| 		}); | ||||
| 
 | ||||
| 		if (cmx_data.currcond != '') { | ||||
| 			$('#currCond').removeClass('w3-hide'); | ||||
| 		} | ||||
| 
 | ||||
| 		// Use this to trigger other scripts on the page
 | ||||
| 		if (null !== resolve) { | ||||
| 			resolve(); | ||||
| 		} | ||||
| 	}) | ||||
| 		.fail(function (jqxhr, textStatus, error) { | ||||
| 			let err = textStatus + ', ' + error; | ||||
| 			console.log('Data Request Failed: ' + err); | ||||
| 
 | ||||
| 			if (null !== reject) { | ||||
| 				reject(); | ||||
| 			} | ||||
| 
 | ||||
| 			// lets try that again
 | ||||
| 			setTimeout(function () { | ||||
| 				getPageData(resolve, reject); | ||||
| 			}, 5000); | ||||
| 		}); | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| // Get the main page data
 | ||||
| let dataLoadedPromise = new Promise((myResolve, myReject) => { | ||||
| 	$(document).ready(function () { | ||||
| 		setupPage(); | ||||
| 		getPageData(myResolve, myReject); | ||||
| 	}); | ||||
| }); | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 floppydiskette
				floppydiskette