(function() { if (window.location.pathname !== '/challenges') return; function injectBoxes(config) { const enabledCategories = config.categories || []; document.querySelectorAll('.category-header').forEach(header => { const catName = header.textContent.trim(); // Check if already injected to prevent duplicates if (enabledCategories.includes(catName) && !header.nextElementSibling?.classList.contains('cat-sub-row')) { const row = document.createElement('div'); row.className = "cat-sub-row row mb-4 justify-content-center"; row.innerHTML = `
`; header.after(row); const input = row.querySelector('input'); const btn = row.querySelector('button'); const msg = row.querySelector('.status-msg'); const submitFlag = () => { const val = input.value.trim(); if (!val || btn.disabled) return; btn.disabled = true; msg.innerHTML = 'Checking...'; const params = new URLSearchParams({ submission: val, category: catName, nonce: init.csrfNonce }); fetch('/category_submit', { method: 'POST', headers: {'Content-Type': 'application/x-www-form-urlencoded'}, body: params }) .then(r => r.json()) .then(data => { if (data.success) { msg.innerHTML = `✔ ${data.message}`; input.value = ''; setTimeout(() => { window.location.reload(); }, 1000); } else { msg.innerHTML = `✘ ${data.message}`; btn.disabled = false; } }) .catch(() => { msg.innerHTML = 'Submission error'; btn.disabled = false; }); }; btn.onclick = submitFlag; input.onkeypress = (e) => { if (e.key === 'Enter') submitFlag(); }; } }); } fetch('/category_submit/config').then(r => r.json()).then(config => { injectBoxes(config); const observer = new MutationObserver(() => { observer.disconnect(); injectBoxes(config); observer.observe(document.body, { childList: true, subtree: true }); }); observer.observe(document.body, { childList: true, subtree: true }); }); })();