From 1283a5655156695982af8d61b7fc57eb603be7d6 Mon Sep 17 00:00:00 2001 From: eileen Date: Sun, 4 Aug 2013 20:15:19 +1200 Subject: [PATCH] CRM-13148 partial move of js functions out of the tpl into the js file --- CRM/Batch/Form/Entry.php | 1 + templates/CRM/Batch/Form/Entry.js | 222 +++++++++++++++++++++++++++++ templates/CRM/Batch/Form/Entry.tpl | 221 ---------------------------- 3 files changed, 223 insertions(+), 221 deletions(-) diff --git a/CRM/Batch/Form/Entry.php b/CRM/Batch/Form/Entry.php index a4b137f762..70d47d2606 100644 --- a/CRM/Batch/Form/Entry.php +++ b/CRM/Batch/Form/Entry.php @@ -107,6 +107,7 @@ class CRM_Batch_Form_Entry extends CRM_Core_Form { $this->_profileId = CRM_Batch_BAO_Batch::getProfileId($this->_batchInfo['type_id']); } CRM_Core_Resources::singleton() + ->addScriptFile('civicrm', 'templates/CRM/Batch/Form/Entry.js') ->addSetting(array('batch' => array('type_id' => $this->_batchInfo['type_id']))) ->addSetting(array('setting' => array('monetaryThousandSeparator' => CRM_Core_Config::singleton()->monetaryThousandSeparator))) ->addSetting(array('setting' => array('monetaryDecimalPoint' => CRM_Core_Config::singleton()->monetaryDecimalPoint))); diff --git a/templates/CRM/Batch/Form/Entry.js b/templates/CRM/Batch/Form/Entry.js index e69de29bb2..0558e32992 100644 --- a/templates/CRM/Batch/Form/Entry.js +++ b/templates/CRM/Batch/Form/Entry.js @@ -0,0 +1,222 @@ +//@todo functions partially moved from tpl but still need an enclosure etc +function setPaymentBlock(form, memType) { + var rowID = form.closest('div.crm-grid-row').attr('entity_id'); + var dataUrl = CRM.url('civicrm/ajax/memType'); + + if (!memType) { + memType = cj('select[id="field_' + rowID + '_membership_type_1"]').val(); + } + + cj.post(dataUrl, {mtype: memType}, function (data) { + cj('#field_' + rowID + '_financial_type').val(data.financial_type_id); + cj('#field_' + rowID + '_total_amount').val(data.total_amount).change(); + }, 'json'); +} + +function hideSendReceipt() { + cj('input[id*="][send_receipt]"]').each(function () { + showHideReceipt(cj(this)); + }); +} + +function showHideReceipt(elem) { + var rowID = elem.closest('div.crm-grid-row').attr('entity_id'); + if (elem.prop('checked')) { + cj('.crm-batch-receipt_date-' + rowID).hide(); + } + else { + cj('.crm-batch-receipt_date-' + rowID).show(); + } +} + +function validateRow() { + cj('.selector-rows').each(function () { + checkColumns(cj(this)); + }); +} + +function checkColumns(parentRow) { + // show valid row icon if all required data is field + var validRow = 0; + var inValidRow = 0; + var errorExists = false; + var rowID = parentRow.closest('div.crm-grid-row').attr('entity_id'); + + parentRow.find('div .required').each(function () { + //special case to handle contact autocomplete select + var fieldId = cj(this).attr('id'); + if (fieldId.substring(0, 16) == 'primary_contact_') { + // if display value is set then make sure we also check if contact id is set + if (!cj(this).val()) { + inValidRow++; + } + else { + if (cj(this).val() && !cj('input[name="primary_contact_select_id[' + rowID + ']"]').val()) { + inValidRow++; + errorExists = true; + } + } + } + else { + if (!cj(this).val()) { + inValidRow++; + } + else { + if (cj(this).hasClass('error') && !cj(this).hasClass('valid')) { + errorExists = true; + } + else { + validRow++; + } + } + } + }); + + // this means user has entered some data + if (errorExists) { + parentRow.find("div:first span").prop('class', 'batch-invalid'); + } + else { + if (inValidRow == 0 && validRow > 0) { + parentRow.find("div:first span").prop('class', 'batch-valid'); + } + else { + parentRow.find("div:first span").prop('class', 'batch-edit'); + } + } +} + +function calculateActualTotal() { + var total = 0; + cj('input[id*="_total_amount"]').each(function () { + if (cj(this).val()) { + total += parseFloat(cj(this).val()); + } + }); + + cj('.batch-actual-total').html(formatMoney(total)); +} + +//money formatting/localization +function formatMoney(amount) { + var c = 2; + var t = CRM.setting.monetaryThousandSeparator; + var d = CRM.setting.monetaryDecimalPoint; + + var n = amount, + c = isNaN(c = Math.abs(c)) ? 2 : c, + d = d == undefined ? "," : d, + t = t == undefined ? "." : t, s = n < 0 ? "-" : "", + i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", + j = (j = i.length) > 3 ? j % 3 : 0; + + return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : ""); +} + +/** + * This function is use to setdefault elements via ajax + * + * @param fname string field name + * @return void + */ +function setFieldValue(fname, fieldValue, blockNo) { + var elementId = cj('[name="field[' + blockNo + '][' + fname + ']"]'); + + if (elementId.length == 0) { + elementId = cj('input[type=checkbox][name^="field[' + blockNo + '][' + fname + ']"][type!=hidden]'); + } + + // if element not found than return + if (elementId.length == 0) { + return; + } + + //check if it is date element + var isDateElement = elementId.attr('format'); + + // check if it is wysiwyg element + var editor = elementId.attr('editor'); + + //get the element type + var elementType = elementId.attr('type'); + + // set the value for all the elements, elements needs to be handled are + // select, checkbox, radio, date fields, text, textarea, multi-select + // wysiwyg editor, advanced multi-select ( to do ) + if (elementType == 'radio') { + if (fieldValue) { + elementId.filter("[value=" + fieldValue + "]").prop("checked", true); + } + else { + elementId.removeProp('checked'); + } + } + else { + if (elementType == 'checkbox') { + // handle checkbox + elementId.removeProp('checked'); + if (fieldValue) { + cj.each(fieldValue, function (key, value) { + cj('input[name="field[' + blockNo + '][' + fname + '][' + value + ']"]').prop('checked', true); + }); + } + } + else { + if (editor) { + switch (editor) { + case 'ckeditor': + var elemtId = elementId.attr('id'); + oEditor = CKEDITOR.instances[elemtId]; + oEditor.setData(htmlContent); + break; + case 'tinymce': + var elemtId = element.attr('id'); + tinyMCE.get(elemtId).setContent(htmlContent); + break; + case 'joomlaeditor': + // TO DO + case 'drupalwysiwyg': + // TO DO + default: + elementId.val(fieldValue); + } + } + else { + elementId.val(fieldValue); + } + } + } + + // since we use different display field for date we also need to set it. + // also check for date time field and set the value correctly + if (isDateElement && fieldValue) { + setDateFieldValue(fname, fieldValue, blockNo) + } +} + +function setDateFieldValue(fname, fieldValue, blockNo) { + var dateValues = fieldValue.split(' '); + + var actualDateElement = cj('#field_' + blockNo + '_' + fname); + var date_format = actualDateElement.attr('format'); + var altDateFormat = 'yy-mm-dd'; + + var actualDateValue = cj.datepicker.parseDate(altDateFormat, dateValues[0]); + + // format date according to display field + var hiddenDateValue = cj.datepicker.formatDate('mm/dd/yy', actualDateValue); + + actualDateElement.val(hiddenDateValue); + + var displayDateValue = actualDateElement.val(); + if (date_format != 'mm/dd/yy') { + displayDateValue = cj.datepicker.formatDate(date_format, actualDateValue); + } + + cj('#field_' + blockNo + '_' + fname + '_display').val(displayDateValue); + + // need to fix time formatting + if (dateValues[1]) { + cj('#field_' + blockNo + '_' + fname + '_time').val(dateValues[1].substr(0, 5)); + } +} diff --git a/templates/CRM/Batch/Form/Entry.tpl b/templates/CRM/Batch/Form/Entry.tpl index 7cfbfeb742..2eecc67b99 100644 --- a/templates/CRM/Batch/Form/Entry.tpl +++ b/templates/CRM/Batch/Form/Entry.tpl @@ -169,119 +169,6 @@ cj(function () { }); -function setPaymentBlock(form, memType) { - var rowID = form.closest('div.crm-grid-row').attr('entity_id'); - var dataUrl = CRM.url('civicrm/ajax/memType'); - - if (!memType) { - memType = cj('select[id="field_' + rowID + '_membership_type_1"]').val(); - } - - cj.post(dataUrl, {mtype: memType}, function (data) { - cj('#field_' + rowID + '_financial_type').val(data.financial_type_id); - cj('#field_' + rowID + '_total_amount').val(data.total_amount).change(); - }, 'json'); -} - -function hideSendReceipt() { - cj('input[id*="][send_receipt]"]').each(function () { - showHideReceipt(cj(this)); - }); -} - -function showHideReceipt(elem) { - var rowID = elem.closest('div.crm-grid-row').attr('entity_id'); - if (elem.prop('checked')) { - cj('.crm-batch-receipt_date-' + rowID).hide(); - } - else { - cj('.crm-batch-receipt_date-' + rowID).show(); - } -} - -function validateRow() { - cj('.selector-rows').each(function () { - checkColumns(cj(this)); - }); -} - -function checkColumns(parentRow) { - // show valid row icon if all required data is field - var validRow = 0; - var inValidRow = 0; - var errorExists = false; - var rowID = parentRow.closest('div.crm-grid-row').attr('entity_id'); - - parentRow.find('div .required').each(function () { - //special case to handle contact autocomplete select - var fieldId = cj(this).attr('id'); - if (fieldId.substring(0, 16) == 'primary_contact_') { - // if display value is set then make sure we also check if contact id is set - if (!cj(this).val()) { - inValidRow++; - } - else { - if (cj(this).val() && !cj('input[name="primary_contact_select_id[' + rowID + ']"]').val()) { - inValidRow++; - errorExists = true; - } - } - } - else { - if (!cj(this).val()) { - inValidRow++; - } - else { - if (cj(this).hasClass('error') && !cj(this).hasClass('valid')) { - errorExists = true; - } - else { - validRow++; - } - } - } - }); - - // this means user has entered some data - if (errorExists) { - parentRow.find("div:first span").prop('class', 'batch-invalid'); - } - else { - if (inValidRow == 0 && validRow > 0) { - parentRow.find("div:first span").prop('class', 'batch-valid'); - } - else { - parentRow.find("div:first span").prop('class', 'batch-edit'); - } - } -} - -function calculateActualTotal() { - var total = 0; - cj('input[id*="_total_amount"]').each(function () { - if (cj(this).val()) { - total += parseFloat(cj(this).val()); - } - }); - - cj('.batch-actual-total').html(formatMoney(total)); -} - -//money formatting/localization -function formatMoney(amount) { - var c = 2; - var t = CRM.setting.monetaryThousandSeparator; - var d = CRM.setting.monetaryDecimalPoint; - - var n = amount, - c = isNaN(c = Math.abs(c)) ? 2 : c, - d = d == undefined ? "," : d, - t = t == undefined ? "." : t, s = n < 0 ? "-" : "", - i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", - j = (j = i.length) > 3 ? j % 3 : 0; - - return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : ""); -} function updateContactInfo(blockNo, prefix) { var contactHiddenElement = 'input[name="' + prefix + 'contact_select_id[' + blockNo + ']"]'; @@ -352,114 +239,6 @@ function updateContactInfo(blockNo, prefix) { }); } -/** - * This function is use to setdefault elements via ajax - * - * @param fname string field name - * @return void - */ -function setFieldValue(fname, fieldValue, blockNo) { - var elementId = cj('[name="field[' + blockNo + '][' + fname + ']"]'); - - if (elementId.length == 0) { - elementId = cj('input[type=checkbox][name^="field[' + blockNo + '][' + fname + ']"][type!=hidden]'); - } - - // if element not found than return - if (elementId.length == 0) { - return; - } - - //check if it is date element - var isDateElement = elementId.attr('format'); - - // check if it is wysiwyg element - var editor = elementId.attr('editor'); - - //get the element type - var elementType = elementId.attr('type'); - - // set the value for all the elements, elements needs to be handled are - // select, checkbox, radio, date fields, text, textarea, multi-select - // wysiwyg editor, advanced multi-select ( to do ) - if (elementType == 'radio') { - if (fieldValue) { - elementId.filter("[value=" + fieldValue + "]").prop("checked", true); - } - else { - elementId.removeProp('checked'); - } - } - else { - if (elementType == 'checkbox') { - // handle checkbox - elementId.removeProp('checked'); - if (fieldValue) { - cj.each(fieldValue, function (key, value) { - cj('input[name="field[' + blockNo + '][' + fname + '][' + value + ']"]').prop('checked', true); - }); - } - } - else { - if (editor) { - switch (editor) { - case 'ckeditor': - var elemtId = elementId.attr('id'); - oEditor = CKEDITOR.instances[elemtId]; - oEditor.setData(htmlContent); - break; - case 'tinymce': - var elemtId = element.attr('id'); - tinyMCE.get(elemtId).setContent(htmlContent); - break; - case 'joomlaeditor': - // TO DO - case 'drupalwysiwyg': - // TO DO - default: - elementId.val(fieldValue); - } - } - else { - elementId.val(fieldValue); - } - } - } - - // since we use different display field for date we also need to set it. - // also check for date time field and set the value correctly - if (isDateElement && fieldValue) { - setDateFieldValue(fname, fieldValue, blockNo) - } -} - -function setDateFieldValue(fname, fieldValue, blockNo) { - var dateValues = fieldValue.split(' '); - - var actualDateElement = cj('#field_' + blockNo + '_' + fname); - var date_format = actualDateElement.attr('format'); - var altDateFormat = 'yy-mm-dd'; - - var actualDateValue = cj.datepicker.parseDate(altDateFormat, dateValues[0]); - - // format date according to display field - var hiddenDateValue = cj.datepicker.formatDate('mm/dd/yy', actualDateValue); - - actualDateElement.val(hiddenDateValue); - - var displayDateValue = actualDateElement.val(); - if (date_format != 'mm/dd/yy') { - displayDateValue = cj.datepicker.formatDate(date_format, actualDateValue); - } - - cj('#field_' + blockNo + '_' + fname + '_display').val(displayDateValue); - - // need to fix time formatting - if (dateValues[1]) { - cj('#field_' + blockNo + '_' + fname + '_time').val(dateValues[1].substr(0, 5)); - } -} - {/literal} -- 2.25.1