1function _t(key, vars) { 2 return (window.WF && WF.i18n && typeof WF.i18n.t === "function") ? WF.i18n.t(key, vars) : key; 3} 4 5 6/* Data storage */ 7var dataTableRows = []; 8var wsdataRows = []; 9var wddataRows = []; 10var humdataRows = []; 11var dewpointRows = []; 12var windchillRows = []; 13var bgtRows = []; 14var pressureRows = []; 15var rainfallRows = []; 16var rainfalldataRows = []; 17var tmpdataRows = []; 18var solRows = []; 19var fsaRows = []; 20var fdaRows = []; 21var twRows = []; 22var vltRows = []; 23var vlt2Rows = []; 24var d1Rows = []; 25var p1uRows = []; 26var p2u5Rows = []; 27var p10uRows = []; 28var co2Rows = []; 29var showPreviewGaugeMetersTick = 0; 30var dataTablePage = 1; 31var dataTablePageCount = 1; 32 33var windIconCanvas = document.createElement("canvas"); 34 35/* Graph objects */ 36var humDataStore; 37var humChart; 38var rainfallDataStore; 39var rainfallChart; 40var pressureDataStore; 41var pressureChart; 42var dewpointDataStore; 43var dewpointChart; 44var windchillDataStore; 45var windchillChart; 46var bgtDataStore; 47var bgtChart; 48var windSpeedDataStore; 49var wSpeedChart; 50var tempDataStore; 51var tempChart; 52var solDataStore; 53var solChart; 54 55var fsaDataStore; 56var fsaChart; 57var fdaDataStore; 58var fdaChart; 59var twDataStore; 60var twChart; 61var vltDataStore; 62var vltChart; 63var vlt2DataStore; 64var vlt2Chart; 65var d1DataStore; 66var d1Chart; 67 68var windDirectionDataStore; 69var windDirectionChart; 70var totalpt; 71 72var wslpresent = !1; 73var wshpresent = !1; 74var wsapresent = !1; 75 76var jpl; 77 78function initializeCharts() { 79 humDataStore = new google.visualization.DataTable(); 80 humDataStore.addColumn("datetime", _t("chart.time")); 81 humDataStore.addColumn("number", _t("chart.relative_humidity_pct")); 82 humChart = new google.visualization.LineChart( 83 document.getElementById("hum_chart") 84 ); 85 86 rainfallDataStore = new google.visualization.DataTable(); 87 rainfallDataStore.addColumn("datetime", _t("chart.time")); 88 rainfallDataStore.addColumn("number", _t("chart.rainfall_mm")); 89 rainfallChart = new google.visualization.ColumnChart( 90 document.getElementById("rainfall_chart") 91 ); 92 93 pressureDataStore = new google.visualization.DataTable(); 94 pressureDataStore.addColumn("datetime", _t("chart.time")); 95 pressureDataStore.addColumn("number", _t("chart.pressure_hpa")); 96 pressureChart = new google.visualization.LineChart( 97 document.getElementById("pressure_chart") 98 ); 99 100 dewpointDataStore = new google.visualization.DataTable(); 101 dewpointDataStore.addColumn("datetime", _t("chart.time")); 102 dewpointDataStore.addColumn("number", thermalChartLegendLabel("dewpoint")); 103 dewpointChart = new google.visualization.LineChart( 104 document.getElementById("dewpoint_chart") 105 ); 106 107 windchillDataStore = new google.visualization.DataTable(); 108 windchillDataStore.addColumn("datetime", _t("chart.time")); 109 windchillDataStore.addColumn("number", thermalChartLegendLabel("wind_chill")); 110 windchillChart = new google.visualization.LineChart( 111 document.getElementById("windchill_chart") 112 ); 113 114 bgtDataStore = new google.visualization.DataTable(); 115 bgtDataStore.addColumn("datetime", _t("chart.time")); 116 bgtDataStore.addColumn("number", thermalChartLegendLabel("bgt")); 117 bgtChart = new google.visualization.LineChart( 118 document.getElementById("bgt_chart") 119 ); 120 121 windSpeedDataStore = new google.visualization.DataTable(); 122 windSpeedDataStore.addColumn("datetime", _t("chart.time")); 123 windSpeedDataStore.addColumn("number", _t("chart.wind_max")); 124 windSpeedDataStore.addColumn("number", _t("chart.wind_average")); 125 windSpeedDataStore.addColumn("number", _t("chart.wind_low")); 126 wSpeedChart = new google.visualization.LineChart( 127 document.getElementById("wspeed_chart") 128 ); 129 130 tempDataStore = new google.visualization.DataTable(); 131 tempDataStore.addColumn("datetime", _t("chart.time")); 132 tempDataStore.addColumn("number", thermalChartLegendLabel("temperature")); 133 tempChart = new google.visualization.LineChart( 134 document.getElementById("temperature_chart") 135 ); 136 137 solDataStore = new google.visualization.DataTable(); 138 solDataStore.addColumn("datetime", _t("chart.time")); 139 solDataStore.addColumn("number", _t("chart.solar_wm2")); 140 solChart = new google.visualization.LineChart( 141 document.getElementById("sol_chart") 142 ); 143 144 fsaDataStore = new google.visualization.DataTable(); 145 fsaDataStore.addColumn("datetime", _t("chart.time")); 146 fsaDataStore.addColumn("number", _t("chart.tidal_speed")); 147 fsaChart = new google.visualization.LineChart( 148 document.getElementById("fsa_chart") 149 ); 150 151 fdaDataStore = new google.visualization.DataTable(); 152 fdaDataStore.addColumn("datetime", _t("chart.time")); 153 fdaDataStore.addColumn("number", _t("chart.tidal_direction")); 154 fdaChart = new google.visualization.LineChart( 155 document.getElementById("fda_chart") 156 ); 157
158 twDataStore = new google.visualization.DataTable(); 159 twDataStore.addColumn("datetime", _t("chart.time")); 160 twDataStore.addColumn("number", _t("chart.water_temperature_celsius")); 161 twChart = new google.visualization.LineChart( 162 document.getElementById("tw_chart") 163 ); 164 165 vltDataStore = new google.visualization.DataTable(); 166 vltDataStore.addColumn("datetime", _t("chart.time")); 167 vltDataStore.addColumn("number", _t("chart.sensor_voltage")); 168 vltChart = new google.visualization.LineChart( 169 document.getElementById("vlt_chart") 170 ); 171 172 vlt2DataStore = new google.visualization.DataTable(); 173 vlt2DataStore.addColumn("datetime", _t("chart.time")); 174 vlt2DataStore.addColumn("number", _t("chart.wcu_voltage")); 175 vlt2Chart = new google.visualization.LineChart( 176 document.getElementById("vlt2_chart") 177 ); 178 179 d1DataStore = new google.visualization.DataTable(); 180 d1DataStore.addColumn("datetime", _t("chart.time")); 181 d1DataStore.addColumn("number", _t("chart.rain_bucket_mm")); 182 d1Chart = new google.visualization.ColumnChart( 183 document.getElementById("d1_chart") 184 ); 185 186 windDirectionDataStore = new google.visualization.DataTable(); 187 windDirectionDataStore.addColumn("datetime", _t("chart.time")); 188 windDirectionDataStore.addColumn("number", _t("chart.wind_direction_average")); 189 windDirectionChart = new google.visualization.LineChart( 190 document.getElementById("wdirection_chart") 191 ); 192} 193 194$(window).resize(function () { 195 debouncedDrawCharts(); 196}); 197 198function debounce(func, wait, immediate) { 199 var timeout; 200 return function () { 201 var context = this, 202 args = arguments; 203 var later = function () { 204 timeout = null; 205 if (!immediate) func.apply(context, args); 206 }; 207 var callNow = immediate && !timeout; 208 clearTimeout(timeout); 209 timeout = setTimeout(later, wait); 210 if (callNow) func.apply(context, args); 211 }; 212} 213var debouncedWindSpeedChart = debounce(function () { 214 if (wsdataRows.length > 0) { 215 } 216}, 250); 217var debouncedWindDirectionChart = debounce(function () { 218 if (wddataRows.length > 0) { 219 } 220}, 250); 221var debouncedDrawCharts = debounce(function () { 222 drawCharts(); 223}, 250); 224 225function updateCurrentWind() { } 226 227function drawCharts() { 228 console.log("Drawcharts()"); 229 if (gC("wf_windspeedchart") === "on") { 230 // console.log("Windspeedcharr is on"); 231 if (wsdataRows.length > 0) { 232 drawWindSpeedChart(); 233 } 234 } else { 235 // console.log("Windspeedcharr is off"); 236 } 237 if (gC("wf_temperaturechart") === "on") { 238 if (tmpdataRows.length > 0) { 239 drawTemperatureChart(); 240 } 241 } 242 if (gC("wf_winddirectionchart") === "on") { 243 if (wddataRows.length > 0) { 244 drawWindDirectionChart(); 245 } 246 } 247 if (gC("wf_humiditychart") === "on") { 248 if (humdataRows.length > 0) { 249 drawHumChart(); 250 } 251 } 252 if (gC("wf_dewpointchart") === "on") { 253 if (dewpointRows.length > 0) { 254 drawDewpointChart(); 255 } 256 } 257 if (gC("wf_windchillchart") === "on") { 258 if (windchillRows.length > 0) { 259 drawWindchillChart(); 260 } 261 } 262 if (gC("wf_bgtchart") === "on") { 263 if (bgtRows.length > 0) { 264 drawBgtChart(); 265 } 266 } 267 if (gC("wf_pressurechart") === "on") { 268 if (pressureRows.length > 0) { 269 drawPressureChart(); 270 } 271 } 272 // console.log("checking rainfall"); 273 // console.log(gC('wf_rainfallchart')); 274 // console.log("length of rainfall data rows"+rainfallRows.length); 275 if (gC("wf_rainfallchart") === "on") { 276 if (rainfallRows.length > 0) { 277 // console.log("There is rainfrall data so we're going to draw the rainfall chart"); 278 drawRainfallChart(); 279 } 280 } else { 281 // console.log("Rainfall chart switched off"); 282 } 283 284 // console.log("checking solar"); 285 // console.log(gC('wf_solarchart')); 286 if (gC("wf_solarchart") === "on") { 287 if (solRows.length > 0) { 288 drawSolChart(); 289 // console.log("There is Solar data so we're going to draw the Solar chart"); 290 } 291 } else { 292 console.log("Solar chart switched off"); 293 $("#sol_chart").hide(); 294 } 295 296 if (d1Rows.length > 0) { 297 drawd1Chart(); 298 } 299 300 if (solRows.length > 0) { 301 drawSolChart(); 302 } 303 304 if (fsaRows.length > 0) { 305 drawFsaChart(); 306 } 307 if (twRows.length > 0) { 308 drawTwChart(); 309 } 310 if (fdaRows.length > 0) { 311 drawFdaChart(); 312 } 313 314 if (vltRows.length > 0 && wf_user_token != "PUBLIC") { 315 drawVltChart(); 316 } 317 318 if (vlt2Rows.length > 0 && wf_user_token != "PUBLIC") { 319 drawVlt2Chart(); 320 } 321 322 // dont draw AQ graphs 323 // if (p2u5Rows.length > 0) { 324 // drawP1uChart(); 325 // } 326 // if (p1uRows.length > 0) { 327 // drawP2u5Chart(); 328 // } 329 // if (p10uRows.length > 0) { 330 // drawP10uChart(); 331 // } 332 // if (co2Rows.length > 0) { 333 // console.log("co2 rows length = " + co2Rows.length); 334 // drawco2Chart(); 335 // } 336} 337 338function wumult(inunits) { 339 switch (inunits.toUpperCase()) { 340 case "MPH": 341 return 2.23693629; 342 break; 343 case "KTS": 344 return 1.94384449; 345 break; 346 case "KPH": 347 return 3.6; 348 break; 349 default: 350 return 1; 351 } 352} 353 354function classicGetCookie(cname) { 355 // default to cookie 356 var name = cname + "="; 357 var ca = document.cookie.split(";"); 358 for (var i = 0; i < ca.length; i++) { 359 var c = ca[i]; 360 while (c.charAt(0) === " ") c = c.substring(1); 361 if (c.indexOf(name) === 0) return c.substring(name.length, c.length); 362 } 363 return ""; 364} 365 366var PREFERENCE_DEFAULTS = { 367 wf_wunits: "mps", 368 wf_timezone: "LCL", 369 wf_theme: "classicblue", 370 wf_tempunits: "celsius", 371 wf_suppress_public: "false", 372 wf_windspeedchart: "on", 373 wf_winddirectionchart: "on", 374 wf_pressurechart: "on", 375 wf_temperaturechart: "on", 376 wf_dewpointchart: "on", 377 wf_windchillchart: "on", 378 wf_bgtchart: "on", 379 wf_humiditychart: "on", 380 wf_rainfallchart: "on", 381 wf_solarchart: "on", 382 wf_datatable: "on", 383 wf_custom_scale: "", 384}; 385 386function preferenceDefault(cname) { 387 if (Object.prototype.hasOwnProperty.call(PREFERENCE_DEFAULTS, cname)) { 388 return PREFERENCE_DEFAULTS[cname]; 389 } 390 return ""; 391} 392 393function gC(cname) { 394 if ( 395 window.WFConsent && 396 typeof WFConsent.isPreferenceStorageKey === "function" && 397 WFConsent.isPreferenceStorageKey(cname) && 398 typeof WFConsent.shouldBlockPreferencesRead === "function" && 399 WFConsent.shouldBlockPreferencesRead() 400 ) { 401 return preferenceDefault(cname); 402 } 403 if (localStorageTest()) { 404 var c = localStorage.getItem(cname); 405 if (c == "" || c == null || c == undefined) { 406 return classicGetCookie(cname); 407 } else { 408 return c; 409 } 410 } else { 411 return classicGetCookie(cname); 412 } 413} 414 415function sC(cname, cvalue, exdays) { 416 if (window.WFConsent && window.WFConsent.shouldBlockFunctionalWrite()) { 417 return false;
418 } 419 if (localStorageTest()) { 420 localStorage.setItem(cname, cvalue); 421 } else { 422 // default to cookie if ls is not avail 423 var d = new Date(); 424 d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000); 425 var expires = "expires=" + d.toUTCString(); 426 document.cookie = cname + "=" + cvalue + "; " + expires; 427 } 428 return true; 429} 430 431/* 432 * function body that test if storage is available 433 * returns true if localStorage is available and false if it's not 434 */ 435function localStorageTest() { 436 var test = "test"; 437 try { 438 localStorage.setItem(test, test); 439 localStorage.removeItem(test); 440 return true; 441 } catch (e) { 442 return false; 443 } 444} 445 446function dataTableThermalUnitHtml() { 447 return gC("wf_tempunits") == "fhr" ? "°F" : "°C"; 448} 449 450/** Table + chart row arrays store API °C; convert for current wf_tempunits. */ 451function displayTempNumberFromCelsius(value) { 452 if (!isValid(value)) { 453 return NaN; 454 } 455 var n = parseFloat(value); 456 if (isNaN(n)) { 457 return NaN; 458 } 459 if (gC("wf_tempunits") == "fhr") { 460 return (n * 9) / 5 + 32; 461 } 462 return n; 463} 464 465function formatDataTableCelsiusCell(value) { 466 var n = displayTempNumberFromCelsius(value); 467 if (isNaN(n)) { 468 return ""; 469 } 470 return n.toFixed(1); 471} 472 473function thermalRowsForDisplayChart(rows) { 474 var mapped = []; 475 for (var r = 0; r < rows.length; r++) { 476 var tm = rows[r][0]; 477 var y = rows[r][1]; 478 if (!isValid(y)) { 479 mapped.push([tm, null]); 480 continue; 481 } 482 var dn = displayTempNumberFromCelsius(y); 483 mapped.push([tm, isNaN(dn) ? null : dn]); 484 } 485 return mapped; 486} 487 488/** Google Charts legend text; recomputed each draw so it tracks wf_tempunits. */ 489function thermalChartLegendLabel(metricKey) { 490 var fhr = gC("wf_tempunits") == "fhr"; 491 return _t("chart." + metricKey + "_" + (fhr ? "fahrenheit" : "celsius")); 492} 493 494function clearCharts() { 495 // dont remove the object 496 // $("#wspeed_chart").html(" "); 497 // $("#wdirection_chart").html(" "); 498 // $("#temperature_chart").html(" "); 499 // $("#dewpoint_chart").html(" "); 500 // $("#pressure_chart").html(" "); 501 // $("#hum_chart").html(" "); 502 // $("#rainfall_chart").html(" ") 503 // $("#p1u_chart").html(" "); 504 // $("#p2u5_chart").html(" "); 505 // $("#p10u_chart").html(" "); 506 // $("#co2_chart").html(" "); 507 // clear it! 508 if (humChart) humChart.clearChart();
509 if (tempChart) tempChart.clearChart(); 510 if (dewpointChart) dewpointChart.clearChart(); 511 if (windchillChart) windchillChart.clearChart(); 512 if (bgtChart) bgtChart.clearChart(); 513 if (pressureChart) pressureChart.clearChart(); 514 if (windDirectionChart) windDirectionChart.clearChart(); 515 if (wSpeedChart) wSpeedChart.clearChart(); 516 if (solChart) solChart.clearChart(); 517 if (rainfallChart) rainfallChart.clearChart(); 518 if (fsaChart) fsaChart.clearChart(); 519 if (fdaChart) fdaChart.clearChart(); 520 if (twChart) twChart.clearChart(); 521 if (vltChart) vltChart.clearChart(); 522 if (vlt2Chart) vlt2Chart.clearChart(); 523 if (d1Chart) d1Chart.clearChart(); 524} 525 526function tstodate(ts) { 527 var yr = parseInt(ts.substring(0, 4)); 528 var mo = parseInt(ts.substring(5, 7)) - 1; 529 var dy = parseInt(ts.substring(8, 10)); 530 var hr = parseInt(ts.substring(11, 13)); 531 var mn = parseInt(ts.substring(14, 16)); 532 var se = parseInt(ts.substring(17, 19)); 533 d = new Date(yr, mo, dy, hr, mn, se); 534 return d; 535} 536 537function showLatestAverageTime() { 538 if (isValid(jpl["data"]) && jpl["data"].length > 0) { 539 var last = jpl["data"][jpl["data"].length - 1]; 540 $("#averages_meters_time") 541 .text( 542 utcSecondsToTime(last["ts"]) + 543 " " + 544 todayOrYesterday(last["ts"], last["date"]) 545 ) 546 .css({ color: "white", "font-weight": "bold" }); 547 $("#averages_meters_time").show(); 548 } 549} 550 551function processAverages(loc_id, data, onComplete) { 552 dataTablePage = 1; 553 dataTableRows = []; 554 wsdataRows = []; 555 wddataRows = []; 556 humdataRows = []; 557 rainfalldataRows = []; 558 dewpointRows = []; 559 windchillRows = []; 560 bgtRows = []; 561 pressureRows = []; 562 tmpdataRows = []; 563 rainfallRows = []; 564 p1uRows = []; 565 p2u5Rows = []; 566 p10uRows = []; 567 co2Rows = []; 568 solRows = []; 569 fsaRows = []; 570 fdaRows = []; 571 twRows = []; 572 vltRows = []; 573 vlt2Rows = []; 574 d1Rows = []; 575 576 totalpt = 0; 577 578 console.log("Processing Averages into respective tables."); 579 580 jpl = JSON.parse(data); 581 if (jpl.data && jpl.data !== null) { 582 var td = jpl.data; 583 var wm = wumult(wunits); 584 var tz = gC("wf_timezone"); 585 // console.log("td len:", td.length); 586 for (i = 0; i < td.length; i++) { 587 var rdate = new Date(tstodate(td[i].ts)); 588 589 if (tz === "LCL") { 590 rdate = new Date(rdate - rdate.getTimezoneOffset() * 60000); 591 } 592 593 var wsl = ""; 594 var wsa = ""; 595 var wsh = ""; 596 var wda = ""; 597 var wdb = ""; 598 var wda = ""; 599 var wdv = ""; 600 var hpa = ""; 601 var hum = ""; 602 var tmp = ""; 603 var dew = ""; 604 var wcVal = ""; 605 var bgtVal = ""; 606 var pt = ""; 607 var fsa = ""; 608 var fda = ""; 609 var tw = ""; 610 var vlt = ""; 611 var vlt2 = ""; 612 var d1 = ""; 613 var p1u = ""; 614 var p2u5 = ""; 615 var p10u = ""; 616 var co2 = ""; 617 var novalue = "0"; 618 var sol = ""; 619 620 if (isValid(td[i].wsh) || isValid(td[i].wsa) || isValid(td[i].wsl)) { 621 if (wunits == "bft") { 622 wsh = getBeaufortFromMs(td[i].wsh); 623 // wsh = td[i].wsh ? getBeaufortFromMs(td[i].wsh) : null; 624 wsa = getBeaufortFromMs(td[i].wsa); 625 // wsl = td[i].wsl ? getBeaufortFromMs(td[i].wsl) : null; 626 wsl = getBeaufortFromMs(td[i].wsl); 627 } else { 628 wsh = td[i].wsh * wm; 629 // wsh = td[i].wsh ? td[i].wsh * wm : null; 630 wsa = td[i].wsa * wm; 631 wsl = td[i].wsl * wm; 632 // wsl = td[i].wsl ? td[i].wsl * wm : null; 633 } 634 wsdataRows.push([ 635 rdate, 636 isValid(td[i].wsh) ? wsh : null, 637 isValid(td[i].wsa) ? wsa : null, 638 isValid(td[i].wsl) ? wsl : null, 639 ]); 640 } 641 if (isValid(td[i].wda)) { 642 wda = td[i].wda; 643 wddataRows.push([rdate, wda]); 644 } 645 if (isValid(td[i].wdb)) { 646 wdb = td[i].wdb; 647 } 648 if (isValid(td[i].wdv)) { 649 wdv = td[i].wdv; 650 } 651 if (isValid(td[i].hpa)) { 652 hpa = td[i].hpa; 653 pressureRows.push([rdate, hpa]); 654 } 655 if (isValid(td[i].hum) && !(currentLocation == "GBR00134")) { 656 hum = td[i].hum; 657 humdataRows.push([rdate, hum]); 658 } 659 660 if (isValid(td[i].ta) && !(currentLocation == "GBR00134")) { 661 tmp = td[i].ta; 662 tmpdataRows.push([rdate, tmp]); 663 } 664 if (isValid(td[i].td) && !(currentLocation == "GBR00134")) { 665 dew = td[i].td; 666 dewpointRows.push([rdate, dew]); 667 } 668 if (isValid(td[i].wc) && !(currentLocation == "GBR00134")) { 669 wcVal = td[i].wc; 670 windchillRows.push([rdate, wcVal]); 671 } 672 if (isValid(td[i].bgt) && !(currentLocation == "GBR00134")) { 673 bgtVal = td[i].bgt; 674 bgtRows.push([rdate, bgtVal]); 675 } 676 if (isValid(td[i].pt)) { 677 pt = td[i].pt; 678 rainfallRows.push([rdate, pt]); 679 totalpt += parseFloat(pt); 680 } 681 if (isValid(td[i].sol)) { 682 sol = td[i].sol; 683 solRows.push([rdate, sol]); 684 } 685 if (isValid(td[i].fsa)) { 686 if (wunits == "bft") { 687 fsa = getBeaufortFromMs(td[i].fsa); 688 } else { 689 fsa = td[i].fsa * wm; 690 } 691 fsaRows.push([rdate, fsa]); 692 } 693 if (isValid(td[i].fda)) { 694 fda = td[i].fda; 695 fdaRows.push([rdate, fda]); 696 } 697 if (isValid(td[i].tw)) { 698 tw = td[i].tw; 699 twRows.push([rdate, tw]); 700 } 701 if (isValid(td[i].vlt)) { 702 vlt = td[i].vlt;
703 vltRows.push([rdate, vlt]); 704 } 705 if (isValid(td[i].vlt2)) { 706 vlt2 = td[i].vlt2; 707 vlt2Rows.push([rdate, vlt2]); 708 } 709 if (isValid(td[i].d1)) { 710 d1 = td[i].d1; 711 d1Rows.push([rdate, d1]); 712 } 713 dataTableRows.push([ 714 rdate, 715 wsl, 716 wsa, 717 wsh, 718 isValid(wda) ? wda : null, 719 isValid(wdb) ? wdb : null, 720 isValid(wdv) ? wdv : null, 721 tmp, 722 hpa, 723 hum, 724 dew, 725 pt, 726 sol, 727 fsa, 728 fda, 729 tw, 730 vlt, 731 d1, 732 vlt2, 733 wcVal, 734 bgtVal, 735 ]); 736 } 737 } 738 onComplete(); 739} 740 741function getAverageData(loc_id, params) { 742 /* Check if charts is loaded if not wait till it is */ 743 744 var formData = params; 745 if (params === "" || params === null || params === undefined) { 746 try { 747 formData = 748 (typeof gC === "function" ? gC("wf_timezone") : null) === "LCL" 749 ? { start_ts: getLocaltime_sinceMidnight() } 750 : ""; 751 } catch (e) { 752 formData = ""; 753 } 754 } 755 756 var cf = use_cache_flag ? server_cache_api_url : server_api_url; 757 758 var targeturl = 759 cf + "/" + server_api_version + "/loc/" + loc_id + "/averages.json"; 760 $("#nodatamessage").hide(); 761 $("#nolatestdatamessage").hide(); 762 $("#hurstxmas").hide(); 763 var onProcessDataComplete = function () { 764 // console.log("Running onProcessDataComplete"); 765 showLatestAverageTime(); 766 liveWind(); 767 showPreviewGaugeMeters(); 768 genCharts(); 769 }; 770 $.ajax({ 771 type: "POST", 772 url: targeturl, 773 data: formData, 774 headers: { 775 "wf-tkn": wf_user_token, 776 }, 777 success: function (data) { 778 processAverages(loc_id, data, onProcessDataComplete); 779 }, 780 }); 781} 782 783function genCharts() { 784 if (!CHARTS_LOADED) { 785 googleChartsLoaded = function () { 786 CHARTS_LOADED = true; 787 initializeCharts(); 788 if (typeof setupDelayGraph === "function") { 789 setupDelayGraph(); 790 } 791 genCharts(); 792 }; 793 google.charts.load("current", { 794 packages: ["corechart"], 795 }); 796 google.charts.setOnLoadCallback(googleChartsLoaded); 797 return; 798 } 799 if (!dataTableRows.length || dataTableRows.length == 0) { 800 console.log("Showing Error msg"); 801 locationHasAverages = false; 802 console.log("Current Location " + currentLocation); 803 804 if (currentLocation == "GBR00005" || currentLocation == "GBR00006") { 805 $("#nodatamessage").hide(); 806 $("#dialcontainer3").hide(); 807 $("#portdevelopment").show(); 808 $("#hurstcorona").hide(); 809 } else if (currentLocation == "GBR00002") { 810 $("#nodatamessage").hide(); 811 $("#dialcontainer3").hide(); 812 $("#hurstcorona").show(); 813 } else { 814 $("#nodatamessage").show(); 815 $("#dialcontainer3").hide(); 816 $("#portdevelopment").hide(); 817 $("#hurstcorona").hide(); 818 } 819 820 $("#spacer").show(); 821 $("#load_ads_3").show(); 822 $("#averages_meters").removeClass("is-visible"); 823 $("#latest_meters").removeClass("is-visible"); 824 $("#meters_banner").hide(); 825 $("#dialcontainer1").hide(); 826 $("#dialcontainer2").hide(); 827 // $("#simplebluegauge").hide(); 828 $("#wspeed_chart").hide(); 829 $("#wdirection_chart").hide(); 830 $("#temperature_chart").hide(); 831 $("#dewpoint_chart").hide(); 832 $("#windchill_chart").hide(); 833 $("#bgt_chart").hide(); 834 $("#pressure_chart").hide(); 835 $("#hum_chart").hide(); 836 $("#rainfall_chart").hide(); 837 $("#p1u_chart").hide(); 838 $("#p2u5_chart").hide(); 839 $("#p10u_chart").hide(); 840 $("#sol_chart").hide(); 841 $("#fsa_chart").hide(); 842 $("#fda_chart").hide(); 843 $("#tw_chart").hide(); 844 $("#vlt_chart").hide(); 845 $("#vlt2_chart").hide(); 846 $("#d1_chart").hide(); 847 $("#co2_chart").hide(); 848 $("#load_ads_2").hide(); 849 $("#data_table").hide(); 850 $("#data_table_nav").hide(); 851 $("#data_table_nav_2").hide(); 852 853 return; 854 } else { 855 locationHasAverages = true; 856 $("#yarmouthdevelopment").hide(); 857 $("#portdevelopment").hide(); 858 $("#hurstcorona").hide(); 859 860 // sC("wf_theme", "classicblue"); 861 if (gC("wf_theme") == "classicblue") { 862 // meters visibility is owned by latestDataCheck() 863 $("#dialcontainer1").hide(); 864 $("#dialcontainer2").hide(); 865 $("#dialcontainer3").hide(); 866 $("#simplebluegauge").hide(); 867 console.log("** Showing classicblue **"); 868 // } else if (gC("wf_theme") == "simplebluegauge") { 869 // $("#simplebluegauge").show() 870 // $("#averages_meters").hide() 871 // $("#latest_meters").hide() 872 // $("#dialcontainer1").hide() 873 // $("#dialcontainer2").hide() 874 // console.log("Showing simplebluegauge"); 875 } else if (gC("wf_theme") == "greydials") { 876 $("#averages_meters").removeClass("is-visible"); 877 $("#latest_meters").removeClass("is-visible"); 878 $("#meters_banner").hide(); 879 $("#dialcontainer1").show(); 880 881 // Greydials second row: show when any temperature-series metric is present 882 if ( 883 tmpdataRows.length === 0 && 884 dewpointRows.length === 0 && 885 windchillRows.length === 0 && 886 bgtRows.length === 0 887 ) { 888 $("#dialcontainer2").hide(); 889 // console.log("Hiding ... Dial Container 2 ... Temp not detected"); 890 // console.log("Temperature ... " + dataTableRows[0][7]); 891 } else { 892 $("#dialcontainer2").show(); 893 // console.log("Loading ... Dial Container 2 ... Temp detected"); 894 // console.log("Temperature ... " + dataTableRows[0][7]); 895 } 896 897 $("#dialcontainer3").show(); 898 $("#simplebluegauge").hide(); 899 console.log("** Showing greydials **"); 900 } else { 901 // Default is classicblue 902 // meters visibility is owned by latestDataCheck() 903 $("#dialcontainer1").hide(); 904 $("#dialcontainer2").hide(); 905 $("#dialcontainer3").hide(); 906 $("#simplebluegauge").hide(); 907 console.log("** Defaulting to classicblue **"); 908 } 909 910 if (typeof latestDataCheck === "function") { 911 latestDataCheck(); 912 } 913 914 $("#wspeed_chart").show(); 915 $("#wdirection_chart").show(); 916 if (tmpdataRows.length == 0) { 917 $("#temperature_chart").hide(); 918 } else { 919 $("#temperature_chart").show(); 920 } 921 if (dewpointRows.length == 0) { 922 $("#dewpoint_chart").hide(); 923 } else { 924 $("#dewpoint_chart").show(); 925 } 926 if (windchillRows.length == 0) { 927 $("#windchill_chart").hide(); 928 } else { 929 $("#windchill_chart").show(); 930 } 931 if (bgtRows.length == 0) { 932 $("#bgt_chart").hide(); 933 } else { 934 $("#bgt_chart").show(); 935 } 936 if (pressureRows.length == 0) { 937 $("#pressure_chart").hide(); 938 } else { 939 $("#pressure_chart").show(); 940 } 941 if (humdataRows.length == 0) { 942 $("#hum_chart").hide(); 943 } else { 944 $("#hum_chart").show(); 945 } 946 947 // console.log("Rainfall data count:" + rainfallRows.length); 948 if (rainfallRows.length == 0) { 949 $("#rainfall_chart").hide(); 950 // console.log("Hide Rain Chart") 951 } else { 952 $("#rainfall_chart").show(); 953 // console.log("Show Rain Chart") 954 } 955 956 // console.log("D1 data count:" + d1Rows.length); 957 if (d1Rows.length == 0) { 958 $("#d1_chart").hide(); 959 } else { 960 $("#d1_chart").show(); 961 // console.log("Show D1 Chart") 962 } 963 964 if (solRows.length == 0) { 965 $("#sol_chart").hide(); 966 // console.log("Hide Solar Chart") 967 } else { 968 $("#sol_chart").show(); 969 // console.log("Show Solar Chart") 970 } 971 972 if (fsaRows.length == 0) { 973 $("#fsa_chart").hide(); 974 } else { 975 $("#fsa_chart").show(); 976 } 977 if (fdaRows.length == 0) { 978 $("#fda_chart").hide(); 979 } else { 980 $("#fda_chart").show(); 981 } 982 if (twRows.length == 0) { 983 $("#tw_chart").hide(); 984 } else { 985 $("#tw_chart").show(); 986 } 987 if (vltRows.length == 0) { 988 $("#vlt_chart").hide(); 989 // console.log("Hide vlt Chart") 990 } else { 991 $("#vlt_chart").show(); 992 // console.log("Show vlt Chart") 993 } 994 if (vlt2Rows.length == 0) { 995 $("#vlt2_chart").hide(); 996 // console.log("Hide vlt2 Chart") 997 } else { 998 $("#vlt2_chart").show(); 999 // console.log("Show vlt2 Chart") 1000 } 1001 1002 // console.log("p1u length = " + p1uRows.length); 1003 // console.log("p2u5 length = " + p2u5Rows.length); 1004 // console.log("p10u length = " + p10uRows.length); 1005 // console.log("co2 length = " + co2Rows.length); 1006 1007 /* Temporarily removed due to them showing up unexpectedly */ 1008 // if (p1uRows.length > 0){ 1009 // $("#p1u_chart").show(); 1010 // }else{ 1011 // $("#p1u_chart").hide(); 1012 // } 1013 // if (p2u5Rows.length > 0){ 1014 // $("#p2u5_chart").show(); 1015 // }else{ 1016 // $("#p2u5_chart").hide(); 1017 // } 1018 // if (p10uRows.length > 0){ 1019 // $("#p10u_chart").show(); 1020 // }else{ 1021 // $("#p10u_chart").hide(); 1022 // } 1023 // if (co2Rows.length > 0){ 1024 // $("#co2_chart").show(); 1025 // }else{ 1026 // $("#co2_chart").hide(); 1027 // } 1028 // liveAds(); //$("#load_ads_2").show(); 1029 $("#data_table").show(); 1030 $("#data_table_nav").show(); 1031 $("#spacer").show(); 1032 // liveAds(); //$("#load_ads_3").show(); // Remove Kutis Ads 1033 $("#data_table_nav").show(); 1034 $("#data_table_nav_2").show(); 1035 drawCharts(); 1036 buildDataTable(); 1037 // liveAds(); 1038 } 1039} 1040 1041function dateFmt(indate) { 1042 return indate; 1043} 1044 1045function getCardinal16(angle) { 1046 cardinals = [ 1047 "N", 1048 "NNE", 1049 "NE", 1050 "ENE", 1051 "E", 1052 "ESE", 1053 "SE", 1054 "SSE", 1055 "S", 1056 "SSW", 1057 "SW", 1058 "WSW", 1059 "W", 1060 "WNW", 1061 "NW", 1062 "NNW", 1063 "N", 1064 ]; 1065 return cardinals[Math.round(((angle % 360) / 22.5) % 16)]; 1066} 1067 1068function getCardinal(angle) { 1069 cardinals = ["N", "NE", "E", "SE", "S", "SW", "W", "NW", "N"]; 1070 return cardinals[Math.round(((angle % 360) / 45) % 8)]; 1071} 1072 1073function dataTablePrev() { 1074 // console.log("Page:" + dataTablePage); 1075 1076 dataTablePage++; 1077 if (dataTablePage > dataTablePageCount) { 1078 dataTablePage = 1; 1079 } 1080 1081 buildDataTable(); 1082} 1083 1084function dataTableNext() { 1085 dataTablePage--; 1086 if (dataTablePage < 1) { 1087 dataTablePage = dataTablePageCount; 1088 } 1089 buildDataTable(); 1090} 1091 1092function buildDataTable() { 1093 $("#data_table").html(""); 1094 if (gC("wf_datatable") === "off") { 1095 $("#data_table_nav").hide(); 1096 $("#data_table_nav_2").hide(); 1097 $("#adscontainer").hide(); // Hide final ad container otherwise we get 2 x stacked ads 1098 return; 1099 } 1100 var monthNames = [ 1101 "Jan", 1102 "Feb", 1103 "Mar", 1104 "Apr", 1105 "May", 1106 "Jun", 1107 "Jul", 1108 "Aug", 1109 "Sept", 1110 "Oct", 1111 "Nov", 1112 "Dec", 1113 ]; 1114 var tempdatapresent = !1; 1115 var dewpointdatapresent = !1; 1116 var windchilldatapresent = !1; 1117 var bgtdatapresent = !1; 1118 var humiditydatapresent = !1; 1119 var pressuredatapresent = !1; 1120 var rainfalldatapresent = !1; 1121 var rainfalldatapresent = !1; 1122 var soldatapresent = !1; 1123 wslpresent = !1; 1124 wshpresent = !1; 1125 wsapresent = !1; 1126 1127 var wdapresent = !1; 1128 var backedpresent = !1; 1129 var veeredpresent = !1; 1130 1131 var fsadatapresent = !1; 1132 var fdadatapresent = !1; 1133 var twdatapresent = !1; 1134 var vltdatapresent = !1; 1135 var vlt2datapresent = !1; 1136 var d1datapresent = !1; 1137 1138 if (tmpdataRows.length > 0) { 1139 tempdatapresent = !0; 1140 } 1141 if (dewpointRows.length > 0) { 1142 dewpointdatapresent = !0; 1143 } 1144 if (windchillRows.length > 0) { 1145 windchilldatapresent = !0; 1146 } 1147 if (bgtRows.length > 0) { 1148 bgtdatapresent = !0; 1149 } 1150 if (humdataRows.length > 0) { 1151 humiditydatapresent = !0; 1152 } 1153 if (pressureRows.length > 0) { 1154 pressuredatapresent = !0; 1155 } 1156 if (rainfallRows.length > 0) { 1157 rainfalldatapresent = !0; 1158 } 1159 if (solRows.length > 0) { 1160 soldatapresent = !0; 1161 } 1162 1163 if (fsaRows.length > 0) { 1164 fsadatapresent = !0; 1165 } 1166 if (fdaRows.length > 0) { 1167 fdadatapresent = !0; 1168 } 1169 if (twRows.length > 0) { 1170 twdatapresent = !0; 1171 } 1172 if (vltRows.length > 0 && wf_user_token != "PUBLIC") { 1173 vltdatapresent = !0; 1174 } 1175 if (vlt2Rows.length > 0 && wf_user_token != "PUBLIC") { 1176 vlt2datapresent = !0; 1177 } 1178 if (d1Rows.length > 0) { 1179 d1datapresent = !0; 1180 } 1181 for (let i = 0; i < dataTableRows.length; i++) { 1182 if (dataTableRows[i][5] != null && isValid(dataTableRows[i][5])) { 1183 backedpresent = !0; 1184 } 1185 1186 if (dataTableRows[i][6] != null && isValid(dataTableRows[i][6])) { 1187 veeredpresent = !0; 1188 } 1189 if (dataTableRows[i][4] != null && isValid(dataTableRows[i][4])) { 1190 wdapresent = !0; 1191 } 1192 1193 if (dataTableRows[i][1] != null && isValid(dataTableRows[i][1])) { 1194 wslpresent = !0; 1195 } 1196 if (dataTableRows[i][3] != null && isValid(dataTableRows[i][3])) { 1197 wshpresent = !0; 1198 } 1199 if (dataTableRows[i][2] != null && isValid(dataTableRows[i][2])) { 1200 wsapresent = !0; 1201 } 1202 } 1203 var thermalUnitHdr = dataTableThermalUnitHtml(); 1204 var tablestr = 1205 "<div style='overflow-x: scroll !important;'><table class='basic-table'>\n"; 1206 tablestr = tablestr + "\t<tr>\n"; 1207 tablestr = 1208 tablestr + 1209 "\t\t<td style='font-weight:bold; font-size:12px; text-align:center;'>" + _t("chart.date") + "</td>\n"; 1210 tablestr = 1211 tablestr + 1212 "\t\t<td style='font-weight:bold; font-size:12px; text-align:center;'>" + _t("chart.time") + "</td>\n"; 1213 if (wslpresent) { 1214 tablestr = 1215 tablestr + 1216 "\t\t<td style='font-weight:bold; font-size:12px; text-align:center;'>" + _t("chart.wind_low") + "</td>\n"; 1217 } 1218 if (wsapresent) { 1219 tablestr = 1220 tablestr + 1221 "\t\t<td style='font-weight:bold; font-size:12px; text-align:center;'>" + _t("chart.wind_avg") + "</td>\n"; 1222 } 1223 if (wshpresent) { 1224 tablestr = 1225 tablestr + 1226 "\t\t<td style='font-weight:bold; font-size:12px; text-align:center;'>" + _t("chart.wind_max") + "</td>\n"; 1227 } 1228 if (wdapresent) { 1229 tablestr = 1230 tablestr + 1231 "\t\t<td style='font-weight:bold; font-size:12px; text-align:center;'>" + _t("chart.avg_direction") + "</td>\n"; 1232 } 1233 if (backedpresent) { 1234 tablestr = 1235 tablestr + 1236 "\t\t<td style='font-weight:bold; font-size:12px; text-align:center;'>" + _t("chart.backed") + "</td>\n"; 1237 } 1238 if (veeredpresent) { 1239 tablestr = 1240 tablestr + 1241 "\t\t<td style='font-weight:bold; font-size:12px; text-align:center;'>" + _t("chart.veered") + "</td>\n"; 1242 } 1243 if (tempdatapresent) { 1244 tablestr = 1245 tablestr + 1246 "\t\t<td style='font-weight:bold; font-size:12px; text-align:center;'>" + _t("chart.amb_temp") + "<br />" + 1247 thermalUnitHdr + 1248 "</td>\n"; 1249 } 1250 if (dewpointdatapresent) { 1251 tablestr = 1252 tablestr + 1253 "\t\t<td style='font-weight:bold; font-size:12px; text-align:center;'>" + _t("gauge.dewpoint") + "<br />" + 1254 thermalUnitHdr + 1255 "</td>\n"; 1256 } 1257 if (windchilldatapresent) { 1258 tablestr = 1259 tablestr + 1260 "\t\t<td style='font-weight:bold; font-size:12px; text-align:center;'>" + _t("gauge.wind_chill") + "<br />" + 1261 thermalUnitHdr + 1262 "</td>\n"; 1263 } 1264 if (bgtdatapresent) { 1265 tablestr = 1266 tablestr + 1267 "\t\t<td style='font-weight:bold; font-size:12px; text-align:center;'>" + _t("gauge.bgt") + "<br />" + 1268 thermalUnitHdr + 1269 "</td>\n"; 1270 } 1271 if (humiditydatapresent) { 1272 tablestr = 1273 tablestr + 1274 "\t\t<td style='font-weight:bold; font-size:12px; text-align:center;'>" + _t("chart.rh") + "<br />%</td>\n"; 1275 } 1276 if (pressuredatapresent) { 1277 tablestr = 1278 tablestr + 1279 "\t\t<td style='font-weight:bold; font-size:12px; text-align:center;'>" + _t("gauge.pressure") + "<br />hPa</td>\n"; 1280 } 1281 if (rainfalldatapresent) { 1282 tablestr = 1283 tablestr + 1284 "\t\t<td style='font-weight:bold; font-size:12px; text-align:center;'>" + _t("gauge.rainfall") + "<br />mm</td>\n"; 1285 } 1286 if (d1datapresent) { 1287 tablestr = 1288 tablestr + 1289 "\t\t<td style='font-weight:bold; font-size:12px; text-align:center;'>" + _t("metric.rain_bucket") + "<br />mm</td>\n"; 1290 } 1291 if (soldatapresent) { 1292 tablestr = 1293 tablestr + 1294 "\t\t<td style='font-weight:bold; font-size:12px; text-align:center;'>" + _t("gauge.solar") + "<br />W/m²</td>\n"; 1295 } 1296 if (fsadatapresent) { 1297 tablestr = 1298 tablestr + 1299 "\t\t<td style='font-weight:bold; font-size:12px; text-align:center;'>" + _t("chart.tidal_speed") + "<br /></td>\n"; 1300 } 1301 if (fdadatapresent) { 1302 tablestr = 1303 tablestr + 1304 "\t\t<td style='font-weight:bold; font-size:12px; text-align:center;'>" + _t("chart.tidal_direction") + "<br /></td>\n"; 1305 } 1306 if (twdatapresent) { 1307 ta
1307blestr = 1308 tablestr + 1309 "\t\t<td style='font-weight:bold; font-size:12px; text-align:center;'>" + _t("metric.water_temperature") + "<br />" + 1310 thermalUnitHdr + 1311 "</td>\n"; 1312 } 1313 if (vltdatapresent) { 1314 tablestr = 1315 tablestr + 1316 "\t\t<td style='font-weight:bold; font-size:12px; text-align:center;'>" + _t("chart.sensor_voltage") + "<br /></td>\n"; 1317 } 1318 if (vlt2datapresent) { 1319 tablestr = 1320 tablestr + 1321 "\t\t<td style='font-weight:bold; font-size:12px; text-align:center;'>" + _t("chart.wcu_voltage") + "<br /></td>\n"; 1322 } 1323 tablestr = tablestr + "\t</tr>\n"; 1324 var varflip = !0; 1325 dataTablePageCount = Math.floor(dataTableRows.length / 144); 1326 if (dataTableRows.length % 144 !== 0) { 1327 dataTablePageCount++; 1328 } 1329 var dataTableRowIdx = dataTableRows.length - (dataTablePage - 1) * 144 - 1; 1330 var dataTableRowEnd = dataTableRows.length - dataTablePage * 144; 1331 if (dataTableRowEnd < 0) { 1332 dataTableRowEnd = 0; 1333 } 1334 $("#data_table_nav_prev").show(); 1335 $("#data_table_nav_next").show(); 1336 1337 $("#data_table_nav_prev_bottom").show(); 1338 $("#data_table_nav_next_bottom").show(); 1339 1340 if (dataTablePage === dataTablePageCount) { 1341 $("#data_table_nav_prev").hide(); 1342 $("#data_table_nav_prev_bottom").hide(); 1343 } 1344 if (dataTablePage === 1) { 1345 $("#data_table_nav_next").hide(); 1346 $("#data_table_mid").hide(); 1347 1348 $("#data_table_nav_next_bottom").hide(); 1349 $("#data_table_mid_bottom").hide(); 1350 } 1351 1352 if (dataTablePageCount != 1) { 1353 $("#data_table_mid").show(); 1354 1355 $("#data_table_mid_bottom").show(); 1356 } 1357 1358 // console.log("Data Table Row Count = " + dataTableRows.length); 1359 // console.log("Page Num = " + dataTablePage); 1360 // console.log("Page Count = " + dataTablePageCount); 1361 // console.log("DataTableRowIdx = "+dataTableRowIdx); 1362 // console.log("DataTableRowEnd = "+dataTableRowEnd); 1363 1364 // Calculate the total rainfall for the time period suggested 1365 var totalrainfall; 1366 totalrainfall = 0; 1367 1368 var totald1; 1369 totald1 = 0; 1370 1371 for (i = dataTableRowIdx; i >= dataTableRowEnd; i--) { 1372 tablestr = tablestr + "\t<tr bgcolor='"; 1373 if (varflip) { 1374 tablestr = tablestr + "#fdfdfd'"; 1375 } else { 1376 tablestr = tablestr + "#e6eeff'"; 1377 } 1378 varflip = !varflip; 1379 tablestr = tablestr + ">\n"; 1380 tablestr = 1381 tablestr + "\t\t<td style='font-size:12px; text-align:center;' nowrap>"; 1382 var date = new Date(dataTableRows[i][0]); 1383 var day = date.getDate(); 1384 var monthIndex = date.getMonth(); 1385 //var year = date.getFullYear(); 1386 1387 /* 1388 var wsl = Math.round(parseInt(dataTableRows[i][1])); 1389 var wsa = Math.round(parseInt(dataTableRows[i][2])); 1390 var wsh = Math.round(parseInt(dataTableRows[i][3])); 1391 var wda = Math.round(parseInt(dataTableRows[i][4])); 1392 var wdb = Math.round(parseInt(dataTableRows[i][5])); 1393 var wdv = Math.round(parseInt(dataTableRows[i][6])); 1394 */ 1395 1396 // Data fix by PR / 21st May 2018 / Data from Blue Banner didn't match data table 1397 var wsl = Math.round(dataTableRows[i][1]); 1398 var wsa = Math.round(dataTableRows[i][2]); 1399 var wsh = Math.round(dataTableRows[i][3]); 1400 var wda = Math.round(dataTableRows[i][4]); 1401 var wdb = Math.round(dataTableRows[i][5]); 1402 var wdv = Math.round(dataTableRows[i][6]); 1403 1404 var imgnum = Math.round( 1405 parseInt(dataTableRows[i][4]) - (parseInt(dataTableRows[i][4]) % 5) 1406 ).toString(); 1407 1408 tablestr = tablestr + day + " " + monthNames[monthIndex]; 1409 tablestr = tablestr + "</td>\n"; 1410 tablestr = tablestr + "\t\t<td style='font-size:12px; text-align:center;'>"; 1411 tablestr = 1412 tablestr + 1413 ("00" + date.getHours()).substr(-2, 2) + 1414 ":" + 1415 ("00" + date.getMinutes()).substr(-2, 2); 1416 tablestr = tablestr + "</td>\n"; 1417 // wind icons 1418 if (wslpresent && isValid(dataTableRows[i][1])) { 1419 tablestr = 1420 tablestr + 1421 "\t\t<td align='center' style='font-size:11px; background-size: 35px 35px; background-repeat: no-repeat; background-position: top center;"; 1422 tablestr = 1423 tablestr + 1424 " background-image: url(" + 1425 generateWindIcon(dataTableRows[i][4], wsl) + 1426 ");' title='" + 1427 wsl + 1428 " " + 1429 wunits + 1430 " (Backed " + 1431 dataTableRows[i][5] + 1432 " Veered " + 1433 dataTableRows[i][5] + 1434 "'>"; 1435 tablestr = tablestr + "<span style='color:#fff;'></span></td>\n"; 1436 } else if (wslpresent) { 1437 tablestr = tablestr + " <td/>"; 1438 } 1439 if (wsapresent && isValid(dataTableRows[i][2])) { 1440 tablestr = 1441 tablestr + 1442 "\t\t<td align='center' style='font-size:11px; background-size: 35px 35px; background-repeat: no-repeat; background-position: top center;"; 1443 tablestr = 1444 tablestr + 1445 " background-image: url(" + 1446 generateWindIcon(dataTableRows[i][4], wsa) + 1447 ");' title='" + 1448 wsa + 1449 " " + 1450 wunits + 1451 " (Backed " + 1452 dataTableRows[i][5] + 1453 " Veered " + 1454 dataTableRows[i][5] + 1455 "'>"; 1456 tablestr = tablestr + "<span style='color:#fff;'></span></td>\n"; 1457 } else if (wsapresent) { 1458 tablestr = tablestr + " <td/>"; 1459 } 1460 if (wshpresent && isValid(dataTableRows[i][3])) { 1461 tablestr = 1462 tablestr + 1463 "\t\t<td align='center' style='font-size:11px; font-style:bold; background-size: 35px 35px; background-repeat: no-repeat; background-position: top center;"; 1464 tablestr = 1465 tablestr + 1466 " background-image: url(" + 1467 generateWindIcon(dataTableRows[i][4], wsh) + 1468 ");' title='" + 1469 wsh + 1470 " " + 1471 wunits + 1472 " (Backed " + 1473 dataTableRows[i][5] + 1474 " Veered " + 1475 dataTableRows[i][5] + 1476 "'>"; 1477 tablestr = tablestr + "<span style='color:#fff;'></span></td>\n"; 1478 } else if (wshpresent) { 1479 tablestr = tablestr + " <td/>"; 1480 } 1481 if (wdapresent && isValid(dataTableRows[i][4])) { 1482 tablestr = 1483 tablestr + "\t\t<td style='font-size:12px; text-align:center;'>"; 1484 tablestr = 1485 tablestr + getCardinal(wda) + " (" + wda + "°)"; 1486 tablestr = tablestr + "</td>\n"; 1487 } else if (wdapresent) { 1488 tablestr = tablestr + " <td/>"; 1489 } 1490 if (backedpresent && isValid(dataTableRows[i][5])) { 1491 tablestr = 1492 tablestr + "\t\t<td style='font-size:12px; text-align:center;'>"; 1493 tablestr = tablestr + wdb + "°";
1494 tablestr = tablestr + "</td>\n"; 1495 } else if (backedpresent) { 1496 tablestr = tablestr + " <td/>"; 1497 } 1498 if (veeredpresent && isValid(dataTableRows[i][6])) { 1499 tablestr = 1500 tablestr + "\t\t<td style='font-size:12px; text-align:center;'>"; 1501 tablestr = tablestr + wdv + "°"; 1502 tablestr = tablestr + "</td>\n"; 1503 } else if (veeredpresent) { 1504 tablestr = tablestr + " <td/>"; 1505 } 1506 1507 if (tempdatapresent) { 1508 tablestr = 1509 tablestr + 1510 "<td style='font-size:12px; text-align:center;'>" + 1511 formatDataTableCelsiusCell(dataTableRows[i][7]) + 1512 "</td>"; 1513 } 1514 if (dewpointdatapresent) { 1515 tablestr = 1516 tablestr + 1517 "<td style='font-size:12px; text-align:center;'>" + 1518 formatDataTableCelsiusCell(dataTableRows[i][10]) + 1519 "</td>"; 1520 } 1521 if (windchilldatapresent) { 1522 tablestr = 1523 tablestr + 1524 "<td style='font-size:12px; text-align:center;'>" + 1525 formatDataTableCelsiusCell(dataTableRows[i][19]) + 1526 "</td>"; 1527 } 1528 if (bgtdatapresent) { 1529 tablestr = 1530 tablestr + 1531 "<td style='font-size:12px; text-align:center;'>" + 1532 formatDataTableCelsiusCell(dataTableRows[i][20]) + 1533 "</td>"; 1534 } 1535 if (humiditydatapresent) { 1536 tablestr = 1537 tablestr + 1538 "<td style='font-size:12px; text-align:center;'>" + 1539 dataTableRows[i][9] + 1540 "</td>"; 1541 } 1542 if (pressuredatapresent) { 1543 tablestr = 1544 tablestr + 1545 "<td style='font-size:12px; text-align:center;'>" + 1546 dataTableRows[i][8] + 1547 "</td>"; 1548 } 1549 if (rainfalldatapresent) { 1550 tablestr = 1551 tablestr + 1552 "<td style='font-size:12px; text-align:center;'>" + 1553 dataTableRows[i][11] + 1554 "</td>"; 1555 totalrainfall += parseFloat(dataTableRows[i][11]); 1556 } 1557 if (d1datapresent) { 1558 tablestr = 1559 tablestr + 1560 "<td style='font-size:12px; text-align:center;'>" + 1561 dataTableRows[i][17] + 1562 "</td>"; 1563 totald1 += parseFloat(dataTableRows[i][17]); 1564 // console.log("DATA FEED: " + totald1) 1565 } 1566 if (soldatapresent) { 1567 tablestr = 1568 tablestr + 1569 "<td style='font-size:12px; text-align:center;'>" + 1570 dataTableRows[i][12] + 1571 "</td>"; 1572 } 1573 if (fsadatapresent) { 1574 tablestr = 1575 tablestr + 1576 "<td style='font-size:12px; text-align:center;'>" + 1577 dataTableRows[i][13].toFixed(3) + 1578 "</td>"; 1579 } 1580 if (fdadatapresent) { 1581 tablestr = 1582 tablestr + 1583 "<td style='font-size:12px; text-align:center;'>" + 1584 dataTableRows[i][14] + 1585 "</td>"; 1586 } 1587 if (twdatapresent) { 1588 tablestr = 1589 tablestr + 1590 "<td style='font-size:12px; text-align:center;'>" + 1591 formatDataTableCelsiusCell(dataTableRows[i][15]) + 1592 "</td>"; 1593 } 1594 if (vltdatapresent) { 1595 tablestr = 1596 tablestr + 1597 "<td style='font-size:12px; text-align:center;'>" + 1598 dataTableRows[i][16] + 1599 "</td>"; 1600 } 1601 if (vlt2datapresent) { 1602 tablestr = 1603 tablestr + 1604 "<td style='font-size:12px; text-align:center;'>" + 1605 dataTableRows[i][18] + 1606 "</td>"; 1607 } 1608 tablestr = tablestr + "\t</tr>"; 1609 } 1610 tablestr = tablestr + "</table></div>"; 1611 // console.log("Total PT: " + totalpt.toFixed(0) + "mm"); 1612 $("#rainfalltotal").html(totalpt.toFixed(0)); 1613 // console.log("Total D1: " + totald1.toFixed(0) + "mm"); 1614 $("#d1total").html(totald1.toFixed(0)); 1615 $("#data_table").html(tablestr); 1616 tablestr = null; 1617} 1618 1619function generateWindIcon(wda, wsa) { 1620 windIconCanvas.height = 40; 1621 windIconCanvas.width = 40; 1622 windIconCanvas 1623 .getContext("2d") 1624 .clearRect(0, 0, windIconCanvas.width, windIconCanvas.height); 1625 updateDirectionMarker(windIconCanvas, wda, wsa, "#000071", !isValid(wda)); // draws marker 1626 return windIconCanvas.toDataURL(); 1627} 1628 1629function drawHumChart() { 1630 var dformat = "d MMM"; // Simplify axis as requested by RPR 08.03.17 1631 if (humdataRows.length < 144) { 1632 dformat = "HH:mm"; 1633 } 1634 if (humdataRows.length > 145 || humdataRows.length < 288) { 1635 dformat = "d MMM HH:mm"; 1636 } 1637 humDataStore.removeRows(0, humDataStore.getNumberOfRows()); 1638 humDataStore.addRows(humdataRows); 1639 var options = { 1640 interpolateNulls: "false", 1641 chartArea: { 1642 width: "85%", 1643 height: "73%", 1644 }, 1645 width: "100%", 1646 height: "300", 1647 hAxis: { 1648 gridlines: { 1649 color: "#ddd", 1650 count: 10, 1651 }, 1652 format: dformat, 1653 textStyle: { 1654 fontName: "Open Sans", 1655 fontSize: 11, 1656 }, 1657 titleTextStyle: { 1658 color: "#ddd", 1659 }, 1660 }, 1661 vAxis: { 1662 format: "0", 1663 gridlines: { 1664 color: "#eee", 1665 count: 6, 1666 }, 1667 viewWindow: { 1668 min: 0, 1669 max: 100, 1670 }, 1671 textStyle: { 1672 fontName: "Open Sans", 1673 fontSize: 11, 1674 }, 1675 }, 1676 legend: { 1677 position: "top", 1678 textStyle: { 1679 fontName: "Open Sans", 1680 fontSize: 12, 1681 }, 1682 alignment: "center", 1683 }, 1684 colors: ["5ec390"], 1685 }; 1686 humChart.draw(humDataStore, options); 1687} 1688 1689function drawRainfallChart() { 1690 var dformat = "d MMM"; // Simplify axis as requested by RPR 08.03.17 1691 if (rainfallRows.length < 144) { 1692 dformat = "HH:mm"; 1693 } 1694 if (rainfallRows.length > 145 || rainfallRows.length < 288) { 1695 dformat = "d MMM HH:mm"; 1696 } 1697 rainfallDataStore.removeRows(0, rainfallDataStore.getNumberOfRows()); 1698 rainfallDataStore.addRows(rainfallRows); 1699 var options = { 1700 interpolateNulls: "false", 1701 chartArea: { 1702 width: "85%", 1703 height: "73%", 1704 }, 1705 width: "100%", 1706 height: "300", 1707 hAxis: { 1708 gridlines: { 1709 color: "#ddd", 1710 count: 10, 1711 }, 1712 format: dformat, 1713 textStyle: { 1714 fontName: "Open Sans", 1715 fontSize: 11, 1716 }, 1717 titleTextStyle: { 1718 color: "#ddd", 1719 }, 1720 }, 1721 vAxis: { 1722 gridlines: { 1723 color: "#eee", 1724 count: 6, 1725 }, 1726 viewWindow: { 1727 min: 0, 1728 }, 1729 textStyle: { 1730 fontName: "Open Sans", 1731 fontSize: 11, 1732 }, 1733 }, 1734 legend: { 1735 position: "top", 1736 textStyle: { 1737 fontName: "Open Sans", 1738 fontSize: 12, 1739 }, 1740 alignment: "center", 1741 }, 1742 colors: ["00a9f0"], 1743 }; 1744 rainfallChart.draw(rainfallDataStore, options); 1745} 1746 1747function drawd1Chart() { 1748 var dformat = "d MMM"; // Simplify axis as requested by RPR 08.03.17 1749 if (d1Rows.length < 144) { 1750 dformat = "HH:mm"; 1751 } 1752 if (d1Rows.length > 145 || d1Rows.length < 288) { 1753 dformat = "d MMM HH:mm"; 1754 } 1755 d1DataStore.removeRows(0, d1DataStore.getNumberOfRows()); 1756 d1DataStore.addRows(d1Rows); 1757 var options = { 1758 interpolateNulls: "false", 1759 chartArea: { 1760 width: "85%", 1761 height: "73%", 1762 }, 1763 width: "100%", 1764 height: "300", 1765 hAxis: { 1766 gridlines: { 1767 color: "#ddd", 1768 count: 10, 1769 }, 1770 format: dformat, 1771 textStyle: { 1772 fontName: "Open Sans", 1773 fontSize: 11, 1774 }, 1775 titleTextStyle: { 1776 color: "#ddd", 1777 }, 1778 }, 1779 vAxis: { 1780 gridlines: { 1781 color: "#eee", 1782 count: 6, 1783 }, 1784 viewWindow: { 1785 min: 0, 1786 }, 1787 textStyle: { 1788 fontName: "Open Sans", 1789 fontSize: 11, 1790 }, 1791 }, 1792 legend: { 1793 position: "top", 1794 textStyle: { 1795 fontName: "Open Sans", 1796 fontSize: 12, 1797 }, 1798 alignment: "center", 1799 }, 1800 colors: ["00a9f0"], 1801 }; 1802 d1Chart.draw(d1DataStore, options); 1803} 1804 1805function drawPressureChart() { 1806 var dformat = "d MMM"; // Simplify axis as requested by RPR 08.03.17 1807 if (pressureRows.length < 144) { 1808 dformat = "HH:mm"; 1809 } 1810 if (pressureRows.length > 145 || pressureRows.length < 288) { 1811 dformat = "d MMM HH:mm"; 1812 } 1813 pressureDataStore.removeRows(0, pressureDataStore.getNumberOfRows()); 1814 pressureDataStore.addRows(pressureRows); 1815 1816 var minpressure = 950;
1817 var maxpressure = 1040; 1818 1819 if (gC("wf_custom_scale") !== "") { 1820 var customscale = JSON.parse(gC("wf_custom_scale")); 1821 if ( 1822 customscale.minpressure !== "" && 1823 customscale.minpressure !== undefined && 1824 !isNaN(parseInt(customscale.minpressure)) 1825 ) { 1826 minpressure = customscale.minpressure; 1827 } 1828 if ( 1829 customscale.maxpressure !== "" && 1830 customscale.maxpressure !== undefined && 1831 !isNaN(parseInt(customscale.minpressure)) 1832 ) { 1833 maxpressure = customscale.maxpressure; 1834 } 1835 } 1836 1837 var options = { 1838 interpolateNulls: "false", 1839 chartArea: { 1840 width: "85%", 1841 height: "73%", 1842 }, 1843 width: "100%", 1844 height: "300", 1845 hAxis: { 1846 gridlines: { 1847 color: "#ddd", 1848 count: 10, 1849 }, 1850 format: dformat, 1851 textStyle: { 1852 fontName: "Open Sans", 1853 fontSize: 11, 1854 }, 1855 titleTextStyle: { 1856 color: "#ddd", 1857 }, 1858 }, 1859 vAxis: { 1860 gridlines: { 1861 color: "#eee", 1862 count: 6, 1863 }, 1864 viewWindow: { 1865 min: minpressure, 1866 max: maxpressure, 1867 }, 1868 textStyle: { 1869 fontName: "Open Sans", 1870 fontSize: 11, 1871 }, 1872 }, 1873 legend: { 1874 position: "top", 1875 textStyle: { 1876 fontName: "Open Sans", 1877 fontSize: 12, 1878 }, 1879 alignment: "center", 1880 }, 1881 colors: ["orange"], 1882 }; 1883 pressureChart.draw(pressureDataStore, options); 1884} 1885 1886function drawDewpointChart() { 1887 var dformat = "d MMM"; // Simplify axis as requested by RPR 08.03.17 1888 if (dewpointRows.length < 144) { 1889 dformat = "HH:mm"; 1890 } 1891 if (dewpointRows.length > 145 || dewpointRows.length < 288) { 1892 dformat = "d MMM HH:mm"; 1893 } 1894 dewpointDataStore.removeRows(0, dewpointDataStore.getNumberOfRows()); 1895 dewpointDataStore.setColumnLabel( 1896 1, 1897 thermalChartLegendLabel("dewpoint") 1898 ); 1899 dewpointDataStore.addRows(thermalRowsForDisplayChart(dewpointRows)); 1900 var options = { 1901 interpolateNulls: "false", 1902 chartArea: { 1903 width: "85%", 1904 height: "73%", 1905 }, 1906 width: "100%", 1907 height: "300", 1908 hAxis: { 1909 gridlines: { 1910 color: "#ddd", 1911 count: 10, 1912 }, 1913 format: dformat, 1914 textStyle: { 1915 fontName: "Open Sans", 1916 fontSize: 11, 1917 }, 1918 titleTextStyle: { 1919 color: "#ddd", 1920 }, 1921 }, 1922 vAxis: { 1923 format: "0.0", 1924 gridlines: { 1925 color: "#eee", 1926 count: 6, 1927 }, 1928 textStyle: { 1929 fontName: "Open Sans", 1930 fontSize: 11, 1931 }, 1932 }, 1933 legend: { 1934 position: "top", 1935 textStyle: { 1936 fontName: "Open Sans", 1937 fontSize: 12, 1938 }, 1939 alignment: "center", 1940 }, 1941 colors: ["#ee09d6"], 1942 }; 1943 dewpointChart.draw(dewpointDataStore, options); 1944} 1945 1946function drawWindchillChart() { 1947 var dformat = "d MMM"; 1948 if (windchillRows.length < 144) { 1949 dformat = "HH:mm"; 1950 } 1951 if (windchillRows.length > 145 || windchillRows.length < 288) { 1952 dformat = "d MMM HH:mm"; 1953 } 1954 windchillDataStore.removeRows(0, windchillDataStore.getNumberOfRows()); 1955 windchillDataStore.setColumnLabel( 1956 1, 1957 thermalChartLegendLabel("wind_chill") 1958 ); 1959 windchillDataStore.addRows(thermalRowsForDisplayChart(windchillRows)); 1960 var options = { 1961 interpolateNulls: "false", 1962 chartArea: { 1963 width: "85%", 1964 height: "73%", 1965 }, 1966 width: "100%", 1967 height: "300", 1968 hAxis: { 1969 gridlines: { 1970 color: "#ddd", 1971 count: 10, 1972 }, 1973 format: dformat, 1974 textStyle: { 1975 fontName: "Open Sans", 1976 fontSize: 11, 1977 }, 1978 titleTextStyle: { 1979 color: "#ddd", 1980 }, 1981 }, 1982 vAxis: { 1983 format: "0.0", 1984 gridlines: { 1985 color: "#eee", 1986 count: 6, 1987 }, 1988 textStyle: { 1989 fontName: "Open Sans", 1990 fontSize: 11, 1991 }, 1992 }, 1993 legend: { 1994 position: "top", 1995 textStyle: { 1996 fontName: "Open Sans", 1997 fontSize: 12, 1998 }, 1999 alignment: "center", 2000 }, 2001 colors: ["#0891b2"], 2002 }; 2003 windchillChart.draw(windchillDataStore, options); 2004} 2005 2006function drawBgtChart() { 2007 var dformat = "d MMM"; 2008 if (bgtRows.length < 144) { 2009 dformat = "HH:mm"; 2010 } 2011 if (bgtRows.length > 145 || bgtRows.length < 288) { 2012 dformat = "d MMM HH:mm"; 2013 } 2014 bgtDataStore.removeRows(0, bgtDataStore.getNumberOfRows()); 2015 bgtDataStore.setColumnLabel(1, thermalChartLegendLabel("bgt")); 2016 bgtDataStore.addRows(thermalRowsForDisplayChart(bgtRows)); 2017 var options = { 2018 interpolateNulls: "false", 2019 chartArea: { 2020 width: "85%", 2021 height: "73%", 2022 }, 2023 width: "100%", 2024 height: "300", 2025 hAxis: { 2026 gridlines: { 2027 color: "#ddd", 2028 count: 10, 2029 }, 2030 format: dformat, 2031 textStyle: { 2032 fontName: "Open Sans", 2033 fontSize: 11, 2034 }, 2035 titleTextStyle: { 2036 color: "#ddd", 2037 }, 2038 }, 2039 vAxis: { 2040 format: "0.0", 2041 gridlines: { 2042 color: "#eee", 2043 count: 6, 2044 }, 2045 textStyle: { 2046 fontName: "Open Sans", 2047 fontSize: 11, 2048 }, 2049 }, 2050 legend: { 2051 position: "top", 2052 textStyle: { 2053 fontName: "Open Sans", 2054 fontSize: 12, 2055 }, 2056 alignment: "center", 2057 }, 2058 colors: ["#c2410c"], 2059 }; 2060 bgtChart.draw(bgtDataStore, options); 2061} 2062 2063function drawP1uChart() { 2064 console.log("P1u"); 2065 // var dformat = "MMM d HH:mm"; 2066 var dformat = "d MMM"; // Simplify axis as requested by RPR 08.03.17 2067 if (p1uRows.length < 144) { 2068 dformat = "HH:mm"; 2069 } 2070 2071 var dewpointDataStore = new google.visualization.DataTable(); 2072 dewpointDataStore.addColumn("datetime", _t("chart.time")); 2073 dewpointDataStore.addColumn("number", _t("chart.pm1")); 2074 dewpointDataStore.addRows(p1uRows); 2075 var options = { 2076 interpolateNulls: "false", 2077 chartArea: { 2078 width: "85%", 2079 height: "73%", 2080 }, 2081 width: "100%", 2082 height: "300", 2083 hAxis: { 2084 gridlines: { 2085 color: "#ddd", 2086 count: 10, 2087 }, 2088 format: dformat, 2089 textStyle: { 2090 fontName: "Open Sans", 2091 fontSize: 11, 2092 }, 2093 titleTextStyle: { 2094 color: "#ddd", 2095 }, 2096 }, 2097 vAxis: { 2098 gridlines: { 2099 color: "#eee", 2100 count: 6, 2101 }, 2102 textStyle: { 2103 fontName: "Open Sans", 2104 fontSize: 11, 2105 }, 2106 }, 2107 legend: { 2108 position: "top", 2109 textStyle: { 2110 fontName: "Open Sans", 2111 fontSize: 12, 2112 }, 2113 alignment: "center", 2114 }, 2115 colors: ["#ee09d6"], 2116 }; 2117 var chart = new google.visualization.LineChart( 2118 document.getElementById("p1u_chart") 2119 ); 2120 chart.draw(dewpointDataStore, options); 2121} 2122 2123function drawP2u5Chart() { 2124 console.log("P2u5"); 2125 // var dformat = "MMM d HH:mm"; 2126 var dformat = "HH:mm"; // Simplify axis as requested by RPR 08.03.17 2127 if (p2u5Rows.length < 144) { 2128 dformat = "HH:mm"; 2129 } 2130 2131 var dewpointDataStore = new google.visualization.DataTable(); 2132 dewpointDataStore.addColumn("datetime", _t("chart.time")); 2133 dewpointDataStore.addColumn("number", _t("chart.pm25")); 2134 dewpointDataStore.addRows(p2u5Rows); 2135 var options = { 2136 interpolateNulls: "false", 2137 chartArea: { 2138 width: "85%", 2139 height: "73%", 2140 }, 2141 width: "100%", 2142 height: "300", 2143 hAxis: { 2144 gridlines: { 2145 color: "#ddd", 2146 count: 10, 2147 }, 2148 format: dformat, 2149 textStyle: { 2150 fontName: "Open Sans", 2151 fontSize: 11, 2152 }, 2153 titleTextStyle: { 2154 color: "#ddd", 2155 }, 2156 }, 2157 vAxis: { 2158 gridlines: { 2159 color: "#eee", 2160 count: 6, 2161 }, 2162 textStyle: { 2163 fontName: "Open Sans", 2164 fontSize: 11, 2165 }, 2166 }, 2167 legend: { 2168 position: "top", 2169 textStyle: { 2170 fontName: "Open Sans", 2171 fontSize: 12, 2172 }, 2173 alignment: "center", 2174 }, 2175 colors: ["#ee05ff"], 2176 }; 2177 var chart = new google.visualization.LineChart( 2178 document.getElementById("p2u5_chart") 2179 ); 2180 chart.draw(dewpointDataStore, options); 2181} 2182 2183function drawP10uChart() { 2184 console.log("P10u"); 2185 // var dformat = "MMM d HH:mm"; 2186 var dformat = "HH:mm"; // Simplify axis as requested by RPR 08.03.17 2187 if (p10uRows.length < 144) { 2188 dformat = "HH:mm"; 2189 } 2190 2191 var dewpointDataStore = new google.visualization.DataTable(); 2192 dewpointDataStore.addColumn("datetime", _t("chart.time")); 2193 dewpointDataStore.addColumn("number", _t("chart.pm10")); 2194 dewpointDataStore.addRows(p10uRows); 2195 var options = { 2196 interpolateNulls: "false", 2197 chartArea: { 2198 width: "85%", 2199 height: "73%", 2200 }, 2201 width: "100%", 2202 height: "300", 2203 hAxis: { 2204 gridlines: { 2205 color: "#ddd", 2206 count: 10, 2207 }, 2208 format: dformat, 2209 textStyle: { 2210 fontName: "Open Sans", 2211 fontSize: 11, 2212 }, 2213 titleTextStyle: { 2214 color: "#ddd", 2215 }, 2216 }, 2217 vAxis: { 2218 gridlines: { 2219 color: "#eee", 2220 count: 6, 2221 }, 2222 textStyle: { 2223 fontName: "Open Sans", 2224 fontSize: 11, 2225 }, 2226 }, 2227 legend: { 2228 position: "top", 2229 textStyle: { 2230 fontName: "Open Sans", 2231 fontSize: 12, 2232 }, 2233 alignment: "center", 2234 }, 2235 colors: ["#1105ff"], 2236 }; 2237 var chart = new google.visualization.LineChart( 2238 document.getElementById("p10u_chart") 2239 ); 2240 chart.draw(dewpointDataStore, options); 2241} 2242 2243function drawco2Chart() { 2244 console.log("co2"); 2245 // var dformat = "MMM d HH:mm"; 2246 var dformat = "HH:mm"; // Simplify axis as requested by RPR 08.03.17 2247 if (co2Rows.length < 144) { 2248 dformat = "HH:mm"; 2249 } 2250 2251 var dewpointDataStore = new google.visualization.DataTable(); 2252 dewpointDataStore.addColumn("datetime", _t("chart.time")); 2253 dewpointDataStore.addColumn("number", _t("chart.co2")); 2254 dewpointDataStore.addRows(co2Rows); 2255 var options = { 2256 interpolateNulls: "false", 2257 chartArea: { 2258 width: "85%", 2259 height: "73%", 2260 }, 2261 width: "100%", 2262 height: "300", 2263 hAxis: { 2264 gridlines: { 2265 color: "#ddd", 2266 count: 10, 2267 }, 2268 format: dformat, 2269 textStyle: { 2270 fontName: "Open Sans", 2271 fontSize: 11, 2272 }, 2273 titleTextStyle: { 2274 color: "#ddd", 2275 }, 2276 }, 2277 vAxis: { 2278 gridlines: { 2279 color: "#eee", 2280 count: 6, 2281 }, 2282 textStyle: { 2283 fontName: "Open Sans", 2284 fontSize: 11, 2285 }, 2286 }, 2287 legend: { 2288 position: "top", 2289 textStyle: { 2290 fontName: "Open Sans", 2291 fontSize: 12, 2292 }, 2293 alignment: "center", 2294 }, 2295 colors: ["#1105ff"], 2296 }; 2297 var chart = new google.visualization.LineChart( 2298 document.getElementById("co2_chart") 2299 ); 2300 chart.draw(dewpointDataStore, options); 2301} 2302 2303function drawWindSpeedChart() { 2304 var dformat = "d MMM"; // Simplify axis as requested by RPR 08.03.17 2305 if (wsdataRows.length < 144) { 2306 dformat = "HH:mm"; 2307 } 2308 if (wsdataRows.length > 145 || wsdataRows.length < 288) { 2309 dformat = "d MMM HH:mm"; 2310 } 2311 windSpeedDataStore.setColumnLabel(0, _t("chart.time")); 2312 windSpeedDataStore.setColumnLabel(1, _t("chart.wind_max")); 2313 windSpeedDataStore.setColumnLabel(2, _t("chart.wind_average")); 2314 windSpeedDataStore.setColumnLabel(3, _t("chart.wind_low")); 2315 windSpeedDataStore.removeRows(0, windSpeedDataStore.getNumberOfRows()); 2316 windSpeedDataStore.addRows(wsdataRows); 2317 wsdataRows.forEach((value) => { 2318 if (isValid(value[1])) wshpresent = !0; 2319 if (isValid(value[2])) wsapresent = !0; 2320 if (isValid(value[3])) wslpresent = !0; 2321 }); 2322 2323 var options = { 2324 interpolateNulls: true, 2325 chartArea: { 2326 width: "85%", 2327 height: "73%", 2328 }, 2329 width: "100%", 2330 height: "300", 2331 hAxis: { 2332 gridlines: { 2333 color: "#ddd", 2334 count: 10, 2335 }, 2336 format: dformat, 2337 textStyle: { 2338 fontName: "Open Sans", 2339 fontSize: 11, 2340 }, 2341 titleTextStyle: { 2342 color: "#ddd", 2343 }, 2344 }, 2345 vAxis: { 2346 format: "0.0", 2347 viewWindow: { 2348 min: 0, 2349 }, 2350 gridlines: { 2351 color: "#eee", 2352 count: 7, 2353 }, 2354 textStyle: { 2355 fontName: "Open Sans", 2356 fontSize: 11, 2357 }, 2358 }, 2359 legend: { 2360 position: "top", 2361 textStyle: { 2362 fontName: "Open Sans", 2363 fontSize: 11, 2364 }, 2365 alignment: "center", 2366 }, 2367 colors: ["red", "#009", "#ddd"], 2368 series: { 2369 0: { 2370 visibleInLegend: wshpresent, 2371 }, 2372 1: { 2373 visibleInLegend: wsapresent, 2374 }, 2375 2: { 2376 visibleInLegend: wslpresent, 2377 }, 2378 }, 2379 }; 2380 $("#wspeed_chart").show(); 2381 wSpeedChart.draw(windSpeedDataStore, options); 2382} 2383 2384function drawFsaChart() { 2385 var dformat = "d MMM"; // Simplify axis as requested by RPR 08.03.17 2386 if (fsaRows.length < 144) { 2387 dformat = "HH:mm"; 2388 } 2389 fsaDataStore.removeRows(0, fsaDataStore.getNumberOfRows()); 2390 fsaDataStore.addRows(fsaRows); 2391 2392 var options = { 2393 interpolateNulls: "false", 2394 chartArea: { 2395 width: "85%", 2396 height: "73%", 2397 }, 2398 width: "100%", 2399 height: "300", 2400 hAxis: { 2401 gridlines: { 2402 color: "#ddd", 2403 count: 10, 2404 }, 2405 format: dformat, 2406 textStyle: { 2407 fontName: "Open Sans", 2408 fontSize: 11, 2409 }, 2410 titleTextStyle: { 2411 color: "#ddd", 2412 }, 2413 }, 2414 vAxis: { 2415 format: "0.00", 2416 viewWindow: { 2417 min: 0, 2418 }, 2419 gridlines: { 2420 color: "#eee", 2421 count: 7, 2422 }, 2423 textStyle: { 2424 fontName: "Open Sans", 2425 fontSize: 11, 2426 }, 2427 }, 2428 legend: { 2429 position: "top", 2430 textStyle: { 2431 fontName: "Open Sans", 2432 fontSize: 11, 2433 }, 2434 alignment: "center", 2435 }, 2436 colors: ["#215dbc"], 2437 };
2438 fsaChart.draw(fsaDataStore, options); 2439} 2440 2441function drawVltChart() { 2442 var dformat = "d MMM"; // Simplify axis as requested by RPR 08.03.17 2443 if (vltRows.length < 144) { 2444 dformat = "HH:mm"; 2445 } 2446 vltDataStore.removeRows(0, vltDataStore.getNumberOfRows()); 2447 vltDataStore.addRows(vltRows); 2448 var options = { 2449 interpolateNulls: "false", 2450 chartArea: { 2451 width: "85%", 2452 height: "73%", 2453 }, 2454 width: "100%", 2455 height: "300", 2456 hAxis: { 2457 gridlines: { 2458 color: "#ddd", 2459 count: 10, 2460 }, 2461 format: dformat, 2462 textStyle: { 2463 fontName: "Open Sans", 2464 fontSize: 11, 2465 }, 2466 titleTextStyle: { 2467 color: "#ddd", 2468 }, 2469 }, 2470 vAxis: { 2471 format: "0.0", 2472 viewWindow: { 2473 min: 0, 2474 }, 2475 gridlines: { 2476 color: "#eee", 2477 count: 7, 2478 }, 2479 textStyle: { 2480 fontName: "Open Sans", 2481 fontSize: 11, 2482 }, 2483 }, 2484 legend: { 2485 position: "top", 2486 textStyle: { 2487 fontName: "Open Sans", 2488 fontSize: 11, 2489 }, 2490 alignment: "center", 2491 }, 2492 colors: ["#215dbc"], 2493 }; 2494 vltChart.draw(vltDataStore, options); 2495} 2496 2497function drawVlt2Chart() { 2498 var dformat = "d MMM"; // Added on 5th August 2021 2499 if (vlt2Rows.length < 144) { 2500 dformat = "HH:mm"; 2501 } 2502 vlt2DataStore.removeRows(0, vlt2DataStore.getNumberOfRows()); 2503 vlt2DataStore.addRows(vlt2Rows); 2504 var options = { 2505 interpolateNulls: "false", 2506 chartArea: { 2507 width: "85%", 2508 height: "73%", 2509 }, 2510 width: "100%", 2511 height: "300", 2512 hAxis: { 2513 gridlines: { 2514 color: "#ddd", 2515 count: 10, 2516 }, 2517 format: dformat, 2518 textStyle: { 2519 fontName: "Open Sans", 2520 fontSize: 11, 2521 }, 2522 titleTextStyle: { 2523 color: "#ddd", 2524 }, 2525 }, 2526 vAxis: { 2527 format: "0.0", 2528 viewWindow: { 2529 min: 0, 2530 }, 2531 gridlines: { 2532 color: "#eee", 2533 count: 7, 2534 }, 2535 textStyle: { 2536 fontName: "Open Sans", 2537 fontSize: 11, 2538 }, 2539 }, 2540 legend: { 2541 position: "top", 2542 textStyle: { 2543 fontName: "Open Sans", 2544 fontSize: 11, 2545 }, 2546 alignment: "center", 2547 }, 2548 colors: ["#215dbc"], 2549 }; 2550 vlt2Chart.draw(vlt2DataStore, options); 2551} 2552 2553function drawFdaChart() { 2554 var dformat = "d MMM"; // Simplify axis as requested by RPR 08.03.17 2555 if (fdaRows.length < 144) { 2556 dformat = "HH:mm"; 2557 } 2558 fdaDataStore.removeRows(0, fdaDataStore.getNumberOfRows()); 2559 fdaDataStore.addRows(fdaRows); 2560 var options = { 2561 interpolateNulls: "false", 2562 chartArea: { 2563 width: "85%", 2564 height: "73%", 2565 }, 2566 lineWidth: 0, // pseudo scatter graph by setting lineWidth to zero, just shows datapoints 2567 width: "100%", 2568 height: "300", 2569 colors: ["purple"], 2570 pointSize: 0.5, 2571 hAxis: { 2572 gridlines: { 2573 color: "#ddd", 2574 count: 10, 2575 }, 2576 format: dformat, 2577 textStyle: { 2578 fontName: "Open Sans", 2579 fontSize: 11, 2580 }, 2581 titleTextStyle: { 2582 color: "#ddd", 2583 }, 2584 }, 2585 vAxis: { 2586 format: "0", 2587 viewWindowMode: "explicit", 2588 viewWindow: { 2589 max: 0, 2590 min: 360, 2591 }, 2592 gridlines: { 2593 color: "#eee", 2594 count: 10, 2595 }, 2596 textStyle: { 2597 fontName: "Open Sans", 2598 fontSize: 11, 2599 }, 2600 ticks: [ 2601 { 2602 v: 0, 2603 f: "N", 2604 }, 2605 { 2606 v: 45, 2607 f: "NE", 2608 }, 2609 { 2610 v: 90, 2611 f: "E", 2612 }, 2613 { 2614 v: 135, 2615 f: "SE", 2616 }, 2617 { 2618 v: 180, 2619 f: "S", 2620 }, 2621 { 2622 v: 225, 2623 f: "SW", 2624 }, 2625 { 2626 v: 270, 2627 f: "W", 2628 }, 2629 { 2630 v: 315, 2631 f: "NW", 2632 }, 2633 { 2634 v: 360, 2635 f: "N", 2636 }, 2637 ], 2638 }, 2639 legend: { 2640 position: "top", 2641 textStyle: { 2642 fontName: "Open Sans", 2643 fontSize: 11, 2644 }, 2645 alignment: "center", 2646 }, 2647 }; 2648 fdaChart.draw(fdaDataStore, options); 2649} 2650 2651function drawTwChart() { 2652 var dformat = "d MMM"; // Simplify axis as requested by RPR 08.03.17 2653 if (twRows.length < 144) { 2654 dformat = "HH:mm"; 2655 } 2656 twDataStore.removeRows(0, twDataStore.getNumberOfRows()); 2657 twDataStore.addRows(twRows); 2658 var options = { 2659 interpolateNulls: "false", 2660 chartArea: { 2661 width: "85%", 2662 height: "73%", 2663 }, 2664 width: "100%", 2665 height: "300", 2666 hAxis: { 2667 gridlines: { 2668 color: "#ddd", 2669 count: 10, 2670 }, 2671 format: dformat, 2672 textStyle: { 2673 fontName: "Open Sans", 2674 fontSize: 11, 2675 }, 2676 titleTextStyle: { 2677 color: "#ddd", 2678 }, 2679 }, 2680 vAxis: { 2681 format: "0.00", 2682 gridlines: { 2683 color: "#eee", 2684 count: 6, 2685 }, 2686 textStyle: { 2687 fontName: "Open Sans", 2688 fontSize: 11, 2689 }, 2690 }, 2691 legend: { 2692 position: "top", 2693 textStyle: { 2694 fontName: "Open Sans", 2695 fontSize: 12, 2696 }, 2697 alignment: "center", 2698 }, 2699 colors: ["#97b267"], 2700 }; 2701 twChart.draw(twDataStore, options); 2702} 2703 2704function drawTemperatureChart() { 2705 var dformat = "d MMM"; // Simplify axis as requested by RPR 08.03.17 2706 if (tmpdataRows.length < 144) { 2707 dformat = "HH:mm"; 2708 } 2709 if (tmpdataRows.length > 145 || tmpdataRows.length < 288) { 2710 dformat = "d MMM HH:mm"; 2711 } 2712 tempDataStore.removeRows(0, tempDataStore.getNumberOfRows()); 2713 tempDataStore.setColumnLabel( 2714 1, 2715 thermalChartLegendLabel("temperature") 2716 ); 2717 tempDataStore.addRows(thermalRowsForDisplayChart(tmpdataRows)); 2718 var options = { 2719 interpolateNulls: "false", 2720 chartArea: { 2721 width: "85%", 2722 height: "73%", 2723 }, 2724 width: "100%", 2725 height: "300", 2726 hAxis: { 2727 gridlines: { 2728 color: "#ddd", 2729 count: 10, 2730 }, 2731 format: dformat, 2732 textStyle: { 2733 fontName: "Open Sans", 2734 fontSize: 11, 2735 }, 2736 titleTextStyle: { 2737 color: "#ddd", 2738 }, 2739 }, 2740 vAxis: { 2741 format: "0.0", 2742 gridlines: { 2743 color: "#eee", 2744 count: 6, 2745 }, 2746 textStyle: { 2747 fontName: "Open Sans", 2748 fontSize: 11, 2749 }, 2750 }, 2751 legend: { 2752 position: "top", 2753 textStyle: { 2754 fontName: "Open Sans", 2755 fontSize: 12, 2756 }, 2757 alignment: "center", 2758 }, 2759 colors: ["#97b267"], 2760 }; 2761 tempChart.draw(tempDataStore, options); 2762} 2763 2764function drawSolChart() { 2765 var dformat = "d MMM"; // Simplify axis as requested by RPR 08.03.17 2766 if (solRows.length < 144) { 2767 dformat = "HH:mm"; 2768 } 2769 if (solRows.length > 145 || solRows.length < 288) { 2770 dformat = "d MMM HH:mm"; 2771 } 2772 solDataStore.removeRows(0, solDataStore.getNumberOfRows()); 2773 solDataStore.addRows(solRows); 2774 var options = { 2775 interpolateNulls: "false", 2776 chartArea: { 2777 width: "85%", 2778 height: "73%", 2779 }, 2780 width: "100%", 2781 height: "300", 2782 hAxis: { 2783 gridlines: { 2784 color: "#ddd", 2785 count: 10, 2786 }, 2787 format: dformat, 2788 textStyle: { 2789 fontName: "Open Sans", 2790 fontSize: 11, 2791 }, 2792 titleTextStyle: { 2793 color: "#ddd", 2794 }, 2795 }, 2796 vAxis: { 2797 gridlines: { 2798 color: "#eee", 2799 count: 6, 2800 }, 2801 textStyle: { 2802 fontName: "Open Sans", 2803 fontSize: 11, 2804 }, 2805 }, 2806 legend: { 2807 position: "top", 2808 textStyle: { 2809 fontName: "Open Sans", 2810 fontSize: 12, 2811 }, 2812 alignment: "center", 2813 }, 2814 colors: ["#FDB813"], 2815 }; 2816 solChart.draw(solDataStore, options); 2817} 2818 2819function drawWindDirectionChart() { 2820 var dformat = "d MMM"; // Simplify axis as requested by RPR 08.03.17 2821 if (wddataRows.length < 144) { 2822 dformat = "HH:mm"; 2823 } 2824 if (wddataRows.length > 145 || wddataRows.length < 288) { 2825 dformat = "d MMM HH:mm"; 2826 } 2827 windDirectionDataStore.removeRows( 2828 0, 2829 windDirectionDataStore.getNumberOfRows() 2830 ); 2831 windDirectionDataStore.addRows(wddataRows); 2832 var options = { 2833 interpolateNulls: false, 2834 chartArea: { 2835 width: "85%", 2836 height: "73%", 2837 }, 2838 width: "100%", 2839 height: "300", 2840 colors: ["purple"], 2841 hAxis: { 2842 gridlines: { 2843 color: "#ddd", 2844 count: 10, 2845 }, 2846 format: dformat, 2847 textStyle: { 2848 fontName: "Open Sans", 2849 fontSize: 11, 2850 }, 2851 titleTextStyle: { 2852 color: "#ddd", 2853 }, 2854 }, 2855 vAxis: { 2856 format: "0", 2857 viewWindowMode: "explicit", 2858 viewWindow: { 2859 max: 0, 2860 min: 360, 2861 }, 2862 gridlines: { 2863 color: "#eee", 2864 count: 10, 2865 }, 2866 textStyle: { 2867 fontName: "Open Sans", 2868 fontSize: 11, 2869 }, 2870 ticks: [ 2871 { 2872 v: 0, 2873 f: "N", 2874 }, 2875 { 2876 v: 45, 2877 f: "NE", 2878 }, 2879 { 2880 v: 90, 2881 f: "E", 2882 }, 2883 { 2884 v: 135, 2885 f: "SE", 2886 }, 2887 { 2888 v: 180, 2889 f: "S", 2890 }, 2891 { 2892 v: 225, 2893 f: "SW", 2894 }, 2895 { 2896 v: 270, 2897 f: "W", 2898 }, 2899 { 2900 v: 315, 2901 f: "NW", 2902 }, 2903 { 2904 v: 360, 2905 f: "N", 2906 }, 2907 ], 2908 }, 2909 legend: { 2910 position: "top", 2911 textStyle: { 2912 fontName: "Open Sans", 2913 fontSize: 11, 2914 }, 2915 alignment: "center", 2916 }, 2917 }; 2918 windDirectionChart.draw(windDirectionDataStore, options); 2919} 2920 2921// Add custom messages for particular location via if 2922 2923if (window.WF && WF.i18n && WF.i18n.onChange) { 2924 WF.i18n.onChange(function () { try { if (typeof drawCharts === "function") drawCharts(); } catch (e) {} }); 2925}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.