1 2 document.addEventListener("DOMContentLoaded", function () { 3 const menu = document.getElementById("mobileMenu"); 4 const overlay = document.getElementById("mobileMenuOverlay"); 5 const toggler = document.querySelector(".mobile-toggler"); 6 const closeBtn = document.querySelector(".mobile-menu-close"); 7 8 if (!menu || !overlay || !toggler || !closeBtn) return; 9 10 // OPEN 11 function openMenu() { 12 menu.classList.add("open"); 13 overlay.classList.add("show"); 14 document.body.style.overflow = "hidden"; 15 toggler.classList.add("active"); 16 } 17 18 // CLOSE 19 function closeMenu() { 20 menu.classList.remove("open"); 21 overlay.classList.remove("show"); 22 document.body.style.overflow = ""; 23 toggler.classList.remove("active"); 24 } 25 26 toggler.addEventListener("click", () => { 27 if (menu.classList.contains("open")) { 28 closeMenu(); 29 } else { 30 openMenu(); 31 } 32 }); 33 34 closeBtn.addEventListener("click", closeMenu); 35 overlay.addEventListener("click", closeMenu); 36 37 // Submenu toggle (+ / - + animation) 38 document.querySelectorAll(".submenu-toggle").forEach((item) => { 39 item.addEventListener("click", () => { 40 item.parentElement.classList.toggle("open"); 41 }); 42 }); 43 }); 44 45 46 47 48 49 /* If other libs require $, you can call noConflict and still use a local $ alias. 50 If you don't need it, you can skip the noConflict line. */ 51 // var jq = jQuery.noConflict(); // uncomment only if necessary 52 53 (function ($) { 54 $(document).ready(function () { 55 $("#guiding_alumni_slider").owlCarousel({ 56 loop: false, 57 video: true, 58 lazyLoad: true, 59 items: 4, 60 margin: 20, 61 responsive: { 62 0: { items: 1, dots: true, nav: false, center: true }, 63 576: { items: 2, dots: true, nav: false }, 64 767: { items: 2, dots: true, nav: false }, 65 1000: { items: 3, dots: true, nav: false }, 66 1360: { items: 4, dots: false, nav: true }, 67 }, 68 }); 69 70 // If you have other sliders using the same pattern, keep these safe wrappers: 71 $(".top-colleges-slider").each(function () { 72 var carouselId = $(this).attr("id"); 73 if (carouselId) { 74 $("#" + carouselId).owlCarousel({ 75 items: 3, 76 loop: false, 77 video: true, 78 lazyLoad: true, 79 navRewind: false, 80 margin: 10, 81 responsive: { 82 0: { items: 1, nav: false, dots: true, margin: 0 }, 83 600: { items: 2, nav: false, dots: true }, 84 1000: { items: 3, nav: false, dots: true }, 85 1336: { items: 3, nav: true, dots: false }, 86 }, 87 }); 88 } 89 }); 90 91 $("#univariety_alumni_mentors_slider").each(function () { 92 var carouselId = $(this).attr("id"); 93 if (carouselId) { 94 $("#" + carouselId).owlCarousel({ 95 items: 3, 96 loop: false, 97 video: true, 98 lazyLoad: true, 99 navRewind: false, 100 responsive: { 101 0: { items: 1, nav: false, dots: true, margin: 0 }, 102 900: { items: 2, nav: false, dots: true }, 103 1000: { items: 3, nav: true, dots: false }, 104 }, 105 }); 106 } 107 }); 108 109 // UI niceties (keep if needed) 110 }); 111 })(jQuery); 112 113 114 115 (function () { 116 // helper: measure the tallest carousel-item and set minHeight for .carousel-inner 117 function setTestiCarouselHeight(carouselId = "parentTestiCarousel") { 118 const carousel = document.getElementById(carouselId); 119 if (!carousel) return; 120 const inner = carousel.querySelector(".carousel-inner"); 121 if (!inner) return; 122 123 const items = inner.querySelectorAll(".carousel-item"); 124 if (!items || items.length === 0) return; 125 126 let max = 0;
127 items.forEach((item) => { 128 // ensure measurable without disturbing layout 129 const prev = { 130 position: item.style.position || "", 131 visibility: item.style.visibility || "", 132 display: item.style.display || "", 133 }; 134 135 item.style.position = "relative"; 136 item.style.visibility = "hidden"; 137 item.style.display = "block"; 138 139 const h = item.offsetHeight; 140 if (h > max) max = h; 141 142 // restore 143 item.style.position = prev.position; 144 item.style.visibility = prev.visibility; 145 item.style.display = prev.display; 146 }); 147 148 // set min-height with small buffer 149 inner.style.minHeight = max + 8 + "px"; 150 } 151 152 function init() { 153 const carousel = document.getElementById("parentTestiCarousel"); 154 if (!carousel) return; 155 const inner = carousel.querySelector(".carousel-inner"); 156 if (!inner) return; 157 158 // hide controls if single slide 159 const items = inner.querySelectorAll(".carousel-item"); 160 if (items.length <= 1) { 161 carousel 162 .querySelectorAll(".testi-arrow, .testi-dots") 163 .forEach((el) => (el.style.display = "none")); 164 } 165 166 // measure after layout settles 167 requestAnimationFrame(() => setTestiCarouselHeight()); 168 169 // measure after all resources load (images/fonts) 170 window.addEventListener("load", () => setTestiCarouselHeight()); 171 172 // debounced resize 173 let t = null; 174 window.addEventListener("resize", () => { 175 clearTimeout(t); 176 t = setTimeout(() => setTestiCarouselHeight(), 140); 177 }); 178 179 // hook into bootstrap slide events to manage pointer-events during transitions (best-effort) 180 try { 181 carousel.addEventListener("slide.bs.carousel", () => { 182 inner.querySelectorAll(".carousel-item").forEach((it) => (it.style.pointerEvents = "none")); 183 }); 184 carousel.addEventListener("slid.bs.carousel", () => { 185 inner 186 .querySelectorAll(".carousel-item") 187 .forEach( 188 (it) => (it.style.pointerEvents = it.classList.contains("active") ? "auto" : "none") 189 ); 190 }); 191 } catch (e) { 192 // ignore if bootstrap events not available 193 } 194 } 195 196 if (document.readyState === "loading") { 197 document.addEventListener("DOMContentLoaded", init); 198 } else { 199 init(); 200 } 201 })(); 202 203 204(function () { 205 var i, 206 e, 207 d = document, 208 s = "script"; 209 i = d.createElement("script"); 210 i.async = 1; 211 i.charset = "UTF-8"; 212 i.src = "https://cdn.curator.io/published/ff11adc6-3991-4337-af9d-0b909a81d5dd.js"; 213 e = d.getElementsByTagName(s)[0]; 214 e.parentNode.insertBefore(i, e); 215})(); 216 217// Marquee scroll (pauses on hover) 218(function () { 219 const el = document.getElementById("admissionTicker"); 220 if (!el) return; 221 222 let start = null, 223 speed = 40, 224 offset = 0, 225 paused = false; 226 227 el.addEventListener("mouseenter", () => (paused = true)); 228 el.addEventListener("mouseleave", () => (paused = false)); 229 230 el.innerHTML = el.innerHTML + " ⢠" + el.innerHTML; 231 232 function step(ts) { 233 if (start === null) start = ts; 234 const dt = (ts - start) / 1000; 235 start = ts; 236 237 if (!paused) { 238 offset -= speed * dt; 239 const width = el.scrollWidth / 2; 240 if (Math.abs(offset) > width) offset = 0; 241 el.style.transform = `translateX(${offset}px)`; 242 } 243 requestAnimationFrame(step); 244 } 245 el.style.display = "inline-block"; 246 el.style.willChange = "transform"; 247 requestAnimationFrame(step); 248})(); 249
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.