(function ($) { function pretty(obj) { try { return JSON.stringify(obj, null, 2); } catch (e) { return String(obj); } } function setStatus($w, text) { $w.find('.racing-widget__status').text(text || ''); } function setOutput($w, obj) { $w.find('.racing-widget__output').text(pretty(obj)); } function setButtonsDisabled($w, disabled) { $w.find('.racing-widget__btn').prop('disabled', !!disabled); } function actionToAjax(action) { if (action === 'test') return 'racing_widget_test'; if (action === 'cached') return 'racing_widget_cached'; if (action === 'live') return 'racing_widget_live'; return 'racing_widget_test'; } $(document).on('click', '.racing-widget__btn', function () { var $btn = $(this); var $w = $btn.closest('.racing-widget'); var type = $w.data('type') || 'horse'; var action = $btn.data('action') || 'test'; setStatus($w, 'Loading…'); setButtonsDisabled($w, true); $.ajax({ url: (window.RacingWidget && RacingWidget.ajaxUrl) ? RacingWidget.ajaxUrl : '/wp-admin/admin-ajax.php', method: 'POST', dataType: 'json', data: { action: actionToAjax(action), nonce: (window.RacingWidget && RacingWidget.nonce) ? RacingWidget.nonce : '', type: type } }).done(function (resp) { setOutput($w, resp); if (resp && resp.success) { var src = resp.data && resp.data.source ? resp.data.source : 'ok'; var ttl = (resp.data && typeof resp.data.ttl !== 'undefined') ? resp.data.ttl : ''; setStatus($w, 'Source: ' + src + (ttl !== '' ? (' • Cache TTL: ' + ttl + 's') : '')); } else { var msg = resp && resp.data && resp.data.message ? resp.data.message : 'Unknown error'; setStatus($w, 'Error: ' + msg); } }).fail(function (xhr) { setOutput($w, { success: false, data: { message: 'AJAX failed', code: 'ajax_fail', meta: { status: xhr.status, responseText: xhr.responseText } } }); setStatus($w, 'Error: AJAX failed (' + xhr.status + ')'); }).always(function () { setButtonsDisabled($w, false); }); }); })(jQuery);