squareup.twig (8262B)
1 {% if sandbox_message %} 2 <div class="alert alert-warning"> 3 <i class="fa fa-exclamation-circle"></i> {{ sandbox_message }} 4 </div> 5 {% endif %} 6 <div id="squareup-notification"> 7 <div class="text-center alert alert-info"><i class="fa fa-circle-o-notch fa-spin"></i> {{ text_loading }}</div> 8 </div> 9 <form class="form-horizontal" action="{{ action }}" method="POST" id="squareup_card_details_form" style="display: none;"> 10 <fieldset> 11 <legend>{{ text_card_details }}</legend> 12 {% if cards %} 13 <div class="form-group"> 14 <label class="col-sm-2 control-label" for="squareup_select_card">{{ text_saved_card }}</label> 15 <div class="col-sm-10"> 16 <select class="form-control" name="squareup_select_card" id="squareup_select_card"> 17 <option selected value>{{ text_new_card }}</option> 18 {% for card in cards %} 19 <option value="{{ card.id }}">{{ card.text }}</option> 20 {% endfor %} 21 </select> 22 </div> 23 </div> 24 {% endif %} 25 </fieldset> 26 <fieldset id="hide-card-details"> 27 <div class="form-group"> 28 <label class="col-sm-2 control-label" for="id_card_number">{{ text_card_number }}</label> 29 <div class="col-sm-10"><div id="id_card_number"></div></div> 30 </div> 31 <div class="form-group"> 32 <label class="col-sm-2 control-label" for="id_card_expiry">{{ text_card_expiry }}</label> 33 <div class="col-sm-10"><div id="id_card_expiry"></div></div> 34 </div> 35 <div class="form-group"> 36 <label class="col-sm-2 control-label" for="id_cvc">{{ text_card_cvc }}</label> 37 <div class="col-sm-10"><div id="id_cvc"></div></div> 38 </div> 39 <div class="form-group"> 40 <label class="col-sm-2 control-label" for="id_card_zip_code">{{ text_card_zip }}</label> 41 <div class="col-sm-10"><div id="id_card_zip_code"></div></div> 42 </div> 43 {% if is_logged %} 44 <div class="form-group"> 45 <label class="col-sm-2 control-label" for="squareup_save_card">{{ text_card_save }}</label> 46 <div class="col-sm-10"> 47 <input type="checkbox" id="squareup_save_card" value="1" name="squareup_save_card"/> 48 </div> 49 </div> 50 {% endif %} 51 </fieldset> 52 <div class="buttons"> 53 <div class="pull-right"> 54 <input type="button" value="{{ button_confirm }}" id="button-confirm-order" data-loading-text="{{ text_loading }}" class="btn btn-primary"> 55 </div> 56 </div> 57 <input type="hidden" name="squareup_nonce" id="squareup_nonce"/> 58 </form> 59 <style> 60 .control-label { 61 cursor: pointer; 62 } 63 64 .form-control--focus { 65 /* Indicates how form inputs should appear when they have focus */ 66 outline: 5px auto rgb(59, 153, 252); 67 } 68 .form-control--error { 69 /* Indicates how form inputs should appear when they contain invalid values */ 70 outline: 5px auto rgb(255, 97, 97); 71 } 72 73 #squareup_save_card { 74 margin-top: 10px; 75 cursor: pointer; 76 } 77 </style> 78 <script type="text/javascript"> 79 $(document).ready(function() { 80 var app_id = '{{ app_id }}'; 81 82 var paymentFormSettings = { 83 applicationId: app_id, 84 inputClass: 'form-control', 85 inputStyles: [{ 86 fontSize: '15px' 87 }], 88 cardNumber: { 89 elementId: 'id_card_number', 90 placeholder: '{{ text_card_placeholder }}' 91 }, 92 cvv: { 93 elementId: 'id_cvc', 94 placeholder: '{{ text_cvv }}' 95 }, 96 expirationDate: { 97 elementId: 'id_card_expiry', 98 placeholder: '{{ text_expiry }}' 99 }, 100 postalCode: { 101 elementId: 'id_card_zip_code' 102 }, 103 callbacks: { 104 // Called when the SqPaymentForm completes a request to generate a card 105 // nonce, even if the request failed because of an error. 106 cardNonceResponseReceived: function(errors, nonce, cardData) { 107 if (errors) { 108 var message = ''; 109 110 errors.forEach(function(error) { 111 message += error.message + '. '; 112 }); 113 114 squareupError(message); 115 } else { 116 // No errors occurred. Extract the card nonce. 117 $('#squareup_nonce').val(nonce); 118 submitForm(); 119 } 120 }, 121 122 unsupportedBrowserDetected: function() { 123 squareupError("{{ error_browser_not_supported }}"); 124 // Fill in this callback to alert buyers when their browser is not supported. 125 }, 126 127 paymentFormLoaded: function() { 128 // Fill in this callback to perform actions after the payment form is 129 // done loading (such as setting the postal code field programmatically). 130 paymentForm.setPostalCode('{{ payment_zip }}'); 131 132 $('#squareup-notification').empty(); 133 $('#squareup_card_details_form').slideDown(); 134 } 135 } 136 }; 137 138 function submitForm() { 139 var form = '#squareup_card_details_form'; 140 141 $.ajax({ 142 url : $(form).attr('action'), 143 dataType : 'json', 144 type : $(form).attr('method'), 145 data : $(form).serialize(), 146 beforeSend : function() { 147 $('#button-confirm-order').button('loading'); 148 }, 149 success : function(json) { 150 if (json.error) { 151 squareupError(json.error); 152 } else if (json.redirect) { 153 document.location = json.redirect; 154 } 155 }, 156 error : function(jqXHR, ajaxSettings, thrownError) { 157 squareupError(thrownError); 158 }, 159 complete : function() { 160 $('#button-confirm-order').button('reset'); 161 } 162 }); 163 } 164 165 function onScriptLoad() { 166 paymentForm = new SqPaymentForm(paymentFormSettings); 167 paymentForm.build(); 168 } 169 170 function onConfirmCheckout() { 171 if ($('#squareup_select_card').val()) { 172 submitForm(); 173 } else { 174 paymentForm.requestCardNonce(); 175 } 176 } 177 178 function squareupError(error) { 179 $('#button-confirm-order').button('reset'); 180 181 $('#squareup-notification').html('<div class="alert alert-danger"><button type="button" class="close" data-dismiss="alert" aria-label="X"><span aria-hidden="true">×</span></button><i class="fa fa-exclamation-circle"></i> ' + error + '</div>'); 182 } 183 184 function toggleAjaxSetup(status) { 185 $.ajaxSetup({ 186 cache: status 187 }); 188 } 189 190 function initSquareup(init_ajax_setup) { 191 toggleAjaxSetup(false); 192 193 var script = document.createElement('script'); 194 script.type="text/javascript"; 195 $("head").append(script); 196 script.onload = onScriptLoad; 197 script.src="{{ squareup_js_api }}"; 198 script.async = true; 199 toggleAjaxSetup(init_ajax_setup); 200 } 201 202 $('#button-confirm-order').unbind().click(function(e) { 203 e.preventDefault(); 204 e.stopPropagation(); 205 206 $('#squareup-notification').empty(); 207 $('#button-confirm-order').button('loading'); 208 209 onConfirmCheckout(); 210 }); 211 212 $('#squareup_select_card').change(function() { 213 if ($(this).val()) { 214 $('#hide-card-details').slideUp(); 215 } else { 216 $('#hide-card-details').slideDown(); 217 } 218 }); 219 220 initSquareup($.ajaxSetup().cache); 221 }); 222 </script>