val = [val];
}
$elect.find('option' + opts).remove();
- $.each(options, function(key, option) {
+ _.each(options, function(option) {
var selected = ($.inArray(''+option.key, val) > -1) ? 'selected="selected"' : '';
$elect.append('<option value="' + option.key + '"' + selected + '>' + option.value + '</option>');
});
- $elect.trigger('crmOptionsUpdated').trigger('change');
+ $elect.trigger('crmOptionsUpdated', $.extend({}, options)).trigger('change');
});
};
if (!_.xor(val.split(','), _.pluck(stored, 'id')).length) {
callback(multiple ? stored : stored[0]);
} else {
- var params = $el.data('api-params') || {};
- params.id = val;
+ var params = $.extend({}, $el.data('api-params') || {}, {id: val});
CRM.api3($el.data('api-entity'), 'getlist', params).done(function(result) {
callback(multiple ? result.values : result.values[0])
});
}
// Initialize widgets
- $(document).on('crmLoad', function(e) {
- $('table.row-highlight', e.target)
- .off('.rowHighlight')
- .on('change.rowHighlight', 'input.select-row, input.select-rows', function () {
- var target, table = $(this).closest('table');
- if ($(this).hasClass('select-rows')) {
- target = $('tbody tr', table);
- $('input.select-row', table).prop('checked', $(this).prop('checked'));
- }
- else {
- target = $(this).closest('tr');
- $('input.select-rows', table).prop('checked', $(".select-row:not(':checked')", table).length < 1);
- }
- target.toggleClass('crm-row-selected', $(this).is(':checked'));
- })
- .find('input.select-row:checked').parents('tr').addClass('crm-row-selected');
- $('.crm-select2:not(.select2-offscreen)', e.target).crmSelect2();
- $('.crm-form-entityref:not(.select2-offscreen)', e.target).crmEntityRef();
- });
+ $(document)
+ .on('crmLoad', function(e) {
+ $('table.row-highlight', e.target)
+ .off('.rowHighlight')
+ .on('change.rowHighlight', 'input.select-row, input.select-rows', function () {
+ var target, table = $(this).closest('table');
+ if ($(this).hasClass('select-rows')) {
+ target = $('tbody tr', table);
+ $('input.select-row', table).prop('checked', $(this).prop('checked'));
+ }
+ else {
+ target = $(this).closest('tr');
+ $('input.select-rows', table).prop('checked', $(".select-row:not(':checked')", table).length < 1);
+ }
+ target.toggleClass('crm-row-selected', $(this).is(':checked'));
+ })
+ .find('input.select-row:checked').parents('tr').addClass('crm-row-selected');
+ $('.crm-select2:not(.select2-offscreen)', e.target).crmSelect2();
+ $('.crm-form-entityref:not(.select2-offscreen)', e.target).crmEntityRef();
+ })
+ // Modal dialogs should disable scrollbars
+ .on('dialogopen', function(e) {
+ if ($(e.target).dialog('option', 'modal')) {
+ $(e.target).addClass('modal-dialog');
+ $('body').css({overflow: 'hidden'});
+ }
+ })
+ .on('dialogclose', function(e) {
+ if ($('.ui-dialog .modal-dialog').not(e.target).length < 1) {
+ $('body').css({overflow: ''});
+ }
+ });
/**
* Function to make multiselect boxes behave as fields in small screens
settings.dialog = {
modal: true,
width: '65%',
- height: parseInt($(window).height() * .75),
- close: function() {
- $(this).dialog('destroy').remove();
- }
+ height: parseInt($(window).height() * .75)
};
}
options && $.extend(true, settings, options);
// Create new dialog
if (settings.dialog) {
$('<div id="'+ settings.target.substring(1) +'"><div class="crm-loading-element">' + ts('Loading') + '...</div></div>').dialog(settings.dialog);
+ $(settings.target).on('dialogclose', function() {
+ $(this).dialog('destroy').remove();
+ });
}
if (settings.dialog && !settings.dialog.title) {
$(settings.target).on('crmLoad', function(e, data) {
})
.on('click', 'a.crm-option-edit-link', function() {
- var link = $(this);
+ var
+ link = $(this),
+ optionsChanged = false;
CRM.loadForm(this.href, {openInline: 'a:not("[href=#], .no-popup")'})
- // Lots of things can happen once the form opens, this is the only event we can really rely on
+ .on('crmFormSuccess', function() {
+ optionsChanged = true;
+ })
.on('dialogclose', function() {
- link.trigger('crmOptionsEdited');
- var $elects = $('select[data-option-edit-path="' + link.data('option-edit-path') + '"]');
- if ($elects.data('api-entity') && $elects.data('api-field')) {
- CRM.api3($elects.data('api-entity'), 'getoptions', {sequential: 1, field: $elects.data('api-field')})
- .done(function(data) {
- CRM.utils.setOptions($elects, data.values);
- });
+ if (optionsChanged) {
+ link.trigger('crmOptionsEdited');
+ var $elects = $('select[data-option-edit-path="' + link.data('option-edit-path') + '"]');
+ if ($elects.data('api-entity') && $elects.data('api-field')) {
+ CRM.api3($elects.data('api-entity'), 'getoptions', {sequential: 1, field: $elects.data('api-field')})
+ .done(function (data) {
+ CRM.utils.setOptions($elects, data.values);
+ });
+ }
}
});
return false;