"use strict";
var selected = 0,
form = 'form.crm-search-form',
- active = 'a.button, a.action-item:not(.crm-enable-disable), a.crm-popup';
+ active = 'a.action-item:not(.crm-enable-disable), a.crm-popup';
function clearTaskMenu() {
$('select#task', form).val('').select2('val', '').prop('disabled', true).select2('disable');
}
function clearSelections(e) {
+ /* jshint validthis: true */
if (selected) {
var $form = $(this).closest('form');
$('input.select-row, input.select-rows', $form).prop('checked', false).closest('tr').removeClass('crm-row-selected');
}
// Master checkbox
else if ($el.hasClass('select-rows')) {
- params.name = $('input.select-row').map(function() {return $(this).attr('id')}).get().join('-');
+ params.name = $('input.select-row').map(function() {return $(this).attr('id');}).get().join('-');
}
}
- $.getJSON(url, params, function(data) {
+ $.post(url, params, function(data) {
if (data && data.getCount !== undefined) {
selected = data.getCount;
displayCount();
enableTaskMenu();
}
- });
+ }, 'json');
}
/**
$('#crm-main-content-wrapper').crmSnippet({url: location}).crmSnippet('refresh');
}
- // Handle user interactions with search results
- $('#crm-container')
- // When initially loading and reloading (paging) the results
- .on('crmLoad', function(e) {
- if ($(e.target).is('#crm-container') || $(e.target).is('#crm-main-content-wrapper')) {
+ /**
+ * When initially loading and reloading (paging) the results
+ */
+ function initForm() {
+ clearTaskMenu();
+ if (usesAjax()) {
+ selected = parseInt($('label[for*=ts_sel] span', form).text(), 10);
+ } else {
+ selected = countCheckboxes();
+ displayCount();
+ }
+ enableTaskMenu();
+ }
+
+ $(function() {
+ initForm();
+
+ // Focus first search field
+ $('.crm-form-text:input:visible:first', 'form.crm-search-form').focus();
+
+ // Handle user interactions with search results
+ $('#crm-container')
+ // When toggling between "all records" and "selected records only"
+ .on('change', '[name=radio_ts]', function() {
clearTaskMenu();
- if (usesAjax()) {
- selected = parseInt($('label[for*=ts_sel] span', form).text(), 10);
- } else {
- selected = countCheckboxes();
- displayCount();
- }
enableTaskMenu();
- }
- })
- // When toggling between "all records" and "selected records only"
- .on('change', '[name=radio_ts]', function() {
- clearTaskMenu();
- enableTaskMenu();
- })
- .on('click', 'input[name=radio_ts][value=ts_all]', clearSelections)
- // When making a selection
- .on('click', 'input.select-row, input.select-rows, a.crm-selection-reset', function(event) {
- var $el = $(this),
- $form = $el.closest('form'),
- single = $el.is('input.select-row');
- clearTaskMenu();
- $('input[name=radio_ts][value=ts_sel]', $form).prop('checked', true);
- if (!usesAjax()) {
- if (single) {
- selected = countCheckboxes();
+ })
+ .on('click', 'input[name=radio_ts][value=ts_all]', clearSelections)
+ // When making a selection
+ .on('click', 'input.select-row, input.select-rows, a.crm-selection-reset', function(event) {
+ var $el = $(this),
+ $form = $el.closest('form'),
+ single = $el.is('input.select-row');
+ clearTaskMenu();
+ $('input[name=radio_ts][value=ts_sel]', $form).prop('checked', true);
+ if (!usesAjax()) {
+ if (single) {
+ selected = countCheckboxes();
+ } else {
+ selected = $el.is(':checked') ? $('input.select-row', $form).length : 0;
+ }
+ displayCount();
+ enableTaskMenu();
} else {
- selected = $el.is(':checked') ? $('input.select-row', $form).length : 0;
+ phoneHome(single, $el, event);
}
- displayCount();
- enableTaskMenu();
- } else {
- phoneHome(single, $el, event);
- }
- })
- // When selecting a task
- .on('change', 'select#task', function() {
- var $form = $(this).closest('form'),
+ })
+ // When selecting a task
+ .on('change', 'select#task', function(e) {
+ var $form = $(this).closest('form'),
$go = $('input.crm-search-go-button', $form);
- if (1) {
- $go.click();
- }
- // The following code can load the task in a popup, however not all tasks function correctly with this
- // So it's disabled pending a per-task opt-in mechanism
- else {
- var data = $form.serialize() + '&' + $go.attr('name') + '=' + $go.attr('value');
- var url = $form.attr('action');
- url += (url.indexOf('?') < 0 ? '?' : '&') + 'snippet=json';
- clearTaskMenu();
- $.post(url, data, function(data) {
- CRM.loadForm(data.userContext).on('crmFormSuccess', refresh);
- enableTaskMenu();
- }, 'json');
- }
- });
+ var $selectedOption = $(this).find(':selected');
+ if (!$selectedOption.val()) {
+ // do not blank refresh the empty option.
+ return;
+ }
+ if ($selectedOption.data('is_confirm')) {
+ var confirmed = false;
+ var refresh_fields = $selectedOption.data('confirm_refresh_fields');
+ var $message = '<tr>' + (($selectedOption.data('confirm_message') !== undefined) ? $selectedOption.data('confirm_message') : '') + '</tr>';
+ if (refresh_fields === undefined) {
+ refresh_fields = {};
+ }
+ $.each(refresh_fields, function (refreshIndex, refreshValue) {
+ var $refresh_field = $(refreshValue.selector);
+ var prependText = (refreshValue.prepend !== undefined) ? refreshValue.prepend : '';
+ var existingInput = $refresh_field.find('input').val();
+ $message = $message + '<tr>' + $refresh_field.html().replace(existingInput, prependText + existingInput) + '</tr>';
+ });
- // Add a specialized version of livepage functionality
- $('#crm-main-content-wrapper')
- // Open action links in a popup
- .off('.crmLivePage')
- .on('click.crmLivePage', active, CRM.popup)
- .on('crmPopupFormSuccess.crmLivePage', active, refresh);
+ CRM.confirm({
+ title: $selectedOption.data('confirm_title') ? $selectedOption.data('confirm_title') : ts('Confirm action'),
+ message: '<table class="form-layout">' + $message + '</table>'
+ })
+ .on('crmConfirm:yes', function() {
+ confirmed = true;
+ $.each(refresh_fields, function (refreshIndex, refreshValue) {
+ $('#' + refreshIndex).val($('.crm-confirm #' + refreshIndex).val());
+ });
+ $go.click();
+ })
+ .on('crmConfirm:no', function() {
+ $('#task').val('').change();
+ return;
+ });
+ }
+ else if (!$(this).find(':selected').data('supports_modal')) {
+ $go.click();
+ $('#task').val('').select2('val', '');
+ }
+ // The following code can load the task in a popup, however not all tasks function correctly with this
+ // So it's a per-task opt-in mechanism.
+ else {
+ var data = $form.serialize() + '&' + $go.attr('name') + '=' + $go.attr('value');
+ var url = $form.attr('action');
+ url += (url.indexOf('?') < 0 ? '?' : '&') + 'snippet=json';
+ clearTaskMenu();
+ $.post(url, data, function(data) {
+ CRM.loadForm(data.userContext).on('crmFormSuccess', refresh);
+ enableTaskMenu();
+ }, 'json');
+ }
+ });
+
+ // Add a specialized version of livepage functionality
+ $('#crm-main-content-wrapper')
+ .on('crmLoad', function(e) {
+ if ($(e.target).is(this)) {
+ initForm();
+ }
+ })
+ // Open action links in a popup
+ .off('.crmLivePage')
+ .on('click.crmLivePage', active, CRM.popup)
+ .on('crmPopupFormSuccess.crmLivePage', active, refresh);
+ });
})(CRM.$, CRM._);