1(function () { 2 // if (typeof wp === 'undefined' || !wp.apiFetch) { 3 // return; 4 // } 5 6 // const restBase = (window.SpinWheelSettings && window.SpinWheelSettings.restBase) || ''; 7 // const namespace = restBase 8 // ? restBase.replace(window.location.origin, '').replace(/.*wp-json\//, '').replace(/\/$/, '') 9 // : 'spin-wheel/v1'; 10 // const nonce = (window.SpinWheelSettings && window.SpinWheelSettings.nonce) || ''; 11 12 // function message(container, text, type = 'info') { 13 // const target = container.querySelector('[data-messages]'); 14 // if (!target) { 15 // return; 16 // } 17 // target.innerHTML = text ? `<div class="notice notice-${type}"><p>${text}</p></div>` : ''; 18 // } 19 20 function updateRemaining(container, remaining) { 21 const el = container.querySelector('[data-remaining]'); 22 if (!el) { 23 return; 24 } 25 if (remaining > 0) { 26 el.textContent = window.SpinWheelSettings.i18n.remaining.replace('%d', remaining); 27 } else { 28 el.textContent = window.SpinWheelSettings.i18n.noSpins; 29 } 30 } 31 32 function renderResults(container, winners) { 33 const list = container.querySelector('[data-results] ul'); 34 if (!list) { 35 return; 36 } 37 list.innerHTML = ''; 38 winners.forEach((winner) => { 39 const li = document.createElement('li'); 40 const strong = document.createElement('strong'); 41 strong.textContent = winner.label || ''; 42 li.appendChild(strong); 43 if (winner.created_at) { 44 const span = document.createElement('span'); 45 span.textContent = ` - ${new Date(winner.created_at).toLocaleString()}`; 46 li.appendChild(span); 47 } 48 list.appendChild(li); 49 }); 50 } 51 52 function fetchResults(container, wheelId) { 53 wp.apiFetch({ 54 path: `${namespace}/results?wheel_id=${wheelId}`, 55 headers: { 56 'X-WP-Nonce': nonce, 57 }, 58 }).then((response) => { 59 if (response && response.recent_winners) { 60 renderResults(container, response.recent_winners); 61 } 62 }).catch(() => { }); 63 } 64 65 // document.querySelectorAll('[data-spin-wheel]').forEach((container) => { 66 // const wheelId = parseInt(container.getAttribute('data-wheel-id'), 10); 67 // let sessionToken = null; 68 69 // const phoneForm = container.querySelector('[data-phone-form]'); 70 // const otpForm = container.querySelector('[data-otp-form]'); 71 // const spinControls = container.querySelector('[data-spin-controls]'); 72 // const spinButton = container.querySelector('[data-spin]'); 73 74 // fetchResults(container, wheelId); 75 76 // if (phoneForm) { 77 // phoneForm.addEventListener('submit', (event) => { 78 // event.preventDefault(); 79 // const formData = new FormData(phoneForm); 80 // const phone = formData.get('phone'); 81 // message(container, window.SpinWheelSettings.i18n.enterPhone); 82 // wp.apiFetch({ 83 // path: `${namespace}/otp/request`, 84 // method: 'POST', 85 // data: { 86 // wheel_id: wheelId, 87 // phone, 88 // }, 89 // headers: { 90 // 'X-WP-Nonce': nonce, 91 // }, 92 // }).then((response) => { 93 // message(container, window.SpinWheelSettings.i18n.enterOtp, 'success'); 94 // phoneForm.style.display = 'none'; 95 // otpForm.style.display = 'block'; 96 // if (window.SpinWheelSettings.debug && response.debug_code) { 97 // console.info('Spin wheel OTP code:', response.debug_code); 98 // } 99 // }).catch((error) => { 100 // const msg = (error && error.message) || 'Error'; 101 // message(container, msg, 'error'); 102 // }); 103 // }); 104 // } 105 106 // if (otpForm) { 107 // otpForm.addEventListener('submit', (event) => { 108 // event.preventDefault(); 109 // const formData = new FormData(otpForm); 110 // const code = formData.get('code'); 111 // const phone = (phoneForm && phoneForm.querySelector('[name="phone"]').value) || ''; 112 // wp.apiFetch({ 113 // path: `${namespace}/otp/verify`, 114 // method: 'POST', 115 // data: { 116 // wheel_id: wheelId, 117 // phone, 118 // code, 119 // }, 120 // headers: { 121 // 'X-WP-Nonce': nonce, 122 // }, 123 // }).then((response) => { 124 // sessionToken = response.token; 125 // otpForm.style.display = 'none'; 126 // spinControls.style.display = 'block'; 127 // updateRemaining(container, response.remaining); 128 // message(container, window.SpinWheelSettings.i18n.spin, 'success'); 129 // }).catch((error) => { 130 // const msg = (error && error.message) || 'Error'; 131 // message(container, msg, 'error'); 132 // }); 133 // }); 134 // } 135 136 // if (spinButton) { 137 // spinButton.addEventListener('click', () => { 138 // if (!sessionToken) { 139 // message(container, window.SpinWheelSettings.i18n.enterPhone, 'error'); 140 // return; 141 // } 142 // spinButton.disabled = true; 143 // wp.apiFetch({ 144 // path: `${namespace}/spin`, 145 // method: 'POST', 146 // data: { 147 // wheel_id: wheelId, 148 // token: sessionToken, 149 // }, 150 // headers: { 151 // 'X-WP-Nonce': nonce, 152 // }, 153 // }).then((response) => { 154 // message(container, `${window.SpinWheelSettings.i18n.spin}: ${response.prize.label}`, 'success'); 155 // updateRemaining(container, response.remaining); 156 // renderResults(container, response.recent_winners || []); 157 // if (response.remaining <= 0) { 158 // spinButton.disabled = true; 159 // } else { 160 // spinButton.disabled = false;
161 // } 162 // }).catch((error) => { 163 // spinButton.disabled = false; 164 // const msg = (error && error.message) || 'Error'; 165 // message(container, msg, 'error'); 166 // }); 167 // }); 168 // } 169 // }); 170})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.