263 lines
8.3 KiB
JavaScript
263 lines
8.3 KiB
JavaScript
function goToLogin() {
|
|
window.location.href = "/login";
|
|
}
|
|
|
|
(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();
|
|
})();
|
|
|
|
|
|
(async () => {
|
|
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;
|
|
|
|
let found = false;
|
|
while ((match = courseRegex.exec(cleanHtml)) !== null) {
|
|
found = true;
|
|
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()
|
|
});
|
|
}
|
|
|
|
if (!found) {
|
|
console.warn("⚠️ Could not parse category:", category.url);
|
|
console.log(cleanHtml.substring(0, 500) + " ...");
|
|
}
|
|
}
|
|
|
|
console.log("✅ Extracted courses:", allCourses);
|
|
|
|
renderCourses(allCourses);
|
|
})();
|
|
|
|
function renderCourses(allCourses) {
|
|
console.log("Testing allCourses array:");
|
|
const container = document.querySelector('.corces');
|
|
|
|
if (!container) {
|
|
console.error("⚠️ No .corces container found in DOM");
|
|
return;
|
|
}
|
|
|
|
allCourses.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">
|
|
<div class="course-category">${course.category}</div>
|
|
<a href="${course.link}" class="course-name" target="_blank">${course.name}</a>
|
|
<div class="course-description">${course.description}</div>
|
|
</div>
|
|
`;
|
|
|
|
container.appendChild(courseDiv);
|
|
});
|
|
} |