/* global display_identifier */ $(function() { "use strict"; // mergedHead will be turned to true the first time we receive something from a new host // It allows to transform the only once var mergedHead = false; var current_client_url = ""; function longpolling() { $.ajax({ type: 'POST', url: window.location.origin + '/point_of_sale/get_serialized_order/' + display_identifier, dataType: 'json', beforeSend: function(xhr){xhr.setRequestHeader('Content-Type', 'application/json');}, data: JSON.stringify({jsonrpc: '2.0'}), success: function(data) { if (data.result.error) { $('.error-message').text(data.result.error); $('.error-message').removeClass('d-none'); setTimeout(longpolling, 5000); return; } if (data.result.rendered_html) { var trimmed = $.trim(data.result.rendered_html); var $parsedHTML = $('
').html($.parseHTML(trimmed,true)); // WARNING: the true here will executes any script present in the string to parse var new_client_url = $parsedHTML.find(".resources > base").attr('href'); if (!mergedHead || (current_client_url !== new_client_url)) { mergedHead = true; current_client_url = new_client_url; $("head").children().not('.origin').remove(); $("head").append($parsedHTML.find(".resources").html()); } $(".container-fluid").html($parsedHTML.find('.pos-customer_facing_display').html()); $(".container-fluid").attr('class', 'container-fluid').addClass($parsedHTML.find('.pos-customer_facing_display').attr('class')); var d = $('.pos_orderlines_list'); d.scrollTop(d.prop("scrollHeight")); // Here we execute the code coming from the pos, apparently $.parseHTML() executes scripts right away, // Since we modify the dom afterwards, the script might not have any effect /* eslint-disable no-undef */ if (typeof foreign_js !== 'undefined' && $.isFunction(foreign_js)) { foreign_js(); } /* eslint-enable no-undef */ } longpolling(); }, error: function (jqXHR, status, err) { setTimeout(longpolling, 5000); }, timeout: 30000, }); }; longpolling(); });