1document.addEventListener('DOMContentLoaded', function() { 2 const form = document.querySelector('form.postsRodeosFilter'); 3 const resultsContainer = document.querySelector('.rodeosBlock__left'); 4 5 // ФÑнкÑÐ¸Ñ Ð´Ð»Ñ Ð·Ð°Ð³ÑÑзки ÑезÑлÑÑаÑов по AJAX 6 function loadResults(ajaxUrl, friendlyUrl, pushState = true) { 7 resultsContainer.innerHTML = '<p>Loading...</p>'; 8 9 // ÐÑокÑÑÑка ввеÑÑ Ð´Ð¾ загÑÑзки ÑезÑлÑÑаÑов 10 const scrollTarget = document.querySelector('.rodeoSearch'); 11 if (scrollTarget) { 12 scrollTarget.scrollIntoView({ behavior: 'smooth' }); 13 } 14 15 console.log('AJAX URL:', ajaxUrl); // ÐÐ»Ñ Ð¾Ñладки 16 17 fetch(ajaxUrl, { 18 method: 'POST', 19 headers: { 20 'Content-Type': 'application/x-www-form-urlencoded', 21 }, 22 body: new URL(ajaxUrl).searchParams.toString() 23 }) 24 .then(function(response) { 25 if (!response.ok) { 26 throw new Error('Network response was not ok'); 27 } 28 return response.text(); 29 }) 30 .then(function(html) { 31 resultsContainer.innerHTML = html; 32 // ÐоÑле Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÑенÑа пеÑеназнаÑаем обÑабоÑÑик Ð´Ð»Ñ Ð½Ð¾Ð²ÑÑ ÑÑÑлок пагинаÑии 33 bindPaginationLinks(); 34 // ÐбновлÑем URL в адÑеÑной ÑÑÑоке Ñ Ð´ÑÑжеÑÑвеннÑм адÑеÑом 35 if (pushState) { 36 window.history.pushState(null, '', friendlyUrl); 37 } 38 }) 39 .catch(function(error) { 40 resultsContainer.innerHTML = '<p>Error loading data</p>'; 41 console.error('Error:', error); 42 }); 43 } 44 45 // ФÑнкÑÐ¸Ñ Ð´Ð»Ñ ÐºÐ¾Ð½Ð²ÐµÑÑаÑии даÑÑ Ð¸Ð· ÑоÑмаÑа MM/DD/YYYY в YYYYMMDD 46 function convertDateFormat(dateString) { 47 if (!dateString) return ''; 48 49 // ÐÑли Ñже в ÑоÑмаÑе YYYYMMDD 50 if (/^\d{8}$/.test(dateString)) { 51 return dateString; 52 } 53 54 // ÐÑли в ÑоÑмаÑе MM/DD/YYYY 55 if (/^\d{1,2}\/\d{1,2}\/\d{4}$/.test(dateString)) { 56 const [month, day, year] = dateString.split('/'); 57 return year + month.padStart(2, '0') + day.padStart(2, '0'); 58 } 59 60 return dateString; 61 } 62 63 // ÐбÑабоÑÑик оÑпÑавки ÑоÑÐ¼Ñ Ð¿Ð¾Ð¸Ñка 64 if (form && resultsContainer) { 65 form.addEventListener('submit', function(e) { 66 e.preventDefault(); // оÑменÑем ÑÑандаÑÑное поведение ÑоÑÐ¼Ñ 67 68 // СобиÑаем даннÑе ÑоÑÐ¼Ñ 69 const formData = new FormData(form); 70 71 // ÐонвеÑÑиÑÑем даÑÑ Ð² нÑжнÑй ÑоÑÐ¼Ð°Ñ 72 const dateFrom = formData.get('date_from'); 73 const dateTo = formData.get('date_to'); 74 75 if (dateFrom) { 76 formData.set('date_from', convertDateFormat(dateFrom)); 77 } 78 if (dateTo) { 79 formData.set('date_to', convertDateFormat(dateTo)); 80 } 81 82 // ФоÑмиÑÑем AJAX-URL Ð´Ð»Ñ Ð·Ð°Ð¿ÑоÑа (иÑполÑзÑем admin-ajax.php) 83 formData.append('action', 'load_rodeos'); 84 85 const ajaxParams = new URLSearchParams(); 86 for (const pair of formData.entries()) { 87 if (pair[1]) { // ТолÑко не пÑÑÑÑе знаÑÐµÐ½Ð¸Ñ 88 ajaxParams.append(pair[0], pair[1]); 89 } 90 } 91 92 // ÐогиÑование Ð´Ð»Ñ Ð¾Ñладки 93 console.log('Form data:', Object.fromEntries(formData.entries())); 94 console.log('AJAX params:', ajaxParams.toString()); 95 96 const ajaxUrl = myAjax.ajaxurl + '?' + ajaxParams.toString(); 97 98 // ФоÑмиÑÑем дÑÑжеÑÑвеннÑй URL Ð´Ð»Ñ Ð°Ð´ÑеÑной ÑÑÑоки 99 const friendlyUrlObj = new URL(window.location.origin + '/rodeos/'); 100 101 // ÐобавлÑем паÑамеÑÑÑ Ð´Ð»Ñ Ð´ÑÑжеÑÑвенного URL 102 const searchValue = formData.get('s'); 103 const dateFromValue = formData.get('date_from'); 104 const dateToValue = formData.get('date_to'); 105 106 if (formData.get('filter_by_date')) { 107 friendlyUrlObj.searchParams.append('filter_by_date', '1'); 108 } 109 if (searchValue) { 110 friendlyUrlObj.searchParams.append('s', searchValue); 111 } 112 if (dateFromValue) { 113 friendlyUrlObj.searchParams.append('date_from', dateFromValue); 114 } 115 if (dateToValue) { 116 friendlyUrlObj.searchParams.append('date_to', dateToValue); 117 } 118 119 const friendlyUrl = friendlyUrlObj.toString(); 120 121 loadResults(ajaxUrl, friendlyUrl); 122 }); 123 } 124 125 // ФÑнкÑÐ¸Ñ Ð´Ð»Ñ Ð½Ð°Ð²ÐµÑÐ¸Ð²Ð°Ð½Ð¸Ñ Ð¾Ð±ÑабоÑÑиков на ÑÑÑлки пагинаÑии 126 function bindPaginationLinks() { 127 const paginationContainer = document.querySelector('.rodeosBlock__result'); 128 if (paginationContainer) { 129 const links = paginationContainer.querySelectorAll('a'); 130 links.forEach(function(link) { 131 if (link.classList.contains('btn')) { 132 return; 133 } 134 link.addEventListener('click', function(e) { 135 e.preventDefault(); 136 const linkUrl = new URL(link.getAttribute('href'), window.location.origin); 137 138 // Ð¡Ð¾Ñ ÑанÑем ÑекÑÑие паÑамеÑÑÑ Ð¿Ð¾Ð¸Ñка из ÑоÑÐ¼Ñ 139 const currentFormData = new FormData(form); 140 const searchQuery = currentFormData.get('s'); 141 const dateFrom = currentFormData.get('date_from'); 142 const dateTo = currentFormData.get('date_to'); 143 144 // ÐобавлÑем паÑамеÑÑÑ Ð¿Ð¾Ð¸Ñка к пагинаÑии 145 if (searchQuery) { 146 linkUrl.searchParams.set('s', searchQuery); 147 } 148 if (dateFrom) { 149 linkUrl.searchParams.set('date_from', convertDateFormat(dateFrom)); 150 } 151 if (dateTo) { 152 linkUrl.searchParams.set('date_to', convertDateFormat(dateTo)); 153 } 154 155 linkUrl.searchParams.set('action', 'load_rodeos'); 156 linkUrl.searchParams.set('filter_by_date', '1'); 157 158 const ajaxUrl = myAjax.ajaxurl + '?' + linkUrl.searchParams.toString(); 159 160 // ÐÐ»Ñ Ð´ÑÑжеÑÑвенного URL ÑбиÑаем паÑамеÑÑ action 161 linkUrl.searchParams.delete('action'); 162 const friendlyUrl = linkUrl.toString(); 163 164 loadResults(ajaxUrl, friendlyUrl); 165 }); 166 }); 167 } 168 } 169 170 // ÐавеÑим обÑабоÑÑик на пагинаÑионнÑе ÑÑÑлки ÑÑÐ°Ð·Ñ Ð¿Ñи загÑÑзке ÑÑÑаниÑÑ 171 bindPaginationLinks(); 172 173 // ÐбÑабоÑка кнопки "Ðазад/ÐпеÑÑд" в бÑаÑзеÑе (опÑионалÑно) 174 window.addEventListener('popstate', function(e) { 175 // ÐдеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ полÑÑиÑÑ window.location.href и вÑполниÑÑ loadResults() Ð´Ð»Ñ Ð²Ð¾ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑоÑÑоÑÐ½Ð¸Ñ 176 location.reload(); 177 }); 178});
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.