1jQuery(document).ready(function ($) { 2 3 // ===== HAMBURGER ===== 4 $("#aeHamburger").on("click", function () { 5 6 // hamburger pe class 7 $(this).toggleClass("active"); 8 9 // nav links open/close 10 $(".ae-nav-links").toggleClass("active"); 11 12 // logo pe class add/remove 13 $(".ae-logo").toggleClass("active"); 14 15 }); 16 17 // ===== DROPDOWN ===== 18 /* $(".ae-has-dropdown .dropdown-toggle").on("click", function (e) { 19 e.stopPropagation(); 20 21 let dropdown = $(this).children(".ae-dropdown"); 22 23 if (!dropdown.length) return; 24 25 if (dropdown.hasClass("active")) { 26 dropdown.removeClass("active"); 27 } else { 28 $(".ae-dropdown").removeClass("active"); 29 dropdown.addClass("active"); 30 } 31 }); */ 32 33 34 $(".ae-has-dropdown .dropdown-toggle").on("click", function (e) { 35 e.preventDefault(); 36 e.stopPropagation(); 37 38 let parent = $(this).closest(".ae-has-dropdown"); 39 let dropdown = parent.children(".ae-dropdown"); 40 41 if (!dropdown.length) return; 42 43 // Close only sibling dropdowns at the same level 44 parent 45 .siblings(".ae-has-dropdown") 46 .find("> .ae-dropdown") 47 .removeClass("active"); 48 49 // Toggle current dropdown 50 dropdown.toggleClass("active"); 51 }); 52 53 54 /* ââ Swiper ââ */ 55 var swiper = new Swiper('.cm-reviews-swiper', { 56 loop: true, 57 speed: 600, 58 grabCursor: true, 59 slidesPerView: 1, 60 spaceBetween: 24, 61 autoplay: { 62 delay: 4500, 63 disableOnInteraction: false, 64 pauseOnMouseEnter: true, 65 }, 66 pagination: { 67 el: '.swiper-pagination', 68 clickable: true, 69 }, 70 navigation: { 71 prevEl: '.cm-reviews-prev', 72 nextEl: '.cm-reviews-next', 73 }, 74 breakpoints: { 75 640: { slidesPerView: 1 }, 76 768: { slidesPerView: 2 }, 77 1100: { slidesPerView: 3 }, 78 } 79 }); 80 81 82 $(document).on('click', '.cm-review-card .cm-read-more, .cm-review-card .cm-read-less', function () { 83 84 var $btn = $(this); 85 var $card = $btn.closest('.cm-review-card'); 86 87 var $excerpt = $card.find('.cm-excerpt'); 88 var $full = $card.find('.cm-fullContent'); 89 90 if ($btn.hasClass('cm-read-more')) { 91 // Show full content 92 $excerpt.hide(); 93 $full.show(); 94 95 $btn.text('Read Less') 96 .removeClass('cm-read-more') 97 .addClass('cm-read-less'); 98 99 } else { 100 // Show excerpt 101 $full.hide(); 102 $excerpt.show(); 103 104 $btn.text('Read More') 105 .removeClass('cm-read-less') 106 .addClass('cm-read-more'); 107 } 108 }); 109 110 111 // FAQ accordion 112 document.querySelectorAll('.faq-q').forEach(q => { 113 q.addEventListener('click', () => { 114 const item = q.parentElement; 115 const isOpen = item.classList.contains('open'); 116 document.querySelectorAll('.faq-item').forEach(i => i.classList.remove('open')); 117 if (!isOpen) item.classList.add('open'); 118 }); 119 }); 120 121 122 const reviewsSwiper = new Swiper('.reviews-swiper', { 123 slidesPerView: 1, 124 spaceBetween: 24, 125 loop: true, 126 autoplay: false, 127 pagination: { 128 el: '.swiper-pagination', 129 clickable: true, 130 }, 131 navigation: { 132 nextEl: '.swiper-button-next', 133 prevEl: '.swiper-button-prev', 134 }, 135 breakpoints: { 136 640: { 137 slidesPerView: 2, 138 }, 139 1024: { 140 slidesPerView: 3, 141 }, 142 }, 143 }); 144 145 document.querySelectorAll('.review-text-wrap').forEach(wrap => { 146 const text = wrap.querySelector('.review-text'); 147 const toggle = wrap.querySelector('.review-toggle'); 148 const wordLimit = 30; 149 const fullText = text.textContent.trim(); 150 const words = fullText.split(/\s+/); 151
152 if (words.length <= wordLimit) { 153 toggle.style.display = 'none'; 154 return; // no truncation needed 155 } 156 157 158 159 160 const shortened = words.slice(0, wordLimit).join(' ') + 'â¦'; 161 text.textContent = shortened; 162 toggle.style.display = 'inline'; 163 164 toggle.addEventListener('click', () => { 165 const expanded = toggle.getAttribute('aria-expanded') === 'true'; 166 167 text.textContent = expanded ? shortened : fullText; 168 toggle.setAttribute('aria-expanded', String(!expanded)); 169 toggle.textContent = expanded ? 'Read more' : 'Read less'; 170 }); 171 }); 172 173 174 175 /* var els = document.querySelectorAll('.sr'); 176 if (!('IntersectionObserver' in window)) { 177 els.forEach(function (el) { el.classList.add('visible'); }); 178 return; 179 } 180 var io = new IntersectionObserver(function (entries) { 181 entries.forEach(function (entry) { 182 if (entry.isIntersecting) { 183 entry.target.classList.add('visible'); 184 io.unobserve(entry.target); 185 } 186 }); 187 }, { threshold: 0.12 }); 188 els.forEach(function (el) { io.observe(el); }); */ 189 190});
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.