PageSourceSearch

https://harishree.org/public/static/assets/js/scripts.js?asaaa1

js harishree.org collected 2026-10-02 14:19:10 UTC 10,553 bytes, 249 lines download raw bytes

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.