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