diff --git a/MMM-circleCountdown.css b/MMM-circleCountdown.css new file mode 100644 index 0000000..11b5881 --- /dev/null +++ b/MMM-circleCountdown.css @@ -0,0 +1,11 @@ +@font-face{ + font-family: Roboto; + font-style: normal; + font-weight: 100; + src: + local("Roboto Thin"), + local("Roboto-Thin"), + url("node_modules/roboto-fontface/fonts/roboto/Roboto-Thin.woff2") format("woff2"), + url("node_modules/roboto-fontface/fonts/roboto/Roboto-Thin.woff") format("woff"), + url("node_modules/roboto-fontface/fonts/roboto/Roboto-Thin.ttf") format("truetype"); +} \ No newline at end of file diff --git a/MMM-circleCountdown.js b/MMM-circleCountdown.js new file mode 100644 index 0000000..a8d3a27 --- /dev/null +++ b/MMM-circleCountdown.js @@ -0,0 +1,156 @@ +Module.register("MMM-circleCountdown",{ + defaults: { + event1: "New Millenium:", + date1: "3000-01-01", + start1: "30", + farbe1: "white", + event2: "Sylvester 2999:", + date2: "2999-12-31", + start2: "1000", + farbe2: "blue" + + }, + + start: function() { + /*var self = this; + setInterval(function() { + self.updateDom(); // no speed defined, so it updates instantly. + }, 1000*60*10); //perform every 10 minutes*/ + this.config = Object.assign({}, this.defaults, this.config); + Log.info("Starting module: " + this.name); + + }, + getStyles: function () { + return ["MMM-circleCountdown.css"] + }, + getDom: function() { + + + var today = new Date(Date.now()); + var target = new Date(this.config.date1); + var timeDiff = target.getTime() - today.getTime(); + var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24)); + + if (diffDays < parseInt(this.config.start1)){ + var teilKreis = 360 / parseFloat(this.config.start1) * diffDays; + }else{ + var teilKreis = 360+90; + } + + + var wrapper = document.createElement("div"); + var teilKreisT = teilKreis - 90; + + // Create canvas + const chartE1 = document.createElement("canvas"); + chartE1.width = 400; + chartE1.height = 150; + //chartE1.style="border:5px solid #ffffff;"; //REMOVE LATER + + var ctx = chartE1.getContext("2d"); + + + ctx.font = "20px Arial"; + //ctx.font = "20px Roboto"; + ctx.fillStyle = "white"; + ctx.textAlign = "center"; + + var textWidth = ctx.measureText(this.config.event1).width; + var textWidth2 = ctx.measureText(this.config.event2).width; + if(textWidth + textWidth > 380){ + this.config.event1 ="one or both"; + this.config.event2 ="text to long"; + textWidth = ctx.measureText(this.config.event1).width; + textWidth2 = ctx.measureText(this.config.event2).width; + } + + + var x = 60; + if((textWidth + 10) / 2> x){ + x = (textWidth + 10) / 2; + } + var y = 80; + var radius = 40; + + //Inner cicrle + ctx.lineWidth = 2; + ctx.strokeStyle = '#999999'; + + + + var anticlockwise = true; // clockwise or anticlockwise + //ctx.arc(x, y, radius, startAngle, endAngle, false); + ctx.beginPath(); + ctx.arc(x, y, radius, 0, Math.PI * 2, false); + ctx.stroke(); + ctx.closePath(); + + + //Main circle + + ctx.strokeStyle = this.config.farbe1; + ctx.lineWidth = 8; + //ctx.arc(x, y, radius, startAngle, endAngle, false); + ctx.beginPath(); + ctx.arc(x, y, radius, (Math.PI /180) * -90,(Math.PI /180) *(teilKreis-90) , false); + ctx.stroke(); + + ctx.fillText(this.config.event1,x,y-radius-10); + ctx.fillText(diffDays,x,y+5); + ctx.closePath(); + + //------------------------ + // Countdown 2 + //------------------------ + + var today = new Date(Date.now()); + var target = new Date(this.config.date2); + var timeDiff = target.getTime() - today.getTime(); + var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24)); + + if (diffDays < parseInt(this.config.start2)){ + var teilKreis = 360 / parseFloat(this.config.start2) * diffDays; + }else{ + var teilKreis = 360+90; + } + + var x = x + textWidth/2 + 70; + if((textWidth + textWidth2 /2 + 20) > x){ + x = textWidth + textWidth2 /2 + 40; + } + + + //Inner cicrle 2 + ctx.lineWidth = 2; + ctx.strokeStyle = '#999999'; + + + + var anticlockwise = true; // clockwise or anticlockwise + //ctx.arc(x, y, radius, startAngle, endAngle, false); + ctx.beginPath(); + ctx.arc(x, y, radius, 0, Math.PI * 2, false); + ctx.stroke(); + ctx.closePath(); + + + + //Main circle 2 + + ctx.strokeStyle = this.config.farbe2; + ctx.lineWidth = 8; + //ctx.arc(x, y, radius, startAngle, endAngle, false); + ctx.beginPath(); + ctx.arc(x, y, radius, (Math.PI /180) * -90,(Math.PI /180) *(teilKreis-90) , false); + ctx.stroke(); + ctx.closePath(); + + ctx.fillText(this.config.event2,x,y-radius-10); + ctx.fillText(diffDays,x,y+5); + + //ctx.closePath(); + + wrapper.appendChild(chartE1); + + return wrapper; + } \ No newline at end of file