Browse Source

Merge pull request #3557 from lindhork/master

Added possibility to specify hours in single digits in 24 hour format
Lauri Ojansivu 4 years ago
parent
commit
d6d40b35a5
2 changed files with 44 additions and 14 deletions
  1. 22 7
      client/components/cards/cardDate.js
  2. 22 7
      client/lib/datepicker.js

+ 22 - 7
client/components/cards/cardDate.js

@@ -1,3 +1,8 @@
+// Helper function to replace HH with H for 24 hours format, because H allows also single-digit hours
+function adjustedTimeFormat() {
+  return moment.localeData().longDateFormat('LT').replace(/HH/i, 'H');
+}
+
 // Edit received, start, due & end dates
 BlazeComponent.extendComponent({
   template() {
@@ -59,7 +64,7 @@ BlazeComponent.extendComponent({
         },
         'keyup .js-time-field'() {
           // parse for localized time format in strict mode
-          const dateMoment = moment(this.find('#time').value, 'LT', true);
+          const dateMoment = moment(this.find('#time').value, adjustedTimeFormat(), true);
           if (dateMoment.isValid()) {
             this.error.set('');
           }
@@ -71,16 +76,26 @@ BlazeComponent.extendComponent({
           const time =
             evt.target.time.value ||
             moment(new Date().setHours(12, 0, 0)).format('LT');
-
+          const newTime = moment(time, adjustedTimeFormat(), true);
+          const newDate = moment(evt.target.date.value, 'L', true);
           const dateString = `${evt.target.date.value} ${time}`;
-          const newDate = moment(dateString, 'L LT', true);
-          if (newDate.isValid()) {
-            this._storeDate(newDate.toDate());
-            Popup.close();
-          } else {
+          const newCompleteDate = moment(dateString, 'L ' + adjustedTimeFormat(), true);
+          if (!newTime.isValid()) {
+            this.error.set('invalid-time');
+            evt.target.time.focus();
+          }
+          if (!newDate.isValid()) {
             this.error.set('invalid-date');
             evt.target.date.focus();
           }
+          if (newCompleteDate.isValid()) {
+            this._storeDate(newCompleteDate.toDate());
+            Popup.close();
+          } else {
+            if (!this.error){
+              this.error.set('invalid');
+            }
+          }
         },
         'click .js-delete-date'(evt) {
           evt.preventDefault();

+ 22 - 7
client/lib/datepicker.js

@@ -1,3 +1,8 @@
+// Helper function to replace HH with H for 24 hours format, because H allows also single-digit hours
+function adjustedTimeFormat() {
+  return moment.localeData().longDateFormat('LT').replace(/HH/i, 'H');
+}
+
 DatePicker = BlazeComponent.extendComponent({
   template() {
     return 'datepicker';
@@ -77,7 +82,7 @@ DatePicker = BlazeComponent.extendComponent({
         },
         'keyup .js-time-field'() {
           // parse for localized time format in strict mode
-          const dateMoment = moment(this.find('#time').value, 'LT', true);
+          const dateMoment = moment(this.find('#time').value, adjustedTimeFormat(), true);
           if (dateMoment.isValid()) {
             this.error.set('');
           }
@@ -89,16 +94,26 @@ DatePicker = BlazeComponent.extendComponent({
           const time =
             evt.target.time.value ||
             moment(new Date().setHours(12, 0, 0)).format('LT');
-
+          const newTime = moment(time, adjustedTimeFormat(), true);
+          const newDate = moment(evt.target.date.value, 'L', true);
           const dateString = `${evt.target.date.value} ${time}`;
-          const newDate = moment(dateString, 'L LT', true);
-          if (newDate.isValid()) {
-            this._storeDate(newDate.toDate());
-            Popup.close();
-          } else {
+          const newCompleteDate = moment(dateString, 'L ' + adjustedTimeFormat(), true);
+          if (!newTime.isValid()) {
+            this.error.set('invalid-time');
+            evt.target.time.focus();
+          }
+          if (!newDate.isValid()) {
             this.error.set('invalid-date');
             evt.target.date.focus();
           }
+          if (newCompleteDate.isValid()) {
+            this._storeDate(newCompleteDate.toDate());
+            Popup.close();
+          } else {
+            if (!this.error){
+              this.error.set('invalid');
+            }
+          }
         },
         'click .js-delete-date'(evt) {
           evt.preventDefault();