[ Index ] |
PHP Cross Reference of vtigercrm-6.1.0 |
[Summary view] [Print] [Text view]
1 $(function() { 2 3 $('.datepair input.date').each(function(){ 4 var $this = $(this); 5 $this.datepicker({ 6 'dateFormat': 'm/d/yy', 7 'autoclose': true 8 }); 9 10 if ($this.hasClass('start') || $this.hasClass('end')) { 11 $this.on('changeDate change', doDatepair); 12 } 13 14 }); 15 16 $('.datepair input.time').each(function() { 17 var $this = $(this); 18 var opts = { 'showDuration': true, 'timeFormat': 'g:ia', 'scrollDefaultNow': true }; 19 20 if ($this.hasClass('start') || $this.hasClass('end')) { 21 opts.onSelect = doDatepair; 22 } 23 24 $this.timepicker(opts); 25 }); 26 27 $('.datepair').each(initDatepair); 28 29 function initDatepair() 30 { 31 var container = $(this); 32 33 var startDateInput = container.find('input.start.date'); 34 var endDateInput = container.find('input.end.date'); 35 var dateDelta = 0; 36 37 if (startDateInput.length && endDateInput.length) { 38 var startDate = new Date(startDateInput.val()); 39 var endDate = new Date(endDateInput.val()); 40 41 dateDelta = endDate.getTime() - startDate.getTime(); 42 43 container.data('dateDelta', dateDelta); 44 } 45 46 var startTimeInput = container.find('input.start.time'); 47 var endTimeInput = container.find('input.end.time'); 48 49 if (startTimeInput.length && endTimeInput.length) { 50 var startInt = startTimeInput.timepicker('getSecondsFromMidnight'); 51 var endInt = endTimeInput.timepicker('getSecondsFromMidnight'); 52 53 container.data('timeDelta', endInt - startInt); 54 55 if (dateDelta < 86400000) { 56 endTimeInput.timepicker('option', 'minTime', startInt); 57 } 58 } 59 } 60 61 function doDatepair() 62 { 63 var target = $(this); 64 if (target.val() == '') { 65 return; 66 } 67 68 var container = target.closest('.datepair'); 69 70 if (target.hasClass('date')) { 71 updateDatePair(target, container); 72 73 } else if (target.hasClass('time')) { 74 updateTimePair(target, container); 75 } 76 } 77 78 function updateDatePair(target, container) 79 { 80 var start = container.find('input.start.date'); 81 var end = container.find('input.end.date'); 82 83 if (!start.length || !end.length) { 84 return; 85 } 86 87 var startDate = new Date(start.val()); 88 var endDate = new Date(end.val()); 89 90 var oldDelta = container.data('dateDelta'); 91 92 if (oldDelta && target.hasClass('start')) { 93 var newEnd = new Date(startDate.getTime()+oldDelta); 94 end.val(newEnd.format('m/d/Y')); 95 end.datepicker('update'); 96 return; 97 98 } else { 99 var newDelta = endDate.getTime() - startDate.getTime(); 100 101 if (newDelta < 0) { 102 newDelta = 0; 103 104 if (target.hasClass('start')) { 105 end.val(startDate.format('m/d/Y')); 106 end.datepicker('update'); 107 } else if (target.hasClass('end')) { 108 start.val(endDate.format('m/d/Y')); 109 start.datepicker('update'); 110 } 111 } 112 113 if (newDelta < 86400000) { 114 var startTimeVal = container.find('input.start.time').val(); 115 116 if (startTimeVal) { 117 container.find('input.end.time').timepicker('option', {'minTime': startTimeVal}); 118 } 119 } else { 120 container.find('input.end.time').timepicker('option', {'minTime': null}); 121 } 122 123 container.data('dateDelta', newDelta); 124 } 125 } 126 127 function updateTimePair(target, container) 128 { 129 var start = container.find('input.start.time'); 130 var end = container.find('input.end.time'); 131 132 if (!start.length || !end.length) { 133 return; 134 } 135 136 var startInt = start.timepicker('getSecondsFromMidnight'); 137 var endInt = end.timepicker('getSecondsFromMidnight'); 138 139 var oldDelta = container.data('timeDelta'); 140 var dateDelta = container.data('dateDelta'); 141 142 if (target.hasClass('start') && (!dateDelta || dateDelta < 86400000)) { 143 end.timepicker('option', 'minTime', startInt); 144 } 145 146 var endDateAdvance = 0; 147 var newDelta; 148 149 if (oldDelta && target.hasClass('start')) { 150 // lock the duration and advance the end time 151 152 var newEnd = (startInt+oldDelta)%86400; 153 154 if (newEnd < 0) { 155 newEnd += 86400; 156 } 157 158 end.timepicker('setTime', newEnd); 159 newDelta = newEnd - startInt; 160 } else if (startInt !== null && endInt !== null) { 161 newDelta = endInt - startInt; 162 } else { 163 return; 164 } 165 166 container.data('timeDelta', newDelta); 167 168 if (newDelta < 0 && (!oldDelta || oldDelta > 0)) { 169 // overnight time span. advance the end date 1 day 170 var endDateAdvance = 86400000; 171 172 } else if (newDelta > 0 && oldDelta < 0) { 173 // switching from overnight to same-day time span. decrease the end date 1 day 174 var endDateAdvance = -86400000; 175 } 176 177 var startInput = container.find('.start.date'); 178 var endInput = container.find('.end.date'); 179 180 if (startInput.val() && !endInput.val()) { 181 endInput.val(startInput.val()); 182 endInput.datepicker('update'); 183 dateDelta = 0; 184 container.data('dateDelta', 0); 185 } 186 187 if (endDateAdvance != 0) { 188 if (dateDelta || dateDelta === 0) { 189 var endDate = new Date(endInput.val()); 190 var newEnd = new Date(endDate.getTime() + endDateAdvance); 191 endInput.val(newEnd.format('m/d/Y')); 192 endInput.datepicker('update'); 193 container.data('dateDelta', dateDelta + endDateAdvance); 194 } 195 } 196 } 197 }); 198 199 // Simulates PHP's date function 200 Date.prototype.format=function(format){var returnStr='';var replace=Date.replaceChars;for(var i=0;i<format.length;i++){var curChar=format.charAt(i);if(replace[curChar]){returnStr+=replace[curChar].call(this);}else{returnStr+=curChar;}}return returnStr;};Date.replaceChars={shortMonths:['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'],longMonths:['January','February','March','April','May','June','July','August','September','October','November','December'],shortDays:['Sun','Mon','Tue','Wed','Thu','Fri','Sat'],longDays:['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],d:function(){return(this.getDate()<10?'0':'')+this.getDate();},D:function(){return Date.replaceChars.shortDays[this.getDay()];},j:function(){return this.getDate();},l:function(){return Date.replaceChars.longDays[this.getDay()];},N:function(){return this.getDay()+1;},S:function(){return(this.getDate()%10==1&&this.getDate()!=11?'st':(this.getDate()%10==2&&this.getDate()!=12?'nd':(this.getDate()%10==3&&this.getDate()!=13?'rd':'th')));},w:function(){return this.getDay();},z:function(){return"Not Yet Supported";},W:function(){return"Not Yet Supported";},F:function(){return Date.replaceChars.longMonths[this.getMonth()];},m:function(){return(this.getMonth()<9?'0':'')+(this.getMonth()+1);},M:function(){return Date.replaceChars.shortMonths[this.getMonth()];},n:function(){return this.getMonth()+1;},t:function(){return"Not Yet Supported";},L:function(){return(((this.getFullYear()%4==0)&&(this.getFullYear()%100!=0))||(this.getFullYear()%400==0))?'1':'0';},o:function(){return"Not Supported";},Y:function(){return this.getFullYear();},y:function(){return(''+this.getFullYear()).substr(2);},a:function(){return this.getHours()<12?'am':'pm';},A:function(){return this.getHours()<12?'AM':'PM';},B:function(){return"Not Yet Supported";},g:function(){return this.getHours()%12||12;},G:function(){return this.getHours();},h:function(){return((this.getHours()%12||12)<10?'0':'')+(this.getHours()%12||12);},H:function(){return(this.getHours()<10?'0':'')+this.getHours();},i:function(){return(this.getMinutes()<10?'0':'')+this.getMinutes();},s:function(){return(this.getSeconds()<10?'0':'')+this.getSeconds();},e:function(){return"Not Yet Supported";},I:function(){return"Not Supported";},O:function(){return(-this.getTimezoneOffset()<0?'-':'+')+(Math.abs(this.getTimezoneOffset()/60)<10?'0':'')+(Math.abs(this.getTimezoneOffset()/60))+'00';},P:function(){return(-this.getTimezoneOffset()<0?'-':'+')+(Math.abs(this.getTimezoneOffset()/60)<10?'0':'')+(Math.abs(this.getTimezoneOffset()/60))+':'+(Math.abs(this.getTimezoneOffset()%60)<10?'0':'')+(Math.abs(this.getTimezoneOffset()%60));},T:function(){var m=this.getMonth();this.setMonth(0);var result=this.toTimeString().replace(/^.+ \(?([^\)]+)\)?$/,'$1');this.setMonth(m);return result;},Z:function(){return-this.getTimezoneOffset()*60;},c:function(){return this.format("Y-m-d")+"T"+this.format("H:i:sP");},r:function(){return this.toString();},U:function(){return this.getTime()/1000;}};
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 20:08:37 2014 | Cross-referenced by PHPXref 0.7.1 |