From 9f9c8e63efc15da165ecced98afc0101fb91c768 Mon Sep 17 00:00:00 2001 From: Philip Schell Date: Tue, 20 Aug 2019 13:08:56 +0200 Subject: [PATCH] #24 Add information about weather/warning --- CHANGELOG | 3 ++ Lora-Map/Lora-Map.csproj | 6 +++ Lora-Map/Model/WeatherWarnings.cs | 8 ++-- Lora-Map/Server.cs | 2 +- Lora-Map/resources/css/global.css | 54 ++++++++++++++++++++-- Lora-Map/resources/css/icons/storm-ac.png | Bin 0 -> 1681 bytes Lora-Map/resources/css/icons/storm-in.png | Bin 0 -> 1171 bytes Lora-Map/resources/index.html | 4 ++ Lora-Map/resources/js/functions.js | 19 ++++++-- Lora-Map/resources/js/menu.js | 19 ++++++++ 10 files changed, 100 insertions(+), 15 deletions(-) create mode 100644 Lora-Map/resources/css/icons/storm-ac.png create mode 100644 Lora-Map/resources/css/icons/storm-in.png diff --git a/CHANGELOG b/CHANGELOG index 5f72f57..f11818b 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -4,12 +4,15 @@ ### New Features * Add setting model to code * #19 grid automatisch generieren +* #24 Add information about weather/warning ### Bugfixes * Add Correct Dispose Handling +* TimeCalculation now handle negative values correct ### Changes * Refactoring of all JS * Make only one request per second instead of four per AJAX * Refactoring adminpannel and add settings.json +* New function in TimeCalculation, so you can not have negative Timespans ## 1.2.8 ### New Features diff --git a/Lora-Map/Lora-Map.csproj b/Lora-Map/Lora-Map.csproj index 84ffda1..80367c7 100644 --- a/Lora-Map/Lora-Map.csproj +++ b/Lora-Map/Lora-Map.csproj @@ -107,6 +107,12 @@ PreserveNewest + + PreserveNewest + + + PreserveNewest + PreserveNewest diff --git a/Lora-Map/Model/WeatherWarnings.cs b/Lora-Map/Model/WeatherWarnings.cs index 9eb780b..4b855bf 100644 --- a/Lora-Map/Model/WeatherWarnings.cs +++ b/Lora-Map/Model/WeatherWarnings.cs @@ -48,18 +48,18 @@ namespace Fraunhofer.Fit.IoT.LoraMap.Model { public Warning(JsonData warning) { this.Id = warning["id"].ToString(); this.From = warning["properties"]["SENT"].ToString(); - this.Expires = warning["properties"]["EXPIRES"].ToString(); + this.To = warning["properties"]["EXPIRES"].ToString(); this.Location = warning["properties"]["NAME"].ToString(); this.Type = warning["properties"]["EVENT"].ToString(); - this.Level = warning["properties"]["SEVERITY"].ToString(); + this.Level = warning["properties"]["SEVERITY"].ToString().ToLower(); this.Headline = warning["properties"]["HEADLINE"].ToString(); this.Body = warning["properties"]["DESCRIPTION"].ToString(); - this.Instructions = warning["properties"]["INSTRUCTION"].ToString(); + this.Instructions = warning["properties"]["INSTRUCTION"] != null ? warning["properties"]["INSTRUCTION"].ToString() : ""; } public String Id { get; } public String From { get; } - public String Expires { get; } + public String To { get; } public String Location { get; } public String Type { get; } public String Level { get; } diff --git a/Lora-Map/Server.cs b/Lora-Map/Server.cs index 405ddf9..33be813 100644 --- a/Lora-Map/Server.cs +++ b/Lora-Map/Server.cs @@ -122,7 +122,7 @@ namespace Fraunhofer.Fit.IoT.LoraMap { { "panic", this.alarms }, { "cameracount", this.cameras }, { "crowdcount", this.crowds }, - { "weatherwarnings", this.weather } + { "weatherwarnings", this.weather.Warnungen } }, cont); } else if (cont.Request.Url.PathAndQuery.StartsWith("/get60000")) { return SendJsonResponse(new Dictionary() { diff --git a/Lora-Map/resources/css/global.css b/Lora-Map/resources/css/global.css index 889abbb..6015c47 100644 --- a/Lora-Map/resources/css/global.css +++ b/Lora-Map/resources/css/global.css @@ -65,6 +65,12 @@ object { #menucollumn .info { background-image: url("icons/information.png"); } +#menucollumn .weather { + background-image: url("icons/storm-in.png"); +} +#menucollumn .weather.ac { + background-image: url("icons/storm-ac.png"); +} #pannels { position: absolute; @@ -87,7 +93,7 @@ object { display: none; } #pannels #pannels_pos .item { - margin: 4px; +margin: 4px; } #pannels #pannels_pos .item .color { float: left; @@ -101,10 +107,10 @@ object { margin-right: 5px; } #pannels #pannels_pos .item .icon img { - height: 40px; - width: 40px; - margin-left: 3px; -} + height: 40px; + width: 40px; + margin-left: 3px; + } #pannels #pannels_pos .item .line1 .name { font-weight: bold; } @@ -203,6 +209,44 @@ object { margin-left: 70px; } +#pannels #pannels_weather { + margin: 5px; +} +#pannels #pannels_weather h1 { + margin: 0; + font-size: 20px; + text-align: center; +} +#pannels #pannels_weather .alertitem { + padding: 5px; +} +#pannels #pannels_weather .alertitem.minor { + background-color: #ffeb3b; +} +#pannels #pannels_weather .alertitem.moderate { + background-color: #fb8c00; +} +#pannels #pannels_weather .alertitem.severe { + background-color: #e53935; +} +#pannels #pannels_weather .alertitem.extreme { + background-color: #880e4f; +} +#pannels #pannels_weather .alertitem .head { + font-weight: bold; + display: block; + font-size: 14px; +} +#pannels #pannels_weather .alertitem .ort { + display: block; + text-align: right; + margin-bottom: 10px; +} +#pannels #pannels_weather .alertitem .text { + display: block; + margin-bottom: 10px; +} + #overlays #cameracount { position: absolute; top: 10px; diff --git a/Lora-Map/resources/css/icons/storm-ac.png b/Lora-Map/resources/css/icons/storm-ac.png new file mode 100644 index 0000000000000000000000000000000000000000..4cbbae61408addf3c4e7c6f95660ebe59eb2c91c GIT binary patch literal 1681 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 literal 0 HcmV?d00001 diff --git a/Lora-Map/resources/index.html b/Lora-Map/resources/index.html index d4ca38a..f78e38b 100644 --- a/Lora-Map/resources/index.html +++ b/Lora-Map/resources/index.html @@ -11,6 +11,7 @@
@@ -19,6 +20,9 @@
+
+

