[ Index ]

PHP Cross Reference of vtigercrm-6.1.0

title

Body

[close]

/libraries/jquery/timepicker/lib/ -> datepair.js (source)

   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;}};


Generated: Fri Nov 28 20:08:37 2014 Cross-referenced by PHPXref 0.7.1