(function ($, window) { 'use strict'; var activeRequests = {}; function cardSelector() { return '.modern-auction-card, .modern-future-card, .modern-winner-card'; } function findGrid(container) { return container.children('.modern-auction-grid, .modern-future-grid, .modern-winner-grid').first(); } function idsFrom(container) { var ids = []; findGrid(container).find(cardSelector()).each(function () { ids.push(this.id || 'no-id-' + ids.length); }); return ids.join('|'); } function mergeCards(target, incoming) { var currentGrid = findGrid(target); var incomingGrid = findGrid(incoming); var currentItems = {}; if (!incomingGrid.length) { target.html(incoming.html()); return true; } if (!currentGrid.length) { target.html(incoming.html()); return true; } currentGrid.find(cardSelector()).each(function () { if (this.id) { currentItems[this.id] = $(this).detach(); } }); currentGrid.empty(); incomingGrid.find(cardSelector()).each(function () { var incomingItem = $(this); var id = this.id; if (id && currentItems[id]) { currentGrid.append(currentItems[id]); } else { currentGrid.append(incomingItem.clone(true, true)); } }); return true; } function refreshBlock(target) { var url = target.attr('data-auction-block'); var key = target.attr('id'); if (!url || !key || activeRequests[key]) { return; } activeRequests[key] = true; $.ajax({ url: url, cache: false }) .done(function (html) { var incoming = $('
').html(html); if (idsFrom(target) === idsFrom(incoming)) { return; } if (mergeCards(target, incoming)) { $(document).trigger('ganabid:auctions-refreshed'); } }) .always(function () { activeRequests[key] = false; }); } function refreshAll() { var now = new Date().getTime(); $('.modern-auction-refresh').each(function () { var target = $(this); var url = target.attr('data-auction-block') || ''; var interval = url.indexOf('/closed') !== -1 ? 45000 : 15000; var lastRefresh = target.data('modernLastRefresh') || 0; if (now - lastRefresh < interval) { return; } target.data('modernLastRefresh', now); refreshBlock(target); }); } $(function () { window.setTimeout(refreshAll, 1200); window.setInterval(refreshAll, 15000); }); }(jQuery, window));