diff --git a/VIPSWeb/settings.py b/VIPSWeb/settings.py index c9b565924da3b8ac4a06decfb7d7065d4d572fe4..82b3c51d07f4a6fae87b5d18d07fdf92b613a835 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 27915a66bac343008d5835284f5783a446459c75..9aa3d20a870d2fb16fc7b682442da0d4de2222df 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 869c91385c82ab07dd643391985713b2d0dcaf51..07f1a92f61f484ae2ecad72b40eebf8c206c2131 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 7853faa1a9294c8943b8a038fa3cd5e81db89735..0753c1aed6834b104208f727c51a0bf8e5345d78 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 256940b0e85ab5817a93018d57c9510c416f0f8e..b24922462ba0c1947efedf3e22ac3f5440a71fc6 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>"; }