* @param invert Boolean - if true, we HIDE target on value match; if false, we SHOW target on value match
*/
function showHideByValue(trigger_field_id, trigger_value, target_element_id, target_element_type, field_type, invert) {
- if (target_element_type == null) {
- var target_element_type = 'block';
- }
- else {
- if (target_element_type == 'table-row') {
- var target_element_type = '';
- }
- }
if (field_type == 'select') {
var trigger = trigger_value.split("|");
/**
* Populate a select list, overwriting the existing options except for the placeholder.
- * @param $el jquery collection - 1 or more select elements
+ * @param select jquery selector - 1 or more select elements
* @param options array in format returned by api.getoptions
* @param placeholder string
*/
- CRM.utils.setOptions = function($el, options, placeholder) {
- $el.each(function() {
+ CRM.utils.setOptions = function(select, options, placeholder) {
+ $(select).each(function() {
var
$elect = $(this),
val = $elect.val() || [],
- multiple = $el.is('[multiple]'),
opts = placeholder || placeholder === '' ? '' : '[value!=""]',
newOptions = '',
theme = function(options) {
$elect.find('option' + opts).remove();
theme(options);
if (typeof placeholder === 'string') {
- if (multiple) {
- $el.attr('placeholder', placeholder);
+ if ($elect.is('[multiple]')) {
+ select.attr('placeholder', placeholder);
} else {
newOptions = '<option value="">' + placeholder + '</option>' + newOptions;
}
if ($el.data('create-links') && entity.toLowerCase() === 'contact') {
selectParams.formatInputTooShort = function() {
var txt = $el.data('select-params').formatInputTooShort || $.fn.select2.defaults.formatInputTooShort.call(this);
- if ($el.data('create-links') && CRM.profileCreate) {
+ if ($el.data('create-links') && CRM.profileCreate && CRM.profileCreate.length) {
txt += ' ' + ts('or') + '<br />' + formatSelect2CreateLinks($el);
}
return txt;
$el.crmSelect2($.extend(settings, $el.data('select-params'), selectParams))
.on('select2-selecting.crmEntity', function(e) {
if (e.val === "0") {
+ // Create a new term
e.object.label = e.object.term;
CRM.api3(entity, 'create', $.extend({name: e.object.term}, $el.data('api-params').params || {}))
.done(function(created) {
var
- multiple = !!$el.data('select-params').multiple,
val = $el.select2('val'),
data = $el.select2('data'),
item = {id: created.id, label: e.object.term};
$el.addClass('modal-dialog');
$('body').css({overflow: 'hidden'});
}
- $el.parent().find('.ui-dialog-titlebar-close').attr('title', ts('Close'));
// Add resize button
if ($el.parent().hasClass('crm-container') && $el.dialog('option', 'resizable')) {
$el.parent().find('.ui-dialog-titlebar').append($('<button class="crm-dialog-titlebar-resize ui-dialog-titlebar-close" title="'+ts('Toggle fullscreen')+'" style="right:2em;"/>').button({icons: {primary: 'ui-icon-newwin'}, text: false}));
$el.dialog('option', $el.data('origSize'));
$el.data('origSize', null);
} else {
+ var menuHeight = $('#civicrm-menu').outerHeight();
$el.data('origSize', {
- position: {my: 'center', at: 'center', of: window},
+ position: {my: 'center', at: 'center center+' + (menuHeight / 2), of: window},
width: $el.dialog('option', 'width'),
height: $el.dialog('option', 'height')
});
- var menuHeight = $('#civicrm-menu').height();
$el.dialog('option', {width: '100%', height: ($(window).height() - menuHeight), position: {my: "top", at: "top+"+menuHeight, of: window}});
}
e.preventDefault();
}
advmultiselectResize();
- $(window).resize(function () {
- advmultiselectResize();
- });
+ $(window).resize(advmultiselectResize);
$.fn.crmtooltip = function () {
$(document)
* @see https://wiki.civicrm.org/confluence/display/CRMDOC/Notification+Reference
*/
CRM.confirm = function (options) {
- var dialog, settings = {
+ var dialog, url, msg, buttons = [], settings = {
title: ts('Confirm'),
message: ts('Are you sure you want to continue?'),
+ url: null,
width: 'auto',
modal: true,
resizable: false,
};
$.extend(settings, ($.isFunction(options) ? arguments[1] : options) || {});
if (!settings.buttons && $.isPlainObject(settings.options)) {
- settings.buttons = [];
- $.each(settings.options, function(key, label) {
- settings.buttons.push({
+ $.each(settings.options, function(op, label) {
+ buttons.push({
text: label,
+ 'data-op': op,
+ icons: {primary: op === 'no' ? 'ui-icon-close' : 'ui-icon-check'},
click: function() {
- var event = $.Event('crmConfirm:' + key);
+ var event = $.Event('crmConfirm:' + op);
$(this).trigger(event);
if (!event.isDefaultPrevented()) {
dialog.dialog('close');
}
});
});
+ // Order buttons so that "no" goes on the right-hand side
+ settings.buttons = _.sortBy(buttons, 'data-op').reverse();
}
- dialog = $('<div class="crm-confirm-dialog"></div>').html(settings.message);
+ url = settings.url;
+ msg = url ? '' : settings.message;
delete settings.options;
delete settings.message;
+ delete settings.url;
+ dialog = $('<div class="crm-confirm-dialog"></div>').html(msg || '').dialog(settings);
if ($.isFunction(options)) {
dialog.on('crmConfirm:yes', options);
}
- return dialog.dialog(settings).trigger('crmLoad');
+ if (url) {
+ CRM.loadPage(url, {target: dialog});
+ }
+ else {
+ dialog.trigger('crmLoad');
+ }
+ return dialog;
};
/** provides a local copy of ts for a domain */
});
}
- // Preprocess all cj ajax calls to display messages
+ /**
+ * Improve blockUI when used with jQuery dialog
+ */
+ var originalBlock = $.fn.block,
+ originalUnblock = $.fn.unblock;
+
+ $.fn.block = function(opts) {
+ if ($(this).is('.ui-dialog-content')) {
+ originalBlock.call($(this).parents('.ui-dialog'), opts);
+ return $(this);
+ }
+ return originalBlock.call(this, opts);
+ };
+ $.fn.unblock = function(opts) {
+ if ($(this).is('.ui-dialog-content')) {
+ originalUnblock.call($(this).parents('.ui-dialog'), opts);
+ return $(this);
+ }
+ return originalUnblock.call(this, opts);
+ };
+
+ // Preprocess all CRM ajax calls to display messages
$(document).ajaxSuccess(function(event, xhr, settings) {
try {
if ((!settings.dataType || settings.dataType == 'json') && xhr.responseText) {
CRM.alert(msg.text, msg.title, msg.type, msg.options);
})
}
+ if (response.backtrace) {
+ CRM.console('log', response.backtrace);
+ }
+ if (typeof response.deprecated === 'string') {
+ CRM.console('warn', response.deprecated);
+ }
}
}
- // Suppress errors
+ // Ignore errors thrown by parseJSON
catch (e) {}
});
$(function () {
$.blockUI.defaults.message = null;
+ $.blockUI.defaults.ignoreIfBlocked = true;
+
+ if ($('#crm-container').hasClass('crm-public')) {
+ $.fn.select2.defaults.dropdownCssClass = $.ui.dialog.prototype.options.dialogClass = 'crm-container crm-public';
+ }
// Trigger crmLoad on initial content for consistency. It will also be triggered for ajax-loaded content.
$('.crm-container').trigger('crmLoad');
CRM.confirm({
title: ts('Preview'),
resizable: true,
- message: '<div class="crm-custom-image-popup"><img src=' + $(this).attr('href') + '></div>',
+ message: '<div class="crm-custom-image-popup"><img style="max-width: 100%" src="' + $(this).attr('href') + '"></div>',
options: null
});
e.preventDefault();
/**
* Clientside currency formatting
- * @param value
- * @param format - currency representation of the number 1234.56
+ * @param number value
+ * @param [optional] string format - currency representation of the number 1234.56
* @return string
- * @see CRM_Core_Resources::addCoreResources
*/
var currencyTemplate;
CRM.formatMoney = function(value, format) {
result = sign + (j ? i.substr(0, j) + separator : '') + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + separator) + (2 ? decimal + Math.abs(value - i).toFixed(2).slice(2) : '');
return format.replace(/1.*234.*56/, result);
};
+
+ CRM.console = function(method, title, msg) {
+ if (window.console) {
+ method = $.isFunction(console[method]) ? method : 'log';
+ if (msg === undefined) {
+ return console[method](title);
+ } else {
+ return console[method](title, msg);
+ }
+ }
+ };
})(jQuery, _);