1(function (_, $) { 2 var prevent_scroll = false; 3 (function ($) { 4 var inputs_selector = 'input, textarea, select'; 5 var place_order_buttons_selector = '.cm-checkout-place-order-buttons'; 6 var recalculate_buttons_selector = '.cm-checkout-recalculate-buttons'; 7 var form_values = {}; 8 function changed() { 9 var form = $(this); 10 if (checkFormChanged(form) && form.ceFormValidator('check')) { 11 displayRecalculate(form); 12 } 13 } 14 function displayRecalculate(form) { 15 var changed_groups = { 16 user_data: false 17 }; 18 form.find(inputs_selector).each(function () { 19 var elm = $(this); 20 if (elm.attr('type') != 'hidden' && form_values[elm.attr('name') + '_' + elm.attr('id')] != getVal(elm)) { 21 var elm_name = elm.attr('name'); 22 if (elm_name) { 23 var elm_group = elm_name.split('[')[0]; 24 changed_groups[elm_group] = true; 25 } 26 } 27 }); 28 29 // require recalculate only when user data changed 30 if (changed_groups['user_data']) { 31 form.find(place_order_buttons_selector).hide(); 32 form.find(recalculate_buttons_selector).show(); 33 } 34 } 35 function saveFormValues(form) { 36 form.find(inputs_selector).each(function () { 37 var elm = $(this); 38 form_values[elm.attr('name') + '_' + elm.attr('id')] = getVal(elm); 39 }); 40 } 41 function checkFormChanged(form) { 42 var result = false;
43 form.find(inputs_selector).each(function () { 44 var elm = $(this); 45 if (elm.attr('type') != 'hidden' && form_values[elm.attr('name') + '_' + elm.attr('id')] != getVal(elm)) { 46 result = true; 47 } 48 }); 49 return result; 50 } 51 function getVal(elm) { 52 return ['checkbox', 'radio'].indexOf(elm.attr('type')) != -1 ? elm.is(':checked') : elm.val(); 53 } 54 var methods = { 55 init: function (v1) { 56 var form = $(this); 57 if (form.data('CheckoutRecalculateFormInited')) { 58 return false; 59 } 60 form.data('CheckoutRecalculateFormInited', true); 61 if (!form.find(recalculate_buttons_selector).length) { 62 return true; 63 } 64 saveFormValues(form); 65 form.find(inputs_selector).on('input propertychange change', function (e) { 66 changed.apply(form); 67 }); 68 } 69 }; 70 $.fn.ceCheckoutRecalculateForm = function (method) { 71 if (methods[method]) { 72 return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); 73 } else if (typeof method === 'object' || !method) { 74 return methods.init.apply(this, arguments); 75 } else { 76 $.error('ty.ceCheckoutRecalculateForm: method ' + method + ' does not exist'); 77 } 78 }; 79 })($); 80 $.ceEvent('on', 'ce.commoninit', function (context) { 81 var elm = context.find('.ty-step__title-active'); 82 if (elm.length && !prevent_scroll) { 83 $.scrollToElm(elm); 84 } 85 prevent_scroll = false; 86 elm = context.find('.cm-checkout-recalculate-form'); 87 if (elm.length) { 88 elm.ceCheckoutRecalculateForm(); 89 } 90 $customerNotesText = $('.ty-customer-notes__text'); 91 if (!$customerNotesText.length) { 92 return; 93 } 94 restoreCustomerNote($('.ty-customer-notes__text')); 95 }); 96 $(_.doc).on('click', '.cm-checkout-place-order', function () { 97 var jelm = $(this), 98 form = jelm.parents('form'); 99 if (!form.ceFormValidator('check')) { 100 return; 101 } 102 form.removeClass('cm-ajax').removeClass('cm-ajax-full-render'); 103 $.ceEvent('on', 'ce.formpost_' + $(form).attr('name'), function () { 104 $.toggleStatusBox('show', { 105 statusContent: '<span class="ty-ajax-loading-box-with__text-wrapper">' + _.tr('placing_order') + '</span>', 106 statusClass: 'ty-ajax-loading-box_text_block' 107 }); 108 }); 109 }); 110 $(_.doc).on('click', '.cm-checkout-recalculate', function () { 111 prevent_scroll = true; 112 }); 113 $(_.doc).on('click', '.cm-select-payment', function () { 114 var jelm = $(this), 115 url = jelm.data('caUrl'), 116 result_ids = jelm.data('caResultIds'); 117 $.ceAjax('request', fn_url(url + '&payment_id=' + jelm.val()), { 118 result_ids: result_ids, 119 full_render: true 120 }); 121 }); 122 $.ceEvent('on', 'ce.loadershow', function () { 123 var forms = $('#checkout_steps', _.doc).find('form'); 124 forms.on('submit.checkout_lock', function () { 125 return false; 126 }); 127 forms.find('button[type="submit"]').on('click.checkout_lock', function () { 128 return false; 129 }); 130 }); 131 $.ceEvent('on', 'ce.loaderhide', function () { 132 var forms = $('#checkout_steps', _.doc).find('form'); 133 forms.off('submit.checkout_lock'); 134 forms.find('button[type="submit"]').off('click.checkout_lock'); 135 }); 136 $.ceEvent('on', 'ce.payments_tab_switch', function () { 137 restoreCustomerNote($('.ty-customer-notes__text')); 138 }); 139 var customerNote = ''; 140 function saveCustomerNote($textarea) { 141 customerNote = $textarea.val(); 142 } 143 function restoreCustomerNote($textarea) { 144 $textarea.val(customerNote); 145 } 146 $(_.doc).on('input', '.ty-customer-notes__text', function () { 147 saveCustomerNote($(this)); 148 }); 149})(Tygh, Tygh.$); 150function fn_switch_checkout_type() { 151 var $ = Tygh.$; 152 $.ceNotification('closeAll'); 153 $('#step_one_register').show(); 154 $('#step_one_login').hide(); 155} 156function fn_show_checkout_buttons(type) { 157 var $ = Tygh.$; 158 if (type == 'register') { 159 $('#register_checkout').show(); 160 $('#anonymous_checkout').hide(); 161 } else { 162 $('#register_checkout').hide(); 163 $('#anonymous_checkout').show(); 164 } 165} 166 167/** 168 * This workaround is mainly required for a shipping estimator block to work outside of cart page. 169 * This function cannot be just moved from checkout.js, because some themes ("boilerplate" for example) 170 * might not include cs-cart's native core.js, which will lead to breaking delivery estimation 171 * functionality on the cart page. 172 **/ 173if (window.fn_calculate_total_shipping === undefined) { 174 function fn_calculate_total_shipping(wrapper_id) { 175 var $ = Tygh.$; 176 wrapper_id = wrapper_id || 'shipping_estimation'; 177 var parent = $('#' + wrapper_id); 178 var radio = $('input[type=radio]:checked', parent); 179 var params = []; 180 $.each(radio, function (id, elm) { 181 params.push({ 182 name: elm.name, 183 value: elm.value 184 }); 185 }); 186 var url = fn_url('checkout.shipping_estimation.get_total'); 187 for (var i in params) { 188 url += '&' + params[i]['name'] + '=' + encodeURIComponent(params[i]['value']); 189 } 190 var suffix = parent.find('input[name="suffix"]').first().val(); 191 $.ceAjax('request', url, { 192 result_ids: 'shipping_estimation_total' + suffix, 193 data: { 194 additional_id: parent.find('input[name="additional_id"]').first().val() 195 }, 196 method: 'post' 197 }); 198 } 199} 200function fn_calculate_total_shipping_cost(is_hidden) { 201 is_hidden = is_hidden || false; 202 var params = [], 203 $parents = Tygh.$('#shipping_rates_list'), 204 $radio = Tygh.$('input[type=radio]:checked', $parents), 205 $shippingInfo = Tygh.$('[data-ca-shipping-field]'), 206 url = fn_url('checkout.checkout'), 207 result_ids = 'shipping_rates_list,checkout_info_summary_*,checkout_info_order_info_*', 208 $additional_result_ids = Tygh.$('input[name="additional_result_ids[]"]', $parents); 209 Tygh.$.each($radio, function (id, elm) { 210 params.push({ 211 name: elm.name, 212 value: elm.value 213 }); 214 }); 215 Tygh.$.each($shippingInfo, function (id, elm) { 216 params.push({ 217 name: elm.name, 218 value: elm.value 219 }); 220 }); 221 Tygh.$.each($additional_result_ids, function (id, elm) { 222 result_ids += ',' + $(elm).val(); 223 }); 224 for (var i in params) { 225 url += '&' + params[i]['name'] + '=' + encodeURIComponent(params[i]['value']); 226 } 227 Tygh.$.ceAjax('request', url, { 228 result_ids: result_ids, 229 method: 'get', 230 full_render: true, 231 hidden: is_hidden, 232 callback: function (response) { 233 $.ceEvent('trigger', 'ce.total-shipping-cost.calculated', [response]); 234 } 235 }); 236}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.