function setupAssetsLoading() { var DELAY = 2000; var REPETITIONS = 15; function refreshAssets() { var elements = $("[data-status='asset-loading']"); if (!elements.length) { return false; } $.each(elements, function(_, el) { var $el = $(el); var spinner = $el.find(".asset-loading-spinner"); var type = $el.data("type"); // Perform an AJAX call to present URL // to check if file already exists $.ajax({ url: $el.data("present-url"), type: "GET", dataType: "json", success: function (data) { $el.attr("data-status", "asset-loaded"); $el.find(".asset-loading-spinner").spin(false); $el.html(""); if (type === "image") { $el.html( "" + "
" + $el.data("filename") + "
" ); } else { $el.html( "" + $el.data("filename") + "" ); } }, error: function (ev) { if (ev.status == 403) { // Image/file exists, but user doesn't have // rights to download it if (type === "image") { $el.html( "
" + $el.data("filename") ); } else { $el.html($el.data("filename")); } } else { // Do nothing, file is not yet present } } }); }); return true; } function finalizeAssets() { var elements = $("[data-status='asset-loading']"); $.each(elements, function(_, el) { var $el = $(el); $el.attr("data-status", "asset-failed"); $el.find(".asset-loading-spinner").spin(false); $el.html($el.data("filename")); }); } var cntr = 0; var intervalId = window.setInterval(function() { cntr++; if (cntr >= REPETITIONS || !refreshAssets()) { finalizeAssets(); window.clearInterval(intervalId); } }, DELAY); }