This commit is contained in:
boris 2023-08-14 01:21:46 +02:00
commit 776d331412
45 changed files with 28718 additions and 0 deletions

View File

40
webfiles/css/colours.css Normal file
View File

@ -0,0 +1,40 @@
/* -------------------------------------------------------------------
* Colours for the CumulusMX Alternative Interface
* Produced using w3Schools colour generator
*
* Key Colour: #4e5b31
*
* Theme modified to change font 'color's to either lightest or darkest
* theme colour. Also modified names for text, borders & hover colours.
* I have added a few extras. Not all are used.
* Neil Thomas
------------------------------------------------------------------*/
/* Check that your theme is named as shown below */
.w3-theme-white {color:#2e5473; background-color:#FFFFFF;}
.w3-theme-l5 {color:#2e5473; background-color:#f7fafc;}
.w3-theme-l4 {color:#2e5473; background-color:#e4edf4;}
.w3-theme-l3 {color:#2e5473 ; background-color:#c9dbe9;}
.w3-theme-l2 {color:#2e5473 ; background-color:#aec9df;}
.w3-theme-l1 {color:#2e5473 ; background-color:#93b7d4;}
.w3-theme-d1 {color:#f7fafc ; background-color:#6195c0;}
.w3-theme-d2 {color:#f7fafc ; background-color:#4a86b7;}
.w3-theme-d3 {color:#f7fafc ; background-color:#4075a1;}
.w3-theme-d4 {color:#f7fafc ; background-color:#37658a;}
.w3-theme-d5 {color:#f7fafc ; background-color:#2e5473;}
.w3-theme-light {color:#2e5473 ; background-color:#f7fafc;}
.w3-theme-dark {color:#f7fafc ; background-color:#2e5473;}
.w3-theme-action {color:#f7fafc ; background-color:#2e5473;}
.w3-theme {color:#f7fafc ; background-color:#78a5c9;}
.w3-theme-txt {color:#78a5c9;}
.w3-theme-bdr {border-color:#78a5c9;}
.w3-theme-d5-bdr {border-color:#2e5473;}
.w3-theme-l1-bdr {border-color:#f7fafc;}
.w3-theme-hvr:hover {color:#f7fafc; background-color:#78a5c9;}
.w3-theme-d5-hvr:hover {color:#f7fafc; background-color:#2e5473;}
.w3-theme-txt-hvr:hover {color:#78a5c9;}
.w3-theme-bdr-hvr:hover {border-color:#78a5c9;}

101
webfiles/css/gauges.css Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,215 @@
/* -----------------------------------
* Styles for CumulusMX Templates
Last modified: 2021/03/19 09:23:15
* ----------------------------------*/
html, body, p, h1, h2, h3, h4, h5, h6, li, td, th {
font-family: 'Rosario', sans-serif;
}
p {
font-size: 15px;
}
#Header {
border-style: solid;
border-width: 0 0 10px 0;
}
.site-width {
max-width:1140px;
margin:auto;
}
.graph-width {
max-width:1250px;
margin:auto;
}
#Footer {
border-width:5px 0 0 0;
border-style: solid;
}
.logo {
max-width:250px;
margin: 5px 0 5px 16px;
}
.subText {
font-size: 80% !important;
font-weight:400;
}
body {
background-image: url('../images/picture.jpg');
background-position: bottom left;
background-repeat: no-repeat;
background-attachment: fixed;
}
.statusPanel h5 {
margin-bottom: -5px;
}
/* -------------------------------------
* Flex boxes
* -------------------------------------*/
.at-flex-start { display:flex;}
.at-flex-end {
display:flex;
justify-content: flex-end;
flex-wrap:wrap;
}
.at-flex-justify {
display:flex;
justify-content: space-around;
flex-wrap:wrap;
}
.at-flex-between {
display:flex;
justify-content: space-between;
flex-wrap:wrap;
}
.at-flex-bottom,
.at-flex-items-bottom {
align-items: flex-end;
}
.at-flex-items-center {
align-items: center;
}
/* --------------------------------------------------
* Menu enhancements
* --------------------------------------------------*/
#Main_Menu {
margin-bottom: 4px;
border-width:2px 0 0 0 ;
border-style: solid;
min-height: 32px;
}
.at-slim {
padding: 4px 14px!important;
}
.at-divider {
margin: 0 5px;
color:#F80;
}
.at-spacer {
min-height:2em;
}
.at-menu-lable {
display:block;
width:100%;
font-size: 13px;
font-style: italic;
padding-bottom: 2px!important;
padding-top:4px!important;
border-bottom: 1px dotted #c2cfa5!important;
}
.at-menu-bar {
display:block;
height: 2px;
padding: 0 2px!important;
}
.at-indent {
padding-left: 40px!important;
}
/* -------------------------------
* Model enhancements
* ------------------------------*/
.w3-modal-content {
margin-top:10%;
border-radius: 8px;
}
.w3-modal header { border-radius: 8px 8px 0 0;}
.w3-modal footer { border-radius: 0 0 8px 8px;}
.w3-modal .w3-btn { border-radius: 0 8px;}
/* ----------------------------------------
* Media enhancements
* ---------------------------------------*/
@media screen and (max-width:780px) {
#Footer { position: unset; }
#Content {
/*margin-top: 170px!important;*/
margin-bottom: 5px!important;
}
.statusPanel {
text-align:center!important;
margin:auto!important;
}
}
@media screen and (max-height:768px) {
#Footer { position: unset; item: center;}
#Content {
margin-bottom: 5px!important;
}
}
/* --------------------------------------
* LED enhancements
* -------------------------------------*/
.at-led-round {
display:inline-block;
height: 1.2em;
width: 1.2em;
margin: 0 0.5em -3px 0.5em;
border-radius: 50%;
background-color: #888;
box-shadow: inset 3px 3px 2px rgba(220, 220, 220, 0.6), inset -2px -2px 2px rgba(32, 32, 32,0.6);
}
.at-led-block {
display:inline-block;
height: 1.2em;
width: 1.2em;
margin: 0 0.5em -3px 0.5em;
background-color: #888;
box-shadow: inset 3px 3px 2px rgba(220, 220, 220, 0.6), inset -2px -2px 2px rgba(32, 32, 32,0.6);
}
.at-led-brick {
display:inline-block;
height:0.8em;
width:1.6em;
margin:0 0.5em -3px 0.5em;
background-color: #888;
box-shadow: inset 3px 3px 2px rgba(220, 220, 220, 0.6), inset -2px -2px 2px rgba(32, 32, 32,0.6);
}
.at-led-oval {
display:inline-block;
height:1em;
width:2em;
margin:0 0.5em -3px 0.5em;
border-radius: 50%;
background-color: #888;
box-shadow: inset 3px 3px 2px rgba(220, 220, 220, 0.6), inset -2px -2px 2px rgba(32, 32, 32,0.6);
}
.at-led-green {
background-color: #0b0;
}
.at-led-flash-red {
animation: flashR 1s infinite;
}
@keyframes flashR {
0%, 60% {background-color: #f00;}
61%,100% {background-color: #800;}
}

151
webfiles/css/w3Pro.css Normal file
View File

@ -0,0 +1,151 @@
/* W3PRO.CSS 4.15 December 2020 by Jan Egil and Borge Refsnes */
html{box-sizing:border-box}*,*:before,*:after{box-sizing:inherit}
/* Extract from normalize.css by Nicolas Gallagher and Jonathan Neal git.io/normalize */
html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}
article,aside,details,figcaption,figure,footer,header,main,menu,nav,section{display:block}summary{display:list-item}
audio,canvas,progress,video{display:inline-block}progress{vertical-align:baseline}
audio:not([controls]){display:none;height:0}[hidden],template{display:none}
a{background-color:transparent}a:active,a:hover{outline-width:0}
abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}
b,strong{font-weight:bolder}dfn{font-style:italic}mark{background:#ff0;color:#000}
small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
sub{bottom:-0.25em}sup{top:-0.5em}figure{margin:1em 40px}img{border-style:none}
code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}hr{box-sizing:content-box;height:0;overflow:visible}
button,input,select,textarea,optgroup{font:inherit;margin:0}optgroup{font-weight:bold}
button,input{overflow:visible}button,select{text-transform:none}
button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}
button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}
button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}
fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em}
legend{color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto}
[type=checkbox],[type=radio]{padding:0}
[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}
[type=search]{-webkit-appearance:textfield;outline-offset:-2px}
[type=search]::-webkit-search-decoration{-webkit-appearance:none}
::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}
/* End extract */
html,body{font-family:Verdana,sans-serif;font-size:15px;line-height:1.5}html{overflow-x:hidden}
h1{font-size:36px}h2{font-size:30px}h3{font-size:24px}h4{font-size:20px}h5{font-size:18px}h6{font-size:16px}
.w3-serif{font-family:serif}.w3-sans-serif{font-family:sans-serif}.w3-cursive{font-family:cursive}.w3-monospace{font-family:monospace}
h1,h2,h3,h4,h5,h6{font-family:"Segoe UI",Arial,sans-serif;font-weight:400;margin:10px 0}.w3-wide{letter-spacing:4px}
hr{border:0;border-top:1px solid #eee;margin:20px 0}
.w3-image{max-width:100%;height:auto}img{vertical-align:middle}a{color:inherit}
.w3-table,.w3-table-all{border-collapse:collapse;border-spacing:0;width:100%;display:table}.w3-table-all{border:1px solid #ccc}
.w3-bordered tr,.w3-table-all tr{border-bottom:1px solid #ddd}.w3-striped tbody tr:nth-child(even){background-color:#f1f1f1}
.w3-table-all tr:nth-child(odd){background-color:#fff}.w3-table-all tr:nth-child(even){background-color:#f1f1f1}
.w3-hoverable tbody tr:hover,.w3-ul.w3-hoverable li:hover{background-color:#ccc}.w3-centered tr th,.w3-centered tr td{text-align:center}
.w3-table td,.w3-table th,.w3-table-all td,.w3-table-all th{padding:8px 8px;display:table-cell;text-align:left;vertical-align:top}
.w3-table th:first-child,.w3-table td:first-child,.w3-table-all th:first-child,.w3-table-all td:first-child{padding-left:16px}
.w3-btn,.w3-button{border:none;display:inline-block;padding:8px 16px;vertical-align:middle;overflow:hidden;text-decoration:none;color:inherit;background-color:inherit;text-align:center;cursor:pointer;white-space:nowrap}
.w3-btn:hover{box-shadow:0 8px 16px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)}
.w3-btn,.w3-button{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
.w3-disabled,.w3-btn:disabled,.w3-button:disabled{cursor:not-allowed;opacity:0.3}.w3-disabled *,:disabled *{pointer-events:none}
.w3-btn.w3-disabled:hover,.w3-btn:disabled:hover{box-shadow:none}
.w3-badge,.w3-tag{background-color:#000;color:#fff;display:inline-block;padding-left:8px;padding-right:8px;text-align:center}.w3-badge{border-radius:50%}
.w3-ul{list-style-type:none;padding:0;margin:0}.w3-ul li{padding:8px 16px;border-bottom:1px solid #ddd}.w3-ul li:last-child{border-bottom:none}
.w3-tooltip,.w3-display-container{position:relative}.w3-tooltip .w3-text{display:none}.w3-tooltip:hover .w3-text{display:inline-block}
.w3-ripple:active{opacity:0.5}.w3-ripple{transition:opacity 0s}
.w3-input{padding:8px;display:block;border:none;border-bottom:1px solid #ccc;width:100%}
.w3-select{padding:9px 0;width:100%;border:none;border-bottom:1px solid #ccc}
.w3-dropdown-click,.w3-dropdown-hover{position:relative;display:inline-block;cursor:pointer}
.w3-dropdown-hover:hover .w3-dropdown-content{display:block}
.w3-dropdown-hover:first-child,.w3-dropdown-click:hover{background-color:#ccc;color:#000}
.w3-dropdown-hover:hover > .w3-button:first-child,.w3-dropdown-click:hover > .w3-button:first-child{background-color:#ccc;color:#000}
.w3-dropdown-content{cursor:auto;color:#000;background-color:#fff;display:none;position:absolute;min-width:160px;margin:0;padding:0;z-index:1}
/*.w3-check,.w3-radio{width:24px;height:24px;position:relative;top:6px}*/
.w3-check,.w3-radio{width:24px;position:relative;}
.w3-sidebar{height:100%;width:200px;background-color:#fff;position:fixed!important;z-index:1;overflow:auto}
.w3-bar-block .w3-dropdown-hover,.w3-bar-block .w3-dropdown-click{width:100%}
.w3-bar-block .w3-dropdown-hover .w3-dropdown-content,.w3-bar-block .w3-dropdown-click .w3-dropdown-content{min-width:100%}
.w3-bar-block .w3-dropdown-hover .w3-button,.w3-bar-block .w3-dropdown-click .w3-button{width:100%;text-align:left;padding:8px 16px}
.w3-main,#main{transition:margin-left .4s}
.w3-modal{z-index:3;display:none;padding-top:100px;position:fixed;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:rgb(0,0,0);background-color:rgba(0,0,0,0.4)}
.w3-modal-content{margin:auto;background-color:#fff;position:relative;padding:0;outline:0;width:600px}
.w3-bar{width:100%;overflow:hidden}.w3-center .w3-bar{display:inline-block;width:auto}
.w3-bar .w3-bar-item{padding:8px 16px;float:left;width:auto;border:none;display:block;outline:0}
.w3-bar .w3-dropdown-hover,.w3-bar .w3-dropdown-click{position:static;float:left}
.w3-bar .w3-button{white-space:normal}
.w3-bar-block .w3-bar-item{width:100%;display:block;padding:8px 16px;text-align:left;border:none;white-space:normal;float:none;outline:0}
.w3-bar-block.w3-center .w3-bar-item{text-align:center}.w3-block{display:block;width:100%}
.w3-responsive{display:block;overflow-x:auto}
.w3-container:after,.w3-container:before,.w3-panel:after,.w3-panel:before,.w3-row:after,.w3-row:before,.w3-row-padding:after,.w3-row-padding:before,
.w3-cell-row:before,.w3-cell-row:after,.w3-clear:after,.w3-clear:before,.w3-bar:before,.w3-bar:after{content:"";display:table;clear:both}
.w3-col,.w3-half,.w3-third,.w3-twothird,.w3-threequarter,.w3-quarter{float:left;width:100%}
.w3-col.s1{width:8.33333%}.w3-col.s2{width:16.66666%}.w3-col.s3{width:24.99999%}.w3-col.s4{width:33.33333%}
.w3-col.s5{width:41.66666%}.w3-col.s6{width:49.99999%}.w3-col.s7{width:58.33333%}.w3-col.s8{width:66.66666%}
.w3-col.s9{width:74.99999%}.w3-col.s10{width:83.33333%}.w3-col.s11{width:91.66666%}.w3-col.s12{width:99.99999%}
@media (min-width:601px){.w3-col.m1{width:8.33333%}.w3-col.m2{width:16.66666%}.w3-col.m3,.w3-quarter{width:24.99999%}.w3-col.m4,.w3-third{width:33.33333%}
.w3-col.m5{width:41.66666%}.w3-col.m6,.w3-half{width:49.99999%}.w3-col.m7{width:58.33333%}.w3-col.m8,.w3-twothird{width:66.66666%}
.w3-col.m9,.w3-threequarter{width:74.99999%}.w3-col.m10{width:83.33333%}.w3-col.m11{width:91.66666%}.w3-col.m12{width:99.99999%}}
@media (min-width:993px){.w3-col.l1{width:8.33333%}.w3-col.l2{width:16.66666%}.w3-col.l3{width:24.99999%}.w3-col.l4{width:33.33333%}
.w3-col.l5{width:41.66666%}.w3-col.l6{width:49.99999%}.w3-col.l7{width:58.33333%}.w3-col.l8{width:66.66666%}
.w3-col.l9{width:74.99999%}.w3-col.l10{width:83.33333%}.w3-col.l11{width:91.66666%}.w3-col.l12{width:99.99999%}}
.w3-rest{overflow:hidden}.w3-stretch{margin-left:-16px;margin-right:-16px}
.w3-content,.w3-auto{margin-left:auto;margin-right:auto}.w3-content{max-width:980px}.w3-auto{max-width:1140px}
.w3-cell-row{display:table;width:100%}.w3-cell{display:table-cell}
.w3-cell-top{vertical-align:top}.w3-cell-middle{vertical-align:middle}.w3-cell-bottom{vertical-align:bottom}
.w3-hide{display:none!important}.w3-show-block,.w3-show{display:block!important}.w3-show-inline-block{display:inline-block!important}
@media (max-width:1205px){.w3-auto{max-width:95%}}
@media (max-width:600px){.w3-modal-content{margin:0 10px;width:auto!important}.w3-modal{padding-top:30px}
.w3-dropdown-hover.w3-mobile .w3-dropdown-content,.w3-dropdown-click.w3-mobile .w3-dropdown-content{position:relative}
.w3-hide-small{display:none!important}.w3-mobile{display:block;width:100%!important}.w3-bar-item.w3-mobile,.w3-dropdown-hover.w3-mobile,.w3-dropdown-click.w3-mobile{text-align:center}
.w3-dropdown-hover.w3-mobile,.w3-dropdown-hover.w3-mobile .w3-btn,.w3-dropdown-hover.w3-mobile .w3-button,.w3-dropdown-click.w3-mobile,.w3-dropdown-click.w3-mobile .w3-btn,.w3-dropdown-click.w3-mobile .w3-button{width:100%}}
@media (max-width:768px){.w3-modal-content{width:500px}.w3-modal{padding-top:50px}}
@media (min-width:993px){.w3-modal-content{width:900px}.w3-hide-large{display:none!important}.w3-sidebar.w3-collapse{display:block!important}}
@media (max-width:992px) and (min-width:601px){.w3-hide-medium{display:none!important}}
@media (max-width:992px){.w3-sidebar.w3-collapse{display:none}.w3-main{margin-left:0!important;margin-right:0!important}.w3-auto{max-width:100%}}
.w3-top,.w3-bottom{position:fixed;width:100%;z-index:1}.w3-top{top:0}.w3-bottom{bottom:0}
.w3-overlay{position:fixed;display:none;width:100%;height:100%;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,0.5);z-index:2}
.w3-display-topleft{position:absolute;left:0;top:0}.w3-display-topright{position:absolute;right:0;top:0}
.w3-display-bottomleft{position:absolute;left:0;bottom:0}.w3-display-bottomright{position:absolute;right:0;bottom:0}
.w3-display-middle{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%)}
.w3-display-left{position:absolute;top:50%;left:0%;transform:translate(0%,-50%);-ms-transform:translate(-0%,-50%)}
.w3-display-right{position:absolute;top:50%;right:0%;transform:translate(0%,-50%);-ms-transform:translate(0%,-50%)}
.w3-display-topmiddle{position:absolute;left:50%;top:0;transform:translate(-50%,0%);-ms-transform:translate(-50%,0%)}
.w3-display-bottommiddle{position:absolute;left:50%;bottom:0;transform:translate(-50%,0%);-ms-transform:translate(-50%,0%)}
.w3-display-container:hover .w3-display-hover{display:block}.w3-display-container:hover span.w3-display-hover{display:inline-block}.w3-display-hover{display:none}
.w3-display-position{position:absolute}
.w3-circle{border-radius:50%}
.w3-round-small{border-radius:2px}.w3-round,.w3-round-medium{border-radius:4px}.w3-round-large{border-radius:8px}.w3-round-xlarge{border-radius:16px}.w3-round-xxlarge{border-radius:32px}
.w3-row-padding,.w3-row-padding>.w3-half,.w3-row-padding>.w3-third,.w3-row-padding>.w3-twothird,.w3-row-padding>.w3-threequarter,.w3-row-padding>.w3-quarter,.w3-row-padding>.w3-col{padding:0 8px}
.w3-container,.w3-panel{padding:0.01em 16px}.w3-panel{margin-top:16px;margin-bottom:16px}
.w3-code,.w3-codespan{font-family:Consolas,"courier new";font-size:16px}
.w3-code{width:auto;background-color:#fff;padding:8px 12px;border-left:4px solid #4CAF50;word-wrap:break-word}
.w3-codespan{color:crimson;background-color:#f1f1f1;padding-left:4px;padding-right:4px;font-size:110%}
.w3-card,.w3-card-2{box-shadow:0 2px 5px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12)}
.w3-card-4,.w3-hover-shadow:hover{box-shadow:0 4px 10px 0 rgba(0,0,0,0.2),0 4px 20px 0 rgba(0,0,0,0.19)}
.w3-spin{animation:w3-spin 2s infinite linear}@keyframes w3-spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}
.w3-animate-fading{animation:fading 10s infinite}@keyframes fading{0%{opacity:0}50%{opacity:1}100%{opacity:0}}
.w3-animate-opacity{animation:opac 0.8s}@keyframes opac{from{opacity:0} to{opacity:1}}
.w3-animate-top{position:relative;animation:animatetop 0.4s}@keyframes animatetop{from{top:-300px;opacity:0} to{top:0;opacity:1}}
.w3-animate-left{position:relative;animation:animateleft 0.4s}@keyframes animateleft{from{left:-300px;opacity:0} to{left:0;opacity:1}}
.w3-animate-right{position:relative;animation:animateright 0.4s}@keyframes animateright{from{right:-300px;opacity:0} to{right:0;opacity:1}}
.w3-animate-bottom{position:relative;animation:animatebottom 0.4s}@keyframes animatebottom{from{bottom:-300px;opacity:0} to{bottom:0;opacity:1}}
.w3-animate-zoom {animation:animatezoom 0.6s}@keyframes animatezoom{from{transform:scale(0)} to{transform:scale(1)}}
.w3-animate-input{transition:width 0.4s ease-in-out}.w3-animate-input:focus{width:100%!important}
.w3-opacity,.w3-hover-opacity:hover{opacity:0.60}.w3-opacity-off,.w3-hover-opacity-off:hover{opacity:1}
.w3-opacity-max{opacity:0.25}.w3-opacity-min{opacity:0.75}
.w3-greyscale-max,.w3-grayscale-max,.w3-hover-greyscale:hover,.w3-hover-grayscale:hover{filter:grayscale(100%)}
.w3-greyscale,.w3-grayscale{filter:grayscale(75%)}.w3-greyscale-min,.w3-grayscale-min{filter:grayscale(50%)}
.w3-sepia{filter:sepia(75%)}.w3-sepia-max,.w3-hover-sepia:hover{filter:sepia(100%)}.w3-sepia-min{filter:sepia(50%)}
.w3-tiny{font-size:10px!important}.w3-small{font-size:12px!important}.w3-medium{font-size:15px!important}.w3-large{font-size:18px!important}
.w3-xlarge{font-size:24px!important}.w3-xxlarge{font-size:36px!important}.w3-xxxlarge{font-size:48px!important}.w3-jumbo{font-size:64px!important}
.w3-left-align{text-align:left!important}.w3-right-align{text-align:right!important}.w3-justify{text-align:justify!important}.w3-center{text-align:center!important}
.w3-border-0{border:0!important}.w3-border{border:1px solid #ccc!important}
.w3-border-top{border-top:1px solid #ccc!important}.w3-border-bottom{border-bottom:1px solid #ccc!important}
.w3-border-left{border-left:1px solid #ccc!important}.w3-border-right{border-right:1px solid #ccc!important}
.w3-topbar{border-top:6px solid #ccc!important}.w3-bottombar{border-bottom:6px solid #ccc!important}
.w3-leftbar{border-left:6px solid #ccc!important}.w3-rightbar{border-right:6px solid #ccc!important}
.w3-section,.w3-code{margin-top:16px!important;margin-bottom:16px!important}
.w3-margin{margin:16px!important}.w3-margin-top{margin-top:16px!important}.w3-margin-bottom{margin-bottom:16px!important}
.w3-margin-left{margin-left:16px!important}.w3-margin-right{margin-right:16px!important}
.w3-padding-small{padding:4px 8px!important}.w3-padding{padding:8px 16px!important}.w3-padding-large{padding:12px 24px!important}
.w3-padding-16{padding-top:16px!important;padding-bottom:16px!important}.w3-padding-24{padding-top:24px!important;padding-bottom:24px!important}
.w3-padding-32{padding-top:32px!important;padding-bottom:32px!important}.w3-padding-48{padding-top:48px!important;padding-bottom:48px!important}
.w3-padding-64{padding-top:64px!important;padding-bottom:64px!important}
.w3-padding-top-64{padding-top:64px!important}.w3-padding-top-48{padding-top:48px!important}
.w3-padding-top-32{padding-top:32px!important}.w3-padding-top-24{padding-top:24px!important}
.w3-left{float:left!important}.w3-right{float:right!important}
.w3-button:hover{color:#000!important;background-color:#ccc!important}
.w3-transparent,.w3-hover-none:hover{background-color:transparent!important}
.w3-hover-none:hover{box-shadow:none!important}

257
webfiles/gauges.htm Normal file
View File

@ -0,0 +1,257 @@
<!--
gauges.htm v:0.0.2 a:Neil Thomas
Last modified: 2022/07/18 15:17:24
CMX Template page: Gauges, No sidebar
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="weather data">
<meta name="keywords" content="Cumulus, weather, data, weather station">
<title>Cumulus MX</title>
<link rel="icon" type="image/png" href="images/favicon.png">
<!-- jQuery Local -->
<script src="lib/jquery/jquery-latest.min.js"></script>
<!-- Fonts System will default to a sans-serif font if no Internet connection -->
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Rosario:ital,wght@0,400;0,500;0,600;1,400;1,500;1,600&display=swap" rel="stylesheet">
<!-- All Styles -->
<link href="css/w3Pro.css" rel="stylesheet"> <!-- Basic w3shools responsive styles -->
<link href="css/colours.css" rel="stylesheet"> <!-- Slightly enhanced w3schools colours -->
<link href="css/mx-templates.css" rel="stylesheet"> <!-- Specific styles for these templates. -->
<link href="css/gauges.css" rel="stylesheet"> <!-- Stylesheet specifically for the gauges -->
<!-- Scripts -->
<script src="js/setpagedata.js"></script> <!-- Utility javascripts for all pages. -->
</head>
<body>
<!-- Page Header -->
<div id="Header" class="w3-row w3-top w3-theme-dark w3-theme-bdr">
<div class="w3-row-padding site-width">
<div class="at-flex-between at-flex-items-center">
<img src="images/CumulusMX-Logo.png" alt="Cumulus Logo" class="w3-image logo">
<div class="w3-right-align" style="max-width:600px;">
<h5>Lat<span class="w3-hide-small">itude</span>:&nbsp;<span data-cmxdata="latitude"></span><span class="at-divider">|<wbr></span>Long<span class="w3-hide-small">itude</span>:&nbsp;<span data-cmxdata="longitude"></span><span class="at-divider">|<wbr></span>Alt<span class="w3-hide-small">itude</span>:&nbsp;<span data-cmxdata="altitude"></span></h5>
</div>
</div>
<!-- Main Menu -->
<div id="Main_Menu" class="w3-bar w3-theme-d4 w3-theme-bdr" style="min-height:32px;">
</div>
<!-- Mobile Mneu -->
<div id="Main_Menu_Mobile" class="w3-bar-block w3-hide-large w3-hide">
</div>
</div>
</div>
<!-- Start of page content -->
<div id="Content" class="site-width w3-theme-light">
<div class="w3-row-padding">
<div class="w3-col s12">
<div class="w3-container">
<div class="at-flex-between at-flex-items-center">
<h1>Gauges <span class="subText"></span></h1>
<div class="container" style="max-width: 450px;">
<div style="width:200px;height:25px;display:inline-block;"><canvas id="canvas_status" width="200" height="25"></canvas></div>
<div style="width:60px; display:inline-block"><canvas id="canvas_timer" width="60" height="25"></canvas></div>
<div style="display:inline-block;margin-bottom:3px;">Status: <canvas id="canvas_led" style="width:25px;height:25px;margin-bottom:-7px;" width="25" height="25"></canvas></div>
</div>
<div class="w3-bar" style="max-width:200px;">
<button class="w3-bar-item w3-btn w3-theme-hvr w3-right at-slim" onClick="showModal('MXmodal');">Units</button>
<div class="w3-dropdown-hover w3-right">
<button class="w3-btn w3-theme-hvr at-slim">Gauge Options</button>
<div id="Options" class="w3-dropdown-content w3-bar-block w3-theme-l1">
<div class="w3-bar-item at-slim at-menu-label w3-small w3-theme-l3 w3-center">Temperature</div>
<div class="w3-bar-item at-slim"><input id="rad_temp1" type="radio" class="w3-radio" name="rad_temp" value="out" checked onclick="gauges.doTemp(this);"><label id="lab_temp1" for="rad_temp1">Outside</label></div>
<div class="w3-bar-item at-slim"><input id="rad_temp2" type="radio" class="w3-radio" name="rad_temp" value="in" onclick="gauges.doTemp(this);"><label id="lab_temp2" for="rad_temp2">Inside</label></div>
<div class="w3-bar-item at-slim at-menu-label w3-small w3-theme-l3 w3-center">Other Temps</div>
<div class="w3-bar-item at-slim"><input id="rad_dew1" type="radio" name="rad_dew" class="w3-radio" value="dew" checked onclick="gauges.doDew(this);"><label id="lab_dew1" for="rad_dew1">Dew Point</label></div>
<div class="w3-bar-item at-slim w3-hide" data-cmx-apparent><input id="rad_dew2" type="radio" name="rad_dew" class="w3-radio" value="app" onclick="gauges.doDew(this);"><label id="lab_dew2" for="rad_dew2">Apparent</label></div>
<div class="w3-bar-item at-slim" data-cmx-feels><input id="rad_dew6" type="radio" name="rad_dew" class="w3-radio" value="feel" onclick="gauges.doDew(this);"><label id="lab_dew6" for="rad_dew6">Feels Like</label></div>
<div class="w3-bar-item at-slim"><input id="rad_dew3" type="radio" name="rad_dew" class="w3-radio" value="wnd" onclick="gauges.doDew(this);"><label id="lab_dew3" for="rad_dew3">Wind Chill</label></div>
<div class="w3-bar-item at-slim"><input id="rad_dew4" type="radio" name="rad_dew" class="w3-radio" value="hea" onclick="gauges.doDew(this);"><label id="lab_dew4" for="rad_dew4">Heat Index</label></div>
<div class="w3-bar-item at-slim"><input id="rad_dew5" type="radio" name="rad_dew" class="w3-radio" value="hum" onclick="gauges.doDew(this);"><label id="lab_dew5" for="rad_dew5">Humidex</label></div>
<div class="w3-bar-item at-slim at-menu-label w3-small w3-theme-l3 w3-center">Humidity</div>
<div class="w3-bar-item at-slim"><input id="rad_hum1" type="radio" name="rad_hum" class="w3-radio" value="out" checked onclick="gauges.doHum(this);"><label id="lab_hum1" for="rad_hum1">Outside</label></div>
<div class="w3-bar-item at-slim"><input id="rad_hum2" type="radio" name="rad_hum" class="w3-radio" value="in" onclick="gauges.doHum(this);"><label id="lab_hum2" for="rad_hum2">Inside</label></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Row Two - All Gauges -->
<div class="w3-row-padding">
<div class="w3-col s12">
<div class="w3-panel w3-card w3-theme-white">
<!-- The following html can be copied into ANY single panel page - template -->
<div style="display:flex; flex-flow: row wrap; justify-content:space-evenly">
<div class="w3-panel w3-theme-l5 at-gaugeSmall" style="order:0;">
<!-- dial -->
<h5 class="">Temperature</h5>
<div class="gauge w3-center">
<div id="tip_0">
<canvas id="canvas_temp" class="gaugeSmall"></canvas>
</div>
</div>
</div>
<div class="w3-panel w3-theme-l5 at-gaugeSmall" style="order:0;">
<!-- dial -->
<h5 class="">Other Temps</h5>
<div class="gauge w3-center">
<div id="tip_1">
<canvas id="canvas_dew" class="gaugeSmall"></canvas>
</div>
</div>
</div>
<div class="w3-panel w3-theme-l5 at-gaugeSmall" style="order:0;">
<!-- dial -->
<h5 class="">Humidity</h5>
<div class="gauge w3-center">
<div id="tip_4">
<canvas id="canvas_hum" class="gaugeSmall"></canvas>
</div>
</div>
</div>
<div class="w3-panel w3-theme-l5 at-gaugeSmall" style="order:0;">
<!-- dial -->
<h5 class="">Wind</h5>
<div id="tip_6" class="gauge w3-center">
<canvas id="canvas_wind" class="gaugeSmall"></canvas>
</div>
</div>
<div class="w3-panel w3-theme-l5 at-gaugeSmall" style="order:0;">
<!-- dial -->
<h5 class="">Wind Direction</h5>
<div id="tip_7" class="gauge w3-center">
<canvas id="canvas_dir" class="gaugeSmall"></canvas>
</div>
</div>
<div class="w3-panel w3-theme-l5 at-gaugeSmall" style="order:0;">
<!-- dial -->
<h5 class="">Wind Rose</h5>
<div id="tip_10" class="gauge w3-center">
<canvas id="canvas_rose" class="gaugeSmall"></canvas>
</div>
</div>
<div class="w3-panel w3-theme-l5 at-gaugeSmall" style="order:0;">
<!-- dial -->
<h5 class="">Pressure</h5>
<div id="tip_5" class="gauge w3-center">
<canvas id="canvas_baro" class="gaugeSmall"></canvas>
</div>
</div>
<div class="w3-panel w3-theme-l5 at-gaugeSmall" style="order:0;">
<!-- dial -->
<h5 class="">Rainfall</h5>
<div id="tip_2" class="gauge w3-center">
<canvas id="canvas_rain" class="gaugeSmall"></canvas>
</div>
</div>
<div class="w3-panel w3-theme-l5 at-gaugeSmall" style="order:0;">
<!-- dial -->
<h5 class="">Rainfall Rate</h5>
<div id="tip_3" class="gauge w3-center">
<canvas id="canvas_rrate" class="gaugeSmall"></canvas>
</div>
</div>
<div data-cmx-uv-gauge class="w3-panel w3-theme-l5 at-gaugeSmall" style="order:0;">
<!-- dial -->
<h5>UV Radiation</h5>
<div id="tip_8" class="gauge w3-center">
<canvas id="canvas_uv" class="gaugeSmall"></canvas>
</div>
</div>
<div data-cmx-solar-gauge class="w3-panel w3-theme-l5 at-gaugeSmall" style="order:0;">
<!-- dial -->
<h5>Solar</h5>
<div id="tip_9" class="gauge w3-center">
<canvas id="canvas_solar" class="gaugeSmall"></canvas>
</div>
</div>
<div class="w3-panel w3-theme-l5 at-gaugeSmall" style="order:0;">
<!-- dial -->
<h5>Cloudbase</h5>
<div id="tip_11" class="gauge w3-center">
<canvas id="canvas_cloud" class="gaugeSmall"></canvas>
</div>
</div>
</div>
<!-- End of Gauges HTML -->
</div>
</div>
</div>
</div>
<!-- Start of footer -->
<div id="Footer" class="w3-row w3-bottom w3-theme-dark w3-theme-bdr">
<div class="w3-row-padding site-width">
<div class="at-flex-between at-flex-bottom" style="flex-wrap:nowrap;">
<p class="w3-small"><em>Cumulus MX Templates by Neil&nbsp;Thomas&nbsp;<script>document.write(new Date().getFullYear());</script></em></p>
<p class="w3-small w3-center" style="max-width:500px;">
<em>scripts by mark crossley - version <span id="scriptVer"></span> gauges drawn using gerrit grunwald's steelseries javascript library, wind rose drawn using rgraph</em>
</p>
<p class="w3-right">Powered by <span class="w3-theme-txt">CumulusMX</span>&nbsp;v:<span data-cmxdata="version">---</span>,&nbsp;b:<span data-cmxdata="build">---</span></p>
</div>
</div>
</div>
<!-- Modal -->
<div id="MXmodal" class="w3-modal w3-hide at-theme-modal">
<div class="w3-modal-content w3-round-large" style="margin-top:10%; max-width:500px;">
<header class="w3-container w3-theme-dark" style="border-radius:8px 8px 0 0;">
<span onclick="showModal('MXmodal')" class="w3-btn w3-theme-hvr w3-display-topright" style="border-radius: 0 8px 0 8px;">&times;</span>
<h3>Gauge Units</h3>
</header>
<div class="w3-row-padding w3-theme-white">
<div class="w3-panel">
<div class="w3-col l3 m3 s5"><span class="lang_temparature">Temperature</span>:</div>
<div class="w3-col l2 m3 s3"><input id="rad_unitsTemp1" type="radio" class="w3-radio" name="rad_unitsTemp" value="C" checked onclick="gauges.setUnits(this);"><label id="lab_unitsTemp1" for="rad_unitsTemp1">&deg;C</label></div>
<div class="w3-rest"><input id="rad_unitsTemp2" type="radio" class="w3-radio" name="rad_unitsTemp" value="F" onclick="gauges.setUnits(this);"><label id="lab_unitsTemp2" for="rad_unitsTemp2">&deg;F</label></div>
<div class="w3-col l3 m3 s5"><span id="lang_rainfall">Rainfall</span></div>
<div class="w3-col l2 m3 s3"><input id="rad_unitsRain1" type="radio" class="w3-radio" name="rad_unitsRain" value="mm" checked onclick="gauges.setUnits(this);"><label id="lab_unitsRain1" for="rad_unitsRain1">mm</label></div>
<div class="w3-rest"><input id="rad_unitsRain2" type="radio" class="w3-radio" name="rad_unitsRain" value="in" onclick="gauges.setUnits(this);"><label id="lab_unitsRain2" for="rad_unitsRain2">Inch</label></div>
<div class="w3-col l3 m3 s5"><span id="lang_pressure">Pressure</span></div>
<div class="w3-col l2 m2 s3"><input id="rad_unitsPress1" type="radio" class="w3-radio" name="rad_unitsPress" value="hPa" checked onclick="gauges.setUnits(this);"><label id="lab_unitsPress1" for="rad_unitsPress1">hPa</label></div>
<div class="w3-col l2 m2 s4"><input id="rad_unitsPress2" type="radio" class="w3-radio" name="rad_unitsPress" value="inHg" onclick="gauges.setUnits(this);"><label id="lab_unitsPress2" for="rad_unitsPress2">inHg</label></div>
<div class="w3-col s5 w3-hide-large w3-hide-medium">&nbsp;</div>
<div class="w3-col l2 m2 s3"><input id="rad_unitsPress3" type="radio" class="w3-radio" name="rad_unitsPress" value="mb" onclick="gauges.setUnits(this);"><label id="lab_unitsPress3" for="rad_unitsPress3">mb</label></div>
<div class="w3-col l2 m3 s4"><input id="rad_unitsPress4" type="radio" class="w3-radio" name="rad_unitsPress" value="kPa" onclick="gauges.setUnits(this);"><label id="lab_unitsPress4" for="rad_unitsPress4">kPa</label></div>
<div class="w3-col l3 m3 s5"><span id="lang_windSpeed">Wind Speed</span></div>
<div class="w3-col l2 m2 s3"><input id="rad_unitsWind4" type="radio" class="w3-radio" name="rad_unitsWind" value="km/h" checked onclick="gauges.setUnits(this);"><label id="lab_unitsWind4" for="rad_unitsWind4">km/h</label></div>
<div class="w3-col l2 m2 s4"><input id="rad_unitsWind3" type="radio" class="w3-radio" name="rad_unitsWind" value="m/s" onclick="gauges.setUnits(this);"><label id="lab_unitsWind3" for="rad_unitsWind3">m/s</label></div>
<div class="w3-col s5 w3-hide-medium w3-hide-large">&nbsp;</div>
<div class="w3-col l2 m2 s3"><input id="rad_unitsWind1" type="radio" class="w3-radio" name="rad_unitsWind" value="mph" onclick="gauges.setUnits(this);"><label id="lab_unitsWind1" for="rad_unitsWind1">mph</label></div>
<div class="w3-col l3 m3 s4"><input id="rad_unitsWind2" type="radio" class="w3-radio" name="rad_unitsWind" value="kts" onclick="gauges.setUnits(this);"><label id="lab_unitsWind2" for="rad_unitsWind2">knots</label></div>
<div class="w3-col l3 m3 s5"><span id="lang_cloudbase">Cloud Base</span></div>
<div class="w3-col l2 m2 s3"><input id="rad_unitsCloudBase1" type="radio" class="w3-radio" name="rad_unitsCloud" value="m" checked onclick="gauges.setUnits(this);"><label id="lab_unitsCloudBase1" for="rad_unitsCloudBase1">m</label></div>
<div class="w3-col l7 m7 s4"><input id="rad_unitsCloudBase2" type="radio" class="w3-radio" name="rad_unitsCloud" value="ft" onclick="gauges.setUnits(this);"><label id="lab_unitsCloudBase2" for="rad_unitsCloudBase2">ft</label></div>
</div>
</div>
<footer class="w3-container w3-theme-dark" style="border-radius: 0 0 8px 8px;">
<p class="w3-right">Powered by <span class="w3-theme-txt">Cumulus MX</span></p>
</footer>
</div>
</div>
<script>
var showModal = function(modalID) {
$('#' + modalID).toggleClass('w3-show', 'w3-hide');
};
</script>
<!-- Combined steelseries.js & tween.js -->
<script src="lib/steelseries/scripts/steelseries_tween.min.js"></script>
<!-- Once you have customised this scripts to your requirements you should minimise
and concatenate them into a single file in the same order as below -->
<script src="lib/steelseries/scripts/language.min.js"></script>
<script src="lib/steelseries/scripts/gauges.js"></script>
<!--Optional Wind Rose scripts -->
<script src="lib/steelseries/scripts/RGraph.common.core.min.js"></script>
<script src="lib/steelseries/scripts/RGraph.rose.min.js"></script>
</body>
</html>

112
webfiles/historic.htm Normal file
View File

@ -0,0 +1,112 @@
<!--
historic.htm v:0.0.1 d:Feb 2021 Neil Thomas
Last modified: 2023/02/10 14:48:26
Page: 1 main panel plus a sidebar
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="weather data">
<meta name="keywords" content="Cumulus, weather, data, weather station">
<title>Cumulus MX</title>
<link rel="icon" type="image/png" href="images/favicon.png">
<!-- jQuery Local -->
<script src="lib/jquery/jquery-latest.min.js"></script>
<!-- Fonts System will default to a sans-serif font if no Internet connection -->
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Rosario:ital,wght@0,400;0,500;0,600;1,400;1,500;1,600&display=swap" rel="stylesheet">
<!-- All Styles -->
<link href="css/w3Pro.css" rel="stylesheet"> <!-- Basic w3shools responsive styles -->
<link href="css/colours.css" rel="stylesheet"> <!-- Slightly enhanced w3schools colours -->
<link href="css/mx-templates.css" rel="stylesheet"> <!-- Specific styles for these templates. -->
<!-- Scripts -->
<script src="js/setpagedata.js"></script> <!-- Utility javascripts for all pages. -->
<style>
#chartcontainer {
min-height: 550px;
margin-top:16px;
margin-bottom: 16px;
}
.mx-button {
margin-bottom: 5px;
border-radius: 4px;
}
.graphs-width {
max-width:1250px;
margin: auto
}
</style>
</head>
<body>
<div id="Header" class="w3-row w3-top w3-theme-dark w3-theme-bdr">
<div class="w3-row-padding site-width">
<div class="at-flex-between" style="align-items:center; flex-wrap:wrap;">
<img src="images/CumulusMX-Logo.png" class="w3-image logo" alt="Header logo"/>
<div class="w3-right-align" style="max-width:600px;">
<h5>Lat<span class="w3-hide-small">itude</span>:&nbsp;<span data-cmxdata="latitude"></span><span class="at-divider">|<wbr></span>Long<span class="w3-hide-small">itude</span>:&nbsp;<span data-cmxdata="longitude"></span><span class="at-divider">|<wbr></span>Alt<span class="w3-hide-small">itude</span>:&nbsp;<span data-cmxdata="altitude"></span></h5>
</div>
</div>
<!-- Start of Menu -->
<div id="Main_Menu" class="w3-bar w3-theme-d4 w3-theme-bdr">
</div>
<!-- Mobile menu -->
<div id="Main_Menu_Mobile" class="w3-bar-block w3-hide w3-hide-large">
</div> <!-- End of Mobile menu -->
</div>
</div>
<div id="Content"> <!-- Start of panel content -->
<div class="w3-row-padding w3-theme-light graphs-width"> <!-- Page Title -->
<div class="w3-col l12">
<h1>Charts based on summary data</h1>
<h3 class="w3-center w3-hide">Welcome to <br/><span class="subText"><span data-cmxdata="longlocation"></span></span></h3>
</div>
</div> <!-- End of title row -->
<div class="w3-row-padding w3-theme-light graphs-width"> <!-- First Row -->
<div class="w3-col s12"> <!-- Main column of first row -->
<div class="w3-panel w3-card w3-theme-white">
<figure>
<div id="chartcontainer"></div>
</figure>
</div>
</div> <!-- End of first column of first row -->
</div>
<div class="w3-row-padding w3-theme-light graphs-width">
<div class="w3-col s12">
<div class="w3-container w3-panel w3-center">
<div class="w3-bar w3-center">
<button id="btnTemp" class="w3-bar-item w3-btn w3-theme-l2 w3-theme-hvr at-slim mx-button" onClick="changeGraph('temp');">Temperature</button>
<button id="btnPress" class="w3-bar-item w3-btn w3-theme-l2 w3-theme-hvr at-slim mx-button" onClick="changeGraph('press');">Pressure</button>
<button id="btnWind" class="w3-bar-item w3-btn w3-theme-l2 w3-theme-hvr at-slim mx-button" onClick="changeGraph('wind');">Winds</button>
<button id="btnHum" class="w3-bar-item w3-btn w3-theme-l2 w3-theme-hvr at-slim mx-button" onClick="changeGraph('humidity');">Humidity</button>
<button id="btnRain" class="w3-bar-item w3-btn w3-theme-l2 w3-theme-hvr at-slim mx-button" onClick="changeGraph('rain');">Rainfall</button>
<button id="btnSolar" class="w3-bar-item w3-btn w3-theme-l2 w3-theme-hvr at-slim mx-button" onClick="changeGraph('solar');">Solar Radiation</button>
<button id="btnDegDay" class="w3-bar-item w3-btn w3-theme-l2 w3-theme-hvr at-slim mx-button" onClick="changeGraph('degday');">Degree Days</button>
<button id="btnTempSum" class="w3-bar-item w3-btn w3-theme-l2 w3-theme-hvr at-slim mx-button" onClick="changeGraph('tempsum');">Temp Sum</button>
</div>
<p>Mouse over the chart to see the values at any given time.
You can add or remove data sets from the chart by clicking the entry on the chart legend.</p>
</div>
</div>
</div>
</div>
<div id="Footer" class="w3-row w3-bottom w3-theme-dark w3-theme-bdr">
<div class="w3-row-padding site-width">
<p><em>Cumulus MX Template by Neil Thomas <script>document.write(new Date().getFullYear());</script>
<span class="w3-right">Powered by <span class="w3-theme-txt">Cumulus MX</span> v:<span data-cmxdata="version"></span>, b:<span data-cmxdata="build"></span></span></em></p>
</div>
</div>
<script src="https://code.highcharts.com/stock/10.3.3/highstock.js"></script>
<script src="https://code.highcharts.com/stock/10.3.3/modules/exporting.js"></script>
<script src="https://code.highcharts.com/10.3.3/modules/export-data.js"></script>
<script src="https://code.highcharts.com/10.3.3/modules/accessibility.js"></script>
<script src="https://code.highcharts.com/10.3.3/modules/boost.js"></script>
<script src="https://code.highcharts.com/10.3.3/themes/grid.js"></script>
<script src="js/historiccharts.js"></script>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
webfiles/images/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

BIN
webfiles/images/picture.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

238
webfiles/index.htm Normal file
View File

@ -0,0 +1,238 @@
<!--
index.html v:0.0.1 d:Feb 2021 Neil Thomas
Last modified: 2022/11/20 16:28:39
Page: 1 main panel plus a right sidebar
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="weather data">
<meta name="keywords" content="Cumulus, weather, data, weather station">
<title>Cumulus MX</title>
<link rel="icon" type="image/png" href="images/favicon.png">
<!-- jQuery library -->
<script src="lib/jquery/jquery-latest.min.js"></script>
<!-- Fonts System will default to a sans-serif font if no Internet connection -->
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Rosario:ital,wght@0,400;0,500;0,600;1,400;1,500;1,600&display=swap" rel="stylesheet">
<!-- All Styles -->
<link href="css/w3Pro.css" rel="stylesheet"> <!-- Basic w3shools responsive styles -->
<link href="css/colours.css" rel="stylesheet"> <!-- Slightly enhanced w3schools colours -->
<link href="css/mx-templates.css" rel="stylesheet"> <!-- Specific styles for these templates. -->
<!-- Scripts -->
<script src="js/setpagedata.js"></script> <!-- Utility javascripts for all pages. -->
<script>
window.onload = () => {
$('#moonImg').attr('src', 'images/moon.png?' + Date.now());
// update the moon image every 20 minutes if the page is left open
setInterval(() => {
$('#moonImg').attr('src', 'images/moon.png?' + Date.now());
}, 1200000);
};
</script>
</head>
<body>
<div id="Header" class="w3-row w3-top w3-theme-dark w3-theme-bdr">
<div class="w3-row-padding site-width">
<div class="at-flex-between" style="align-items:center; flex-wrap:wrap;">
<img src="images/CumulusMX-Logo.png" class="w3-image logo" alt="Header logo"/>
<div class="w3-right-align" style="max-width:600px;">
<h5>Lat<span class="w3-hide-small">itude</span>:&nbsp;<span data-cmxdata="latitude"></span><span class="at-divider">|<wbr></span>Long<span class="w3-hide-small">itude</span>:&nbsp;<span data-cmxdata="longitude"></span><span class="at-divider">|<wbr></span>Alt<span class="w3-hide-small">itude</span>:&nbsp;<span data-cmxdata="altitude"></span></h5>
</div>
</div>
<!-- Start of Menu -->
<div id="Main_Menu" class="w3-bar w3-theme-d4 w3-theme-bdr">
</div>
<!-- Mobile menu -->
<div id="Main_Menu_Mobile" class="w3-bar-block w3-hide w3-hide-large">
</div> <!-- End of Mobile menu -->
</div>
</div>
<div id="Content"> <!-- Start of panel content -->
<div class="w3-row-padding w3-theme-light site-width"> <!-- Page Title -->
<div class="w3-col l12">
<h1><span data-cmxdata="location"></span> Weather <span class="subText"></span></h1>
</div>
</div> <!-- End of title row -->
<div class="w3-row site-width w3-theme-light"> <!-- Start of Main panel -->
<div class="w3-col l9 m12"> <!-- 3/4 width panel -->
<div class="w3-row-padding"> <!-- Row 1 of 3/4 width panel -->
<div class="w3-col s12"> <!-- Full width of above panel -->
<div class="w3-panel w3-container w3-theme-white">
<h3 class="">Almanac</h3>
<div class="w3-responsive">
<table class="w3-table" style="min-width:100%;">
<tbody>
<tr>
<td class="">Dawn:</td>
<td class=""><span data-cmxdata="dawn"></span></td>
<td class="">Sun Rise:</td>
<td class=""><span data-cmxdata="sunrise"></span></td>
<td class="">Moon Rise:</td>
<td class=""><span data-cmxdata="moonrise"></span></td>
<td rowspan="3" style="width:75px; height: 75px; padding:0"><img id="moonImg" src="images/moon.png" alt="Moon" width="75" height="75" class="w3-image" />Visible <span data-cmxdata="MoonPercentAbs"></span>%</td>
</tr>
<tr>
<td class="">Dusk:</td>
<td class=""><span data-cmxdata="dusk"></span></td>
<td class="">Sun Set:</td>
<td class=""><span data-cmxdata="sunset"></span></td>
<td class="">Moon Set:</td>
<td class=""><span data-cmxdata="moonset"></span></td>
</tr>
<tr>
<td class="">Daylight:</td>
<td class=""><span data-cmxdata="daylightlength"></span></td>
<td class="">Day Length:</td>
<td class=""><span data-cmxdata="daylength"></span></td>
<td class="">Moon Phase:</td>
<td class=""><span id="moonPhase" data-cmxdata="moonphase"></span></td>
</tr>
<tr id="currCond" class="w3-hide">
<td colspan="7"><strong>Current conditions</strong>: <span data-cmxdata="currcond"></span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="w3-row-padding"> <!-- Row 2 of 3/4 width panel -->
<div class="w3-col s12"> <!-- Full width of above panel -->
<div class="w3-panel w3-card w3-theme-white">
<h3 class="">Conditions at local time <span data-cmxdata="time"></span></h3>
<div class="w3-responsive">
<table class="w3-table w3-hoverable" style="min-width:100%;">
<tr>
<td colspan="4" class="w3-theme-d5">Temperature and Humidity</td>
</tr>
<tr class="w3-theme-l2">
<td>Temperature</td>
<td><span data-cmxdata="temp"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td>Dew Point</td>
<td><span data-cmxdata="dew"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
</tr>
<tr class="w3-theme-l2">
<td>Windchill</td>
<td><span data-cmxdata="wchill"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td>Humidity</td>
<td><span data-cmxdata="hum"></span>&nbsp;%</td>
</tr>
<tr class="w3-theme-l2">
<td >Heat Index</td>
<td><span data-cmxdata="heatindex"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td><span data-cmx-apparent class="w3-hide">Apparent Temperature</span><span data-cmx-feels>Feels Like</span></td>
<td><span data-cmx-apparent data-cmxdata="apptemp" class="w3-hide"></span><span data-cmx-feels data-cmxdata="feelslike"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
</tr>
<tr class="w3-theme-l2">
<td>Temp change last hour</td>
<td><span data-cmxdata="TempChangeLastHour"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td></td>
<td></td>
</tr>
<tr>
<td colspan="4" class="w3-theme-d4">Rainfall</td>
</tr>
<tr class="w3-theme-l3">
<td>Rainfall Today</td>
<td><span data-cmxdata="rfall"></span>&nbsp;<span data-cmxdata="rainunit"></span></td>
<td>Rainfall Rate</td>
<td><span data-cmxdata="rrate"></span>&nbsp;<span data-cmxdata="rainunit"></span>/hr</td>
</tr>
<tr class="w3-theme-l3">
<td>Rainfall This Month</td>
<td><span data-cmxdata="rmonth"></span>&nbsp;<span data-cmxdata="rainunit"></span></td>
<td>Rainfall This Year</td>
<td><span data-cmxdata="ryear"></span>&nbsp;<span data-cmxdata="rainunit"></span></td>
</tr>
<tr class="w3-theme-l3">
<td>Rainfall Last Hour</td>
<td><span data-cmxdata="rhour"></span>&nbsp;<span data-cmxdata="rainunit"></span></td>
<td>Last rainfall</td>
<td><span data-cmxdata="LastRainTip"></span></td>
</tr>
<tr class="w3-theme-l3">
<td>Rainfall Since Midnight</td>
<td><span data-cmxdata="rmidnight"></span>&nbsp;<span data-cmxdata="rainunit"></span></td>
<td>Rainfall Last 24 Hours</td>
<td><span data-cmxdata="r24hour"></span>&nbsp;<span data-cmxdata="rainunit"></span></td>
</tr>
<tr>
<td colspan="4" class="w3-theme-d3">Wind</td>
</tr>
<tr class="w3-theme-l4">
<td>Wind Speed <span class="subText">(gust)</span></td>
<td><span data-cmxdata="wgust"></span>&nbsp;<span data-cmxdata="windunit"></span></td>
<td>Wind Speed <span class="subText">(avg)</span></td>
<td><span data-cmxdata="wspeed"></span>&nbsp;<span data-cmxdata="windunit"></span></td>
</tr>
<tr class="w3-theme-l4">
<td>Wind Bearing</td>
<td><span data-cmxdata="avgbearing"></span>&deg; <span data-cmxdata="wdir"></span></td>
<td>Beaufort <span data-cmxdata="beaufort"></span></td>
<td><span data-cmxdata="beaudesc"></span></td>
</tr>
<tr class="w3-theme-l4">
<td>Wind Variation <span class="subText">(last 10 minutes)</span></td>
<td colspan="3">From <span data-cmxdata="BearingRangeFrom"></span>&deg; to <span data-cmxdata="BearingRangeTo"></span>&deg;</td>
</tr>
<tr>
<td colspan="4" class="w3-theme-d2">Pressure <span class="subText">(sea level)</span></td>
</tr>
<tr class="w3-theme-l5">
<td>Barometer</td>
<td><span data-cmxdata="press"></span>&nbsp;<span data-cmxdata="pressunit"></span></td>
<td><span data-cmxdata="presstrend"></span></td>
<td><span data-cmxdata="presstrendval"></span>&nbsp;<span data-cmxdata="pressunit"></span>/hr</td>
</tr>
<tr class="w3-hide" data-cmx-solar data-cmx-uv>
<td colspan="4" class="w3-theme-d1">Solar</td>
</tr>
<tr class="w3-theme-l6 w3-hide" data-cmx-solar>
<td>Solar Radiation</td>
<td><span data-cmxdata="SolarRad"></span>&nbsp;W/m&sup2;</td>
<td>Evapotranspiration Today</td>
<td><span data-cmxdata="ET"></span>&nbsp;<span data-cmxdata="rainunit"></span></td>
</tr>
<tr class="w3-theme-l6 w3-hide" data-cmx-uv>
<td>UV Index</td>
<td><span data-cmxdata="UV"></span></td>
<td></td>
<td></td>
</tr>
</table>
</div>
<p class="w3-small credits">Page updated <span data-cmxdata="update"></span>.</p>
</div>
</div>
</div>
</div>
<div class="w3-col l3 m12"> <!-- Start of Sidebar 1/4 width -->
<div class="w3-row-padding">
<div class="w3-col l12">
<div class="w3-panel w3-container w3-theme-light">
<h3 class="w3-center">Welcome to <br/><span class="subText"><span data-cmxdata="longlocation"></span></span></h3>
<p>The weather station in use is the <span data-cmxdata="stationtype"></span><br>
This page is updated every <span data-cmxdata="interval"></span> minutes. The meteorological day used at this station ends at <span data-cmxdata="rollovertime"></span>.
</p>
<p><strong>Forecast:</strong> <span data-cmxdata="forecast"></span></p>
</div>
</div>
</div>
</div>
</div> <!-- End of panel content -->
</div> <!-- End of content -->
<div id="Footer" class="w3-row w3-bottom w3-theme-dark w3-theme-bdr">
<div class="w3-row-padding site-width">
<p><em>Cumulus MX Template by Neil Thomas <script>document.write(new Date().getFullYear());</script>
<span class="w3-right">Powered by <span class="w3-theme-txt">Cumulus MX</span> v:<span data-cmxdata="version"></span>, b:<span data-cmxdata="build"></span></span></em></p>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,40 @@
// Last modified: 2021/03/19 09:15:55
$.getJSON("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("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() {
});

2463
webfiles/js/cumuluscharts.js Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

36
webfiles/js/menu.js Normal file
View 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}
];

38
webfiles/js/menuSample.js Normal file
View File

@ -0,0 +1,38 @@
/*
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}
]}
];

View 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
webfiles/js/noaarpts.js Normal file
View 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 = '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');
}
});
};

1465
webfiles/js/selectachart.js Normal file

File diff suppressed because it is too large Load Diff

237
webfiles/js/setpagedata.js Normal file
View 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 + '&#8230;</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 &#9776;</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 + '&#8230;</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('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);
});
});

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,484 @@
/*!
* jQuery Templates Plugin 1.0.0pre
* http://github.com/jquery/jquery-tmpl
* Requires jQuery 1.4.2
*
* Copyright 2011, Software Freedom Conservancy, Inc.
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*/
(function( jQuery, undefined ){
var oldManip = jQuery.fn.domManip, tmplItmAtt = "_tmplitem", htmlExpr = /^[^<]*(<[\w\W]+>)[^>]*$|\{\{\! /,
newTmplItems = {}, wrappedItems = {}, appendToTmplItems, topTmplItem = { key: 0, data: {} }, itemKey = 0, cloneIndex = 0, stack = [];
function newTmplItem( options, parentItem, fn, data ) {
// Returns a template item data structure for a new rendered instance of a template (a 'template item').
// The content field is a hierarchical array of strings and nested items (to be
// removed and replaced by nodes field of dom elements, once inserted in DOM).
var newItem = {
data: data || (data === 0 || data === false) ? data : (parentItem ? parentItem.data : {}),
_wrap: parentItem ? parentItem._wrap : null,
tmpl: null,
parent: parentItem || null,
nodes: [],
calls: tiCalls,
nest: tiNest,
wrap: tiWrap,
html: tiHtml,
update: tiUpdate
};
if ( options ) {
jQuery.extend( newItem, options, { nodes: [], parent: parentItem });
}
if ( fn ) {
// Build the hierarchical content to be used during insertion into DOM
newItem.tmpl = fn;
newItem._ctnt = newItem._ctnt || newItem.tmpl( jQuery, newItem );
newItem.key = ++itemKey;
// Keep track of new template item, until it is stored as jQuery Data on DOM element
(stack.length ? wrappedItems : newTmplItems)[itemKey] = newItem;
}
return newItem;
}
// Override appendTo etc., in order to provide support for targeting multiple elements. (This code would disappear if integrated in jquery core).
jQuery.each({
appendTo: "append",
prependTo: "prepend",
insertBefore: "before",
insertAfter: "after",
replaceAll: "replaceWith"
}, function( name, original ) {
jQuery.fn[ name ] = function( selector ) {
var ret = [], insert = jQuery( selector ), elems, i, l, tmplItems,
parent = this.length === 1 && this[0].parentNode;
appendToTmplItems = newTmplItems || {};
if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
insert[ original ]( this[0] );
ret = this;
} else {
for ( i = 0, l = insert.length; i < l; i++ ) {
cloneIndex = i;
elems = (i > 0 ? this.clone(true) : this).get();
jQuery( insert[i] )[ original ]( elems );
ret = ret.concat( elems );
}
cloneIndex = 0;
ret = this.pushStack( ret, name, insert.selector );
}
tmplItems = appendToTmplItems;
appendToTmplItems = null;
jQuery.tmpl.complete( tmplItems );
return ret;
};
});
jQuery.fn.extend({
// Use first wrapped element as template markup.
// Return wrapped set of template items, obtained by rendering template against data.
tmpl: function( data, options, parentItem ) {
return jQuery.tmpl( this[0], data, options, parentItem );
},
// Find which rendered template item the first wrapped DOM element belongs to
tmplItem: function() {
return jQuery.tmplItem( this[0] );
},
// Consider the first wrapped element as a template declaration, and get the compiled template or store it as a named template.
template: function( name ) {
return jQuery.template( name, this[0] );
},
domManip: function( args, table, callback, options ) {
if ( args[0] && jQuery.isArray( args[0] )) {
var dmArgs = jQuery.makeArray( arguments ), elems = args[0], elemsLength = elems.length, i = 0, tmplItem;
while ( i < elemsLength && !(tmplItem = jQuery.data( elems[i++], "tmplItem" ))) {}
if ( tmplItem && cloneIndex ) {
dmArgs[2] = function( fragClone ) {
// Handler called by oldManip when rendered template has been inserted into DOM.
jQuery.tmpl.afterManip( this, fragClone, callback );
};
}
oldManip.apply( this, dmArgs );
} else {
oldManip.apply( this, arguments );
}
cloneIndex = 0;
if ( !appendToTmplItems ) {
jQuery.tmpl.complete( newTmplItems );
}
return this;
}
});
jQuery.extend({
// Return wrapped set of template items, obtained by rendering template against data.
tmpl: function( tmpl, data, options, parentItem ) {
var ret, topLevel = !parentItem;
if ( topLevel ) {
// This is a top-level tmpl call (not from a nested template using {{tmpl}})
parentItem = topTmplItem;
tmpl = jQuery.template[tmpl] || jQuery.template( null, tmpl );
wrappedItems = {}; // Any wrapped items will be rebuilt, since this is top level
} else if ( !tmpl ) {
// The template item is already associated with DOM - this is a refresh.
// Re-evaluate rendered template for the parentItem
tmpl = parentItem.tmpl;
newTmplItems[parentItem.key] = parentItem;
parentItem.nodes = [];
if ( parentItem.wrapped ) {
updateWrapped( parentItem, parentItem.wrapped );
}
// Rebuild, without creating a new template item
return jQuery( build( parentItem, null, parentItem.tmpl( jQuery, parentItem ) ));
}
if ( !tmpl ) {
return []; // Could throw...
}
if ( typeof data === "function" ) {
data = data.call( parentItem || {} );
}
if ( options && options.wrapped ) {
updateWrapped( options, options.wrapped );
}
ret = jQuery.isArray( data ) ?
jQuery.map( data, function( dataItem ) {
return dataItem ? newTmplItem( options, parentItem, tmpl, dataItem ) : null;
}) :
[ newTmplItem( options, parentItem, tmpl, data ) ];
return topLevel ? jQuery( build( parentItem, null, ret ) ) : ret;
},
// Return rendered template item for an element.
tmplItem: function( elem ) {
var tmplItem;
if ( elem instanceof jQuery ) {
elem = elem[0];
}
while ( elem && elem.nodeType === 1 && !(tmplItem = jQuery.data( elem, "tmplItem" )) && (elem = elem.parentNode) ) {}
return tmplItem || topTmplItem;
},
// Set:
// Use $.template( name, tmpl ) to cache a named template,
// where tmpl is a template string, a script element or a jQuery instance wrapping a script element, etc.
// Use $( "selector" ).template( name ) to provide access by name to a script block template declaration.
// Get:
// Use $.template( name ) to access a cached template.
// Also $( selectorToScriptBlock ).template(), or $.template( null, templateString )
// will return the compiled template, without adding a name reference.
// If templateString includes at least one HTML tag, $.template( templateString ) is equivalent
// to $.template( null, templateString )
template: function( name, tmpl ) {
if (tmpl) {
// Compile template and associate with name
if ( typeof tmpl === "string" ) {
// This is an HTML string being passed directly in.
tmpl = buildTmplFn( tmpl );
} else if ( tmpl instanceof jQuery ) {
tmpl = tmpl[0] || {};
}
if ( tmpl.nodeType ) {
// If this is a template block, use cached copy, or generate tmpl function and cache.
tmpl = jQuery.data( tmpl, "tmpl" ) || jQuery.data( tmpl, "tmpl", buildTmplFn( tmpl.innerHTML ));
// Issue: In IE, if the container element is not a script block, the innerHTML will remove quotes from attribute values whenever the value does not include white space.
// This means that foo="${x}" will not work if the value of x includes white space: foo="${x}" -> foo=value of x.
// To correct this, include space in tag: foo="${ x }" -> foo="value of x"
}
return typeof name === "string" ? (jQuery.template[name] = tmpl) : tmpl;
}
// Return named compiled template
return name ? (typeof name !== "string" ? jQuery.template( null, name ):
(jQuery.template[name] ||
// If not in map, and not containing at least on HTML tag, treat as a selector.
// (If integrated with core, use quickExpr.exec)
jQuery.template( null, htmlExpr.test( name ) ? name : jQuery( name )))) : null;
},
encode: function( text ) {
// Do HTML encoding replacing < > & and ' and " by corresponding entities.
return ("" + text).split("<").join("&lt;").split(">").join("&gt;").split('"').join("&#34;").split("'").join("&#39;");
}
});
jQuery.extend( jQuery.tmpl, {
tag: {
"tmpl": {
_default: { $2: "null" },
open: "if($notnull_1){__=__.concat($item.nest($1,$2));}"
// tmpl target parameter can be of type function, so use $1, not $1a (so not auto detection of functions)
// This means that {{tmpl foo}} treats foo as a template (which IS a function).
// Explicit parens can be used if foo is a function that returns a template: {{tmpl foo()}}.
},
"wrap": {
_default: { $2: "null" },
open: "$item.calls(__,$1,$2);__=[];",
close: "call=$item.calls();__=call._.concat($item.wrap(call,__));"
},
"each": {
_default: { $2: "$index, $value" },
open: "if($notnull_1){$.each($1a,function($2){with(this){",
close: "}});}"
},
"if": {
open: "if(($notnull_1) && $1a){",
close: "}"
},
"else": {
_default: { $1: "true" },
open: "}else if(($notnull_1) && $1a){"
},
"html": {
// Unecoded expression evaluation.
open: "if($notnull_1){__.push($1a);}"
},
"=": {
// Encoded expression evaluation. Abbreviated form is ${}.
_default: { $1: "$data" },
open: "if($notnull_1){__.push($.encode($1a));}"
},
"!": {
// Comment tag. Skipped by parser
open: ""
}
},
// This stub can be overridden, e.g. in jquery.tmplPlus for providing rendered events
complete: function( items ) {
newTmplItems = {};
},
// Call this from code which overrides domManip, or equivalent
// Manage cloning/storing template items etc.
afterManip: function afterManip( elem, fragClone, callback ) {
// Provides cloned fragment ready for fixup prior to and after insertion into DOM
var content = fragClone.nodeType === 11 ?
jQuery.makeArray(fragClone.childNodes) :
fragClone.nodeType === 1 ? [fragClone] : [];
// Return fragment to original caller (e.g. append) for DOM insertion
callback.call( elem, fragClone );
// Fragment has been inserted:- Add inserted nodes to tmplItem data structure. Replace inserted element annotations by jQuery.data.
storeTmplItems( content );
cloneIndex++;
}
});
//========================== Private helper functions, used by code above ==========================
function build( tmplItem, nested, content ) {
// Convert hierarchical content into flat string array
// and finally return array of fragments ready for DOM insertion
var frag, ret = content ? jQuery.map( content, function( item ) {
return (typeof item === "string") ?
// Insert template item annotations, to be converted to jQuery.data( "tmplItem" ) when elems are inserted into DOM.
(tmplItem.key ? item.replace( /(<\w+)(?=[\s>])(?![^>]*_tmplitem)([^>]*)/g, "$1 " + tmplItmAtt + "=\"" + tmplItem.key + "\" $2" ) : item) :
// This is a child template item. Build nested template.
build( item, tmplItem, item._ctnt );
}) :
// If content is not defined, insert tmplItem directly. Not a template item. May be a string, or a string array, e.g. from {{html $item.html()}}.
tmplItem;
if ( nested ) {
return ret;
}
// top-level template
ret = ret.join("");
// Support templates which have initial or final text nodes, or consist only of text
// Also support HTML entities within the HTML markup.
ret.replace( /^\s*([^<\s][^<]*)?(<[\w\W]+>)([^>]*[^>\s])?\s*$/, function( all, before, middle, after) {
frag = jQuery( middle ).get();
storeTmplItems( frag );
if ( before ) {
frag = unencode( before ).concat(frag);
}
if ( after ) {
frag = frag.concat(unencode( after ));
}
});
return frag ? frag : unencode( ret );
}
function unencode( text ) {
// Use createElement, since createTextNode will not render HTML entities correctly
var el = document.createElement( "div" );
el.innerHTML = text;
return jQuery.makeArray(el.childNodes);
}
// Generate a reusable function that will serve to render a template against data
function buildTmplFn( markup ) {
return new Function("jQuery","$item",
// Use the variable __ to hold a string array while building the compiled template. (See https://github.com/jquery/jquery-tmpl/issues#issue/10).
"var $=jQuery,call,__=[],$data=$item.data;" +
// Introduce the data as local variables using with(){}
"with($data){__.push('" +
// Convert the template into pure JavaScript
jQuery.trim(markup)
.replace( /([\\'])/g, "\\$1" )
.replace( /[\r\t\n]/g, " " )
.replace( /\$\{([^\}]*)\}/g, "{{= $1}}" )
.replace( /\{\{(\/?)(\w+|.)(?:\(((?:[^\}]|\}(?!\}))*?)?\))?(?:\s+(.*?)?)?(\(((?:[^\}]|\}(?!\}))*?)\))?\s*\}\}/g,
function( all, slash, type, fnargs, target, parens, args ) {
var tag = jQuery.tmpl.tag[ type ], def, expr, exprAutoFnDetect;
if ( !tag ) {
throw "Unknown template tag: " + type;
}
def = tag._default || [];
if ( parens && !/\w$/.test(target)) {
target += parens;
parens = "";
}
if ( target ) {
target = unescape( target );
args = args ? ("," + unescape( args ) + ")") : (parens ? ")" : "");
// Support for target being things like a.toLowerCase();
// In that case don't call with template item as 'this' pointer. Just evaluate...
expr = parens ? (target.indexOf(".") > -1 ? target + unescape( parens ) : ("(" + target + ").call($item" + args)) : target;
exprAutoFnDetect = parens ? expr : "(typeof(" + target + ")==='function'?(" + target + ").call($item):(" + target + "))";
} else {
exprAutoFnDetect = expr = def.$1 || "null";
}
fnargs = unescape( fnargs );
return "');" +
tag[ slash ? "close" : "open" ]
.split( "$notnull_1" ).join( target ? "typeof(" + target + ")!=='undefined' && (" + target + ")!=null" : "true" )
.split( "$1a" ).join( exprAutoFnDetect )
.split( "$1" ).join( expr )
.split( "$2" ).join( fnargs || def.$2 || "" ) +
"__.push('";
}) +
"');}return __;"
);
}
function updateWrapped( options, wrapped ) {
// Build the wrapped content.
options._wrap = build( options, true,
// Suport imperative scenario in which options.wrapped can be set to a selector or an HTML string.
jQuery.isArray( wrapped ) ? wrapped : [htmlExpr.test( wrapped ) ? wrapped : jQuery( wrapped ).html()]
).join("");
}
function unescape( args ) {
return args ? args.replace( /\\'/g, "'").replace(/\\\\/g, "\\" ) : null;
}
function outerHtml( elem ) {
var div = document.createElement("div");
div.appendChild( elem.cloneNode(true) );
return div.innerHTML;
}
// Store template items in jQuery.data(), ensuring a unique tmplItem data data structure for each rendered template instance.
function storeTmplItems( content ) {
var keySuffix = "_" + cloneIndex, elem, elems, newClonedItems = {}, i, l, m;
for ( i = 0, l = content.length; i < l; i++ ) {
if ( (elem = content[i]).nodeType !== 1 ) {
continue;
}
elems = elem.getElementsByTagName("*");
for ( m = elems.length - 1; m >= 0; m-- ) {
processItemKey( elems[m] );
}
processItemKey( elem );
}
function processItemKey( el ) {
var pntKey, pntNode = el, pntItem, tmplItem, key;
// Ensure that each rendered template inserted into the DOM has its own template item,
if ( (key = el.getAttribute( tmplItmAtt ))) {
while ( pntNode.parentNode && (pntNode = pntNode.parentNode).nodeType === 1 && !(pntKey = pntNode.getAttribute( tmplItmAtt ))) { }
if ( pntKey !== key ) {
// The next ancestor with a _tmplitem expando is on a different key than this one.
// So this is a top-level element within this template item
// Set pntNode to the key of the parentNode, or to 0 if pntNode.parentNode is null, or pntNode is a fragment.
pntNode = pntNode.parentNode ? (pntNode.nodeType === 11 ? 0 : (pntNode.getAttribute( tmplItmAtt ) || 0)) : 0;
if ( !(tmplItem = newTmplItems[key]) ) {
// The item is for wrapped content, and was copied from the temporary parent wrappedItem.
tmplItem = wrappedItems[key];
tmplItem = newTmplItem( tmplItem, newTmplItems[pntNode]||wrappedItems[pntNode] );
tmplItem.key = ++itemKey;
newTmplItems[itemKey] = tmplItem;
}
if ( cloneIndex ) {
cloneTmplItem( key );
}
}
el.removeAttribute( tmplItmAtt );
} else if ( cloneIndex && (tmplItem = jQuery.data( el, "tmplItem" )) ) {
// This was a rendered element, cloned during append or appendTo etc.
// TmplItem stored in jQuery data has already been cloned in cloneCopyEvent. We must replace it with a fresh cloned tmplItem.
cloneTmplItem( tmplItem.key );
newTmplItems[tmplItem.key] = tmplItem;
pntNode = jQuery.data( el.parentNode, "tmplItem" );
pntNode = pntNode ? pntNode.key : 0;
}
if ( tmplItem ) {
pntItem = tmplItem;
// Find the template item of the parent element.
// (Using !=, not !==, since pntItem.key is number, and pntNode may be a string)
while ( pntItem && pntItem.key != pntNode ) {
// Add this element as a top-level node for this rendered template item, as well as for any
// ancestor items between this item and the item of its parent element
pntItem.nodes.push( el );
pntItem = pntItem.parent;
}
// Delete content built during rendering - reduce API surface area and memory use, and avoid exposing of stale data after rendering...
delete tmplItem._ctnt;
delete tmplItem._wrap;
// Store template item as jQuery data on the element
jQuery.data( el, "tmplItem", tmplItem );
}
function cloneTmplItem( key ) {
key = key + keySuffix;
tmplItem = newClonedItems[key] =
(newClonedItems[key] || newTmplItem( tmplItem, newTmplItems[tmplItem.parent.key + keySuffix] || tmplItem.parent ));
}
}
}
//---- Helper functions for template item ----
function tiCalls( content, tmpl, data, options ) {
if ( !content ) {
return stack.pop();
}
stack.push({ _: content, tmpl: tmpl, item:this, data: data, options: options });
}
function tiNest( tmpl, data, options ) {
// nested template, using {{tmpl}} tag
return jQuery.tmpl( jQuery.template( tmpl ), data, options, this );
}
function tiWrap( call, wrapped ) {
// nested template, using {{wrap}} tag
var options = call.options || {};
options.wrapped = wrapped;
// Apply the template, which may incorporate wrapped content,
return jQuery.tmpl( jQuery.template( call.tmpl ), call.data, options, call.item );
}
function tiHtml( filter, textOnly ) {
var wrapped = this._wrap;
return jQuery.map(
jQuery( jQuery.isArray( wrapped ) ? wrapped.join("") : wrapped ).filter( filter || "*" ),
function(e) {
return textOnly ?
e.innerText || e.textContent :
e.outerHTML || outerHtml(e);
});
}
function tiUpdate() {
var coll = this.nodes;
jQuery.tmpl( null, null, null, this).insertBefore( coll[0] );
jQuery( coll ).remove();
}
})( jQuery );

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,380 @@
/*!*********************************************************************
TERMS OF USE - EASING EQUATIONS
Open source under the BSD License.
Copyright (c) 2001 Robert Penner
JavaScript version copyright (C) 2006 by Philippe Maegerman
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
* Neither the name of the author nor the names of contributors may
be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************/
function Delegate() {}
Delegate.create = function (o, f) {
var a = [], i, l = arguments.length;
for (i = 2; i < l; i++) {
a[i - 2] = arguments[i];
}
return function () {
var aP = [].concat(arguments, a);
f.apply(o, aP);
};
};
/*
object:
type:Object
The object you want to modify. It can be any object, a visual object that you want to animate ( document.body.style ) or an anymous object ( new Object() ).
property:
type:String
The property that is updated on the target object, it can be empty ('')
easing:
type:Function
The easing that will be applied to motion.
start:
type:Number
Start value
end:
type:Number
End value
duration:
type:Number
Animation duration in seconds
suffixe:
type:String
A string to append to the updated property ('%','pt','em' ...).
*/
var Tween = function (obj, prop, func, begin, finish, duration, suffixe) {
this.init(obj, prop, func, begin, finish, duration, suffixe);
};
var t = Tween.prototype;
t.obj = {};
t.prop = '';
t.func = function (t, b, c, d) { return c * t / d + b; };
t.begin = 0;
t.change = 0;
t.prevTime = 0;
t.prevPos = 0;
t.looping = false;
t._duration = 0;
t._time = 0;
t._pos = 0;
t._position = 0;
t._startTime = 0;
t._finish = 0;
t.name = '';
t.suffixe = '';
t._listeners = [];
t.setTime = function (t) {
this.prevTime = this._time;
if (t > this.getDuration()) {
if (this.looping) {
this.rewind(t - this._duration);
this.update();
this.broadcastMessage('onMotionLooped', {target: this, type: 'onMotionLooped'});
} else {
this._time = this._duration;
this.update();
this.stop();
this.broadcastMessage('onMotionFinished', {target: this, type: 'onMotionFinished'});
}
} else if (t < 0) {
this.rewind();
this.update();
} else {
this._time = t;
this.update();
}
};
t.getTime = function () {
return this._time;
};
t.setDuration = function (d) {
this._duration = (d === null || d <= 0) ? 100000 : d;
};
t.getDuration = function () {
return this._duration;
};
t.setPosition = function (p) {
this.prevPos = this._pos;
var a = this.suffixe !== '' ? this.suffixe : '';
this.obj[this.prop] = Math.round(p) + a;
this._pos = p;
this.broadcastMessage('onMotionChanged', {target: this, type: 'onMotionChanged'});
};
t.getPosition = function (t) {
if (t === undefined) {
t = this._time;
}
return this.func(t, this.begin, this.change, this._duration);
};
t.setFinish = function (f) {
this.change = f - this.begin;
};
t.getFinish = function () {
return this.begin + this.change;
};
t.init = function (obj, prop, func, begin, finish, duration, suffixe) {
if (!arguments.length) {
return;
}
this._listeners = [];
this.addListener(this);
if (suffixe) {
this.suffixe = suffixe;
}
this.obj = obj;
this.prop = prop;
this.begin = begin;
this._pos = begin;
this.setDuration(duration);
if (func !== null && func !== '') {
this.func = func;
}
this.setFinish(finish);
};
t.start = function () {
this.rewind();
this.startEnterFrame();
this.broadcastMessage('onMotionStarted', {target: this, type: 'onMotionStarted'});
//alert('in');
};
t.rewind = function (t) {
this.stop();
this._time = (t === undefined) ? 0 : t;
this.fixTime();
this.update();
};
t.fforward = function () {
this._time = this._duration;
this.fixTime();
this.update();
};
t.update = function () {
this.setPosition(this.getPosition(this._time));
};
t.startEnterFrame = function () {
this.stopEnterFrame();
this.isPlaying = true;
this.onEnterFrame();
};
t.onEnterFrame = function () {
if (this.isPlaying) {
this.nextFrame();
// To get real smooth movement you have to set the timeout to 0 instead of 25
setTimeout(Delegate.create(this, this.onEnterFrame), 25);
}
};
t.nextFrame = function () {
this.setTime((this.getTimer() - this._startTime) / 1000);
};
t.stop = function () {
this.stopEnterFrame();
this.broadcastMessage('onMotionStopped', {target: this, type: 'onMotionStopped'});
};
t.stopEnterFrame = function () {
this.isPlaying = false;
};
t.playing = function () {
return this.isPlaying;
};
t.continueTo = function (finish, duration) {
this.begin = this._pos;
this.setFinish(finish);
if (this._duration !== undefined) {
this.setDuration(duration);
}
this.start();
};
t.resume = function () {
this.fixTime();
this.startEnterFrame();
this.broadcastMessage('onMotionResumed', {target: this, type: 'onMotionResumed'});
};
t.yoyo = function () {
this.continueTo(this.begin, this._time);
};
t.addListener = function (o) {
this.removeListener(o);
return this._listeners.push(o);
};
t.removeListener = function (o) {
var a = this._listeners,
i = a.length;
while (i--) {
if (a[i] === o) {
a.splice(i, 1);
return true;
}
}
return false;
};
t.broadcastMessage = function () {
var arr = [], i, e, a = this._listeners,
l = a.length;
for (i = 0; i < arguments.length; i++) {
arr.push(arguments[i]);
}
e = arr.shift();
for (i = 0; i < l; i++) {
if (a[i][e]) {
a[i][e].apply(a[i], arr);
}
}
};
t.fixTime = function () {
this._startTime = this.getTimer() - this._time * 1000;
};
t.getTimer = function () {
return new Date().getTime() - this._time;
};
Tween.backEaseIn = function (t, b, c, d, a, p) {
var s = 1.70158;
return c * (t /= d) * t * ((s + 1) * t - s) + b;
};
Tween.backEaseOut = function (t, b, c, d, a, p) {
var s = 1.70158;
return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;
};
Tween.backEaseInOut = function (t, b, c, d, a, p) {
var s = 1.70158;
if ((t /= d / 2) < 1) {
return c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b;
}
return c / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2) + b;
};
Tween.elasticEaseIn = function (t, b, c, d, a, p) {
var s;
if (t === 0) {
return b;
}
if ((t /= d) === 1) {
return b + c;
}
if (!p) {
p = d * 0.3;
}
if (!a || a < Math.abs(c)) {
a = c;
s = p / 4;
} else {
s = p / (2 * Math.PI) * Math.asin(c / a);
}
return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;
};
Tween.elasticEaseOut = function (t, b, c, d, a, p) {
var s;
if (t === 0) {
return b;
}
if ((t /= d) === 1) {
return b + c;
}
if (!p) {
p = d * 0.3;
}
if (!a || a < Math.abs(c)) {
a = c;
s = p / 4;
} else {
s = p / (2 * Math.PI) * Math.asin(c / a);
}
return (a * Math.pow(2, -10 * t) * Math.sin((t * d - s) * (2 * Math.PI) / p) + c + b);
};
Tween.elasticEaseInOut = function (t, b, c, d, a, p) {
var s;
if (t === 0) {
return b;
}
if ((t /= d / 2) === 2) {
return b + c;
}
if (!p) {
p = d * (0.3 * 1.5);
}
if (!a || a < Math.abs(c)) {
a = c;
s = p / 4;
} else {
s = p / (2 * Math.PI) * Math.asin(c / a);
}
if (t < 1) {
return -0.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;
}
return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p) * 0.5 + c + b;
};
Tween.bounceEaseOut = function (t, b, c, d) {
if ((t /= d) < (1 / 2.75)) {
return c * (7.5625 * t * t) + b;
} else if (t < (2 / 2.75)) {
return c * (7.5625 * (t -= (1.5 / 2.75)) * t + 0.75) + b;
} else if (t < (2.5 / 2.75)) {
return c * (7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375) + b;
} else {
return c * (7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375) + b;
}
};
Tween.bounceEaseIn = function (t, b, c, d) {
return c - Tween.bounceEaseOut(d - t, 0, c, d) + b;
};
Tween.bounceEaseInOut = function (t, b, c, d) {
if (t < d / 2) {
return Tween.bounceEaseIn(t * 2, 0, c, d) * 0.5 + b;
} else {
return Tween.bounceEaseOut(t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b;
}
};
Tween.strongEaseInOut = function (t, b, c, d) {
return c * (t /= d) * t * t * t * t + b;
};
Tween.regularEaseIn = function (t, b, c, d) {
return c * (t /= d) * t + b;
};
Tween.regularEaseOut = function (t, b, c, d) {
return -c * (t /= d) * (t - 2) + b;
};
Tween.regularEaseInOut = function (t, b, c, d) {
if ((t /= d / 2) < 1) {
return c / 2 * t * t + b;
}
return -c / 2 * ((--t) * (t - 2) - 1) + b;
};
Tween.strongEaseIn = function (t, b, c, d) {
return c * (t /= d) * t * t * t * t + b;
};
Tween.strongEaseOut = function (t, b, c, d) {
return c * ((t = t / d - 1) * t * t * t * t + 1) + b;
};
Tween.strongEaseInOut = function (t, b, c, d) {
if ((t /= d / 2) < 1) {
return c / 2 * t * t * t * t * t + b;
}
return c / 2 * ((t -= 2) * t * t * t * t + 2) + b;
};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

265
webfiles/monthlyrecord.htm Normal file
View File

@ -0,0 +1,265 @@
<!--
monthlyrecord.htm v:0.0.1 d:Feb 2021 Neil Thomas
Last modified: 2022/07/27 09:23:33
Page: 1 main panel plus a sidebar
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="weather data">
<meta name="keywords" content="Cumulus, weather, data, weather station">
<title>Cumulus MX</title>
<link rel="icon" type="image/png" href="images/favicon.png">
<!-- jQuery Local -->
<script src="lib/jquery/jquery-latest.min.js"></script>
<!-- Fonts System will default to a sans-serif font if no Internet connection -->
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Rosario:ital,wght@0,400;0,500;0,600;1,400;1,500;1,600&display=swap" rel="stylesheet">
<!-- All Styles -->
<link href="css/w3Pro.css" rel="stylesheet"> <!-- Basic w3shools responsive styles -->
<link href="css/colours.css" rel="stylesheet"> <!-- Slightly enhanced w3schools colours -->
<link href="css/mx-templates.css" rel="stylesheet"> <!-- Specific styles for these templates. -->
<!-- Scripts -->
<script src="js/setpagedata.js"></script> <!-- Utility javascripts for all pages. -->
<script src="js/monthlyrecdata.js"></script>
<style>
.mx-button {margin-bottom: 5px; border-radius: 4px;}
</style>
</head>
<body>
<div id="Header" class="w3-row w3-top w3-theme-dark w3-theme-bdr">
<div class="w3-row-padding site-width">
<div class="at-flex-between" style="align-items:center; flex-wrap:wrap;">
<img src="images/CumulusMX-Logo.png" class="w3-image logo" alt="Header logo"/>
<div class="w3-right-align" style="max-width:600px;">
<h5>Lat<span class="w3-hide-small">itude</span>:&nbsp;<span data-cmxdata="latitude"></span><span class="at-divider">|<wbr></span>Long<span class="w3-hide-small">itude</span>:&nbsp;<span data-cmxdata="longitude"></span><span class="at-divider">|<wbr></span>Alt<span class="w3-hide-small">itude</span>:&nbsp;<span data-cmxdata="altitude"></span></h5>
</div>
</div>
<!-- Start of Menu -->
<div id="Main_Menu" class="w3-bar w3-theme-d4 w3-theme-bdr">
</div>
<!-- Mobile menu -->
<div id="Main_Menu_Mobile" class="w3-bar-block w3-hide w3-hide-large">
</div> <!-- End of Mobile menu -->
</div>
</div>
<div id="Content"> <!-- Start of panel content -->
<div class="w3-row-padding w3-theme-light site-width"> <!-- Page Title -->
<div class="w3-col l12">
<h1>Monthly records<span class="subText"></span></h1>
</div>
</div> <!-- End of title row -->
<div class="w3-row site-width w3-theme-light"> <!-- Start of Main panel -->
<div class="w3-col l9 m12"> <!-- 3/4 width panel -->
<div class="w3-row-padding"> <!-- Row 1 of 3/4 width panel -->
<div class="w3-col s12"> <!-- Full width of above panel -->
<div class="w3-panel w3-card w3-theme-white">
<h2 class="">Records for <span id="MonthName">January</span></h2>
<div class="w3-responsive">
<table class="w3-table w3-hoverable" style="width:100%;" >
<tr class="w3-theme-d5">
<td colspan="3">Temperature and Humidity </td>
</tr>
<tr class="w3-theme-l2">
<td class="">High Temperature</td>
<td class="w3-right-align"><span id="TempH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span id="TempHT"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">Low Temperature</td>
<td class="w3-right-align"><span id="TempL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span id="TempLT"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">High Dew Point</td>
<td class="w3-right-align"><span id="DewPointH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span id="DewPointHT"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">Low Dew Point</td>
<td class="w3-right-align"><span id="DewPointL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span id="DewPointLT"></span></td>
</tr>
<tr data-cmx-apparent class="w3-theme-l2 w3-hide">
<td class="">High Apparent</td>
<td class="w3-right-align"><span id="AppTempH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span id="AppTempHT"></span></td>
</tr>
<tr data-cmx-apparent class="w3-theme-l2 w3-hide">
<td class="">Low Apparent</td>
<td class="w3-right-align"><span id="AppTempL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span id="AppTempLT"></span></td>
</tr>
<tr data-cmx-feels class="w3-theme-l2">
<td class="">High Feels Like</td>
<td class="w3-right-align"><span id="FeelsLikeH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span id="FeelsLikeHT"></span></td>
</tr>
<tr data-cmx-feels class="w3-theme-l2">
<td class="">Low Feels Like</td>
<td class="w3-right-align"><span id="FeelsLikeL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span id="FeelsLikeLT"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">Low Wind Chill</td>
<td class="w3-right-align"><span id="WChillL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span id="WChillLT"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">High Heat Index</td>
<td class="w3-right-align"><span id="HeatIndexH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span id="HeatIndexHT"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">High Minimum Temperature</td>
<td class="w3-right-align"><span id="MinTempH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span id="MinTempHT"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">Low Maximum Temperature</td>
<td class="w3-right-align"><span id="MaxTempL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span id="MaxTempLT"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">High Humidity</td>
<td class="w3-right-align"><span id="HumH"></span>&nbsp;%</td>
<td class=""><span id="HumHT"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">Low Humidity</td>
<td class="w3-right-align"><span id="HumL"></span>&nbsp;%</td>
<td class=""><span id="HumLT"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">High Daily Range</td>
<td class="w3-right-align"><span id="HighDailyTempRange"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span id="HighDailyTempRangeT"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">Low Daily Range</td>
<td class="w3-right-align"><span id="LowDailyTempRange"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span id="LowDailyTempRangeT"></span></td>
</tr>
<tr class="w3-theme-d4">
<td colspan="3">Rainfall</td>
</tr>
<tr class="w3-theme-l3">
<td class="">High Rain Rate</td>
<td class="w3-right-align"><span id="RainRateH"></span>&nbsp;<span data-cmxdata="rainunit"></span>/hr</td>
<td class=""><span id="RainRateHT"></span></td>
</tr>
<tr class="w3-theme-l3">
<td class="">High Hourly Rainfall</td>
<td class="w3-right-align"><span id="HourlyRainH"></span>&nbsp;<span data-cmxdata="rainunit"></span></td>
<td class=""><span id="HourlyRainHT"></span></td>
</tr>
<tr class="w3-theme-l3">
<td class="">High 24 Hour Rainfall</td>
<td class="w3-right-align"><span id="Rain24HourH"></span>&nbsp;<span data-cmxdata="rainunit"></span></td>
<td class=""><span id="Rain24HourHT"></span></td>
</tr>
<tr class="w3-theme-l3">
<td class="">High Daily Rainfall</td>
<td class="w3-right-align"><span id="DailyRainH"></span>&nbsp;<span data-cmxdata="rainunit"></span></td>
<td class=""><span id="DailyRainHT"></span></td>
</tr>
<tr class="w3-theme-l3">
<td class="">High Monthly Rainfall</td>
<td class="w3-right-align"><span id="MonthlyRainH"></span>&nbsp;<span data-cmxdata="rainunit"></span></td>
<td class=""><span id="MonthlyRainHT"></span></td>
</tr>
<tr class="w3-theme-l3">
<td class="">Longest Dry Period</td>
<td class="w3-right-align"><span id="LongestDryPeriod"></span>&nbsp;days</td>
<td class=""><span id="LongestDryPeriodT"></span></td>
</tr>
<tr class="w3-theme-l3">
<td class="">Longest Wet Period</td>
<td class="w3-right-align"><span id="LongestWetPeriod"></span>&nbsp;days</td>
<td class=""><span id="LongestWetPeriodT"></span></td>
</tr>
<tr class="w3-theme-d3">
<td colspan="3">Wind</td>
</tr>
<tr class="w3-theme-l4">
<td class="">High Wind Gust</td>
<td class="w3-right-align"><span id="GustH"></span>&nbsp;<span data-cmxdata="windunit"></span></td>
<td class=""><span id="GustHT"></span></td>
</tr>
<tr class="w3-theme-l4">
<td class="">High Wind Speed <span class="subText">(10 minute average)</span></td>
<td class="w3-right-align"><span id="WindH"></span>&nbsp;<span data-cmxdata="windunit"></span></td>
<td class=""><span id="WindHT"></span></td>
</tr>
<tr class="w3-theme-l4">
<td class="">High Daily Wind Run</td>
<td class="w3-right-align"><span id="WindRunH"></span>&nbsp;<span data-cmxdata="windrununit"></span></td>
<td class=""><span id="WindRunHT"></span></td>
</tr>
<tr class="w3-theme-d2">
<td colspan="3">Pressure <span class="subText">(sea level)</span></td>
</tr>
<tr class="w3-theme-l5">
<td class="">High Pressure</td>
<td class="w3-right-align"><span id="PressH"></span>&nbsp;<span data-cmxdata="pressunit"></span></td>
<td class=""><span id="PressHT"></span></td>
</tr>
<tr class="w3-theme-l5">
<td class="">Low Pressure</td>
<td class="w3-right-align"><span id="PressL"></span>&nbsp;<span data-cmxdata="pressunit"></span></td>
<td class=""><span id="PressLT"></span></td>
</tr>
</table>
<p class="w3-small credits">Page updated <span data-cmxdata="update"></span>.</p>
</div>
</div>
</div>
</div>
<div class="w3-row-padding w3-hide"> <!-- Row 2 of 3/4 width panel (hidden) -->
<div class="w3-col s12"> <!-- Full width of above panel -->
<div class="w3-panel w3-card w3-theme-white">
<h2 class="">Main panel</h2>
</div>
</div>
</div>
</div>
<div class="w3-col l3 m12"> <!-- Start of Sidebar 1/4 width -->
<div class="w3-row-padding">
<div class="w3-col l12">
<div class="w3-panel w3-container w3-theme-light">
<h3 class="w3-center">Welcome to <br/><span class="subText"><span data-cmxdata="longlocation"></span></span></h3>
<p>Select the required month below.</p>
<div id="btnArray" class="w3-bar-block w3-center">
<button id="btnMon0" class="w3-bar-item w3-btn w3-theme-l2 w3-theme-hvr at-slim mx-button" onClick="changeData(0)" aria-pressed="false">January</button>
<button id="btnMon1" class="w3-bar-item w3-btn w3-theme-l2 w3-theme-hvr at-slim mx-button" onClick="changeData(1)" aria-pressed="false">February</button>
<button id="btnMon2" class="w3-bar-item w3-btn w3-theme-l2 w3-theme-hvr at-slim mx-button" onclick="changeData(2)" aria-pressed="false">March</button>
<button id="btnMon3" class="w3-bar-item w3-btn w3-theme-l2 w3-theme-hvr at-slim mx-button" onclick="changeData(3)" aria-pressed="false">April</button>
<button id="btnMon4" class="w3-bar-item w3-btn w3-theme-l2 w3-theme-hvr at-slim mx-button" onclick="changeData(4)" aria-pressed="false">May</button>
<button id="btnMon5" class="w3-bar-item w3-btn w3-theme-l2 w3-theme-hvr at-slim mx-button" onclick="changeData(5)" aria-pressed="false">June</button>
<button id="btnMon6" class="w3-bar-item w3-btn w3-theme-l2 w3-theme-hvr at-slim mx-button" onclick="changeData(6)" aria-pressed="false">July</button>
<button id="btnMon7" class="w3-bar-item w3-btn w3-theme-l2 w3-theme-hvr at-slim mx-button" onclick="changeData(7)" aria-pressed="false">August</button>
<button id="btnMon8" class="w3-bar-item w3-btn w3-theme-l2 w3-theme-hvr at-slim mx-button" onclick="changeData(8)" aria-pressed="false">September</button>
<button id="btnMon9" class="w3-bar-item w3-btn w3-theme-l2 w3-theme-hvr at-slim mx-button" onclick="changeData(9)" aria-pressed="false">October</button>
<button id="btnMon10" class="w3-bar-item w3-btn w3-theme-l2 w3-theme-hvr at-slim mx-button" onclick="changeData(10)" aria-pressed="false">November</button>
<button id="btnMon11" class="w3-bar-item w3-btn w3-theme-l2 w3-theme-hvr at-slim mx-button" onclick="changeData(11)" aria-pressed="false">December</button>
</div>
</div>
</div>
</div>
</div>
</div> <!-- End of panel content -->
</div> <!-- End of content -->
<div id="Footer" class="w3-row w3-bottom w3-theme-dark w3-theme-bdr">
<div class="w3-row-padding site-width">
<p><em>Cumulus MX Template by Neil Thomas <script>document.write(new Date().getFullYear());</script>
<span class="w3-right">Powered by <span class="w3-theme-txt">Cumulus MX</span> v:<span data-cmxdata="version"></span>, b:<span data-cmxdata="build"></span></span></em></p>
</div>
</div>
</body>
</html>

130
webfiles/noaareport.htm Normal file
View File

@ -0,0 +1,130 @@
<!--
noaareport.htm v:0.0.1 d:Feb 2021 Neil Thomas
Last modified: 2021/06/10 15:48:11
Page: 1 main panel plus a sidebar
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="weather data">
<meta name="keywords" content="Cumulus, weather, data, weather station">
<title>Cumulus MX</title>
<link rel="icon" type="image/png" href="images/favicon.png">
<!-- jQuery Local -->
<script src="lib/jquery/jquery-latest.min.js"></script>
<!-- Fonts System will default to a sans-serif font if no Internet connection -->
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Rosario:ital,wght@0,400;0,500;0,600;1,400;1,500;1,600&display=swap" rel="stylesheet">
<!-- All Styles -->
<link href="css/w3Pro.css" rel="stylesheet"> <!-- Basic w3schools responsive styles -->
<link href="css/colours.css" rel="stylesheet"> <!-- Slightly enhanced w3schools colours -->
<link href="css/mx-templates.css" rel="stylesheet"> <!-- Specific styles for these templates. -->
<!-- Scripts -->
<script src="js/setpagedata.js"></script> <!-- Utility JavaScript's for all pages. -->
<script src="js/noaarpts.js"></script>
<style>
#year, #month {
padding-bottom: 4px;
padding-top: 5px;
}
</style>
</head>
<body>
<div id="Header" class="w3-row w3-top w3-theme-dark w3-theme-bdr">
<div class="w3-row-padding site-width">
<div class="at-flex-between" style="align-items:center; flex-wrap:wrap;">
<img src="images/CumulusMX-Logo.png" class="w3-image logo" alt="Header logo"/>
<div class="w3-right-align" style="max-width:600px;">
<h5>Lat<span class="w3-hide-small">itude</span>:&nbsp;<span data-cmxdata="latitude"></span><span class="at-divider">|<wbr></span>Long<span class="w3-hide-small">itude</span>:&nbsp;<span data-cmxdata="longitude"></span><span class="at-divider">|<wbr></span>Alt<span class="w3-hide-small">itude</span>:&nbsp;<span data-cmxdata="altitude"></span></h5>
</div>
</div>
<!-- Start of Menu -->
<div id="Main_Menu" class="w3-bar w3-theme-d4 w3-theme-bdr">
</div>
<!-- Mobile menu -->
<div id="Main_Menu_Mobile" class="w3-bar-block w3-hide w3-hide-large">
</div> <!-- End of Mobile menu -->
</div>
</div>
<!-- START OF PAGE CONTENT Don't change anything above -->
<div id="Content"> <!-- Start of panel content -->
<div class="w3-row-padding w3-theme-light site-width">
<div class="w3-col l12">
<!-- Page Title goes HERE -->
<div class="at-flex-between at-flex-items-center">
<h1>NOAA Reports<span class="subText"></span></h1>
</div>
</div>
</div> <!-- End of title row -->
<!-- Start of main content panels -->
<div class="w3-row site-width w3-theme-light">
<div class="w3-col l9 m12"> <!-- 3/4 width panel -->
<div class="w3-row-padding">
<div class="w3-col s12">
<div id="NOAAMenu" class="w3-bar">
<div class="w3-bar-item at-slim">
<select id="year" class="w3-select w3-theme-l4" onchange="getYearRpt(this.value);"></select>
</div>
<div class="w3-bar-item at-slim">
<select id="month" class="w3-select w3-theme-l4" onchange="getMonRpt(this.value);">
<option id="opt-year" value="0" style="text-transform: uppercase;">Annual</option>
<option id="opt-1" value="1">January</option>
<option id="opt-2" value="2">February</option>
<option id="opt-3" value="3">March</option>
<option id="opt-4" value="4">April</option>
<option id="opt-5" value="5">May</option>
<option id="opt-6" value="6">June</option>
<option id="opt-7" value="7">July</option>
<option id="opt-8" value="8">August</option>
<option id="opt-9" value="9">September</option>
<option id="opt-10" value="10">October</option>
<option id="opt-11" value="11">November</option>
<option id="opt-12" value="12">December</option>
</select>
</div>
</div>
</div>
</div>
<div class="w3-row-padding"> <!-- Row 1 of 3/4 width panel -->
<div class="w3-col s12"> <!-- Full width panel on all screens -->
<div class="w3-panel w3-card w3-theme-white">
<!-- Panel title here -->
<!-- <h3><span id="RptTitle"></span></h3> -->
<!-- Panel content goes here -->
<pre class="w3-responsive" style="min-height:500px;"><span id="noaareport">Loading report...</span></pre>
<p class="w3-small">Page data updated <span data-cmxdata="update"></span>.</p>
</div>
</div>
</div>
</div>
<!-- Start of Sidebar -->
<div class="w3-col l3 m12">
<div class="w3-row-padding">
<!-- First panel of sidebar -->
<div class="w3-col l12"> <!-- Full width of sidebar -->
<div class="w3-panel w3-container w3-theme-light">
<!-- Sidebar content here -->
<h3 class="w3-center">Welcome to <br/><span class="subText"><span data-cmxdata="longlocation"></span></span></h3>
<!-- You can remove the above line if you wish -->
</div>
</div>
</div>
</div>
</div> <!-- End of panel content -->
</div> <!-- End of content -->
<!-- CHANGE NOTHING BELOW HERE -->
<!-- Footer -->
<div id="Footer" class="w3-row w3-bottom w3-theme-dark w3-theme-bdr">
<div class="w3-row-padding site-width">
<p><em>Cumulus MX Template by Neil Thomas <script>document.write(new Date().getFullYear());</script>
<span class="w3-right">Powered by <span class="w3-theme-txt">Cumulus MX</span> v:<span data-cmxdata="version"></span>, b:<span data-cmxdata="build"></span></span></em></p>
</div>
</div>
</body>
</html>

240
webfiles/record.htm Normal file
View File

@ -0,0 +1,240 @@
<!--
record.htm v:0.0.1 d:Feb 2021 Neil Thomas
Last modified: 2022/07/27 10:25:28
Page: 1 main panel plus a sidebar
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="weather data">
<meta name="keywords" content="Cumulus, weather, data, weather station">
<title>Cumulus MX</title>
<link rel="icon" type="image/png" href="images/favicon.png">
<!-- jQuery Local -->
<script src="lib/jquery/jquery-latest.min.js"></script>
<!-- Fonts System will default to a sans-serif font if no Internet connection -->
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Rosario:ital,wght@0,400;0,500;0,600;1,400;1,500;1,600&display=swap" rel="stylesheet">
<!-- All Styles -->
<link href="css/w3Pro.css" rel="stylesheet"> <!-- Basic w3shools responsive styles -->
<link href="css/colours.css" rel="stylesheet"> <!-- Slightly enhanced w3schools colours -->
<link href="css/mx-templates.css" rel="stylesheet"> <!-- Specific styles for these templates. -->
<!-- Scripts -->
<script src="js/setpagedata.js"></script> <!-- Utility javascripts for all pages. -->
</head>
<body>
<div id="Header" class="w3-row w3-top w3-theme-dark w3-theme-bdr">
<div class="w3-row-padding site-width">
<div class="at-flex-between" style="align-items:center; flex-wrap:wrap;">
<img src="images/CumulusMX-Logo.png" class="w3-image logo" alt="Header logo"/>
<div class="w3-right-align" style="max-width:600px;">
<h5>Lat<span class="w3-hide-small">itude</span>:&nbsp;<span data-cmxdata="latitude"></span><span class="at-divider">|<wbr></span>Long<span class="w3-hide-small">itude</span>:&nbsp;<span data-cmxdata="longitude"></span><span class="at-divider">|<wbr></span>Alt<span class="w3-hide-small">itude</span>:&nbsp;<span data-cmxdata="altitude"></span></h5>
</div>
</div>
<!-- Start of Menu -->
<div id="Main_Menu" class="w3-bar w3-theme-d4 w3-theme-bdr">
</div>
<!-- Mobile menu -->
<div id="Main_Menu_Mobile" class="w3-bar-block w3-hide w3-hide-large">
</div> <!-- End of Mobile menu -->
</div>
</div>
<div id="Content"> <!-- Start of panel content -->
<div class="w3-row-padding w3-theme-light site-width"> <!-- Page Title -->
<div class="w3-col l12">
<h1>Records Since <span data-cmxdata="recordsbegandate"></span></h1>
</div>
</div> <!-- End of title row -->
<div class="w3-row site-width w3-theme-light"> <!-- Start of Main panel -->
<div class="w3-col l9 m12"> <!-- 3/4 width panel -->
<div class="w3-row-padding"> <!-- Row 1 of 3/4 width panel -->
<div class="w3-col s12"> <!-- Full width of above panel -->
<div class="w3-panel w3-card w3-theme-white">
<h2 class="">Records</h2>
<div class="w3-responsive">
<table class="w3-table w3-hoverable" style="width:100%;" >
<tr class="w3-theme-d5">
<td colspan="3">Temperature and Humidity </td>
</tr>
<tr class="w3-theme-l2">
<td class="">High Temperature</td>
<td class="w3-right-align"><span data-cmxdata="tempH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="TtempH"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">Low Temperature</td>
<td class="w3-right-align"><span data-cmxdata="tempL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="TtempL"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">High Dew Point</td>
<td class="w3-right-align"><span data-cmxdata="dewpointH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="TdewpointH"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">Low Dew Point</td>
<td class="w3-right-align"><span data-cmxdata="dewpointL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="TdewpointL"></span></td>
</tr>
<tr data-cmx-apparent class="w3-theme-l2 w3-hide">
<td class="">High Apparent</td>
<td class="w3-right-align"><span data-cmxdata="apptempH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="TapptempH"></span></td>
</tr>
<tr data-cmx-apparent class="w3-theme-l2 w3-hide">
<td class="">Low Apparent</td>
<td class="w3-right-align"><span data-cmxdata="apptempL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="TapptempL"></span></td>
</tr>
<tr data-cmx-feels class="w3-theme-l2">
<td class="">High Feels Like</td>
<td class="w3-right-align"><span data-cmxdata="feelslikeH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="TfeelslikeH"></span></td>
</tr>
<tr data-cmx-feels class="w3-theme-l2">
<td class="">Low Feels Like</td>
<td class="w3-right-align"><span data-cmxdata="feelslikeL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="TfeelslikeL"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">Low Wind Chill</td>
<td class="w3-right-align"><span data-cmxdata="wchillH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="TwchillH"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">High Heat Index</td>
<td class="w3-right-align"><span data-cmxdata="heatindexH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="TheatindexH"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">High Minimum Temperature</td>
<td class="w3-right-align"><span data-cmxdata="mintempH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="TmintempH"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">Low Maximum Temperature</td>
<td class="w3-right-align"><span data-cmxdata="maxtempL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="TmaxtempL"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">High Humidity</td>
<td class="w3-right-align"><span data-cmxdata="humH"></span>&nbsp;%</td>
<td class=""><span data-cmxdata="ThumH"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">Low Humidity </td>
<td class="w3-right-align"><span data-cmxdata="humL"></span>&nbsp;%</td>
<td class=""><span data-cmxdata="ThumL"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">High Daily Range</td>
<td class="w3-right-align"><span data-cmxdata="HighDailyTempRange"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="THighDailyTempRange"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">Low Daily Range</td>
<td class="w3-right-align"><span data-cmxdata="LowDailyTempRange"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="TLowDailyTempRange"></span></td>
</tr>
<tr class="w3-theme-d4">
<td colspan="3">Rainfall</td>
</tr>
<tr class="w3-theme-l3">
<td class="">High Rain Rate</td>
<td class="w3-right-align"><span data-cmxdata="rrateM"></span>&nbsp;<span data-cmxdata="rainunit"></span>/hr</td>
<td class=""><span data-cmxdata="TrrateM"></span></td>
</tr>
<tr class="w3-theme-l3">
<td class="">High Hourly Rainfall</td>
<td class="w3-right-align"><span data-cmxdata="rfallhH"></span>&nbsp;<span data-cmxdata="rainunit"></span></td>
<td class=""><span data-cmxdata="TrfallhH"></span></td>
</tr>
<tr class="w3-theme-l3">
<td class="">High 24 Hour Rainfall</td>
<td class="w3-right-align"><span data-cmxdata="r24hourH"></span>&nbsp;<span data-cmxdata="rainunit"></span></td>
<td class=""><span data-cmxdata="Tr24hourH"></span></td>
</tr>
<tr class="w3-theme-l3">
<td class="">High Daily Rainfall</td>
<td class="w3-right-align"><span data-cmxdata="rfallH"></span>&nbsp;<span data-cmxdata="rainunit"></span></td>
<td class=""><span data-cmxdata="TrfallH"></span></td>
</tr>
<tr class="w3-theme-l3">
<td class="">High Monthly Rainfall</td>
<td class="w3-right-align"><span data-cmxdata="rfallmH"></span>&nbsp;<span data-cmxdata="rainunit"></span></td>
<td class=""><span data-cmxdata="TrfallmH"></span></td>
</tr>
<tr class="w3-theme-l3">
<td class="">Longest Dry Period</td>
<td class="w3-right-align"><span data-cmxdata="LongestDryPeriod"></span>&nbsp;days</td>
<td class=""><span data-cmxdata="TLongestDryPeriod"></span></td>
</tr>
<tr class="w3-theme-l3">
<td class="">Longest Wet Period</td>
<td class="w3-right-align"><span data-cmxdata="LongestWetPeriod"></span>&nbsp;days</td>
<td class=""><span data-cmxdata="TLongestWetPeriod"></span></td>
</tr>
<tr class="w3-theme-d3">
<td colspan="3">Wind</td>
</tr>
<tr class="w3-theme-l4">
<td class="">High Wind Gust</td>
<td class="w3-right-align"><span data-cmxdata="gustM"></span>&nbsp;<span data-cmxdata="windunit"></span></td>
<td class=""><span data-cmxdata="TgustM"></span></td>
</tr>
<tr class="w3-theme-l4">
<td class="">High Wind Speed <span class="subText">(10 minute average)</span></td>
<td class="w3-right-align"><span data-cmxdata="wspeedH"></span>&nbsp;<span data-cmxdata="windunit"></span></td>
<td class=""><span data-cmxdata="TwspeedH"></span></td>
</tr>
<tr class="w3-theme-l4">
<td class="">High Daily Wind Run</td>
<td class="w3-right-align"><span data-cmxdata="windrunH"></span>&nbsp;<span data-cmxdata="windrununit"></span></td>
<td class=""><span data-cmxdata="TwindrunH"></span></td>
</tr>
<tr class="w3-theme-d2">
<td colspan="3">Pressure <span class="subText">(sea level)</span></td>
</tr>
<tr class="w3-theme-l5">
<td class="">High Pressure</td>
<td class="w3-right-align"><span data-cmxdata="pressH"></span>&nbsp;<span data-cmxdata="pressunit"></span></td>
<td class=""><span data-cmxdata="TpressH"></span></td>
</tr>
<tr class="w3-theme-l5">
<td class="">Low Pressure</td>
<td class="w3-right-align"><span data-cmxdata="pressL"></span>&nbsp;<span data-cmxdata="pressunit"></span></td>
<td class=""><span data-cmxdata="TpressL"></span></td>
</tr>
</table>
<p class="w3-small credits">Page updated <span data-cmxdata="update"></span>.</p>
</div>
</div>
</div>
</div>
</div>
<div class="w3-col l3 m12"> <!-- Start of Sidebar 1/4 width -->
<div class="w3-row-padding">
<div class="w3-col l12">
<div class="w3-panel w3-container w3-theme-light">
<h3 class="w3-center">Welcome to <br/><span class="subText"><span data-cmxdata="longlocation"></span></span></h3>
<p>Records began on <span data-cmxdata="recordsbegandate"></span>. Here are the extremes recorded since then.</p>
</div>
</div>
</div>
</div>
</div> <!-- End of panel content -->
</div> <!-- End of content -->
<div id="Footer" class="w3-row w3-bottom w3-theme-dark w3-theme-bdr">
<div class="w3-row-padding site-width">
<p><em>Cumulus MX Template by Neil Thomas <script>document.write(new Date().getFullYear());</script>
<span class="w3-right">Powered by <span class="w3-theme-txt">Cumulus MX</span> v:<span data-cmxdata="version"></span>, b:<span data-cmxdata="build"></span></span></em></p>
</div>
</div>
</body>
</html>

137
webfiles/selectachart.htm Normal file
View File

@ -0,0 +1,137 @@
<!--
selectachart.htm v:0.0.1 d:Feb 2021 Neil Thomas
Last modified: 2023/02/10 14:48:11
Page: 1 main panel plus a sidebar
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="weather data">
<meta name="keywords" content="Cumulus, weather, data, weather station">
<title>Cumulus MX</title>
<link rel="icon" type="image/png" href="images/favicon.png">
<!-- jQuery Local -->
<script src="lib/jquery/jquery-latest.min.js"></script>
<!-- Fonts System will default to a sans-serif font if no Internet connection -->
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Rosario:ital,wght@0,400;0,500;0,600;1,400;1,500;1,600&display=swap" rel="stylesheet">
<!-- All Styles -->
<link href="css/w3Pro.css" rel="stylesheet"> <!-- Basic w3shools responsive styles -->
<link href="css/colours.css" rel="stylesheet"> <!-- Slightly enhanced w3schools colours -->
<link href="css/mx-templates.css" rel="stylesheet"> <!-- Specific styles for these templates. -->
<!-- Scripts -->
<script src="js/setpagedata.js"></script> <!-- Utility javascripts for all pages. -->
<style>
#chartcontainer {
min-height: 550px;
margin-top:16px;
margin-bottom: 16px;
}
.graphs-width {
max-width:1250px;
margin: auto
}
.narrow-width {
max-width: 500px;
}
.select-value {
width:75%;
display:inline-block;
}
.select-color {
width:20%;
}
</style>
</head>
<body>
<div id="Header" class="w3-row w3-top w3-theme-dark w3-theme-bdr">
<div class="w3-row-padding site-width">
<div class="at-flex-between" style="align-items:center; flex-wrap:wrap;">
<img src="images/CumulusMX-Logo.png" class="w3-image logo" alt="Header logo"/>
<div class="w3-right-align" style="max-width:600px;">
<h5>Lat<span class="w3-hide-small">itude</span>:&nbsp;<span data-cmxdata="latitude"></span><span class="at-divider">|<wbr></span>Long<span class="w3-hide-small">itude</span>:&nbsp;<span data-cmxdata="longitude"></span><span class="at-divider">|<wbr></span>Alt<span class="w3-hide-small">itude</span>:&nbsp;<span data-cmxdata="altitude"></span></h5>
</div>
</div>
<!-- Start of Menu -->
<div id="Main_Menu" class="w3-bar w3-theme-d4 w3-theme-bdr">
</div>
<!-- Mobile menu -->
<div id="Main_Menu_Mobile" class="w3-bar-block w3-hide w3-hide-large">
</div> <!-- End of Mobile menu -->
</div>
</div>
<div id="Content"> <!-- Start of main content -->
<div class="w3-row-padding w3-theme-light graphs-width"> <!-- Page Title -->
<div class="w3-col l12">
<h1>Charts based on data you select<span class="subText"></span></h1>
</div>
</div> <!-- End of title row -->
<div class="w3-row-padding w3-theme-light graphs-width"> <!-- First Row -->
<div class="w3-col s12"> <!-- Column of first row -->
<div class="w3-panel w3-card w3-theme-white">
<figure>
<div id="chartcontainer"></div>
</figure>
</div>
</div>
</div> <!-- End of first column of first row -->
<div class="w3-row-padding w3-theme-light graphs-width"> <!-- Start of second row -->
<div class="w3-col s12">
<div class="w3-center">
<!-- Selector buttons -->
<div class="at-flex-between" style="flex-wrap:wrap"> <!-- Main flex container: between forces content left & right -->
<div class="at-flex-justify" style="max-width:550px;flex-wrap:wrap;flex:2"> <!-- Left bar for selectors -->
<div class="" style="max-width:170px;min-height:2.5em;">
<select class="w3-select select-value" name="data0" id="data0" onchange="procDataSelect(this)"></select>
<select class="w3-select select-color" name="colour0" id="colour0" onchange="updateColour(this)"></select>
</div>
<div class="" style="max-width:170px;min-height:2.5em;">
<select class="w3-select select-value" name="data1" id="data1" onchange="procDataSelect(this)"></select>
<select class="w3-select select-color" name="colour1" id="colour1" onchange="updateColour(this)"></select>
</div>
<div class="" style="max-width:170px;min-height:2.5em;">
<select class="w3-select select-value" name="data2" id="data2" onchange="procDataSelect(this)"></select>
<select class="w3-select select-color" name="colour2" id="colour2" onchange="updateColour(this)"></select>
</div>
</div>
<div class="at-flex-justify" style="max-width:550px;flex-wrap:wrap;flex:2"> <!-- Right bar for selectors -->
<div class="" style="max-width:170px;min-height:2.5em;">
<select class="w3-select select-value" name="data3" id="data3" onchange="procDataSelect(this)"></select>
<select class="w3-select select-color" name="colour3" id="colour3" onchange="updateColour(this)"></select>
</div>
<div class="" style="max-width:170px;min-height:2.5em;">
<select class="w3-select select-value" name="data4" id="data4" onchange="procDataSelect(this)"></select>
<select class="w3-select select-color" name="colour4" id="colour4" onchange="updateColour(this)"></select>
</div>
<div class="" style="max-width:170px;min-height:2.5em;">
<select class="w3-select select-value" name="data5" id="data5" onchange="procDataSelect(this)"></select>
<select class="w3-select select-color" name="colour5" id="colour5" onchange="updateColour(this)"></select>
</div>
</div>
</div>
<div class="w3-panel">Click on a button to display the corresponding chart.&nbsp; Mouse over the chart to see the values at any given time.</div>
</div>
</div>
</div> <!-- End of first column of second row -->
</div> <!-- End of content -->
<div id="Footer" class="w3-row w3-bottom w3-theme-dark w3-theme-bdr">
<div class="w3-row-padding site-width">
<p><em>Cumulus MX Template by Neil Thomas <script>document.write(new Date().getFullYear());</script>
<span class="w3-right">Powered by <span class="w3-theme-txt">Cumulus MX</span> v:<span data-cmxdata="version"></span>, b:<span data-cmxdata="build"></span></span></em></p>
</div>
</div>
<script src="https://code.highcharts.com/stock/10.3.3/highstock.js"></script>
<script src="https://code.highcharts.com/stock/10.3.3/modules/exporting.js"></script>
<script src="https://code.highcharts.com/10.3.3/modules/export-data.js"></script>
<script src="https://code.highcharts.com/10.3.3/modules/accessibility.js"></script>
<script src="https://code.highcharts.com/10.3.3/modules/boost.js"></script>
<script src="https://code.highcharts.com/10.3.3/themes/grid.js"></script>
<script src="js/selectachart.js"></script>
</body>
</html>

235
webfiles/thismonth.htm Normal file
View File

@ -0,0 +1,235 @@
<!--
thismonth.htm v:0.0.1 d:Feb 2021 Neil Thomas
Last modified: 2022/07/27 09:16:14
Page: 1 main panel plus a sidebar
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="weather data">
<meta name="keywords" content="Cumulus, weather, data, weather station">
<title>Cumulus MX</title>
<link rel="icon" type="image/png" href="images/favicon.png">
<!-- jQuery Local -->
<script src="lib/jquery/jquery-latest.min.js"></script>
<!-- Fonts System will default to a sans-serif font if no Internet connection -->
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Rosario:ital,wght@0,400;0,500;0,600;1,400;1,500;1,600&display=swap" rel="stylesheet">
<!-- All Styles -->
<link href="css/w3Pro.css" rel="stylesheet"> <!-- Basic w3shools responsive styles -->
<link href="css/colours.css" rel="stylesheet"> <!-- Slightly enhanced w3schools colours -->
<link href="css/mx-templates.css" rel="stylesheet"> <!-- Specific styles for these templates. -->
<!-- Scripts -->
<script src="js/setpagedata.js"></script> <!-- Utility javascripts for all pages. -->
</head>
<body>
<div id="Header" class="w3-row w3-top w3-theme-dark w3-theme-bdr">
<div class="w3-row-padding site-width">
<div class="at-flex-between" style="align-items:center; flex-wrap:wrap;">
<img src="images/CumulusMX-Logo.png" class="w3-image logo" alt="Header logo"/>
<div class="w3-right-align" style="max-width:600px;">
<h5>Lat<span class="w3-hide-small">itude</span>:&nbsp;<span data-cmxdata="latitude"></span><span class="at-divider">|<wbr></span>Long<span class="w3-hide-small">itude</span>:&nbsp;<span data-cmxdata="longitude"></span><span class="at-divider">|<wbr></span>Alt<span class="w3-hide-small">itude</span>:&nbsp;<span data-cmxdata="altitude"></span></h5>
</div>
</div>
<!-- Start of Menu -->
<div id="Main_Menu" class="w3-bar w3-theme-d4 w3-theme-bdr">
</div>
<!-- Mobile menu -->
<div id="Main_Menu_Mobile" class="w3-bar-block w3-hide w3-hide-large">
</div> <!-- End of Mobile menu -->
</div>
</div>
<div id="Content"> <!-- Start of panel content -->
<div class="w3-row-padding w3-theme-light site-width"> <!-- Page Title -->
<div class="w3-col l12">
<h1><span data-cmxdata="monthname"></span> highs &amp; lows</h1>
</div>
</div> <!-- End of title row -->
<div class="w3-row site-width w3-theme-light"> <!-- Start of Main panel -->
<div class="w3-col l9 m12"> <!-- 3/4 width panel -->
<div class="w3-row-padding"> <!-- Row 1 of 3/4 width panel -->
<div class="w3-col s12"> <!-- Full width of above panel -->
<div class="w3-panel w3-card w3-theme-white">
<h2 class=""><span data-cmxdata="monthname"></span> <span data-cmxdata="year"></span> records</h2>
<div class="w3-responsive">
<table class="w3-table w3-hoverable" style="width:100%;">
<tr class="w3-theme-d5">
<td colspan="3">Temperature and Humidity </td>
</tr>
<tr class="w3-theme-l2">
<td class="">High Temperature</td>
<td class="w3-right-align"><span data-cmxdata="MonthTempH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="MonthTempHT"></span> on <span data-cmxdata="MonthTempHD"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">Low Temperature</td>
<td class="w3-right-align"><span data-cmxdata="MonthTempL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="MonthTempLT"></span> on <span data-cmxdata="MonthTempLD"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">High Dew Point</td>
<td class="w3-right-align"><span data-cmxdata="MonthDewPointH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="MonthDewPointHT"></span> on <span data-cmxdata="MonthDewPointHD"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">Low Dew Point</td>
<td class="w3-right-align"><span data-cmxdata="MonthDewPointL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="MonthDewPointLT"></span> on <span data-cmxdata="MonthDewPointLD"></span></td>
</tr>
<tr data-cmx-apparent class="w3-theme-l2 w3-hide">
<td class="">High Apparent</td>
<td class="w3-right-align"><span data-cmxdata="MonthAppTempH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="MonthAppTempHT"></span> on <span data-cmxdata="MonthAppTempHD"></span></td>
</tr>
<tr data-cmx-apparent class="w3-theme-l2 w3-hide">
<td class="">Low Apparent</td>
<td class="w3-right-align"><span data-cmxdata="MonthAppTempL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="MonthAppTempLT"></span> on <span data-cmxdata="MonthAppTempLD"></span></td>
</tr>
<tr data-cmx-feels class="w3-theme-l2">
<td class="">High Feels Like</td>
<td class="w3-right-align"><span data-cmxdata="MonthFeelsLikeH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="MonthFeelsLikeHT"></span> on <span data-cmxdata="MonthFeelsLikeHD"></span></td>
</tr>
<tr data-cmx-feels class="w3-theme-l2">
<td class="">Low Feels Like</td>
<td class="w3-right-align"><span data-cmxdata="MonthFeelsLikeL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="MonthFeelsLikeLT"></span> on <span data-cmxdata="MonthFeelsLikeLD"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">Low Wind Chill</td>
<td class="w3-right-align"><span data-cmxdata="MonthWChillL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="MonthWChillLT"></span> on <span data-cmxdata="MonthWChillLD"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">High Heat Index</td>
<td class="w3-right-align"><span data-cmxdata="MonthHeatIndexH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="MonthHeatIndexHT"></span> on <span data-cmxdata="MonthHeatIndexHD"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">High Minimum Temperature</td>
<td class="w3-right-align"><span data-cmxdata="MonthMinTempH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="MonthMinTempHD"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">Low Maximum Temperature</td>
<td class="w3-right-align"><span data-cmxdata="MonthMaxTempL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="MonthMaxTempLD"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">High Humidity</td>
<td class="w3-right-align"><span data-cmxdata="MonthHumH"></span>&nbsp;%</td>
<td class=""><span data-cmxdata="MonthHumHT"></span> on <span data-cmxdata="MonthHumHD"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">Low Humidity </td>
<td class="w3-right-align"><span data-cmxdata="MonthHumL"></span>&nbsp;%</td>
<td class=""><span data-cmxdata="MonthHumLT"></span> on <span data-cmxdata="MonthHumLD"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">High Daily Range</td>
<td class="w3-right-align"><span data-cmxdata="MonthHighDailyTempRange"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="MonthHighDailyTempRangeD"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">Low Daily Range</td>
<td class="w3-right-align"><span data-cmxdata="MonthLowDailyTempRange"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="MonthLowDailyTempRangeD"></span></td>
</tr>
<tr class="w3-theme-d4">
<td colspan="3">Rainfall</td>
</tr>
<tr class="w3-theme-l3">
<td class="">High Rain Rate</td>
<td class="w3-right-align"><span data-cmxdata="MonthRainRateH"></span>&nbsp;<span data-cmxdata="rainunit"></span>/hr</td>
<td class=""><span data-cmxdata="MonthRainRateHT"></span> on <span data-cmxdata="MonthRainRateHD"></span></td>
</tr>
<tr class="w3-theme-l3">
<td class="">High Hourly Rainfall</td>
<td class="w3-right-align"><span data-cmxdata="MonthHourlyRainH"></span>&nbsp;<span data-cmxdata="rainunit"></span></td>
<td class=""><span data-cmxdata="MonthHourlyRainHT"></span> on <span data-cmxdata="MonthHourlyRainHD"></span></td>
</tr>
<tr class="w3-theme-l3">
<td class="">High 24 Hour Rainfall</td>
<td class="w3-right-align"><span data-cmxdata="MonthRain24HourH"></span>&nbsp;<span data-cmxdata="rainunit"></span></td>
<td class=""><span data-cmxdata="MonthRain24HourHT"></span> on <span data-cmxdata="MonthRain24HourHD"></span></td>
</tr>
<tr class="w3-theme-l3">
<td class="">High Daily Rainfall</td>
<td class="w3-right-align"><span data-cmxdata="MonthDailyRainH"></span>&nbsp;<span data-cmxdata="rainunit"></span></td>
<td class=""><span data-cmxdata="MonthDailyRainHD"></span></td>
</tr>
<tr class="w3-theme-l3">
<td class="">Longest Dry Period</td>
<td class="w3-right-align"><span data-cmxdata="MonthLongestDryPeriod"></span>&nbsp;days</td>
<td class="">to <span data-cmxdata="MonthLongestDryPeriodD"></span></td>
</tr>
<tr class="w3-theme-l3">
<td class="">Longest Wet Period</td>
<td class="w3-right-align"><span data-cmxdata="MonthLongestWetPeriod"></span>&nbsp;days</td>
<td class="">to <span data-cmxdata="MonthLongestWetPeriodD"></span></td>
</tr>
<tr class="w3-theme-d3">
<td colspan="3">Wind</td>
</tr>
<tr class="w3-theme-l4">
<td class="">High Wind Gust</td>
<td class="w3-right-align"><span data-cmxdata="MonthGustH"></span>&nbsp;<span data-cmxdata="windunit"></span></td>
<td class=""><span data-cmxdata="MonthGustHT"></span> on <span data-cmxdata="MonthGustHD"></span></td>
</tr>
<tr class="w3-theme-l4">
<td class="">High Wind Speed <span class="subText">(10 minute average)</span></td>
<td class="w3-right-align"><span data-cmxdata="MonthWindH"></span>&nbsp;<span data-cmxdata="windunit"></span></td>
<td class=""><span data-cmxdata="MonthWindHT"></span> on <span data-cmxdata="MonthWindHD"></span></td>
</tr>
<tr class="w3-theme-l4">
<td class="">High Daily Wind Run</td>
<td class="w3-right-align"><span data-cmxdata="MonthWindRunH"></span>&nbsp;<span data-cmxdata="windrununit"></span></td>
<td class=""><span data-cmxdata="MonthWindRunHD"></span></td>
</tr>
<tr class="w3-theme-d2">
<td colspan="3">Pressure <span class="subText">(sea level)</span></td>
</tr>
<tr class="w3-theme-l5">
<td class="">High Pressure</td>
<td class="w3-right-align"><span data-cmxdata="MonthPressH"></span>&nbsp;<span data-cmxdata="pressunit"></span></td>
<td class=""><span data-cmxdata="MonthPressHT"></span> on <span data-cmxdata="MonthPressHD"></span></td>
</tr>
<tr class="w3-theme-l5">
<td class="">Low Pressure</td>
<td class="w3-right-align"><span data-cmxdata="MonthPressL"></span>&nbsp;<span data-cmxdata="pressunit"></span></td>
<td class=""><span data-cmxdata="MonthPressLT"></span> on <span data-cmxdata="MonthPressLD"></span></td>
</tr>
</table>
<p class="w3-small">Page data updated <span data-cmxdata="update"></span>.</p>
</div>
</div>
</div>
</div>
</div>
<div class="w3-col l3 m12"> <!-- Start of Sidebar 1/4 width -->
<div class="w3-row-padding">
<div class="w3-col l12">
<div class="w3-panel w3-container w3-theme-light">
<h3 class="w3-center">Welcome to <br/><span class="subText"><span data-cmxdata="longlocation"></span></span></h3>
<p>The high and low records for the month of <span data-cmxdata="monthname"></span> <span data-cmxdata="year"></span>.</p>
</div>
</div>
</div>
</div>
</div> <!-- End of panel content -->
</div> <!-- End of content -->
<div id="Footer" class="w3-row w3-bottom w3-theme-dark w3-theme-bdr">
<div class="w3-row-padding site-width">
<p><em>Cumulus MX Template by Neil Thomas <script>document.write(new Date().getFullYear());</script>
<span class="w3-right">Powered by <span class="w3-theme-txt">Cumulus MX</span> v:<span data-cmxdata="version"></span>, b:<span data-cmxdata="build"></span></span></em></p>
</div>
</div>
</body>
</html>

240
webfiles/thisyear.htm Normal file
View File

@ -0,0 +1,240 @@
<!--
thisyear.htm v:0.0.1 d:Feb 2021 Neil Thomas
Last modified: 2022/07/27 09:19:30
Page: 1 main panel plus a sidebar
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="weather data">
<meta name="keywords" content="Cumulus, weather, data, weather station">
<title>Cumulus MX</title>
<link rel="icon" type="image/png" href="images/favicon.png">
<!-- jQuery Local -->
<script src="lib/jquery/jquery-latest.min.js"></script>
<!-- Fonts System will default to a sans-serif font if no Internet connection -->
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Rosario:ital,wght@0,400;0,500;0,600;1,400;1,500;1,600&display=swap" rel="stylesheet">
<!-- All Styles -->
<link href="css/w3Pro.css" rel="stylesheet"> <!-- Basic w3shools responsive styles -->
<link href="css/colours.css" rel="stylesheet"> <!-- Slightly enhanced w3schools colours -->
<link href="css/mx-templates.css" rel="stylesheet"> <!-- Specific styles for these templates. -->
<!-- Scripts -->
<script src="js/setpagedata.js"></script> <!-- Utility javascripts for all pages. -->
</head>
<body>
<div id="Header" class="w3-row w3-top w3-theme-dark w3-theme-bdr">
<div class="w3-row-padding site-width">
<div class="at-flex-between" style="align-items:center; flex-wrap:wrap;">
<img src="images/CumulusMX-Logo.png" class="w3-image logo" alt="Header logo"/>
<div class="w3-right-align" style="max-width:600px;">
<h5>Lat<span class="w3-hide-small">itude</span>:&nbsp;<span data-cmxdata="latitude"></span><span class="at-divider">|<wbr></span>Long<span class="w3-hide-small">itude</span>:&nbsp;<span data-cmxdata="longitude"></span><span class="at-divider">|<wbr></span>Alt<span class="w3-hide-small">itude</span>:&nbsp;<span data-cmxdata="altitude"></span></h5>
</div>
</div>
<!-- Start of Menu -->
<div id="Main_Menu" class="w3-bar w3-theme-d4 w3-theme-bdr">
</div>
<!-- Mobile menu -->
<div id="Main_Menu_Mobile" class="w3-bar-block w3-hide w3-hide-large">
</div> <!-- End of Mobile menu -->
</div>
</div>
<div id="Content"> <!-- Start of panel content -->
<div class="w3-row-padding w3-theme-light site-width"> <!-- Page Title -->
<div class="w3-col l12">
<h1>Records for this year <span class="subText"><span data-cmxdata="year"></span></span></h1>
</div>
</div> <!-- End of title row -->
<div class="w3-row site-width w3-theme-light"> <!-- Start of Main panel -->
<div class="w3-col l9 m12"> <!-- 3/4 width panel -->
<div class="w3-row-padding"> <!-- Row 1 of 3/4 width panel -->
<div class="w3-col s12"> <!-- Full width of above panel -->
<div class="w3-panel w3-card w3-theme-white">
<h2 class="">Records for <span data-cmxdata="year"></span></h2>
<div class="w3-responsive">
<table class="w3-table w3-hoverable" style="width:100%;">
<tr>
<td colspan="3" class="w3-theme-d5">Temperature and Humidity </td>
</tr>
<tr class="w3-theme-l2">
<td class="">High Temperature</td>
<td class="w3-right-align"><span data-cmxdata="YearTempH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="YearTempHT"></span> on <span data-cmxdata="YearTempHD"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">Low Temperature</td>
<td class="w3-right-align"><span data-cmxdata="YearTempL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="YearTempLT"></span> on <span data-cmxdata="YearTempLD"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">High Dew Point</td>
<td class="w3-right-align"><span data-cmxdata="YearDewPointH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="YearDewPointHT"></span> on <span data-cmxdata="YearDewPointHD"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">Low Dew Point</td>
<td class="w3-right-align"><span data-cmxdata="YearDewPointL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="YearDewPointLT"></span> on <span data-cmxdata="YearDewPointLD"></span></td>
</tr>
<tr data-cmx-apparent class="w3-theme-l2 w3-hide">
<td class="">High Apparent</td>
<td class="w3-right-align"><span data-cmxdata="YearAppTempH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="YearAppTempHT"></span> on <span data-cmxdata="YearAppTempHD"></span></td>
</tr>
<tr data-cmx-apparent class="w3-theme-l2 w3-hide">
<td class="">Low Apparent</td>
<td class="w3-right-align"><span data-cmxdata="YearAppTempL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="YearAppTempLT"></span> on <span data-cmxdata="YearAppTempLD"></span></td>
</tr>
<tr data-cmx-feels class="w3-theme-l2">
<td class="">High Feels Like</td>
<td class="w3-right-align"><span data-cmxdata="YearFeelsLikeH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="YearFeelsLikeHT"></span> on <span data-cmxdata="YearFeelsLikeHD"></span></td>
</tr>
<tr data-cmx-feels class="w3-theme-l2">
<td class="">Low Feels Like</td>
<td class="w3-right-align"><span data-cmxdata="YearFeelsLikeL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="YearFeelsLikeLT"></span> on <span data-cmxdata="YearFeelsLikeLD"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">Low Wind Chill</td>
<td class="w3-right-align"><span data-cmxdata="YearWChillL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="YearWChillLT"></span> on <span data-cmxdata="YearWChillLD"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">High Heat Index</td>
<td class="w3-right-align"><span data-cmxdata="YearHeatIndexH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="YearHeatIndexHT"></span> on <span data-cmxdata="YearHeatIndexHD"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">High Minimum Temperature</td>
<td class="w3-right-align"><span data-cmxdata="YearMinTempH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="YearMinTempHD"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">Low Maximum Temperature</td>
<td class="w3-right-align"><span data-cmxdata="YearMaxTempL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="YearMaxTempLD"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">High Humidity</td>
<td class="w3-right-align"><span data-cmxdata="YearHumH"></span>&nbsp;%</td>
<td class=""><span data-cmxdata="YearHumHT"></span> on <span data-cmxdata="YearHumHD"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">Low Humidity </td>
<td class="w3-right-align"><span data-cmxdata="YearHumL"></span>&nbsp;%</td>
<td class=""><span data-cmxdata="YearHumLT"></span> on <span data-cmxdata="YearHumLD"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">High Daily Range</td>
<td class="w3-right-align"><span data-cmxdata="YearHighDailyTempRange"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="YearHighDailyTempRangeD"></span></td>
</tr>
<tr class="w3-theme-l2">
<td class="">Low Daily Range</td>
<td class="w3-right-align"><span data-cmxdata="YearLowDailyTempRange"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td class=""><span data-cmxdata="YearLowDailyTempRangeD"></span></td>
</tr>
<tr class="w3-theme-d4">
<td colspan="3">Rainfall</td>
</tr>
<tr class="w3-theme-l3">
<td class="">High Rain Rate</td>
<td class="w3-right-align"><span data-cmxdata="YearRainRateH"></span>&nbsp;<span data-cmxdata="rainunit"></span>/hr</td>
<td class=""><span data-cmxdata="YearRainRateHT"></span> on <span data-cmxdata="YearRainRateHD"></span></td>
</tr>
<tr class="w3-theme-l3">
<td class="">High Hourly Rainfall</td>
<td class="w3-right-align"><span data-cmxdata="YearHourlyRainH"></span>&nbsp;<span data-cmxdata="rainunit"></span></td>
<td class=""><span data-cmxdata="YearHourlyRainHT"></span> on <span data-cmxdata="YearHourlyRainHD"></span></td>
</tr>
<tr class="w3-theme-l3">
<td class="">High 24 Hour Rainfall</td>
<td class="w3-right-align"><span data-cmxdata="YearRain24HourH"></span>&nbsp;<span data-cmxdata="rainunit"></span></td>
<td class=""><span data-cmxdata="YearRain24HourHT"></span> on <span data-cmxdata="YearRain24HourHD"></span></td>
</tr>
<tr class="w3-theme-l3">
<td class="">High Daily Rainfall</td>
<td class="w3-right-align"><span data-cmxdata="YearDailyRainH"></span>&nbsp;<span data-cmxdata="rainunit"></span></td>
<td class=""><span data-cmxdata="YearDailyRainHD"></span></td>
</tr>
<tr class="w3-theme-l3">
<td class="">High Monthly Rainfall</td>
<td class="w3-right-align"><span data-cmxdata="YearMonthlyRainH"></span>&nbsp;<span data-cmxdata="rainunit"></span></td>
<td class=""><span data-cmxdata="YearMonthlyRainHD"></span></td>
</tr>
<tr class="w3-theme-l3">
<td class="">Longest Dry Period</td>
<td class="w3-right-align"><span data-cmxdata="YearLongestDryPeriod"></span>&nbsp;days</td>
<td class="">to <span data-cmxdata="YearLongestDryPeriodD"></span></td>
</tr>
<tr class="w3-theme-l3">
<td class="">Longest Wet Period</td>
<td class="w3-right-align"><span data-cmxdata="YearLongestWetPeriod"></span>&nbsp;days</td>
<td class="">to <span data-cmxdata="YearLongestWetPeriodD"></span></td>
</tr>
<tr class="w3-theme-d3">
<td colspan="3">Wind</td>
</tr>
<tr class="w3-theme-l4">
<td class="">High Wind Gust</td>
<td class="w3-right-align"><span data-cmxdata="YearGustH"></span>&nbsp;<span data-cmxdata="windunit"></span></td>
<td class=""><span data-cmxdata="YearGustHT"></span> on <span data-cmxdata="YearGustHD"></span></td>
</tr>
<tr class="w3-theme-l4">
<td class="">High Wind Speed <span class="subText">(10-minute Average)</span></td>
<td class="w3-right-align"><span data-cmxdata="YearWindH"></span>&nbsp;<span data-cmxdata="windunit"></span></td>
<td class=""><span data-cmxdata="YearWindHT"></span> on <span data-cmxdata="YearWindHD"></span></td>
</tr>
<tr class="w3-theme-l4">
<td class="">High Daily Wind Run</td>
<td class="w3-right-align"><span data-cmxdata="YearWindRunH"></span>&nbsp;<span data-cmxdata="windrununit"></span></td>
<td class=""><span data-cmxdata="YearWindRunHD"></span></td>
</tr>
<tr class="w3-theme-d2">
<td colspan="3">Pressure <span class="subText">(sea level)</span></td>
</tr>
<tr class="w3-theme-l5">
<td class="">High Pressure</td>
<td class="w3-right-align"><span data-cmxdata="YearPressH"></span>&nbsp;<span data-cmxdata="pressunit"></span></td>
<td class=""><span data-cmxdata="YearPressHT"></span> on <span data-cmxdata="YearPressHD"></span></td>
</tr>
<tr class="w3-theme-l5">
<td class="">Low Pressure</td>
<td class="w3-right-align"><span data-cmxdata="YearPressL"></span>&nbsp;<span data-cmxdata="pressunit"></span></td>
<td class=""><span data-cmxdata="YearPressLT"></span> on <span data-cmxdata="YearPressLD"></span></td>
</tr>
</table>
<p class="w3-small">Page data updated <span data-cmxdata="update"></span>.</p>
</div>
</div>
</div>
</div>
</div>
<div class="w3-col l3 m12"> <!-- Start of Sidebar 1/4 width -->
<div class="w3-row-padding">
<div class="w3-col l12">
<div class="w3-panel w3-container w3-theme-light">
<h3 class="w3-center">Welcome to <br/><span class="subText"><span data-cmxdata="longlocation"></span></span></h3>
<p>The high and low records for <span data-cmxdata="year"></span>.</p>
</div>
</div>
</div>
</div>
</div> <!-- End of panel content -->
</div> <!-- End of content -->
<div id="Footer" class="w3-row w3-bottom w3-theme-dark w3-theme-bdr">
<div class="w3-row-padding site-width">
<p><em>Cumulus MX Template by Neil Thomas <script>document.write(new Date().getFullYear());</script>
<span class="w3-right">Powered by <span class="w3-theme-txt">Cumulus MX</span> v:<span data-cmxdata="version"></span>, b:<span data-cmxdata="build"></span></span></em></p>
</div>
</div>
</body>
</html>

239
webfiles/today.htm Normal file
View File

@ -0,0 +1,239 @@
<!--
today.htm v:0.0.1 d:Feb 2021 Neil Thomas
Last modified: 2022/07/27 10:11:12
Page: 1 main panel plus a sidebar
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="weather data">
<meta name="keywords" content="Cumulus, weather, data, weather station">
<title>Cumulus MX</title>
<link rel="icon" type="image/png" href="images/favicon.png">
<!-- jQuery Local -->
<script src="lib/jquery/jquery-latest.min.js"></script>
<!-- Fonts System will default to a sans-serif font if no Internet connection -->
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Rosario:ital,wght@0,400;0,500;0,600;1,400;1,500;1,600&display=swap" rel="stylesheet">
<!-- All Styles -->
<link href="css/w3Pro.css" rel="stylesheet"> <!-- Basic w3shools responsive styles -->
<link href="css/colours.css" rel="stylesheet"> <!-- Slightly enhanced w3schools colours -->
<link href="css/mx-templates.css" rel="stylesheet"> <!-- Specific styles for these templates. -->
<!-- Scripts -->
<script src="js/setpagedata.js"></script> <!-- Utility javascripts for all pages. -->
</head>
<body>
<div id="Header" class="w3-row w3-top w3-theme-dark w3-theme-bdr">
<div class="w3-row-padding site-width">
<div class="at-flex-between" style="align-items:center; flex-wrap:wrap;">
<img src="images/CumulusMX-Logo.png" class="w3-image logo" alt="Header logo"/>
<div class="w3-right-align" style="max-width:600px;">
<h5>Lat<span class="w3-hide-small">itude</span>:&nbsp;<span data-cmxdata="latitude"></span><span class="at-divider">|<wbr></span>Long<span class="w3-hide-small">itude</span>:&nbsp;<span data-cmxdata="longitude"></span><span class="at-divider">|<wbr></span>Alt<span class="w3-hide-small">itude</span>:&nbsp;<span data-cmxdata="altitude"></span></h5>
</div>
</div>
<!-- Start of Menu -->
<div id="Main_Menu" class="w3-bar w3-theme-d4 w3-theme-bdr">
</div>
<!-- Mobile menu -->
<div id="Main_Menu_Mobile" class="w3-bar-block w3-hide w3-hide-large">
</div> <!-- End of Mobile menu -->
</div>
</div>
<div id="Content"> <!-- Start of panel content -->
<div class="w3-row-padding w3-theme-light site-width"> <!-- Page Title -->
<div class="w3-col l12">
<h1>Today <span class="subText"><span data-cmxdata="date"></span></span></h1>
</div>
</div> <!-- End of title row -->
<div class="w3-row site-width w3-theme-light"> <!-- Start of Main panel -->
<div class="w3-col l9 m12"> <!-- 3/4 width panel -->
<div class="w3-row-padding"> <!-- Row 1 of 3/4 width panel -->
<div class="w3-col s12"> <!-- Full width of above panel -->
<div class="w3-panel w3-card w3-theme-white">
<h2>Today&#39;s data</h2>
<div class="w3-responsive">
<table class="w3-table w3-hoverable" style="width:100%">
<tbody>
<tr class="w3-theme-d5">
<td colspan="3">Temperature and Humidity</td>
</tr>
<tr class="w3-theme-l2">
<td>High Temperature</td>
<td><span data-cmxdata="tempTH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td>at <span data-cmxdata="TtempTH"></span></td>
</tr>
<tr class="w3-theme-l2">
<td>Low Temperature</td>
<td><span data-cmxdata="tempTL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td>at <span data-cmxdata="TtempTL"></span></td>
</tr>
<tr class="w3-theme-l2">
<td>Temperature Range</td>
<td><span data-cmxdata="temprange"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td></td>
</tr>
<tr data-cmx-apparent class="w3-theme-l2 w3-hide">
<td>High Apparent Temperature</td>
<td><span data-cmxdata="apptempTH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td>at <span data-cmxdata="TapptempTH"></span></td>
</tr>
<tr data-cmx-apparent class="w3-theme-l2 w3-hide">
<td>Low Apparent Temperature</td>
<td><span data-cmxdata="apptempTL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td>at <span data-cmxdata="TapptempTL"></span></td>
</tr>
<tr data-cmx-feels class="w3-theme-l2">
<td>High Feels Like</td>
<td><span data-cmxdata="feelslikeTH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td>at <span data-cmxdata="TfeelslikeTH"></span></td>
</tr>
<tr data-cmx-feels class="w3-theme-l2">
<td>Low Feels Like</td>
<td><span data-cmxdata="feelslikeTL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td>at <span data-cmxdata="TfeelslikeTL"></span></td>
</tr>
<tr class="w3-theme-l2">
<td>Low Wind Chill</td>
<td><span data-cmxdata="wchillTL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td>at <span data-cmxdata="TwchillTL"></span></td>
</tr>
<tr class="w3-theme-l2">
<td>High Heat Index</td>
<td><span data-cmxdata="heatindexTH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td>at <span data-cmxdata="TheatindexTH"></span></td>
</tr>
<tr class="w3-theme-l2">
<td>High Humidity</td>
<td><span data-cmxdata="humTH"></span> %</td>
<td>at <span data-cmxdata="ThumTH"></span></td>
</tr>
<tr class="w3-theme-l2">
<td>Low Humidity</td>
<td><span data-cmxdata="humTL"></span> %</td>
<td>at <span data-cmxdata="ThumTL"></span></td>
</tr>
<tr class="w3-theme-d4">
<td colspan="3">Rainfall</td>
</tr>
<tr class="w3-theme-l3">
<td>Rainfall Today</td>
<td><span data-cmxdata="rfall"></span>&nbsp;<span data-cmxdata="rainunit"></span></td>
<td></td>
</tr>
<tr class="w3-theme-l3">
<td>Rainfall Rate Max</td>
<td><span data-cmxdata="rrateTM"></span>&nbsp;<span data-cmxdata="rainunit"></span>/hr</td>
<td>at <span data-cmxdata="TrrateTM"></span></td>
</tr>
<tr class="w3-theme-l3">
<td>High Hourly Rainfall</td>
<td><span data-cmxdata="hourlyrainTH"></span>&nbsp;<span data-cmxdata="rainunit"></span></td>
<td>at <span data-cmxdata="ThourlyrainTH"></span></td>
</tr>
<tr class="w3-theme-l3">
<td>High 24 Hour Rainfall</td>
<td><span data-cmxdata="rain24hourTH"></span>&nbsp;<span data-cmxdata="rainunit"></span></td>
<td>at <span data-cmxdata="Train24hourTH"></span></td>
</tr>
<tr class="w3-theme-l3">
<td>Days Since Last Dry Day</td>
<td><span data-cmxdata="ConsecutiveRainDays"></span></td>
<td></td>
</tr>
<tr class="w3-theme-l3">
<td>Days Since It Last Rained</td>
<td><span data-cmxdata="ConsecutiveDryDays"></span></td>
<td></td>
</tr>
<tr class="w3-theme-d3">
<td colspan="3">Wind</td>
</tr>
<tr class="w3-theme-l4">
<td>High Gust</td>
<td><span data-cmxdata="wgustTM"></span>&nbsp;<span data-cmxdata="windunit"></span></td>
<td>at <span data-cmxdata="TwgustTM"></span></td>
</tr>
<tr class="w3-theme-l4">
<td>High Speed <span class="subText">(10 minute average)</span></td>
<td><span data-cmxdata="windTM"></span>&nbsp;<span data-cmxdata="windunit"></span> (<span data-cmxdata="Tbeaufort"></span>)</td>
<td>at <span data-cmxdata="TwindTM"></span></td>
</tr>
<tr class="w3-theme-l4">
<td>Wind Run</td>
<td><span data-cmxdata="windrun"></span>&nbsp;<span data-cmxdata="windrununit"></span></td>
<td></td>
</tr>
<tr class="w3-theme-l4">
<td>Dominant Direction</td>
<td><span data-cmxdata="domwindbearing"></span>&deg; <span data-cmxdata="domwinddir"></span></td>
<td></td>
</tr>
<tr class="w3-theme-d2">
<td colspan="3">Pressure <span class="subText">(sea level)</span></td>
</tr>
<tr class="w3-theme-l5">
<td>High Pressure</td>
<td><span data-cmxdata="pressTH"></span>&nbsp;<span data-cmxdata="pressunit"></span></td>
<td>at <span data-cmxdata="TpressTH"></span></td>
</tr>
<tr class="w3-theme-l5">
<td>Low Pressure</td>
<td><span data-cmxdata="pressTL"></span>&nbsp;<span data-cmxdata="pressunit"></span></td>
<td>at <span data-cmxdata="TpressTL"></span></td>
</tr>
<tr class="w3-theme-d1 w3-hide" data-cmx-solar data-cmx-uv>
<td colspan="3" class="w3-theme-d1">Solar</td>
</tr>
<tr class="w3-theme-l6 w3-hide" data-cmx-solar>
<td>High Solar Radiation</td>
<td><span data-cmxdata="solarTH"></span> W/m<sup>2</sup></td>
<td>at <span data-cmxdata="TsolarTH"></span></td>
</tr>
<tr class="w3-theme-l6 w3-hide" data-cmx-solar>
<td>Hours of Sunshine</td>
<td><span data-cmxdata="SunshineHours"></span> hrs</td>
<td></td>
</tr>
<tr class="w3-theme-l6 w3-hide" data-cmx-uv>
<td>High UV Index</td>
<td><span data-cmxdata="UVTH"></span></td>
<td>at <span data-cmxdata="TUVTH"></span></td>
</tr>
</tbody>
</table>
<p class="w3-small">Page data updated <span data-cmxdata="update"></span>.</p>
</div>
</div>
</div>
</div>
</div>
<div class="w3-col l3 m12"> <!-- Start of Sidebar 1/4 screen width -->
<div class="w3-row-padding">
<div class="w3-col l12"> <!-- Full width of sidebar -->
<div class="w3-panel w3-container w3-theme-light">
<h3 class="w3-center">Welcome to <br/><span class="subText"><span data-cmxdata="longlocation"></span></span></h3>
<p>This page shows the highs, lows and current values for today.<br>
This page is updated every <span data-cmxdata="interval"></span> minutes. The meteorological day used at this station ends at
<span data-cmxdata="rollovertime"></span>.
</p>
</div>
</div>
</div>
</div>
</div> <!-- End of panel content -->
</div> <!-- End of content -->
<!-- Footer -->
<div id="Footer" class="w3-row w3-bottom w3-theme-dark w3-theme-bdr">
<div class="w3-row-padding site-width">
<p><em>Cumulus MX Template by Neil Thomas <script>document.write(new Date().getFullYear());</script>
<span class="w3-right">Powered by <span class="w3-theme-txt">Cumulus MX</span> v:<span data-cmxdata="version"></span>, b:<span data-cmxdata="build"></span></span></em></p>
</div>
</div>
</body>
</html>

283
webfiles/todayyest.htm Normal file
View File

@ -0,0 +1,283 @@
<!--
todayT.htm v:0.0.1 d:Feb 2021 Neil Thomas
Last modified: 2022/10/15 11:15:18
Page: 1 main panel plus a sidebar
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="weather data">
<meta name="keywords" content="Cumulus, weather, data, weather station">
<title>Cumulus MX - Today vs Yesterday</title>
<link rel="icon" type="image/png" href="images/favicon.png">
<!-- jQuery Local -->
<script src="lib/jquery/jquery-latest.min.js"></script>
<!-- Fonts System will default to a sans-serif font if no Internet connection -->
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Rosario:ital,wght@0,400;0,500;0,600;1,400;1,500;1,600&display=swap" rel="stylesheet">
<!-- All Styles -->
<link href="css/w3Pro.css" rel="stylesheet"> <!-- Basic w3shools responsive styles -->
<link href="css/colours.css" rel="stylesheet"> <!-- Slightly enhanced w3schools colours -->
<link href="css/mx-templates.css" rel="stylesheet"> <!-- Specific styles for these templates. -->
<!-- Scripts -->
<script src="js/setpagedata.js"></script> <!-- Utility javascripts for all pages. -->
</head>
<body>
<div id="Header" class="w3-row w3-top w3-theme-dark w3-theme-bdr">
<div class="w3-row-padding site-width">
<div class="at-flex-between at-flex-items-center">
<img src="images/CumulusMX-Logo.png" alt="CumulusmX Logo" class="w3-image logo"/>
<div class="w3-right-align statusPanel">
<h5 class="location w3-hide-small">Latitude:&nbsp;<span data-cmxdata="latitude"></span><span class="at-divider">|</span>Longitude:&nbsp;<span data-cmxdata="longitude"></span><span class="at-divider">|</span>Altitude:&nbsp;<span data-cmxdata="altitude"></span></h5>
<h6 class="location w3-hide-medium w3-hide-large">Lat:<span data-cmxdata="latitude"></span><span class="at-divider">|</span>Lon:<span data-cmxdata="longitude"></span><span class="at-divider">|</span>Alt:<span data-cmxdata="altitude"></span></h6>
</div>
</div>
<!-- Start of Menu -->
<div id="Main_Menu" class="w3-bar w3-theme-d4 w3-theme-bdr">
</div>
<!-- Mobile menu -->
<div id="Main_Menu_Mobile" class="w3-bar-block w3-hide w3-hide-large">
</div> <!-- End of Mobile menu -->
</div>
</div>
<div id="Content"> <!-- Start of panel content -->
<div class="w3-row-padding w3-theme-light site-width"> <!-- Page Title -->
<div class="w3-col l12">
<h1>Today vs Yesterday <span class="subText"> (<span data-cmxdata="yesterday"></span>)</span></h1>
</div>
</div> <!-- End of title row -->
<div class="w3-row site-width w3-theme-light"> <!-- Start of Main panel -->
<div class="w3-col l9 m12"> <!-- 3/4 width panel -->
<div class="w3-row-padding"> <!-- Row 1 of 3/4 width panel -->
<div class="w3-col s12"> <!-- Full width of above panel -->
<div class="w3-panel w3-card w3-theme-white">
<h2>Today and Yesterday&#39;s data</h2>
<div class="w3-responsive">
<table class="w3-table w3-hoverable" style="width:100%">
<tbody>
<tr class="w3-theme-d5">
<th style="width:50%">Temperature and Humidity</th>
<th style="width:10%">Today</th>
<th style="width:15%"></th>
<th style="width:10%">Yesterday</th>
<th style="width:15%"></th>
</tr>
<tr class="w3-theme-l2">
<td>High Temperature</td>
<td><span data-cmxdata="tempTH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td><span class="w3-hide-medium w3-hide-small">at </span><span data-cmxdata="TtempTH"></span></td>
<td><span data-cmxdata="tempYH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td><span class="w3-hide-medium w3-hide-small">at </span><span data-cmxdata="TtempYH"></span></td>
</tr>
<tr class="w3-theme-l2">
<td>Low Temperature</td>
<td><span data-cmxdata="tempTL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td><span class="w3-hide-medium w3-hide-small">at </span><span data-cmxdata="TtempTL"></span></td>
<td><span data-cmxdata="tempYL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td><span class="w3-hide-medium w3-hide-small">at </span><span data-cmxdata="TtempYL"></span></td>
</tr>
<tr class="w3-theme-l2">
<td>Temperature Range</td>
<td><span data-cmxdata="temprange"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td></td>
<td><span data-cmxdata="temprangeY"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td></td>
</tr>
<tr data-cmx-apparent class="w3-theme-l2 w3-hide">
<td>High Apparent<span class="w3-hide-medium w3-hide-small"> Temperature</span></td>
<td><span data-cmxdata="apptempTH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td><span class="w3-hide-medium w3-hide-small">at </span><span data-cmxdata="TapptempTH"></span></td>
<td><span data-cmxdata="apptempYH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td><span class="w3-hide-medium w3-hide-small">at </span><span data-cmxdata="TapptempYH"></span></td>
</tr>
<tr data-cmx-apparent class="w3-theme-l2 w3-hide">
<td>Low Apparent<span class="w3-hide-medium w3-hide-small"> Temperature</span></td>
<td><span data-cmxdata="apptempTL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td><span class="w3-hide-medium w3-hide-small">at </span><span data-cmxdata="TapptempTL"></span></td>
<td><span data-cmxdata="apptempYL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td><span class="w3-hide-medium w3-hide-small">at </span><span data-cmxdata="TapptempYL"></span></td>
</tr>
<tr data-cmx-feels class="w3-theme-l2">
<td>High Feels Like</td>
<td><span data-cmxdata="feelslikeTH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td><span class="w3-hide-medium w3-hide-small">at </span><span data-cmxdata="TfeelslikeTH"></span></td>
<td><span data-cmxdata="feelslikeYH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td><span class="w3-hide-medium w3-hide-small">at </span><span data-cmxdata="TfeelslikeYH"></span></td>
</tr>
<tr data-cmx-feels class="w3-theme-l2">
<td>Low Feels Like</td>
<td><span data-cmxdata="feelslikeTL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td><span class="w3-hide-medium w3-hide-small">at </span><span data-cmxdata="TfeelslikeTL"></span></td>
<td><span data-cmxdata="feelslikeYL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td><span class="w3-hide-medium w3-hide-small">at </span><span data-cmxdata="TfeelslikeYL"></span></td>
</tr>
<tr class="w3-theme-l2">
<td>Low Wind Chill</td>
<td><span data-cmxdata="wchillTL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td><span class="w3-hide-medium w3-hide-small">at </span><span data-cmxdata="TwchillTL"></span></td>
<td><span data-cmxdata="wchillYL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td><span class="w3-hide-medium w3-hide-small">at </span><span data-cmxdata="TwchillYL"></span></td>
</tr>
<tr class="w3-theme-l2">
<td>High Heat Index</td>
<td><span data-cmxdata="heatindexTH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td><span class="w3-hide-medium w3-hide-small">at </span><span data-cmxdata="TheatindexTH"></span></td>
<td><span data-cmxdata="heatindexYH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td><span class="w3-hide-medium w3-hide-small">at </span><span data-cmxdata="TheatindexYH"></span></td>
</tr>
<tr class="w3-theme-l2">
<td>High Humidity</td>
<td><span data-cmxdata="humTH"></span> %</td>
<td><span class="w3-hide-medium w3-hide-small">at </spaw3-hide-medium w3-hide-smalln><span data-cmxdata="ThumTH"></span></td>
<td><span data-cmxdata="humYH"></span>&nbsp;%</td>
<td><span class="w3-hide-medium w3-hide-small">at </span><span data-cmxdata="ThumYH"></span></td>
</tr>
<tr class="w3-theme-l2">
<td>Low Humidity</td>
<td><span data-cmxdata="humTL"></span> %</td>
<td><span class="w3-hide-medium w3-hide-small">at </span><span data-cmxdata="ThumTL"></span></td>
<td><span data-cmxdata="humYL"></span>&nbsp;%</td>
<td><span class="w3-hide-medium w3-hide-small">at </span><span data-cmxdata="ThumYL"></span></td>
</tr>
<tr class="w3-theme-d4">
<td>Rainfall</td>
<td colspan="2">Today</td>
<td colspan="2">Yesterday</td>
</tr>
<tr class="w3-theme-l3">
<td>Rainfall</td>
<td><span data-cmxdata="rfall"></span>&nbsp;<span data-cmxdata="rainunit"></span></td>
<td></td>
<td><span data-cmxdata="rfallY"></span>&nbsp;<span data-cmxdata="rainunit"></span></td>
<td></td>
</tr>
<tr class="w3-theme-l3">
<td>Rainfall Rate<span class="w3-hide-medium w3-hide-small"> Max</span></td>
<td><span data-cmxdata="rrateTM"></span>&nbsp;<span data-cmxdata="rainunit"></span>/hr</td>
<td><span class="w3-hide-medium w3-hide-small">at </span><span data-cmxdata="TrrateTM"></span></td>
<td><span data-cmxdata="rrateYM"></span>&nbsp;<span data-cmxdata="rainunit"></span>/hr</td>
<td><span class="w3-hide-medium w3-hide-small">at </span><span data-cmxdata="TrrateYM"></span></td>
</tr>
<tr class="w3-theme-l3">
<td><span class="w3-hide-medium w3-hide-small">High </span>Hourly Rainfall</td>
<td><span data-cmxdata="hourlyrainTH"></span>&nbsp;<span data-cmxdata="rainunit"></span></td>
<td><span class="w3-hide-medium w3-hide-small">at </span><span data-cmxdata="ThourlyrainTH"></span></td>
<td><span data-cmxdata="hourlyrainYH"></span>&nbsp;<span data-cmxdata="rainunit"></span></td>
<td><span class="w3-hide-medium w3-hide-small">at </span><span data-cmxdata="ThourlyrainYH"></span></td>
</tr>
<tr class="w3-theme-l3">
<td><span class="w3-hide-medium w3-hide-small">High </span>24 Hour Rainfall</td>
<td><span data-cmxdata="rain24hourTH"></span>&nbsp;<span data-cmxdata="rainunit"></span></td>
<td><span class="w3-hide-medium w3-hide-small">at </span><span data-cmxdata="Train24hourTH"></span></td>
<td><span data-cmxdata="rain24hourYH"></span>&nbsp;<span data-cmxdata="rainunit"></span></td>
<td><span class="w3-hide-medium w3-hide-small">at </span><span data-cmxdata="Train24hourYH"></span></td>
</tr>
<tr class="w3-theme-d3">
<td>Wind</td>
<td colspan="2">Today</td>
<td colspan="2">Yesterday</td>
</tr>
<tr class="w3-theme-l4">
<td>Highest Gust</td>
<td><span data-cmxdata="wgustTM"></span>&nbsp;<span data-cmxdata="windunit"></span></td>
<td><span class="w3-hide-medium w3-hide-small">at </span><span data-cmxdata="TwgustTM"></span></td>
<td><span data-cmxdata="wgustYM"></span>&nbsp;<span data-cmxdata="windunit"></span></td>
<td><span class="w3-hide-medium w3-hide-small">at </span><span data-cmxdata="TwgustYM"></span></td>
</tr>
<tr class="w3-theme-l4">
<td>Highest Avg Speed</td>
<td><span data-cmxdata="windTM"></span>&nbsp;<span data-cmxdata="windunit"></span></td>
<td><span class="w3-hide-medium w3-hide-small">at </span><span data-cmxdata="TwindTM"></span></td>
<td><span data-cmxdata="windYM"></span>&nbsp;<span data-cmxdata="windunit"></span></td>
<td><span class="w3-hide-medium w3-hide-small">at </span><span data-cmxdata="TwindYM"></span></td>
</tr>
<tr class="w3-theme-l4">
<td>Wind Run</td>
<td><span data-cmxdata="windrun"></span>&nbsp;<span data-cmxdata="windrununit"></span></td>
<td></td>
<td><span data-cmxdata="windrunY"></span>&nbsp;<span data-cmxdata="windrununit"></span></td>
<td></td>
</tr>
<tr class="w3-theme-l4">
<td>Dominant Direction</td>
<td><span data-cmxdata="domwindbearing"></span>&deg; <span data-cmxdata="domwinddir"></span></td>
<td></td>
<td><span data-cmxdata="domwindbearingY"></span>&deg; <span data-cmxdata="domwinddirY"></span></td>
<td></td>
</tr>
<tr class="w3-theme-d2">
<td>Pressure (sea level)</td>
<td colspan="2">Today</td>
<td colspan="2">Yesterday</td>
</tr>
<tr class="w3-theme-l5">
<td>High Pressure</td>
<td><span data-cmxdata="pressTH"></span>&nbsp;<span data-cmxdata="pressunit"></span></td>
<td><span class="w3-hide-medium w3-hide-small">at </span><span data-cmxdata="TpressTH"></span></td>
<td><span data-cmxdata="pressYH"></span>&nbsp;<span data-cmxdata="pressunit"></span></td>
<td><span class="w3-hide-medium w3-hide-small">at </span><span data-cmxdata="TpressYH"></span></td>
</tr>
<tr class="w3-theme-l5">
<td>Low Pressure</td>
<td><span data-cmxdata="pressTL"></span>&nbsp;<span data-cmxdata="pressunit"></span></td>
<td><span class="w3-hide-medium w3-hide-small">at </span><span data-cmxdata="TpressTL"></span></td>
<td><span data-cmxdata="pressYL"></span>&nbsp;<span data-cmxdata="pressunit"></span></td>
<td><span class="w3-hide-medium w3-hide-small">at </span><span data-cmxdata="TpressYL"></span></td>
</tr>
<tr class="w3-theme-d1 w3-hide" data-cmx-solar>
<td>Solar</td>
<td colspan="2">Today</td>
<td colspan="2">Yesterday</td>
</tr>
<tr class="w3-theme-l6 w3-hide" data-cmx-solar>
<td>High Solar Radiation</td>
<td><span data-cmxdata="solarTH"></span> W/m<sup>2</sup></td>
<td><span class="w3-hide-medium w3-hide-small">at </span><span data-cmxdata="TsolarTH"></span></td>
<td><span data-cmxdata="solarYH"></span>&nbsp;W/m&sup2;</td>
<td><span class="w3-hide-medium w3-hide-small">at </span><span data-cmxdata="TsolarYH"></span></td>
</tr>
<tr class="w3-theme-l6 w3-hide" data-cmx-solar>
<td>Hours of Sunshine</td>
<td><span data-cmxdata="SunshineHours"></span> hrs</td>
<td></td>
<td><span data-cmxdata="YSunshineHours"></span>&nbsp;hrs</td>
<td></td>
</tr>
</tbody>
</table>
<p class="w3-small">Page data updated <span data-cmxdata="update"></span>.</p>
</div>
</div>
</div>
</div>
</div>
<div class="w3-col l3 m12"> <!-- Start of Sidebar 1/4 screen width -->
<div class="w3-row-padding">
<div class="w3-col l12"> <!-- Full width of sidebar -->
<div class="w3-panel w3-container w3-theme-light">
<h3 class="w3-center">Welcome to <br/><span class="subText"><span data-cmxdata="longlocation"></span></span></h3>
<p>This page shows the highs, lows and current values for today and yesterday.<br>
This page is updated every <span data-cmxdata="interval"></span> minutes. The meteorological day used <span class="w3-hide-medium w3-hide-small">at </span>this station ends at
<span data-cmxdata="rollovertime"></span>.
</p>
</div>
</div>
</div>
</div>
</div> <!-- End of panel content -->
</div> <!-- End of content -->
<!-- Footer -->
<div id="Footer" class="w3-row w3-bottom w3-theme-dark w3-theme-bdr">
<div class="w3-row-padding site-width">
<p><em>Cumulus MX Template by Neil Thomas <script>document.write(new Date().getFullYear());</script>
<span class="w3-right">Powered by <span class="w3-theme-txt">Cumulus MX</span> v:<span data-cmxdata="version"></span>, b:<span data-cmxdata="build"></span></span></em></p>
</div>
</div>
</body>
</html>

125
webfiles/trends.htm Normal file
View File

@ -0,0 +1,125 @@
<!--
trends.htm v:0.0.1 d:Feb 2021 Neil Thomas
Last modified: 2023/03/16 09:46:57
Page: 1 main panel plus a sidebar
NOTE: Once uploaded this page does not need to be uploaded again unless edited.
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="weather data">
<meta name="keywords" content="Cumulus, weather, data, weather station">
<title>Cumulus MX</title>
<link rel="icon" type="image/png" href="images/favicon.png">
<!-- jQuery Local -->
<script src="lib/jquery/jquery-latest.min.js"></script>
<!-- Fonts System will default to a sans-serif font if no Internet connection -->
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Rosario:ital,wght@0,400;0,500;0,600;1,400;1,500;1,600&display=swap" rel="stylesheet">
<!-- All Styles -->
<link href="css/w3Pro.css" rel="stylesheet"> <!-- Basic w3schools responsive styles -->
<link href="css/colours.css" rel="stylesheet"> <!-- Slightly enhanced w3schools colours -->
<link href="css/mx-templates.css" rel="stylesheet"> <!-- Specific styles for these templates. -->
<!-- Scripts -->
<script src="js/setpagedata.js"></script> <!-- Utility javascripts for all pages. -->
<style>
#chartcontainer {
min-height: 550px;
margin-top:16px;
margin-bottom: 16px;
}
.mx-button {
margin-bottom: 5px;
border-radius: 4px;
}
.graphs-width {
max-width:1250px;
margin: auto
}
</style>
</head>
<body>
<div id="Header" class="w3-row w3-top w3-theme-dark w3-theme-bdr">
<div class="w3-row-padding site-width">
<div class="at-flex-between" style="align-items:center; flex-wrap:wrap;">
<img src="images/CumulusMX-Logo.png" class="w3-image logo" alt="Header logo"/>
<div class="w3-right-align" style="max-width:600px;">
<h5>Lat<span class="w3-hide-small">itude</span>:&nbsp;<span data-cmxdata="latitude"></span><span class="at-divider">|<wbr></span>Long<span class="w3-hide-small">itude</span>:&nbsp;<span data-cmxdata="longitude"></span><span class="at-divider">|<wbr></span>Alt<span class="w3-hide-small">itude</span>:&nbsp;<span data-cmxdata="altitude"></span></h5>
</div>
</div>
<!-- Start of Menu -->
<div id="Main_Menu" class="w3-bar w3-theme-d4 w3-theme-bdr">
</div>
<!-- Mobile menu -->
<div id="Main_Menu_Mobile" class="w3-bar-block w3-hide w3-hide-large">
</div> <!-- End of Mobile menu -->
</div>
</div>
<div id="Content"> <!-- Start of main content -->
<div class="w3-row-padding w3-theme-light graphs-width"> <!-- Page Title -->
<div class="w3-col l12">
<h1>Trends</h1>
</div>
</div> <!-- End of title row -->
<div class="w3-row-padding w3-theme-light graphs-width"> <!-- First Row -->
<div class="w3-col s12"> <!-- First column of first row -->
<div class="w3-panel w3-card w3-theme-white">
<figure>
<div id="chartcontainer"></div>
</figure>
</div>
</div> <!-- End of first column of first row -->
</div>
<div class="w3-row-padding w3-theme-light graphs-width"> <!-- Second row -->
<div class="w3-col s12">
<div class="w3-cardX w3-panelX w3-center">
<div class="w3-bar w3-center">
<select id="mySelect" aria-label="select data type for graph" class="w3-bar-item w3-select w3-theme-l2 at-slim">
<option value="temp" selected>Temperature</option>
<option value="dailytemp">Daily Temperature</option>
<option value="press">Pressure</option>
<option value="wind">Wind Speed</option>
<option value="windDir">Wind Direction</option>
<option value="humidity">Humidity</option>
<option value="rain">Rainfall</option>
<option value="dailyrain">Daily Rain</option>
<option value="solar">Solar</option>
<option value="sunhours">Sunshine Hours</option>
<option value="airquality">Air Quality</option>
<option value="extratemp">Extra Temperature</option>
<option value="extrahum">Extra Humidity</option>
<option value="extradew">Extra Dew Point</option>
<option value="soiltemp">Soil Temperature</option>
<option value="soilmoist">Soil Moisture</option>
<option value="leafwet">Leaf Wetness</option>
<option value="usertemp">User Temperature</option>
<option value="co2">CO&#8322; Sensor</option>
</select>
</div>
</div>
</div>
</div> <!-- End of row -->
</div> <!-- End of Content -->
<div class="w3-row-padding"></div>
<div id="Footer" class="w3-row w3-bottom w3-theme-dark w3-theme-bdr">
<div class="w3-row-padding site-width">
<p><em>Cumulus MX Template by Neil Thomas <script>document.write(new Date().getFullYear());</script>
<span class="w3-right">Powered by <span class="w3-theme-txt">Cumulus MX</span> v:<span data-cmxdata="version"></span>, b:<span data-cmxdata="build"></span></span></em></p>
</div>
</div>
<script src="https://code.highcharts.com/stock/10.3.3/highstock.js"></script>
<script src="https://code.highcharts.com/stock/10.3.3/modules/exporting.js"></script>
<script src="https://code.highcharts.com/10.3.3/modules/export-data.js"></script>
<script src="https://code.highcharts.com/10.3.3/modules/accessibility.js"></script>
<script src="https://code.highcharts.com/10.3.3/modules/boost.js"></script>
<script src="https://code.highcharts.com/10.3.3/themes/grid.js"></script>
<script src="js/cumuluscharts.js"></script> <!-- Script needed to run charts -->
</body>
</html>

364
webfiles/upload.php Normal file
View File

@ -0,0 +1,364 @@
<?php
// Last modified: 2023/03/23 11:10:44
/*
******** PHP Upload script for Cumulus MX ********
Use as an alternative to FTP/SFTP upload of data
Mark Crossley - 2023
*/
// *** YOU NEED TO CHANGE THIS VALUE ***
// Our signature secret
$secret = 'change_this_to_the_value_in_CMX';
// limitPath: restricts the upload script to placing files in the same folder structure as the script resides
// That is you cannot specify something like /etc/init.d/sudo as a filename
// Setting this to false allows the script to attempt to write anywhere in your filesystem that it has permission
$limitPath = true;
// logs additional information to the reponses sent back to CMX, do not enable unless asked
$debug = false;
// *****************************************
// *** DO NOT CHANGE ANYTHING BELOW HERE ***
// *****************************************
ob_start();
if ($secret === 'change_this_to_the_value_in_CMX') {
exitCode(500, 'You must change the default secret');
}
if ($debug) {
$headers = getallheaders();
foreach($headers as $key=>$val){
echo "$key: $val\n";
}
echo 'CWD = '.getcwd()."\n";
}
// first check for GET/POST
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
// used for testing the compression response
?>
<html>
<body>
Welcome to upload.php<br>
<?php
echo str_repeat("xx xx", 1000), "<br>"
?>
</body>
</html>
<?php
exit;
} elseif ($_SERVER['REQUEST_METHOD'] != 'POST') {
exitCode(500, 'Error: Must use POST method');
}
// ---------------------------------------------------------------
// Get all the mandatory data we need from the POST message
// ---------------------------------------------------------------
// We need a timestamp to check the signature and validity
$receivedTime = $_SERVER['REQUEST_TIME'];
if (isset($_SERVER['HTTP_TS'])) {
$requestTime = $_SERVER['HTTP_TS'];
} else {
exitCode(422, 'Error: No timestamp');
}
if (abs($receivedTime - $requestTime) > 10) {
$msg = "Error: TimeStamp is out of date\n" .
"Data TS = $requestTime\n" .
"Server TS = $receivedTime\n";
exitCode(422, $msg);
}
// The signature to test
if (isset($_SERVER['HTTP_SIGNATURE'])) {
$signatureSent = $_SERVER['HTTP_SIGNATURE'];
} else {
exitCode(422, 'Error: No signature');
}
if (isset($_SERVER['HTTP_FILE'])) {
$name = $_SERVER['HTTP_FILE'];
// first check if the file is escaping our local folder structure
if ($limitPath) {
$name_dir = pathinfo($name)['dirname'];
$name_fullpath = resolvePath($name_dir);
$cwd = getcwd();
if (substr($name_fullpath, 0, strlen($cwd)) !== $cwd) {
exitCode(500, 'Error: Attempting to escape local folder structure');
}
}
// if the file exists, check the file is writable
if (file_exists($name)) {
if (!is_writable($name)) {
exitCode(500, "Error: Target file $name is not writable by this user " . `whoami`);
}
} else {
if (!touch($name)) {
exitCode(500, "Error: Cannot create the target file $name with this user " . `whoami`);
}
}
} else {
exitCode(422, 'Error: No filename');
}
// Now what are we doing with the file?
if (isset($_SERVER["HTTP_ACTION"])) {
$action = $_SERVER['HTTP_ACTION'];
} else {
exitCode(422, 'Error: No action');
}
if ($action !== 'replace' && $action !== 'append') {
exitCode(422, "Error: Invalid header ACTION = $action");
}
// If appending - get the earlist timestamp - JS timestamps overflow PHP int!
if ($action === 'append') {
if (isset($_SERVER['HTTP_OLDEST'])) {
$oldestTs = (float)$_SERVER['HTTP_OLDEST'];
} else {
exitCode(422, 'Error: No oldest timestamp');
}
}
$utf8 = $_SERVER['HTTP_UTF8'];
if ($utf8 != '0' && $utf8 != '1') {
// default to UTF-8 as before if not supplied
$utf8 = '1';
}
$binary = $_SERVER['HTTP_BINARY'];
if ($binary != '0' && $binary != '1') {
exitCode(422, "Error: Invalid header BINARY = $binary");
}
if (isset($_SERVER['HTTP_RAW_POST_DATA'])) {
$data = $_SERVER['HTTP_RAW_POST_DATA'];
} else {
$data = file_get_contents('php://input');
}
if (strlen($data) == 0) {
exitCode(422, 'Error: No data sent');
}
if (isset($_SERVER['HTTP_CONTENT_ENCODING'])) {
if ($_SERVER['HTTP_CONTENT_ENCODING'] == 'gzip') {
echo "Unzipping data\n";
$data = gzdecode($data);
} elseif ($_SERVER['HTTP_CONTENT_ENCODING'] == 'deflate') {
echo "Inflating data\n";
$data = gzinflate($data);
}
}
if ($debug) {
//echo "Data = $data\n";
}
// ---------------------------------------------------------------
// Check the signature sent matches what we calculate
// ---------------------------------------------------------------
$ourSignature = CalculateSignature($secret, $requestTime . $name . $data);
if ($signatureSent != $ourSignature) {
$msg = "Error: Invalid signature\n" .
"Data Sig = $signatureSent\n" .
"Server Sig = $ourSignature\n" .
"Server sig data = " . $requestTime . $name . substr($data, 0, 50);
exitCode(422, $msg);
}
// change encoding if required
if ($utf8 == '0') {
$data = mb_convert_encoding($data, "ISO-8859-1", "UTF-8");
}
// ---------------------------------------------------------------
// Finally, do the processing
// ---------------------------------------------------------------
if ($action === 'replace') {
// do we need to decode a base64 string back to binary data
echo 'Opening ' . ($binary == '1' ? 'binary' : 'text') . " file $name for replacement\n";
if ($binary == '1') {
$data = base64_decode($data);
}
WriteFile($name, $data, $binary == '1');
exitCode(200);
} else if ($action === 'append') {
// first check we have some data to append!
$dataObj = json_decode($data, false);
if (is_null($dataObj)) {
exitCode(500, 'No valid JSON data in the received data');
}
// next check we have an existing file to append
// if not then just write the new data to a dest file
echo "Opening text file $name for appending\n";
if (!file_exists($name) || filesize($name) === 0) {
echo "No existing file to append data - $name\n";
WriteFile($name, $data);
exitCode(200);
}
// open the target file for reading
if (!$outFile = fopen($name, 'r')) {
exitCode(500, "Failed to open file $name");
}
$fileObj = json_decode(fgets($outFile), false);
fclose($outFile);
// no valid data in the dest file
if (is_null($fileObj)) {
echo "No valid JSON data in - $name\n";
echo "Writing data as a new file\n";
WriteFile($name, $data);
exitCode(200);
}
if ($debug) {
echo "New data:\n";
var_dump($dataObj);
echo "\n";
}
// remove the old data
foreach ($fileObj as $key => $val) {
if (is_null($val)) {
continue;
}
// $val format is [[ts,val],[ts,val]...]
if ($debug) {
echo "Processing entry $key\n";
}
$arr = $val;
do {
if (sizeof($arr) > 0 && $arr[0][0] < $oldestTs) {
if ($debug) {
echo "Removing entry $key - ".$arr[0][0]."\n";
}
array_shift($arr);
} else {
break;
}
} while(true);
$fileObj->$key = $arr;
}
// append the new data
foreach ($dataObj as $key => $val) {
if (is_null($val)) {
continue;
}
if ($debug) {
echo "Appending new data: $key - ".sizeof($val)."\n";
}
if (sizeof($val) > 0) {
$fileObj->$key = array_merge($fileObj->$key, $val);
}
}
// write the file back again
echo "Appending text file $name\n";
WriteFile($name, json_encode($fileObj));
} else {
exitCode(422, 'Error: Invalid action'. $action);
}
exitCode(200);
///////// end of script //////////
// ---------------------------------------------------------------
// Helpers
// ---------------------------------------------------------------
function CalculateSignature($secret, $data) {
return hash_hmac('sha256', $data, $secret, false);
}
function WriteFile($filename, $content, $binary=false) {
// open the target file for writing
$mode = 'w' . ($binary ? 'b': '');
$outFile = fopen($filename, $mode) or die("Cannot create file $filename with mode $mode");
if (!$outFile) {
echo "Failed to open file $filename - mode $mode";
http_response_code(500);
exit;
}
echo 'Writing ' . ($binary ? 'binary': 'text') . " file $filename\n";
if (fwrite($outFile, $content) == FALSE) {
echo "Write failed";
http_response_code(500);
} else {
echo 'Write complete';
}
fclose($outFile);
}
set_exception_handler(function($ex) {
echo "\nException occurred!\n\n";
echo print_r($ex);
exitCode(500);
});
function resolvePath($path) {
if(DIRECTORY_SEPARATOR !== '/') {
$path = str_replace(DIRECTORY_SEPARATOR, '/', $path);
}
$search = explode('/', $path);
$search = array_filter($search, function($part) {
return $part !== '.';
});
$append = array();
$match = false;
while(count($search) > 0) {
$match = realpath(implode('/', $search));
if($match !== false) {
break;
}
array_unshift($append, array_pop($search));
};
if($match === false) {
$match = getcwd();
}
if(count($append) > 0) {
$match .= DIRECTORY_SEPARATOR . implode(DIRECTORY_SEPARATOR, $append);
}
return $match;
}
function exitCode($code, $msg=null) {
if (null !== $msg)
echo $msg;
http_response_code($code);
//header('Connection: close');
header('Content-Length: '.ob_get_length());
ob_end_flush(); // Strange behaviour, will not work
flush(); // Unless both are called !
exit;
}

225
webfiles/yesterday.htm Normal file
View File

@ -0,0 +1,225 @@
<!--
yesterday.htm v:0.0.1 d:Feb 2021 Neil Thomas
Last modified: 2022/07/27 10:10:28
Page: 1 main panel plus a sidebar
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="weather data">
<meta name="keywords" content="Cumulus, weather, data, weather station">
<title>Cumulus MX</title>
<link rel="icon" type="image/png" href="images/favicon.png">
<!-- jQuery Local -->
<script src="lib/jquery/jquery-latest.min.js"></script>
<!-- Fonts System will default to a sans-serif font if no Internet connection -->
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Rosario:ital,wght@0,400;0,500;0,600;1,400;1,500;1,600&display=swap" rel="stylesheet">
<!-- All Styles -->
<link href="css/w3Pro.css" rel="stylesheet"> <!-- Basic w3shools responsive styles -->
<link href="css/colours.css" rel="stylesheet"> <!-- Slightly enhanced w3schools colours -->
<link href="css/mx-templates.css" rel="stylesheet"> <!-- Specific styles for these templates. -->
<!-- Scripts -->
<script src="js/setpagedata.js"></script> <!-- Utility javascripts for all pages. -->
</head>
<body>
<div id="Header" class="w3-row w3-top w3-theme-dark w3-theme-bdr">
<div class="w3-row-padding site-width">
<div class="at-flex-between" style="align-items:center; flex-wrap:wrap;">
<img src="images/CumulusMX-Logo.png" class="w3-image logo" alt="Header logo"/>
<div class="w3-right-align" style="max-width:600px;">
<h5>Lat<span class="w3-hide-small">itude</span>:&nbsp;<span data-cmxdata="latitude"></span><span class="at-divider">|<wbr></span>Long<span class="w3-hide-small">itude</span>:&nbsp;<span data-cmxdata="longitude"></span><span class="at-divider">|<wbr></span>Alt<span class="w3-hide-small">itude</span>:&nbsp;<span data-cmxdata="altitude"></span></h5>
</div>
</div>
<!-- Start of Menu -->
<div id="Main_Menu" class="w3-bar w3-theme-d4 w3-theme-bdr">
</div>
<!-- Mobile menu -->
<div id="Main_Menu_Mobile" class="w3-bar-block w3-hide w3-hide-large">
</div> <!-- End of Mobile menu -->
</div>
</div>
<div id="Content"> <!-- Start of panel content -->
<div class="w3-row-padding w3-theme-light site-width"> <!-- Page Title -->
<div class="w3-col l12">
<h1>Yesterday <span class="subText"><span data-cmxdata="yesterday"></span></span></h1>
</div>
</div> <!-- End of title row -->
<div class="w3-row site-width w3-theme-light"> <!-- Start of Main panel -->
<div class="w3-col l9 m12"> <!-- 3/4 width panel -->
<div class="w3-row-padding"> <!-- Row 1 of 3/4 width panel -->
<div class="w3-col s12"> <!-- Full width of above panel -->
<div class="w3-panel w3-card w3-theme-white">
<h2 class="">Yesterday's data</h2>
<div class="w3-responsive">
<table class="w3-table w3-hoverable" style="width:100%">
<tbody>
<tr class="w3-theme-d5">
<td colspan="3">Temperature and Humidity</td>
</tr>
<tr class="w3-theme-l2">
<td>High Temperature</td>
<td><span data-cmxdata="tempYH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td>at <span data-cmxdata="TtempYH"></span></td>
</tr>
<tr class="w3-theme-l2">
<td>Low Temperature</td>
<td><span data-cmxdata="tempYL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td>at <span data-cmxdata="TtempYL"></span></td>
</tr>
<tr class="w3-theme-l2">
<td>Temperature Range</td>
<td><span data-cmxdata="temprangeY"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td></td>
</tr>
<tr data-cmx-apparent class="w3-theme-l2 w3-hide">
<td>High Apparent Temperature</td>
<td><span data-cmxdata="apptempYH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td>at <span data-cmxdata="TapptempYH"></span></td>
</tr>
<tr data-cmx-apparent class="w3-theme-l2 w3-hide">
<td>Low Apparent Temperature</td>
<td><span data-cmxdata="apptempYL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td>at <span data-cmxdata="TapptempYL"></span></td>
</tr>
<tr data-cmx-feels class="w3-theme-l2">
<td>High Feels Like</td>
<td><span data-cmxdata="feelslikeYH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td>at <span data-cmxdata="TfeelslikeYH"></span></td>
</tr>
<tr data-cmx-feels class="w3-theme-l2">
<td>Low Feels Like</td>
<td><span data-cmxdata="feelslikeYL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td>at <span data-cmxdata="TfeelslikeYL"></span></td>
</tr>
<tr class="w3-theme-l2">
<td>Low Wind Chill</td>
<td><span data-cmxdata="wchillYL"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td>at <span data-cmxdata="TwchillYL"></span></td>
</tr>
<tr class="w3-theme-l2">
<td>High Heat Index</td>
<td><span data-cmxdata="heatindexYH"></span>&nbsp;<span data-cmxdata="tempunit"></span></td>
<td>at <span data-cmxdata="TheatindexYH"></span></td>
</tr>
<tr class="w3-theme-l2">
<td>High Humidity</td>
<td><span data-cmxdata="humYH"></span>&nbsp;%</td>
<td>at <span data-cmxdata="ThumYH"></span></td>
</tr>
<tr class="w3-theme-l2">
<td>Low Humidity</td>
<td><span data-cmxdata="humYL"></span>&nbsp;%</td>
<td>at <span data-cmxdata="ThumYL"></span></td>
</tr>
<tr class="w3-theme-d4">
<td colspan="3">Rainfall</td>
</tr>
<tr class="w3-theme-l3">
<td>Rainfall Yesterday</td>
<td><span data-cmxdata="rfallY"></span>&nbsp;<span data-cmxdata="rainunit"></span></td>
<td></td>
</tr>
<tr class="w3-theme-l3">
<td>Rainfall Rate Max</td>
<td><span data-cmxdata="rrateYM"></span>&nbsp;<span data-cmxdata="rainunit"></span>/hr</td>
<td>at <span data-cmxdata="TrrateYM"></span></td>
</tr>
<tr class="w3-theme-l3">
<td>High Hourly Rainfall</td>
<td><span data-cmxdata="hourlyrainYH"></span>&nbsp;<span data-cmxdata="rainunit"></span></td>
<td>at <span data-cmxdata="ThourlyrainYH"></span></td>
</tr>
<tr class="w3-theme-l3">
<td>High 24 Hour Rainfall</td>
<td><span data-cmxdata="rain24hourYH"></span>&nbsp;<span data-cmxdata="rainunit"></span></td>
<td>at <span data-cmxdata="Train24hourYH"></span></td>
</tr>
<tr class="w3-theme-d3">
<td colspan="3">Wind</td>
</tr>
<tr class="w3-theme-l4">
<td>High Gust</td>
<td><span data-cmxdata="wgustYM"></span>&nbsp;<span data-cmxdata="windunit"></span></td>
<td>at <span data-cmxdata="TwgustYM"></span></td>
</tr>
<tr class="w3-theme-l4">
<td>High Speed <span class="subText">(10 minute average)</span></td>
<td><span data-cmxdata="windYM"></span>&nbsp;<span data-cmxdata="windunit"></span> (<span data-cmxdata="Ybeaufort"></span>)</td>
<td>at <span data-cmxdata="TwindYM"></span></td>
</tr>
<tr class="w3-theme-l4">
<td>Wind Run</td>
<td><span data-cmxdata="windrunY"></span>&nbsp;<span data-cmxdata="windrununit"></span></td>
<td></td>
</tr>
<tr class="w3-theme-l4">
<td>Dominant Direction</td>
<td><span data-cmxdata="domwindbearingY"></span>&deg; <span data-cmxdata="domwinddirY"></span></td>
<td></td>
</tr>
<tr class="w3-theme-d2">
<td colspan="3">Pressure <span class="subText">(sea level)</span></td>
</tr>
<tr class="w3-theme-l5">
<td>High Pressure</td>
<td><span data-cmxdata="pressYH"></span>&nbsp;<span data-cmxdata="pressunit"></span></td>
<td>at <span data-cmxdata="TpressYH"></span></td>
</tr>
<tr class="w3-theme-l5">
<td>Low Pressure</td>
<td><span data-cmxdata="pressYL"></span>&nbsp;<span data-cmxdata="pressunit"></span></td>
<td>at <span data-cmxdata="TpressYL"></span></td>
</tr>
<tr class="w3-theme-d1 w3-hide" data-cmx-solar data-cmx-uv>
<td colspan="3">Solar</td>
</tr>
<tr class="w3-theme-l6 w3-hide" data-cmx-solar>
<td>High Solar Radiation</td>
<td><span data-cmxdata="solarYH"></span>&nbsp;W/m&sup2;</td>
<td>at <span data-cmxdata="TsolarYH"></span></td>
</tr>
<tr class="w3-theme-l6 w3-hide" data-cmx-solar>
<td>Hours of Sunshine</td>
<td><span data-cmxdata="YSunshineHours"></span>&nbsp;hrs</td>
<td></td>
</tr>
<tr class="w3-theme-l6 w3-hide" data-cmx-uv>
<td>High UV Index</td>
<td><span data-cmxdata="UVYH"></span></td>
<td>at <span data-cmxdata="TUVYH"></span></td>
</tr>
</tbody>
</table>
<p class="w3-small credits">Page updated <span data-cmxdata="update"></span>.</p>
</div>
</div>
</div>
</div>
</div>
<div class="w3-col l3 m12"> <!-- Start of Sidebar 1/4 width -->
<div class="w3-row-padding">
<div class="w3-col l12">
<div class="w3-panel w3-container w3-theme-light">
<h3 class="w3-center">Welcome to <br/><span class="subText"><span data-cmxdata="longlocation"></span></span></h3>
<p>This page shows a summary of the data for the 24 hrs up to <span data-cmxdata="rollovertime"></span> local time. </p>
</div>
</div>
</div>
</div>
</div> <!-- End of panel content -->
</div> <!-- End of content -->
<div id="Footer" class="w3-row w3-bottom w3-theme-dark w3-theme-bdr">
<div class="w3-row-padding site-width">
<p><em>Cumulus MX Template by Neil Thomas <script>document.write(new Date().getFullYear());</script>
<span class="w3-right">Powered by <span class="w3-theme-txt">Cumulus MX</span> v:<span data-cmxdata="version"></span>, b:<span data-cmxdata="build"></span></span></em></p>
</div>
</div>
</body>
</html>