var date = new Date();
let day = date.getDate();
let month = date.getMonth() + 1;
let year = date.getFullYear();
let date1 = `${month}/${day}/${year}`;
var date2 = '08/30/2026';
var date3 = new Date(date1);
var date4 = new Date(date2);
const tarihGecElement = document.getElementById("tarihgec");
if (tarihGecElement) {
if (date3 > date4) {
tarihGecElement.innerHTML = "الأسعار ليست حالية";
} else {
tarihGecElement.innerHTML = "الأسعار الحالية";
}
} else {
console.warn("Sistem Uyarısı: HTML sayfasında 'tarihgec' ID'li element bulunamadı.");
}
// localStorage.clear(); // tek sayfa kullanılıyorsa temizler
//! variables
const cartBtn = document.querySelector(".cart-btn");
const clearCartBtn = document.querySelector(".btn-clear");
const checkoutCartBtn = document.querySelector(".btn-checkout");
const cartItems = document.querySelector(".cart-items");
const cartTotal = document.querySelector(".total-value");
const cartContent = document.querySelector(".cart-list");
const productsDOM = document.querySelector("#products-dom");
var kurlar = "USD"; //databaseden
var aktifDil = "ar"; // tr, en...
let cart = [];
let buttonsDOM = [];
class Products {
async getProducts() {
try {
// let result = await fetch("https://67a784d6203008941f67d30d.mockapi.io/products");
// let data = await result.json();
let data = [{"id":"1","title":"title","image":"https://fsmefeler.com.tr/resim","image2":"https://fsmefeler.com.tr/resim2","price":100}]; //databaseden
let products = data;
return products;
} catch (error) {
console.log(error);
}
}
}
class UI {
displayProducts(products) {
let result = "";
products.forEach(item => {
// item.price = parseFloat(item.price.toFixed(2));
item.price = item.price.toFixed(2);
result += `
`});
productsDOM.innerHTML = result;
}
getBagButtons() {
const buttons = [...document.querySelectorAll(".btn-add-to-cart")];
buttonsDOM = buttons;
buttons.forEach(button => {
let id = button.dataset.id;
let inCart = cart.find(item => item.id === id);
if (inCart) {
button.setAttribute("disabled", "disabled");
button.style.opacity = ".3";
} else {
button.addEventListener("click", event => {
event.target.disabled = true;
event.target.style.opacity = ".3";
//* get product from products
let cartItem = { ...Storage.getProduct(id), amount: 1 };
//* add procuct to the cart
cart = [...cart, cartItem];
//* save cart in local storage
Storage.saveCart(cart);
//* save cart values
this.saveCartValues(cart);
//* display cart item
this.addCartItem(cartItem)
//* show the cart
this.showCart();
})
}
})
}
saveCartValues(cart) {
let tempTotal = 0;
let itemsTotal = 0;
cart.map(item => {
tempTotal += item.price * item.amount;
itemsTotal += item.amount;
});
cartTotal.innerText = tempTotal.toFixed(2) + " " + kurlar;
cartItems.innerText = itemsTotal;
}
addCartItem(item) {
const li = document.createElement("li");
li.classList.add("cart-list-item");
li.innerHTML = `
`;
cartContent.appendChild(li);
}
// YENİ VE UYUMLU KOD
showCart() {
const sepetElementi = document.getElementById("offcanvasRight");
if (sepetElementi) {
// Eğer sepet zaten açıksa veya açılış animasyonundaysa çift tetiklemeyi önle
if (sepetElementi.classList.contains('show') || sepetElementi.classList.contains('showing')) {
return;
}
// Bootstrap 5.0.2 için en kararlı, doğrudan yerel örneği tetikleme yöntemi
const bsOffcanvas = new bootstrap.Offcanvas(sepetElementi);
bsOffcanvas.show();
}
}
setupAPP() {
cart = Storage.getCart();
this.saveCartValues(cart);
this.populateCart(cart);
}
populateCart(cart) {
cart.forEach(item => this.addCartItem(item));
}
cartLogic() {
clearCartBtn.addEventListener("click", () => {
this.clearCart();
});
checkoutCartBtn.addEventListener("click", () => {
this.checkoutCart();
});
cartContent.addEventListener("click", event => {
// A) SİLME (ÇÖP KUTUSU) BUTONU
let removeBtn = event.target.closest(".cart-remove-btn");
if (removeBtn) {
let id = removeBtn.dataset.id;
// 🚨 KRİTİK DÜZELTME: Parent saymak yerine doğrudan en üstteki 'li' satırını bulup siliyoruz.
// Bu sayede DOM yapısı asla bozulmaz ve sonraki işlemlerde tutarsızlık yaşanmaz.
let cartItemRow = removeBtn.closest("li");
if (cartItemRow) {
cartItemRow.remove();
}
this.removeItem(id);
return;
}
// B) ADET AZALTMA (EKSİ) BUTONU
let minusBtn = event.target.closest(".quantity-minus");
if (minusBtn) {
let id = minusBtn.dataset.id;
let tempItem = cart.find(item => item.id === id);
if (tempItem) {
tempItem.amount = tempItem.amount - 1;
if (tempItem.amount > 0) {
Storage.saveCart(cart);
this.saveCartValues(cart);
minusBtn.nextElementSibling.innerText = tempItem.amount;
} else {
// 🚨 KRİTİK DÜZELTME: Eksiye basılarak ürün sıfırlandığında da 'li' etiketini güvenle siliyoruz.
let cartItemRow = minusBtn.closest("li");
if (cartItemRow) {
cartItemRow.remove();
}
this.removeItem(id);
}
}
return;
}
// C) ADET ARTTIRMA (ARTI) BUTONU
let plusBtn = event.target.closest(".quantity-plus");
if (plusBtn) {
let id = plusBtn.dataset.id;
let tempItem = cart.find(item => item.id === id);
if (tempItem) {
tempItem.amount = tempItem.amount + 1;
Storage.saveCart(cart);
this.saveCartValues(cart);
plusBtn.previousElementSibling.innerText = tempItem.amount;
}
return;
}
});
}
clearCart() {
let cartItems = cart.map(item => item.id);
cartItems.forEach(id => this.removeItem(id));
while (cartContent.children.length > 0) {
cartContent.removeChild(cartContent.children[0]);
}
}
checkoutCart() {
var yazilacak = "" ;
var ttprice = 0 ;
var tprice = 0 ;
var ttprice6 = 0 ;
var yazilacak6 = "" ;
var ttprice9 = 0 ;
var ttprice9k = 0 ;
var yazilacak9 = "" ;
var yazilacak0 = "" ;
var tpricey = 0 ;
var ttpricey = 0 ;
var ttprice6y = 0 ;
var ttprice9y = 0 ;
var ttprice9ky = 0 ;
const myJSON = JSON.parse(localStorage.getItem("cart_" + aktifDil));
var myObj = myJSON;
for ( var baslangic = 0 ; baslangic < myObj.length ; baslangic ++ ) {
tprice = myObj[baslangic].amount * myObj[baslangic].price ;
tprice = parseFloat(tprice.toFixed(2));
ttprice = ttprice + tprice ;
ttprice = parseFloat(ttprice.toFixed(2));
yazilacak0 = "";
ttprice6 = ttprice;
ttprice6 = parseFloat(ttprice6.toFixed(2));
ttprice6y = ttprice6.toFixed(2);
yazilacak6 = "";
ttprice9 = ttprice6;
ttprice9 = parseFloat(ttprice9.toFixed(2));
ttprice9y = ttprice9.toFixed(2);
yazilacak9 = "";
tpricey = tprice.toFixed(2);
yazilacak += "
[ " + myObj[baslangic].id + " ] " + myObj[baslangic].title + "
" + myObj[baslangic].amount + " كمية x " + " ( " + myObj[baslangic].price + " " + kurlar + " ) = " + tpricey +" "+ kurlar +"
";
}
yazilacak += yazilacak0;
yazilacak += yazilacak6;
yazilacak += yazilacak9;
yazilacak += "
المبلغ الإجمالي: " + ttprice9y +" "+ kurlar + "
( لغرض المعلومات فقط! )";
yazilacak += "
السعر تاريخ الصلاحية: 31/07/2026 - 30/08/2026
";
if ( date3 > date4 ){
yazilacak += "الأسعار ليست حالية
مع الأسعار الحالية";
}
yazilacak += "
هل يمكنني الحصول على تأكيد لهذا الطلب؟ ";
yazilacak += "
الاسم واللقب : " + document.getElementById("basket-name").value;
yazilacak += "
رقم الهاتف : " + document.getElementById("basket-phone").value;
if ( baslangic > 0 ){
let wsparis = yazilacak.replace(/
/gi, "%0a");
var url = "minify/whatsar.html?" + "https://wa.me/+905352974482?text="
+"FSM Efeler سلة التسوق"+"%0a"
+"-------------------------------"+"%0a"
+wsparis+"%0a"+"%0a"
+"-------------------------------"+"%0a";
let text = document.getElementById("demo").innerHTML = yazilacak + ` `;
}
else {
let text = document.getElementById("demo").innerHTML = "";
}
}
removeItem(id) {
// Canlı sepet dizisinden ürünü filtreleyip siliyoruz
cart = cart.filter(item => item.id !== id);
// Yeni değerleri hesaplayıp dile özel hafızaya (Storage) kaydediyoruz
this.saveCartValues(cart);
Storage.saveCart(cart);
// Sizin en beğendiğiniz kararlı kilit sökme adımları (Aynen geri getirildi)
let button = this.getSingleButton(id);
if (button) {
button.removeAttribute("disabled");
button.removeAttribute("data-sepette");
button.style.opacity = "1";
button.style.pointerEvents = "auto";
button.style.cursor = "pointer";
button.innerHTML = ``;
}
}
getSingleButton(id) {
return document.querySelector(`.btn-add-to-cart[data-id="${id}"]`);
}
} // UI Sınıfı Bitişi
class Storage {
static saveProducts(products) {
localStorage.setItem("products", JSON.stringify(products));
}
static getProduct(id) {
let products = JSON.parse(localStorage.getItem("products"));
return products.find(product => product.id === id);
}
// SEPETİ DİLE GÖRE KAYDEDER (Örn: cart_tr veya cart_en)
static saveCart(cart) {
localStorage.setItem("cart_" + aktifDil, JSON.stringify(cart));
}
// SEPETİ DİLE GÖRE ÇEKER (Eğer o dilde sepet yoksa boş dizi döner)
static getCart() {
return localStorage.getItem("cart_" + aktifDil)
? JSON.parse(localStorage.getItem("cart_" + aktifDil))
: [];
}
}
document.addEventListener("DOMContentLoaded", () => {
const ui = new UI();
const products = new Products();
ui.setupAPP();
products.getProducts().then(products => {
ui.displayProducts(products);
Storage.saveProducts(products);
}).then(() => {
ui.getBagButtons();
ui.cartLogic();
// ==========================================================================
// 🎯 %100 NAFİR HATALARI ÖNLEYEN SLICK SLIDER GLOBAL TIKLAMA MOTORU
// ==========================================================================
// Slick Slider'ın ürettiği tüm kopya (klon) butonlarda bile sepete eklemenin
// eksiksiz çalışmasını garanti altına alan dinamik dinleyici:
document.body.addEventListener("click", event => {
// Tıklanan elemanın kendisi veya herhangi bir üst katmanı sepet butonu mu?
const button = event.target.closest(".btn-add-to-cart");
// Eğer sepet butonuysa ve halihazırda kilitli (sepette) değilse:
if (button && !button.hasAttribute("disabled") && button.getAttribute("data-sepette") !== "true") {
// Eğer bu buton projenin ui.getBagButtons() tarafından henüz yakalanmamış bir klonsa:
let id = button.dataset.id;
// Butonu anında mühürle ve dondur
button.setAttribute("disabled", "disabled");
button.setAttribute("data-sepette", "true");
button.style.opacity = ".3";
button.style.pointerEvents = "none";
button.innerHTML = ``;
// Canlı sepet array'ini hafızadan en güncel haliyle çek
cart = Storage.getCart();
// Eğer ürün sepette gerçekten yoksa ekle (Çift ekleme koruması)
let zatenVarMi = cart.find(item => item.id === id);
if (!zatenVarMi) {
let cartItem = { ...Storage.getProduct(id), amount: 1 };
cart = [...cart, cartItem];
Storage.saveCart(cart);
ui.saveCartValues(cart);
ui.addCartItem(cartItem);
}
// Sepet offcanvas panelini sağdan pürüzsüzce aç
ui.showCart();
}
});
// --- EN KARARLI SEPET KAPANIŞ DİNLEYİCİSİ ---
const sepetElementi = document.getElementById("offcanvasRight");
if (sepetElementi) {
sepetElementi.addEventListener('hidden.bs.offcanvas', function () {
// Bootstrap gövde kilitlerini temizle
document.body.removeAttribute("style");
document.body.classList.remove("offcanvas-open", "modal-open");
// Slick Slider boyutlarını sarsmadan pürüzsüzce yenile
if (typeof jQuery !== 'undefined' && jQuery('.product-image-slick-slider').length > 0) {
jQuery('.product-image-slick-slider').slick('setPosition');
}
// Dile özel sepet verisini çekip tüm butonları (klonlar dahil) tazeleyerek senkronu mühürlüyoruz
const guncelSepet = JSON.parse(localStorage.getItem("cart_" + aktifDil)) || [];
const tumSepetButonlari = document.querySelectorAll('.btn-add-to-cart');
tumSepetButonlari.forEach(button => {
const buttonId = button.getAttribute('data-id');
const urunSepetteMi = guncelSepet.some(item => String(item.id) === String(buttonId));
if (urunSepetteMi) {
button.setAttribute("data-sepette", "true");
button.setAttribute("disabled", "disabled");
button.style.opacity = ".3";
button.style.pointerEvents = "none";
button.innerHTML = ``;
} else {
button.removeAttribute("data-sepette");
button.removeAttribute("disabled");
button.style.opacity = "1";
button.style.pointerEvents = "auto";
button.style.cursor = "pointer";
button.innerHTML = ``;
}
});
});
}
});
});
function removeElement() {
document.getElementById("demo").style.display = "none";
}
function changeVisibility() {
document.getElementById("demo").style.display = "block";
document.getElementById("demo").style.visibility = "visible";
}