diff --git a/modules/default/weather/forecast.njk b/modules/default/weather/forecast.njk index 556a98ff..d03d3018 100644 --- a/modules/default/weather/forecast.njk +++ b/modules/default/weather/forecast.njk @@ -1,7 +1,10 @@ {% if forecast %} + {% set numSteps = forecast | calcNumSteps %} + {% set currentStep = 0 %} + {% set forecast = forecast.slice(0, numSteps) %} {% for f in forecast %} - + {% endif %} + {% set currentStep = currentStep + 1 %} {% endfor %}
{{ f.date.format('ddd') }} @@ -16,6 +19,7 @@
{% else %} diff --git a/modules/default/weather/weather.js b/modules/default/weather/weather.js index 52e9cfee..818bc40a 100644 --- a/modules/default/weather/weather.js +++ b/modules/default/weather/weather.js @@ -33,6 +33,9 @@ Module.register("weather",{ decimalSymbol: ".", showIndoorTemperature: false, showIndoorHumidity: false, + maxNumberOfDays: 3, + fade: true, + fadePoint: 0.25, // Start on 1/4th of the list. initialLoadDelay: 0, // 0 seconds delay retryDelay: 2500, @@ -198,7 +201,7 @@ Module.register("weather",{ } } } else if (type === "rain") { - if (isNaN(value)) { + if (isNaN(value) || value === 0) { value = ""; } else { value = `${value.toFixed(2)} ${this.config.units === "imperial" ? "in" : "mm"}`; @@ -217,5 +220,26 @@ Module.register("weather",{ this.nunjucksEnvironment().addFilter("decimalSymbol", function(value) { return value.replace(/\./g, this.config.decimalSymbol); }.bind(this)); + + this.nunjucksEnvironment().addFilter("calcNumSteps", function(forecast) { + return Math.min(forecast.length, this.config.maxNumberOfDays); + }.bind(this)); + + this.nunjucksEnvironment().addFilter("opacity", function(currentStep, numSteps) { + if (this.config.fade && this.config.fadePoint < 1) { + if (this.config.fadePoint < 0) { + this.config.fadePoint = 0; + } + var startingPoint = numSteps * this.config.fadePoint; + var numFadesteps = numSteps - startingPoint; + if (currentStep >= startingPoint) { + return 1 - (currentStep - startingPoint) / numFadesteps; + } else { + return 1; + } + } else { + return 1; + } + }.bind(this)); } });