1 /** 2 * @author Gillis Haasnoot <gillis.haasnoot@gmail.com> 3 * @package Banana.Controls 4 * @summary Date picker. using jquery ui datapicker 5 */ 6 7 goog.provide('Banana.Controls.DataControls.DateTimePicker'); 8 9 /** @namespace Banana.Controls.DateTimePicker */ 10 namespace('Banana.Controls').DateTimePicker = Banana.Controls.DataControl.extend( 11 /** @lends Banana.Controls.DateTimePicker.prototype */ 12 { 13 /** 14 * Creates a date and time picker combined in one. 15 * Currently the only supported time format is MM-DD-YYYY HH:MM:SS:FF 16 * 17 * @constructs 18 * @extends Banana.Controls.DataControl 19 */ 20 init : function() 21 { 22 this._super(); 23 this.addCssClass('BDateTimePicker'); 24 this.dateCtrl = new Banana.Controls.DatePicker().addCssClass('BDateTimePickerDateControl'); 25 this.timeCtrl = new Banana.Controls.MaskedTextBox().setMask('99:99:99').addCssClass('BDateTimePickerTimeControl'); 26 27 this.defaultTime = '00:00:00:00'; 28 29 this.resultFormat = 'date'; 30 }, 31 32 /** 33 * @override 34 */ 35 updateDisplay : function() 36 { 37 if (!this.timeCtrl.getData() && this.defaultTime) 38 { 39 this.timeCtrl.setData(this.defaultTime); 40 } 41 }, 42 43 /** 44 * Set a minimum selectable date via a Banana Date object 45 * @param {Banana.Util.DateTimecode} date 46 * @return {this} 47 */ 48 setMinimumDate : function(date) 49 { 50 this.dateCtrl.setMinimumDate(date); 51 return this; 52 }, 53 54 /** 55 * @return {Banana.Controls.MaskedTextBox} 56 */ 57 getTimeControl : function() 58 { 59 return this.timeCtrl; 60 }, 61 62 /** 63 * @return {Banana.Controls.DatePicker} 64 */ 65 getDateControl : function() 66 { 67 return this.dateCtrl; 68 }, 69 70 /** 71 * @override 72 */ 73 createComponents : function() 74 { 75 this.addControl(this.dateCtrl); 76 this.addControl(this.timeCtrl); 77 78 // Pass on changed events to enable validation 79 //dont trigger event when data is the same as previous 80 this.dateCtrl.bind('dataChanged',this.getProxy(function(){ 81 82 var data = this.getData(); 83 84 if (data == this.previousData) return; 85 86 this.previousData = data; 87 88 this.triggerEvent('dataChanged'); 89 })); 90 this.timeCtrl.bind('dataChanged',this.getProxy(function() 91 { 92 var data = this.getData(); 93 94 if (data == this.previousData) return; 95 96 this.previousData = data; 97 98 this.triggerEvent('dataChanged'); 99 100 })); 101 }, 102 103 /** 104 * @override 105 */ 106 setData : function(data,ignoreEvent,ignoreDom) 107 { 108 this._super(data); 109 if (data) 110 { 111 var parts = data.split(' '); 112 this.dateCtrl.setData(parts[0],ignoreEvent,ignoreDom); 113 this.timeCtrl.setData(parts[1],ignoreEvent,ignoreDom); 114 } 115 return this; 116 }, 117 118 /** 119 * @param {String} type timecode or null 120 * @return {this} this 121 */ 122 setReturnType : function(type) 123 { 124 this.resultFormat =type; 125 return this; 126 }, 127 128 /** 129 * @return {String} 130 */ 131 getData : function() 132 { 133 var datePart = this.dateCtrl.getData() 134 var timePart = this.timeCtrl.getData(); 135 136 if (!datePart) 137 { 138 return false; 139 } 140 141 //add frame part 142 if (timePart) 143 { 144 //if our time part in invalid we make zero from it 145 if (timePart.match(/_/)) 146 { 147 timePart = '00:00:00:00'; 148 } 149 else 150 { 151 timePart+=':00'; 152 } 153 } 154 else 155 { 156 timePart = '00:00:00:00'; 157 } 158 159 this.data = [datePart, timePart].join(' '); 160 161 if (this.resultFormat == 'tc') 162 { 163 var d = new Banana.Util.DateTimecode(); 164 d.setLocalDateTime(this._super()); 165 return d.getTimecode(); 166 } 167 168 return this._super(); 169 }, 170 171 /** 172 * @depricated 173 */ 174 setDateFormat : function(format) 175 { 176 this.resultFormat = format; 177 return this; 178 } 179 });