Keine Gefahren

+
Teste Login...
diff --git a/Lora-Map/resources/js/functions.js b/Lora-Map/resources/js/functions.js index 9d21f87..f4b2652 100644 --- a/Lora-Map/resources/js/functions.js +++ b/Lora-Map/resources/js/functions.js @@ -28,6 +28,7 @@ MarkerObject._ParseAJAXPanic(json["panic"]); OverlayObject._ParseAJAXCount(json["cameracount"]); OverlayObject._ParseAJAXDensity(json["crowdcount"]); + MenuObject._ParseAJAXWeatherAlerts(json["weatherwarnings"]); } }; get1000.open("GET", "/get1000", true); @@ -52,21 +53,29 @@ } }, TimeCalculation: function (timestr, type) { - if (type === "diffraw" || type === "difftext") { + if (type === "diffraw" || type === "difftext" || type === "difftextn") { var diff = Math.round((Date.now() - Date.parse(timestr) - this._internalTimeOffset) / 1000); if (type === "diffraw") { return diff; } + if (type === "difftextn" && diff < 0) { + diff = diff * -1; + } + var isneg = false; + if (diff < 0) { + isneg = true; + diff = diff * -1; + } if (diff < 60) { - return diff + " s"; + return (isneg ? "-" : "") + diff + " s"; } if (diff < 60 * 60) { - return Math.floor(diff / 60) + " m"; + return (isneg ? "-" : "") + Math.floor(diff / 60) + " m"; } if (diff < 60 * 60 * 24) { - return Math.floor(diff / (60 * 60)) + " h"; + return (isneg ? "-" : "") + Math.floor(diff / (60 * 60)) + " h"; } - return Math.floor(diff / (60 * 60 * 24)) + " d"; + return (isneg ? "-" : "") + Math.floor(diff / (60 * 60 * 24)) + " d"; } else if (type === "str") { var date = new Date(Date.parse(timestr) + this._internalTimeOffset); var str = date.toLocaleString(); diff --git a/Lora-Map/resources/js/menu.js b/Lora-Map/resources/js/menu.js index 98bd21e..4140b23 100644 --- a/Lora-Map/resources/js/menu.js +++ b/Lora-Map/resources/js/menu.js @@ -163,5 +163,24 @@ }; testadmin.open("GET", "/admin", true); testadmin.send(); + }, + _ParseAJAXWeatherAlerts: function (json) { + if (json.length > 0) { + var html = ""; + for (var i = 0; i < json.length; i++) { + var walert = json[i]; + html += "
" + + "" + walert.Headline + "" + + "" + walert.Location + "" + + "" + walert.Body + (walert.Instructions != "" ? "

" + walert.Instructions : "") + "
" + + "Von: vor " + FunctionsObject.TimeCalculation(walert.From, "difftext") + " Bis: in " + FunctionsObject.TimeCalculation(walert.To, "difftextn") + "" + + "
"; + } + document.getElementById("pannels_weather").innerHTML = html; + document.getElementById("menucol_weather_icon").className = "weather ac"; + } else { + document.getElementById("pannels_weather").innerHTML = "

Keine Gefahren

"; + document.getElementById("menucol_weather_icon").className = "weather"; + } } }.Start(); \ No newline at end of file