266 lines
10 KiB
JavaScript
266 lines
10 KiB
JavaScript
document.addEventListener('DOMContentLoaded', function() {
|
||
// Theme toggle
|
||
var savedTheme = localStorage.getItem('pisiTheme') || 'dark';
|
||
document.documentElement.setAttribute('data-theme', savedTheme);
|
||
var icon = document.getElementById('themeIcon');
|
||
if (icon) icon.className = savedTheme === 'dark' ? 'fas fa-moon' : 'fas fa-sun';
|
||
|
||
var themeBtn = document.getElementById('themeToggle');
|
||
if (themeBtn) {
|
||
themeBtn.addEventListener('click', function() {
|
||
var html = document.documentElement;
|
||
var current = html.getAttribute('data-theme') || 'dark';
|
||
var next = current === 'dark' ? 'light' : 'dark';
|
||
html.setAttribute('data-theme', next);
|
||
localStorage.setItem('pisiTheme', next);
|
||
var icon = document.getElementById('themeIcon');
|
||
if (icon) icon.className = next === 'dark' ? 'fas fa-moon' : 'fas fa-sun';
|
||
});
|
||
}
|
||
|
||
// Tooltips
|
||
var tooltips = document.querySelectorAll('[data-bs-toggle="tooltip"]');
|
||
if (tooltips.length && typeof bootstrap !== 'undefined') {
|
||
tooltips.forEach(function(el) { new bootstrap.Tooltip(el); });
|
||
}
|
||
|
||
// Download counter
|
||
document.querySelectorAll('.download').forEach(function(el) {
|
||
el.addEventListener('click', function(e) {
|
||
var id = this.dataset.id;
|
||
var xhr = new XMLHttpRequest();
|
||
xhr.open('POST', 'download/counter', true);
|
||
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
|
||
xhr.send('id=' + id);
|
||
});
|
||
});
|
||
|
||
// Contact form
|
||
var contactBtn = document.getElementById('contact');
|
||
if (contactBtn) {
|
||
contactBtn.addEventListener('click', function(e) {
|
||
if (contactBtn.disabled) return;
|
||
var originalText = contactBtn.textContent;
|
||
contactBtn.disabled = true;
|
||
contactBtn.textContent = 'Gönderiliyor...';
|
||
var xhr = new XMLHttpRequest();
|
||
xhr.open('POST', '/contact/send', true);
|
||
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
|
||
xhr.onload = function() {
|
||
contactBtn.disabled = false;
|
||
contactBtn.textContent = originalText;
|
||
var data = xhr.responseText.split('&');
|
||
if (data[0] == 1) {
|
||
Swal.fire({ text: data[1], icon: 'success', didOpen: function() {
|
||
document.querySelector('.container').style.filter = 'blur(5px)';
|
||
}, willClose: function() {
|
||
document.querySelector('.container').style.filter = 'none';
|
||
window.location.href = '/';
|
||
}});
|
||
} else {
|
||
Swal.fire({ text: data[1], icon: 'error', didOpen: function() {
|
||
document.querySelector('.container').style.filter = 'blur(5px)';
|
||
}, willClose: function() {
|
||
document.querySelector('.container').style.filter = 'none';
|
||
}});
|
||
}
|
||
};
|
||
xhr.send('name=' + encodeURIComponent(document.getElementById('name') ? document.getElementById('name').value : '') +
|
||
'&email=' + encodeURIComponent(document.getElementById('email') ? document.getElementById('email').value : '') +
|
||
'&message=' + encodeURIComponent(document.getElementById('message') ? document.getElementById('message').value : '') +
|
||
'&token=' + encodeURIComponent(document.getElementById('token') ? document.getElementById('token').value : ''));
|
||
});
|
||
}
|
||
|
||
// Register form
|
||
var registerBtn = document.getElementById('registerSubmit');
|
||
if (registerBtn) {
|
||
registerBtn.addEventListener('click', function(e) {
|
||
e.preventDefault();
|
||
|
||
var form = document.getElementById('registerForm');
|
||
var username = document.getElementById('username');
|
||
var surname = document.getElementById('surname');
|
||
var email = document.getElementById('email');
|
||
var password = document.getElementById('password');
|
||
var password2 = document.getElementById('password2');
|
||
|
||
function setError(el, msg) {
|
||
el.value = '';
|
||
el.focus();
|
||
el.placeholder = msg;
|
||
el.classList.add('error');
|
||
}
|
||
|
||
function clearError(el) { el.classList.remove('error'); }
|
||
|
||
if (!username || username.value.length <= 2) { setError(username, 'En az 3 karakter olmalıdır'); return; }
|
||
clearError(username);
|
||
if (!surname || surname.value.length <= 2) { setError(surname, 'En az 3 karakter olmalıdır'); return; }
|
||
clearError(surname);
|
||
if (!email || email.value === '') { setError(email, 'Geçerli bir e-posta adresi girin'); return; }
|
||
if (!emailControl(email.value)) { setError(email, 'Geçerli bir e-posta adresi girin'); return; }
|
||
clearError(email);
|
||
if (!password || password.value === '') { setError(password, 'Şifre alanı boş olamaz'); return; }
|
||
if (password.value.length <= 5) { setError(password, 'Şifre en az 6 karakter olmalıdır'); return; }
|
||
clearError(password);
|
||
if (!password2 || password2.value === '') { setError(password2, 'Şifre alanı boş olamaz'); return; }
|
||
if (password.value !== password2.value) { setError(password2, 'Şifreler eşleşmiyor'); return; }
|
||
clearError(password2);
|
||
|
||
var formData = new FormData(form);
|
||
|
||
var xhr = new XMLHttpRequest();
|
||
xhr.open('POST', '/member/emailcontrol', true);
|
||
xhr.onload = function() {
|
||
if (xhr.responseText == 1) {
|
||
setError(email, 'Bu e-posta adresi zaten kullanılıyor');
|
||
} else {
|
||
registerBtn.style.display = 'none';
|
||
var xhr2 = new XMLHttpRequest();
|
||
xhr2.open('POST', '/member/new_user', true);
|
||
xhr2.onload = function() {
|
||
if (xhr2.responseText == 1) {
|
||
Swal.fire('', 'Kayıt işleminiz başarıyla tamamlandı. Hesabınızı aktif etmek için lütfen e-posta adresinizi kontrol edin.', 'success')
|
||
.then(function() { window.location.replace('/'); });
|
||
} else if (xhr2.responseText == 'csrf') {
|
||
Swal.fire('', 'Güvenlik doğrulaması başarısız. Lütfen sayfayı yenileyip tekrar deneyin.', 'error');
|
||
} else if (xhr2.responseText == 'captcha') {
|
||
Swal.fire('', 'Güvenlik kodu hatalı. Lütfen tekrar deneyin.', 'error');
|
||
} else if (xhr2.responseText == 'match') {
|
||
Swal.fire('', 'Şifreler eşleşmiyor.', 'error');
|
||
} else if (xhr2.responseText == 'length') {
|
||
Swal.fire('', 'Şifre en az 6 karakter olmalıdır.', 'error');
|
||
} else {
|
||
Swal.fire('', 'Kayıt sırasında bir hata oluştu, lütfen daha sonra tekrar deneyin', 'error');
|
||
}
|
||
};
|
||
xhr2.send(formData);
|
||
}
|
||
};
|
||
xhr.send('email1=' + encodeURIComponent(email.value));
|
||
});
|
||
}
|
||
|
||
// Image fluid
|
||
document.querySelectorAll('img').forEach(function(img) { img.classList.add('img-fluid'); });
|
||
|
||
// Carousel first item active
|
||
var firstCarousel = document.querySelector('div.carousel-item');
|
||
if (firstCarousel) firstCarousel.classList.add('active');
|
||
|
||
// Submit disable (global)
|
||
var submitBtn = document.getElementById('submit');
|
||
if (submitBtn) submitBtn.disabled = true;
|
||
|
||
// Task redirect
|
||
var gorevBtn = document.getElementById('gorev');
|
||
if (gorevBtn) {
|
||
gorevBtn.addEventListener('click', function() {
|
||
window.location.replace('https://pisilinux.org/bugs/addtask');
|
||
});
|
||
}
|
||
|
||
// Forum view change
|
||
var gorunum = document.getElementById('gorunum');
|
||
if (gorunum) {
|
||
gorunum.addEventListener('change', function() {
|
||
if (this.value == 2) window.location.replace('/question_answer');
|
||
});
|
||
}
|
||
|
||
// Task type toggle system info
|
||
var task = document.getElementById('task');
|
||
var sistem1 = document.getElementById('sistem1');
|
||
if (task && sistem1) {
|
||
task.addEventListener('change', function() {
|
||
sistem1.style.display = this.value == 1 ? 'block' : 'none';
|
||
});
|
||
}
|
||
|
||
// Nav link active tracking via localStorage
|
||
document.querySelectorAll('.nav-link').forEach(function(el) {
|
||
el.addEventListener('click', function() {
|
||
localStorage.setItem('activeLink', this.getAttribute('href'));
|
||
});
|
||
});
|
||
var activeTab = localStorage.getItem('activeLink');
|
||
if (activeTab) {
|
||
var match = document.querySelector('li.nav-item a[href="' + activeTab + '"]');
|
||
if (match) match.parentElement.classList.add('active');
|
||
}
|
||
|
||
// Scroll to top button & header shadow
|
||
var header = document.querySelector('.site-header');
|
||
window.addEventListener('scroll', function() {
|
||
if (header) {
|
||
header.classList.toggle('scrolled', window.scrollY > 0);
|
||
}
|
||
var imgup = document.querySelector('.imgup');
|
||
if (imgup) {
|
||
imgup.style.display = window.scrollY >= 50 ? 'block' : 'none';
|
||
}
|
||
});
|
||
|
||
// Flag language switcher
|
||
document.addEventListener('click', function(e) {
|
||
var flag = e.target.closest('.flags');
|
||
if (flag) {
|
||
e.preventDefault();
|
||
document.cookie = 'country=' + flag.dataset.id;
|
||
location.reload();
|
||
}
|
||
});
|
||
|
||
// Bugs form validation
|
||
var bugsForm = document.getElementById('bugsnew');
|
||
if (bugsForm) {
|
||
bugsForm.addEventListener('submit', function(event) {
|
||
var details = this.querySelector('.details');
|
||
var uyari = this.querySelector('.detayUyari');
|
||
if (details && details.value === '') {
|
||
if (uyari) {
|
||
uyari.textContent = '( Detaylar alanı boş bırakılamaz...)';
|
||
uyari.style.display = 'inline';
|
||
setTimeout(function() { if (uyari) uyari.style.display = 'none'; }, 5000);
|
||
}
|
||
event.preventDefault();
|
||
}
|
||
});
|
||
}
|
||
|
||
// Bugs close
|
||
document.querySelectorAll('.bugsClose').forEach(function(el) {
|
||
el.addEventListener('click', function() {
|
||
var xhr = new XMLHttpRequest();
|
||
xhr.open('POST', '/bugs/bugsClose', true);
|
||
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
|
||
xhr.onload = function() { location.reload(); };
|
||
xhr.send('id=' + this.dataset.id + '&status=' + this.dataset.status);
|
||
});
|
||
});
|
||
|
||
// Username/surname character filter
|
||
var userFields = ['username', 'surname'];
|
||
userFields.forEach(function(id) {
|
||
var el = document.getElementById(id);
|
||
if (el) {
|
||
el.addEventListener('keyup', function() {
|
||
this.value = this.value.replace(/[^a-zA-ZwığüşöçĞÜŞÖÇİ ]/g, '');
|
||
});
|
||
}
|
||
});
|
||
|
||
// Window show
|
||
window.scrollTo(0, 0);
|
||
|
||
});
|
||
|
||
function emailControl(email) {
|
||
return /^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/i.test(email);
|
||
}
|
||
|
||
function customURLConverter(url, node, on_save, name) {
|
||
return url.substring(0, 7) === '/system' ? 'https://pisilinux.org' + url : url;
|
||
}
|