diff --git a/modules/default/calendar/README.md b/modules/default/calendar/README.md
index 00378263..d5a9f122 100644
--- a/modules/default/calendar/README.md
+++ b/modules/default/calendar/README.md
@@ -120,6 +120,24 @@ The following properties can be configured:
Default value: false
+
+ timeFormat |
+ How to display the time on calendar events
+
+ Possible values: relative or absolute
+ Default value: relative
+ |
+
+
+ urgency |
+ When .timeFormat is set to absolute , this option allows you to set a specific number of days from now to display as relative.
+ For example, if urgency is set to 5 , any events happening within those 5 days will be displayed as 'in x days'.
+ Any events outside of the urgency range will be displayed with an absolute date.
+
+ Possible values: positive integer for example 5 (for 5 days)
+ Default value: 0
+ |
+
diff --git a/modules/default/calendar/calendar.js b/modules/default/calendar/calendar.js
index 2d494499..4f65bf6a 100644
--- a/modules/default/calendar/calendar.js
+++ b/modules/default/calendar/calendar.js
@@ -21,6 +21,8 @@ Module.register("calendar",{
fetchInterval: 5 * 60 * 1000, // Update every 5 minutes.
animationSpeed: 2000,
fade: true,
+ urgency: 7,
+ timeFormat: "relative",
fadePoint: 0.25, // Start on 1/4th of the list.
calendars: [
{
@@ -139,21 +141,47 @@ Module.register("calendar",{
var timeWrapper = document.createElement("td");
//console.log(event.today);
var now = new Date();
+ var one_hour = 1000 * 60 * 60;
+ var one_day = one_hour * 24;
if (event.fullDayEvent) {
if (event.today) {
timeWrapper.innerHTML = this.translate("TODAY");
- } else if (event.startDate - now < 24 * 60 * 60 * 1000 && event.startDate - now > 0) {
+ } else if (event.startDate - now < 24 * one_hour && event.startDate - now > 0) {
timeWrapper.innerHTML = this.translate("TOMORROW");
} else {
- timeWrapper.innerHTML = moment(event.startDate,"x").fromNow();
+ if (this.config.timeFormat === "absolute") {
+ if ((this.config.urgency > 1) && (event.startDate - now < (this.config.urgency * one_day))) {
+ // This event falls within the config.urgency time frame (in days) that the user has set
+ timeWrapper.innerHTML = moment(event.startDate, "x").fromNow();
+ } else {
+ timeWrapper.innerHTML = moment(event.startDate, "x").format("MMM Do");
+ }
+ } else {
+ timeWrapper.innerHTML = moment(event.startDate, "x").fromNow();
+ }
}
} else {
if (event.startDate >= new Date()) {
- if (event.startDate - now > 48 * 60 * 60 * 1000) {
- // if the event is no longer than 2 days away, display the absolute time.
- timeWrapper.innerHTML = moment(event.startDate,"x").fromNow();
+ if (event.startDate - now < 2 * one_day) {
+ // This event is within the next 48 hours (2 days)
+ if (event.startDate - now < 6 * one_hour) {
+ // If event is within 6 hour, display 'in xxx' time format
+ timeWrapper.innerHTML = moment(event.startDate, "x").fromNow();
+ } else {
+ // Otherwise just say 'Today/Tomorrow at such-n-such time'
+ timeWrapper.innerHTML = moment(event.startDate, "x").calendar();
+ }
} else {
- timeWrapper.innerHTML = moment(event.startDate,"x").calendar();
+ if (this.config.timeFormat === "absolute") {
+ if ((this.config.urgency > 1) && (event.startDate - now < (this.config.urgency * one_day))) {
+ // This event falls within the config.urgency time frame (in days) that the user has set
+ timeWrapper.innerHTML = moment(event.startDate, "x").fromNow();
+ } else {
+ timeWrapper.innerHTML = moment(event.startDate, "x").format("MMM Do");
+ }
+ } else {
+ timeWrapper.innerHTML = moment(event.startDate, "x").fromNow();
+ }
}
} else {
timeWrapper.innerHTML = this.translate("RUNNING") + ' ' + moment(event.endDate,"x").fromNow(true);