From c580a39d49b2701a4f83e921751b7746aebae0fd Mon Sep 17 00:00:00 2001 From: Joffrey JAFFEUX Date: Mon, 16 Jul 2018 01:04:50 +0200 Subject: [PATCH] FIX: infers time from tz creator to ensure day shown is the one expected --- .../javascripts/discourse-local-dates.js | 14 ++++-- .../discourse-local-dates-create-form.js.es6 | 45 +++++++++++-------- 2 files changed, 37 insertions(+), 22 deletions(-) diff --git a/plugins/discourse-local-dates/assets/javascripts/discourse-local-dates.js b/plugins/discourse-local-dates/assets/javascripts/discourse-local-dates.js index c68c51a4617..9870b99b227 100644 --- a/plugins/discourse-local-dates/assets/javascripts/discourse-local-dates.js +++ b/plugins/discourse-local-dates/assets/javascripts/discourse-local-dates.js @@ -11,7 +11,10 @@ clearTimeout(this.timeout); } - var relativeTime = moment.utc(options.date + " " + options.time, "YYYY-MM-DD HH:mm"); + var relativeTime = moment.utc( + options.date + " " + options.time, + "YYYY-MM-DD HH:mm" + ); if (options.recurring && relativeTime < moment().utc()) { var parts = options.recurring.split("."); @@ -24,7 +27,7 @@ } var previews = options.timezones.split("|").map(function(timezone) { - var dateTime = relativeTime.tz(timezone).format(options.format); + var dateTime = relativeTime.tz(timezone).format("LLL"); var timezoneParts = _formatTimezone(timezone); if (dateTime.match(/TZ/)) { @@ -43,10 +46,13 @@ var html = ""; html += ""; - html += relativeTime.replace("TZ", _formatTimezone(moment.tz.guess()).join(": ")); + html += relativeTime.replace( + "TZ", + _formatTimezone(moment.tz.guess()).join(": ") + ); html += ""; - var joinedPreviews = previews.join("\n"); + var joinedPreviews = previews.join(" – "); $element .html(html) diff --git a/plugins/discourse-local-dates/assets/javascripts/discourse/components/discourse-local-dates-create-form.js.es6 b/plugins/discourse-local-dates/assets/javascripts/discourse/components/discourse-local-dates-create-form.js.es6 index c833c81a1bc..187e85afbb2 100644 --- a/plugins/discourse-local-dates/assets/javascripts/discourse/components/discourse-local-dates-create-form.js.es6 +++ b/plugins/discourse-local-dates/assets/javascripts/discourse/components/discourse-local-dates-create-form.js.es6 @@ -28,7 +28,9 @@ export default Ember.Component.extend({ ); this.set( "formats", - (this.siteSettings.discourse_local_dates_default_formats || "").split("|") + (this.siteSettings.discourse_local_dates_default_formats || "") + .split("|") + .filter(f => f) ); }, @@ -94,20 +96,28 @@ export default Ember.Component.extend({ const recurring = this.get("recurring"); const format = this.get("format"); const timezones = this.get("timezones"); + const timeInferred = time ? false : true; + const toTimeInferred = toTime ? false : true; let dateTime; - - if (time) { - dateTime = moment(`${date} ${time}`, this.dateTimeFormat).utc(); + if (!timeInferred) { + dateTime = moment + .tz(`${date} ${time}`, this.get("currentUserTimezone")) + .utc(); } else { - dateTime = moment(date, this.dateFormat).startOf("day"); + dateTime = moment.tz(date, this.get("currentUserTimezone")).utc(); } let toDateTime; - if (toTime) { - toDateTime = moment(`${toDate} ${toTime}`, this.dateTimeFormat).utc(); + if (!toTimeInferred) { + toDateTime = moment + .tz(`${toDate} ${toTime}`, this.get("currentUserTimezone")) + .utc(); } else { - toDateTime = moment(toDate, this.dateFormat).endOf("day"); + toDateTime = moment + .tz(toDate, this.get("currentUserTimezone")) + .endOf("day") + .utc(); } let config = { @@ -118,19 +128,18 @@ export default Ember.Component.extend({ timezones }; - if (time) { - config.time = dateTime.format(this.timeFormat); - } + config.time = dateTime.format(this.timeFormat); + config.toTime = toDateTime.format(this.timeFormat); if (toDate) { config.toDate = toDateTime.format(this.dateFormat); } - if (toTime) { - config.toTime = toDateTime.format(this.timeFormat); - } - - if (!time && !toTime && this.get("formats").includes(format)) { + if ( + timeInferred && + toTimeInferred && + this.get("formats").includes(format) + ) { config.format = "LL"; } @@ -139,8 +148,8 @@ export default Ember.Component.extend({ } if ( - time && - toTime && + !timeInferred && + !toTimeInferred && date === moment().format(this.dateFormat) && date === toDate && this.get("formats").includes(format)