@@ -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 }
0 commit comments