Merge branch '4.5' of https://github.com/civicrm/civicrm-core into 4.6
authorColeman Watts <coleman@civicrm.org>
Mon, 23 Mar 2015 20:29:31 +0000 (16:29 -0400)
committerColeman Watts <coleman@civicrm.org>
Mon, 23 Mar 2015 20:29:31 +0000 (16:29 -0400)
Conflicts:
js/Common.js

1  2 
js/Common.js

diff --cc js/Common.js
index b721e01c9de739c8f62022a96c9c3f47b1fb142e,5937ac41e42a7ef7071761e832e2abacb8e82c45..4ad3867132e8da9256f2ce03a380bc4a2c797760
@@@ -483,182 -439,6 +483,182 @@@ CRM.strings = CRM.strings || {}
                });
            }
          });
-                 dialog: {width: 500, height: 'auto'}
 +      }
 +      else {
 +        selectParams.formatInputTooShort = function() {
 +          var txt = $el.data('select-params').formatInputTooShort || $.fn.select2.defaults.formatInputTooShort.call(this);
 +          txt += renderEntityRefFilters($el) + renderEntityRefCreateLinks($el);
 +          return txt;
 +        };
 +        selectParams.formatNoMatches = function() {
 +          var txt = $el.data('select-params').formatNoMatches || $.fn.select2.defaults.formatNoMatches;
 +          txt += renderEntityRefFilters($el) + renderEntityRefCreateLinks($el);
 +          return txt;
 +        };
 +        $el.on('select2-open.crmEntity', function() {
 +          var $el = $(this);
 +          loadEntityRefFilterOptions($el);
 +          $('#select2-drop')
 +            .off('.crmEntity')
 +            .on('click.crmEntity', 'a.crm-add-entity', function(e) {
 +              $el.select2('close');
 +              CRM.loadForm($(this).attr('href'), {
++                dialog: {width: 500, height: 220}
 +              }).on('crmFormSuccess', function(e, data) {
 +                if (data.status === 'success' && data.id) {
 +                  CRM.status(ts('%1 Created', {1: data.label}));
 +                  if ($el.select2('container').hasClass('select2-container-multi')) {
 +                    var selection = $el.select2('data');
 +                    selection.push(data);
 +                    $el.select2('data', selection, true);
 +                  } else {
 +                    $el.select2('data', data, true);
 +                  }
 +                }
 +              });
 +              return false;
 +            })
 +            .on('change.crmEntity', 'select.crm-entityref-filter-value', function() {
 +              var filter = $el.data('user-filter') || {};
 +              filter.value = $(this).val();
 +              $(this).toggleClass('active', !!filter.value);
 +              $el.data('user-filter', filter);
 +              if (filter.value) {
 +                // Once a filter has been chosen, rerender create links and refocus the search box
 +                $el.select2('close');
 +                $el.select2('open');
 +              }
 +            })
 +            .on('change.crmEntity', 'select.crm-entityref-filter-key', function() {
 +              var filter = $el.data('user-filter') || {};
 +              filter.key = $(this).val();
 +              $(this).toggleClass('active', !!filter.key);
 +              $el.data('user-filter', filter);
 +              loadEntityRefFilterOptions($el);
 +            });
 +        });
 +      }
 +      $el.crmSelect2($.extend(settings, $el.data('select-params'), selectParams));
 +    });
 +  };
 +
 +  /**
 +   * Combine api-params with user-filter
 +   * @param $el
 +   * @returns {*}
 +   */
 +  function getEntityRefApiParams($el) {
 +    var
 +      params = $.extend({params: {}}, $el.data('api-params') || {}),
 +      // Prevent original data from being modified - $.extend and _.clone don't cut it, they pass nested objects by reference!
 +      combined = _.cloneDeep(params),
 +      filter = $.extend({}, $el.data('user-filter') || {});
 +    if (filter.key && filter.value) {
 +      // Special case for contact type/sub-type combo
 +      if (filter.key === 'contact_type' && (filter.value.indexOf('__') > 0)) {
 +        combined.params.contact_type = filter.value.split('__')[0];
 +        combined.params.contact_sub_type = filter.value.split('__')[1];
 +      } else {
 +        // Allow json-encoded api filters e.g. {"BETWEEN":[123,456]}
 +        combined.params[filter.key] = filter.value.charAt(0) === '{' ? $.parseJSON(filter.value) : filter.value;
 +      }
 +    }
 +    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('<span class="crm-form-date-wrapper" />'),
 +        settings = $.extend({}, $dataField.data('datepicker') || {}, options || {}),
 +        $dateField = $(),
 +        $timeField = $(),
 +        $clearLink = $();
 +
 +      if (settings.allowClear !== undefined ? settings.allowClear : !$dataField.hasClass('required')) {
 +        $clearLink = $('<a class="crm-hover-button crm-clear-link" title="'+ ts('Clear') +'"><span class="icon ui-icon-close"></span></a>')
 +          .insertAfter($dataField);
 +      }
 +      if (settings.time !== false) {
 +        $timeField = $('<input>').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 = $('<input>').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);
 +      }
 +      // Rudimentary validation. TODO: Roll into use of jQUery validate and ui.datepicker.validation
 +      function isValidDate() {
 +        try {
 +          $.datepicker.parseDate(settings.dateFormat, $dateField.val());
 +          return true;
 +        } catch (e) {
 +          return false;
 +        }
 +      }
 +      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) {
 +        // The crmClear event wipes all the field values anyway, so no need to respond
 +        if (context !== 'crmClear') {
 +          var val = '';
 +          if ($dateField.val()) {
 +            if (isValidDate()) {
 +              val = $.datepicker.formatDate('yy-mm-dd', $dateField.datepicker('getDate'));
 +              $dateField.removeClass('crm-error');
 +            } else {
 +              $dateField.addClass('crm-error');
 +            }
 +          }
 +          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();
      });
    };