1// пÑогÑами 2const mobileNavTabButtons = document.querySelectorAll(".mobile button.tab-btn"); 3mobileNavTabButtons.forEach(function(tabButton) { 4 tabButton.addEventListener("click", e => { 5 e.stopPropagation(); 6 const dataId = e.target.getAttribute("data-id") 7 let activeItem = document.querySelector(".mobile #"+dataId+"") 8 let parent = e.target.closest(".tab-btn-wrapper"); 9 if(e.target.classList.contains("active")){ 10 e.target.classList.remove("active"); 11 parent.classList.remove("active"); 12 activeItem.classList.add("hide"); 13 }else{ 14 e.target.classList.add("active"); 15 parent.classList.add("active"); 16 activeItem.classList.remove("hide"); 17 } 18 }); 19}); 20const desktopTabButtons = document.querySelectorAll(".desktop .tab-btn"); 21desktopTabButtons.forEach(function(tabButton) { 22 tabButton.addEventListener("click", e => { 23 e.stopPropagation(); 24 25 const tabNavs = document.querySelectorAll(".desktop button.active"); 26 const tabItems = document.querySelectorAll(".desktop .tab-item"); 27 28 tabNavs.forEach( 29 tabNav => { 30 tabNav.classList.remove("active"); 31 let parent = tabNav.closest(".tab-btn-wrapper"); 32 parent.classList.remove("active"); 33 } 34 ); 35 tabItems.forEach(tabItem => { 36 tabItem.classList.add("hide"); 37 38 let tabItemId = tabItem.getAttribute("id"); 39 40 if (e.target.getAttribute("data-id") === tabItemId) { 41 let activeTabButtons = document.querySelectorAll(".desktop [data-id=\'"+tabItemId+"\']") 42 activeTabButtons.forEach(activeTabButton => { 43 let parent = activeTabButton.closest(".tab-btn-wrapper"); 44 parent.classList.add("active"); 45 activeTabButton.classList.add("active"); 46 }) 47 48 tabItem.classList.remove("hide"); 49 50 } 51 }); 52 }); 53}); 54 55// лÑÑилÑник на головнÑй ÑÑоÑÑнÑÑ 56let SHEET_ID = '12znsz5XtRs3trncueTpuOuBfx_XlSiAme-SHiNQ_dtM'; 57let SHEET_TITLE = 'Data'; 58let SHEET_RANGE = 'A3:B8'; 59 60let FULL_URL = 'https://docs.google.com/spreadsheets/d/' + SHEET_ID + '/gviz/tq?sheet=' + SHEET_TITLE + '&range=' + SHEET_RANGE; 61 62fetch(FULL_URL) 63.then(res => res.text()) 64.then(rep => { 65 let data = JSON.parse(rep.substr(47).slice(0, -2)); 66 let table_rows = data.table.rows; 67 let value_elements = document.getElementsByClassName('info_data_value'); 68 69 for (let i = 0; i < table_rows.length && i < value_elements.length; i++) { 70 let counter = value_elements[i]; 71 let cell_value = table_rows[i].c[1]?.v || 0; 72 73 counter.setAttribute("akhi", cell_value); 74 75 const speed = 200; 76 77 const animate = () => { 78 const value = +counter.getAttribute('akhi'); 79 const data = +parseIntWithSpaces(counter.innerText || "0"); 80 81 const time = value / speed; 82 if (data < value) { 83 counter.innerText = numberWithSpaces(Math.ceil(data + time)); 84 setTimeout(animate, 1); 85 } else { 86 counter.innerText = numberWithSpaces(value); 87 } 88 } 89 90 animate(); 91 } 92}); 93 94function numberWithSpaces(x) { 95 return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, " "); 96} 97 98function parseIntWithSpaces(x) { 99 return parseInt(x.replace(/\s/g, ''), 10); 100} 101// каÑалог пÑоÑкÑÑв 102 function getArrayofIdForRowsWithReports(){ 103 var matchedIds = []; 104 table.rows().every(function() { 105 var d = this.data().n; 106 var fileUrlPDF = "/wp-content/uploads/doc/PZ/" + d + ".pdf"; 107 var fileUrlXLSX = "/wp-content/uploads/doc/PZ/" + d + ".xlsx"; 108 109 if (checkFileExists(fileUrlPDF) && checkFileExists(fileUrlXLSX)) { 110 matchedIds.push('^' + parseInt(d) + '$'); 111 112 } 113 }); 114 115 var pattern = matchedIds.join('|'); 116 console.log(pattern); 117 return pattern; 118 } 119 120 function filterGlobal () { 121 console.log('filterGlobal'); 122 $('#example').DataTable().search( 123 $('#global_filter').val(), 124 $('#global_regex').prop('checked'), 125 $('#global_smart').prop('checked') 126 ).draw(); 127 } 128 function filterColumn ( i ) { 129 console.log('filterColumn'); 130 $('#example').DataTable().column( i ).search( 131 $('#col'+i+'_filter').val(), 132 $('#col'+i+'_regex').prop('checked'), 133 $('#col'+i+'_smart').prop('checked') 134 ).draw(); 135 } 136 137 138 $('select.column_filter').on( 'change', function () { 139 filterColumn( $(this).parents('tr').attr('data-column') ); 140 } ); 141 142 function format(d) { 143 return ( 144 '<div class="block1" style="">'+ 145 '<dd>' + 146 '<img src="https://veteranfund.com.ua/wp-content/uploads/doc/id/'+ d.n + 147 '.jpg">'+ 148 '</dd>' + 149 '</div>'+ 150 151 '<div class="block2">'+ 152 '<dl>' + 153 '<dt>
153ÐоÑоÑкий Ð¾Ð¿Ð¸Ñ Ð¿ÑоÑкÑÑ:</dt>' + 154 '<dd>' + 155 d.u + 156 '</dd>' + 157 '<dt>ÐеÑеможеÑÑ:</dt>' + 158 '<dd>' + 159 d.w + 160 '</dd>' + 161 '<dt>РегÑон де пÑоÑÐºÑ ÑеалÑзÑÑÑÑÑÑ:</dt>' + 162 '<dd>' + 163 d.r + 164 '</dd>'+ 165 '<dt>ÐÑÑÑе ÑеÑÑÑÑаÑÑÑ Ð¿ÐµÑеможÑÑ:</dt>' + 166 '<dd>' + 167 d.s + 168 '</dd>'+ 169 '<dt>ÐÑÐ´Ð¶ÐµÑ Ð¿ÑоÑкÑÑ:</dt>' + 170 '<dd>' + 171 d.y + 172 '</dd>' + 173 '<dt>Ð ÑÐ°Ð¼ÐºÐ°Ñ ÑÐºÐ¾Ñ ÐºÐ¾Ð½ÐºÑÑÑÐ½Ð¾Ñ Ð¿ÑогÑамми бÑло обÑано пеÑеможÑем:</dt>' + 174 '<dd>' + 175 d.q + 176 '</dd>' + 177 '<dt>ÐÐ¾Ð¼ÐµÑ Ð´Ð¾Ð³Ð¾Ð²Ð¾ÑÑ:</dt>' + 178 '<dd>' + 179 d.k + 180 '</dd>' + 181 '<dt>ÐапÑÑм пÑоÑкÑÑ:</dt>' + 182 '<dd>' + 183 d.t + 184 '</dd>' + 185 '</dd>' + 186 '<dt>ÐоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° ÑайÑ, ÑоÑÑалÑÐ½Ñ Ð¼ÐµÑÐµÐ¶Ñ Ð¿ÑоÑкÑÑ:' + 187 '<dd>' + 188 d.i + 189 '</br></br></dd>' + 190 '</dt>' + 191 '<dt>' + 192 '<dd>' + 193 showFiles(d.k, d.o, d.p) 194 + 195 '</dt>' 196 ); 197 }; 198 199 200 function showFiles(d, o, p){ 201 if (p.length > 3 && o.length > 3) { 202 var new_d = d.replaceAll("/", ""); 203 return ( 204 '<div class="block1" style="width:50%"><center><a href="/wp-content/uploads/doc/PZ/zmist/'+ new_d +'_змÑÑÑовний.pdf" target="_blank"><img src="https://veteranfund.com.ua/wp-content/uploads/doc/icon.png" style="width:75px"><br>ФÑналÑна змÑÑÑова звÑÑнÑÑÑÑ</a></center></div> <div class="block2" style="width:50%"><center><a href="/wp-content/uploads/doc/PZ/finans/'+ new_d +'_ÑÑнанÑовий.pdf" target="_blank"><img src="https://veteranfund.com.ua/wp-content/uploads/doc/icon.png" style="width:75px"><br>ФÑналÑна ÑÑнанÑова звÑÑнÑÑÑÑ</a></center></div>'); 205 } else { 206 return ''; 207 } 208 } 209 210 211 let pattern = ''; 212 let table = new DataTable('#example', { 213 ajax: 'https://veteranfund.com.ua/wp-content/uploads/doc/server_processing.php', 214 processing: true, 215 serverSide: true, 216 lengthMenu: [ 25, 50 ], 217 search: { 218 regex: true 219 }, 220 221 language: { 222 paginate: { 223 Next: '>>', 224 Previous: '<<' 225 }, 226 "infoEmpty": " РезÑлÑÑаÑи вÑдÑÑÑнÑ", 227 "info": 'Ðоказано _PAGE_ з _PAGES_ ÑÑоÑÑнок', 228 "emptyTable": "ÐÑдÑÑÑÐ½Ñ Ð²ÑдповÑдноÑÑÑ", 229 "infoFiltered": "(ÐоÑÑк здÑйÑнÑвавÑÑ Ð· _MAX_ пеÑеможÑÑв конкÑÑÑÐ½Ð¸Ñ Ð²ÑдбоÑÑв пÑоÑÐ
229ºÑÑв)", 230 "lengthMenu": "ÐоказÑваÑи _MENU_ пеÑеможÑÑв на ÑÑоÑÑнÑÑ", 231 "loadingRecords": "ÐаванÑажÑеÑÑÑÑ...", 232 "processing": "ÐбÑоблÑеÑÑÑÑ...", 233 "search": "ШÑкаÑи:", 234 "paginate": { 235 "first": "ÐеÑÑа", 236 "previous": "<<", 237 "next": ">>", 238 "last": "ÐÑÑаннÑ" 239 }, 240 241 "zeroRecords": "ÐнÑоÑмаÑÑÑ Ð²ÑдÑÑÑнÑ", 242 }, 243 244 columns: [ 245 { 246 className: 'dt-control', 247 orderable: false, 248 data: null, 249 defaultContent: '' 250 }, 251 { data: 'n'}, 252 { data: 'e' }, 253 { data: 'r' }, 254 { data: 's' }, 255 { data: 't' }, 256 { data: 'q' }, 257 { data: 'w' }, 258 { data: 'o' }, 259 { data: 'p' }, 260 { data: 'k' }, 261 262 ], 263 columnDefs: [ 264 { 265 targets: -1, 266 visible: false 267 }, 268 269 { 270 targets: -2, 271 visible: false 272 }, 273 { 274 targets: -3, 275 visible: false 276 }, 277 { 278 targets: -4, 279 visible: false 280 }, 281 { 282 targets: -5, 283 visible: false 284 }, 285 { 286 targets: -6, 287 visible: false 288 289 }, 290 { 291 targets: -7, 292 visible: false 293 294 }, 295 { 296 targets: -8, 297 visible: false 298 299 } 300 301 302 ], 303 order: [[1, 'asc']], 304 initComplete: function (settings, json) { 305 } 306 }); 307 308 table.on('click', 'td.dt-control', function (e) { 309 let tr = e.target.closest('tr'); 310 let row = table.row(tr); 311 if (row.child.isShown()) { 312 row.child.hide(); 313 } 314 else { 315 row.child(format(row.data())).show(); 316 } 317 }); 318 document.querySelectorAll('input.global_filter').forEach((el) => { 319 el.addEventListener(el.type === 'text' ? 'keyup' : 'change', () => 320 filterGlobal(table) 321 ); 322 }); 323 324 document.querySelectorAll('input.column_filter').forEach((el) => { 325 let tr = el.closest('tr'); 326 let columnIndex = tr.getAttribute('data-column'); 327 328 el.addEventListener(el.type === 'text' ? 'keyup' : 'change', () => 329 filterColumn(table, columnIndex) 330 ); 331 }); 332 333 334 335 336// ваканÑÑÑ 337 const titles = document.querySelectorAll(".vakansii-title");
338 titles.forEach(function(title) { 339 title.addEventListener("click", e => { 340 e.stopPropagation(); 341 var dataId = title.getAttribute("data-id"); 342 343 var content = document.getElementById(dataId); 344 if (content) { 345 if (content.style.display === "none" || content.style.display === "") { 346 content.style.display = "block"; 347 } else { 348 content.style.display = "none"; 349 } 350 } 351 }); 352 }); 353 354// ÑÑÑоÑÑÑ Ð¿ÐµÑеможÑÑв 355document.addEventListener("DOMContentLoaded", function () { 356 var list = document.querySelector(".category-filter ul"); 357 var divs = document.querySelectorAll(".posts"); 358 359 list.addEventListener("click", function (event) { 360 if (event.target.tagName === "LI") { 361 var allLiElements = list.getElementsByTagName("li"); 362 for (var i = 0; i < allLiElements.length; i++) { 363 allLiElements[i].classList.remove("active"); 364 } 365 366 event.target.classList.add("active"); 367 368 var dataId = event.target.getAttribute("data-id"); 369 370 divs.forEach(function (div) { 371 if (div.id === dataId) { 372 div.classList.add("active"); 373 } else { 374 div.classList.remove("active"); 375 } 376 }); 377 } 378 }); 379}); 380 381 382// ÑендеÑÐ½Ñ Ð·Ð°ÐºÑпÑÐ²Ð»Ñ 383 384const SHEET_URL = 385'https://docs.google.com/spreadsheets/d/15zsErynmpVcqvD9Cgi3FhuKRmtpMiza8LJyXuMsxUeI/export?format=csv&gid=0'; 386 387let tenders = []; 388 389fetch(SHEET_URL) 390.then(function(response) { 391return response.text(); 392}) 393.then(function(csv) { 394 395const parsed = Papa.parse(csv, { 396 skipEmptyLines: true 397}); 398 399tenders = parsed.data.slice(1); 400 401renderYearFilter(tenders); 402renderDkFilter(tenders); 403renderAccordion(tenders); 404 405}); 406 407function renderYearFilter(data) { 408 409const select = document.getElementById('tendersYear'); 410 411const years = Array.from( 412new Set( 413data.map(function(item) { 414return item[1]; 415}) 416) 417) 418.filter(Boolean) 419.sort(function(a, b) { 420return b - a; 421}); 422 423years.forEach(function(year) { 424const option = document.createElement('option'); 425option.value = year; 426option.textContent = year; 427select.appendChild(option); 428}); 429 430select.addEventListener('change', applyFilters); 431} 432 433function renderDkFilter(data) { 434 435const select = document.getElementById('tendersDk'); 436 437const codes = Array.from( 438new Set( 439data.map(function(item) { 440return item[2]; 441}) 442) 443) 444.filter(Boolean) 445.sort(); 446 447codes.forEach(function(code) { 448const option = document.createElement('option'); 449option.value = code; 450option.textContent = code; 451select.appendChild(option); 452}); 453 454select.addEventListener('change', applyFilters); 455} 456 457function applyFilters() { 458 459const selectedYear = document.getElementById('tendersYear').value; 460const selectedDk = document.getElementById('tendersDk').value; 461 462const filteredData = tenders.filter(function(item) { 463 464const yearMatch = 465 selectedYear === 'all' || String(item[1]) === selectedYear; 466 467const dkMatch = 468 selectedDk === 'all' || String(item[2]) === selectedDk; 469 470return yearMatch && dkMatch; 471 472}); 473 474renderAccordion(filteredData); 475} 476 477function renderAccordion(data) { 478 479const container = document.getElementById('tendersAccordion'); 480 481container.innerHTML = ''; 482 483data.forEach(function(item) { 484 485const accordionItem = document.createElement('div'); 486 487accordionItem.className = 'accordion-item'; 488 489let detailsLink = ''; 490 491if (item[8]) { 492 detailsLink = 493 '<a href="' + item[8] + '" target="_blank" rel="noopener">' + 494 'ÐеÑÐ°Ð»Ñ Ð·Ð°ÐºÑпÑвлÑ' + 495 '</a>'; 496} 497 498accordionItem.innerHTML = 499 500 '<button class="accordion-header" type="button">' + 501 502 503 '<span class="accordion-header-value">' + 504 (item[0] || '') + 505 '</span>' + 506 507 '</button>' + 508 509 '<div class="accordion-content">' + 510 511 '<div class="accordion-inner">' + 512 513 '<p>' + 514 '<strong>Ð Ñк:</strong> ' + 515 (item[1] || '') + 516 '</p>' + 517 '<p><strong>ÐбÒÑÑнÑÑÐ²Ð°Ð½Ð½Ñ ÑÐµÑ Ð½ÑÑÐ½Ð¸Ñ Ñа ÑкÑÑÐ½Ð¸Ñ Ñ Ð°ÑакÑеÑиÑÑик пÑедмеÑа закÑпÑвлÑ, ÑозмÑÑÑ Ð±ÑджеÑного пÑизнаÑеннÑ, оÑÑкÑÐ²Ð°Ð½Ð¾Ñ Ð²Ð°ÑÑоÑÑÑ Ð¿ÑедмеÑа закÑпÑвлÑ</strong></p>' + 518 '<p>' + 519 '<strong>Ðид закÑпÑвлÑ:</strong><br>' + 520 (item[2] || '') + 521 '</p>' + 522 '<p>' + 523 '<strong>Ðод ÐÐ:</strong><br>' + 524 (item[3] || '') + 525 '</p>' + 526 527 '<p>' + 528 '<strong>Ðазва пÑедмеÑа закÑпÑвлÑ:</strong><br>' + 529 (item[4] || '') + 530 '</p>' + 531 532 '<p>' + 533 '<strong>ÐбÒÑÑнÑÑÐ²Ð°Ð½Ð½Ñ Ð¾ÑÑкÑÐ²Ð°Ð½Ð¾Ñ Ð²Ð°ÑÑоÑÑÑ:</strong><br>' + 534 (item[5] || '') + 535 '</p>' + 536 537 '<p>' + 538 '<strong>ÐÑÑкÑвана ваÑÑÑÑÑÑ Ð·Ð°ÐºÑпÑвлÑ:</strong><br>' + 539 (item[6] || '') + 540 '</p>' + 541 542 '<p>' + 543 '<strong>РозмÑÑ Ð±ÑджеÑного пÑизнаÑеннÑ:</strong><br>' + 544 (item[7] || '') + 545 '</p>' + 546 547 '<p>' + 548 '<strong>ÐбÒÑÑнÑÑÐ²Ð°Ð½Ð½Ñ ÑÐµÑ Ð½ÑÑÐ½Ð¸Ñ Ñа ÑкÑÑÐ½Ð¸Ñ Ñ Ð°ÑакÑеÑиÑÑик:</strong><br>' + 549 (item[8] || '') + 550 '</p>' + 551 552 detailsLink + 553 554 '</div>' + 555 556 '</div>'; 557 558container.appendChild(accordionItem); 559 560}); 561 562initAccordion(); 563} 564 565function initAccordion() { 566 567document.querySelectorAll('.accordion-header').forEach(function(button) { 568 569button.addEventListener('click', function() { 570 571 const item = button.parentElement; 572 573 item.classList.toggle('active'); 574}); 575 576}); 577}
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.