1jQuery(document).ready(function ($) { 2 3 /* 4 * config 5 *------------------------------*/ 6 var screen = { 7 'window_width': $(window).width(), 8 'window_height': $(window).height(), 9 'document_width': $(document).width(), 10 'document_height': $(document).height() 11 }; 12 13 var device = { 14 'tablet_land': 1024, // landscape 15 'tablet_port': 768, // portrait 16 'smartphone': 600 // smartphone 17 }; 18 19 var device = { 20 'is_desktop': (screen.window_width > device.tablet_land) ? true : false, 21 'is_tablet_land': (screen.window_width <= device.tablet_land && screen.window_width >= device.tablet_port) ? true : false, 22 'is_tablet_port': (screen.window_width <= device.tablet_port && screen.window_width >= screen.smartphone) ? true : false, 23 'is_smartphone': (screen.window_width < device.tablet_port) ? true : false 24 }; 25 26 27 /* 28 * fix header 29 *------------------------------*/ 30 if (device.is_desktop) 31 fixHeader(); 32 function fixHeader() { 33 $(window).scroll(function (e) { 34 var scroll = $(window).scrollTop(); 35 if (scroll > 160) { 36 $('.site-header').addClass('fixed'); 37 } else { 38 $('.site-header').removeClass('fixed'); 39 } 40 }); 41 } 42 43 /* 44 * search 45 *------------------------------*/ 46 $('.search-icon').click(function () { 47 $(this).addClass('hidden'); 48 $('.search-close').removeClass('hidden'); 49 $('.site-header .search-form').fadeIn(100).find('.search-field').focus(); 50 }); 51 52 $('.search-close').click(function () { 53 $(this).addClass('hidden'); 54 $('.search-icon').removeClass('hidden'); 55 $('.site-header .search-form').fadeOut(100); 56 }); 57 58 /* 59 * Menu 60 *------------------------------*/ 61 if (device.is_desktop) { 62 $('.primary-menu>li').hover( 63 function () { 64 $('.site-header .sub-menu').hide(); 65 $(this).find('.sub-menu').show(); 66 }, 67 function () { 68 $('.site-header .sub-menu').hide(); 69 $('.primary-menu>li.current-menu-ancestor>ul').show(); 70 } 71 ); 72 } 73 74 // mobile menu 75 if (!device.is_desktop) { 76 77 $('#toggle-menu').click(function () { 78 $(this).toggleClass('on'); 79 $('.mobile-header').toggleClass('on'); 80 $('.mobile-header .menu-container').toggle(); 81 }); 82 83 $('.mobile-header li.menu-item-has-children>a').on('click', function (e) { 84 e.preventDefault(); 85 $('.mobile-header .menu-item-has-children').removeClass('on'); 86 $('.sub-menu').removeClass('on'); 87 $(this).parent().toggleClass('on'); 88 $(this).parent().find('.sub-menu').toggleClass('on'); 89 }); 90 } 91 92 /* 93 * Live match 94 *------------------------------*/ 95 //initLiveMatch(); 96 function initLiveMatch() { 97 98 $.get("http://app.fshf.org/json/live", function (data) { 99 100 var away_team = data[0]['away_team']; 101 var away_team_flag = data[0]['away_team_flag']; 102 var city = data[0]['city']; 103 var competition_name = data[0]['competition_name']; 104 var date = data[0]['date']; 105 var ft_result = data[0]['ft_result']; 106 var home_team = data[0]['home_team']; 107 var home_team_flag = data[0]['home_team_flag']; 108 var away_team_flag = data[0]['away_team_flag']; 109 var ht_result = data[0]['ht_result']; 110 var is_live = data[0]['is_live']; 111 112 var match_minute = data[0]['match_minute']; 113 var round_number = data[0]['round_number']; 114 var stadium = data[0]['stadium']; 115 var time = data[0]['time']; 116 117 118 var match_details_str = $('.live-match-link').attr('data-str'); 119 120 $('.live-match .date').text(date); 121 $('.live-match .stadium').text(stadium); 122 $('.live-match .competition').text(competition_name); 123 $('.live-match .home-team-name').text(home_team); 124 $('.live-match .away-team-name').text(away_team); 125 $('.live-match .home-team-logo').attr('style', 'background-image:url(' + home_team_flag + ')'); 126 $('.live-match .away-team-logo').attr('style', 'background-image:url(' + away_team_flag + ')'); 127 $('.live-match .link').attr('href', 'http://' + window.location.hostname + '/garat/?query=info&match_id=' + data[0]['id']); 128 129 $('.live-match .score').text(ft_result); 130 131 132 $('.live-match .live-match-link').html('<a href="http://' + window.location.hostname + '/garat/?query=info&match_id=' + data[0]['id'] + '" style="color:#fff;">' + match_details_str + '</a>'); 133 134 }); 135 } 136 137 /* 138 * slick sliders 139 *------------------------------*/ 140 var sliders = ['headline', 'home-news-slides', 'featured-products', 'match-slick', 'news-sli
140de', 'nm-addon-slider']; 141 142 $(sliders).each(function (key, value) { 143 slide_init('.' + value); 144 }); 145 146 function slide_init(selector) { 147 var isAddonSlider = selector === '.nm-addon-slider'; 148 149 $(selector).slick({ 150 autoplay: true, 151 autoplaySpeed: 7000, 152 arrows: isAddonSlider ? false : (device.is_desktop), 153 dots: (device.is_desktop && selector != '.home-news-slides') ? true : false, 154 infinite: true, 155 speed: 300, 156 slidesToShow: 1, 157 adaptiveHeight: false, 158 fade: (selector != '.match-slick') ? true : false, 159 pauseOnHover: false, 160 pauseOnFocus: false, 161 }).find('.item').fadeIn(300); 162 } 163 164 165 $('.image-gallery').slick({ 166 autoplay: true, 167 autoplaySpeed: 3000, 168 arrows: device.is_desktop ? true : false, 169 dots: device.is_desktop ? false : true, 170 infinite: true, 171 speed: 300, 172 slidesToShow: 1, 173 adaptiveHeight: false, 174 fade: true, 175 pauseOnHover: false, 176 pauseOnFocus: false, 177 }).find('.item').fadeIn(300); 178 179 $('.players-slide').slick({ 180 autoplay: true, 181 autoplaySpeed: 3000, 182 arrows: true, 183 dots: false, 184 infinite: true, 185 speed: 300, 186 slidesToShow: 1, 187 adaptiveHeight: false, 188 fade: true, 189 pauseOnHover: false, 190 pauseOnFocus: false, 191 }).find('.item').fadeIn(300); 192 193 $('._sponsors_').slick({ 194 autoplay: true, 195 autoplaySpeed: 3000, 196 arrows: false, 197 dots: true, 198 infinite: true, 199 speed: 300, 200 slidesToShow: 1, 201 adaptiveHeight: false, 202 fade: true, 203 pauseOnHover: false, 204 pauseOnFocus: false, 205 }).find('.item').fadeIn(300); 206 207 //partners 208 $('.slick-slides').slick({ 209 arrows: false, 210 dots: false, 211 infinite: true, 212 speed: 300, 213 slidesToShow: 6, 214 slidesToScroll: 1, 215 autoplay: true, 216 pauseOnHover: false, 217 pauseOnHover: false, 218 responsive: [ 219 { 220 breakpoint: 1024, settings: { slidesToShow: 3, slidesToScroll: 3, infinite: true, dots: true } 221 }, 222 { breakpoint: 600, settings: { slidesToShow: 2, slidesToScroll: 2 } }, 223 { breakpoint: 480, settings: { slidesToShow: 1, slidesToScroll: 1 } } 224 ] 225 }); 226 227 $('.euro-2025-slideshow').slick({ 228 autoplay: true, 229 autoplaySpeed: 7000, 230 arrows: false, 231 dots: true, 232 infinite: true, 233 speed: 300, 234 slidesToShow: 1, 235 adaptiveHeight: false, 236 fade: true, 237 pauseOnHover: false, 238 pauseOnFocus: false, 239 }).find('.item').fadeIn(300); 240 241 /** 242 * Lazy load 243 *------------------------------*/ 244 $('body').bind('post-load', lazy_load_init); 245 lazy_load_init(); 246 function lazy_load_init() { 247 $('img[data-lazy-src]').bind('scrollin', { distance: 200 }, function () { 248 lazy_load_image(this); 249 }); 250 251 //need to force load gallery images in Jetpack Carousel and give up lazy-loading otherwise images don't show up correctly 252 $('[data-carousel-extra]').each(function () { 253 $(this).find('img[data-lazy-src]').each(function () { 254 lazy_load_image(this); 255 }); 256 }); 257 } 258 259 function lazy_load_image(img) { 260 var $img = $(img), 261 src = $img.attr('data-lazy-src'); 262 263 if (!src || 'undefined' === typeof (src)) 264 return; 265 266 $img.unbind('scrollin') // remove event binding 267 .hide() 268 .removeAttr('data-lazy-src') 269 .attr('data-lazy-loaded', 'true'); 270 img.src = src; 271 $img.fadeIn(); 272 } 273 274 /** 275 * fix sidebar height 276 *------------------------------*/ 277 if (device.is_desktop) { 278 279 //home 280 var home_left = $('.home-left').height(); 281 $('.home-sidebar').height(home_left); 282 283 //global - inside pages 284 var content = $('.main-content'); 285 var sidebar = $('.sidebar:not(.home-sidebar)'); 286 287 // get content and sidebar height 288 var getContentHeight = content.outerHeight(); 289 var getSidebarHeight = sidebar.outerHeight(); 290 291 // check if content height is bigger than sidebar 292 if (getContentHeight > getSidebarHeight) { 293 sidebar.css('min-height', getContentHeight); 294 } 295 296 // check if sidebar height is bigger than content 297 if (getSidebarHeight > getContentHeight) { 298 content.css('min-height', getSidebarHeight); 299 } 300 301 } 302 303 /** 304 * nicescroll 305 *------------------------------*/ 306 nicescroll(); 307 function nicescroll() { 308 if (!device.is_smartphone) { 309 $('.nicescroll').niceScroll({ 310 //cursorcolor: $(this).attr('data-cursor-color'), 311 cursorcolor: '#fff', 312 cursoropacitymin: 0.5, 313 railpadding: { top: 10, right: 3, left: 3, bottom: 10 },
314 }); 315 } 316 } 317 318 /** 319 * Sroll to target element 320 *-----------------------------*/ 321 function scrollTo(elem) { 322 $('html, body').animate({ 323 scrollTop: $(elem).offset().top 324 }, 300); 325 } 326 327 /** 328 * Media Gallery 329 *------------------------------*/ 330 $('.media-gallery').slick({ 331 dots: false, 332 arrow: false, 333 infinite: false, 334 speed: 300, 335 slidesToShow: 1, 336 slidesToScroll: 1, 337 adaptiveHeight: ($('.main-content').length) ? true : false, 338 responsive: [ 339 { 340 breakpoint: 1200, 341 settings: { 342 adaptiveHeight: true 343 } 344 }, 345 ] 346 }); 347 348 349 $('._hover-preview') 350 .hover( 351 function () { 352 $(this).find('.preview').fadeIn(200); 353 }, 354 function () { 355 $(this).find('.preview').fadeOut(200); 356 }); 357 358 /** 359 * Contact form 360 *------------------------------*/ 361 contact_form(); 362 function contact_form() { 363 364 var i = 0; 365 366 var arrIndex = 0; 367 if (clang != 'sq') 368 arrIndex = 1; 369 370 $('.vfb-form-group').each(function (index, value) { 371 372 var label = $(this).find('label').text(); 373 var submitText = $('button[type=submit]').text(); 374 var label = label.split('|'); 375 376 if (typeof submitText != 'undefined') 377 var submitText = submitText.split('|'); 378 379 $(this).find('label').text(label[arrIndex]); 380 381 382 if (typeof submitText != 'undefined') 383 $('button[type=submit]').text(submitText[arrIndex]); 384 385 // placeholders 386 387 //text, url, textarea etc 388 //$(this).find('input[type=text], input[type=url], select, textarea').attr('placeholder', label[arrIndex]); 389 390 //submit 391 //if(typeof submitText != 'undefined') 392 // $(this).find('input[type=submit]').attr('value', submitText[arrIndex]); 393 394 // icons 395 var icon = $(this).find('input, textarea').val(); 396 397 // $(this).find('div').append('<i class="fa '+icon+'"></i>'); 398 $(this).find('input[type=text], input[type=url], textarea').removeAttr('value'); 399 400 i++; 401 }); 402 } 403 404 /* 405 * google docs viewer 406 *------------------------------*/ 407 open_doc(); 408 function open_doc() { 409 $(window).load(function () { 410 $('.gdoc').gdocsViewer({ 411 height: 1095 412 }); 413 }); 414 } 415 416 /** 417 * Share 418 *------------------------------*/ 419 share(); 420 function share() { 421 $('.share a').on('click', function (event) { 422 423 event.preventDefault(); 424 425 var _this = { 426 'platform': $(this).attr('data-platform'), 427 'link': $(this).attr('data-link'), 428 'media': $(this).attr('data-media') 429 } 430 431 var _platform = { 432 'facebook': 'https://www.facebook.com/sharer/sharer.php?u=', 433 'twitter': 'https://twitter.com/intent/tweet?text=', 434 'google': 'https://plus.google.com/share?url=', 435 'linkedin': 'https://www.linkedin.com/shareArticle?mini=true&url=', 436 'pinterest': 'https://pinterest.com/pin/create/button/?url={url}&media={media}' 437 } 438 439 var _window = { 440 'width': screen.window_width / 2, 441 'height': screen.window_height / 2, 442 'top': (screen.document_height / 2) / 2, 443 'left': (screen.document_width / 2) / 2, 444 } 445 if (_this.link.length) { 446 if ($.inArray(_this.platform, Object.keys(_platform)) !== -1) { 447 //check if is pinterest 448 if (_this.platform == 'pinterest' && _this.media.length) { 449 _this.link = _platform[_this.platform] 450 .replace('{url}', _this.link) 451 .replace('{media}', _this.media); 452 } else { 453 _this.link = _platform[_this.platform] + _this.link; 454 } 455 _window = 'width=' + _window.width + ', height=' + _window.height + ', top=' + _window.top + ', left=' + _window.left; 456 //_window = window.open( _this.link, _this.platform, _window ); 457 PopupCenter(_this.link, _this.platform, 600, 400); 458 } 459 } 460 }); 461 } 462 463 function PopupCenter(url, title, w, h) { 464 var dualScreenLeft = window.screenLeft != undefined ? window.screenLeft : screen.left; 465 var dualScreenTop = window.screenTop != undefined ? window.screenTop : screen.top; 466 467 var width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width; 468 var height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : screen.height; 469 470 var left = ((width / 2) - (w / 2)) + dualScreenLeft; 471 var top = ((height / 2) - (h / 2)) + dualScreenTop; 472 var newWindow = window.open(url, title, 'scrollbars=yes, width=' + w + ', height=' + h + ', top='
472+ top + ', left=' + left); 473 474 if (window.focus) { 475 newWindow.focus(); 476 } 477 } 478 479 /* 480 * tv_load_video 481 *------------------------------*/ 482 tv_load_video(); 483 function tv_load_video() { 484 485 NProgress.configure({ parent: '.expander' }); 486 487 $('.tv-grid-items .inner').click(function (e) { 488 489 e.preventDefault(); 490 491 var _this = $(this); 492 var post_id = _this.parent().data('post-id'); 493 494 $('.grid-items .item').removeClass('expanded'); 495 $('.expander').remove(); 496 _this.parent().addClass('expanded'); 497 _this.parent().append('<div class="expander"></div>'); 498 scroll_to('.expander'); 499 500 // start NProgress 501 NProgress.start(); 502 503 // Use REST API instead of AJAX 504 fetch('/wp-json/fshf/v1/tv/video/' + post_id) 505 .then(response => response.json()) 506 .then(data => { 507 $('.expander').html(renderVideoExpander(data)); 508 509 // stop NProgress 510 NProgress.done(); 511 512 // nicescroll 513 nicescroll(); 514 close_expander(); 515 share(); 516 }) 517 .catch(error => { 518 console.error('Error loading video:', error); 519 NProgress.done(); 520 }); 521 }); 522 } 523 524 // Helper function to render video expander HTML 525 function renderVideoExpander(video) { 526 // Parse iframe to add autoplay params 527 let iframe = video.video; 528 529 // Extract src from iframe 530 const srcMatch = iframe.match(/src="([^"]+)"/); 531 if (srcMatch && srcMatch[1]) { 532 let src = srcMatch[1]; 533 534 // Add query params 535 const params = { 536 controls: 1, 537 autoplay: 1, 538 hd: 1, 539 autohide: 0, 540 rel: 0 541 }; 542 543 // Add params to URL 544 const separator = src.includes('?') ? '&' : '?'; 545 const paramString = Object.entries(params).map(([k, v]) => `${k}=${v}`).join('&'); 546 const newSrc = src + separator + paramString; 547 548 // Replace src in iframe 549 iframe = iframe.replace(src, newSrc); 550 } 551 552 // Add frameborder attribute 553 iframe = iframe.replace('></iframe>', ' frameborder="0"></iframe>'); 554 555 return ` 556 <div class="video-player grid-container"> 557 <i class="fa fa-close close-expander"></i> 558 <div class="iframe-container col-lg-8 col-md-7 col-sm-7 col-xs-12 rmpl"> 559 ${iframe}
560 </div> 561 <div class="content nicescroll col-lg-4 col-md-5 col-sm-5 col-xs-12" data-cursor-color="#fff"> 562 <span class="post-date">${video.date}</span> 563 <h2>${video.title}</h2> 564 <div class="post-content"> 565 ${video.content} 566 <div class="social-sharing share"> 567 <span class="share-text"><i class="fa fa-share"></i> Share: </span> 568 <a href="#" data-platform="facebook" data-link="${video.video_url || ''}"><i class="fa fa-facebook"></i></a> 569 <a href="#" data-platform="twitter" data-link="${video.video_url || ''}"><i class="fa fa-twitter"></i></a> 570 </div> 571 </div> 572 </div> 573 </div> 574 `; 575 } 576 577 578 579 580 581 /* 582 * load_gallery 583 *------------------------------*/ 584 load_gallery(); 585 function load_gallery() { 586 $('.gallery-grid-items .item .inner').click(function (e) { 587 e.preventDefault(); 588 var _this = $(this); 589 var post_id = _this.parent().data('post-id'); 590 591 $('.gallery-grid-items .item').removeClass('expanded'); 592 $('.expander').remove(); 593 _this.parent().addClass('expanded'); 594 _this.parent().append('<div class="expander"></div>'); 595 scroll_to('.expander'); 596 597 // Use REST API instead of AJAX 598 fetch('/wp-json/fshf/v1/gallery/item/' + post_id) 599 .then(response => response.json()) 600 .then(data => { 601 $('.expander').html(renderGalleryExpander(data)); 602 603 init_gallery_slider(); 604 open_gallery(); 605 gallery_preview(); 606 nicescroll(); 607 close_expander(); 608 share(); 609 }) 610 .catch(error => { 611 console.error('Error loading gallery:', error); 612 }); 613 }); 614 } 615 616 // Helper function to render gallery expander HTML 617 function renderGalleryExpander(gallery) { 618 let imagesHtml = ''; 619 let imgsJson = []; 620 621 if (gallery.images && gallery.images.length > 0) { 622 gallery.images.forEach((img, index) => { 623 imagesHtml += `<div class="_cover" style="background-image: url(${img.url});"> 624 <button class="toggle-fullscreen open-gallery" data-gallery='${JSON.stringify(gallery.images)}'><i class="fa fa-search-plus"></i></button> 625 </div>`; 626 imgsJson.push({ 627 src: img.url, 628 title: img.title || '' 629 }); 630 }); 631 } 632 633 return ` 634 <div class="gallery-container grid-container col-xs-12 rmp"> 635 <i class="fa fa-close close-expander"></i> 636 <div class="col-lg-8 col-md-7 col-sm-7 col-xs-12 rmp"> 637 <div class="gallery-slider"> 638 ${imagesHtml} 639 </div> 640 </div> 641 <div class="content nicescroll col-lg-4 col-md-5 col-sm-5 col-xs-12" data-cursor-color="#fff"> 642 <span class="post-date">${gallery.date}</span> 643 <h2>${gallery.title}</h2> 644 <div class="post-content">${gallery.content || ''}</div> 645 </div> 646 </div> 647 `; 648 } 649 650 651 function close_expander() { 652 $('.close-expander').click(function (e) { 653 $('li.expanded').removeClass('expanded'); 654 $('.expander').remove(); 655 }); 656 } 657 658 /* 659 * scroll_to 660 * scroll to target element 661 *------------------------------*/ 662 function scroll_to(element) { 663 var top = (device.is_desktop) ? 54 : 0; 664 $('html, body').animate({ 665 scrollTop: $(element).offset().top - top 666 }, 200); 667 } 668 669 /* 670 * term_filter 671 *------------------------------*/ 672 term_filter('tv_term_filter'); 673 674 function term_filter(action) { 675 $('.fshf-tv.term-filter>li>a').click(function (e) { 676 e.preventDefault(); 677 _this = $(this); 678 $('.term-filter>li>a').removeClass('current'); 679 _this.addClass('current'); 680 $('.grid-items').empty() 681 $('.preloader').show(); 682 var term_id = _this.data('term-id'); 683 $('.load-more').attr('data-term-id', term_id); 684 $('.load-more').hide(); 685 $('.load-more').attr('data-page', 1); // Changed from offset to page 686 $('.load-more').attr('data-term-id', term_id); 687 688 // Use REST API instead of AJAX 689 fetch('/wp-json/fshf/v1/tv/videos?per_page=21&page=1&term_id=' + term_id) 690 .then(response => response.json()) 691 .then(data => { 692 let html = ''; 693 if (data.videos && data.videos.length > 0) { 694 data.videos.forEach(video => { 695 html += renderVideoItem(video); 696 }); 697 $('.grid-items').empty().html(html); 698 if (data.total_pages > 1) { 699 $('.load-more').show(); 700 $('.load-more').attr('data-page', 2); 701 } 702 } 703 $('.preloader').hide(); 704 tv_load_video(); 705 }) 706 .catch(error => { 707 console.error('Error loading videos:', error); 708 $('.preloader').hide(); 709 }); 710 }); 711 } 712 713 // Helper function to render video item HTML 714 function renderVideoItem(video) { 715 return ` 716 <li class="item" data-post-id="${video.id}"> 717 <div class="inner col-xs-12 rmp"> 718 <img src="${video.thumbnail}" class="img-responsive"> 719 <div class="_gallery-preview">${video.title}</div> 720 <div class="icon-post-format video"></div>
721 </div> 722 </li> 723 `; 724 } 725 726 // Helper function to render gallery item HTML 727 function renderGalleryItem(gallery) { 728 return ` 729 <li class="item" data-post-id="${gallery.id}" style="overflow: hidden;"> 730 <div class="inner col-xs-12 rmp"> 731 <div class="image-container"> 732 <img src="${gallery.thumbnail}" class="img-responsive"> 733 </div> 734 <div class="icon-post-format"></div> 735 <div class="_gallery-preview">${gallery.title} 736 <span class="total"><i class="fa fa-camera"></i> ${gallery.count}</span> 737 </div> 738 </div> 739 </li> 740 `; 741 } 742 743 /* 744 * load more 745 *------------------------------*/ 746 load_more(); 747 function load_more() { 748 $('.load-more').click(function (e) { 749 e.preventDefault(); 750 _this = $(this); 751 _this.addClass('loading'); 752 var page = parseInt(_this.attr('data-page')) || 1; 753 var next_page = page + 1; 754 var post_type = _this.attr('data-post-type'); 755 var term_id = _this.attr('data-term-id') || ''; 756 757 if (post_type === 'tv') { 758 // Use REST API for TV videos 759 const url = `/wp-json/fshf/v1/tv/videos?per_page=21&page=${page}&term_id=${term_id}`; 760 761 fetch(url) 762 .then(response => response.json()) 763 .then(data => { 764 _this.removeClass('loading'); 765 766 if (data.videos && data.videos.length > 0) { 767 let html = ''; 768 data.videos.forEach(video => { 769 html += renderVideoItem(video); 770 }); 771 $('.grid-items').append(html); 772 773 // Update page number for next load 774 _this.attr('data-page', next_page); 775 776 // Hide load more button if no more pages 777 if (data.current_page >= data.total_pages) { 778 _this.hide(); 779 } 780 781 tv_load_video(); 782 } else { 783 _this.hide(); 784 } 785 }) 786 .catch(error => { 787 console.error('Error loading more videos:', error); 788 _this.removeClass('loading'); 789 }); 790 } else if (post_type === 'gallery') { 791 // Use REST API for gallery 792 const url = `/wp-json/fshf/v1/gallery/items?per_page=21&page=${page}&term_id=${term_id}`; 793 794 fetch(url) 795 .then(response => response.json()) 796 .then(data => { 797 _this.removeClass('loading'); 798 799 if (data.galleries && data.galleries.length > 0) { 800 let html = ''; 801 data.galleries.forEach(gallery => { 802 html += renderGalleryItem(gallery); 803 }); 804 $('.grid-items').append(html); 805 806 // Update page number for next load 807 _this.attr('data-page', next_page); 808 809 // Hide load more button if no more pages 810 if (data.current_page >= data.total_pages) { 811 _this.hide(); 812 } 813 814 load_gallery(); 815 gallery_preview(); 816 } else { 817 _this.hide(); 818 } 819 }) 820 .catch(error => { 821 console.error('Error loading more galleries:', error); 822 _this.removeClass('loading'); 823 }); 824 } else { 825 // Keep old AJAX for other post types if any 826 var offset = _this.attr('data-offset'); 827 var increment = parseInt(offset) + 12; 828 _this.attr('data-offset', increment); 829 830 $.ajax({ 831 url: ajax_url, 832 type: 'POST', 833 data: { 834 action: 'load_more', 835 post_type: post_type, 836 offset: offset, 837 term_id: term_id 838 }, 839 success: function (res) { 840 _this.removeClass('loading'); 841 try { 842 var post_count = $.parseJSON(res).post_count; 843 if (post_count < 1) 844 $('.load-more').hide(); 845 846 } catch (error) { 847 $('.grid-items').append(res); 848 } 849 } 850 }); 851 } 852 }); 853 } 854 function init_gallery_slider() { 855 $('.gallery-slider').slick({ 856 autoplay: true, 857 autoplaySpeed: 2000, 858 arrows: true, 859 dots: false, 860 infinite: true, 861 speed: 300, 862 slidesToShow: 1, 863 adaptiveHeight: false, 864 fade: true, 865 pauseOnHover: true, 866 pauseOnFocus: true, 867 }).find('.item').fadeIn(300); 868 } 869 870 /* 871 * magnific popup - media gallery 872 *------------------------------*/ 873 open_gallery(); 874 function open_gallery() { 875 $('.open-gallery').click(function (e) { 876 e.preventDefault(); 877 var items = $(this).attr('data-gallery'); 878 879 items = $.parseJSON(items); 880 $.magnificPopup.open({ 881 items: items, 882 gallery: { 883 enabled: true 884 }, 885 type: 'image', 886 mainClass: 'mfp-fade', 887 }); 888 }); 889 } 890 891 gallery_preview(); 892 function gallery_preview() { 893 // $('.gallery-grid-items .item').hover( 894 // function(){ 895 // $(this).find('._gallery-preview').fadeIn(300); 896 // }, 897 // function(){ 898 // $(this).find('._gallery-preview').fadeOut(300); 899 // } 900 // ); 901 } 902 903 /* 904 * Accordions 905 *------------------------------*/ 906 $('button.accordion').click(function () { 907 if ($(this).hasClass('active')) { 908 $(this).removeClass('active'); 909 $(this).parent().find('.panel.active').slideUp(200); 910 } else { 911 $(this).addClass('active'); 912 $(this).parent().find('.panel').slideDown(200); 913 } 914 }); 915 916 /* 917 * Prevent copy paste 918 *------------------------------*/ 919 //prevent copy-paste 920 // if(typeof is_loggedin !='undefined' && !is_loggedin) 921 // _preventCopy(); 922 923 function _preventCopy() { 924 925 //disable right click 926 jQuery(window).on('contextmenu', function () { 927 return false;
928 }); 929 930 //disable [cut, copy, paste] 931 jQuery(window).bind('cut copy paste', function (e) { 932 e.preventDefault(); 933 }); 934 935 //disable selection 936 //jQuery(window).disableSelection(); 937 938 //disable ctr+u 939 document.onkeydown = function (e) { 940 if (e.ctrlKey && 941 (e.keyCode === 67 || 942 e.keyCode === 86 || 943 e.keyCode === 85 || 944 e.keyCode === 117)) { 945 return false; 946 } else { 947 return true; 948 } 949 }; 950 } 951 952 /* 953 * fix blocks height 954 *------------------------------*/ 955 if (device.is_desktop || device.is_tablet_land || device.is_tablet_port) { 956 //players 957 $('.players .group.list').matchHeight(); 958 959 //sitemap menu 960 $('.footer-menu>li').matchHeight(); 961 962 //table legend 963 //$('.single table.legend').height($('table.ranking').height() - 35); 964 965 //$('.home-articles .metadata').matchHeight(); 966 967 968 } 969 $('.assembly-team').matchHeight(); 970 /* 971 * table tr link 972 *------------------------------*/ 973 tr_link(); 974 function tr_link() { 975 $('tr').click(function (e) { 976 var href = $(this).attr('data-href'); 977 if (typeof href != 'undefined') 978 window.location = $(this).data('href'); 979 }); 980 } 981 982 /* 983 * translate shop fields(number, name) 984 *------------------------------*/ 985 if (clang == 'en') { 986 $('.wccpf_fields_table label[for=numer]').text('Number'); 987 $('.wccpf_fields_table label[for=emer]').text('Name'); 988 } 989 990 /* 991 * Newsletter form - populate country select list 992 *-------------------------------------------------*/ 993 $('.country-select-list').empty().append('<option value="AF">Afghanistan</option><option value="AX">à land Islands</option><option value="AL">Albania</option><option value="DZ">Algeria</option><option value="AS">American Samoa</option><option value="AD">Andorra</option><option value="AO">Angola</option><option value="AI">Anguilla</option><option value="AQ">Antarctica</option><option value="AG">Antigua and Barbuda</option><option value="AR">Argentina</option><option value="AM">Armenia</option><option value="AW">Aruba</option><option value="AU">Australia</option><option value="AT">Austria</option><option value="AZ">Azerbaijan</option><option value="BS">Bahamas</option><option value="BH">Bahrain</option><option value="BD">Bangladesh</option><option value="BB">Barbados</option><option value="BY">Belarus</option><option value="BE">Belgium</option><option value="BZ">Belize</option><option value="BJ">Benin</option><option value="BM">Bermuda</option><option value="BT">Bhutan</option><option value="BO">Bolivia, Plurinational State of</option><option value="BQ">Bonaire, Sint Eustatius and Saba</option><option value="BA">Bosnia and Herzegovina</option><option value="BW">Botswana</option><option value="BV">Bouvet Island</option><option value="BR">Brazil</option><option value="IO">British Indian Ocean Territory</option><option value="BN">Brunei Darussalam</option><option value="BG">Bulgaria</option><option value="BF">Burkina Faso</option><option value="BI">Burundi</option><option value="KH">Cambodia</option><option value="CM">Cameroon</option><option value="CA">Canada</option><option value="CV">Cape Verde</option><option value="KY">Cayman Islands</option><option value="CF">Central African Republic</option><option value="TD">Chad</option><option value="CL">Chile</option><option value="CN">China</option><option value="CX">Christmas Island</option><option value="CC">Cocos (Keeling) Islands</option><option value="CO">Colombia</option><option value="KM">Comoros</option><option value="CG">Congo</option><option value="CD">Congo, the Democratic Republic of the</option><option value="CK">Cook Islands</option><option value="CR">Costa Rica</option><option value="CI">Côte d'Ivoire</option><option value="HR">Croatia</option><option value="CU">Cuba</option><option value="CW">Curaçao</option><option value="CY">Cyprus</option><option value="CZ">Czech Republic</option><option value="DK">Denmark</option><option value="DJ">Djibouti</option><option value="DM">Dominica</option><option value="DO">Dominican Republic</option><option value="EC">Ecuador</option><option value="EG">Egypt</option><option value="SV">El Salvador</option><option value="GQ">Equatorial Guinea</option><option value="ER">Eritrea</option><option value="EE">Estonia</option><option value="ET">Ethiopia</option><option value="FK">Falkland Islands (Malvinas)</option><option value="FO">Faroe Islands</option><option value="FJ">
993Fiji</option><option value="FI">Finland</option><option value="FR">France</option><option value="GF">French Guiana</option><option value="PF">French Polynesia</option><option value="TF">French Southern Territories</option><option value="GA">Gabon</option><option value="GM">Gambia</option><option value="GE">Georgia</option><option value="DE">Germany</option><option value="GH">Ghana</option><option value="GI">Gibraltar</option><option value="GR">Greece</option><option value="GL">Greenland</option><option value="GD">Grenada</option><option value="GP">Guadeloupe</option><option value="GU">Guam</option><option value="GT">Guatemala</option><option value="GG">Guernsey</option><option value="GN">Guinea</option><option value="GW">Guinea-Bissau</option><option value="GY">Guyana</option><option value="HT">Haiti</option><option value="HM">Heard Island and McDonald Islands</option><option value="VA">Holy See (Vatican City State)</option><option value="HN">Honduras</option><option value="HK">Hong Kong</option><option value="HU">Hungary</option><option value="IS">Iceland</option><option value="IN">India</option><option value="ID">Indonesia</option><option value="IR">Iran, Islamic Republic of</option><option value="IQ">Iraq</option><option value="IE">Ireland</option><option value="IM">Isle of Man</option><option value="IL">Israel</option><option value="IT">Italy</option><option value="JM">Jamaica</option><option value="JP">Japan</option><option value="JE">Jersey</option><option value="JO">Jordan</option><option value="KZ">Kazakhstan</option><option value="KE">Kenya</option><option value="KI">Kiribati</option><option value="KP">Korea, Democratic People's Republic of</option><option value="KR">Korea, Republic of</option><option value="KW">Kuwait</option><option value="KG">Kyrgyzstan</option><option value="LA">Lao People's Democratic Republic</option><option value="LV">Latvia</option><option value="LB">Lebanon</option><option value="LS">Lesotho</option><option value="LR">Liberia</option><option value="LY">Libya</option><option value="LI">Liechtenstein</option><option value="LT">Lithuania</option><option value="LU">Luxembourg</option><option value="MO">Macao</option><option value="MK">Macedonia, the former Yugoslav Republic of</option><option value="MG">Madagascar</option><option value="MW">Malawi</option><option value="MY">Malaysia</option><option value="MV">Maldives</option><option value="ML">Mali</option><option value="MT">Malta</option><option value="MH">Marshall Islands</option><option value="MQ">Martinique</option><option value="MR">Mauritania</option><option value="MU">Mauritius</option><option value="YT">Mayotte</option><option value="MX">Mexico</option><option value="FM">Micronesia, Federated States of</option><option value="MD">Moldova, Republic of</option><option value="MC">Monaco</option><option value="MN">Mongolia</option><option value="ME">Montenegro</option><option value="MS">Montserrat</option><option value="MA">Morocco</option><option value="MZ">Mozambique</option><option value="MM">Myanmar</option><option value="NA">Namibia</option><option value="NR">Nauru</option><option value="NP">Nepal</option><option value="NL">Netherlands</option><option value="NC">New Caledonia</option><option value="NZ">New Zealand</option><option value="NI">Nicaragua</option><option value="NE">Niger</option><option value="NG">Nigeria</option><option value="NU">Niue</option><option value="NF">Norfolk Island</option><option value="MP">Northern Mariana Islands</option><option value="NO">Norway</option><option value="OM">Oman</option><option value="PK">Pakistan</option><option value="PW">Palau</option><option value="PS">Palestinian Territory, Occupied</option><option value="PA">Panama</option><option value="PG">Papua New Guinea</option><option value="PY">Paraguay</option><option value="PE">Peru</option><option value="PH">Philippines</option><option value="PN">Pitcairn</option><option value="PL">Poland</option><option value="PT">Portugal</option><option value="PR">Puerto Rico</option><option value="QA">Qatar</option><option value="RE">Réunion</option><option value="RO">Romania</option><option value="RU">Russian Federation</option><option value="RW">Rwanda</option><option value="BL">Saint Barthélemy</option><option value="SH">Saint Helena, Ascension and Tristan da Cunha</option><option value="KN">Saint Kitts and Nevis</option><option value="LC">Saint Lucia</option><option value="MF">Saint Martin (French part)</option><option value="PM">Saint Pierre and Miquelon</option><option value="VC">Saint Vincent and the Grenadines</option><option value="WS">Samoa</option><option value="SM">San Marino</option><option value="ST">Sao Tome and Principe</option><option value="SA">Saudi Arabia</option><option value="SN">Senegal</option><option value="RS">Serbia</option><option value="SC">Seychelles</option><option value="SL">Sierra Leone</option><option value="SG">Singapore</option><option value="SX">Sint Maarten (Dutch part)</option><option value="SK">Slovakia</option><option value="SI">Slovenia</option><option value="SB">Solomon Islands</option><option value="SO">Somalia</option><option value="ZA">South Africa</option><option value="GS">South Georgia and the South Sandwich Islands</option><option value="SS">South Sudan</option><option value="ES">Spain</option><option value="LK">Sri Lanka</option><option value="SD">Sudan</option><option value="SR">Suriname</option><option value="SJ">Svalbard and Jan Mayen</option><option value="SZ">Swaziland</option><option value="SE">Sweden</option><option value="CH">Switzerland</option><option value="SY">Syrian Arab Republic</option><option value="TW">Taiwan, Province of China</option><option value="TJ">Tajikistan</option><option value="TZ">Tanzania, United Republic of</option><option value="TH">Thailand</option><option value="TL">Timor-Leste</option><option value="TG">Togo</option><option value="TK">Tokelau</option><option value="TO">Tonga</option><option value="TT">Trinidad and Tobago</option><option value="TN">Tunisia</option><option value="TR">Turkey</option><option value="TM">Turkmenistan</option><option value="TC">Turks and Caicos Islands</option><option value="TV">Tuvalu</option><option value="UG">Uganda</option><option value="UA">Ukraine</option><option value="AE">United Arab Emirates</option><option value="GB">United Kingdom</option><option value="US">United States</option><option value="UM">United States Minor Outlying Islands</option><option value="UY">Uruguay</option><option value="UZ">Uzbekistan</option><option value="VU">Vanuatu</option><option value="VE">Venezuela, Bolivarian Republic of</option><option value="VN">Viet Nam</option><option value="VG">Virgin Islands, British</option><option value="VI">Virgin Islands, U.S.</option><option value="WF">Wallis and Futuna</option><option value="EH">Western Sahara</option><option value="YE">Yemen</option><option value="ZM">Zambia</option><option value="ZW">Zimbabwe</option>'); 994 995 //vfb datepicker, add placeholder 996 $('.vfb-date-picker').attr('placeholder', 'dd/mm/yyyy'); 997 $('.vfb-date-picker').attr('readonly', true); 998 $('.vfb-date-picker').datepicker({ 999 changeMonth: true, 1000 changeYear: true, 1001 yearRange: '1940:2017' 1002 }); 1003 1004 //translate input errors "required field" 1005 if (clang == 'sq') { 1006 $('.visual-form-builder').on('submit', function (e) { 1007 setTimeout(function () { 1008 $('.vfb-error').empty().append('Fushe e detyruar'); 1009 }, 10); 1010 }); 1011 } 1012 1013 $(window).scroll(function () { 1014 var scroll = $(window).scrollTop(); 1015 if (scroll > 400) { 1016 $('.gotoTop').show(); 1017 } else { 1018 $('.gotoTop').hide(); 1019 } 1020 }); 1021 1022 $('.gotoTop').click(function () { 1023 $("html, body").animate({ scrollTop: 0 }, 300); 1024 }); 1025 1026 1027 $('.prevent_default, .prevent_default a').click(function (e) { 1028 e.preventDefault(); 1029 }); 1030 1031 1032 $('[wccpf-type="number"]').keyup(function (e) { 1033 var number = $(this).val(); 1034 if (number < 0) { 1035 $(this).val(''); 1036 } 1037 if (number.length > 2) { 1038 number = number.substring(1, 3); 1039 $(this).val(number); 1040 } 1041 }); 1042 1043 $('[wccpf-type="text"]').keyup(function (e) { 1044 var str = $(this).val(); 1045 if (str.length > 10) { 1046 str = str.substring(1, 11); 1047 $(this).val(str); 1048 } 1049 }); 1050 1051 if (typeof AOS != 'undefined') { 1052 AOS.init(); 1053 } 1054 1055 $('.prohibited-items .item .img-container').matchHeight(); 1056 $('.prohibited-items .item').matchHeight(); 1057 1058 //euro 2025 1059 $('.js-waiting-list-btn').click(function (e) { 1060 e.preventDefault(); 1061 1062 const email = $('#waiting-list-email').val(); 1063 1064 $.ajax({ 1065 url: ajax_url, 1066 type: 'POST', 1067 data: { 1068 action: 'save_waiting_list', 1069 email: email 1070 }, 1071 success: function (response) { 1072 const $responseElement = $('.js-response'); 1073 $responseElement.show().text(response.data.message); 1074 1075 if (response.success) { 1076 $responseElement.removeClass('error').addClass('success'); 1077 } else { 1078 $responseElement.removeClass('success').addClass('error'); 1079 } 1080 } 1081 }); 1082 }); 1083 1084 1085});// document ready
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.