/** * İncelebi Widget - Otomatik Sepet Eklentisi * Widget ID: A137FAE62056C858 * Store: Admin User Store * Platform: ikas */ window.İncelebiWidget = { config: { widgetId: "A137FAE62056C858", storeId: 2, allowedDomain: "www.dericlub.com.tr", platform: "ikas", platformDisplay: "ikas", selectors: { addToCartButton: "[data-add-to-cart], .add-to-cart, #add-to-cart-button, .sepete-ekle", quantityInput: "input[name="quantity"], .quantity-input, #quantity, [data-quantity]" }, bulkCart: { cartPageUrl: "/cart", productPagePattern: "", processingDelay: 2, supportsAjax: false } }, init: function(options) { options = options || {}; console.log("İncelebi Widget başlatılıyor..."); // Domain kontrolü if (!this.checkDomain()) { console.warn("İncelebi Widget: Bu domain için yetkilendirilmemiş"); return false; } console.log(`İncelebi Widget Platform: ${this.config.platformDisplay} (${this.config.platform})`); // İncelebi'den geliyor mu kontrol et const paramType = this.checkIncelebiParams(); if (paramType === 'single') { console.log("İncelebi tek ürün parametresi tespit edildi..."); this.startWidget(); } else if (paramType === 'bulk') { console.log("İncelebi toplu sepet parametresi tespit edildi..."); this.startBulkCartProcess(); } else { console.log("İncelebi Widget yüklendi, parametreler bekleniyor..."); } return true; }, checkDomain: function() { if (!this.config.allowedDomain) return true; const currentDomain = window.location.hostname.toLowerCase(); return currentDomain === this.config.allowedDomain || currentDomain.endsWith('.' + this.config.allowedDomain); }, checkIncelebiParams: function() { const urlParams = new URLSearchParams(window.location.search); // Tek ürün kontrolü (mevcut sistem) if (urlParams.get('incelebi_cart') === '1') { return 'single'; } // Toplu sepet kontrolü (yeni sistem) if (urlParams.get('incelebi_bulk_cart') === '1') { return 'bulk'; } return false; }, startWidget: function() { console.log("İncelebi Widget çalışmaya başlıyor..."); // Sayfanın yüklenmesini bekle if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', () => { this.executeWidget(); }); } else { this.executeWidget(); } }, executeWidget: function() { const self = this; setTimeout(function() { try { // URL parametrelerini al const urlParams = new URLSearchParams(window.location.search); const productId = urlParams.get('product_id'); const quantity = urlParams.get('quantity') || '1'; console.log(`İncelebi Widget: Ürün ID ${productId}, Miktar ${quantity}`); // Miktar alanını doldur self.setQuantity(quantity); // Varyantları otomatik ayarla (URL parametrelerinden) self.setVariantsFromUrl(urlParams); // Sepete ekle butonuna tıkla setTimeout(function() { self.clickAddToCart(productId); }, 500); } catch (error) { console.error("İncelebi Widget hatası:", error); } }, 1000); }, setQuantity: function(quantity) { const quantityInput = document.querySelector(this.config.selectors.quantityInput); if (quantityInput) { quantityInput.value = quantity; quantityInput.dispatchEvent(new Event('change', { bubbles: true })); console.log(`İncelebi Widget: Miktar ${quantity} olarak ayarlandı`); } else { console.warn(`İncelebi Widget: Miktar alanı bulunamadı: ${this.config.selectors.quantityInput}`); } }, setVariantsFromUrl: function(urlParams) { // Otomatik varyant tespiti - URL parametrelerinden const variantParams = []; // URL'deki tüm variant_ parametrelerini bul for (const [key, value] of urlParams) { if (key.startsWith('variant_')) { const variantName = key.replace('variant_', ''); variantParams.push({ name: variantName, value: value }); } } if (variantParams.length === 0) { console.log("İncelebi Widget: Varyant parametresi bulunamadı"); return; } console.log("İncelebi Widget: Varyant parametreleri:", variantParams); // Otomatik seçici tahmini ve uygulama variantParams.forEach(variant => { const possibleSelectors = [ `select[name="${variant.name}"]`, `select[name="variant_${variant.name}"]`, `input[name="${variant.name}"]`, `input[name="variant_${variant.name}"]`, `.variant-${variant.name}`, `#variant-${variant.name}`, `.color-selector`, // Renk için `.size-selector`, // Beden için `select[data-variant="${variant.name}"]` ]; let applied = false; for (const selector of possibleSelectors) { const element = document.querySelector(selector); if (element && !applied) { try { if (element.tagName === 'SELECT') { // Select element için değer ata const option = element.querySelector(`option[value="${variant.value}"]`); if (option) { element.value = variant.value; element.dispatchEvent(new Event('change', { bubbles: true })); console.log(`İncelebi Widget: ${variant.name} = ${variant.value} ayarlandı (${selector})`); applied = true; } } else if (element.type === 'radio') { // Radio button için const radioElement = document.querySelector(`${selector}[value="${variant.value}"]`); if (radioElement) { radioElement.checked = true; radioElement.dispatchEvent(new Event('change', { bubbles: true })); console.log(`İncelebi Widget: ${variant.name} = ${variant.value} ayarlandı (radio)`); applied = true; } } else { // Diğer input türleri için element.value = variant.value; element.dispatchEvent(new Event('change', { bubbles: true })); console.log(`İncelebi Widget: ${variant.name} = ${variant.value} ayarlandı`); applied = true; } } catch (error) { console.warn(`İncelebi Widget: ${selector} varyant ayarlanamadı:`, error); } } } if (!applied) { console.warn(`İncelebi Widget: ${variant.name} varyantı için uygun seçici bulunamadı`); } }); }, clickAddToCart: function(productId) { const addToCartButton = document.querySelector(this.config.selectors.addToCartButton); if (addToCartButton) { addToCartButton.click(); console.log("İncelebi Widget: Sepete ekle butonuna tıklandı"); // Kullanım istatistiği gönder this.trackUsage(productId); } else { console.warn(`İncelebi Widget: Sepete ekle butonu bulunamadı: ${this.config.selectors.addToCartButton}`); } }, trackUsage: function(productId) { fetch('/api/widget/track/', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ widgetId: this.config.widgetId, storeId: this.config.storeId, productId: productId, success: true, timestamp: new Date().toISOString() }) }).catch(function() { // Tracking hatası önemli değil }); }, // ========== BULK CART PROCESSING ========== startBulkCartProcess: function() { console.log("İncelebi Toplu Sepet işlemi başlatılıyor..."); // URL'den sepet verilerini al const urlParams = new URLSearchParams(window.location.search); const cartDataParam = urlParams.get('cart_data'); if (!cartDataParam) { console.error("İncelebi Widget: Sepet verileri bulunamadı"); return; } try { const cartItems = JSON.parse(decodeURIComponent(cartDataParam)); console.log("İncelebi Widget: Sepet verileri:", cartItems); // Loading overlay'i göster this.showBulkProcessOverlay(cartItems); // İşlemi başlat this.processBulkCartItems(cartItems); } catch (error) { console.error("İncelebi Widget: Sepet verileri parse edilemedi:", error); } }, showBulkProcessOverlay: function(items) { // Overlay HTML'i oluştur const overlayHTML = `
Hazırlanıyor...
⏱️ Tahmini süre: ${items.length * this.config.bulkCart.processingDelay} saniye