1/** 2 * DAİB â özel JS 3 * ----------------------------------------------------------------------------- 4 * 1) Mega menü panelini viewport'a hizala (soldan saÄa tam kapsama) 5 * 2) Alt logolar için Swiper slider (2sn autoplay + ok butonları) 6 */ 7( function () { 8 'use strict'; 9 10 /* --------------------------------------------------------------------- 11 * 1) Mega menü panel offset düzeltmesi 12 * Widget'ın viewport konumunu ölç, panele negatif left uygula ki 13 * panel viewport'un sol kenarından baÅlayıp 100vw kaplasın. 14 * -------------------------------------------------------------------- */ 15 function alignMegaPanels() { 16 var menus = document.querySelectorAll( '.elementor-widget-n-menu' ); 17 menus.forEach( function ( menu ) { 18 var panels = menu.querySelectorAll( '.e-n-menu-content' ); 19 if ( ! panels.length ) return; 20 var rect = menu.getBoundingClientRect(); 21 var leftOffset = -rect.left; // widget'ın soluna göre viewport'un solu 22 var scrollBar = window.innerWidth - document.documentElement.clientWidth; 23 var vw = document.documentElement.clientWidth; 24 panels.forEach( function ( panel ) { 25 panel.style.setProperty( 'left', leftOffset + 'px', 'important' ); 26 panel.style.setProperty( 'right', 'auto', 'important' ); 27 panel.style.setProperty( 'width', vw + 'px', 'important' ); 28 panel.style.setProperty( 'max-width', vw + 'px', 'important' ); 29 panel.style.setProperty( 'margin', '0', 'important' ); 30 } ); 31 } ); 32 } 33 34 /** 35 * Nav-menu ul'lerinin sütun düzenini link sayısına göre ayarla: 36 * â¤2 link â tek kolon (İletiÅim) 37 * 3+ link â 2 kolon column-major, satır sayısı = ceil(count / 2) 38 */ 39 function tuneNavColumns() { 40 var uls = document.querySelectorAll( '.elementor-widget-n-menu .e-n-menu-content ul.elementor-nav-menu' ); 41 uls.forEach( function ( ul ) { 42 var count = ul.querySelectorAll( ':scope > li' ).length; 43 ul.classList.remove( 'daib-single-col' ); 44 if ( count <= 2 ) { 45 ul.classList.add( 'daib-single-col' ); 46 ul.style.removeProperty( '--daib-nav-rows' ); 47 } else { 48 ul.style.setProperty( '--daib-nav-rows', Math.ceil( count / 2 ) ); 49 } 50 } ); 51 } 52 53 function scheduleAlign() { 54 alignMegaPanels(); 55 tuneNavColumns(); 56 setTimeout( function () { alignMegaPanels(); tuneNavColumns(); }, 100 ); 57 setTimeout( function () { alignMegaPanels(); tuneNavColumns(); }, 300 ); 58 setTimeout( function () { alignMegaPanels(); tuneNavColumns(); }, 800 ); 59 } 60 61 window.addEventListener( 'resize', scheduleAlign ); 62 window.addEventListener( 'orientationchange', scheduleAlign ); 63 64 // Hover / focus / click hepsi tetikleyicidir; delegasyon ile yakala 65 document.addEventListener( 'mouseover', function ( e ) { 66 if ( e.target.closest && e.target.closest( '.elementor-widget-n-menu' ) ) scheduleAlign(); 67 }, true ); 68 document.addEventListener( 'focusin', function ( e ) { 69 if ( e.target.closest && e.target.closest( '.elementor-widget-n-menu' ) ) scheduleAlign(); 70 }, true ); 71 document.addEventListener( 'click', function ( e ) { 72 if ( e.target.closest && e.target.closest( '.elementor-widget-n-menu' ) ) scheduleAlign(); 73 }, true ); 74 75 if ( document.readyState === 'loading' ) { 76 document.addEventListener( 'DOMContentLoaded', scheduleAlign ); 77 } else { 78 scheduleAlign(); 79 } 80 window.addEventListener( 'load', scheduleAlign ); 81 82 var HOST_SELECTOR = '.elementor-element-ae08f23'; 83 var AUTOPLAY_MS = 2000; 84 85 function ready( fn ) { 86 if ( document.readyState !== 'loading' ) fn(); 87 else document.addEventListener( 'DOMContentLoaded', fn ); 88 } 89 90 function waitForSwiper( cb, tries ) { 91 tries = tries || 0; 92 if ( typeof window.Swiper === 'function' ) return cb(); 93 if ( tries > 40 ) return; // ~4s, sonra vazgeç 94 setTimeout( function () { waitForSwiper( cb, tries + 1 ); }, 100 ); 95 } 96 97 function buildSlider() { 98 var host = document.querySelector( HOST_SELECTOR ); 99 if ( ! host ) return; 100 if ( host.dataset.daibSliderReady === '1' ) return; 101 102 // Elementor container'ın iç track'i 103 var track = host.querySelector( ':scope > .elementor-widget-wrap' ) || 104 host.querySelector( ':scope > .e-con-inner' ); 105 if ( ! track ) return; 106 107 // Halihazırda direkt çocukları slide olarak kullanalım 108 var slides = Array.prototype.slice.call( track.children ); 109 if ( slides.length === 0 ) return; 110 111 // Swiper markup'ına sar 112 var swiperWrap = document.createElement( 'div' ); 113 swiperWrap.className = 'swiper daib-logos-swiper'; 114 swiperWrap.innerHTML = 115 '<div class="swiper-wrapper"></div>' + 116 '<button class="swiper-button-prev daib-nav" type="button" aria-label="Ãnceki"></button>' + 117 '<button class="swiper-button-next daib-nav" type="button" aria-label="Sonraki"></button>'; 118 var wrapper = swiperWrap.querySelector( '.swiper-wrapper' ); 119
120 slides.forEach( function ( child ) { 121 var slide = document.createElement( 'div' ); 122 slide.className = 'swiper-slide daib-logo-slide'; 123 slide.appendChild( child ); // orijinal Elementor image widget'ı taÅı 124 wrapper.appendChild( slide ); 125 } ); 126 127 // Track'i boÅalt, Swiper'ı yerleÅtir 128 track.innerHTML = ''; 129 track.appendChild( swiperWrap ); 130 131 try { 132 new window.Swiper( swiperWrap, { 133 loop: true, 134 slidesPerView: 5, 135 spaceBetween: 40, 136 speed: 700, 137 autoplay: { 138 delay: AUTOPLAY_MS, 139 disableOnInteraction: false, 140 pauseOnMouseEnter: true, 141 }, 142 navigation: { 143 nextEl: swiperWrap.querySelector( '.swiper-button-next' ), 144 prevEl: swiperWrap.querySelector( '.swiper-button-prev' ), 145 }, 146 breakpoints: { 147 0: { slidesPerView: 2, spaceBetween: 20 }, 148 640: { slidesPerView: 3, spaceBetween: 24 }, 149 1024: { slidesPerView: 5, spaceBetween: 40 }, 150 }, 151 } ); 152 host.dataset.daibSliderReady = '1'; 153 } catch ( e ) { 154 // Swiper baÅarısız olursa track'i geri koymaya gerek yok; sessizce bekle 155 // bir sonraki init için (Elementor bazen widget'ları yeniden render eder). 156 host.dataset.daibSliderReady = ''; 157 } 158 } 159 160 ready( function () { 161 waitForSwiper( buildSlider ); 162 } ); 163} )();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.