source: trunk/admin/themes/default/js/datepicker.js @ 28578

Last change on this file since 28578 was 28578, checked in by rvelices, 10 years ago

time picker more forgiving with parsing errors (accept dates only without time)

File size: 2.9 KB
Line 
1jQuery.timepicker.log = jQuery.noop; // that's ugly, but the timepicker is acting weird and throws parsing errors
2
3jQuery.fn.pwgDatepicker = function(options) {
4  options = options || {};
5 
6  return this.each(function() {
7    var $this = jQuery(this),
8        $target = jQuery('[name="'+ jQuery(this).data('datepicker') +'"]'),
9        linked = !!$target.length;
10   
11    if (linked) { // get value before init
12      var value = $target.val().split(' ');
13    }
14
15    // custom setter
16    function set(date, init) {
17      $this.datetimepicker('setDate', date);
18     
19      if ($this.data('datepicker-start')) {
20        $start.datetimepicker('option', 'maxDate', date);
21      }
22      else if ($this.data('datepicker-end')) {
23        if (!init) { // on init, "end" is not initialized yet (assuming "start" is before "end" in the DOM)
24          $end.datetimepicker('option', 'minDate', date);
25        }
26      }
27     
28      if (!date && linked) {
29        $target.val('');
30      }
31    }
32
33    // init picker
34    $this.datetimepicker(jQuery.extend({
35      dateFormat: linked ? 'DD d MM yy' : 'yy-mm-dd',
36      timeFormat: 'HH:mm',
37     
38      altField: linked ? $target : null,
39      altFormat: 'yy-mm-dd',
40      altTimeFormat: options.showTimepicker ? 'HH:mm:ss' : '',
41     
42      autoSize: true,
43      changeMonth : true,
44      changeYear: true,
45      showTimepicker: false,
46      altFieldTimeOnly: false,
47      showSecond: false,
48      alwaysSetTime: false,
49      stepMinute: 5
50    }, options));
51   
52    // attach range pickers
53    if ($this.data('datepicker-start')) {
54      var $start = jQuery('[data-datepicker="'+ jQuery(this).data('datepicker-start') +'"]');
55     
56      $this.datetimepicker('option', 'onClose', function(date) {
57        $start.datetimepicker('option', 'maxDate', date);
58      });
59     
60      $this.datetimepicker('option', 'minDate', $start.datetimepicker('getDate'));
61    }
62    else if ($this.data('datepicker-end')) {
63      var $end = jQuery('[data-datepicker="'+ jQuery(this).data('datepicker-end') +'"]');
64     
65      $this.datetimepicker('option', 'onClose', function(date) {
66        $end.datetimepicker('option', 'minDate', date);
67      });
68    }
69   
70    // attach unset button
71    if ($this.data('datepicker-unset')) {
72      jQuery('#'+ $this.data('datepicker-unset')).on('click', function(e) {
73        e.preventDefault();
74        set(null, false);
75      });
76    }
77   
78    // set value from linked input
79    if (linked) {
80      if (value[0].length == 10 && (!options.showTimepicker || value.length==1)) {
81        set(jQuery.datepicker.parseDate('yy-mm-dd', value[0]), true);
82      }
83      else if (value.length == 2 && options.showTimepicker) {
84        set(jQuery.datepicker.parseDateTime('yy-mm-dd', 'HH:mm:ss', value.join(' ')), true);
85      }
86      else {
87        set(null, true);
88      }
89    }
90   
91    // autoSize not handled by timepicker
92    if (options.showTimepicker) {
93      $this.attr('size', parseInt($this.attr('size'))+6);
94    }
95  });
96};
Note: See TracBrowser for help on using the repository browser.