diff --git a/modules/default/clock/README.md b/modules/default/clock/README.md
index 8808825c..1e13333e 100644
--- a/modules/default/clock/README.md
+++ b/modules/default/clock/README.md
@@ -66,5 +66,33 @@ The following properties can be configured:
Default value: false
+
+ displayType |
+ Display a digital clock, analog clock, or both together.
+ Possible values: digital , analog , or both
+ Default value: digital
+ |
+
+
+ analogSize |
+ **Specific to the analog clock** Defines how large the analog display is.
+ Possible values: A positive number of pixels
+ Default value: 200px
+ |
+
+
+ analogFace |
+ **Specific to the analog clock** Specifies which clock face to use.
+ Possible values: false for a default border, none for no face or border, or face-### (where ### is currently a value between 001 and 008, inclusive)
+ Default value: false
+ |
+
+
+ analogPlacement |
+ **Specific to the analog clock** *(requires displayType set to 'both' )* Specifies where the analog clock is in relation to the digital clock
+ Possible values: top , right , bottom , or left
+ Default value: bottom
+ |
+
diff --git a/modules/default/clock/clock.js b/modules/default/clock/clock.js
index 85932567..ec9b22d7 100644
--- a/modules/default/clock/clock.js
+++ b/modules/default/clock/clock.js
@@ -12,27 +12,43 @@ Module.register("clock",{
displaySeconds: true,
showPeriod: true,
showPeriodUpper: false,
- clockBold: false
+ clockBold: false,
+ displayType: 'digital', // options: digital, analog, both
+ /* specific to the analog clock */
+ analogSize: '200px',
+ analogFace: false,
+ analogPlacement: 'bottom',
},
// Define required scripts.
getScripts: function() {
return ["moment.js"];
},
+ // Define styles.
+ getStyles: function() {
+ return ["clock_styles.css"];
+ },
// Define start sequence.
start: function() {
Log.info("Starting module: " + this.name);
+
// Schedule update interval.
var self = this;
setInterval(function() {
self.updateDom();
}, 1000);
+
// Set locale.
moment.locale(config.language);
},
// Override dom generator.
getDom: function() {
- // Create wrappers.
+
var wrapper = document.createElement("div");
+
+ /************************************
+ * Create wrappers for DIGITAL clock
+ */
+
var dateWrapper = document.createElement("div");
var timeWrapper = document.createElement("div");
var secondsWrapper = document.createElement("sup");
@@ -72,15 +88,122 @@ Module.register("clock",{
} else {
periodWrapper.innerHTML = moment().format("a");
}
- // Combine wrappers.
- wrapper.appendChild(dateWrapper);
- wrapper.appendChild(timeWrapper);
if (this.config.displaySeconds) {
timeWrapper.appendChild(secondsWrapper);
}
if (this.config.showPeriod && this.config.timeFormat !== 24) {
timeWrapper.appendChild(periodWrapper);
}
+ if (this.config.displaySeconds) {
+ timeWrapper.appendChild(secondsWrapper);
+ }
+ if (this.config.showPeriod && this.config.timeFormat !== 24) {
+ timeWrapper.appendChild(periodWrapper);
+ }
+
+ /****************************************************************
+ * Create wrappers for ANALOG clock, only if specified in config
+ */
+
+ if (this.config.displayType !== 'digital') {
+ // If it isn't 'digital', then an 'analog' clock was also requested
+ var now = moment(),
+ second = now.seconds() * 6,
+ minute = now.minute() * 6 + second / 60,
+ hour = ((now.hours() % 12) / 12) * 360 + 90 + minute / 12;
+
+ // Create wrappers
+
+ var wrapper = document.createElement("div");
+ var clockCircle = document.createElement("div");
+ clockCircle.className = "clockCircle";
+ clockCircle.style.width = this.config.analogSize;
+ clockCircle.style.height = this.config.analogSize;
+
+ if ((this.config.analogFace != '' || this.config.analogFace != false) && this.config.analogFace !== 'none') {
+ clockCircle.style.background = "url("+ this.data.path + "/faces/" + this.config.analogFace + ".png)"
+ clockCircle.style.backgroundSize = "100%";
+ } else if (this.config.analogFace != 'none') {
+ clockCircle.style.border = "5px double white";
+ }
+ var clockFace = document.createElement("div");
+ clockFace.className = "clockFace";
+
+ var clockHour = document.createElement("div");
+ clockHour.id = "clockHour";
+ clockHour.style.transform = "rotate(" + hour + "deg)";
+ clockHour.className = "clockHour";
+ var clockMinute = document.createElement("div");
+ clockMinute.id = "clockMinute";
+ clockMinute.style.transform = "rotate(" + minute + "deg)";
+ clockMinute.className = "clockMinute";
+ var clockSecond = document.createElement("div");
+ clockSecond.id = "clockSecond";
+ clockSecond.style.transform = "rotate(" + second + "deg)";
+ clockSecond.className = "clockSecond";
+
+ // Combine analog wrappers
+ clockFace.appendChild(clockHour);
+ clockFace.appendChild(clockMinute);
+ clockFace.appendChild(clockSecond);
+ clockCircle.appendChild(clockFace);
+ }
+
+ /*******************************************
+ * Combine wrappers, check for .displayType
+ */
+
+ if (this.config.displayType === 'digital') {
+ // Display only a digital clock
+ wrapper.appendChild(dateWrapper);
+ wrapper.appendChild(timeWrapper);
+ } else if (this.config.displayType === 'analog') {
+ // Display only an analog clock
+ dateWrapper.style.textAlign = "center";
+ dateWrapper.style.paddingBottom = "10px";
+ wrapper.appendChild(dateWrapper);
+ wrapper.appendChild(clockCircle);
+ } else {
+ // Both clocks have been configured, check position
+ var placement = this.config.analogPlacement;
+
+ analogWrapper = document.createElement("div");
+ analogWrapper.id = "analog";
+ analogWrapper.style.cssFloat = "none";
+ analogWrapper.appendChild(clockCircle);
+ digitalWrapper = document.createElement("div");
+ digitalWrapper.id = "digital";
+ digitalWrapper.style.cssFloat = "none";
+ digitalWrapper.appendChild(dateWrapper);
+ digitalWrapper.appendChild(timeWrapper);
+
+ if (placement === 'left' || placement === 'right') {
+ digitalWrapper.style.display = "inline-block";
+ digitalWrapper.style.verticalAlign = "top";
+ analogWrapper.style.display = "inline-block";
+ if (placement === 'left') {
+ analogWrapper.style.padding = "0 20px 0 0";
+ wrapper.appendChild(analogWrapper);
+ wrapper.appendChild(digitalWrapper);
+ } else {
+ analogWrapper.style.padding = "0 0 0 20px";
+ wrapper.appendChild(digitalWrapper);
+ wrapper.appendChild(analogWrapper);
+ }
+ } else {
+ digitalWrapper.style.textAlign = "center";
+ if (placement === 'top') {
+ analogWrapper.style.padding = "0 0 20px 0";
+ wrapper.appendChild(analogWrapper);
+ wrapper.appendChild(digitalWrapper);
+ } else {
+ analogWrapper.style.padding = "20px 0 0 0";
+ wrapper.appendChild(digitalWrapper);
+ wrapper.appendChild(analogWrapper);
+ }
+ }
+ }
+
// Return the wrapper to the dom.
return wrapper;
}
diff --git a/modules/default/clock/faces/face-001.png b/modules/default/clock/faces/face-001.png
new file mode 100644
index 00000000..562c857c
Binary files /dev/null and b/modules/default/clock/faces/face-001.png differ
diff --git a/modules/default/clock/faces/face-002.png b/modules/default/clock/faces/face-002.png
new file mode 100644
index 00000000..a0b9d909
Binary files /dev/null and b/modules/default/clock/faces/face-002.png differ
diff --git a/modules/default/clock/faces/face-003.png b/modules/default/clock/faces/face-003.png
new file mode 100644
index 00000000..58ebd2b7
Binary files /dev/null and b/modules/default/clock/faces/face-003.png differ
diff --git a/modules/default/clock/faces/face-004.png b/modules/default/clock/faces/face-004.png
new file mode 100644
index 00000000..9b00625c
Binary files /dev/null and b/modules/default/clock/faces/face-004.png differ
diff --git a/modules/default/clock/faces/face-005.png b/modules/default/clock/faces/face-005.png
new file mode 100644
index 00000000..b176513d
Binary files /dev/null and b/modules/default/clock/faces/face-005.png differ
diff --git a/modules/default/clock/faces/face-006.png b/modules/default/clock/faces/face-006.png
new file mode 100644
index 00000000..907ba1d3
Binary files /dev/null and b/modules/default/clock/faces/face-006.png differ
diff --git a/modules/default/clock/faces/face-007.png b/modules/default/clock/faces/face-007.png
new file mode 100644
index 00000000..ceb2fa72
Binary files /dev/null and b/modules/default/clock/faces/face-007.png differ
diff --git a/modules/default/clock/faces/face-008.png b/modules/default/clock/faces/face-008.png
new file mode 100644
index 00000000..b2a3a90c
Binary files /dev/null and b/modules/default/clock/faces/face-008.png differ