Skip to content
This repository was archived by the owner on Dec 26, 2019. It is now read-only.

Commit bd8e639

Browse files
committed
Use Javascript native Date objects instead of ISO date strings
1 parent 4af5933 commit bd8e639

File tree

2 files changed

+39
-59
lines changed

2 files changed

+39
-59
lines changed

addon/components/datepicker-support.js

Lines changed: 34 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,7 @@ export default Ember.Mixin.create({
44
value: null,
55

66
setupBootstrapDatepicker: function() {
7-
var self = this,
8-
element = this.$(),
9-
value = this.get('value'),
10-
dates = [];
11-
12-
element.
7+
this.$().
138
datepicker({
149
autoclose: this.get('autoclose'),
1510
calendarWeeks: this.get('calendarWeeks'),
@@ -32,73 +27,57 @@ export default Ember.Mixin.create({
3227
}).
3328
on('changeDate', function(event) {
3429
Ember.run(function() {
35-
self.didChangeDate(event);
36-
});
37-
});
38-
39-
if (value) {
40-
if (this.get('multidate')) {
41-
// split datesIsoString by multidate separator
42-
var multidateSeparator = this.get('multidateSeparator') || ',';
43-
var isoDates = value.split(multidateSeparator);
30+
this.didChangeDate(event);
31+
}.bind(this));
32+
}.bind(this));
4433

45-
// generate array of date objecs
46-
dates = isoDates.map(function(date) {
47-
return self._resetTime(new Date(date));
48-
});
49-
}
50-
else {
51-
dates = [self._resetTime(new Date(value))];
52-
}
53-
element.datepicker.
54-
apply(element, Array.prototype.concat.call(['update'], dates));
55-
}
34+
this._updateDatepicker();
5635
}.on('didInsertElement'),
5736

5837
teardownBootstrapDatepicker: function() {
5938
this.$().datepicker('remove');
6039
}.on('willDestroyElement'),
6140

6241
didChangeDate: function(event) {
63-
var isoDate = null;
42+
var value = null;
6443

6544
if (event.date) {
6645
if (this.get('multidate')) {
67-
// set value to array if multidate
68-
isoDate = this.$().datepicker('getDates').map(function(date) {
69-
return date.toISOString();
70-
});
71-
}
72-
else {
73-
isoDate = this.$().datepicker('getDate').toISOString();
46+
value = this.$().datepicker('getDates');
47+
} else {
48+
value = this.$().datepicker('getDate');
7449
}
7550
}
76-
this.set('value', isoDate);
51+
52+
this.set('value', value);
7753
},
7854

7955
didChangeValue: function() {
80-
var self = this,
81-
element = this.$(),
56+
this._updateDatepicker();
57+
}.observes('value'),
58+
59+
_updateDatepicker: function() {
60+
var element = this.$(),
8261
value = this.get('value'),
8362
dates = [];
84-
85-
// If value is undefined or null, we don't want bootstrap-datepicker to
86-
// display 1970-01-01. We want a blank value.
87-
if (value) {
88-
if (Ember.isArray(value)) {
89-
dates = value.map(function(date) {
90-
return self._resetTime(new Date(date));
91-
});
92-
} else {
93-
dates = [self._resetTime(new Date(value))];
94-
}
95-
} else {
96-
dates = [null];
63+
64+
switch (Ember.typeOf(value)) {
65+
case 'array':
66+
dates = value;
67+
break;
68+
case 'date':
69+
dates = [value];
70+
break;
71+
default:
72+
dates = [null];
9773
}
98-
99-
element.datepicker.
100-
apply(element, Array.prototype.concat.call(['update'], dates));
101-
}.observes('value'),
74+
dates = dates.map(function(date) {
75+
return (Ember.isNone(date)) ? null : this._resetTime(date);
76+
}.bind(this));
77+
78+
element.datepicker
79+
.apply(element, Array.prototype.concat.call(['update'], dates));
80+
},
10281

10382
// HACK: Have to reset time to 00:00:00 because of the bug in
10483
// bootstrap-datepicker
@@ -107,6 +86,7 @@ export default Ember.Mixin.create({
10786
date.setHours(0);
10887
date.setMinutes(0);
10988
date.setSeconds(0);
89+
date.setMilliseconds(0);
11090

11191
return date;
11292
}

tests/unit/components/bootstrap-datepicker-test.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ test('should display date with default format when no format is set', function()
2424
expect(1);
2525

2626
var component = this.subject({
27-
value: '2014-12-31T00:00:00.000Z'
27+
value: new Date(2014, 11, 31)
2828
});
2929

3030
equal(this.$().val(), '12/31/2014');
@@ -34,7 +34,7 @@ test('should display date with custom format when format is set', function(){
3434
expect(1);
3535

3636
var component = this.subject({
37-
value: '2014-12-31T00:00:00.000Z',
37+
value: new Date(2014, 11, 31),
3838
format: 'dd.M.yy'
3939
});
4040

@@ -43,9 +43,9 @@ test('should display date with custom format when format is set', function(){
4343

4444
test('should set dates provided by value (multidate, default multidateSeparator)', function(){
4545
expect(2);
46-
46+
4747
var component = this.subject({
48-
value: '2015-01-13T00:00:00.000Z,2015-01-07T00:00:00.000Z,2015-01-15T00:00:00.000Z',
48+
value: [new Date(2015, 0, 13), new Date(2015, 0, 7), new Date(2015, 0, 15)],
4949
multidate: true
5050
});
5151

@@ -57,7 +57,7 @@ test('should set dates provided by value (multidate, multidateSeparator provided
5757
expect(2);
5858

5959
var component = this.subject({
60-
value: '2015-01-13T00:00:00.000Z;2015-01-07T00:00:00.000Z;2015-01-15T00:00:00.000Z',
60+
value: [new Date(2015, 0, 13), new Date(2015, 0, 7), new Date(2015, 0, 15)],
6161
multidate: true,
6262
multidateSeparator: ';'
6363
});

0 commit comments

Comments
 (0)