From dd9723db65d10f84fff7828d7800e861478f9ffa Mon Sep 17 00:00:00 2001 From: Tor-Einar Skog <tor-einar.skog@nibio.no> Date: Mon, 19 Mar 2018 13:13:38 +0100 Subject: [PATCH] Fixing modifications of JSON objects from source (VIPSLogic) --- VIPSWeb/settings.py | 1 + VIPSWeb/static/js/util.js | 30 ++++++++++++++++++++++ VIPSWeb/urls.py | 1 + forecasts/static/forecasts/js/forecasts.js | 15 ++++++----- roughage/static/roughage/js/nutrition.js | 8 +++--- 5 files changed, 45 insertions(+), 10 deletions(-) diff --git a/VIPSWeb/settings.py b/VIPSWeb/settings.py index c9b56592..82b3c51d 100755 --- a/VIPSWeb/settings.py +++ b/VIPSWeb/settings.py @@ -140,6 +140,7 @@ INSTALLED_APPS = ( 'applefruitmoth', 'fusarium', 'security', + 'mock', 'VIPSWeb' ) diff --git a/VIPSWeb/static/js/util.js b/VIPSWeb/static/js/util.js index 27915a66..9aa3d20a 100755 --- a/VIPSWeb/static/js/util.js +++ b/VIPSWeb/static/js/util.js @@ -319,4 +319,34 @@ function getMultipleSelectedValues(list) } } return retVal; +} + +function getJSON(ambiguousVar) +{ + try + { + // Is it a JSON string? + return JSON.parse(ambiguousVar); + } + catch(e) + { + return isDict(ambiguousVar) ? ambiguousVar : null; + } +} + +function isDict(v){ + return typeof v==='object' && v!==null && !(v instanceof Array) && !(v instanceof Date); +} + +function getUnixTimestampFromJSON(ambiguousValue) +{ + var possibleDateObject = new Date(ambiguousValue); + if(possibleDateObject.getTime() === NaN && typeof parseInt(ambiguousValue) === "number") + { + return parseInt(ambiguousValue); + } + else + { + return possibleDateObject.getTime(); + } } \ No newline at end of file diff --git a/VIPSWeb/urls.py b/VIPSWeb/urls.py index 869c9138..07f1a92f 100755 --- a/VIPSWeb/urls.py +++ b/VIPSWeb/urls.py @@ -56,6 +56,7 @@ else: url(r'^security/', include('security.urls', namespace = "security")), url(r'^fusarium/', include('fusarium.urls', namespace = "fusarium")), url(r'^applefruitmoth/', include('applefruitmoth.urls', namespace = "applefruitmoth")), + url(r'^mock/', include('mock.urls', namespace = "mock")), # Uncomment the next line to enable the admin: url(r'^admin/', include(admin.site.urls)), url(r'^tinymce/', include('tinymce.urls')), diff --git a/forecasts/static/forecasts/js/forecasts.js b/forecasts/static/forecasts/js/forecasts.js index 7853faa1..0753c1ae 100755 --- a/forecasts/static/forecasts/js/forecasts.js +++ b/forecasts/static/forecasts/js/forecasts.js @@ -244,8 +244,8 @@ function getWarningStatusPlotBandData(forecastResults) if (forecastResults != null && forecastResults.length >=2) { // Replace with Moment.js - var start = forecastResults[0]["validTimeStart"]; - var end = forecastResults[1]["validTimeStart"]; + var start = getUnixTimestampFromJSON(forecastResults[0]["validTimeStart"]); + var end = getUnixTimestampFromJSON(forecastResults[1]["validTimeStart"]); bandOffset = (end - start) / 2; //console.log("bandOffset=" + bandOffset); @@ -259,13 +259,13 @@ function getWarningStatusPlotBandData(forecastResults) if(plotBand != null) { // Moment.js needed! - plotBand["to"] = forecastResult["validTimeStart"] - bandOffset; + plotBand["to"] = getUnixTimestampFromJSON(forecastResult["validTimeStart"]) - bandOffset; plotBands.push(plotBand); } plotBand = { "color": warningStatuses[forecastResult["warningStatus"]].color, // Moment.js!! - "from" : forecastResult["validTimeStart"] - bandOffset + "from" : getUnixTimestampFromJSON(forecastResult["validTimeStart"]) - bandOffset }; } previousForecastResult = forecastResult; @@ -275,7 +275,7 @@ function getWarningStatusPlotBandData(forecastResults) if(plotBand != null && plotBand["to"] == null) { // Moment.js!!! - plotBand.to = forecastResults[forecastResults.length -1]["validTimeStart"] + bandOffset; + plotBand.to = getUnixTimestampFromJSONforecastResults([forecastResults.length -1]["validTimeStart"]) + bandOffset; plotBands.push(plotBand); } @@ -305,11 +305,12 @@ function getHighChartsSeries(forecastResults, yAxisList, parameterList) for(var i in forecastResults) { var forecastResult = forecastResults[i]; + var allValues = getJSON(forecastResult["allValues"]); for(var j in parameterList) { var parameter = parameterList[j]; - var value = parseFloat(forecastResult["allValues"][parameter.key]); - chartSeries.series[parameter.key].data.push([forecastResult.validTimeStart,value]); + var value = parseFloat(allValues[parameter.key]); + chartSeries.series[parameter.key].data.push([getUnixTimestampFromJSON(forecastResult.validTimeStart),value]); } } diff --git a/roughage/static/roughage/js/nutrition.js b/roughage/static/roughage/js/nutrition.js index 256940b0..b2492246 100755 --- a/roughage/static/roughage/js/nutrition.js +++ b/roughage/static/roughage/js/nutrition.js @@ -193,7 +193,8 @@ var renderNutritionModelResults = function(data,textStatus, jqXHR) for(var i in charts) { var lines = [{key: charts[i].key, type: "spline", color: "red", name: charts[i].name, showInLegend: false, yAxis: 0}]; - if(data[0].keys.indexOf(charts[i].key + normalValueKeySuffix) >= 0) + + if(getJSON(data[0].keys).indexOf(charts[i].key + normalValueKeySuffix) >= 0) { lines.push({key: charts[i].key + normalValueKeySuffix, type: "spline", color: "green", name: charts[i].name + "_NORMAL", showInLegend: true, yAxis: 0}) } @@ -340,7 +341,7 @@ function renderResultTable(tableId, data) { var theTable=document.getElementById(tableId); //console.log(data); - var headingData = data[0].keys; + var headingData = getJSON(data[0].keys); var headerRowHTML = "<thead>" + " <tr>" + " <th>" + gettext("Date") + "</th>"; @@ -355,9 +356,10 @@ function renderResultTable(tableId, data) for(var i=0; i<data.length; i++) { dataRowsHTML += "<tr><td>" + moment.tz(data[i].validTimeStart, "Europe/Oslo").format("YYYY-MM-DD") + "</td>"; + var allValues = getJSON(data[i].allValues); for(var j=0;j<headingData.length;j++) { - dataRowsHTML += "<td>" + data[i].allValues[headingData[j]] + "</td>"; + dataRowsHTML += "<td>" + allValues[headingData[j]] + "</td>"; } dataRowsHTML += "</tr>"; } -- GitLab