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 }}