X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=js%2FCommon.js;h=c6d46e9aac76877677ec0650d2c10d3cc478064c;hb=0d05e8a1fb13762d2ae9ae24d06128890624050a;hp=737bc89fa0523114b3d1b43c9f70c329dc743716;hpb=a8a8ddac5c239d1832d91ca4fe212e4abb326621;p=civicrm-core.git diff --git a/js/Common.js b/js/Common.js index 737bc89fa0..c6d46e9aac 100644 --- a/js/Common.js +++ b/js/Common.js @@ -228,7 +228,10 @@ CRM.strings = CRM.strings || {}; } // Sync button enabled status with dialog button if ($(el).is('.ui-dialog input.crm-form-submit')) { - $(el).closest('.ui-dialog').find('.ui-dialog-buttonset button[data-identifier='+ $(el).attr('name') +']').prop('disabled', !!value); + $(el).closest('.ui-dialog').find('.ui-dialog-buttonset button[data-identifier='+ $(el).attr('name') +']').prop('disabled', value); + } + if ($(el).is('.crm-form-date-wrapper .crm-hidden-date')) { + $(el).siblings().prop('disabled', value); } } }; @@ -561,6 +564,87 @@ CRM.strings = CRM.strings || {}; return combined; } + function copyAttributes($source, $target, attributes) { + _.each(attributes, function(name) { + if ($source.attr(name)) { + $target.attr(name, $source.attr(name)); + } + }); + } + + $.fn.crmDatepicker = function(options) { + return $(this).each(function() { + if ($(this).is('.crm-form-date-wrapper .crm-hidden-date')) { + // Already initialized + return; + } + var + $dataField = $(this).wrap(''), + settings = $.extend({}, $dataField.data('datepicker') || {}, options || {}), + $dateField = $(), + $timeField = $(), + $clearLink = $(); + + if (settings.allowClear !== undefined ? settings.allowClear : !$dataField.hasClass('required')) { + $clearLink = $('') + .insertAfter($dataField); + } + if (settings.time !== false) { + $timeField = $('').insertAfter($dataField); + copyAttributes($dataField, $timeField, ['class', 'disabled']); + $timeField + .addClass('crm-form-text crm-form-time') + .attr('placeholder', $dataField.attr('time-placeholder') === undefined ? ts('Time') : $dataField.attr('time-placeholder')) + .change(updateDataField) + .timeEntry({ + spinnerImage: '', + show24Hours: settings.time === true || settings.time === undefined ? CRM.config.timeIs24Hr : settings.time == '24' + }); + } + if (settings.date !== false) { + $dateField = $('').insertAfter($dataField); + copyAttributes($dataField, $dateField, ['placeholder', 'style', 'class', 'disabled']); + $dateField.addClass('crm-form-text crm-form-date'); + settings.dateFormat = settings.dateFormat || CRM.config.dateInputFormat; + settings.changeMonth = _.includes('m', settings.dateFormat); + settings.changeYear = _.includes('y', settings.dateFormat); + $dateField.datepicker(settings).change(updateDataField); + } + function updateInputFields(e, context) { + var val = $dataField.val(), + time = null; + if (context !== 'userInput' && context !== 'crmClear') { + if ($dateField.length) { + $dateField.datepicker('setDate', _.includes(val, '-') ? $.datepicker.parseDate('yy-mm-dd', val) : null); + } + if ($timeField.length) { + if (val.length === 8) { + time = val; + } else if (val.length === 19) { + time = val.split(' ')[1]; + } + $timeField.timeEntry('setTime', time); + } + } + $clearLink.css('visibility', val ? 'visible' : 'hidden'); + } + function updateDataField(e, context) { + if (context !== 'crmClear') { + var val = ''; + if ($dateField.val()) { + val = $.datepicker.formatDate('yy-mm-dd', $dateField.datepicker('getDate')); + } + if ($timeField.val()) { + val += (val ? ' ' : '') + $timeField.timeEntry('getTime').toTimeString().substr(0, 8); + } + $dataField.val(val).trigger('change', ['userInput']); + } + } + $dataField.hide().addClass('crm-hidden-date').on('change', updateInputFields); + updateInputFields(); + }); + }; + CRM.utils.formatSelect2Result = function (row) { var markup = '
'; if (row.image !== undefined) { @@ -1230,8 +1314,8 @@ CRM.strings = CRM.strings || {}; // Handle clear button for form elements .on('click', 'a.crm-clear-link', function() { - $(this).css({visibility: 'hidden'}).siblings('.crm-form-radio:checked').prop('checked', false).change(); - $(this).siblings('input:text').val('').change(); + $(this).css({visibility: 'hidden'}).siblings('.crm-form-radio:checked').prop('checked', false).trigger('change', ['crmClear']); + $(this).siblings('input:text').val('').trigger('change', ['crmClear']); return false; }) .on('change', 'input.crm-form-radio:checked', function() {