1// swipers 2 3var swiper = new Swiper('.magazine-home-swiper', { 4 slidesPerView: 'auto', 5 spaceBetween: 45, 6 loop: true, 7 navigation: { 8 nextEl: '.magazine-home-swiper .swiper-button-next', 9 prevEl: '.magazine-home-swiper .swiper-button-prev', 10 }, 11}); 12 13/**TikTok Swiper Homepage MP**/ 14var swiperTiktok = new Swiper('.tiktok-home-swiper', { 15 slidesPerView: 4.2, 16 spaceBetween: 15, 17 loop: false, 18 allowTouchMove: true, 19 simulateTouch: true, 20 touchStartPreventDefault: false, 21 touchRatio: 1, 22 grabCursor: true, 23 threshold: 10, // Minimum swipe distance (px) 24 followFinger: true, 25 breakpoints: { 26 320: { slidesPerView: 1.05, spaceBetween: 10 }, 27 580: { slidesPerView: 1.05, spaceBetween: 10 }, 28 768: { slidesPerView: 2.2, spaceBetween: 15 }, 29 1024: { slidesPerView: 3.05, spaceBetween: 10 }, 30 1200: { slidesPerView: 4.2, spaceBetween: 15 } 31 } 32}); 33document.querySelectorAll('.swipe-overlay').forEach(overlay => { 34 overlay.addEventListener('touchstart', (e) => { 35 swiper.touchEventsData.startTouch = e; 36 }, { passive: true }); 37}); 38 39 40// filter btn 41const filterBtn = document.querySelector(".filter-btn"); 42if(filterBtn){ 43 const filtersClose = document.querySelector(".filters-close-btn"); 44 const filters = document.querySelector(".filters"); 45 filterBtn.addEventListener("click", function(){ 46 filters.classList.toggle("on"); 47 }); 48 filtersClose.addEventListener("click", function(){ 49 filters.classList.toggle("on"); 50 }); 51} 52 53// menu 54const menuBtn = document.querySelector(".menu-btn"); 55const menuBtnClose = document.querySelector(".menu-close-btn"); 56const menu = document.querySelector(".menu"); 57 58if(menuBtn){ 59 if (document.querySelector('.menu.menu__new')) { 60 menuBtn.addEventListener("click", function(){ 61 const homeHappNow = document.querySelector('[page="app-home"] .happ__now.happ__now--app'); 62 const middleFace = document.querySelector('body .mc__face.face__middle:first-of-type'); 63 if (menu.classList.contains('on')) { 64 if (middleFace) middleFace.classList.remove('closed'); 65 if (homeHappNow) homeHappNow.classList.remove('closed'); 66 document.body.classList.remove("stop-scrolling"); 67 menu.classList.remove('on'); 68 } else { 69 if (middleFace) middleFace.classList.add('closed'); 70 if (homeHappNow) homeHappNow.classList.add('closed'); 71 document.body.classList.add("stop-scrolling"); 72 menu.classList.add('on'); 73 } 74 }); 75 } else { 76 menuBtn.addEventListener("click", function(){ 77 menu.classList.add("on"); 78 }); 79 menuBtnClose.addEventListener("click", function(){ 80 menu.classList.remove("on"); 81 }); 82 } 83 84} 85 86 87 88 89// search 90const searchBtn = document.querySelector(".header-search-btn"); 91//const searchBtnClose = document.querySelector(".header-search-close"); 92//const searchBox = document.querySelector(".header-search-wrapper"); 93const searchBtnClose = document.querySelector(".search-fixed-close"); 94const searchBox = document.querySelector(".search-fixed"); 95 96if(searchBtn && searchBtnClose){ 97 searchBtn.addEventListener("click", function(){ 98 searchBox.classList.add("on"); 99 }); 100 searchBtnClose.addEventListener("click", function(){ 101 searchBox.classList.remove("on"); 102 }); 103} 104 105// fixed menu 106const mainHeader = document.querySelector(".main-header"); 107const body = document.querySelector("body"); 108window.addEventListener("scroll", throttle(fixedMenu, 500)); 109 110// general 111function throttle(fn, wait) { 112 var time = Date.now(); 113 return function() { 114 if ((time + wait - Date.now()) < 0) { 115 fn(); 116 time = Date.now(); 117 } 118 } 119} 120 121function fixedMenu(){ 122 // console.log(window.scrollY); 123 if(window.scrollY > 1000){ 124 mainHeader.classList.add("fixed"); 125 }else{ 126 mainHeader.classList.remove("fixed"); 127 } 128} 129 130/** 131 * 132 * Create or update the time element text inside Happening Now banner slides 133 * 134 * @param {HTMLElement} slide 135 */ 136const getPostTimeDiff = (slide) => { 137 let timeElement = slide.querySelector('time'); 138 let postTime = new Date(timeElement.dateTime);
139 let currentTime = new Date(); 140 let timeDiffMinutes = Math.abs(Math.ceil((currentTime - postTime) / 60000)); 141 timeElement.innerText = timeDiffMinutes < 60 ? `ÏÏιν ${timeDiffMinutes} λεÏÏά` : `ÏÏÎ¹Ï ${new Intl.DateTimeFormat('el-Gr', {hour: 'numeric', minute: 'numeric'}).format(postTime)}`; 142} 143 144const menuSetUpPY = () => { 145 const menuColumns = document.querySelectorAll(".menu__new .menu-col"); 146 const menuItems = document.querySelectorAll(".menu__new .nav-list-item"); 147 148 if (menuColumns.length > 0 && menuItems.length > 0) { 149 let columns; 150 let spareElements = []; 151 switch (true) { 152 case window.innerWidth < 420: 153 columns = 1; 154 break; 155 case window.innerWidth < 620: 156 columns = 2; 157 break; 158 case window.innerWidth < 850: 159 columns = 3; 160 break; 161 case window.innerWidth < 1150: 162 columns = 4; 163 break; 164 case window.innerWidth < 1450: 165 columns = 5; 166 break; 167 default: 168 columns = 6; 169 } 170 171 menuItems.forEach((item) => { 172 const col = parseInt(item.dataset.col); 173 if (col <= columns) { 174 const index = col - 1; 175 menuColumns[index].appendChild(item); 176 } else { 177 spareElements.push(item); 178 } 179 }); 180 181 if (spareElements.length > 0) { 182 if (columns > 1) { 183 const spareElementsHeight = []; 184 185 spareElements.forEach((el) => { 186 spareElementsHeight.push(el.offsetHeight); 187 }); 188 189 const columnHeight = []; 190 menuColumns.forEach((col, index) => { 191 if (index < columns) columnHeight.push(col.offsetHeight); 192 }); 193 194 while (spareElements.length > 0) { 195 // console.log(spareElements.length); 196 197 const maxIndex = spareElementsHeight.indexOf( 198 Math.max(...spareElementsHeight), 199 ); 200 const minIndex = columnHeight.indexOf(Math.min(...columnHeight)); 201 console.log("move to " + minIndex); 202 menuColumns[minIndex].appendChild(spareElements[maxIndex]); 203 columnHeight[minIndex] += spareElements[maxIndex].offsetHeight; 204 spareElements.splice(maxIndex, 1); 205 spareElementsHeight.splice(maxIndex, 1); 206 } 207 } else { 208 spareElements.forEach((el) => { 209 menuColumns[0].appendChild(el); 210 }); 211 } 212 } 213 } 214} 215 216window.addEventListener('load', () => { 217 if (document.querySelector('.menu.menu__new')) { 218 menuSetUpPY(); 219 window.addEventListener('resize', menuSetUpPY) 220 } 221})
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.