shop.balmet.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

squareup.twig (8262B)


      1 {% if sandbox_message %}
      2     <div class="alert alert-warning">
      3         <i class="fa fa-exclamation-circle"></i>&nbsp;{{ 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>&nbsp;{{ 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">&times;</span></button><i class="fa fa-exclamation-circle"></i>&nbsp;' + 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>