kodepilot/main.js
2025-09-29 15:41:29 +05:30

444 lines
14 KiB
JavaScript

function goToLogin() {
window.location.href = "/login";
}
function goToApplay() {
window.location.href = "/apply/";
}
function getInTouch() {
window.open("https://wa.me/+919787466226?text=Hi%20KodePilot%20Team%2C%0A%0AI%20came%20across%20your%20website%20and%20would%20like%20to%20know%20more%20about%20your%20Career%20Guidance%20and%20Placement%20support%20services.%20Could%20you%20please%20share%20the%20details%3F%0A%0AThanks%21", "_blank");
}
(function () {
if (window.Slide1rSliderLoaded) {
return;
}
window.Slide1rSliderLoaded = true;
class Slide1rSlider {
constructor() {
setTimeout(() => {
this.initSlider();
}, 100);
}
initSlider() {
try {
this.track = document.getElementById('slide1rTrack');
this.slides = document.querySelectorAll('.slide1');
this.prevBtn = document.getElementById('prevBtn');
this.nextBtn = document.getElementById('nextBtn');
if (!this.track || this.slides.length === 0) {
console.warn("Slider DOM elements not found. Retrying...");
setTimeout(() => this.initSlider(), 200);
return;
}
this.currentIndex = 0;
this.totalSlides = this.slides.length;
this.autoPlayDuration = 5000;
this.init();
} catch (err) {
console.error("Slider initialization failed:", err);
}
}
init() {
try {
this.updateSlider();
this.bindEvents();
this.startAutoPlay();
this.bindKeyboardEvents();
} catch (err) {
console.error("Slider init error:", err);
}
}
updateSlider() {
try {
const translateX = -this.currentIndex * 100;
this.track.style.transform = `translateX(${translateX}%)`;
} catch (err) {
console.error("Error updating slider:", err);
}
}
nextSlide() {
try {
this.currentIndex = (this.currentIndex + 1) % this.totalSlides;
this.updateSlider();
this.restartAutoPlay();
} catch (err) {
console.error("Error going to next slide:", err);
}
}
prevSlide() {
try {
this.currentIndex = this.currentIndex === 0 ? this.totalSlides - 1 : this.currentIndex - 1;
this.updateSlider();
this.restartAutoPlay();
} catch (err) {
console.error("Error going to previous slide:", err);
}
}
goToSlide(index) {
try {
this.currentIndex = index;
this.updateSlider();
this.restartAutoPlay();
} catch (err) {
console.error("Error going to slide:", err);
}
}
startAutoPlay() {
try {
this.stopAutoPlay();
this.autoPlayInterval = setInterval(() => {
this.nextSlide();
}, this.autoPlayDuration);
} catch (err) {
console.error("Error starting autoplay:", err);
}
}
stopAutoPlay() {
if (this.autoPlayInterval) {
clearInterval(this.autoPlayInterval);
this.autoPlayInterval = null;
}
}
restartAutoPlay() {
this.stopAutoPlay();
this.startAutoPlay();
}
bindEvents() {
try {
if (this.nextBtn) {
this.nextBtn.addEventListener('click', () => this.nextSlide());
}
if (this.prevBtn) {
this.prevBtn.addEventListener('click', () => this.prevSlide());
}
const container = document.querySelector('.slide1r-container');
if (container) {
container.addEventListener('mouseenter', () => this.stopAutoPlay());
container.addEventListener('mouseleave', () => this.startAutoPlay());
}
let startX = 0;
let endX = 0;
if (this.track) {
this.track.addEventListener('touchstart', (e) => {
startX = e.touches[0].clientX;
this.stopAutoPlay();
});
this.track.addEventListener('touchmove', (e) => {
endX = e.touches[0].clientX;
});
this.track.addEventListener('touchend', () => {
const deltaX = startX - endX;
if (Math.abs(deltaX) > 50) {
if (deltaX > 0) {
this.nextSlide();
} else {
this.prevSlide();
}
}
this.startAutoPlay();
});
}
} catch (err) {
console.error("Error binding events:", err);
}
}
bindKeyboardEvents() {
const keyHandler = (e) => {
const container = document.querySelector('.slide1r-container');
if (container && this.isElementInViewport(container)) {
if (e.key === 'ArrowLeft') {
this.prevSlide();
} else if (e.key === 'ArrowRight') {
this.nextSlide();
}
}
};
document.addEventListener('keydown', keyHandler);
}
isElementInViewport(el) {
const rect = el.getBoundingClientRect();
return (
rect.top >= 0 &&
rect.left >= 0 &&
rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
rect.right <= (window.innerWidth || document.documentElement.clientWidth)
);
}
}
new Slide1rSlider();
})();
const statItems = document.querySelectorAll('.stat-item');
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const index = Array.from(statItems).indexOf(entry.target);
entry.target.style.transitionDelay = `${(index + 1) * 0.1}s`;
entry.target.classList.add('visible');
}
});
}, { threshold: 0.2 });
console.log("test");
document.addEventListener('DOMContentLoaded', async () => {
const allCourses = [];
const baseUrl = 'https://kodepilot.in/course/index.php';
const res = await fetch(baseUrl);
const html = await res.text();
const categoryRegex = /<h3 class="categoryname aabtn"><a href="([^"]+)">([^<]+)<\/a><\/h3>/g;
const categories = [];
let match;
while ((match = categoryRegex.exec(html)) !== null) {
categories.push({ url: match[1], name: match[2] });
}
for (const category of categories) {
const resCat = await fetch(category.url);
const catHtml = await resCat.text();
const cleanHtml = catHtml.replace(/\n/g, ' ');
const courseRegex = /<div class="card dashboard-card [^"]*"[^>]*>.*?<a href="([^"]+)"[^>]*>.*?background-image: url\(([^)]+)\);".*?<span class="sr-only">(.*?)<\/span>.*?<div class="course-category">\s*([^<]+)<\/div>.*?<div class="course-summary">.*?<p>(.*?)<\/p>/g;
while ((match = courseRegex.exec(cleanHtml)) !== null) {
allCourses.push({
category: match[4].trim(),
link: match[1].trim(),
image: match[2].trim(),
name: match[3].trim(),
description: match[5].replace(/<br\s*\/?>/g, ' ').trim()
});
}
}
console.table(allCourses);
renderCourses(allCourses);
});
function renderCourses(allCourses) {
const container = document.querySelector('.corces');
if (!container) return;
container.innerHTML = '';
const grouped = {};
allCourses.forEach(course => {
if (!grouped[course.category]) grouped[course.category] = [];
grouped[course.category].push(course);
});
let sections = Object.entries(grouped).map(([category, courses]) => ({ category, courses }));
let mergedSections = [];
let temp = { category: '', courses: [] };
sections.forEach(section => {
if (section.courses.length >= 4) {
mergedSections.push(section);
} else {
if (temp.category) temp.category += '/' + section.category;
else temp.category = section.category;
temp.courses.push(...section.courses);
if (temp.courses.length >= 4) {
mergedSections.push({ category: temp.category, courses: temp.courses });
temp = { category: '', courses: [] };
}
}
});
if (temp.courses.length >= 4) {
mergedSections.push(temp);
}
mergedSections.forEach(sectionData => {
const section = document.createElement('div');
section.className = 'course-section';
section.innerHTML = `
<h2 class="course-category-title">${sectionData.category}</h2>
<div class="course-slider-box">
<div class="course-slider">
<button class="prev-btn nav-button"></button>
<div class="course-track"></div>
<button class="next-btn nav-button"></button>
</div>
</div>
`;
const track = section.querySelector('.course-track');
const prevBtn = section.querySelector('.prev-btn');
const nextBtn = section.querySelector('.next-btn');
sectionData.courses.forEach(course => {
const courseDiv = document.createElement('div');
courseDiv.className = 'course-card';
courseDiv.innerHTML = `
<a href="${course.link}" target="_blank">
<div class="course-image" style="background-image: url(${course.image});"></div>
</a>
<div class="course-content">
<a href="${course.link}" class="course-name" target="_blank">${course.name}</a>
<div class="course-description">${course.description}</div>
</div>
`;
track.appendChild(courseDiv);
});
// Button scrolling
const scrollAmount = 300;
prevBtn.addEventListener('click', () => track.scrollBy({ left: -scrollAmount, behavior: 'smooth' }));
nextBtn.addEventListener('click', () => track.scrollBy({ left: scrollAmount, behavior: 'smooth' }));
// Touch swipe
let startX = 0;
let isDragging = false;
track.addEventListener('touchstart', e => {
startX = e.touches[0].clientX;
isDragging = true;
});
track.addEventListener('touchmove', e => {
if (!isDragging) return;
const x = e.touches[0].clientX;
const walk = (startX - x) * 10;
track.scrollLeft += walk;
startX = x;
});
track.addEventListener('touchend', () => {
isDragging = false;
});
container.appendChild(section);
});
}
statItems.forEach(item => observer.observe(item));
const track = document.querySelector('.mnc-logos-track');
const gap = 40;
let index = 0;
function stepScroll() {
const items = track.children;
const first = items[0];
const moveWidth = first.offsetWidth + gap;
track.style.transform = `translateX(-${moveWidth}px)`;
track.addEventListener('transitionend', function handler() {
track.appendChild(first);
track.style.transition = 'none';
track.style.transform = 'translateX(0)';
void track.offsetWidth;
track.style.transition = 'transform 0.5s ease';
track.removeEventListener('transitionend', handler);
});
}
setInterval(stepScroll, 3000);
document.addEventListener('DOMContentLoaded', function () {
const cards = document.querySelectorAll('.practice-card');
let activeCard = document.querySelector('.practice-card.active');
let lastActiveCard = activeCard;
function setActiveCard(card) {
cards.forEach(c => {
c.classList.remove('active');
});
card.classList.add('active');
lastActiveCard = card;
}
if (!activeCard && cards.length > 0) {
setActiveCard(cards[0]);
}
cards.forEach(card => {
card.addEventListener('click', function () {
setActiveCard(this);
});
});
});
const data = [
{ name: "Ben", text: "Just Went HCL!" },
{ name: "Rakul", text: "Just Went Accenture!" },
{ name: "Anjali", text: "Joined a Ebmpapst!" },
{ name: "Sneha", text: "joined a Infosys!" },
{ name: "Amit", text: "Just Went JBL!" },
{ name: "Vikram", text: "Just Went UST!" },
{ name: "Priya", text: "Just Went Serviceplaingroup!" }
];
let index1 = 0;
const nameEl1 = document.querySelector(".nameContainer");
const descEl1 = document.querySelector(".descContainer");
setInterval(() => {
nameEl1.classList.add("fade-out");
descEl1.classList.add("fade-out");
setTimeout(() => {
index1 = (index1 + 1) % data.length;
nameEl1.textContent = data[index1].name;
descEl1.textContent = " " + data[index1].text;
nameEl1.classList.remove("fade-out");
descEl1.classList.remove("fade-out");
nameEl1.classList.add("fade-in");
descEl1.classList.add("fade-in");
setTimeout(() => {
nameEl1.classList.remove("fade-in");
descEl1.classList.remove("fade-in");
}, 500);
}, 500);
}, 5000);
document.addEventListener("DOMContentLoaded", () => {
document.querySelectorAll(".footer a").forEach(link => {
link.setAttribute("href", "/apply");
});
document.querySelectorAll(".practice-container a").forEach(link => {
link.setAttribute("href", "/apply");
});
});