shop.balmet.com

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

amazon_listing_advanced.twig (27772B)


      1 {{ header }}{{ column_left }}
      2 <div id="content">
      3   <div class="page-header">
      4     <div class="container-fluid">
      5       <div class="pull-right">
      6         {% if has_listing_errors %}
      7         <a href="{{ url_remove_errors }}" data-toggle="tooltip" title="{{ button_remove_error }}" class="btn btn-danger"><i class="fa fa-reply"></i></a>
      8         {% endif %}
      9         <a href="{{ cancel_url }}" data-toggle="tooltip" title="{{ button_cancel }}" class="btn btn-default"><i class="fa fa-reply"></i></a> </div>
     10       <h1>{{ text_title_advanced }}</h1>
     11       <ul class="breadcrumb">
     12         {% for breadcrumb in breadcrumbs %}
     13         <li><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
     14         {% endfor %}
     15       </ul>
     16     </div>
     17   </div>
     18   <div class="container-fluid">
     19     {% if errors %}
     20     <div class="alert alert-danger alert-dismissible">
     21       <ul>
     22         {% for listing_error in errors %}
     23         <li><i class="fa fa-exclamation-circle"></i> {{ listing_error.message }}</li>
     24         {% endfor %}
     25       </ul>
     26     </div>
     27     {% endif %}
     28     {% if success %}
     29     <div class="alert alert-success alert-dismissible"><i class="fa fa-check-circle"></i> {{ success }}</div>
     30     {% endif %}
     31     <ul class="nav nav-tabs" id="tabs">
     32       <li class="active"><a href="#page-main" data-toggle="tab">{{ tab_main }}</a></li>
     33     </ul>
     34     <form method="POST" id="product_form_advanced" class="form-horizontal">
     35       <input type="hidden" name="upload_after" value="false">
     36       <div class="tab-content" id="tab-content">
     37         <div class="tab-pane active" id="page-main">
     38           <div class="form-group">
     39             <label class="col-sm-2 control-label">{{ entry_product }}</label>
     40             <div class="col-sm-10">
     41               <p><a href="{{ listing_url }}">{{ listing_name }}{% if options is not empty %} : {% endif %}</a>
     42                 {% if options %}
     43                 <select id="openstock_selector" name="optionVar" class="form-control">
     44                   {% set option_selected = false %}
     45                   {% for option in options %}
     46                     {% if option.sku is not empty %}
     47                       <option value="{{ option.sku }}"{% if variation == option.sku %} selected{% set option_selected = true %}{% endif %}>{{ option.combination }}</option>
     48                     {% endif %}
     49                   {% endfor %}
     50                   {% if option_selected == false %}
     51                     <option selected="selected"></option>
     52                   {% endif %}
     53                 </select>
     54                 {% endif %}
     55               </p>
     56             </div>
     57           </div>
     58           <div class="form-group">
     59             <label class="col-sm-2 control-label">{{ entry_marketplace }}</label>
     60             <div class="col-sm-10" id="marketplaces">
     61               {% for mp in marketplaces %}
     62                 <label class="radio-inline">
     63                   {% if saved_marketplaces == false %}
     64                     <input class="marketplace_ids" id="adv_marketplace_{{ mp.code }}" {% if mp.id in default_marketplaces %} checked="checked" {% endif %} type="radio" name="marketplace_ids[]" value="{{ mp.id }}">
     65                   {% else %}
     66                     <input class="marketplace_ids" id="adv_marketplace_{{ mp.code }}" {% if mp.id in saved_marketplaces %} checked="checked" {% endif %} type="radio" name="marketplace_ids[]" value="{{ mp.id }}">
     67                   {% endif %}
     68                 {{ mp.name }}</label>
     69               {% endfor %}
     70             </div>
     71           </div>
     72           <div class="form-group required">
     73             <label class="col-sm-2 control-label" for="category_selector" id="category_selector_label">{{ entry_category }}</label>
     74             <div class="col-sm-4">
     75               <select name="category_selector" id="category_selector" class="form-control">
     76                 <option value=""></option>
     77                 {% for category in amazon_categories %}
     78                 <option value="{{ category.template }}"{% if edit_product_category == category.name %} selected{% endif %}>{{ category.friendly_name }}</option>
     79                 {% endfor %}
     80               </select>
     81             </div>
     82           </div>
     83           <table class="table table-bordered table-hover">
     84             <tbody class="fields_advanced">
     85             </tbody>
     86           </table>
     87         </div>
     88       </div>
     89       <div class="modal fade" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel" aria-hidden="true" id="browse-node-modal">
     90         <div class="modal-dialog modal-lg">
     91           <div class="modal-content">
     92             <div class="modal-header">
     93               <button aria-hidden="true" data-dismiss="modal" class="close" type="button">×</button>
     94               <h4 id="mySmallModalLabel" class="modal-title">{{ entry_browse_node }}</h4>
     95             </div>
     96             <div class="modal-body">
     97               <div id="browse-node-content"></div>
     98             </div>
     99           </div>
    100         </div>
    101       </div>
    102     </form>
    103     <div class="well">
    104       <div class="row">
    105         <div class="col-md-12 text-right"> <a class="btn btn-primary" data-toggle="tooltip" title="{{ button_save }}" onclick="validate_and_save('advanced')"><i class="fa fa-save fa-lg"></i></a> <a class="btn btn-primary" data-toggle="tooltip" title="{{ button_save_upload }}" onclick="save_and_upload()"><i class="fa fa-cloud-upload fa-lg"></i></a> <a class="btn btn-primary" data-toggle="tooltip" title="{{ button_saved_listings }}" href="{{ saved_listings_url }}"><i class="fa fa-copy fa-lg"></i></a> </div>
    106       </div>
    107     </div>
    108   </div>
    109 </div>
    110 <script type="text/javascript"><!--
    111 $(document).ready(function(){
    112     $('#openstock_selector').change(function() {
    113         redirectOption($('#openstock_selector').val(), 'advanced');
    114     });
    115 
    116     {% if not amazon_categories %}
    117         $("#advanced_table").html("");
    118         $(".content").prepend('<div id="warning" class="alert alert-danger">{{ error_connecting }}</div>');
    119         return;
    120     {% endif %}
    121 
    122     $(".fields_advanced :input").bind('change', function() {
    123         update_form(this, 'advanced');
    124     });
    125 
    126     $('#category_selector').change(function(){
    127         var xml = $('#category_selector').val();
    128         if (xml == '') {
    129             $('.fields_advanced').empty();
    130             $('.dynamic-tab').remove();
    131             $('.dynamic-page').remove();
    132             return;
    133         }
    134         show_form(xml, 'advanced');
    135     });
    136     //Update needed if editing
    137     $('#category_selector').change();
    138     $('#product_form_advanced input[name=upload_after]').val(false);
    139 
    140 });
    141 
    142 function redirectOption(varOption, tabOption) {
    143     var searchLoc = insertParamToUrl(document.location.search, 'sku', varOption);
    144     searchLoc = insertParamToUrl(searchLoc, 'tab', tabOption);
    145     searchLoc = searchLoc.substr(1);
    146     if (document.location.search === searchLoc) {
    147         return false;
    148     } else {
    149         document.location.search = searchLoc;
    150         return true;
    151     }
    152 }
    153 
    154 function insertParamToUrl(searchLoc, key, value) {
    155     var kvp = searchLoc.split('&');
    156 
    157     if (kvp == '') {
    158         searchLoc = '?' + key + '=' + value;
    159         return searchLoc;
    160     }
    161     else {
    162         var i = kvp.length; var x; while (i--) {
    163             x = kvp[i].split('=');
    164             if (x[0] == key) {
    165                 if (x[1] == value) {
    166                     return searchLoc;
    167                 }
    168                 x[1] = value;
    169                 kvp[i] = x.join('=');
    170                 break;
    171             }
    172         }
    173         if (i < 0) { kvp[kvp.length] = [key, value].join('='); }
    174         return kvp.join('&');
    175     }
    176 }
    177 
    178 var fieldsArray = new Array();
    179 
    180 function show_form(xml, formType) {
    181     $('.fields_' + formType).empty();
    182     $('.dynamic-tab').remove();
    183     $('.dynamic-page').remove();
    184 
    185     var parserURL = '{{ template_parser_url }}';
    186     var reqUrl = parserURL + '&xml=' + xml;
    187 
    188     if ($('#openstock_selector').val() !== undefined) {
    189         reqUrl = reqUrl + '&sku=' + $('#openstock_selector').val();
    190     }
    191 
    192     $.ajax({
    193         url: reqUrl,
    194         data: {},
    195         dataType: 'json',
    196         beforeSend: function() {
    197             $('#category_selector').attr('disabled', 'disabled');
    198             $('#category_selector_label').after('<a class="btn btn-primary wait" disabled="disabled"><i class="fa fa-cog fa-lg fa-spin"></i> </a>');
    199         },
    200         complete: function() {
    201             $('#category_selector').removeAttr('disabled');
    202             $('.wait').remove();
    203         },
    204         success: function(data) {
    205             if (data['status'] === 'error') {
    206                 if ('info' in data) {
    207                     alert(data['info']);
    208                 } else {
    209                     alert('Unexpected error.');
    210                 }
    211                 return;
    212             }
    213             for(tab in data['tabs']) {
    214                 $('#tabs').append('<li class="dynamic-tab"><a href="#page-' + data['tabs'][tab]['id'] + '" data-toggle="tab">' + data['tabs'][tab]['name'] + '</a></li>');
    215 
    216                 var pageHtml = '';
    217                 pageHtml += '<div id="page-' + data['tabs'][tab]['id'] + '" class="tab-pane dynamic-page">';
    218                   pageHtml += '<div class="fields_advanced"></div>';
    219                 pageHtml += '</div>'
    220 
    221                 $('#tab-content').append(pageHtml);
    222             }
    223 
    224             var categoryName = data['category'];
    225             fieldsArray[formType] = data['fields'];
    226 
    227             $('.fields_' + formType).append('<input type="hidden" name="category" value="' + categoryName + '">');
    228 
    229             for (i in fieldsArray[formType]) {
    230               var row  = '<div class="form-group';
    231 
    232 
    233               if (fieldsArray[formType][i]['type'] == 'required') {
    234                 row += ' required';
    235               }
    236 
    237               if (fieldsArray[formType][i]['child']){
    238                   row += ' child_row" display="no" field_index="' + i + '" style="display: none">';
    239               } else {
    240                   row += '">';
    241               }
    242 
    243               row += '<label class="col-sm-2 control-label">'+fieldsArray[formType][i]['title']+'</label>';
    244               row += '<div class="col-sm-10">';
    245 
    246               row += '<div class="alert alert-danger" id="error_' + fieldsArray[formType][i]['name'] + '" style="display:none;"></div>'
    247 
    248               if (fieldsArray[formType][i]['name'] == "Quantity") {
    249                   row += getQuantityField(fieldsArray[formType][i]);
    250               } else if (fieldsArray[formType][i]['accepted']['type'] == "integer") {
    251                 if (fieldsArray[formType][i]['name'] == 'RecommendedBrowseNode' || fieldsArray[formType][i]['name'] == 'RecommendedBrowseNode2'){
    252                   row += getBrowseNodeField(fieldsArray[formType][i]);
    253                 } else {
    254                   row += getIntegerField(fieldsArray[formType][i]);
    255                 }
    256               }
    257               else if (fieldsArray[formType][i]['accepted']['type'] == "text_area") {
    258                   row += getTextAreaField(fieldsArray[formType][i]);
    259               }
    260               else if (fieldsArray[formType][i]['accepted']['type'] == "select") {
    261                   row += getSelectField(fieldsArray[formType][i]);
    262               }
    263               else if (fieldsArray[formType][i]['accepted']['type'] == "image") {
    264                   row += getImageField(fieldsArray[formType][i]);
    265               }
    266               else {
    267                   row += getStringField(fieldsArray[formType][i]);
    268               }
    269 
    270               if (fieldsArray[formType][i]['definition']) {
    271                 row += '<span class="help-block">' + fieldsArray[formType][i]['definition'] + '</span>';
    272               }
    273 
    274               row += '</div>';
    275               row += '</div>';
    276 
    277               $('#page-' + fieldsArray[formType][i]['tab'] + ' .fields_' + formType).append(row);
    278             }
    279 
    280             //Emulate changes to populate child fields
    281             $('.fields_' + formType + ' :input').each(function (i) {
    282                 $(this).change();
    283             });
    284         },
    285         error: function (xhr, ajaxOptions, thrownError) {
    286         if (xhr.status != 0) { alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); }
    287       }
    288     });
    289 }
    290 
    291 //Called when chenge to form was made. Shows child rows bassed on input if needed.
    292 function update_form(element, formType) {
    293     var changedFieldName = $(element).attr('field_name');
    294     var changedFieldValue = $(element).val();
    295 
    296     $('.fields_' + formType + ' .child_row').each(function (i) {
    297         var index = $(this).attr('field_index');
    298         if (fieldsArray[formType][index]['parent']['name'] == changedFieldName) {
    299             var showChild = false;
    300 
    301             //values is array?
    302             if (fieldsArray[formType][index]['parent']['value'] instanceof Array) {
    303                 for(i in fieldsArray[formType][index]['parent']['value']) {
    304                     if (fieldsArray[formType][index]['parent']['value'][i] == changedFieldValue) {
    305                         showChild = true;
    306                     }
    307                 }
    308             } else if (fieldsArray[formType][index]['parent']['value'] == changedFieldValue) {
    309                 showChild = true;
    310             } else if (fieldsArray[formType][index]['parent']['value'] == '*' && changedFieldValue != '') {
    311                 showChild = true;
    312             }
    313 
    314             if (showChild) {
    315                 $(this).attr('display', 'yes');
    316                 $(this).removeAttr('style');
    317             } else {
    318                 $('.fields_' + formType + ' [field_name="' + fieldsArray[formType][index]['name']  + '"]').val('');
    319                 $(this).attr('display', 'no');
    320                 $(this).attr('style', 'display: none');
    321             }
    322         }
    323     });
    324 }
    325 
    326 function getImageField(fieldData) {
    327   var output = "";
    328 
    329   output += '<a class="img-thumbnail img-edit" id="thumb-image-'+fieldData['name']+'">';
    330     if (fieldData['thumb'] != "") {
    331       output += '<img src="'+fieldData['thumb']+'" alt="" title="" />';
    332     } else {
    333       output += '<i class="fa fa-camera fa-5x"></i>';
    334     }
    335   output += "</a>";
    336   output += '<input type="hidden" id="input-image-'+fieldData['name']+'" name="fields[' + fieldData['name'] + ']" value="' + fieldData['value'] + '" accepted="' + fieldData['accepted']['type'] + '" field_name="' + fieldData['name'] + '" field_type="' + fieldData['type'] + '">';
    337 
    338   return output;
    339 }
    340 
    341 function getQuantityField(fieldData) {
    342     var output = "";
    343 
    344     output += fieldData['value'];
    345     output += '<input ';
    346     output += 'type="hidden" ';
    347     output += 'min="0" ';
    348     output += 'accepted="' + fieldData['accepted']['type'] + '" ';
    349     output += 'field_name="' + fieldData['name'] + '" ';
    350     output += 'field_type="' + fieldData['type'] + '" ';
    351     output += 'name="fields[' + fieldData['name'] + ']" ';
    352     output += 'value="' + fieldData['value'] + '" class="form-control">';
    353 
    354     return output;
    355 }
    356 
    357 function getIntegerField(fieldData) {
    358   var output = "";
    359 
    360   output += '<input ';
    361   output += 'type="number" ';
    362   output += 'min="0" ';
    363   output += 'accepted="' + fieldData['accepted']['type'] + '" ';
    364   output += 'field_name="' + fieldData['name'] + '" ';
    365   output += 'field_type="' + fieldData['type'] + '" ';
    366   output += 'name="fields[' + fieldData['name'] + ']" ';
    367   output += 'class="form-control" ';
    368   output += 'value="' + fieldData['value'] + '">';
    369 
    370   return output;
    371 }
    372 
    373 function getBrowseNodeField(fieldData) {
    374   var output = "";
    375 
    376   output += '<div class="input-group col-md-3">';
    377   output += '<input ';
    378   output += 'id="'+fieldData['name']+'_input" ';
    379   output += 'type="number" ';
    380   output += 'min="0" ';
    381   output += 'accepted="' + fieldData['accepted']['type'] + '" ';
    382   output += 'field_name="' + fieldData['name'] + '" ';
    383   output += 'field_type="' + fieldData['type'] + '" ';
    384   output += 'name="fields[' + fieldData['name'] + ']" ';
    385   output += 'class="form-control" ';
    386   output += 'onclick="loadBrowseNode(\''+fieldData['name']+'\');" ';
    387   output += 'value="' + fieldData['value'] + '">';
    388   output += '<span class="input-group-addon"><i class="fa fa-sitemap fa-lg"></i></span>';
    389   output += '</div>';
    390   output += '<span class="label label-info" style="display:none;" id="'+fieldData['name']+'_label"></span>';
    391 
    392   return output;
    393 }
    394 
    395 function getTextAreaField(fieldData) {
    396     var output = "";
    397 
    398     output += '<textarea ';
    399     if ('min_length' in fieldData['accepted']) {
    400         output += 'min_length="'+ fieldData['accepted']['min_length'] + '" ';
    401     }
    402     if ('max_length' in fieldData['accepted']) {
    403         output += 'max_length="'+ fieldData['accepted']['max_length'] + '" ';
    404     }
    405     output += 'field_name="' + fieldData['name'] + '" ';
    406     output += 'field_type="' +  fieldData['type'] + '" ';
    407     output += 'name="fields[' + fieldData['name'] + ']" class="form-control" rows="3">';
    408     output += fieldData['value'];
    409     output += '</textarea>';
    410 
    411     return output;
    412 }
    413 
    414 function getStringField(fieldData) {
    415     var output = "";
    416 
    417     output += '<input type="text"';
    418     output += 'accepted="' + fieldData['accepted']['type'] + '" ';
    419     if ('min_length' in fieldData['accepted']) {
    420         output += 'min_length="'+ fieldData['accepted']['min_length'] + '" ';
    421     }
    422     if ('max_length' in fieldData['accepted']) {
    423         output += 'max_length="'+ fieldData['accepted']['max_length'] + '" ';
    424     }
    425     output += 'field_name="' + fieldData['name'] + '" ';
    426     output += 'field_type="' + fieldData['type'] + '" ';
    427     output += 'name="fields[' + fieldData['name'] + ']" ';
    428     output += 'value="' + fieldData['value'] + '" class="form-control">';
    429 
    430     return output;
    431 }
    432 
    433 function getSelectField(fieldData) {
    434     var output = "";
    435 
    436     output += '<select ';
    437     output += 'field_name="' + fieldData['name'] + '" ';
    438     output += 'field_type="' + fieldData['type'] + '" ';
    439     output += 'name="fields[' + fieldData['name'] + ']" class="form-control">';
    440 
    441     output += '<option></option>';
    442 
    443     if (fieldData['accepted']['option'].length != undefined) {
    444         for(j in fieldData['accepted']['option']) {
    445             output += '<option ';
    446 
    447             if (fieldData['value'].toLowerCase() == fieldData['accepted']['option'][j]['value'].toLowerCase()) {
    448                 output += 'selected="selected" ';
    449             }
    450             output += 'value="' + fieldData['accepted']['option'][j]['value'] + '">';
    451             output += fieldData['accepted']['option'][j]['name'];
    452             output += '</option>';
    453         }
    454     }
    455     else {
    456         output += '<option ';
    457 
    458         if (fieldData['value'].toLowerCase() == fieldData['accepted']['option']['value'].toLowerCase()) {
    459             output += 'selected="selected" ';
    460         }
    461         output += 'value="' + fieldData['accepted']['option']['value'] + '">';
    462         output += fieldData['accepted']['option']['name'];
    463         output += '</option>';
    464     }
    465     output += '</select>';
    466     return output;
    467 }
    468 
    469 function validate(formType) {
    470   var warnings = 0;
    471   var mChecked = 0;
    472   var productIdType;
    473   var productId;
    474   var productIdRequired;
    475 
    476   if ($('#category_selector').val() == '') {
    477     return false;
    478   }
    479 
    480   $('.marketplace_ids').each(function (i) {
    481     if ($(this).is(':checked')) {
    482       mChecked++;
    483     }
    484   });
    485 
    486   if (mChecked == 0) {
    487     $('#marketplaces').prepend('<div class="alert alert-danger" id="marketplace-alert">{{ error_required }}</div>');
    488     warnings ++;
    489   } else {
    490     $('#marketplace-alert').remove();
    491   }
    492 
    493     $('.fields_' + formType + ' :input').each(function (i) {
    494         if ($(this).parent().parent().attr('display') === "no") {
    495             return;
    496         }
    497 
    498         var field_value = $(this).val();
    499         var field_name = $(this).attr('field_name');
    500         var field_type = $(this).attr('field_type');
    501         var min_length = $(this).attr('min_length');
    502         var max_length = $(this).attr('max_length');
    503 
    504         if (field_name === 'Type') {
    505             productIdType = field_value;
    506         } else if (field_name === 'Value') {
    507             productId = field_value;
    508             if (field_type === 'required') {
    509                 productIdRequired = true;
    510             } else {
    511                 productIdRequired = false;
    512             }
    513         }
    514 
    515         if (field_type == 'required' || field_value !== '') {
    516             if (field_value === '') {
    517               $('.fields_' + formType + ' #error_' + field_name).text('{{ error_required }}').show();
    518               warnings ++;
    519             } else if (min_length != undefined && field_value.length < min_length) {
    520               $('.fields_' + formType + ' #error_' + field_name).text('{{ error_length }} ' + min_length + ' {{ text_characters }}').show();
    521               warnings ++;
    522             } else if (max_length != undefined && field_value.length > max_length) {
    523               $('.fields_' + formType + ' #error_' + field_name).text((field_value.length - max_length) + ' {{ error_char_limit }}').show();
    524               warnings ++;
    525             } else {
    526                 $('.fields_' + formType + ' #error_' + field_name).text('').hide();
    527             }
    528         }
    529     });
    530 
    531     if (productIdRequired && productIdType !== 'ASIN' && !isValidProductId(productId)) {
    532       $('.fields_' + formType + ' :input').each(function (i) {
    533         var field_name = $(this).attr('field_name');
    534         if (field_name === 'Value') {
    535           $('.fields_' + formType + ' #error_' + field_name).text('Not valid product ID!');
    536           warnings ++;
    537           return;
    538         }
    539       });
    540     }
    541 
    542     if ($('.fields_' + formType + ' [name="category"]').val() == undefined) {
    543       warnings ++;
    544   }
    545 
    546     if (warnings > 0) {
    547         return false;
    548     } else {
    549         return true;
    550     }
    551 }
    552 
    553 function validate_and_save(formType) {
    554   if (validate(formType)) {
    555     if (formType == 'advanced') {
    556       $("#product_form_advanced").submit();
    557     } else if (formType == 'quick') {
    558       $("#product_form_quick").submit();
    559     }
    560   } else {
    561     alert('{{ error_not_saved }}');
    562   }
    563 }
    564 
    565 function save_and_upload() {
    566     $('#product_form_advanced input[name=upload_after]').val(true);
    567 
    568     if (validate('advanced')) {
    569         $("#product_form_advanced").submit();
    570     } else {
    571         alert('{{ error_not_saved }}');
    572     }
    573 }
    574 
    575 function isValidProductId(value) {
    576     var barcode = value.substring(0, value.length - 1);
    577     var checksum = parseInt(value.substring(value.length - 1), 10);
    578     var calcSum = 0;
    579     var calcChecksum = 0;
    580     barcode.split('').map(function(number, index ) {
    581         number = parseInt(number, 10);
    582         if (value.length === 13) {
    583             if (index % 2 === 0) {
    584                 calcSum += number;
    585             }
    586             else {
    587                 calcSum += number * 3;
    588             }
    589         } else {
    590             if (index % 2 === 0) {
    591                 calcSum += number * 3;
    592             }
    593             else {
    594                 calcSum += number;
    595             }
    596         }
    597     });
    598     calcSum %= 10;
    599     calcChecksum = (calcSum === 0) ? 0 : (10 - calcSum);
    600     if (calcChecksum !== checksum) {
    601         return false;
    602     }
    603     return true;
    604 }
    605 
    606 var nodeBox = '';
    607 var nodeString = '';
    608 var nodeStringSimple = '';
    609 
    610 function loadBrowseNode(field) {
    611   $('#browse-node-modal').modal('toggle');
    612 
    613   var html = '';
    614   var market = $('.marketplace_ids:checked').val();
    615 
    616   $('#'+field+'_input').val('');
    617 
    618     nodeString = '';
    619     nodeStringSimple = '';
    620 
    621     $.ajax({
    622         url: 'index.php?route=extension/openbay/amazon_listing/getBrowseNodes&user_token={{ user_token }}',
    623         type: 'POST',
    624         data: { marketplaceId: market},
    625         dataType: 'json',
    626         beforeSend: function(){
    627             $('#browse-node-content').empty();
    628             $('#'+field+'_label').empty().hide();
    629         },
    630         success: function(data) {
    631             if (data.node.error != true){
    632                 html += '<div class="well">';
    633                   html += '<div class="input-group col-md-12">';
    634                     html += '<p><select class="form-control" id="root-node" onchange="nodeSelect(\'root-node\', \''+field+'\');">';
    635                       html += '<option value="">{{ text_select }}</option>';
    636                       $.each(data.children, function(k,v){
    637                           html += '<option value="'+ v.node_id+'">'+ v.name+'</option>';
    638                       });
    639                     html += '</select></p>';
    640                   html += '</div>';
    641                 html += '</div>';
    642 
    643                 $('#browse-node-content').empty().html(html);
    644             }else{
    645               alert(data.node.error);
    646             }
    647         },
    648         failure: function(){
    649             alert('{{ error_load_nodes }}');
    650         },
    651         error: function(){
    652             alert('{{ error_load_nodes }}');
    653         }
    654     });
    655 }
    656 
    657 function nodeSelect(field, original_field) {
    658     //called when the root node id is chosen
    659     var html = '';
    660     var market = $('.marketplace_ids:checked').val();
    661     var node = $('#'+field).val();
    662     var parentNodeName = $('#'+field).find(":selected").text();
    663     nodeStringSimple += parentNodeName+' > ';
    664 
    665     $.ajax({
    666         url: 'index.php?route=extension/openbay/amazon_listing/getBrowseNodes&user_token={{ user_token }}',
    667         type: 'POST',
    668         data: { marketplaceId: market, node: node},
    669         dataType: 'json',
    670         beforeSend: function(){
    671           $('#browse-node-content').empty().html('<a class="btn btn-primary" disabled="disabled"><i class="fa fa-cog fa-lg fa-spin"></i> </a>');
    672         },
    673         success: function(data) {
    674           if (data.node.error != true){
    675             html += '<div class="row">';
    676               html += '<div class="col-sm-12 text-left">';
    677                 html += '<h4>'+nodeStringSimple+'</h4>';
    678               html += '</div>';
    679             html += '</div>';
    680             if (data.node.final == 0){
    681               html += '<div class="well">';
    682                 html += '<div class="input-group col-md-12">';
    683                   html += '<p><select class="form-control" id="'+field+'-'+node+'" onchange="nodeSelect(\''+field+'-'+node+'\', \''+original_field+'\');">';
    684                     html += '<option value="">{{ text_select }}</option>';
    685                     $.each(data.children, function(k,v){
    686                         html += '<option value="'+ v.node_id+'">'+ v.name+'</option>';
    687                     });
    688                   html += '</select></p>';
    689                 html += '</div>';
    690               html += '</div>';
    691             }else{
    692               html += '<div class="row">';
    693                 html += '<div class="col-sm-12 text-right">';
    694                   html += '<a onclick="saveNode('+data.node.id+', \''+original_field+'\', \''+nodeStringSimple+'\')" class="btn btn-primary"><i class="fa fa-save fa-lg"></i> {{ button_save }}</a>';
    695                 html += '</div>';
    696               html += '</div>';
    697             }
    698 
    699             $('#browse-node-content').empty().html(html);
    700           }else{
    701               alert(data.node.error);
    702           }
    703         },
    704         failure: function(){
    705             alert('{{ error_load_nodes }}');
    706         },
    707         error: function(){
    708             alert('{{ error_load_nodes }}');
    709         }
    710     });
    711 }
    712 
    713 function saveNode(id, field, text){
    714   $('input[field_name='+field+']').val(id);
    715   $('#'+field+'_label').text(text).show();
    716   $('#browse-node-modal').modal('toggle');
    717 }
    718 //--></script>
    719 {{ footer }}