1 2

Vesplus Manyetik Kireç Önleyici

900 TL
Vade farksız 9 taksit ile ayda 100 TL
Vade farksız 9 taksit uygulaması anlaşmalı bankalarda geçerlidir. Bankanıza ait kampanya tekliflerini öğrenmek için aşağıda yer alan “Vestel Ödeme Çözümlerim” sekmesini inceleyebilirsiniz. Taksit tutarı tavsiye edilen perakende fiyatı üzerinden hesaplanmaktadır.
<div class="desc-img"><img loading="lazy" decoding="async" alt="" src="https://statics.yamakiro.live/contents/images/20265616rich%20content.jpg" style="width: 600px; height: 600px;" /></div> <div class="desc-text" style="height: 602px;"> <div class="text"> <div class="slogan"> <div class="index">1</div> SOĞUK/SERİN SU ÖZELLİĞİ</div> <p>Vestel Su sebili, soğuk ve serin su seçenekleri ile su içmenin en konforlu yolunu sunuyor. İhtiyacınız olan su sıcaklığına anında ulaşarak hayatınızı kolaylaştırın.<br /> Buz Gibi Soğuk Su: Sıcak yaz günlerinde ferahlık mı arıyorsunuz? Su sebilinizin soğuk su özelliği ile serinliği doyasıya yaşayın. Spor sonrası veya sıcak günlerde, soğuk suyun tazeliği her zaman elinizin altında.<br /> Serin Sıcaklıkta Su: Günlük su tüketiminizde ideal sıcaklık! Ne çok sıcak ne de çok soğuk, su sebilinizle ile tam kıvamında su ile her an taze suyun keyfini çıkarın. .</p> </div> </div> <div class="clearfix"></div></div> </div> </div> </div> </div> <div class="pdt-panel" > <button type="button" class="pdt-panel__header" aria-expanded="false"> <span class="pdt-panel__title">Teknik Bilgiler</span> <span class="pdt-panel__icon" aria-hidden="true"></span> </button> <div class="pdt-panel__body"> <div class="pdt-panel__content pdt-specs__content" style=" --pdt-specs-font-size: 14px; --pdt-specs-heading-font-size: 16px; --pdt-specs-heading-font-weight: 700; --pdt-specs-label-color: #555555; --pdt-specs-value-color: #1a1a1a; --pdt-specs-label-width: 400px; --pdt-specs-group-color: #1a1a1a; --pdt-specs-group-bg: #ffffff; --pdt-specs-group-border: 2px solid #df2027; --pdt-specs-heading-span-border: 1px solid #979797; --pdt-specs-feature-border: 2px dashed #dedede; " > <div class="pdt-specs__groups" id="pdt-specs-3534"></div> </div> </div> </div> <script> (function () { function wire(content) { if (content.__pdtBound) { return; } content.__pdtBound = true; var panel = content.closest('.pdt-panel'); var target = content.querySelector('.pdt-specs__groups'); if (!target) { return; } var loaded = false; function load() { if (loaded) { return; } loaded = true; console.log('[pdt-specs] load tetiklendi'); // Önizlemede uç çağrılamaz: PreviewIframe teknik bilgiler yanıtını // window.__TB_FEATURE_LIST_MOCK olarak verir, sekme tasarlanabilsin diye // doğrudan o basılır (tab-campaigns ile aynı kalıp). if (window.__TB_FEATURE_LIST_MOCK) { render(window.__TB_FEATURE_LIST_MOCK); return; } var url = 'https://www.yamakiro.live/product/getfeaturelistjson?productID=3534'; console.log('[pdt-specs] istek URL:', url); fetch(url, { credentials: 'same-origin' }) .then(function (res) { console.log('[pdt-specs] status:', res.status, '| content-type:', res.headers.get('content-type')); return res.text(); }) .then(function (text) { console.log('[pdt-specs] ham yanıt (ilk 500):', (text || '').slice(0, 500)); var response; try { response = JSON.parse(text); console.log('[pdt-specs] parse edilen JSON:', response); } catch (e) { console.error('[pdt-specs] JSON parse edilemedi (muhtemelen HTML dönüyor):', e); return; } render(response); }) .catch(function (err) { console.error('[pdt-specs] fetch hatası (ağ/CORS):', err); }); } // Yanıtı panele basar; hem uçtan hem önizleme mock'undan çağrılır. function render(response) { var groups = Array.isArray(response) ? response : (response.attribute_group_list || response.groups || []); // "Diğer Bilgiler" içeriği other_information alanından besleniyor; // attribute_group_list içinde aynı başlıkla gelen grupları listeleme. function normalizeTr(text) { return (text == null ? '' : String(text)) .replace(/İ/g, 'i') .replace(/I/g, 'ı') .toLowerCase(); } function isOtherGroup(group) { var haystack = normalizeTr(group.code) + ' ' + normalizeTr(group.display_name); return haystack.indexOf('diğer') !== -1 || haystack.indexOf('diger') !== -1; } groups = groups .filter(function (group) { if (isOtherGroup(group)) { return false; } var items = group.attribute_group_item_list || group.items || []; return items.length > 0; }) .sort(function (a, b) { return (a.display_order || 0) - (b.display_order || 0); }); var html = ''; groups.forEach(function (group) { html += '<div class="pdt-specs-group">'; html += '<div class="pdt-specs-group__heading"><span>' + group.display_name + '</span></div>'; (group.attribute_group_item_list || group.items || []) .sort(function (a, b) { return (a.display_order || 0) - (b.display_order || 0); }) .forEach(function (item) { // Değeri boş ya da "-" olan item'ı listeleme. var value = (item.attribute_value_text == null ? '' : String(item.attribute_value_text)).trim(); if (value === '' || value === '-') { return; } html += '<div class="pdt-specs-group__feature">' + '<span class="pdt-specs-group__feature-label">' + item.attribute_name + '</span>' + '<span class="pdt-specs-group__feature-value">' + item.attribute_value_text + '</span>' + '</div>'; }); html += '</div>'; }); // "Diğer Bilgiler" bloğu yalnızca other_information alanından beslenir. var otherInfo = response.other_information; if (otherInfo) { var otherItems = (otherInfo.items || []).filter(function (item) { var value = (item.value == null ? '' : String(item.value)).trim(); return value !== '' && value !== '-'; }); if (otherItems.length) { html += '<div class="pdt-specs-group">'; html += '<div class="pdt-specs-group__heading"><span>' + (otherInfo.title || '') + '</span></div>'; otherItems.forEach(function (item) { html += '<div class="pdt-specs-group__feature">' + '<span class="pdt-specs-group__feature-label">' + item.name + '</span>' + '<span class="pdt-specs-group__feature-value">' + item.value + '</span>' + '</div>'; }); html += '</div>'; } } // En üste technical_images'ten gelen görselleri (url) bas. var storeUrl = 'https://www.yamakiro.live'; var images = (response.technical_images || []) .slice() .sort(function (a, b) { return (a.display_order || 0) - (b.display_order || 0); }); var imagesHtml = ''; if (images.length) { imagesHtml += '<div class="pdt-specs__images">'; images.forEach(function (img) { var src = (typeof img === 'string') ? img : (img && img.url) || ''; if (!src) { return; } if (String(src).charAt(0) === '/') { src = storeUrl + src; } var alt = (img && typeof img === 'object') ? (img.alt || img.title || img.display_name || '') : ''; imagesHtml += '<img class="pdt-specs__image" src="' + String(src).replace(/"/g, '"') + '" alt="' + String(alt).replace(/"/g, '"') + '" loading="lazy">'; }); imagesHtml += '</div>'; } target.innerHTML = imagesHtml + html; } // No wrapping panel (e.g. rendered standalone) → just load. if (!panel) { load(); return; } // Fire when this tab becomes active — the section toggles `is-active` on the // panel whether the desktop tab button or the mobile header is clicked. if (panel.classList.contains('is-active')) { load(); } new MutationObserver(function () { if (panel.classList.contains('is-active')) { load(); } }).observe(panel, { attributes: true, attributeFilter: ['class'] }); // Belt-and-suspenders: also load on this panel's own header click. var header = panel.querySelector('.pdt-panel__header'); if (header) { header.addEventListener('click', load); } } function init() { document.querySelectorAll('.pdt-specs__content').forEach(wire); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } })(); </script> <div class="pdt-panel" data-panel-key="store_stock" > <button type="button" class="pdt-panel__header" aria-expanded="false"> <span class="pdt-panel__title">Mağazadaki Stok Durumu</span> <span class="pdt-panel__icon" aria-hidden="true"></span> </button> <div class="pdt-panel__body"> <div class="pdt-panel__content pdt-store"> <div class="pdt-store__finder" data-pdt-store-config="{ "product_id": 4524, "endpoints": { "districts": "/countrycity/getdistrictsofcity", "stock": "/product/getstorebasedlocationdealerstockjson" }, "params": { "product_id": "productID", "city_id": "cityID", "district_id": "districtID", "districts_city": "cityId" }, "labels": { "count": "{count} adet mağaza bulundu", "no_results": "Ürün yakınlardaki bir mağazada mevcut değil.", "loading": "Yükleniyor...", "error": "Mağaza bilgileri yüklenemedi.", "no_city": "Lütfen önce il seçiniz.", "in_stock": "Stokta Var", "critical": "Kritik Stok", "out": "Stokta Yok" }, "default_location": {"latitude":"38.933363","longitude":"35.159742"}, "maps_key": "AIzaSyBM41e0brOjC7vGryniViybW8sf7aV5xjU", "map_zoom": "6", "pin_icon": "" }" style=" --pdt-store-accent: #e30613; --pdt-store-border: #e0e0e0; --pdt-store-near-bg: #e30613; --pdt-store-search-bg: #1a1a1a; --pdt-store-in: #5cb85c; --pdt-store-critical: #f2c200; --pdt-store-out: #cc0000; --pdt-store-select-bg: #ffffff; --pdt-store-select-filled: #faf3e8; --pdt-store-select-accent: #1a1a1a; --pdt-store-select-text: #1a1a1a; --pdt-store-finder-h: 440px; " > <div class="pdt-store__product">Vestel SP 200 Su Sebili</div> <div class="pdt-store__toolbar"> <button type="button" class="pdt-store__near"> <span class="pdt-store__near-ic" aria-hidden="true"></span>EN YAKIN MAĞAZAYI BULUN </button> <span class="pdt-store__or">veya</span> <div class="pdt-store__fields"> <div class="pdt-store__field"> <select class="pdt-store__city" aria-label="İl Seçiniz.."> <option value="">İl Seçiniz..</option> <option value="1">ADANA</option> <option value="2">ADIYAMAN</option> <option value="3">AFYONKARAHİSAR</option> <option value="4">AĞRI</option> <option value="68">AKSARAY</option> <option value="5">AMASYA</option> <option value="6">ANKARA</option> <option value="7">ANTALYA</option> <option value="75">ARDAHAN</option> <option value="8">ARTVİN</option> <option value="9">AYDIN</option> <option value="10">BALIKESİR</option> <option value="74">BARTIN</option> <option value="72">BATMAN</option> <option value="69">BAYBURT</option> <option value="11">BİLECİK</option> <option value="12">BİNGÖL</option> <option value="13">BİTLİS</option> <option value="14">BOLU</option> <option value="15">BURDUR</option> <option value="16">BURSA</option> <option value="17">ÇANAKKALE</option> <option value="18">ÇANKIRI</option> <option value="19">ÇORUM</option> <option value="20">DENİZLİ</option> <option value="21">DİYARBAKIR</option> <option value="81">DÜZCE</option> <option value="22">EDİRNE</option> <option value="23">ELAZIĞ</option> <option value="24">ERZİNCAN</option> <option value="25">ERZURUM</option> <option value="26">ESKİŞEHİR</option> <option value="27">GAZİANTEP</option> <option value="28">GİRESUN</option> <option value="29">GÜMÜŞHANE</option> <option value="30">HAKKARİ</option> <option value="31">HATAY</option> <option value="76">IĞDIR</option> <option value="32">ISPARTA</option> <option value="34">İSTANBUL</option> <option value="35">İZMİR</option> <option value="46">KAHRAMANMARAŞ</option> <option value="78">KARABÜK</option> <option value="70">KARAMAN</option> <option value="36">KARS</option> <option value="37">KASTAMONU</option> <option value="38">KAYSERİ</option> <option value="79">KİLİS</option> <option value="71">KIRIKKALE</option> <option value="39">KIRKLARELİ</option> <option value="40">KIRŞEHİR</option> <option value="41">KOCAELİ</option> <option value="42">KONYA</option> <option value="43">KÜTAHYA</option> <option value="44">MALATYA</option> <option value="45">MANİSA</option> <option value="47">MARDİN</option> <option value="33">MERSİN</option> <option value="48">MUĞLA</option> <option value="49">MUŞ</option> <option value="50">NEVŞEHİR</option> <option value="51">NİĞDE</option> <option value="52">ORDU</option> <option value="80">OSMANİYE</option> <option value="53">RİZE</option> <option value="54">SAKARYA</option> <option value="55">SAMSUN</option> <option value="63">ŞANLIURFA</option> <option value="56">SİİRT</option> <option value="57">SİNOP</option> <option value="73">ŞIRNAK</option> <option value="58">SİVAS</option> <option value="59">TEKİRDAĞ</option> <option value="60">TOKAT</option> <option value="61">TRABZON</option> <option value="62">TUNCELİ</option> <option value="64">UŞAK</option> <option value="65">VAN</option> <option value="77">YALOVA</option> <option value="66">YOZGAT</option> <option value="82">YURTDIŞI</option> <option value="67">ZONGULDAK</option> </select> </div> <div class="pdt-store__field"> <select class="pdt-store__district" data-placeholder="İlçe Seçiniz.." aria-label="İlçe Seçiniz.." disabled > <option value="">İlçe Seçiniz..</option> </select> </div> </div> <button type="button" class="pdt-store__search">MAĞAZA ARA</button> </div> <!-- Two columns (results + map) are enabled by the script once results exist. --> <div class="pdt-store__layout"> <div class="pdt-store__results"> <div class="pdt-store__count" hidden></div> <div class="pdt-store__list"></div> <div class="pdt-store__state" hidden></div> </div> <div class="pdt-store__map"></div> </div> </div> </div> </div> </div> <script> (function () { document.querySelectorAll('.pdt-store__finder').forEach(setupStoreFinder); function setupStoreFinder(root) { if (root.__pdtStoreInit) { return; } root.__pdtStoreInit = true; var cfg = parseConfig(root); var labels = cfg.labels || {}; var params = cfg.params || {}; var endpoints = cfg.endpoints || {}; var citySel = root.querySelector('.pdt-store__city'); var distSel = root.querySelector('.pdt-store__district'); var searchBtn = root.querySelector('.pdt-store__search'); var nearBtn = root.querySelector('.pdt-store__near'); var listEl = root.querySelector('.pdt-store__list'); var countEl = root.querySelector('.pdt-store__count'); var stateEl = root.querySelector('.pdt-store__state'); var layoutEl = root.querySelector('.pdt-store__layout'); var mapEl = root.querySelector('.pdt-store__map'); var map = null; var markers = {}; var infoWindow = null; var currentStores = []; // Toggle a "filled" style once a value is picked (cream bg + dark text). [citySel, distSel].forEach(function (sel) { if (!sel) { return; } var mark = function () { sel.classList.toggle('is-filled', !!sel.value); }; sel.addEventListener('change', mark); mark(); }); if (citySel) { citySel.addEventListener('change', function () { loadDistricts(citySel.value); }); } if (searchBtn) { searchBtn.addEventListener('click', search); } if (nearBtn) { nearBtn.addEventListener('click', nearStore); } // Click a result card → open its marker's info window on the map. if (listEl) { listEl.addEventListener('click', function (e) { var card = e.target && e.target.closest ? e.target.closest('.pdt-store__card') : null; if (!card) { return; } var idx = parseInt(card.getAttribute('data-index'), 10); if (!isNaN(idx) && currentStores[idx]) { openInfo(currentStores[idx]); } }); } // --- İl → İlçe ------------------------------------------------------- function loadDistricts(cityId, cb) { resetDistricts(); if (distSel) { distSel.disabled = true; } if (!cityId || !endpoints.districts) { if (cb) { cb(); } return; } get(endpoints.districts, buildQuery([[params.districts_city || 'cityId', cityId]])) .then(function (list) { applyDistricts(list); if (cb) { cb(); } }) .catch(function () { applyDistricts([]); if (cb) { cb(); } }); } function resetDistricts() { if (!distSel) { return; } distSel.innerHTML = '<option value="">' + esc(distSel.getAttribute('data-placeholder') || '') + '</option>'; distSel.classList.remove('is-filled'); } function applyDistricts(list) { resetDistricts(); if (!distSel || !list || !list.length) { if (distSel) { distSel.disabled = true; } return; } list.forEach(function (d) { var opt = document.createElement('option'); opt.value = d.Value != null ? d.Value : (d.value != null ? d.value : d.id); opt.textContent = d.Text != null ? d.Text : (d.text != null ? d.text : ''); distSel.appendChild(opt); }); distSel.disabled = false; } // --- Search ---------------------------------------------------------- function search() { var cityId = citySel ? citySel.value : ''; if (!cityId) { setState(labels.no_city); return; } if (!endpoints.stock) { setState(labels.error); return; } setState(labels.loading); if (countEl) { countEl.hidden = true; } if (listEl) { listEl.innerHTML = ''; } var districtId = distSel ? distSel.value : ''; var query = [ [params.product_id || 'productID', cfg.product_id || ''], [params.city_id || 'cityID', cityId] ]; if (districtId) { query.push([params.district_id || 'districtID', districtId]); } get(endpoints.stock, buildQuery(query)) .then(function (res) { if (res && res.success === false) { setState(labels.error); return; } renderStores((res && res.stores) || [], res && res.count); }) .catch(function () { setState(labels.error); }); } // --- Rendering ------------------------------------------------------- function renderStores(stores, count) { stores = stores || []; currentStores = stores; if (countEl) { countEl.hidden = !stores.length; countEl.textContent = (labels.count || '{count}').replace('{count}', count != null ? count : stores.length); } if (!stores.length) { listEl.innerHTML = ''; if (layoutEl) { layoutEl.classList.remove('pdt-store__layout--with-map'); } setState(labels.no_results); return; } setState(''); listEl.innerHTML = stores.map(renderCard).join(''); showMap(stores); } function renderCard(store, index) { var loc = store.pickup_location || {}; var stock = stockInfo(store); return '' + '<div class="pdt-store__card" data-index="' + index + '">' + '<div class="pdt-store__card-name">' + esc(loc.name) + '</div>' + row('pin', esc(fullAddress(loc))) + row('phone', loc.phone ? '<a href="tel:' + esc(loc.phone) + '">' + esc(loc.phone) + '</a>' : '') + '<div class="pdt-store__stock pdt-store__stock--' + stock.key + '">' + '<div class="pdt-store__bar"><span style="width:' + stock.width + '%"></span></div>' + '<span class="pdt-store__stock-label">' + esc(stock.label) + '</span>' + '</div>' + '</div>'; } function row(icon, html) { if (!html) { return ''; } return '<div class="pdt-store__card-row"><span class="pdt-store__ic pdt-store__ic--' + icon + '" aria-hidden="true"></span>' + html + '</div>'; } function stockInfo(store) { var cls = store.stock_class || (Number(store.quantity) <= 1 ? 'critical' : 'full'); if (cls === 'critical') { return { key: 'critical', label: labels.critical || 'Kritik Stok', width: 40 }; } if (cls === 'out' || cls === 'out_of_stock') { return { key: 'out', label: labels.out || 'Stokta Yok', width: 8 }; } return { key: 'full', label: labels.in_stock || 'Stokta Var', width: 100 }; } // Address followed by "District / City" (matches the .NET layout). function fullAddress(loc) { return [loc.address, regionText(loc)].filter(Boolean).join(' '); } function regionText(loc) { if (loc.district_name && loc.city_name) { return loc.district_name + ' / ' + loc.city_name; } return loc.district_name || loc.city_name || ''; } // --- Map ------------------------------------------------------------- function showMap(stores) { if (!mapEl || !layoutEl) { return; } layoutEl.classList.add('pdt-store__layout--with-map'); ensureMaps(function () { initMap(stores); }); } function ensureMaps(cb) { if (window.google && window.google.maps) { cb(); return; } if (!cfg.maps_key) { showMapNote('Harita için Google Maps API anahtarı gerekli.'); return; } loadMapsScript(cfg.maps_key, cb, function () { showMapNote(labels.error || 'Harita yüklenemedi.'); }); } function initMap(stores) { if (!mapEl || !window.google || !window.google.maps) { return; } var G = window.google.maps; var def = cfg.default_location || {}; var center = { lat: parseFloat(def.latitude) || 39.0, lng: parseFloat(def.longitude) || 35.0 }; map = new G.Map(mapEl, { zoom: cfg.map_zoom || 6, center: center, mapTypeId: 'roadmap' }); markers = {}; var bounds = new G.LatLngBounds(); var placed = 0; stores.forEach(function (s) { var loc = s.pickup_location || {}; var lat = parseFloat(loc.latitude); var lng = parseFloat(loc.longitude); if (!isFinite(lat) || !isFinite(lng) || lat === 0 || lat > 50) { return; } var pos = { lat: lat, lng: lng }; var marker = new G.Marker({ position: pos, map: map, title: loc.name || '', icon: cfg.pin_icon || undefined }); marker.addListener('click', function () { openInfo(s); }); markers[loc.id] = marker; bounds.extend(pos); placed++; }); if (placed) { map.fitBounds(bounds); } } function openInfo(store) { if (!map || !window.google) { return; } var loc = store.pickup_location || {}; var marker = markers[loc.id]; if (!marker) { return; } if (infoWindow) { infoWindow.close(); } infoWindow = new window.google.maps.InfoWindow({ content: '<div class="pdt-store__info"><strong>' + esc(loc.name) + '</strong><br>' + esc(fullAddress(loc)) + (loc.phone ? '<br>' + esc(loc.phone) : '') + '</div>' }); infoWindow.open(map, marker); map.panTo(marker.getPosition()); } function showMapNote(msg) { if (mapEl) { mapEl.innerHTML = '<div class="pdt-store__map-note">' + esc(msg) + '</div>'; } } // --- Near store (geolocation) --------------------------------------- // Ask the browser for the user's coordinates, reverse-geocode them to a // city/district, select those in the dropdowns, then run the search. function nearStore() { if (!navigator.geolocation) { setState('Tarayıcınız konum servisini desteklemiyor.'); return; } if (!cfg.maps_key) { setState('Konum için Google Maps API anahtarı gerekli.'); return; } setState(labels.loading); navigator.geolocation.getCurrentPosition( function (pos) { reverseGeocode(pos.coords.latitude, pos.coords.longitude); }, function () { setState('Konumunuza erişilemedi.'); } ); } function reverseGeocode(lat, lng) { var url = 'https://maps.googleapis.com/maps/api/geocode/json?latlng=' + encodeURIComponent(lat + ',' + lng) + '&key=' + encodeURIComponent(cfg.maps_key); fetch(url) .then(function (r) { return r.json(); }) .then(function (data) { var city = '', district = ''; var first = data && data.results && data.results[0]; if (first && first.address_components) { first.address_components.forEach(function (comp) { if (comp.types.indexOf('administrative_area_level_1') > -1) { city = comp.long_name; } if (comp.types.indexOf('administrative_area_level_2') > -1) { district = comp.long_name; } }); } selectByGeo(city, district); }) .catch(function () { setState(labels.error); }); } function selectByGeo(cityName, districtName) { var cityOpt = citySel ? findOptionByText(citySel, cityName) : null; if (!cityOpt) { setState(labels.no_results); return; } citySel.value = cityOpt.value; citySel.classList.add('is-filled'); // Load that city's districts, pick the matching one, then search. loadDistricts(cityOpt.value, function () { if (districtName && distSel) { var distOpt = findOptionByText(distSel, districtName); if (distOpt) { distSel.value = distOpt.value; distSel.classList.add('is-filled'); } } search(); }); } // --- Helpers --------------------------------------------------------- function setState(msg) { if (!stateEl) { return; } stateEl.textContent = msg || ''; stateEl.hidden = !msg; } function findOptionByText(sel, text) { var t = norm(text); if (!t) { return null; } for (var i = 0; i < sel.options.length; i++) { if (norm(sel.options[i].textContent) === t) { return sel.options[i]; } } return null; } // Turkish-aware upper-casing so "İstanbul" ↔ "İSTANBUL" match. function norm(s) { return (s == null ? '' : String(s)).toLocaleUpperCase('tr-TR').trim(); } } function parseConfig(root) { try { return JSON.parse(root.getAttribute('data-pdt-store-config') || '{}'); } catch (e) { return {}; } } function buildQuery(pairs) { return pairs.map(function (p) { return encodeURIComponent(p[0]) + '=' + encodeURIComponent(p[1]); }).join('&'); } function get(url, query) { var full = url + (url.indexOf('?') > -1 ? '&' : '?') + query; return fetch(full, { headers: { 'X-Requested-With': 'XMLHttpRequest' } }).then(function (r) { return r.json(); }); } function esc(s) { return (s == null ? '' : String(s)).replace(/[&<>"]/g, function (c) { return { '&': '&', '<': '<', '>': '>', '"': '"' }[c]; }); } // Load the Google Maps JS API once, shared across all finders on the page. function loadMapsScript(key, onload, onerror) { if (window.google && window.google.maps) { onload(); return; } window.__pdtMapsCbs = window.__pdtMapsCbs || []; window.__pdtMapsCbs.push(onload); if (window.__pdtMapsLoading) { return; } window.__pdtMapsLoading = true; var s = document.createElement('script'); s.src = 'https://maps.googleapis.com/maps/api/js?key=' + encodeURIComponent(key); s.async = true; s.onload = function () { (window.__pdtMapsCbs || []).forEach(function (f) { f(); }); window.__pdtMapsCbs = []; }; s.onerror = function () { window.__pdtMapsLoading = false; if (onerror) { onerror(); } }; document.head.appendChild(s); } })(); </script> <div class="pdt-panel" > <button type="button" class="pdt-panel__header" aria-expanded="false"> <span class="pdt-panel__title">Yorumlar <span class="pdt-panel__count">(1)</span></span> <span class="pdt-panel__icon" aria-hidden="true"></span> </button> <div class="pdt-panel__body"> <div class="pdt-panel__content pdt-rv" style=" --pdt-rv-accent: #e30613; --pdt-rv-star: #e30613; --pdt-rv-star-empty: #d9d9d9; --pdt-rv-score-color: #333333; " > <div class="pdt-rv__app" data-product-id="4524" data-endpoint="https://www.yamakiro.live/product/getcommentlistjson" data-product-title="Vesplus Manyetik Kireç Önleyici" data-product-image="https://statics.yamakiro.live/productimages/20293267_r1_900_1254.jpg" data-review-count="1" data-review-average="5.0" data-tab-label="Yorumlar" data-all-label="Tüm yorumları gör" data-detail-label="Ürün Detayına Git" data-more-label="Tüm yorumları gör" data-write-label="Yorum yap" data-write-url="#" data-cart-label="Sepete Ekle" data-ai-summary-title="Yapay Zeka Yorum Özeti" data-ai-summary-note="Ürünü satın alan gerçek kullanıcı değerlendirmeleri yapay zeka tarafından özetlenmiştir." data-logged-in="false" data-variant-id="4373" data-eligible-endpoint="https://www.yamakiro.live/customer/hascustomercommentforproduct" data-save-endpoint="https://www.yamakiro.live/product/savecomment" data-criteria-url="#" data-store-id="" data-recaptcha-key="" data-translate-key="AIzaSyBM41e0brOjC7vGryniViybW8sf7aV5xjU" data-translate-lang="en" data-like-endpoint="https://www.yamakiro.live/product/likecomment" data-unlike-endpoint="https://www.yamakiro.live/product/removelikefromcomment" data-login-url="https://www.yamakiro.live/customer/login" data-cta-exists="true" data-cta-can-add="false" data-cta-pid="4524" data-cta-pcode="20293267" data-cta-vid="4373" data-cta-vcode="20293267_X" data-cta-qty="1" data-cta-stock-url="/product/productstockreminder?productID=4524" data-cta-label="Stok Gelince Haber Ver" data-customer-id="" data-customer-first="" data-customer-last="" data-msg-save-error="Yorum kaydedilirken bir hata oluştu." data-msg-screen-error="Yorum ekranı getirilirken bir hata oluştu." > <div class="pdt-rv__loading">Yorumlar yükleniyor…</div> </div> </div> </div> </div> <script> (function () { // ----- Sayfa scroll kilidi ----- // Overlay/modal acikken sayfanin kendi scroll'u kilitlenir; geriye tek scroll // (overlay'in kendi scroll'u) kalir. Kilit `html` uzerindeki bir class ile // uygulanir: `body { overflow: hidden }` tek basina yetmiyor, cunku viewport'a // propagation yalnizca html'in overflow'u `visible` iken body'den alinir — // storefront'ta skeleton.css `body, html { overflow-x: hidden }` dedigi icin // sayfa scroll'u acik kaliyor ve overlay scroll'unun yaninda ikinci bir // scrollbar goruluyordu. Ilgili CSS: style.css `.pdt-rv-locked`. var docEl = document.documentElement; var lockedScrollY = null; // null = bu closure kilit tutmuyor function lockPageScroll() { if (lockedScrollY !== null) { return; } lockedScrollY = window.pageYOffset || docEl.scrollTop || 0; // Scrollbar kaybolunca sayfanin genislemesini (layout ziplamasi) onle. var sbw = window.innerWidth - docEl.clientWidth; if (sbw > 0) { docEl.style.paddingRight = sbw + 'px'; } docEl.classList.add('pdt-rv-locked'); } function unlockPageScroll() { docEl.classList.remove('pdt-rv-locked'); docEl.style.paddingRight = ''; if (lockedScrollY === null) { return; } var y = lockedScrollY; lockedScrollY = null; // Tarayici kilit sirasinda scroll offset'ini sifirlamis olabilir. if ((window.pageYOffset || docEl.scrollTop || 0) !== y) { window.scrollTo(0, y); } } // Mobil fallback: iOS Safari'de (ozellikle iOS 16 oncesi) overflow/height kilidi // dokunmayla kaydirmayi her zaman durdurmuyor. Kilit acikken overlay/modal // disinda kalan tek parmakli touchmove'lar iptal edilir — overlay'in kendi // scroll'u serbest kalir, pinch-zoom'a dokunulmaz. Listener window seviyesinde // bir kez baglanir; preview re-init'leri ustune yigmaz. if (!window.__pdtRvTouchLockBound) { window.__pdtRvTouchLockBound = true; document.addEventListener('touchmove', function (e) { if (!docEl.classList.contains('pdt-rv-locked')) { return; } if (e.touches && e.touches.length > 1) { return; } var t = e.target; if (t && t.closest && t.closest('.pdt-rv-overlay, .pdt-rv__modal, .pdt-rv__wmodal')) { return; } if (e.cancelable) { e.preventDefault(); } }, { passive: false }); } // A previously-open modal may have been wiped by a preview re-render without // its close() running, leaving the body scroll locked. Clear any stale lock on // (re)init; modals only lock on user interaction, which always happens later. document.body.style.overflow = ''; unlockPageScroll(); document.querySelectorAll('.pdt-rv__app').forEach(function (app) { if (app.__reviewsInit) { return; } app.__reviewsInit = true; var loaded = false; var panel = app.closest('.pdt-panel'); // Current query state; re-request re-renders with these params. var state = { onlyPhotos: false, orderOption: 'CreateTimeDecreasing', firstLoad: true, page: 0 }; // Accumulates comments across pages so "load more" appends instead of // replacing. base = the first response's summary/meta (stays global). var acc = { base: null, comments: [], ids: null, hasMore: false }; var loadingMore = false; // Shared across re-renders. render() re-runs on filter toggle, so the // window/document listeners are bound ONCE here and read this live state // instead of stacking a new handler (with stale element refs) each render. var drag = { active: false, moved: false, startX: 0, startScroll: 0, strip: null }; var modalCtl = null; // set by render(): { el, close, next, prev } var wmodalCtl = null; // set by render(): { el, close } for the write modal var globalBound = false; // ----- Full-page reviews overlay ----- // Opened from .product-rating__meta or the "Tüm yorumları gör" head link. // Reuses the SAME rendered content by MOVING .pdt-rv into a body-level // overlay (inactive tab panels are display:none, so fixed-positioning in // place would not render) — no HTML is duplicated. var overlayActive = false; var overlayHost = null, overlayInner = null; var rvHome = null; // { parent, next } to restore .pdt-rv on close var detailLabel = app.getAttribute('data-detail-label') || 'Ürün Detayına Git'; function ensureOverlayHost() { if (overlayHost) { return; } overlayHost = document.createElement('div'); overlayHost.className = 'pdt-rv-overlay'; overlayHost.setAttribute('hidden', ''); overlayInner = document.createElement('div'); overlayInner.className = 'pdt-rv-overlay__inner'; overlayHost.appendChild(overlayInner); document.body.appendChild(overlayHost); } // Sit below any pinned header/category bars (measured live; body scroll is // locked while open so they stay put). function measureHeaderBottom() { var sels = ['.site-header', '[class*="catnav"]', '[class*="category-nav"]', 'header']; var bottom = 0; for (var s = 0; s < sels.length; s++) { var els = document.querySelectorAll(sels[s]); for (var i = 0; i < els.length; i++) { var r = els[i].getBoundingClientRect(); if (r.top <= 8 && r.bottom > bottom && r.bottom < window.innerHeight * 0.6) { bottom = r.bottom; } } } return Math.max(0, Math.round(bottom)); } function setHeadAllLabel() { var link = app.querySelector('.pdt-rv__head-all'); if (link) { link.textContent = overlayActive ? detailLabel : (app.getAttribute('data-all-label') || 'Tüm yorumları gör'); } } function openOverlay() { if (overlayActive) { return; } var rvRoot = app.closest('.pdt-rv'); if (!rvRoot) { return; } ensureOverlayHost(); if (!loaded) { load(); } // lazily render if the reviews tab was never opened if (rvRoot.parentNode !== overlayInner) { rvHome = { parent: rvRoot.parentNode, next: rvRoot.nextSibling }; overlayInner.appendChild(rvRoot); } overlayActive = true; rvRoot.classList.add('is-overlay'); // Once kilitle, sonra olc: kilit sirasinda sticky header kendi // scroll-durumunu degistirebilir, offset guncel yuksekligi yansitmali. lockPageScroll(); overlayHost.style.top = measureHeaderBottom() + 'px'; overlayHost.removeAttribute('hidden'); overlayHost.scrollTop = 0; setHeadAllLabel(); } // ----- "Yorum yap" from the product header (.product-rating__write) ----- // Opens only the write-review form — the reviews area stays where it is. // The form is part of the reviews' markup and exists once they have been // rendered, so a request loads them in the background when needed and is // carried out by clicking the reviews' own "Yorum yap" button // (.pdt-rv__btn--write) as soon as it exists: one path for the login and // purchase checks, whichever button the user pressed. The form itself is // lifted to <body> when it opens (see openW), so a hidden tab panel cannot // keep it from showing. var writeRequested = false; var writeRequestedAt = 0; // A request the reviews never fulfil (the load failed) is dropped rather // than popping the form open whenever the reviews finally render. var WRITE_REQUEST_TTL_MS = 10000; function flushWriteRequest() { if (!writeRequested) { return; } if (Date.now() - writeRequestedAt > WRITE_REQUEST_TTL_MS) { writeRequested = false; return; } var btn = app.querySelector('.pdt-rv__btn--write'); if (!btn) { return; } // not rendered yet: render() calls this again writeRequested = false; btn.click(); } function requestWrite() { writeRequested = true; writeRequestedAt = Date.now(); if (!loaded) { load(); } flushWriteRequest(); } function closeOverlay() { if (!overlayActive) { return; } overlayActive = false; var rvRoot = app.closest('.pdt-rv'); if (rvRoot) { rvRoot.classList.remove('is-overlay'); } if (overlayHost) { overlayHost.setAttribute('hidden', ''); } unlockPageScroll(); if (rvRoot && rvHome && rvHome.parent) { rvHome.parent.insertBefore(rvRoot, rvHome.next || null); rvHome = null; } setHeadAllLabel(); } // ----- GA4: comment_impression ----- // Yorum alani goruntulendiginde gider: "Yorumlar (adet)" linki, "Tum // yorumlari gor" ve yorumlar sekmesi (sekme tarafi product-detail-tabs // section'indan window.tbPdpReviewImpression ile cagirir). // Sayilar once sunucunun bastigi data-* degerlerinden, yorum listesi // yuklendikten sonra yanitin toplam/ortalama alanlarindan okunur. var rvStats = { count: app.getAttribute('data-review-count') || '0', average: app.getAttribute('data-review-average') || '0' }; function pushCommentImpression() { window.dataLayer = window.dataLayer || []; window.dataLayer.push({ event: 'comment_impression', product_name: app.getAttribute('data-product-title') || '', page_url: window.location.href, comment_count: rvStats.count, avg_point: rvStats.average }); } window.tbPdpReviewImpression = pushCommentImpression; // Triggers are bound once at window level; the hooks are reassigned every // (re)init so preview re-renders always drive the current instance. window.__pdtRvOverlay = { open: openOverlay, toggle: function () { if (overlayActive) { closeOverlay(); } else { openOverlay(); } }, write: requestWrite, impression: pushCommentImpression, isOpen: function () { return overlayActive; } }; if (!window.__pdtRvOverlayBound) { window.__pdtRvOverlayBound = true; document.addEventListener('click', function (e) { if (!e.target || !e.target.closest) { return; } if (e.target.closest('.product-rating__write')) { e.preventDefault(); if (window.__pdtRvOverlay && window.__pdtRvOverlay.write) { window.__pdtRvOverlay.write(); } return; } if (e.target.closest('.product-rating__meta')) { e.preventDefault(); if (window.__pdtRvOverlay) { window.__pdtRvOverlay.open(); window.__pdtRvOverlay.impression(); } return; } if (e.target.closest('.pdt-rv__head-all')) { e.preventDefault(); if (window.__pdtRvOverlay) { // Link ayni zamanda kapatma tetikleyicisi: yalnizca acilista say. var willOpen = !window.__pdtRvOverlay.isOpen(); window.__pdtRvOverlay.toggle(); if (willOpen) { window.__pdtRvOverlay.impression(); } } } }); } function bindGlobalListeners() { if (globalBound) { return; } globalBound = true; window.addEventListener('pointermove', function (e) { if (!drag.active || !drag.strip) { return; } e.preventDefault(); if (Math.abs(e.clientX - drag.startX) > 5) { drag.moved = true; } drag.strip.scrollLeft = drag.startScroll - (e.clientX - drag.startX); }); window.addEventListener('pointerup', function () { if (!drag.active) { return; } drag.active = false; if (drag.strip) { drag.strip.classList.remove('is-dragging'); } }); document.addEventListener('click', function (e) { var sel = app.querySelector('.pdt-rv__select'); if (sel && !sel.contains(e.target)) { sel.classList.remove('is-open'); } }); // Delegated: "Çeviriyi Gör" / "Aslını Gör" toggle (bound once). document.addEventListener('click', function (e) { var link = e.target && e.target.closest ? e.target.closest('.pdt-rv__translate') : null; if (!link || !app.contains(link)) { return; } e.preventDefault(); onTranslateClick(link); }); // Delegated: like / unlike toggle (bound once). document.addEventListener('click', function (e) { var btn = e.target && e.target.closest ? e.target.closest('.pdt-rv__like') : null; if (!btn || !app.contains(btn)) { return; } e.preventDefault(); onLikeClick(btn); }); document.addEventListener('keydown', function (e) { if (wmodalCtl && !wmodalCtl.el.hasAttribute('hidden')) { if (e.key === 'Escape') { wmodalCtl.close(); } return; } if (!modalCtl || modalCtl.el.hasAttribute('hidden')) { if (overlayActive && e.key === 'Escape') { closeOverlay(); } return; } if (e.key === 'Escape') { modalCtl.close(); } if (e.key === 'ArrowLeft') { modalCtl.prev(); } if (e.key === 'ArrowRight') { modalCtl.next(); } }); } function load() { if (loaded) { return; } loaded = true; state.firstLoad = true; bindGlobalListeners(); requestReviews(); } // Fresh request (initial load, filter or sort change): resets pagination and // replaces the accumulated list. Preview filters the injected mock // client-side (no server); store hits getcommentlistjson with Type=partial. function requestReviews() { state.page = 0; if (window.__TB_REVIEWS_MOCK) { applyFresh(applyMockFilter(window.__TB_REVIEWS_MOCK)); return; } fetchReviews({ page: '', pageSize: '', type: 'partial', firstLoad: state.firstLoad }, false); } // "Load more": fetch the next page (Type=all) and append. Guarded so rapid // clicks don't fire overlapping requests. function loadMore() { if (loadingMore || !acc.hasMore) { return; } loadingMore = true; state.page = (state.page || 0) + 1; state.firstLoad = false; if (window.__TB_REVIEWS_MOCK) { var more = window.__TB_REVIEWS_MORE ? applyMockFilter(window.__TB_REVIEWS_MORE) : { success: true, comments: [], has_more: false }; loadingMore = false; applyAppend(more); return; } fetchReviews({ page: state.page, pageSize: 10, type: 'all', firstLoad: false }, true); } // Preview-only: mimic the server by filtering (IsShowCommentsOnlyWithPhotos) // and sorting (OrderOption) the injected mock. Summary/distribution stay // global. On the store this work happens server-side. function applyMockFilter(base) { if (!base) { return base; } var out = {}; for (var k in base) { if (Object.prototype.hasOwnProperty.call(base, k)) { out[k] = base[k]; } } var list = (base.comments || []).slice(); if (state.onlyPhotos) { list = list.filter(function (c) { return c.photos && c.photos.length; }); } out.comments = sortComments(list); return out; } // Preview-only sort matching the OrderOption values. Dates are DD.MM.YYYY. function sortComments(list) { var arr = list.slice(); function ts(c) { var p = String(c.create_time_text || '').split('.'); return p.length === 3 ? (new Date(+p[2], +p[1] - 1, +p[0]).getTime() || 0) : 0; } if (state.orderOption === 'CreateTimeIncreasing') { arr.sort(function (a, b) { return ts(a) - ts(b); }); } else if (state.orderOption === 'RateDecreasing') { arr.sort(function (a, b) { return (b.rate || 0) - (a.rate || 0); }); } else if (state.orderOption === 'RateIncreasing') { arr.sort(function (a, b) { return (a.rate || 0) - (b.rate || 0); }); } else { arr.sort(function (a, b) { return ts(b) - ts(a); }); } return arr; } // Replace the accumulator with a fresh response and render. function applyFresh(data) { if (!data || !data.success) { app.innerHTML = ''; return; } // comment_impression'in okudugu toplamlari canli yanittan tazele. if (data.total_count != null) { rvStats.count = data.total_count; } if (data.average_rating_text) { rvStats.average = data.average_rating_text; } acc.base = data; acc.comments = (data.comments || []).slice(); acc.ids = {}; acc.comments.forEach(function (c) { if (c && c.id != null) { acc.ids[c.id] = true; } }); acc.hasMore = !!data.has_more; renderAcc(); } // Append a page's comments (deduped by id) and render. function applyAppend(data) { loadingMore = false; if (!data || !data.success) { renderAcc(); return; } (data.comments || []).forEach(function (c) { if (!c) { return; } if (c.id != null && acc.ids[c.id]) { return; } if (c.id != null) { acc.ids[c.id] = true; } acc.comments.push(c); }); acc.hasMore = !!data.has_more; renderAcc(); } // Render from the base response merged with the accumulated comment list. function renderAcc() { var b = acc.base || {}; var merged = {}; for (var k in b) { if (Object.prototype.hasOwnProperty.call(b, k)) { merged[k] = b[k]; } } merged.comments = acc.comments; merged.has_more = acc.hasMore; render(merged); } // Lazy-load: fetch when the reviews tab becomes active. Load immediately if // it's already the active panel on first paint. if (panel && panel.classList.contains('is-active')) { load(); } if (panel) { var obs = new MutationObserver(function () { if (panel.classList.contains('is-active')) { load(); } }); obs.observe(panel, { attributes: true, attributeFilter: ['class'] }); } else { load(); } function esc(s) { return String(s == null ? '' : s) .replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"'); } function stars(rate) { var r = parseInt(rate, 10) || 0; var out = ''; for (var i = 1; i <= 5; i++) { out += '<span class="pdt-rv__star' + (i <= r ? ' is-on' : '') + '">★</span>'; } return '<span class="pdt-rv__stars">' + out + '</span>'; } // ----- Comment translation (Google Translate v2) ----- var TR_LBL = 'Çeviriyi Gör', TR_LBL_BACK = 'Aslını Gör', TR_LBL_LOADING = 'Çevriliyor…'; var translateKey = app.getAttribute('data-translate-key') || ''; var translateLang = app.getAttribute('data-translate-lang') || 'tr'; // Decode HTML entities the API may return (e.g. ' ") safely. function decodeEntities(s) { var ta = document.createElement('textarea'); ta.innerHTML = String(s == null ? '' : s); return ta.value; } // POST (not URL query) so long comments aren't truncated by URL limits. function translateText(text) { return fetch('https://translation.googleapis.com/language/translate/v2?key=' + encodeURIComponent(translateKey), { method: 'POST', headers: { 'Content-Type': 'application/json; charset=utf-8' }, body: JSON.stringify({ q: text, target: translateLang, format: 'text' }) }) .then(function (r) { return r.json(); }) .then(function (d) { var t = d && d.data && d.data.translations && d.data.translations[0] && d.data.translations[0].translatedText; if (t == null) { throw new Error('no translation'); } return decodeEntities(t); }); } // Toggle a comment between original and translated text. State lives on the // DOM (class + cached translation), not on the button label. function onTranslateClick(link) { if (!translateKey || link.getAttribute('data-loading') === '1') { return; } var item = link.closest('.pdt-rv__item'); var box = item && item.querySelector('.pdt-rv__item-box'); if (!box) { return; } if (item.classList.contains('is-translated')) { box.textContent = box.getAttribute('data-orig') != null ? box.getAttribute('data-orig') : box.textContent; item.classList.remove('is-translated'); link.textContent = TR_LBL; return; } if (box.getAttribute('data-orig') == null) { box.setAttribute('data-orig', box.textContent); } var cached = box.getAttribute('data-translated'); if (cached != null) { box.textContent = cached; item.classList.add('is-translated'); link.textContent = TR_LBL_BACK; return; } link.setAttribute('data-loading', '1'); link.textContent = TR_LBL_LOADING; translateText(box.getAttribute('data-orig')) .then(function (translated) { box.setAttribute('data-translated', translated); box.textContent = translated; item.classList.add('is-translated'); link.textContent = TR_LBL_BACK; }) .catch(function () { link.textContent = TR_LBL; }) .then(function () { link.removeAttribute('data-loading'); }); } // ----- Comment likes ----- var LIKE_LBL = 'Beğen', UNLIKE_LBL = 'Beğenmekten Vazgeç'; var likingBusy = false; function applyLikeToggle(btn, nowLiked) { var count = parseInt(btn.getAttribute('data-count'), 10) || 0; count = nowLiked ? count + 1 : Math.max(0, count - 1); btn.setAttribute('data-liked', nowLiked ? '1' : '0'); btn.setAttribute('data-count', String(count)); btn.classList.toggle('is-liked', nowLiked); var icon = btn.querySelector('.pdt-rv__like-icon'); var text = btn.querySelector('.pdt-rv__like-text'); var cnt = btn.querySelector('.pdt-rv__like-count'); if (icon) { icon.textContent = nowLiked ? '♥' : '♡'; } if (text) { text.textContent = nowLiked ? UNLIKE_LBL : LIKE_LBL; } if (cnt) { cnt.textContent = '(' + count + ')'; } } function onLikeClick(btn) { var liked = btn.getAttribute('data-liked') === '1'; // Preview: no store session; just simulate the toggle (before any login/ // network logic, so it works without a signed-in user). if (window.__TB_REVIEWS_MOCK) { applyLikeToggle(btn, !liked); return; } // Both endpoints require login; send the user to login if not signed in. if (app.getAttribute('data-logged-in') !== 'true') { var loginUrl = app.getAttribute('data-login-url'); if (loginUrl) { window.location.href = loginUrl; } return; } if (likingBusy || btn.getAttribute('data-loading') === '1') { return; } var id = btn.getAttribute('data-comment-id'); if (!id) { return; } var endpoint = (liked ? app.getAttribute('data-unlike-endpoint') : app.getAttribute('data-like-endpoint')) || ''; if (!endpoint) { return; } btn.setAttribute('data-loading', '1'); likingBusy = true; fetch(endpoint + '?commentId=' + encodeURIComponent(id), { method: 'POST', credentials: 'include', headers: { 'X-Requested-With': 'XMLHttpRequest' } }) .then(function (r) { return r.json(); }) .then(function (ok) { if (ok === true || (ok && ok.IsSuccess)) { applyLikeToggle(btn, !liked); } }) .catch(function () {}) .then(function () { btn.removeAttribute('data-loading'); likingBusy = false; }); } // hascustomercommentforproduct: user says false ⇒ not purchased. The exact // shape is unknown, so read a bare boolean or common wrapper keys; anything // falsy / unreadable means not eligible. function isPurchased(res) { if (res === true) { return true; } if (res === false || res == null) { return false; } if (typeof res === 'object') { if (res.result != null) { return !!res.result; } if (res.Result != null) { return !!res.Result; } if (res.data != null) { return !!res.data; } if (res.Data != null) { return !!res.Data; } if (res.hasComment != null) { return !!res.hasComment; } if (res.success != null) { return !!res.success; } if (res.Success != null) { return !!res.Success; } } return false; } function fetchReviews(opts, append) { var pid = app.getAttribute('data-product-id'); var endpoint = app.getAttribute('data-endpoint'); var url = endpoint + '?ProductID=' + encodeURIComponent(pid) + '&Page=' + (opts.page === '' || opts.page == null ? '' : encodeURIComponent(opts.page)) + '&PageSize=' + (opts.pageSize === '' || opts.pageSize == null ? '' : encodeURIComponent(opts.pageSize)) + '&OrderOption=' + encodeURIComponent(state.orderOption) + '&IsShowCommentsOnlyWithPhotos=' + (state.onlyPhotos ? 'true' : 'false') + '&Rate=&RatingItemID=&CommentFilter=' + '&FirstLoad=' + (opts.firstLoad ? 'true' : 'false') + '&Type=' + encodeURIComponent(opts.type); fetch(url, { method: 'GET', credentials: 'include' }) .then(function (r) { return r.json(); }) .then(function (data) { if (append) { applyAppend(data); } else { applyFresh(data); } }) .catch(function (err) { loadingMore = false; if (!append) { app.innerHTML = '<div class="pdt-rv__error">' + esc(app.getAttribute('data-msg-screen-error') || 'Yorumlar yüklenemedi.') + '</div>'; } console.error('Reviews fetch failed:', err); }); } function render(data) { if (!data || !data.success) { app.innerHTML = ''; return; } var lc = data.localized_content || {}; var title = app.getAttribute('data-product-title') || ''; var img = app.getAttribute('data-product-image') || ''; var tabLabel = app.getAttribute('data-tab-label') || 'Yorumlar'; var allLabel = app.getAttribute('data-all-label') || 'Tüm yorumları gör'; var moreLabel = app.getAttribute('data-more-label') || 'Tüm yorumları gör'; var writeLabel = app.getAttribute('data-write-label') || 'Yorum yap'; var writeUrl = app.getAttribute('data-write-url') || '#'; var cartLabel = app.getAttribute('data-cart-label') || 'SEPETE EKLE'; // CTA (same rules/behavior as the main product page add-to-cart button): // can_add_to_cart → js-add-to-cart; else → js-stock-reminder; no cta → nothing. // The click is handled by the product-information section's delegated // handlers (bound on document), so no extra JS is needed here. var ctaExists = app.getAttribute('data-cta-exists') === 'true'; var ctaCanAdd = app.getAttribute('data-cta-can-add') === 'true'; var ctaPid = app.getAttribute('data-cta-pid') || ''; var ctaPcode = app.getAttribute('data-cta-pcode') || ''; var ctaVid = app.getAttribute('data-cta-vid') || ''; var ctaVcode = app.getAttribute('data-cta-vcode') || ''; var ctaQty = app.getAttribute('data-cta-qty') || '1'; var ctaStockUrl = app.getAttribute('data-cta-stock-url') || ''; var ctaLabel = app.getAttribute('data-cta-label') || ''; var html = ''; // Head. The all-link doubles as the overlay open/close toggle; in overlay // mode it reads the product-detail label and a check appears by the title. var headAllLabel = overlayActive ? detailLabel : allLabel; html += '<div class="pdt-rv__head">' + '<h3 class="pdt-rv__head-title">' + esc(title) + ' ' + esc(tabLabel) + '<span class="pdt-rv__head-check" aria-hidden="true"></span></h3>' + '<a class="pdt-rv__head-all" href="#">' + esc(headAllLabel) + '</a>' + '</div>'; // Summary: product image | distribution | average card html += '<div class="pdt-rv__summary">'; if (img) { html += '<div class="pdt-rv__product"><img src="' + esc(img) + '" alt="' + esc(title) + '"></div>'; } html += '<div class="pdt-rv__dist">'; (data.rate_distribution || []).forEach(function (d) { html += '<div class="pdt-rv__dist-row">' + stars(d.rate) + '<span class="pdt-rv__dist-track"><span class="pdt-rv__dist-fill" style="width:' + (d.percentage || 0) + '%"></span></span>' + '<span class="pdt-rv__dist-count">' + (d.count || 0) + '</span>' + '</div>'; }); html += '</div>'; html += '<div class="pdt-rv__avg">' + '<div class="pdt-rv__avg-label">Ortalama Puan</div>' + '<div class="pdt-rv__avg-stars">' + stars(Math.round(data.average_rating || 0)) + '</div>' + '<div class="pdt-rv__avg-num">' + esc(data.average_rating_text || '0.0') + '</div>' + '</div>'; html += '</div>'; // Actions: write review + add to cart + sort filter (no actions yet) html += '<div class="pdt-rv__actions">'; html += '<div class="pdt-rv__actions-left">' + '<a class="pdt-rv__btn pdt-rv__btn--write" href="' + esc(writeUrl) + '">' + '<span class="pdt-rv__btn-icon"><svg width="20" height="20" viewBox="0 0 28 28" fill="currentColor" aria-hidden="true"><g fill-rule="evenodd"><path d="M19.976 8.716a.625.625 0 01-1.247.087C18.418 4.33 14.537.958 10.06 1.269a8.116 8.116 0 00-6.335 12.385c.096.154.12.342.066.514l-.033.084-1.812 3.8 3.805-1.81a.626.626 0 01.518-.009l.08.042c.436.27.897.5 1.376.685a.624.624 0 11-.45 1.164 9.552 9.552 0 01-.969-.437l-.319-.174-5.094 2.424a.625.625 0 01-.864-.756l.03-.076 2.427-5.09-.148-.269A9.365 9.365 0 011.3 10.341l-.028-.326C.912 4.855 4.808.381 9.973.023c5.166-.359 9.644 3.534 10.003 8.693zm-5.601.043A5.622 5.622 0 0120 14.378a5.622 5.622 0 01-5.625 5.619 5.622 5.622 0 01-5.625-5.62 5.622 5.622 0 015.625-5.618zm0 1.248A4.372 4.372 0 0010 14.377a4.372 4.372 0 004.375 4.371 4.372 4.372 0 004.375-4.37 4.372 4.372 0 00-4.375-4.37zm0 1.25c.316 0 .578.234.62.539l.005.084v1.873h1.875a.625.625 0 01.085 1.243l-.085.006H15v1.873a.625.625 0 01-1.244.085l-.006-.085v-1.873h-1.875a.625.625 0 01-.085-1.243l.085-.006h1.875V11.88c0-.344.28-.624.625-.624z" transform="translate(.429)"></path></g></svg></span>' + esc(writeLabel) + '</a>'; if (ctaExists && ctaCanAdd) { html += '<button type="button" class="pdt-rv__btn pdt-rv__btn--cart js-add-to-cart"' + ' data-pid="' + esc(ctaPid) + '" data-pcode="' + esc(ctaPcode) + '"' + ' data-vid="' + esc(ctaVid) + '" data-vcode="' + esc(ctaVcode) + '"' + ' data-quantity="' + esc(ctaQty) + '">' + esc(cartLabel) + '</button>'; } else if (ctaExists) { html += '<a class="pdt-rv__btn pdt-rv__btn--cart pdt-rv__btn--stock js-stock-reminder"' + ' href="' + esc(ctaStockUrl) + '" data-pid="' + esc(ctaPid) + '" data-vid="' + esc(ctaVid) + '">' + esc(ctaLabel || 'Stok Gelince Haber Ver') + '</a>'; } html += '</div>'; var opts = data.order_options || []; // Reflect the active sort (state.orderOption) as the selected option, so a // re-render after sorting keeps the chosen label instead of snapping back // to the first option. var selOpt = null; opts.forEach(function (o) { if (o.value === state.orderOption) { selOpt = o; } }); if (!selOpt) { selOpt = opts[0] || { value: '', label: '' }; } html += '<div class="pdt-rv__filter">' + '<div class="pdt-rv__select" data-value="' + esc(selOpt.value) + '">' + '<button type="button" class="pdt-rv__select-trigger">' + '<span class="pdt-rv__select-label">' + esc(selOpt.label) + '</span>' + '<span class="pdt-rv__select-caret"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg></span>' + '</button>' + '<ul class="pdt-rv__select-list">'; opts.forEach(function (o) { html += '<li class="pdt-rv__select-option' + (o.value === selOpt.value ? ' is-selected' : '') + '" data-value="' + esc(o.value) + '">' + esc(o.label) + '</li>'; }); html += '</ul></div></div>'; html += '</div>'; // AI review summary: comes from the reviews response's comment_summary // object ({ has_summary, id, summary }). Nothing renders when the server // has no summary for the product — has_summary:false or empty text. var csum = data.comment_summary || {}; var csumText = csum.summary || ''; if (csum.has_summary !== false && csumText) { var csumTitle = app.getAttribute('data-ai-summary-title') || ''; var csumNote = app.getAttribute('data-ai-summary-note') || ''; html += '<div class="pdt-rv__aisum">'; if (csumTitle) { html += '<div class="pdt-rv__aisum-title">' + esc(csumTitle) + '</div>'; } html += '<div class="pdt-rv__aisum-text">' + esc(csumText) + '</div>'; if (csumNote) { html += '<div class="pdt-rv__aisum-note">' + '<span class="pdt-rv__aisum-note-icon" aria-hidden="true">' + '<svg width="25" height="25" viewBox="0 0 24 24" aria-hidden="true">' + '<circle cx="12" cy="12" r="10.9" fill="none" stroke="currentColor" stroke-width="1.05"></circle>' + '<circle cx="12" cy="6.4" r="1.55" fill="currentColor"></circle>' + '<path fill="currentColor" d="M9.98 9.85h2.77v7.25h1.08v.95H9.98v-.95h1.32V11h-1.32z"></path>' + '</svg></span>' + '<span class="pdt-rv__aisum-note-text">' + esc(csumNote) + '</span>' + '</div>'; } html += '</div>'; } // Photo reviews: checkbox + horizontal strip. Fed from the dedicated // photo_comments field so the strip stays constant regardless of the // paginated/filtered comment list (falls back to comments for old server). var photoSource = data.photo_comments != null ? data.photo_comments : (data.comments || []); var photoItems = []; photoSource.forEach(function (c) { (c.photos || []).forEach(function (p) { if (p && p.url) { photoItems.push({ id: p.id, url: p.url, rate: c.rate, date: c.create_time_text || '', title: c.title || '', body: c.body || '', user: c.customer_name || '', source: (c.statement && c.statement.source) || '' }); } }); }); // Map photo id → modal index so a photo shown inside a comment opens the // modal at that exact photo. var photoIndexById = {}; photoItems.forEach(function (it, i) { if (it.id != null && photoIndexById[it.id] == null) { photoIndexById[it.id] = i; } }); var photoCount = data.photo_comment_count != null ? data.photo_comment_count : (data.approved_photo_count || 0); html += '<div class="pdt-rv__photos">'; html += '<label class="pdt-rv__photos-check"><input type="checkbox" class="pdt-rv__photos-toggle"> ' + 'Fotoğraflı Yorumlar ( ' + photoCount + ' )</label>'; if (photoItems.length) { html += '<div class="pdt-rv__photos-scroller">' + '<button type="button" class="pdt-rv__photos-nav pdt-rv__photos-prev" aria-label="Önceki">‹</button>' + '<div class="pdt-rv__photos-strip">'; photoItems.forEach(function (item, i) { html += '<div class="pdt-rv__photo" data-pi="' + i + '"><img src="' + esc(item.url) + '" alt=""></div>'; }); html += '</div>' + '<button type="button" class="pdt-rv__photos-nav pdt-rv__photos-next" aria-label="Sonraki">›</button>' + '</div>'; } html += '</div>'; // Comment list html += '<div class="pdt-rv__list">'; (data.comments || []).forEach(function (c) { var st = c.statement || {}; var text = c.body || c.title || ''; html += '<div class="pdt-rv__item">'; html += '<div class="pdt-rv__item-head">' + stars(c.rate) + '<span class="pdt-rv__item-date">' + esc(c.create_time_text || '') + '</span></div>'; html += '<div class="pdt-rv__item-box">' + esc(text) + '</div>'; html += '<a class="pdt-rv__translate" href="#">Çeviriyi Gör</a>'; if (c.photos && c.photos.length) { html += '<div class="pdt-rv__item-photos">'; c.photos.forEach(function (p) { if (p && p.url) { var pi = photoIndexById[p.id]; html += '<div class="pdt-rv__item-photo"' + (pi != null ? ' data-pi="' + pi + '"' : '') + '><img src="' + esc(p.url) + '" alt=""></div>'; } }); html += '</div>'; } var liked = !!(c.likes && c.likes.is_customer_like_comment); var likeCount = (c.likes && c.likes.count) || 0; html += '<div class="pdt-rv__item-foot">' + '<button type="button" class="pdt-rv__like' + (liked ? ' is-liked' : '') + '"' + ' data-comment-id="' + esc(c.id) + '" data-liked="' + (liked ? '1' : '0') + '" data-count="' + likeCount + '">' + '<span class="pdt-rv__like-icon">' + (liked ? '♥' : '♡') + '</span> ' + '<span class="pdt-rv__like-text">' + (liked ? UNLIKE_LBL : LIKE_LBL) + '</span> ' + '<span class="pdt-rv__like-count">(' + likeCount + ')</span>' + '</button></div>'; html += '<div class="pdt-rv__item-user">' + esc(c.customer_name || '') + '</div>'; if (st.source) { html += '<div class="pdt-rv__item-note">' + (lc.comment_this_product_html || '') + ' ' + esc(st.source) + ' ' + (lc.comment_from_purchased_by_user_html || '') + '</div>'; } html += '</div>'; }); html += '</div>'; // Load-more button at the bottom, shown only while more pages remain. if (data.has_more) { html += '<div class="pdt-rv__more">' + '<button type="button" class="pdt-rv__more-btn">' + esc(moreLabel) + '</button>' + '</div>'; } // Photo review modal (opens on strip photo click; navigates photo-by-photo). if (photoItems.length) { html += '<div class="pdt-rv__modal" hidden>' + '<div class="pdt-rv__modal-overlay"></div>' + '<div class="pdt-rv__modal-panel">' + '<button type="button" class="pdt-rv__modal-close" aria-label="Kapat"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg></button>' + '<div class="pdt-rv__modal-body">' + '<div class="pdt-rv__modal-media">' + '<button type="button" class="pdt-rv__modal-arrow pdt-rv__modal-prev" aria-label="Önceki"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="15 18 9 12 15 6"></polyline></svg></button>' + '<div class="pdt-rv__modal-img-wrap"><img class="pdt-rv__modal-img" src="" alt=""></div>' + '<button type="button" class="pdt-rv__modal-arrow pdt-rv__modal-next" aria-label="Sonraki"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"></polyline></svg></button>' + '<div class="pdt-rv__modal-counter"><span class="pdt-rv__modal-cur">1</span> / <span class="pdt-rv__modal-total">' + photoItems.length + '</span></div>' + '</div>' + '<div class="pdt-rv__modal-review">' + '<div class="pdt-rv__modal-head"><span class="pdt-rv__modal-stars"></span><span class="pdt-rv__modal-date"></span></div>' + '<div class="pdt-rv__modal-box"><div class="pdt-rv__modal-title"></div><div class="pdt-rv__modal-text"></div></div>' + '<div class="pdt-rv__modal-user"></div>' + '<div class="pdt-rv__modal-note"></div>' + '</div>' + '</div>' + '</div>' + '</div>'; } // Write-review modal shell (content filled on demand: login/purchase // warning or the review form). Same modal structure as the photo modal. html += '<div class="pdt-rv__wmodal" hidden>' + '<div class="pdt-rv__wmodal-overlay"></div>' + '<div class="pdt-rv__wmodal-panel">' + '<button type="button" class="pdt-rv__wmodal-close" aria-label="Kapat"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg></button>' + '<div class="pdt-rv__wmodal-content"></div>' + '</div>' + '</div>'; app.innerHTML = html; // "Fotoğraflı Yorumlar" filter: toggling re-requests with // IsShowCommentsOnlyWithPhotos and re-renders. Reflect current state so // the checkbox stays checked across re-renders. var photoToggle = app.querySelector('.pdt-rv__photos-toggle'); if (photoToggle) { photoToggle.checked = state.onlyPhotos; photoToggle.addEventListener('change', function () { var s = app.querySelector('.pdt-rv__select'); if (s && s.getAttribute('data-value')) { state.orderOption = s.getAttribute('data-value'); } state.onlyPhotos = photoToggle.checked; state.firstLoad = false; requestReviews(); }); } // Load-more: fetch and append the next page. The button is recreated on // each render (and removed once has_more is false), so bind per render. var moreBtn = app.querySelector('.pdt-rv__more-btn'); if (moreBtn) { moreBtn.addEventListener('click', function () { moreBtn.disabled = true; moreBtn.classList.add('is-loading'); loadMore(); }); } // Photo strip arrows (only interactive behavior wired for now). var strip = app.querySelector('.pdt-rv__photos-strip'); var prev = app.querySelector('.pdt-rv__photos-prev'); var next = app.querySelector('.pdt-rv__photos-next'); if (strip && prev && next) { prev.addEventListener('click', function () { strip.scrollBy({ left: -240, behavior: 'smooth' }); }); next.addEventListener('click', function () { strip.scrollBy({ left: 240, behavior: 'smooth' }); }); } // Drag-to-scroll (swipe) with the mouse; touch uses native pan-x scroll. // pointerdown binds to the (freshly rendered) strip; the window-level // move/up listeners live in bindGlobalListeners and read `drag`. if (strip) { drag.strip = strip; strip.addEventListener('pointerdown', function (e) { if (e.pointerType === 'touch') { return; } drag.active = true; drag.moved = false; drag.startX = e.clientX; drag.startScroll = strip.scrollLeft; drag.strip = strip; strip.classList.add('is-dragging'); }); } // Sort dropdown (custom): open/close, visual selection, and re-request // with the chosen OrderOption. var sel = app.querySelector('.pdt-rv__select'); if (sel) { var trigger = sel.querySelector('.pdt-rv__select-trigger'); var selLabel = sel.querySelector('.pdt-rv__select-label'); var options = sel.querySelectorAll('.pdt-rv__select-option'); trigger.addEventListener('click', function (e) { e.stopPropagation(); sel.classList.toggle('is-open'); }); options.forEach(function (opt) { opt.addEventListener('click', function () { options.forEach(function (o) { o.classList.remove('is-selected'); }); opt.classList.add('is-selected'); selLabel.textContent = opt.textContent; var newVal = opt.getAttribute('data-value'); sel.setAttribute('data-value', newVal); sel.classList.remove('is-open'); // Re-request (fresh, resets pagination) with the chosen OrderOption. if (newVal !== state.orderOption) { state.orderOption = newVal; state.firstLoad = false; requestReviews(); } }); }); } // Photo review modal: click a strip photo → open at its index; arrows // navigate photo-by-photo, and the right side shows that photo's comment. var modal = app.querySelector('.pdt-rv__modal'); if (modal && photoItems.length) { var mOverlay = modal.querySelector('.pdt-rv__modal-overlay'); var mClose = modal.querySelector('.pdt-rv__modal-close'); var mPrev = modal.querySelector('.pdt-rv__modal-prev'); var mNext = modal.querySelector('.pdt-rv__modal-next'); var mImg = modal.querySelector('.pdt-rv__modal-img'); var mCur = modal.querySelector('.pdt-rv__modal-cur'); var mStars = modal.querySelector('.pdt-rv__modal-stars'); var mDate = modal.querySelector('.pdt-rv__modal-date'); var mTitle = modal.querySelector('.pdt-rv__modal-title'); var mText = modal.querySelector('.pdt-rv__modal-text'); var mUser = modal.querySelector('.pdt-rv__modal-user'); var mNote = modal.querySelector('.pdt-rv__modal-note'); var mIdx = 0; function syncModal() { var it = photoItems[mIdx]; if (!it) { return; } mImg.src = it.url; mCur.textContent = String(mIdx + 1); mStars.innerHTML = stars(it.rate); mDate.textContent = it.date; mTitle.textContent = it.title; mTitle.style.display = it.title ? '' : 'none'; mText.textContent = it.body; mUser.textContent = it.user; mUser.style.display = it.user ? '' : 'none'; if (it.source) { mNote.innerHTML = (lc.comment_this_product_html || '') + ' ' + esc(it.source) + ' ' + (lc.comment_from_purchased_by_user_html || ''); mNote.style.display = ''; } else { mNote.style.display = 'none'; } } function openModal(i) { mIdx = i; syncModal(); modal.removeAttribute('hidden'); lockPageScroll(); } function closeModal() { modal.setAttribute('hidden', ''); // Keep the scroll lock if the full-page overlay is still open. if (!overlayActive) { unlockPageScroll(); } } function nextPhoto() { mIdx = (mIdx + 1) % photoItems.length; syncModal(); } function prevPhoto() { mIdx = (mIdx - 1 + photoItems.length) % photoItems.length; syncModal(); } app.querySelectorAll('.pdt-rv__photo').forEach(function (ph) { ph.addEventListener('click', function () { if (drag.moved) { drag.moved = false; return; } var i = parseInt(ph.getAttribute('data-pi'), 10); if (!isNaN(i)) { openModal(i); } }); }); // Photos shown inside a comment open the modal at that photo too. app.querySelectorAll('.pdt-rv__item-photo[data-pi]').forEach(function (ph) { ph.addEventListener('click', function () { var i = parseInt(ph.getAttribute('data-pi'), 10); if (!isNaN(i)) { openModal(i); } }); }); if (mOverlay) { mOverlay.addEventListener('click', closeModal); } if (mClose) { mClose.addEventListener('click', closeModal); } if (mPrev) { mPrev.addEventListener('click', prevPhoto); } if (mNext) { mNext.addEventListener('click', nextPhoto); } // Expose current modal controls for the once-bound keydown listener. modalCtl = { el: modal, close: closeModal, next: nextPhoto, prev: prevPhoto }; } else { modalCtl = null; } // ----- Write-review modal ----- // Click "Yorum yap" → open the shared modal. Preview behaves as purchased. // Store: not logged in → warning; logged in → check eligibility endpoint // (false = not purchased → warning), otherwise show the review form. var wmodal = app.querySelector('.pdt-rv__wmodal'); if (wmodal) { var wOverlay = wmodal.querySelector('.pdt-rv__wmodal-overlay'); var wClose = wmodal.querySelector('.pdt-rv__wmodal-close'); var wContent = wmodal.querySelector('.pdt-rv__wmodal-content'); var criteriaUrl = app.getAttribute('data-criteria-url') || '#'; var saveEndpoint = app.getAttribute('data-save-endpoint') || ''; var recaptchaKey = app.getAttribute('data-recaptcha-key') || ''; var storeId = app.getAttribute('data-store-id') || ''; var customerId = app.getAttribute('data-customer-id') || ''; var customerFirst = app.getAttribute('data-customer-first') || ''; var customerLast = app.getAttribute('data-customer-last') || ''; var wProductId = app.getAttribute('data-product-id') || ''; var isPreview = !!window.__TB_REVIEWS_MOCK; function iconHtml() { return '<div class="pdt-rv__wmodal-icon"><svg viewBox="0 0 40 52" width="40" height="52" fill="currentColor" aria-hidden="true"><rect x="16" y="0" width="8" height="34" rx="4"></rect><circle cx="20" cy="46" r="5"></circle></svg></div>'; } // reCAPTCHA: render only when a public key is configured and not in // preview. Loads api.js once, then explicitly renders (the form is // injected after load, so auto-render wouldn't pick it up). function ensureRecaptcha(box) { if (!box || !recaptchaKey || isPreview) { return; } function doRender() { if (window.grecaptcha && window.grecaptcha.render && !box.__rendered) { try { box.__widgetId = window.grecaptcha.render(box, { sitekey: recaptchaKey }); box.__rendered = true; } catch (e) {} } } if (window.grecaptcha && window.grecaptcha.render) { doRender(); return; } if (!window.__tbRecaptchaLoading) { window.__tbRecaptchaLoading = true; var sc = document.createElement('script'); sc.src = 'https://www.google.com/recaptcha/api.js?hl=tr'; sc.async = true; sc.defer = true; document.head.appendChild(sc); } var tries = 0; var iv = setInterval(function () { if (window.grecaptcha && window.grecaptcha.render) { clearInterval(iv); doRender(); } else if (++tries > 40) { clearInterval(iv); } }, 250); } function recaptchaToken(box) { try { if (box && box.__widgetId != null && window.grecaptcha) { return window.grecaptcha.getResponse(box.__widgetId) || ''; } } catch (e) {} return ''; } function recaptchaReset(box) { try { if (box && box.__widgetId != null && window.grecaptcha) { window.grecaptcha.reset(box.__widgetId); } } catch (e) {} } function warnHtml(kind) { var msg = kind === 'login' ? '<div class="pdt-rv__wmodal-msg">Yorum yapabilmeniz için üye olmanız ve ürünü satın almanız gerekmektedir</div>' : '<div class="pdt-rv__wmodal-msg"><strong>Değerlendirme yapabilmek için bu ürünü satın almış olmalısınız</strong><span>Size daha faydalı değerlendirmeler sunabilmek için sadece ilgili ürünü satın alan müşterilerimizin deneyimlerine yer veriyoruz.</span></div>'; return '<div class="pdt-rv__wmodal-warn">' + iconHtml() + '<div class="pdt-rv__wmodal-title">UYARI</div>' + msg + '</div>'; } function formHtml() { var s = '<div class="pdt-rv__wform">'; s += '<div class="pdt-rv__wform-head"><div class="pdt-rv__wform-product">'; if (img) { s += '<div class="img-holder"><img src="' + esc(img) + '" alt="' + esc(title) + '"></div>'; } s += '<div class="pdt-rv__wform-pname">' + esc(title) + '</div></div>'; s += '</div>'; s += '<div class="pdt-rv__wform-rate-label">Ürüne Puan Verin</div>'; s += '<div class="pdt-rv__wform-rate" data-rate="0">'; for (var i = 1; i <= 5; i++) { s += '<span class="pdt-rv__wform-star" data-v="' + i + '">★</span>'; } s += '<a class="pdt-rv__wform-criteria" href="' + esc(criteriaUrl) + '" target="_blank" rel="noopener">Yorum Yayınlanma Kriterleri</a></div>'; s += '<div class="pdt-rv__wform-err pdt-rv__wform-err--rate" hidden>Lütfen ürüne puan verin.</div>'; s += '<label class="pdt-rv__wform-field"><span class="pdt-rv__wform-flabel">Yorumunuz (Opsiyonel)</span><textarea class="pdt-rv__wform-textarea" rows="4" maxlength="2000"></textarea></label>'; s += '<label class="pdt-rv__wform-field"><span class="pdt-rv__wform-flabel">Yorum Başlığı (Opsiyonel)</span><input type="text" class="pdt-rv__wform-input"></label>'; s += '<div class="pdt-rv__wform-photos-label">Ürün Fotoğrafları <label>(İsteğe Bağlı)</label></div>'; s += '<div class="pdt-rv__wform-photos-row">'; s += '<div class="pdt-rv__wform-photos-preview"></div>'; s += '<label class="pdt-rv__wform-upload"><input type="file" accept=".jpg,.jpeg,.png" multiple hidden>' + '<span class="pdt-rv__wform-upload-icon"><svg width="26" height="26" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z"></path><circle cx="12" cy="13" r="4"></circle></svg></span>' + '<span class="pdt-rv__wform-upload-text">Fotoğraf Ekle</span></label>'; s += '</div>'; s += '<div class="pdt-rv__wform-err pdt-rv__wform-err--img" hidden></div>'; s += '<p class="pdt-rv__wform-note">En fazla 5 dosya ekleyebilirsiniz. Dosya Boyutu 10 MB\'ı geçmemeli ve .jpg,.png format tiplerinden biri olmalıdır.</p>'; s += '<p class="pdt-rv__wform-info">Satın almış olduğunuz ürüne ilişkin yorumunuz diğer kişilerin de faydalanması amaçlı Vestel internet sitelerinde yayımlanacaktır.</p>'; s += '<p class="pdt-rv__wform-info">Detaylı bilgi için <a href="https://www.vestel.com/kisisel-verilerin-islenmesi" target="_blank" rel="noopener">Kişisel Verilerin İşlenmesi | Vestel</a></p>'; s += '<label class="pdt-rv__wform-check pdt-rv__wform-check--kvkk"><input type="checkbox"><span>Kişisel verilerimin saklanması amaçlı yurt dışındaki sistemlere aktarılmasını kabul ediyorum.</span></label>'; s += '<div class="pdt-rv__wform-err pdt-rv__wform-err--kvkk" hidden>Bu alanın işaretlenmesi gerekmektedir.</div>'; s += '<label class="pdt-rv__wform-check pdt-rv__wform-check--name"><input type="checkbox"><span>İsim ve Soyisim bilgilerimin yapacağım yorumda yer alması kabul ediyorum.</span></label>'; if (recaptchaKey && !isPreview) { s += '<div class="pdt-rv__wform-recaptcha"></div>'; } else { s += '<div class="pdt-rv__wform-captcha"><span class="pdt-rv__wform-captcha-box"></span><span class="pdt-rv__wform-captcha-text">Ben robot değilim</span><span class="pdt-rv__wform-captcha-logo">reCAPTCHA</span></div>'; } s += '<div class="pdt-rv__wform-err pdt-rv__wform-err--submit" hidden></div>'; s += '<button type="button" class="pdt-rv__wform-submit">Gönder</button>'; s += '</div>'; return s; } function bindForm() { var images = []; // base64 data URLs sent as Comment.Base64Images[i] // Interactive rating var rateWrap = wContent.querySelector('.pdt-rv__wform-rate'); var rateErr = wContent.querySelector('.pdt-rv__wform-err--rate'); if (rateWrap) { var wstars = rateWrap.querySelectorAll('.pdt-rv__wform-star'); var paint = function (n) { wstars.forEach(function (st, idx) { if (idx < n) { st.classList.add('is-on'); } else { st.classList.remove('is-on'); } }); }; wstars.forEach(function (st) { st.addEventListener('mouseenter', function () { paint(parseInt(st.getAttribute('data-v'), 10)); }); st.addEventListener('click', function () { rateWrap.setAttribute('data-rate', st.getAttribute('data-v')); paint(parseInt(st.getAttribute('data-v'), 10)); if (rateErr) { rateErr.hidden = true; } }); }); rateWrap.addEventListener('mouseleave', function () { paint(parseInt(rateWrap.getAttribute('data-rate'), 10) || 0); }); } // Photo upload → base64 (max 5, jpg/png, total ≤ 8MB) with thumbnails. var fileInput = wContent.querySelector('.pdt-rv__wform-upload input[type=file]'); var uploadBox = wContent.querySelector('.pdt-rv__wform-upload'); var preview = wContent.querySelector('.pdt-rv__wform-photos-preview'); var imgErr = wContent.querySelector('.pdt-rv__wform-err--img'); function showImgErr(msg) { if (imgErr) { imgErr.textContent = msg; imgErr.hidden = false; } } function totalBytes() { return images.reduce(function (a, b) { var comma = b.indexOf(',') + 1; return a + Math.ceil((b.length - comma) * 0.75); }, 0); } function renderThumbs() { if (!preview) { return; } preview.innerHTML = ''; images.forEach(function (b64, idx) { var span = document.createElement('span'); span.className = 'pdt-rv__wform-thumb'; var im = document.createElement('img'); im.src = b64; span.appendChild(im); var rm = document.createElement('button'); rm.type = 'button'; rm.className = 'pdt-rv__wform-thumb-rm'; rm.setAttribute('aria-label', 'Kaldır'); rm.innerHTML = '<svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="3 6 5 6 21 6"></polyline><path d="M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"></path><path d="M10 11v6M14 11v6"></path><path d="M9 6V4a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2"></path></svg>'; rm.addEventListener('click', function () { images.splice(idx, 1); renderThumbs(); if (imgErr) { imgErr.hidden = true; } }); span.appendChild(rm); preview.appendChild(span); }); if (uploadBox) { uploadBox.style.display = images.length >= 5 ? 'none' : ''; } } if (fileInput) { fileInput.addEventListener('change', function () { if (imgErr) { imgErr.hidden = true; } Array.prototype.slice.call(fileInput.files || []).forEach(function (f) { if (images.length >= 5) { showImgErr('En fazla 5 dosya ekleyebilirsiniz.'); return; } if (!/\.(jpe?g|png)$/i.test(f.name)) { showImgErr('Yalnızca .jpg / .png dosyalar eklenebilir.'); return; } var reader = new FileReader(); reader.onload = function () { // Re-check the cap here: onload is async, so the synchronous // guard above sees a stale count for multi-file selections. if (images.length >= 5) { showImgErr('En fazla 5 dosya ekleyebilirsiniz.'); return; } images.push(String(reader.result || '')); if (totalBytes() > (1048576 * 10)) { images.pop(); showImgErr('Dosya boyutu toplam 10 MB\'ı geçmemelidir.'); return; } renderThumbs(); }; reader.readAsDataURL(f); }); fileInput.value = ''; }); } // reCAPTCHA (rendered only when a key is configured & not preview) var recaptchaBox = wContent.querySelector('.pdt-rv__wform-recaptcha'); ensureRecaptcha(recaptchaBox); // Submit var submitBtn = wContent.querySelector('.pdt-rv__wform-submit'); var submitErr = wContent.querySelector('.pdt-rv__wform-err--submit'); function showSubmitErr(msg) { if (submitErr) { submitErr.textContent = msg; submitErr.hidden = false; } } if (submitBtn) { submitBtn.addEventListener('click', function () { if (submitErr) { submitErr.hidden = true; } var rate = parseInt(rateWrap ? rateWrap.getAttribute('data-rate') : '0', 10) || 0; var checks = wContent.querySelectorAll('.pdt-rv__wform-check input'); var kvkk = !!(checks[0] && checks[0].checked); var showName = !!(checks[1] && checks[1].checked); var kvkkErr = wContent.querySelector('.pdt-rv__wform-err--kvkk'); var ok = true; if (rate < 1) { if (rateErr) { rateErr.hidden = false; } ok = false; } if (!kvkk) { if (kvkkErr) { kvkkErr.hidden = false; } ok = false; } if (!ok) { return; } var body = (wContent.querySelector('.pdt-rv__wform-textarea') || {}).value || ''; var ttl = (wContent.querySelector('.pdt-rv__wform-input') || {}).value || ''; // Preview: no store session; simulate success. if (isPreview) { showResult(true, 'Deneyimlerinizi paylaştığınız için teşekkürler. Yorumunuz, kriterlere uygunsa incelendikten sonra yayınlanacaktır. (önizleme)'); return; } var params = new URLSearchParams(); params.set('Comment.ID', '0'); params.set('Comment.Rate', String(rate)); params.set('Comment.ProductID', wProductId); params.set('Comment.CustomerID', customerId); params.set('Comment.StoreID', storeId); params.set('Comment.ChannelID', '0'); params.set('Comment.Status', '0'); params.set('Comment.IsShowCustomerName', showName ? 'true' : 'false'); params.set('Comment.CustomerName', (customerFirst + ' ' + customerLast).trim()); params.set('Comment.CustomerFirstName', customerFirst); params.set('Comment.CustomerLastName', customerLast); params.set('Comment.MessageBody', body); params.set('Comment.Title', ttl); images.slice(0, 5).forEach(function (b64, i) { params.set('Comment.Base64Images[' + i + ']', b64); }); var token = recaptchaToken(recaptchaBox); if (token) { params.set('g-recaptcha-response', token); } submitBtn.disabled = true; submitBtn.classList.add('is-loading'); fetch(saveEndpoint, { method: 'POST', credentials: 'include', headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'X-Requested-With': 'XMLHttpRequest' }, body: params.toString() }) .then(function (r) { return r.json(); }) .then(function (res) { if (res && res.IsSuccess) { showResult(true, 'Deneyimlerinizi paylaştığınız için teşekkürler. Yorumunuz, kriterlere uygunsa incelendikten sonra yayınlanacaktır.'); } else { recaptchaReset(recaptchaBox); submitBtn.disabled = false; submitBtn.classList.remove('is-loading'); showSubmitErr((res && res.Message) || (app.getAttribute('data-msg-save-error') || 'Yorum kaydedilirken bir hata oluştu.')); } }) .catch(function () { recaptchaReset(recaptchaBox); submitBtn.disabled = false; submitBtn.classList.remove('is-loading'); showSubmitErr((app.getAttribute('data-msg-save-error') || 'Yorum kaydedilirken bir hata oluştu.')); }); }); } } // The modal is fixed-position, but it sits inside .pdt-rv — and that // is in a display:none tab panel unless the reviews tab is open, where // nothing renders. So while open it is lifted to <body>, carrying the // block's colour variables it would otherwise inherit from .pdt-rv, // and put back when it closes. var wHome = null; var W_VARS = ['--pdt-rv-accent', '--pdt-rv-star', '--pdt-rv-star-empty', '--pdt-rv-score-color']; function liftW() { if (wmodal.parentNode === document.body) { return; } // A modal left behind by an earlier render (preview re-init) would // otherwise stay open on top of this one. document.querySelectorAll('body > .pdt-rv__wmodal').forEach(function (stale) { if (stale !== wmodal && stale.parentNode) { stale.parentNode.removeChild(stale); } }); var rvRoot = app.closest('.pdt-rv'); if (rvRoot) { W_VARS.forEach(function (name) { var v = rvRoot.style.getPropertyValue(name); if (v) { wmodal.style.setProperty(name, v); } }); } wHome = { parent: wmodal.parentNode, next: wmodal.nextSibling }; document.body.appendChild(wmodal); } function restoreW() { if (!wHome) { return; } var home = wHome; wHome = null; if (home.parent && home.parent.isConnected) { var next = home.next && home.next.parentNode === home.parent ? home.next : null; home.parent.insertBefore(wmodal, next); } else if (wmodal.parentNode) { // Its reviews markup was replaced meanwhile; a detached copy has // nowhere to go back to. wmodal.parentNode.removeChild(wmodal); } } function openW() { liftW(); wmodal.removeAttribute('hidden'); lockPageScroll(); } function closeWriteModal() { wmodal.setAttribute('hidden', ''); restoreW(); if (!overlayActive) { unlockPageScroll(); } } function showWarn(kind) { wmodal.classList.remove('is-form'); wmodal.classList.add('is-warn'); wContent.innerHTML = warnHtml(kind); } function showForm() { wmodal.classList.remove('is-warn'); wmodal.classList.add('is-form'); wContent.innerHTML = formHtml(); bindForm(); } function resultHtml(isSuccess, msg) { var icon = isSuccess ? '<div class="pdt-rv__wmodal-icon is-success"><svg viewBox="0 0 24 24" width="46" height="46" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6L9 17l-5-5"></path></svg></div>' : iconHtml(); return '<div class="pdt-rv__wmodal-warn">' + icon + '<div class="pdt-rv__wmodal-title">' + (isSuccess ? 'TEŞEKKÜRLER' : 'UYARI') + '</div>' + '<div class="pdt-rv__wmodal-msg">' + esc(msg) + '</div></div>'; } function showResult(isSuccess, msg) { wmodal.classList.remove('is-form'); wmodal.classList.add('is-warn'); wContent.innerHTML = resultHtml(isSuccess, msg); } function openWrite() { // Preview has no store session; behave as a purchased user. if (window.__TB_REVIEWS_MOCK) { showForm(); openW(); return; } if (app.getAttribute('data-logged-in') !== 'true') { showWarn('login'); openW(); return; } var vid = app.getAttribute('data-variant-id') || ''; var ep = app.getAttribute('data-eligible-endpoint') || ''; wmodal.classList.remove('is-warn'); wmodal.classList.add('is-form'); wContent.innerHTML = '<div class="pdt-rv__wmodal-loading">Yükleniyor…</div>'; openW(); fetch(ep + '?variantID=' + encodeURIComponent(vid), { method: 'GET', credentials: 'include' }) .then(function (r) { return r.json(); }) .then(function (res) { if (isPurchased(res)) { showForm(); } else { showWarn('purchase'); } }) .catch(function () { showWarn('purchase'); }); } var writeBtn = app.querySelector('.pdt-rv__btn--write'); if (writeBtn) { writeBtn.addEventListener('click', function (e) { e.preventDefault(); openWrite(); }); } if (wOverlay) { wOverlay.addEventListener('click', closeWriteModal); } if (wClose) { wClose.addEventListener('click', closeWriteModal); } wmodalCtl = { el: wmodal, close: closeWriteModal }; // The button now exists and is bound: carry out a "Yorum yap" request // made from the product header while the reviews were still loading. flushWriteRequest(); } } }); })(); </script> <div class="pdt-panel" > <button type="button" class="pdt-panel__header" aria-expanded="false"> <span class="pdt-panel__title">yamakiro.live Ödeme Çözümleri</span> <span class="pdt-panel__icon" aria-hidden="true"></span> </button> <div class="pdt-panel__body"> <div class="pdt-panel__content pdt-pay" style=" --pdt-pay-accent: #e30613; --pdt-pay-border: #e5e5e5; --pdt-pay-open-bg: #fafafa; --pdt-pay-body-bg: #f7f7f7; --pdt-pay-name: #1a1a1a; --pdt-pay-name-size: 16px; --pdt-pay-table-border: #dddddd; --pdt-pay-table-size: 14px; --pdt-pay-label: #555555; --pdt-pay-value: #333333; --pdt-pay-text: #1f3a5a; --pdt-pay-text-size: 14px; " > <div class="pdt-pay__target"></div> </div> </div> </div> <script> (function () { var cfg = { endpoint: "/product/getinstallmentoptionbyproductjson?productId=4524", method: "GET", product_id_param: "productId", product_id: "4524", labels: { loading: "Ödeme seçenekleri yükleniyor...", error: "Ödeme seçenekleri yüklenemedi.", empty: "Bu ürün için ödeme seçeneği bulunamadı." } }; // Lazy-load when the tab becomes active (same pattern as the specs tab). function wire(content) { if (content.__pdtPayBound) { return; } content.__pdtPayBound = true; var panel = content.closest('.pdt-panel'); var loaded = false; function load() { if (loaded) { return; } loaded = true; fetchOptions(content); } if (!panel) { load(); return; } if (panel.classList.contains('is-active')) { load(); } new MutationObserver(function () { if (panel.classList.contains('is-active')) { load(); } }).observe(panel, { attributes: true, attributeFilter: ['class'] }); var header = panel.querySelector('.pdt-panel__header'); if (header) { header.addEventListener('click', load); } } function fetchOptions(content) { var target = content.querySelector('.pdt-pay__target'); if (!target) { return; } if (!cfg.endpoint) { setState(target, cfg.labels.error); return; } setState(target, cfg.labels.loading); var url = cfg.endpoint; var opts = { credentials: 'same-origin', headers: {} }; var body = encodeURIComponent(cfg.product_id_param) + '=' + encodeURIComponent(cfg.product_id); if (String(cfg.method).toUpperCase() === 'POST') { opts.method = 'POST'; opts.headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8'; opts.body = body; } else if (url.indexOf(encodeURIComponent(cfg.product_id_param) + '=') === -1) { // Endpoint may already carry the product id in its query string (e.g. the // server-provided installment_options_endpoint) — don't duplicate it. url += (url.indexOf('?') > -1 ? '&' : '?') + body; } fetch(url, opts) .then(function (r) { return r.json(); }) .then(function (data) { render(target, data); }) .catch(function () { setState(target, cfg.labels.error); }); } // --- Rendering ------------------------------------------------------- function render(target, data) { if (!data || data.success === false) { setState(target, cfg.labels.error); return; } var methods = (data.payment_methods || []).slice().sort(byOrder); var banks = (data.banks || []) .filter(function (bank) { return bank.has_installment_options || bank.has_content; }) .sort(byOrder); if (!methods.length && !banks.length) { setState(target, cfg.labels.empty); return; } var labels = data.labels || {}; var html = ''; methods.forEach(function (m) { html += methodItem(m); }); banks.forEach(function (bank) { html += bankItem(bank, labels); }); target.innerHTML = '<div class="pdt-pay__list">' + html + '</div>'; wireAccordion(target); } function methodItem(m) { var parsed = parseContentHtml(m.content_html); var body = parsed.body ? '<div class="pdt-pay__text">' + parsed.body + '</div>' : ''; return item(parsed.logo, m.display_name, body); } function bankItem(bank, labels) { var body = ''; if (bank.has_installment_options && bank.installments && bank.installments.length) { body += installmentTable(bank.installments, labels); } if (bank.content_html) { body += '<div class="pdt-pay__text">' + bank.content_html + '</div>'; } return item(bank.image_url, bank.display_name, body); } function item(logo, name, bodyHtml) { return '' + '<div class="pdt-pay__item">' + '<button type="button" class="pdt-pay__head">' + '<span class="pdt-pay__logo">' + (logo ? '<img src="' + esc(logo) + '" alt="' + esc(name) + '" loading="lazy">' : '') + '</span>' + '<span class="pdt-pay__name">' + esc(name) + '</span>' + '<span class="pdt-pay__toggle" aria-hidden="true"></span>' + '</button>' + '<div class="pdt-pay__body">' + bodyHtml + '</div>' + '</div>'; } function installmentTable(insts, labels) { var head = '<th class="pdt-pay__corner"></th>'; var rowInst = '<td class="pdt-pay__rowlabel">' + esc(labels.installment || 'Taksit') + '</td>'; var rowTotal = '<td class="pdt-pay__rowlabel">' + esc(labels.total || 'Toplam') + '</td>'; insts.forEach(function (inst) { head += '<th>' + esc(inst.label || inst.installment_count) + '</th>'; rowInst += '<td>' + esc(inst.installment_amount_text || '') + '</td>'; rowTotal += '<td class="pdt-pay__total">' + esc(inst.total_amount_text || '') + '</td>'; }); return '' + '<div class="pdt-pay__table-wrap">' + '<div class="pdt-pay__table-scroll">' + '<table class="pdt-pay__table">' + '<thead><tr>' + head + '</tr></thead>' + '<tbody><tr>' + rowInst + '</tr><tr>' + rowTotal + '</tr></tbody>' + '</table>' + '</div>' + '<div class="pdt-pay__nav">' + '<button type="button" class="pdt-pay__nav-btn" data-dir="-1" aria-label="Geri">←</button>' + '<button type="button" class="pdt-pay__nav-btn" data-dir="1" aria-label="İleri">→</button>' + '</div>' + '</div>'; } function wireAccordion(target) { target.querySelectorAll('.pdt-pay__head').forEach(function (head) { head.addEventListener('click', function () { head.parentElement.classList.toggle('is-open'); }); }); target.querySelectorAll('.pdt-pay__nav-btn').forEach(function (btn) { btn.addEventListener('click', function () { var wrap = btn.closest('.pdt-pay__table-wrap'); var scroll = wrap ? wrap.querySelector('.pdt-pay__table-scroll') : null; var dir = parseInt(btn.getAttribute('data-dir'), 10) || 1; if (scroll) { scroll.scrollBy({ left: dir * 220, behavior: 'smooth' }); } }); }); } // --- Helpers --------------------------------------------------------- // Payment-method content_html is a self-contained accordion; pull out just // the logo + inner text so it matches the bank accordion design. function parseContentHtml(html) { var tmp = document.createElement('div'); tmp.innerHTML = html || ''; var img = tmp.querySelector('img'); var bodyEl = tmp.querySelector('.text-description') || tmp.querySelector('.accordion > div') || tmp.querySelector('div div'); return { logo: img ? img.getAttribute('src') : '', body: bodyEl ? bodyEl.innerHTML : (tmp.textContent || '').trim() }; } function byOrder(a, b) { return (a.display_order || 0) - (b.display_order || 0); } function setState(target, msg) { target.innerHTML = '<p class="pdt-pay__state">' + esc(msg || '') + '</p>'; } function esc(s) { return (s == null ? '' : String(s)).replace(/[&<>"]/g, function (c) { return { '&': '&', '<': '<', '>': '>', '"': '"' }[c]; }); } function init() { document.querySelectorAll('.pdt-pay').forEach(wire); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } })(); </script> <div class="pdt-panel" > <button type="button" class="pdt-panel__header" aria-expanded="false"> <span class="pdt-panel__title">Mağaza Ödeme Çözümleri</span> <span class="pdt-panel__icon" aria-hidden="true"></span> </button> <div class="pdt-panel__body"> <div class="pdt-panel__content pdt-store-pay" style="--pdt-store-pay-card-bg: #ffffff; --pdt-store-pay-border: #e5e5e5; --pdt-store-pay-link: #e30613;" > <div class="pdt-store-pay__grid" style="grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 24px;" > <div class="pdt-store-pay__card"> <h3 class="pdt-store-pay__heading">Kredi Kartı Ödeme Koşulları</h3> <div class="pdt-store-pay__text"><p>Vestel Mağazalarında tüm banka ve kredi kartlarıyla alışveriş yapabilirsiniz. Kredi kartlarına uygulanacak taksit seçenekleri hakkında Vestel Mağazalarından bilgi alabilirsiniz.</p><p><a class="discover-stores" href="/content/magazalar">Mağazaları gör</a></p></div> </div> <div class="pdt-store-pay__card"> <h3 class="pdt-store-pay__heading">Mağaza İçi Kredi Sistemleri</h3> <div class="pdt-store-pay__text"><p>Vestel Mağazalarında anlaşmalı banka ve finansman şirketleri tarafından sunulan alışveriş kredisi ile yapacağınız bilgisayar, tablet ve cep telefonu dışındaki alışverişlerinizi 36 aya kadar taksitlendirebilirsiniz. Bu şekilde alışveriş kredisi ile yapacağınız bilgisayar ve tablet alışverişlerinizi 6 aya kadar; 20.000 TL’ye kadar olan cep telefonu alışverişlerinizi 12 aya kadar; 20.000 TL’den pahalı cep telefonu alışverişlerinizi ise 3 aya kadar taksitlendirebilirsiniz. ZİP, Garanti BBVA ve Denizbank alışveriş kredisi sistemleri anlaşmalı Vestel Mağazalarında bulunmaktadır. Vestel mağazaları ile iletişime geçerek Mağaza İçi Alışveriş Kredisi sistemlerinin kullanıp kullanmadığını sorgulayabilirsiniz.</p><p>En yakın mağaza için <a href="/content/magazalar">tıklayınız</a></p><p>ZİP Alışveriş Kredisi detayları için <a href="https://www.yamakiro.live/kampanya/zip-alisveris-kredisi">tıklayınız</a></p><p>Garanti Bankası Alışveriş Kredisi detayları için <a href="https://www.yamakiro.live/kampanya/garanti-alisveris-kredisi">tıklayınız</a></p><p>Denizbank Alışveriş Kredisi detayları için <a href="https://www.yamakiro.live/kampanya/denizbank-alisveris-kredisi">tıklayınız</a></p></div> </div> </div> </div> </div> </div> <div class="pdt-panel" > <button type="button" class="pdt-panel__header" aria-expanded="false"> <span class="pdt-panel__title">İptal & İade Koşulları</span> <span class="pdt-panel__icon" aria-hidden="true"></span> </button> <div class="pdt-panel__body"> <div class="pdt-panel__content pdt-return" style="--pdt-return-card-bg: #ffffff; --pdt-return-border: #e5e5e5; --pdt-return-link: #e30613;" > <div class="pdt-return__grid" style="grid-template-columns: repeat(2, minmax(0, 1fr));" > <div class="pdt-return__card"> <h3 class="pdt-return__heading">İptal Koşulları</h3> <div class="pdt-return__text"><p>Tüketicinin Korunması Hakkında Kanun gereği, ürünün tesliminden en geç otuz gün içinde herhangi bir gerekçe göstermeksizin ve cezai şart ödemeksizin sözleşmeden cayma hakkınızı kullanabilirsiniz. Detaylar için:</p><p><a href="https://www.yamakiro.live/content/vestel-kolay-iade">https://www.yamakiro.live/content/vestel-kolay-iade</a></p><p>Sipariş iptal işleminizi başlatmak için "Siparişiniz kargoya verildi" bilgisi e-posta ile tarafınıza bildirilmeden önce yamakiro.live üzerinden "Hesabım" bölümündeki "Siparişlerim" sayfasına gidip, buradan iptal butonuna basarak siparişinizi iptal edebilir ya da</p><p><a href="mailto:emagaza@yamakiro.live">emagaza@yamakiro.live</a></p><p>adresine iptal etmek istediğiniz siparişiniz ya da ürün hakkında bilgi vererek siparişinizi iptal edebilirsiniz.</p></div> </div> <div class="pdt-return__card"> <h3 class="pdt-return__heading">İade Koşulları</h3> <div class="pdt-return__text"><p>Tüketicinin Korunması Hakkında Kanun gereği, ürünün tesliminden en geç otuz gün içinde herhangi bir gerekçe göstermeksizin ve cezai şart ödemeksizin sözleşmeden cayma hakkınızı kullanabilirsiniz. Detaylar için:</p><p><a href="https://www.yamakiro.live/content/vestel-kolay-iade">https://www.yamakiro.live/content/vestel-kolay-iade</a></p><p>Kargoya verilmiş siparişlerinizin iadesi ile ilgili talepleriniz,</p><h4 style="color:#e30613">Tüketici Kanunu</h4><p>'nun ilgili maddeleri gereğince değerlendirilecektir.</p></div> </div> </div> </div> </div> </div> </div> </div> <script> (function () { // GA4 — sekme tiklamalari. Product Information section'ina bagimli // olmamak icin urun adi dogrudan buradaki Liquid context'inden okunur. var PRODUCT_NAME = "Vesplus Manyetik Kireç Önleyici"; // Tiklanan sekmenin basligiyla (masaustu sekme cubugu ve mobil akordeon // ayni basligi kullanir) Ürün Detay Tab-Click gonderilir. Label sekme // cubugundaki gibi buyuk harftir — ör. "YORUMLAR (4062)". Panel yorumlar // paneliyse ayrica comment_impression tetiklenir — ama yalnizca panel // ACILIRKEN: akordeonda kapatma aksiyonu bir goruntuleme degildir. function pushTabClick(panel, opening) { var title = panel.querySelector('.pdt-panel__title'); var label = title ? title.textContent.replace(/\s+/g, ' ').trim().toLocaleUpperCase('tr-TR') : ''; window.dataLayer = window.dataLayer || []; window.dataLayer.push({ 'Category': 'Ürün Detay Tab-Click', 'Action': PRODUCT_NAME, 'Label': label, 'noninteraction': false, 'event': 'gaEvent' }); if (opening && panel.querySelector('.pdt-rv__app') && window.tbPdpReviewImpression) { window.tbPdpReviewImpression(); } } document.querySelectorAll('.product-detail-tabs').forEach(function (root) { if (root.__pdtInit) { return; } root.__pdtInit = true; var nav = root.querySelector('.product-detail-tabs__nav'); var panels = [].slice.call(root.querySelectorAll('.pdt-panel')); if (!nav || !panels.length) { return; } // One desktop tab per panel, labelled from the panel's own header title. panels.forEach(function (panel, i) { var title = panel.querySelector('.pdt-panel__title'); var btn = document.createElement('button'); btn.type = 'button'; btn.className = 'product-detail-tabs__tab' + (i === 0 ? ' is-active' : ''); btn.setAttribute('role', 'tab'); btn.innerHTML = title ? title.innerHTML.toLocaleUpperCase('tr-TR') : ('Tab ' + (i + 1)); //toLocaleUpperCase('tr-TR') btn.addEventListener('click', function () { pushTabClick(panel, !panel.classList.contains('is-active')); activate(i); }); nav.appendChild(btn); if (i === 0) { panel.classList.add('is-active'); } var header = panel.querySelector('.pdt-panel__header'); if (header) { header.setAttribute('aria-expanded', i === 0 ? 'true' : 'false'); header.addEventListener('click', function () { pushTabClick(panel, !panel.classList.contains('is-active')); toggle(i); }); } }); var tabs = [].slice.call(nav.children); function activate(i) { panels.forEach(function (p, k) { var on = k === i; p.classList.toggle('is-active', on); if (tabs[k]) { tabs[k].classList.toggle('is-active', on); } var h = p.querySelector('.pdt-panel__header'); if (h) { h.setAttribute('aria-expanded', on ? 'true' : 'false'); } }); } // Mobile accordion: tap an open row to close it, else open it exclusively. function toggle(i) { if (panels[i].classList.contains('is-active')) { panels[i].classList.remove('is-active'); if (tabs[i]) { tabs[i].classList.remove('is-active'); } var h = panels[i].querySelector('.pdt-panel__header'); if (h) { h.setAttribute('aria-expanded', 'false'); } } else { activate(i); } } }); })(); </script> </section> </div></main> <footer><style data-section-css="053pbdhNUIiCCsHDFU9Wo">.footer-top__inner { display: grid; grid-template-columns: auto 1fr; align-items: center; gap: 1.5rem; margin: 0 auto; } .footer-top__left img { display: block; width: auto; object-fit: contain; } .footer-top__image-link { display: inline-block; line-height: 0; } .footer-top__right { display: grid; grid-auto-flow: column; align-items: center; justify-content: end; gap: 1rem; } .footer-top__right svg { color: #fff; } .footer-top__label { text-transform: uppercase; font-weight: 700; letter-spacing: 0.08em; float: left; color: rgba(255, 255, 255, .5); height: 20px; font-size: 18px; margin-top: 6px; } .footer-top__icons { display: grid; grid-auto-flow: column; gap: 10px; align-items: center; list-style: none; margin: 0; padding: 0; } .footer-top__icon-link { float: left; display: block; width: 40px; height: 40px; border: solid 1px #fff; opacity: .5; } .footer-top__icon-link:hover { opacity: 1; } .footer-top__svg { width: var(--icon-size, 24px); height: var(--icon-size, 24px); } .footer-top__icon-img { width: var(--icon-size, 24px); height: var(--icon-size, 24px); object-fit: contain; } .footer-top__icon-link--has-hover .footer-top__icon-hover { display: none; } .footer-top__icon-link--has-hover:hover .footer-top__icon-default { display: none; } .footer-top__icon-link--has-hover:hover .footer-top__icon-hover { display: block; } @media (max-width: 768px) { .footer-top__inner { grid-template-columns: 1fr; justify-items: center; text-align: center; gap: 0.75rem; } .footer-top__right { grid-auto-flow: row; justify-content: center; gap: 0.5rem; } } .footer-top { background: rgba(0, 0, 0, .1); } .footer-top__right > ul > li a:hover{ opacity: 1; background-color: #df2027; border-color: #df2027; }</style><div class="section-053pbdhN" data-section-id="053pbdhNUIiCCsHDFU9Wo"><div class="footer-top" data-color-scheme="2" style="padding: 16px 0px; background-color: #353535; border-top: 1px solid var(--color-outline, rgba(0,0,0,0.1));"> <div class="footer-top__inner" style="max-width: 1200px;"> <div class="footer-top__left"> <a href="#" class="footer-top__image-link" target="_blank" rel="noreferrer"> <img src="https://statics.yamakiro.live/uploadedfilecontainer/zorlu-footer-logo_2026063005473072919.png" alt="" class="footer-top__image" style="max-height: 48px;" /> </a> </div> <div class="footer-top__right"> <span class="footer-top__label">SOSYAL MEDYA</span> <ul class="footer-top__icons" style="--icon-size: 38px;"> <li> <a href="https://www.facebook.com/vestel" target="_blank" rel="noreferrer" aria-label="Facebook" class="footer-top__icon-link"> <svg class="footer-top__svg footer-icon fb" viewBox="0 0 24 24" fill="currentColor"><path d="M22 12c0-5.523-4.477-10-10-10S2 6.477 2 12c0 4.991 3.657 9.128 8.438 9.879V14.89h-2.54V12h2.54V9.797c0-2.506 1.492-3.89 3.777-3.89 1.094 0 2.238.195 2.238.195v2.46h-1.26c-1.243 0-1.63.771-1.63 1.562V12h2.773l-.443 2.89h-2.33v6.989C18.343 21.129 22 16.99 22 12z"/></svg> </a> </li> <li> <a href="https://www.instagram.com/vestel/" target="_blank" rel="noreferrer" aria-label="Instagram" class="footer-top__icon-link footer-icon ins"> <svg class="footer-top__svg" viewBox="0 0 24 24" fill="currentColor"><path d="M7.75 2h8.5A5.75 5.75 0 0 1 22 7.75v8.5A5.75 5.75 0 0 1 16.25 22h-8.5A5.75 5.75 0 0 1 2 16.25v-8.5A5.75 5.75 0 0 1 7.75 2m0 1.5A4.25 4.25 0 0 0 3.5 7.75v8.5A4.25 4.25 0 0 0 7.75 20.5h8.5a4.25 4.25 0 0 0 4.25-4.25v-8.5A4.25 4.25 0 0 0 16.25 3.5h-8.5M12 7a5 5 0 1 1 0 10 5 5 0 0 1 0-10m0 1.5a3.5 3.5 0 1 0 0 7 3.5 3.5 0 0 0 0-7m5.25-.88a1.13 1.13 0 1 1 0 2.25 1.13 1.13 0 0 1 0-2.25z"/></svg> </a> </li> <li> <a href="https://twitter.com/vestel?lang=tr" target="_blank" rel="noreferrer" aria-label="Twitter / X" class="footer-top__icon-link"> <img src="https://statics.yamakiro.live/template/e3227c21-25b8-4112-9c3f-4a085663371e.svg" alt="Twitter / X" class="footer-top__icon-img" /> </a> </li> <li> <a href="https://www.youtube.com/@vestel" target="_blank" rel="noreferrer" aria-label="YouTube" class="footer-top__icon-link footer-top__icon-link--has-hover"> <img src="https://statics.yamakiro.live/template/975f73d7-44f1-4819-b05b-64434d907c63.png" alt="YouTube" class="footer-top__icon-img footer-top__icon-default" /> <img src="https://statics.yamakiro.live/template/98f7895e-1429-4fad-bb79-6f8102d6bc9b.png" alt="YouTube" class="footer-top__icon-img footer-top__icon-hover" /> </a> </li> <li> <a href="https://tr.pinterest.com/vesteltr/" target="_blank" rel="noreferrer" aria-label="Pinterest" class="footer-top__icon-link footer-top__icon-link--has-hover"> <img src="https://statics.yamakiro.live/template/60c058c0-a702-41dc-8d82-54f4e46f574c.png" alt="Pinterest" class="footer-top__icon-img footer-top__icon-default" /> <img src="https://statics.yamakiro.live/template/d79a36c2-ad0a-4247-850b-3d42895fbaeb.png" alt="Pinterest" class="footer-top__icon-img footer-top__icon-hover" /> </a> </li> </ul> </div> </div> </div></div><style data-section-css="zm5smXjg1POfceeFD7guC">.site-footer { margin-top: auto; } .site-footer__inner { max-width: 1200px; margin: 0 auto; padding: 4rem 2rem 2rem; } .site-footer__blocks { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 2.5rem; margin-bottom: 3rem; } .site-footer__column { min-width: 0; } .site-footer__newsletter { margin-bottom: 2rem; text-align: center; } .site-footer__newsletter h4 { margin-bottom: 1rem; } .site-footer__copyright { border-top: 1px solid var(--color-outline, rgba(255, 255, 255, 0.1)); padding-top: 32px; text-align: center; opacity: 0.5; height: 80px; line-height: 80px; color: #dedede; font-size: 14px; } .site-footer__column, .site-footer__payment { font-size: var(--font-size-sm, 0.9rem); /* Example: Adjust font size */ color: var(--color-text); /* Example: Inherit text color */ /* Add other shared text styles here */ } .footer-column ul li a { font-size:15px; font-weight: 500; font-family: "League Medium", sans-serif; color: #bbb } .site-footer__payment-wrapper { margin-top: 1rem; } .site-footer__payment { display: inline-block; } @media (max-width: 768px) { .site-footer__blocks { grid-template-columns: 1fr; gap: 0; margin-bottom: 2rem; } .site-footer__column { padding-bottom: 0.25rem; } .site-footer__column:last-child { border-bottom: 0; } }</style><style data-block-css="tSddH_p_hZKRDoIV6jaZu">.footer-column h3 { text-transform: uppercase; font-size: var(--font-size-xs, 0.8rem); font-weight: 700; letter-spacing: 0.08em; margin-bottom: 0.75rem; margin-top: 1.25rem; color: inherit; opacity: 0.95; } .footer-column h3:first-child { margin-top: 0; } .footer-column h3 a { color: inherit; text-decoration: none; opacity: 0.95; } .footer-column h3 a:hover { opacity: 1; text-decoration: underline; } .footer-column ul { display: flex; flex-direction: column; gap: 0.5rem; margin: 0 0 1rem 0; padding: 0; list-style: none; } .footer-column ul li p { margin: 0; } .footer-column ul li a { font-size:15px; font-font-weight: 500; font-font-family: "League Medium",sans-serif; } .footer-column a { font-size: var(--font-size-sm, 0.9rem); opacity: 0.8; transition: opacity 0.2s, color 0.2s; color: #fff; } .footer-column a:hover { opacity: 1; } .footer-payment-inner h3 a, .footer-column h3 a { color:#ddd; font-size: 18px; opacity: 1; } .footer-payment-inner h3 a:hover, .footer-column h3 a:hover{ color:#fff; } .footer-column a:hover { opacity: 1; color: #df2027; } /* Mobil accordion: yalnızca h3 görünür, tıklayınca liste açılır */ .footer-column__toggle { display: none; width: 100%; align-items: center; justify-content: space-between; gap: 0.75rem; padding: 0; margin: 0; border: 0; background: transparent; font: inherit; color: #ddd; font-size: 18px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; text-align: left; cursor: pointer; opacity: 1; } .footer-column__heading-link { display: inline; } .footer-column__chevron { flex-shrink: 0; width: 0.5rem; height: 0.5rem; border-right: 2px solid currentColor; border-bottom: 2px solid currentColor; transform: rotate(45deg); transition: transform 0.2s ease; margin-top: -0.15rem; } .footer-column__group--collapsible.is-open .footer-column__chevron { transform: rotate(-135deg); margin-top: 0.15rem; } @media (max-width: 768px) { .footer-column--api .footer-column__group--collapsible .footer-column__toggle { display: flex; } .footer-column--api .footer-column__group--collapsible .footer-column__heading-link { display: none; } .footer-column--api .footer-column__group--collapsible .footer-column__panel { display: none; margin-bottom: 0; } .footer-column--api .footer-column__group--collapsible.is-open .footer-column__panel { display: flex; flex-direction: column; margin-bottom: 1rem; } .footer-column--api h3 { margin-bottom: 0; border-bottom: 1px solid rgba(255, 255, 255, 0.12); padding: 0.75rem 0; } .footer-column--api .footer-column__group--collapsible.is-open h3 { margin-bottom: 0.75rem; } .site-footer__blocks { gap: 0; } .footer-column--api h3:focus, .footer-column--api h3:focus-visible, .footer-column--api h3:active, .footer-column--api h3:focus-within, .footer-column--api h3 a:focus, .footer-column--api h3 a:focus-visible, .footer-column--api h3 a:active, .footer-column--api h3 a:focus-within , .footer-column--api h3 a button:focus, .footer-column--api h3 a button:focus-visible, .footer-column--api h3 a button:active, .footer-column--api h3 a button:focus-within, .footer-column--api h3 button:focus, .footer-column--api h3 button:focus-visible, .footer-column--api h3 button:active, .footer-column--api h3 button:focus-within { outline: none; } } @media (min-width: 769px) { .footer-column--api .footer-column__group--collapsible .footer-column__panel { display: flex; flex-direction: column; } .footer-column--api .footer-column__group--collapsible .footer-column__panel[hidden] { display: flex !important; } }</style><style data-block-css="CwCPXoDIWwKU6vFLkLGfu">.footer-column h3 { text-transform: uppercase; font-size: var(--font-size-xs, 0.8rem); font-weight: 700; letter-spacing: 0.08em; margin-bottom: 0.75rem; margin-top: 1.25rem; color: inherit; opacity: 0.95; } .footer-column h3:first-child { margin-top: 0; } .footer-column h3 a { color: inherit; text-decoration: none; opacity: 0.95; } .footer-column h3 a:hover { opacity: 1; text-decoration: underline; } .footer-column ul { display: flex; flex-direction: column; gap: 0.5rem; margin: 0 0 1rem 0; padding: 0; list-style: none; } .footer-column ul li p { margin: 0; } .footer-column a { font-size: var(--font-size-sm, 0.9rem); opacity: 0.8; transition: opacity 0.2s, color 0.2s; color: #fff; } .footer-column a:hover { opacity: 1; } .footer-payment-inner h3 a, .footer-column h3 a { color:#ddd; font-size: 18px; opacity: 1; } .footer-payment-inner h3 a:hover, .footer-column h3 a:hover{ color:#fff; } .footer-column a:hover { opacity: 1; color: #df2027; } /* Mobil accordion: yalnızca h3 görünür, tıklayınca liste açılır */ .footer-column__toggle { display: none; width: 100%; align-items: center; justify-content: space-between; gap: 0.75rem; padding: 0; margin: 0; border: 0; background: transparent; font: inherit; color: #ddd; font-size: 18px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; text-align: left; cursor: pointer; opacity: 1; } .footer-column__heading-link { display: inline; } .footer-column__chevron { flex-shrink: 0; width: 0.5rem; height: 0.5rem; border-right: 2px solid currentColor; border-bottom: 2px solid currentColor; transform: rotate(45deg); transition: transform 0.2s ease; margin-top: -0.15rem; } .footer-column__group--collapsible.is-open .footer-column__chevron { transform: rotate(-135deg); margin-top: 0.15rem; } @media (max-width: 768px) { .footer-column--api .footer-column__group--collapsible .footer-column__toggle { display: flex; } .footer-column--api .footer-column__group--collapsible .footer-column__heading-link { display: none; } .footer-column--api .footer-column__group--collapsible .footer-column__panel { display: none; margin-bottom: 0; } .footer-column--api .footer-column__group--collapsible.is-open .footer-column__panel { display: flex; flex-direction: column; margin-bottom: 1rem; } .footer-column--api h3 { margin-bottom: 0; border-bottom: 1px solid rgba(255, 255, 255, 0.12); padding: 0.75rem 0; } .footer-column--api .footer-column__group--collapsible.is-open h3 { margin-bottom: 0.75rem; } .site-footer__blocks { gap: 0; } .footer-column--api h3:focus, .footer-column--api h3:focus-visible, .footer-column--api h3:active, .footer-column--api h3:focus-within, .footer-column--api h3 a:focus, .footer-column--api h3 a:focus-visible, .footer-column--api h3 a:active, .footer-column--api h3 a:focus-within , .footer-column--api h3 a button:focus, .footer-column--api h3 a button:focus-visible, .footer-column--api h3 a button:active, .footer-column--api h3 a button:focus-within, .footer-column--api h3 button:focus, .footer-column--api h3 button:focus-visible, .footer-column--api h3 button:active, .footer-column--api h3 button:focus-within { outline: none; } } @media (min-width: 769px) { .footer-column--api .footer-column__group--collapsible .footer-column__panel { display: flex; flex-direction: column; } .footer-column--api .footer-column__group--collapsible .footer-column__panel[hidden] { display: flex !important; } }</style><style data-block-css="y3BLGCRXIO3MWq0gVBfFf">.footer-column h3 { text-transform: uppercase; font-size: var(--font-size-xs, 0.8rem); font-weight: 700; letter-spacing: 0.08em; margin-bottom: 0.75rem; margin-top: 1.25rem; color: inherit; opacity: 0.95; } .footer-column h3:first-child { margin-top: 0; } .footer-column h3 a { color: inherit; text-decoration: none; opacity: 0.95; } .footer-column h3 a:hover { opacity: 1; text-decoration: underline; } .footer-column ul { display: flex; flex-direction: column; gap: 0.5rem; margin: 0 0 1rem 0; padding: 0; list-style: none; } .footer-column ul li p { margin: 0; } .footer-column a { font-size: var(--font-size-sm, 0.9rem); opacity: 0.8; transition: opacity 0.2s, color 0.2s; color: #fff; } .footer-column a:hover { opacity: 1; } .footer-payment-inner h3 a, .footer-column h3 a { color:#ddd; font-size: 18px; opacity: 1; } .footer-payment-inner h3 a:hover, .footer-column h3 a:hover{ color:#fff; } .footer-column a:hover { opacity: 1; color: #df2027; } /* Mobil accordion: yalnızca h3 görünür, tıklayınca liste açılır */ .footer-column__toggle { display: none; width: 100%; align-items: center; justify-content: space-between; gap: 0.75rem; padding: 0; margin: 0; border: 0; background: transparent; font: inherit; color: #ddd; font-size: 18px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; text-align: left; cursor: pointer; opacity: 1; } .footer-column__heading-link { display: inline; } .footer-column__chevron { flex-shrink: 0; width: 0.5rem; height: 0.5rem; border-right: 2px solid currentColor; border-bottom: 2px solid currentColor; transform: rotate(45deg); transition: transform 0.2s ease; margin-top: -0.15rem; } .footer-column__group--collapsible.is-open .footer-column__chevron { transform: rotate(-135deg); margin-top: 0.15rem; } @media (max-width: 768px) { .footer-column--api .footer-column__group--collapsible .footer-column__toggle { display: flex; } .footer-column--api .footer-column__group--collapsible .footer-column__heading-link { display: none; } .footer-column--api .footer-column__group--collapsible .footer-column__panel { display: none; margin-bottom: 0; } .footer-column--api .footer-column__group--collapsible.is-open .footer-column__panel { display: flex; flex-direction: column; margin-bottom: 1rem; } .footer-column--api h3 { margin-bottom: 0; border-bottom: 1px solid rgba(255, 255, 255, 0.12); padding: 0.75rem 0; } .footer-column--api .footer-column__group--collapsible.is-open h3 { margin-bottom: 0.75rem; } .site-footer__blocks { gap: 0; } .footer-column--api h3:focus, .footer-column--api h3:focus-visible, .footer-column--api h3:active, .footer-column--api h3:focus-within, .footer-column--api h3 a:focus, .footer-column--api h3 a:focus-visible, .footer-column--api h3 a:active, .footer-column--api h3 a:focus-within , .footer-column--api h3 a button:focus, .footer-column--api h3 a button:focus-visible, .footer-column--api h3 a button:active, .footer-column--api h3 a button:focus-within, .footer-column--api h3 button:focus, .footer-column--api h3 button:focus-visible, .footer-column--api h3 button:active, .footer-column--api h3 button:focus-within { outline: none; } } @media (min-width: 769px) { .footer-column--api .footer-column__group--collapsible .footer-column__panel { display: flex; flex-direction: column; } .footer-column--api .footer-column__group--collapsible .footer-column__panel[hidden] { display: flex !important; } }</style><style data-block-css="Z71tZCG9K8KNMhatAavw2">.footer-column h3 { text-transform: uppercase; font-size: var(--font-size-xs, 0.8rem); font-weight: 700; letter-spacing: 0.08em; margin-bottom: 0.75rem; margin-top: 1.25rem; color: inherit; opacity: 0.95; } .footer-column h3:first-child { margin-top: 0; } .footer-column h3 a { color: inherit; text-decoration: none; opacity: 0.95; } .footer-column h3 a:hover { opacity: 1; text-decoration: underline; } .footer-column ul { display: flex; flex-direction: column; gap: 0.5rem; margin: 0 0 1rem 0; padding: 0; list-style: none; } .footer-column ul li p { margin: 0; } .footer-column a { font-size: var(--font-size-sm, 0.9rem); opacity: 0.8; transition: opacity 0.2s, color 0.2s; color: #fff; } .footer-column a:hover { opacity: 1; } .footer-payment-inner h3 a, .footer-column h3 a { color:#ddd; font-size: 18px; opacity: 1; } .footer-payment-inner h3 a:hover, .footer-column h3 a:hover{ color:#fff; } .footer-column a:hover { opacity: 1; color: #df2027; } /* Mobil accordion: yalnızca h3 görünür, tıklayınca liste açılır */ .footer-column__toggle { display: none; width: 100%; align-items: center; justify-content: space-between; gap: 0.75rem; padding: 0; margin: 0; border: 0; background: transparent; font: inherit; color: #ddd; font-size: 18px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; text-align: left; cursor: pointer; opacity: 1; } .footer-column__heading-link { display: inline; } .footer-column__chevron { flex-shrink: 0; width: 0.5rem; height: 0.5rem; border-right: 2px solid currentColor; border-bottom: 2px solid currentColor; transform: rotate(45deg); transition: transform 0.2s ease; margin-top: -0.15rem; } .footer-column__group--collapsible.is-open .footer-column__chevron { transform: rotate(-135deg); margin-top: 0.15rem; } @media (max-width: 768px) { .footer-column--api .footer-column__group--collapsible .footer-column__toggle { display: flex; } .footer-column--api .footer-column__group--collapsible .footer-column__heading-link { display: none; } .footer-column--api .footer-column__group--collapsible .footer-column__panel { display: none; margin-bottom: 0; } .footer-column--api .footer-column__group--collapsible.is-open .footer-column__panel { display: flex; flex-direction: column; margin-bottom: 1rem; } .footer-column--api h3 { margin-bottom: 0; border-bottom: 1px solid rgba(255, 255, 255, 0.12); padding: 0.75rem 0; } .footer-column--api .footer-column__group--collapsible.is-open h3 { margin-bottom: 0.75rem; } .site-footer__blocks { gap: 0; } .footer-column--api h3:focus, .footer-column--api h3:focus-visible, .footer-column--api h3:active, .footer-column--api h3:focus-within, .footer-column--api h3 a:focus, .footer-column--api h3 a:focus-visible, .footer-column--api h3 a:active, .footer-column--api h3 a:focus-within , .footer-column--api h3 a button:focus, .footer-column--api h3 a button:focus-visible, .footer-column--api h3 a button:active, .footer-column--api h3 a button:focus-within, .footer-column--api h3 button:focus, .footer-column--api h3 button:focus-visible, .footer-column--api h3 button:active, .footer-column--api h3 button:focus-within { outline: none; } } @media (min-width: 769px) { .footer-column--api .footer-column__group--collapsible .footer-column__panel { display: flex; flex-direction: column; } .footer-column--api .footer-column__group--collapsible .footer-column__panel[hidden] { display: flex !important; } }</style><style data-block-css="70JSgCqu6JKV4jXiyaRNK">.footer-payment-wrapper { display: flex; } /* pozisyonlar */ .footer-payment--left { justify-content: flex-start; } .footer-payment--center { justify-content: center; } .footer-payment--right { justify-content: flex-end; } /* icon row */ .footer-payment { display: flex; align-items: center; gap: 12px; margin-top: 10px; justify-content: center; /* aynı hizayı kullanır */ } .footer-payment-inner p { font-size:15px; font-font-weight: 500; font-font-family: "League Medium",sans-serif; } </style><div class="section-zm5smXjg" data-section-id="zm5smXjg1POfceeFD7guC"><div class="site-footer" data-color-scheme="2" data-section-type="footer-api" style="background-color: #3b3b3b;" > <div class="site-footer__inner"> <div class="site-footer__blocks"> <div class="site-footer__column" data-block-id="tSddH_p_hZKRDoIV6jaZu"> <div class="footer-column footer-column--api" data-footer-column-api> <div class="footer-column__group footer-column__group--collapsible"> <h3> <button type="button" class="footer-column__toggle" aria-expanded="false" > <span class="footer-column__toggle-text">KATEGORİLER</span> <span class="footer-column__chevron" aria-hidden="true"></span> </button> <a class="footer-column__heading-link" rel="noopener noreferrer" href="/content/tum-urunler" >KATEGORİLER</a> </h3> <ul class="footer-column__panel"> <li> <p> <a rel="noopener noreferrer" href="/beyaz-esya-c-1" title="Beyaz Eşya">Beyaz Eşya</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="/ankastre-c-3" title="Ankastre Ürünler">Ankastre Ürünler</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="/isitma-sogutma-c-5" title="Klima ve Isıtıcılar">Klima ve Isıtıcılar</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="/kucuk-ev-aletleri-c-4" title="Küçük Ev Aletleri">Küçük Ev Aletleri</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="/elektrikli-supurgeler-c-34" title="Süpürgeler">Süpürgeler</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="/tv-ses-c-2" title="Elektronik">Elektronik</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="/akilli-urunler-c-6" title="Akıllı Ürünler">Akıllı Ürünler</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="/televizyonlar-c-26" title="Televizyonlar">Televizyonlar</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="/buzdolabi-c-13" title="Buzdolapları">Buzdolapları</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="/camasir-makineleri-c-14" title="Çamaşır Makineleri">Çamaşır Makineleri</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="/bulasik-makineleri-c-11" title="Bulaşık Makineleri">Bulaşık Makineleri</a> </p> </li> </ul> </div> </div> <script>(function () { var MQ = '(max-width: 768px)'; function isMobile() { return window.matchMedia(MQ).matches; } function syncGroup(group) { var panel = group.querySelector('.footer-column__panel'); var toggle = group.querySelector('.footer-column__toggle'); if (!panel || !toggle) return; if (isMobile()) { var open = group.classList.contains('is-open'); panel.hidden = !open; toggle.setAttribute('aria-expanded', open ? 'true' : 'false'); } else { panel.hidden = false; group.classList.remove('is-open'); toggle.setAttribute('aria-expanded', 'true'); } } function syncAll() { document .querySelectorAll('.footer-column__group--collapsible') .forEach(syncGroup); } if (!window.__footerColumnApiAccordionBound) { window.__footerColumnApiAccordionBound = true; document.addEventListener('click', function (event) { if (!isMobile()) return; var toggle = event.target.closest('.footer-column__toggle'); if (!toggle) return; var group = toggle.closest('.footer-column__group--collapsible'); if (!group) return; event.preventDefault(); group.classList.toggle('is-open'); syncGroup(group); }); window.matchMedia(MQ).addEventListener('change', syncAll); } syncAll(); })(); </script> </div> <div class="site-footer__column" data-block-id="CwCPXoDIWwKU6vFLkLGfu"> <div class="footer-column footer-column--api" data-footer-column-api> <div class="footer-column__group footer-column__group--collapsible"> <h3> <button type="button" class="footer-column__toggle" aria-expanded="false" > <span class="footer-column__toggle-text">yamakiro.live FARKI</span> <span class="footer-column__chevron" aria-hidden="true"></span> </button> <a class="footer-column__heading-link" rel="noopener noreferrer" href="/content/vestelle-olur-neden-olmasin" >yamakiro.live FARKI</a> </h3> <ul class="footer-column__panel"> <li> <p> <a rel="noopener noreferrer" href="/content/guvenli-alisveris" title="Güvenli Alışveriş">Güvenli Alışveriş</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="/content/e-randevu" title="E-Randevu">E-Randevu</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="https://www.yamakiro.live/customer/orderquery" title="Detaylı Kargo Takibi">Detaylı Kargo Takibi</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="/content/vestel-kolay-iade" title="Kolay İade">Kolay İade</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="/content/dijital-dosyam" title="Dijital Dosyam">Dijital Dosyam</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="/hizmetler/ekguvence" title="Ek Güvence ve Bakım">Ek Güvence ve Bakım</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="/content/kullanici-yorumlari" title="Kullanıcı Yorumları">Kullanıcı Yorumları</a> </p> </li> </ul> </div> <div class="footer-column__group footer-column__group--collapsible"> <h3> <button type="button" class="footer-column__toggle" aria-expanded="false" > <span class="footer-column__toggle-text">ÖZEL SAYFALAR</span> <span class="footer-column__chevron" aria-hidden="true"></span> </button> <a class="footer-column__heading-link" rel="noopener noreferrer" href="" >ÖZEL SAYFALAR</a> </h3> <ul class="footer-column__panel"> <li> <p> <a rel="noopener noreferrer" href="/kampanyalar" title="Kampanyalar">Kampanyalar</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="/content/hediye-onerileri" title="Hediye Önerileri">Hediye Önerileri</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="/content/seflerin-tercihi" title="Şeflerin Tercihi">Şeflerin Tercihi</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="/blog" title="Vestel Blog">Vestel Blog</a> </p> </li> </ul> </div> </div> <script>(function () { var MQ = '(max-width: 768px)'; function isMobile() { return window.matchMedia(MQ).matches; } function syncGroup(group) { var panel = group.querySelector('.footer-column__panel'); var toggle = group.querySelector('.footer-column__toggle'); if (!panel || !toggle) return; if (isMobile()) { var open = group.classList.contains('is-open'); panel.hidden = !open; toggle.setAttribute('aria-expanded', open ? 'true' : 'false'); } else { panel.hidden = false; group.classList.remove('is-open'); toggle.setAttribute('aria-expanded', 'true'); } } function syncAll() { document .querySelectorAll('.footer-column__group--collapsible') .forEach(syncGroup); } if (!window.__footerColumnApiAccordionBound) { window.__footerColumnApiAccordionBound = true; document.addEventListener('click', function (event) { if (!isMobile()) return; var toggle = event.target.closest('.footer-column__toggle'); if (!toggle) return; var group = toggle.closest('.footer-column__group--collapsible'); if (!group) return; event.preventDefault(); group.classList.toggle('is-open'); syncGroup(group); }); window.matchMedia(MQ).addEventListener('change', syncAll); } syncAll(); })(); </script> </div> <div class="site-footer__column" data-block-id="y3BLGCRXIO3MWq0gVBfFf"> <div class="footer-column footer-column--api" data-footer-column-api> <div class="footer-column__group footer-column__group--collapsible"> <h3> <button type="button" class="footer-column__toggle" aria-expanded="false" > <span class="footer-column__toggle-text">DESTEK</span> <span class="footer-column__chevron" aria-hidden="true"></span> </button> <a class="footer-column__heading-link" rel="noopener noreferrer" href="/content/destek" >DESTEK</a> </h3> <ul class="footer-column__panel"> <li> <p> <a rel="noopener noreferrer" href="/content/islemrehberi" title="İşlem Rehberi" class="İşlem Rehberi">İşlem Rehberi</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="/content/iletisim" title="İletişim" class="İletişim">İletişim</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="/content/magazalar" title="Mağazalarımız" class="Mağazalarımız">Mağazalarımız</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="/content/servisler" title="Servislerimiz" class="Servislerimiz">Servislerimiz</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="/content/sikca-sorulan-sorular" title="Sıkça Sorulan Sorular" class="Sıkça Sorulan Sorular">Sıkça Sorulan Sorular</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="/content/odeme-secenekleri" title="Ödeme Seçenekleri" class="Ödeme Seçenekleri">Ödeme Seçenekleri</a> </p> </li> </ul> </div> <div class="footer-column__group footer-column__group--collapsible"> <h3> <button type="button" class="footer-column__toggle" aria-expanded="false" > <span class="footer-column__toggle-text">yamakiro.live</span> <span class="footer-column__chevron" aria-hidden="true"></span> </button> <a class="footer-column__heading-link" rel="noopener noreferrer" href="https://www.yamakiro.live/#" >yamakiro.live</a> </h3> <ul class="footer-column__panel"> <li> <p> <a rel="noopener noreferrer" href="/content/kurumsal" title="Kurumsal" class="Kurumsal">Kurumsal</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="https://vestelinternational.com/tr/surdurulebilirlik/stratejik-yaklasim" title="Sürdürülebilirlik" class="Sürdürülebilirlik">Sürdürülebilirlik</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="https://www.yamakiro.live/content/kisiselverilerinislenmesi" title="Kişisel Verilerin İşlenmesi" class="Kişisel Verilerin İşlenmesi">Kişisel Verilerin İşlenmesi</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="https://statik.yamakiro.live/webfiles/calisan-adayi-aydinlatma-metni-02072024.pdf" title="Çalışan Adayı Aydınlatma Metni" class="Çalışan Adayı Aydınlatma Metni">Çalışan Adayı Aydınlatma Metni</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="https://statik.yamakiro.live/webfiles/kisiselverilerinislenmesi.pdf" title="KVK Politikası" class="KVK Politikası">KVK Politikası</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="https://statik.yamakiro.live/webfiles/bilgi-guvenligi-politikasi.pdf" title="Bilgi Güvenliği Politikası" class="Bilgi Güvenliği Politikası">Bilgi Güvenliği Politikası</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="https://statik.yamakiro.live/webfiles/veri-sahibi-basvuru-formu.pdf" title="Veri Sahibi Başvuru Formu" class="Veri Sahibi Başvuru Formu">Veri Sahibi Başvuru Formu</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="" title="Çerez Yönetimi" class="Çerez Yönetimi">Çerez Yönetimi</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="https://statik.yamakiro.live/webfiles/cerez-politikasi-1-12-2025.pdf" title="Çerez Politikası" class="Çerez Politikası">Çerez Politikası</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="/content/vestel-kullanim-kosullari" title="Garanti ve Kullanım Koşulları" class="Garanti ve Kullanım Koşulları">Garanti ve Kullanım Koşulları</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="/content/yetkili-online-bayi" title="Vestel Yetkili Online Bayi" class="Vestel Yetkili Online Bayi">Vestel Yetkili Online Bayi</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="/content/sadakatprogrami" title="Vestel Sadakat Program" class="Vestel Sadakat Program">Vestel Sadakat Program</a> </p> </li> </ul> </div> <div class="footer-column__group"> <h3> <a rel="noopener noreferrer" href="https://vestelinternational.com/tr">VESTEL INTERNATIONAL</a> </h3> </div> </div> <script>(function () { var MQ = '(max-width: 768px)'; function isMobile() { return window.matchMedia(MQ).matches; } function syncGroup(group) { var panel = group.querySelector('.footer-column__panel'); var toggle = group.querySelector('.footer-column__toggle'); if (!panel || !toggle) return; if (isMobile()) { var open = group.classList.contains('is-open'); panel.hidden = !open; toggle.setAttribute('aria-expanded', open ? 'true' : 'false'); } else { panel.hidden = false; group.classList.remove('is-open'); toggle.setAttribute('aria-expanded', 'true'); } } function syncAll() { document .querySelectorAll('.footer-column__group--collapsible') .forEach(syncGroup); } if (!window.__footerColumnApiAccordionBound) { window.__footerColumnApiAccordionBound = true; document.addEventListener('click', function (event) { if (!isMobile()) return; var toggle = event.target.closest('.footer-column__toggle'); if (!toggle) return; var group = toggle.closest('.footer-column__group--collapsible'); if (!group) return; event.preventDefault(); group.classList.toggle('is-open'); syncGroup(group); }); window.matchMedia(MQ).addEventListener('change', syncAll); } syncAll(); })(); </script> </div> <div class="site-footer__column" data-block-id="Z71tZCG9K8KNMhatAavw2"> <div class="footer-column footer-column--api" data-footer-column-api> <div class="footer-column__group footer-column__group--collapsible"> <h3> <button type="button" class="footer-column__toggle" aria-expanded="false" > <span class="footer-column__toggle-text">VESTEL KATALOGLAR</span> <span class="footer-column__chevron" aria-hidden="true"></span> </button> <a class="footer-column__heading-link" rel="noopener noreferrer" href="" >VESTEL KATALOGLAR</a> </h3> <ul class="footer-column__panel"> <li> <p> <a rel="noopener noreferrer" href="https://statik.yamakiro.live/webfiles/be-katalog-241224.pdf" title="Beyaz Eşya Katalog">Beyaz Eşya Katalog</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="https://statik.yamakiro.live/webfiles/ankastrekatalog-22-04-25.pdf" title="Ankastre Katalog">Ankastre Katalog</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="https://statik.yamakiro.live/webfiles/vestel-tv-katalog.pdf" title="Tüketici Elektroniği Katalog">Tüketici Elektroniği Katalog</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="https://statik.yamakiro.live/webfiles/vestel-retro-katalog.pdf" title="Retro Katalog">Retro Katalog</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="https://statik.yamakiro.live/webfiles/enerji-sinifi-brosuru.pdf" title="Enerji Sınıfı Broşür">Enerji Sınıfı Broşür</a> </p> </li> </ul> </div> <div class="footer-column__group footer-column__group--collapsible"> <h3> <button type="button" class="footer-column__toggle" aria-expanded="false" > <span class="footer-column__toggle-text">VESTEL AYLIK BROŞÜRLER</span> <span class="footer-column__chevron" aria-hidden="true"></span> </button> <a class="footer-column__heading-link" rel="noopener noreferrer" href="https://www.yamakiro.live/content/aylik-fiyat-brosurleri" >VESTEL AYLIK BROŞÜRLER</a> </h3> <ul class="footer-column__panel"> <li> <p> <a rel="noopener noreferrer" href="https://statik.yamakiro.live/webfiles/be-ekim-26-foy.pdf" title="Beyaz Eşyalar">Beyaz Eşyalar</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="https://statik.yamakiro.live/webfiles/ank-ekim-26-foy.pdf" title="Ankastre Ürünler">Ankastre Ürünler</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="https://statik.yamakiro.live/webfiles/iot-ekim-26-foy.pdf" title="Mobil ve Akıllı Ürünler">Mobil ve Akıllı Ürünler</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="https://statik.yamakiro.live/webfiles/ekim-tv-26-foy.pdf" title="Tüketici Elektroniği">Tüketici Elektroniği</a> </p> </li> <li> <p> <a rel="noopener noreferrer" href="https://statik.yamakiro.live/webfiles/kea-ekim-26-foy.pdf" title="Küçük Ev Aletleri ve Süpürgeler">Küçük Ev Aletleri ve Süpürgeler</a> </p> </li> </ul> </div> <div class="footer-column__group footer-column__group--collapsible"> <h3> <button type="button" class="footer-column__toggle" aria-expanded="false" > <span class="footer-column__toggle-text">GÜVENLİK BİLGİLERİ</span> <span class="footer-column__chevron" aria-hidden="true"></span> </button> <a class="footer-column__heading-link" rel="noopener noreferrer" href="" >GÜVENLİK BİLGİLERİ</a> </h3> <ul class="footer-column__panel"> <li> <p> <a rel="noopener noreferrer" href="" title="SSL 3D Secure ile Güvenli Ödeme">SSL 3D Secure ile Güvenli Ödeme</a> </p> </li> </ul> </div> </div> <script>(function () { var MQ = '(max-width: 768px)'; function isMobile() { return window.matchMedia(MQ).matches; } function syncGroup(group) { var panel = group.querySelector('.footer-column__panel'); var toggle = group.querySelector('.footer-column__toggle'); if (!panel || !toggle) return; if (isMobile()) { var open = group.classList.contains('is-open'); panel.hidden = !open; toggle.setAttribute('aria-expanded', open ? 'true' : 'false'); } else { panel.hidden = false; group.classList.remove('is-open'); toggle.setAttribute('aria-expanded', 'true'); } } function syncAll() { document .querySelectorAll('.footer-column__group--collapsible') .forEach(syncGroup); } if (!window.__footerColumnApiAccordionBound) { window.__footerColumnApiAccordionBound = true; document.addEventListener('click', function (event) { if (!isMobile()) return; var toggle = event.target.closest('.footer-column__toggle'); if (!toggle) return; var group = toggle.closest('.footer-column__group--collapsible'); if (!group) return; event.preventDefault(); group.classList.toggle('is-open'); syncGroup(group); }); window.matchMedia(MQ).addEventListener('change', syncAll); } syncAll(); })(); </script> <div class="site-footer__payment-wrapper"> <div class="site-footer__payment" data-block-id="70JSgCqu6JKV4jXiyaRNK"><div class="footer-payment-wrapper footer-payment--center"> <div class="footer-payment-inner"> <p></p><p></p> <div class="footer-payment"> <a href="#"> <img src="https://statics.yamakiro.live/template/ecb0f6f3-ef41-4dac-99e8-8c0a2e96c6e8.png" alt="" width="70"> </a> <a href="#"> <img src="https://statics.yamakiro.live/template/6a1b6aa2-2113-4c3d-b069-8c98578a3170.png" alt="" width="70"> </a> <a href="#"> <img src="https://statics.yamakiro.live/template/4df947b6-27df-4812-8ce4-1a3eccd38dc5.png" alt="" width="70"> </a> <a href="https://www.guvendamgasi.org.tr/view/uye/detay.php?Guid=dd7e5dbd-f42f-11eb-9a40-48df373f4850"> <img src="https://statics.yamakiro.live/template/6366181b-e319-454a-87e4-39d078bb68b5.png" alt="" width="70"> </a> </div> </div> </div> </div> </div> </div> </div> <div class="site-footer__copyright"> Copyright © 2020 </div> </div> </div> </div><style data-section-css="kDF-0TOLNoFfzXSo_uTNo">.cookie-banner-container.active { position: fixed; display: block; z-index: 999999; } .cookie-banner-container{ position: relative; display: none; left: 0; right: 0; bottom: 0; width: 100vw; height: 100vh; } .cookie-overlay { display: none; position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; background: rgba(0, 0, 0, 0.5); pointer-events: none; } .cookie-overlay.active { display: block; z-index: 999999; } .cookie-popup { position: fixed; display: none; top: 0; left: 0; width: 400px; height: 100vh; background: #fff; box-shadow: 5px 0 20px rgba(0,0,0,.15); padding: 24px; overflow-y: auto; } .cookie-popup.active { display: block; z-index: 999999; } .cookie-popup-close { position: sticky; top: 0; float: right; font-size: 22px; cursor: pointer; background: #fff; z-index: 1; } .cookie-popup-title { font-size: 15px; font-weight: 700; margin-bottom: 10px; } .cookie-popup-text { font-size: 12px; line-height: 1.6; margin-bottom: 18px; } .cookie-popup-actions { display: flex; align-items: center; justify-content: center; gap: 16px; margin-top:16px; } .cookie-popup-checkbox { display: flex; align-items: center; gap: 8px; font-size: 12px; font-weight: 700; margin-bottom: 0; cursor: pointer; } .cookie-popup-checkbox input[type="checkbox"] { appearance: none; -webkit-appearance: none; width: 16px; height: 16px; min-width: 16px; border: 2px solid #ccc; border-radius: 3px; cursor: pointer; position: relative; } .cookie-popup-checkbox input[type="checkbox"].checked { background-color: #e21b2d; border-color: #e21b2d; } .cookie-popup-checkbox input[type="checkbox"].checked::after { content: ""; position: absolute; left: 3px; top: 0px; width: 5px; height: 9px; border: 2px solid #fff; border-top: none; border-left: none; transform: rotate(45deg); } .cookie-popup-save { background: #e21b2d; color: #fff; border: 0; padding: 11px 20px; font-size: 12px; font-weight: 700; cursor: pointer; } @media (max-width: 768px) { .cookie-popup { width: 90%; height: 75vh; top: 50%; left: 50%; transform: translate(-50%, -50%); } } /* ---- First-shown consent banner ---- */ .cookie-banner { position: fixed; left: 0; right: 0; bottom: 0; display: none; align-items: center; gap: 32px; box-shadow: 0 -4px 20px rgba(0, 0, 0, 0.15); width: 80%; max-width: 80%; margin: 0 auto; background-color: #fbfbfb; border: 1px solid #888; padding: 35px 35px 10px; } .cookie-banner.active { display: flex; z-index: 999999; } .cookie-banner-body { flex: 1; min-width: 0; } .cookie-banner-head { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; color: #1a1a1a; } .cookie-banner-icon svg { display: block; } .cookie-banner-title { font-family: "League Medium", sans-serif; font-size: 1vw; text-align: left; line-height: 20px; } .cookie-banner-text { font-family: "League Medium", sans-serif; font-size: 1vw; text-align: left; line-height: 20px; color: #333; } .cookie-banner-text a { color: #e21b2d; text-decoration: underline; } .cookie-banner-actions { flex: 0 0 auto; display: flex; flex-direction: column; } .cookie-banner-actions button { width: 150px; border: none; background: #ef0006; color: #fff; height: 45px; font-family: "League Medium", sans-serif; display: inline-block; text-align: center; line-height: 45px; margin: 7px 0; font-size: 16px; } @media (min-width: 992px) { .cookie-banner-text, .cookie-banner-title { font-size: 1vw; } } @media (max-width: 992px) { .cookie-banner-text, .cookie-banner-title { font-size: 1.6vw; } .cookie-banner { width: 100% !important; max-width: 100% !important; } } @media (max-width: 768px) { .cookie-banner { flex-direction: column; align-items: stretch; gap: 16px; width: 100%; max-width: 100%; padding: 25px 25px; text-align: justify; } .cookie-banner-actions { flex-direction: row-reverse; justify-content: center; flex-wrap: nowrap; column-gap: 15px; } .cookie-banner-actions button { flex: 1 0 30%; margin: 0; height: 30px; line-height: 30px; font-size: 13px; width: 30% !important; min-width: initial; } .cookie-banner-title{ font-size: 2.7vw; line-height: 2.7vw; } .cookie-banner-text{ font-size: 2.7vw; line-height: 2.7vw; text-align: justify; } }</style><style data-block-css="QhR8snywOFKYCLuIpRPXF">.cookie-popup-item { border-bottom: 1px solid #eee; font-size: 13px; font-weight: 700; letter-spacing: .4px; cursor: pointer; padding: 14px 0; } .cookie-popup-item-header { position: relative; padding-right: 32px; } .cookie-popup-item-header::after { content: "›"; font-size: 28px; font-weight: 300; position: absolute; right: 0; top: 50%; transform: translateY(-50%); transition: transform 0.2s ease; line-height: 1; } .cookie-popup-item.open .cookie-popup-item-header::after { transform: translateY(-50%) rotate(90deg); color:#dc3c3c; } .cookie-popup-item-title { display: block; } .cookie-popup-switch { position: relative; display: inline-block; width: 40px; height: 22px; flex-shrink: 0; cursor: pointer; } .cookie-popup-switch input { position: absolute; opacity: 0; width: 100%; height: 100%; margin: 0; cursor: pointer; z-index: 1; pointer-events: auto !important; } .cookie-popup-switch-slider { position: absolute; top: 0; left: 0; right: 0; bottom: 0; background-color: #ccc; border-radius: 22px; transition: background-color 0.3s; } .cookie-popup-switch-slider::before { content: ""; position: absolute; width: 16px; height: 16px; left: 3px; top: 3px; background-color: #fff; border-radius: 50%; transition: transform 0.3s; } .cookie-popup-switch.active .cookie-popup-switch-slider { background-color: #dc3c3c; } .cookie-popup-switch.active .cookie-popup-switch-slider::before { transform: translateX(18px); } .cookie-popup-item-description { display: none; align-items: flex-start; justify-content: space-between; gap: 10px; font-size: 12px; font-weight: 400; line-height: 1.6; margin-top: 10px; color: #444; } .cookie-popup-item.open .cookie-popup-item-description { display: flex; } </style><style data-block-css="VOzrsPYoCz8Rr-Xbq7lRH">.cookie-popup-item { border-bottom: 1px solid #eee; font-size: 13px; font-weight: 700; letter-spacing: .4px; cursor: pointer; padding: 14px 0; } .cookie-popup-item-header { position: relative; padding-right: 32px; } .cookie-popup-item-header::after { content: "›"; font-size: 28px; font-weight: 300; position: absolute; right: 0; top: 50%; transform: translateY(-50%); transition: transform 0.2s ease; line-height: 1; } .cookie-popup-item.open .cookie-popup-item-header::after { transform: translateY(-50%) rotate(90deg); color:#dc3c3c; } .cookie-popup-item-title { display: block; } .cookie-popup-switch { position: relative; display: inline-block; width: 40px; height: 22px; flex-shrink: 0; cursor: pointer; } .cookie-popup-switch input { position: absolute; opacity: 0; width: 100%; height: 100%; margin: 0; cursor: pointer; z-index: 1; pointer-events: auto !important; } .cookie-popup-switch-slider { position: absolute; top: 0; left: 0; right: 0; bottom: 0; background-color: #ccc; border-radius: 22px; transition: background-color 0.3s; } .cookie-popup-switch-slider::before { content: ""; position: absolute; width: 16px; height: 16px; left: 3px; top: 3px; background-color: #fff; border-radius: 50%; transition: transform 0.3s; } .cookie-popup-switch.active .cookie-popup-switch-slider { background-color: #dc3c3c; } .cookie-popup-switch.active .cookie-popup-switch-slider::before { transform: translateX(18px); } .cookie-popup-item-description { display: none; align-items: flex-start; justify-content: space-between; gap: 10px; font-size: 12px; font-weight: 400; line-height: 1.6; margin-top: 10px; color: #444; } .cookie-popup-item.open .cookie-popup-item-description { display: flex; } </style><style data-block-css="hdraZ3K69A49LznDDEg0p">.cookie-popup-item { border-bottom: 1px solid #eee; font-size: 13px; font-weight: 700; letter-spacing: .4px; cursor: pointer; padding: 14px 0; } .cookie-popup-item-header { position: relative; padding-right: 32px; } .cookie-popup-item-header::after { content: "›"; font-size: 28px; font-weight: 300; position: absolute; right: 0; top: 50%; transform: translateY(-50%); transition: transform 0.2s ease; line-height: 1; } .cookie-popup-item.open .cookie-popup-item-header::after { transform: translateY(-50%) rotate(90deg); color:#dc3c3c; } .cookie-popup-item-title { display: block; } .cookie-popup-switch { position: relative; display: inline-block; width: 40px; height: 22px; flex-shrink: 0; cursor: pointer; } .cookie-popup-switch input { position: absolute; opacity: 0; width: 100%; height: 100%; margin: 0; cursor: pointer; z-index: 1; pointer-events: auto !important; } .cookie-popup-switch-slider { position: absolute; top: 0; left: 0; right: 0; bottom: 0; background-color: #ccc; border-radius: 22px; transition: background-color 0.3s; } .cookie-popup-switch-slider::before { content: ""; position: absolute; width: 16px; height: 16px; left: 3px; top: 3px; background-color: #fff; border-radius: 50%; transition: transform 0.3s; } .cookie-popup-switch.active .cookie-popup-switch-slider { background-color: #dc3c3c; } .cookie-popup-switch.active .cookie-popup-switch-slider::before { transform: translateX(18px); } .cookie-popup-item-description { display: none; align-items: flex-start; justify-content: space-between; gap: 10px; font-size: 12px; font-weight: 400; line-height: 1.6; margin-top: 10px; color: #444; } .cookie-popup-item.open .cookie-popup-item-description { display: flex; } </style><div class="section-kDF-0TOL" data-section-id="kDF-0TOLNoFfzXSo_uTNo"> <div class="cookie-banner-container"> <div class="cookie-overlay"></div> <div class="cookie-banner"> <div class="cookie-banner-body"> <div class="cookie-banner-head"> <span class="cookie-banner-icon" aria-hidden="true"><img alt="" height="35" src="https://statics.yamakiro.live/contents/images/vestel/cookie-icon-new.png" width="35"></span> <span class="cookie-banner-title">Çerez Politikası</span> </div> <div class="cookie-banner-text">Size daha iyi ve kişiselleştirilmiş bir hizmet sunabilmek için internet sitemizde çerezler kullanıyoruz. Bu çerezlerin kabul edilmesi halinde, size özel alışveriş deneyimi sunabilir, sitemizin performansını iyileştirebilir, kullanıcı davranışlarını analiz edebilir ve kişiselleştirilmiş reklam faaliyetleri gerçekleştirebiliriz. "Kabul Et" butonuna tıkladığınızda, bu amaçlar doğrultusunda çerezlerin kullanılmasını kabul etmiş olursunuz. Detaylı bilgi için <a href="https://statik.yamakiro.live/webfiles/Cerez-Politikasi-Vestel.pdf" rel="noreferrer" target="_blank">Çerez Politikamızı</a> inceleyebilirsiniz ve "Çerezleri Yönet" seçeneği ile her zaman tercihlerinizi güncelleyebilirsiniz.</div> </div> <div class="cookie-banner-actions"> <button type="button" class="cookie-banner-accept">Kabul Et</button> <button type="button" class="cookie-banner-reject">Reddet</button> <button type="button" class="cookie-banner-manage">Çerezleri Yönet</button> </div> </div> <div class="cookie-popup" > <div class="cookie-popup-close">×</div> <div class="cookie-popup-title">GİZLİLİĞİNİZ</div> <div class="cookie-popup-text"><p>Vestel Ticaret Anonim Şirket’i tarafından internet sitemizde kullanılan çerezleri her zaman kontrol edebilirsiniz. Eğer çerezlerin kullanımını kabul etmiyorsanız doğrudan aşağıdaki “Kaydet” butonunu tıklayabilirsiniz. Çerezlere ilişkin detaylı bilgiye <a target="_blank" rel="noopener noreferrer" href="https://statik.yamakiro.live/webfiles/Cerez-Politikasi-Vestel.pdf">Çerez Politikası</a>’ndan ulaşabilirsiniz.</p><p></p><p>İnternet sitemizin ana fonksiyonlarını yerine getirebilmek için teknik olarak gerekli çerezler kullanıldığını belirtmek isteriz. Bu çerezlerin kullanımı teknik olarak web sitemizin doğru bir şekilde çalışması için zorunlu olmasına binaen sizlerin onayına bağlı değildir. Çerezler 1. Taraf olup, cihazınızda 540 gün süre ile tutulmaktadır.</p></div> <div class="cookie-popup-item"> <div class="cookie-popup-item-header"> <span class="cookie-popup-item-title">İşlevsellik ve Tercih Çerezleri</span> </div> <div class="cookie-popup-item-description"> İşlevsellik çerezleri olarak da bilinin tercih çerezleri internet sitesinin kullanılan dil veya tercih edilen bölge veya otomatik olarak girişi sağlayan kullanıcı adı ve şifre gibi geçmişteki tercihlerinizin hatırlanmasını sağlayan çerezlerdir. Çerezler 1. Taraf olup, cihazınızda 30 gün Süre tutulmaktadır. İşlevsellik ve tercih çerezlerinin kullanımına onay vermeniz halinde kişisel verileriniz hizmet sağlayıcılarımıza aktarılacaktır. <label class="cookie-popup-switch js-choice-cookie"> <input type="checkbox"> <span class="cookie-popup-switch-slider"></span> </label> </div> </div> <div class="cookie-popup-item"> <div class="cookie-popup-item-header"> <span class="cookie-popup-item-title">Performans ve Analiz Çerezleri</span> </div> <div class="cookie-popup-item-description"> Performans çerezleri olarak da bilinen istatistik çerezleri internet sitesinin nasıl kullanıldığı, hangi sayfaların ziyaret edildiği veya hangi linklerin kullanıldığına ilişkin bilgilere ilişkindir. Bu çerezlerin temel amacı internet sitesinin gelişmesinin sağlanması olup, internet sitesine özgü de olsa 3. parti analitik çerezleri de içerebilecektir. Çerezler 1. Ve 3. Taraf olup, cihazınızda 2 yıl Süre tutulmaktadır. Performans ve analiz çerezlerinin kullanımına onay vermeniz halinde kişisel verileriniz hizmet sağlayıcılarımıza aktarılacaktır. <label class="cookie-popup-switch js-statistics-cookie"> <input type="checkbox"> <span class="cookie-popup-switch-slider"></span> </label> </div> </div> <div class="cookie-popup-item"> <div class="cookie-popup-item-header"> <span class="cookie-popup-item-title">Hedefleme veya Reklam Çerezleri</span> </div> <div class="cookie-popup-item-description"> Bu çerezler, kullanıcıların online davranışlarını takip ederek kişiselleştirilmiş reklamların sunulmasını sağlar. Toplanan bilgiler diğer reklam veren üçüncü taraflarla da paylaşılabilir. Çerezler 3. taraf olup, cihazınızda 2 yıl süreyle tutulmaktadır. Ayrıca onay vermeniz halinde yapay zekâ tabanlı bir kişiselleştirme aracı da kullanılacaktır. Bu araç, internet sitesindeki gezinme hareketlerinizi ve üyelik durumunuzu analiz ederek size özel indirim veya kampanya gösterilip gösterilmeyeceğine otomatik olarak karar verebilir. Bu işlem profil oluşturma ve otomatik karar verme faaliyetlerini içerir. Bu seçeneği devre dışı bırakırsanız, internet sitesini tarafsız (yapay zekâ kullanılmadan) deneyimleyebilirsiniz. <label class="cookie-popup-switch js-marketing-cookie"> <input type="checkbox"> <span class="cookie-popup-switch-slider"></span> </label> </div> </div> <div class="cookie-popup-actions"> <div class="cookie-save-area"> <button class="cookie-popup-save">Kaydet</button></div> <div class="cookie-checkbox-area"><label class="cookie-popup-checkbox"> <input type="checkbox" class="js-accept-all accept-all-cookie"> Tüm Çerezlerin Kullanımını Kabul Et </label> <label class="cookie-popup-checkbox"> <input type="checkbox" class="js-reject-all reject-all-cookie"> Tüm Çerezlerin Kullanımını Reddet </label> </div> </div> </div> </div> </div><script data-section-js="kDF-0TOLNoFfzXSo_uTNo">document.addEventListener("DOMContentLoaded", function () { //var cookieBtn = document.querySelector(".js-select-cookie"); var cookieBtn = document.querySelector('[class="Çerez Yönetimi"]') var cookiePopup = document.querySelector(".cookie-popup"); var cookieCloseBtn = document.querySelector(".cookie-popup-close"); var cookieOverlay = document.querySelector(".cookie-overlay"); var saveBtn = document.querySelector(".cookie-popup-save"); var cookieBannerContainer = document.querySelector(".cookie-banner-container"); var cookieBanner = document.querySelector(".cookie-banner"); var bannerAccept = document.querySelector(".cookie-banner-accept"); var bannerReject = document.querySelector(".cookie-banner-reject"); var bannerManage = document.querySelector(".cookie-banner-manage"); var cookieOption = { denied: "Denied", granted: "Granted", eventDefault: "default", eventUpdated: "update", choiceCookieName: "choice_cookie", statisticsCookieName: "statistics_cookie", marketingCookieName: "marketing_cookie" }; function setCookie(c_name, value, exdays) { var exdate = new Date(); exdate.setDate(exdate.getDate() + exdays); var c_value = escape(value) + ((exdays == null) ? "" : "; expires=" + exdate.toUTCString()); document.cookie = c_name + "=" + c_value + "; path=/"; } function getCookie(c_name) { var i, x, y, ARRcookies = document.cookie.split(";"); for (i = 0; i < ARRcookies.length; i++) { x = ARRcookies[i].substr(0, ARRcookies[i].indexOf("=")); y = ARRcookies[i].substr(ARRcookies[i].indexOf("=") + 1); x = x.replace(/^\s+|\s+$/g, ""); if (x == c_name) { return unescape(y); } } } function deleteCookie(c_name) { var date = new Date(); date.setDate(date.getDate() - 1); document.cookie = escape(c_name) + "=;expires=" + date; } function DataLayerPushCookies(functionality, analytics, marketing, event) { if (typeof gtag === "undefined") return; gtag("consent", event, { "functionality_storage": functionality, "analytics_storage": analytics, "ad_storage": marketing, "ad_user_data": marketing, "ad_personalization": marketing }); } function datalayerCookiesEvent() { if (!getCookie(cookieOption.choiceCookieName) || !getCookie(cookieOption.statisticsCookieName) || !getCookie(cookieOption.marketingCookieName)) { return cookieOption.eventDefault; } return cookieOption.eventUpdated; } function getSwitchValue(className) { var sw = document.querySelector("." + className); return sw && sw.classList.contains("active") ? cookieOption.granted : cookieOption.denied; } function setCookieSelection(choice, statistics, marketing) { var choiceEl = document.querySelector(".js-choice-cookie"); var statisticsEl = document.querySelector(".js-statistics-cookie"); var marketingEl = document.querySelector(".js-marketing-cookie"); var acceptAllEl = document.querySelector(".accept-all-cookie"); var rejectAllEl = document.querySelector(".reject-all-cookie"); if (choiceEl) choiceEl.classList.toggle("active", choice.toLowerCase() == cookieOption.granted.toLowerCase()); if (statisticsEl) statisticsEl.classList.toggle("active", statistics.toLowerCase() == cookieOption.granted.toLowerCase()); if (marketingEl) marketingEl.classList.toggle("active", marketing.toLowerCase() == cookieOption.granted.toLowerCase()); var allAccepted = [choice, statistics, marketing].every(function(v) { return v.toLowerCase() == cookieOption.granted.toLowerCase(); }); var allRejected = [choice, statistics, marketing].every(function(v) { return v.toLowerCase() == cookieOption.denied.toLowerCase(); }); if (acceptAllEl) acceptAllEl.classList.toggle("checked", allAccepted); if (rejectAllEl) rejectAllEl.classList.toggle("checked", allRejected); } function openPopup(e) { // When triggered from a link with no real destination, don't navigate. if (e && e.currentTarget) { var href = e.currentTarget.getAttribute("href"); if (!href || href === "#") e.preventDefault(); } if (!cookiePopup) return; cookiePopup.classList.add("active"); if (cookieOverlay) cookieOverlay.classList.add("active"); } function closePopup() { if (!cookiePopup) return; cookiePopup.classList.remove("active"); if (cookieOverlay) cookieOverlay.classList.remove("active"); } function showBanner() { if (cookieBannerContainer) cookieBannerContainer.classList.add("active"); if (cookieBanner) cookieBanner.classList.add("active"); if (cookieOverlay) cookieOverlay.classList.add("active"); } function hideBanner() { if (cookieBannerContainer) cookieBannerContainer.classList.remove("active"); if (cookieBanner) cookieBanner.classList.remove("active"); if (cookieOverlay) cookieOverlay.classList.remove("active"); } if (cookieBtn && cookiePopup) { cookieBtn.addEventListener("click", openPopup); } if (cookieCloseBtn) { cookieCloseBtn.addEventListener("click", closePopup); } document.querySelectorAll(".cookie-popup-item-header").forEach(function(header) { header.addEventListener("click", function() { this.closest(".cookie-popup-item").classList.toggle("open"); }); }); var switches = document.querySelectorAll(".cookie-popup-switch"); var acceptAll = document.querySelector(".js-accept-all"); var rejectAll = document.querySelector(".js-reject-all"); function syncCheckboxes() { var allActive = Array.from(switches).every(function(sw) { return sw.classList.contains("active"); }); var noneActive = Array.from(switches).every(function(sw) { return !sw.classList.contains("active"); }); if (acceptAll) acceptAll.classList.toggle("checked", allActive); if (rejectAll) rejectAll.classList.toggle("checked", noneActive); } switches.forEach(function(sw) { sw.addEventListener("click", function(e) { e.stopPropagation(); this.classList.toggle("active"); syncCheckboxes(); }); }); if (acceptAll) { acceptAll.addEventListener("click", function() { switches.forEach(function(sw) { sw.classList.add("active"); }); acceptAll.classList.add("checked"); if (rejectAll) rejectAll.classList.remove("checked"); }); } if (rejectAll) { rejectAll.addEventListener("click", function() { switches.forEach(function(sw) { sw.classList.remove("active"); }); rejectAll.classList.add("checked"); if (acceptAll) acceptAll.classList.remove("checked"); }); } if (saveBtn) { saveBtn.addEventListener("click", function() { var choice = getSwitchValue("js-choice-cookie"); var statistics = getSwitchValue("js-statistics-cookie"); var marketing = getSwitchValue("js-marketing-cookie"); var event = datalayerCookiesEvent(); setCookie(cookieOption.choiceCookieName, choice, 30); setCookie(cookieOption.statisticsCookieName, statistics, 30); setCookie(cookieOption.marketingCookieName, marketing, 30); DataLayerPushCookies(choice, statistics, marketing, event); closePopup(); }); } // Consent banner (shown first): "Çerezleri Yönet" opens the detailed popup; // "Kabul Et" / "Reddet" set every switch then fire the save (cookie-popup-save). if (bannerManage) { bannerManage.addEventListener("click", function() { hideBanner(); openPopup(); }); } if (bannerAccept) { bannerAccept.addEventListener("click", function() { switches.forEach(function(sw) { sw.classList.add("active"); }); syncCheckboxes(); if (saveBtn) saveBtn.click(); hideBanner(); }); } if (bannerReject) { bannerReject.addEventListener("click", function() { switches.forEach(function(sw) { sw.classList.remove("active"); }); syncCheckboxes(); if (saveBtn) saveBtn.click(); hideBanner(); }); } var savedChoice = getCookie(cookieOption.choiceCookieName); var savedStatistics = getCookie(cookieOption.statisticsCookieName); var savedMarketing = getCookie(cookieOption.marketingCookieName); if (savedChoice && savedStatistics && savedMarketing) { setCookieSelection(savedChoice, savedStatistics, savedMarketing); } else { showBanner(); } }); </script><style data-section-css="Hijrh-M_40J8jJxwks304">/* as-is ile birebir aynı: GIF tabanlı loading, CSS spinner değil. display:none (gizli) / display:table (gösterilirken) ayrımı script.js tarafından yönetilir — bkz. show()/hide(). z-index çok yüksek (as-is değeri) tutuluyor ki popup'lar dahil hiçbir şeyin üzerinde tıklanamasın: position:fixed + tam ekran + bu z-index, altındaki her şeyi tıklanamaz kılar. */ .custom-loading-div { display: none; opacity: 0.5; background-color: #fff; position: fixed; width: 100%; height: 100%; left: 0; top: 0; z-index: 999999999; background-image: url(https://www.yamakiro.live/assets/img/vestel-loader.gif); background-repeat: no-repeat; background-position: center; } </style><div class="section-Hijrh-M_" data-section-id="Hijrh-M_40J8jJxwks304"><!-- Global loading overlay, added once (footer, global section) and reused by any block/section on any page via the window.tbLoading.show()/hide() hook — no need to add loading markup to every block that needs one. Class adı bilerek "custom-loading-div" — as-is'in kendi legacy class'ı ve bazı script'ler (product-information, index-bootstrap) bunu doğrudan jQuery ile ($(".custom-loading-div").show()/.hide()) çağırıyor; onlar değişmeden çalışmaya devam etsin diye class adı korunuyor. --> <div class="custom-loading-div"></div> </div><script data-section-js="Hijrh-M_40J8jJxwks304">document.addEventListener("DOMContentLoaded", function () { var el = document.querySelector(".custom-loading-div"); if (!el || el.__tbLoadingInit) { return; } el.__tbLoadingInit = true; // Global hook — herhangi bir blok/section'ın script'i kendi loading // markup'ini eklemeden bunu cagirabilir: window.tbLoading.show() / hide() // display:table as-is'teki gosterilirken kullanilan deger (bkz. style.css). function show() { el.style.display = "table"; } function hide() { el.style.display = "none"; } window.tbLoading = { show: show, hide: hide }; }); </script><style data-section-css="pnyzl91yv5L3mRgcyB0q-">.tb-popup { position: fixed; inset: 0; z-index: 99999; display: flex; align-items: center; justify-content: center; padding: 20px; } .tb-popup[hidden] { display: none; } .tb-popup__overlay { position: absolute; inset: 0; background: rgba(0, 0, 0, 0.45); } .tb-popup__box { position: relative; display: flex; flex-direction: column; align-items: center; gap: 20px; width: 100%; max-width: 420px; box-sizing: border-box; padding: 48px 40px 40px; background: #fff; text-align: center; } .tb-popup__close { position: absolute; top: -48px; right: 0px; display: flex; align-items: center; justify-content: center; width: 48px; height: 48px; background: #fff; border: none; cursor: pointer; color: #1a1a1a; } .tb-popup__close svg { width: 20px; height: 20px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; } /* İkon: favorilere ekle/çıkar popup'uyla (pfc-popup) birebir aynı stil — düz renkli çember + stroke ikon, arka plan yok. */ .tb-popup__icon { display: inline-block; width: 76px; height: 76px; margin-bottom: 4px; } .tb-popup__icon:empty { display: none; } .tb-popup__icon svg { width: 100%; height: 100%; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; } .tb-popup__icon[data-type="success"] { color: #4caf50; } .tb-popup__icon[data-type="error"] { color: #e30613; } .tb-popup__icon[data-type="warning"] { color: #d97706; } .tb-popup__icon[data-type="info"] { color: #2563eb; } .tb-popup__title { margin: 0; font-size: 15px; font-weight: 700; color: #1a1a1a; } .tb-popup__title:empty { display: none; } .tb-popup__text { margin: 0; max-width: 640px; font-size: 14px; line-height: 1.7; color: #444; } @media (max-width: 749px) { .tb-popup__box { padding: 40px 20px 28px; } .tb-popup__close { top: -46px; right: 0; } } </style><div class="section-pnyzl91y" data-section-id="pnyzl91yv5L3mRgcyB0q-"><!-- Global popup, added once (footer, global section) and reused by any block on any page via the window.tbPopup hook — no need to add popup markup to every block that wants to show one. --> <div class="tb-popup" hidden> <div class="tb-popup__overlay"></div> <div class="tb-popup__box" role="dialog" aria-modal="true"> <button type="button" class="tb-popup__close" aria-label="Kapat"> <svg viewBox="0 0 24 24" aria-hidden="true"> <path d="M6 6l12 12M18 6L6 18"/> </svg> </button> <span class="tb-popup__icon" aria-hidden="true"></span> <h3 class="tb-popup__title"></h3> <div class="tb-popup__text"></div> </div> </div> </div><script data-section-js="pnyzl91yv5L3mRgcyB0q-">document.addEventListener("DOMContentLoaded", function () { var popup = document.querySelector(".tb-popup"); if (!popup || popup.__tbPopupInit) { return; } popup.__tbPopupInit = true; var overlay = popup.querySelector(".tb-popup__overlay"); var closeBtn = popup.querySelector(".tb-popup__close"); var iconEl = popup.querySelector(".tb-popup__icon"); var titleEl = popup.querySelector(".tb-popup__title"); var textEl = popup.querySelector(".tb-popup__text"); var activeOnClose = null; // type -> ikon: 'success' | 'error' | 'warning' | 'info'. // success/error, favorilere ekle/çıkar popup'uyla (pfc-popup) aynı SVG'ler — // aynı görünüm tek yerden (bkz. product-favorite-compare/template.liquid). var ICONS = { success: '<svg viewBox="0 0 52 52"><circle cx="26" cy="26" r="24"/><path d="M15 27l8 8 15-16"/></svg>', error: '<svg viewBox="0 0 52 52"><circle cx="26" cy="26" r="24"/><path d="M26 14v18M26 38h.02"/></svg>', warning: '<svg viewBox="0 0 52 52"><circle cx="26" cy="26" r="24"/><path d="M26 14v18M26 38h.02"/></svg>', info: '<svg viewBox="0 0 52 52"><circle cx="26" cy="26" r="24"/><path d="M26 22v14"/><circle cx="26" cy="16" r="1.2" fill="currentColor" stroke="none"/></svg>' }; // Global hook — any block's script on any page can call this instead of // shipping its own popup markup: window.tbPopup.show({ type, title, message, onOpen, onClose }) function show(options) { options = options || {}; var type = options.type || "success"; iconEl.innerHTML = ICONS[type] || ICONS.success; iconEl.setAttribute("data-type", type); if (titleEl) { titleEl.textContent = options.title || ""; } textEl.innerHTML = options.message || ""; activeOnClose = typeof options.onClose === "function" ? options.onClose : null; popup.hidden = false; document.body.style.overflow = "hidden"; if (typeof options.onOpen === "function") { options.onOpen(); } } function hide() { if (popup.hidden) { return; } popup.hidden = true; document.body.style.overflow = ""; var onClose = activeOnClose; activeOnClose = null; if (onClose) { onClose(); } } overlay.addEventListener("click", hide); closeBtn.addEventListener("click", hide); document.addEventListener("keydown", function (e) { if (e.key === "Escape" && !popup.hidden) { hide(); } }); window.tbPopup = { show: show, hide: hide }; }); </script></footer> <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/swiper@12/swiper-bundle.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/bxslider/4.2.17/jquery.bxslider.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.hoverintent/1.10.2/jquery.hoverIntent.min.js"></script> <script src="https://www.yamakiro.live/assets/scripts/amazon-cognito-identity.min.js"></script> <script src="https://www.yamakiro.live/assets/scripts/authentication.js"></script> <script src="https://www.yamakiro.live/assets/scripts/cognito.js"></script> <script src="https://www.yamakiro.live/assets/scripts/jquery.colorbox-min.js"></script> <script src="https://yamakiro.live/assets/scripts/ecom.js"></script> <script src="https://yamakiro.live/assets/scripts/attributeSelector.js"></script> <script>/* tb-popup-helper */ (function () { if (window.whenTbPopup) return; // çift yükleme koruması window.whenTbPopup = function (cb) { if (window.tbPopup) { cb(window.tbPopup); return; } var n = 0; var iv = setInterval(function () { if (window.tbPopup) { clearInterval(iv); cb(window.tbPopup); } else if (++n > 40) clearInterval(iv); // ~2sn sonra vazgeç }, 50); }; })(); /* theme-preview-bar */ (function () { function hasThemePreviewCookie() { return document.cookie.split(";").some(function (part) { return part.trim().indexOf("theme_preview=") === 0; }); } function mountPreviewBar() { if (!hasThemePreviewCookie() || document.getElementById("theme-preview-bar")) { return; } var exitUrl = (typeof window !== "undefined" && window.location && window.location.origin ? window.location.origin : "") + "/preview/exit"; var style = document.createElement("style"); style.id = "theme-preview-bar-styles"; style.textContent = "#theme-preview-bar{position:fixed;bottom:0;left:0;right:0;z-index:2147483647;display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:0.65rem 1.25rem;background:#111827;color:#f9fafb;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;font-size:0.875rem;line-height:1.25;box-shadow:0 2px 12px rgba(0,0,0,0.2);}" + "#theme-preview-bar strong{font-weight:600;}" + "#theme-preview-bar button{margin:0;padding:0.45rem 0.9rem;border:0;border-radius:999px;background:#ef4444;color:#fff;font:inherit;font-weight:600;cursor:pointer;}" + "#theme-preview-bar button:hover{background:#dc2626;}" + "html.theme-preview-active body{padding-top:48px !important;}"; var bar = document.createElement("div"); bar.id = "theme-preview-bar"; bar.setAttribute("role", "region"); bar.setAttribute("aria-label", "Ön izleme modu"); bar.innerHTML = '<span><strong>Ön İzleme Modu</strong> Şuanda yayında olmayan bir tema taslağını görüntülüyorsunuz.</span>' + '<button type="button" id="theme-preview-exit-btn">Ön İzlemeyi Kapat</button>'; bar.querySelector("#theme-preview-exit-btn")?.addEventListener("click", function () { window.location.href = exitUrl; }); document.documentElement.classList.add("theme-preview-active"); document.head.appendChild(style); document.body.insertBefore(bar, document.body.firstChild); } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", mountPreviewBar); } else { mountPreviewBar(); } })(); (function () { window.personaclick = window.personaclick || function () { (window.personaclick.q = window.personaclick.q || []).push(arguments) }; var c = "//cdn.personaclick.com", v = "/v3.js", s = { link: [{ href: c, rel: "dns-prefetch" }, { href: c, rel: "preconnect" }, { href: c + v, rel: "preload", as: "script" }], script: [{ src: c + v, async: "" }] }; Object.keys(s).forEach(function (c) { s[c].forEach(function (d) { var e = document.createElement(c), a; for (a in d) e.setAttribute(a, d[a]); document.head.appendChild(e) }) }); })(); personaclick("init", "88892e95dce07554d16505d1528f67"); // Google Analytics olmadığı durumlarda "dataLayer undefined" hatası alınmaması için eklendi window.dataLayer = window.dataLayer || []; function gtag() {dataLayer.push(arguments); }</script> </body> </html>