Skip to content

Commit 939887f

Browse files
authored
Add files via upload
1 parent b7849ff commit 939887f

File tree

10 files changed

+917
-0
lines changed

10 files changed

+917
-0
lines changed

code/script.js

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
document.addEventListener('DOMContentLoaded', function() {
2+
const langToggle = document.getElementById('langToggle');
3+
const htmlElement = document.querySelector('html');
4+
const bodyElement = document.querySelector('body');
5+
6+
const savedLang = localStorage.getItem('preferredLang') || 'ar';
7+
setLanguage(savedLang);
8+
9+
langToggle.addEventListener('click', function() {
10+
const currentLang = htmlElement.getAttribute('lang');
11+
const newLang = currentLang === 'ar' ? 'en' : 'ar';
12+
setLanguage(newLang);
13+
localStorage.setItem('preferredLang', newLang);
14+
});
15+
16+
function setLanguage(lang) {
17+
htmlElement.setAttribute('lang', lang);
18+
htmlElement.setAttribute('dir', lang === 'ar' ? 'rtl' : 'ltr');
19+
bodyElement.setAttribute('dir', lang === 'ar' ? 'rtl' : 'ltr');
20+
21+
updateTexts(lang);
22+
23+
langToggle.textContent = lang === 'ar' ? 'EN' : 'AR';
24+
}
25+
26+
function updateTexts(lang) {
27+
const elements = document.querySelectorAll('[data-ar], [data-en]');
28+
29+
elements.forEach(element => {
30+
const text = lang === 'ar' ?
31+
element.getAttribute('data-ar') :
32+
element.getAttribute('data-en');
33+
34+
if (text) {
35+
element.textContent = text;
36+
}
37+
});
38+
}
39+
40+
const navToggle = document.querySelector('.nav-toggle');
41+
const navLinks = document.querySelector('.nav-links');
42+
43+
if (navToggle) {
44+
navToggle.addEventListener('click', function() {
45+
navLinks.classList.toggle('active');
46+
});
47+
}
48+
49+
document.querySelectorAll('.nav-link').forEach(link => {
50+
link.addEventListener('click', function() {
51+
navLinks.classList.remove('active');
52+
});
53+
});
54+
55+
window.addEventListener('scroll', function() {
56+
const navbar = document.querySelector('.navbar');
57+
if (window.scrollY > 50) {
58+
navbar.style.backgroundColor = 'rgba(255, 255, 255, 0.95)';
59+
navbar.style.backdropFilter = 'blur(10px)';
60+
} else {
61+
navbar.style.backgroundColor = 'var(--bg-color)';
62+
navbar.style.backdropFilter = 'none';
63+
}
64+
});
65+
66+
loadGitHubStats();
67+
68+
function loadGitHubStats() {
69+
fetch('https://api.github.com/repos/wsl-iq/Python-Executable')
70+
.then(response => response.json())
71+
.then(data => {
72+
document.getElementById('stars').textContent = data.stargazers_count;
73+
document.getElementById('forks').textContent = data.forks_count;
74+
document.getElementById('watchers').textContent = data.watchers_count;
75+
})
76+
.catch(error => {
77+
console.error('Error fetching GitHub data:', error);
78+
});
79+
}
80+
81+
const observerOptions = {
82+
threshold: 0.1,
83+
rootMargin: '0px 0px -50px 0px'
84+
};
85+
86+
const observer = new IntersectionObserver(function(entries) {
87+
entries.forEach(entry => {
88+
if (entry.isIntersecting) {
89+
entry.target.style.opacity = '1';
90+
entry.target.style.transform = 'translateY(0)';
91+
}
92+
});
93+
}, observerOptions);
94+
95+
document.querySelectorAll('.feature-card, .download-card').forEach(card => {
96+
card.style.opacity = '0';
97+
card.style.transform = 'translateY(20px)';
98+
card.style.transition = 'opacity 0.5s ease, transform 0.5s ease';
99+
observer.observe(card);
100+
});
101+
});

0 commit comments

Comments
 (0)