Mercurial > hg > rr-repo
diff sites/all/modules/webform/js/webform.js @ 0:ff03f76ab3fe
initial version
author | danieleb <danielebarchiesi@me.com> |
---|---|
date | Wed, 21 Aug 2013 18:51:11 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sites/all/modules/webform/js/webform.js Wed Aug 21 18:51:11 2013 +0100 @@ -0,0 +1,86 @@ + +/** + * JavaScript behaviors for the front-end display of webforms. + */ + +(function ($) { + +Drupal.behaviors.webform = Drupal.behaviors.webform || {}; + +Drupal.behaviors.webform.attach = function(context) { + // Calendar datepicker behavior. + Drupal.webform.datepicker(context); +}; + +Drupal.webform = Drupal.webform || {}; + +Drupal.webform.datepicker = function(context) { + $('div.webform-datepicker').each(function() { + var $webformDatepicker = $(this); + var $calendar = $webformDatepicker.find('input.webform-calendar'); + + // Ensure the page we're on actually contains a datepicker. + if ($calendar.length == 0) { + return; + } + + var startDate = $calendar[0].className.replace(/.*webform-calendar-start-(\d{4}-\d{2}-\d{2}).*/, '$1').split('-'); + var endDate = $calendar[0].className.replace(/.*webform-calendar-end-(\d{4}-\d{2}-\d{2}).*/, '$1').split('-'); + var firstDay = $calendar[0].className.replace(/.*webform-calendar-day-(\d).*/, '$1'); + // Convert date strings into actual Date objects. + startDate = new Date(startDate[0], startDate[1] - 1, startDate[2]); + endDate = new Date(endDate[0], endDate[1] - 1, endDate[2]); + + // Ensure that start comes before end for datepicker. + if (startDate > endDate) { + var laterDate = startDate; + startDate = endDate; + endDate = laterDate; + } + + var startYear = startDate.getFullYear(); + var endYear = endDate.getFullYear(); + + // Set up the jQuery datepicker element. + $calendar.datepicker({ + dateFormat: 'yy-mm-dd', + yearRange: startYear + ':' + endYear, + firstDay: parseInt(firstDay), + minDate: startDate, + maxDate: endDate, + onSelect: function(dateText, inst) { + var date = dateText.split('-'); + $webformDatepicker.find('select.year, input.year').val(+date[0]); + $webformDatepicker.find('select.month').val(+date[1]); + $webformDatepicker.find('select.day').val(+date[2]); + }, + beforeShow: function(input, inst) { + // Get the select list values. + var year = $webformDatepicker.find('select.year, input.year').val(); + var month = $webformDatepicker.find('select.month').val(); + var day = $webformDatepicker.find('select.day').val(); + + // If empty, default to the current year/month/day in the popup. + var today = new Date(); + year = year ? year : today.getFullYear(); + month = month ? month : today.getMonth() + 1; + day = day ? day : today.getDate(); + + // Make sure that the default year fits in the available options. + year = (year < startYear || year > endYear) ? startYear : year; + + // jQuery UI Datepicker will read the input field and base its date off + // of that, even though in our case the input field is a button. + $(input).val(year + '-' + month + '-' + day); + } + }); + + // Prevent the calendar button from submitting the form. + $calendar.click(function(event) { + $(this).focus(); + event.preventDefault(); + }); + }); +} + +})(jQuery);