webform.js 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. /**
  2. * JavaScript behaviors for the front-end display of webforms.
  3. */
  4. (function ($) {
  5. Drupal.behaviors.webform = Drupal.behaviors.webform || {};
  6. Drupal.behaviors.webform.attach = function(context) {
  7. // Calendar datepicker behavior.
  8. Drupal.webform.datepicker(context);
  9. };
  10. Drupal.webform = Drupal.webform || {};
  11. Drupal.webform.datepicker = function(context) {
  12. $('div.webform-datepicker').each(function() {
  13. var $webformDatepicker = $(this);
  14. var $calendar = $webformDatepicker.find('input.webform-calendar');
  15. var startDate = $calendar[0].className.replace(/.*webform-calendar-start-(\d{4}-\d{2}-\d{2}).*/, '$1').split('-');
  16. var endDate = $calendar[0].className.replace(/.*webform-calendar-end-(\d{4}-\d{2}-\d{2}).*/, '$1').split('-');
  17. var firstDay = $calendar[0].className.replace(/.*webform-calendar-day-(\d).*/, '$1');
  18. // Convert date strings into actual Date objects.
  19. startDate = new Date(startDate[0], startDate[1] - 1, startDate[2]);
  20. endDate = new Date(endDate[0], endDate[1] - 1, endDate[2]);
  21. // Ensure that start comes before end for datepicker.
  22. if (startDate > endDate) {
  23. var laterDate = startDate;
  24. startDate = endDate;
  25. endDate = laterDate;
  26. }
  27. var startYear = startDate.getFullYear();
  28. var endYear = endDate.getFullYear();
  29. // Set up the jQuery datepicker element.
  30. $calendar.datepicker({
  31. dateFormat: 'yy-mm-dd',
  32. yearRange: startYear + ':' + endYear,
  33. firstDay: parseInt(firstDay),
  34. minDate: startDate,
  35. maxDate: endDate,
  36. onSelect: function(dateText, inst) {
  37. var date = dateText.split('-');
  38. $webformDatepicker.find('select.year, input.year').val(+date[0]);
  39. $webformDatepicker.find('select.month').val(+date[1]);
  40. $webformDatepicker.find('select.day').val(+date[2]);
  41. },
  42. beforeShow: function(input, inst) {
  43. // Get the select list values.
  44. var year = $webformDatepicker.find('select.year, input.year').val();
  45. var month = $webformDatepicker.find('select.month').val();
  46. var day = $webformDatepicker.find('select.day').val();
  47. // If empty, default to the current year/month/day in the popup.
  48. var today = new Date();
  49. year = year ? year : today.getFullYear();
  50. month = month ? month : today.getMonth() + 1;
  51. day = day ? day : today.getDate();
  52. // Make sure that the default year fits in the available options.
  53. year = (year < startYear || year > endYear) ? startYear : year;
  54. // jQuery UI Datepicker will read the input field and base its date off
  55. // of that, even though in our case the input field is a button.
  56. $(input).val(year + '-' + month + '-' + day);
  57. }
  58. });
  59. // Prevent the calendar button from submitting the form.
  60. $calendar.click(function(event) {
  61. $(this).focus();
  62. event.preventDefault();
  63. });
  64. });
  65. }
  66. })(jQuery);