-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathautoform-datetime-inputs.js
89 lines (76 loc) · 2.29 KB
/
autoform-datetime-inputs.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
Template.datetimeInputs.created = function() {
this.dict = new ReactiveDict('datetimeDict' + Random.id());
this.dict.setDefault('meridian', 'AM');
this.dict.setDefault('calendar-input-id', 'calendar-' + Random.id());
if (!this.value && this.defaultValue) {
if (_.isFunction( this.defaultValue )){
this.value = this.defaultValue();
}
else {
this.value = moment(this.defaultValue).toDate();
}
}
}
Template.datetimeInputs.rendered = function() {
var dateField = $(this.firstNode).find('[data-datepart="date"]');
var timeField = $(this.firstNode).find('[data-datepart="time"]');
dateField.datepicker(this.data.atts.opts);
timeField.inputmask({
mask: "9{1,2}:9{2}",
regex: "[12]?[0-9]:[0-9][0-9]",
greedy: false
});
}
Template.datetimeInputs.helpers({
atts: function () {
var atts = _.omit(this.atts, 'calendarOpts');
return atts;
},
dataSchemaKey: function() {
return this.atts['data-schema-key'];
},
meridian: function() {
template = Template.instance();
return template.dict.get('meridian');
},
dateStr: function () {
if (this.value) {
return moment(this.value).format("MM/DD/YYYY");
}
},
timeStr: function () {
template = Template.instance();
if (this.value) {
template.dict.set('meridian', moment(this.value).format("A"));
return moment(this.value).format("h:mm");
}
},
calendarInputId: function() {
template = Template.instance();
return template.dict.get('calendar-input-id');
}
});
Template.datetimeInputs.events({
"click .meridian-option": function (e, template) {
var val = $(e.target).data('value');
template.dict.set('meridian', val);
}
})
AutoForm.addInputType("datetime-inputs", {
template: "datetimeInputs",
valueOut: function () {
var date = $(this).find('[data-datepart="date"]').val();
var time = $(this).find('[data-datepart="time"]').val();
var meridian = $(this).find('[data-datepart="meridian"]').val();
if (date && date.length && time && time.length) {
var combined = [ date, time, meridian ].join(' ');
var isValid = moment(combined, "MM/DD/YYYY h:mm A", true).isValid();
if (isValid) {
return moment(combined, "MM/DD/YYYY h:mm A").toDate();
}
else {
return null;
}
}
}
});