GRIDLY
Find events faster. Teleport easier.
WE FIND IT. YOU ENJOY IT.
WEEKEND SALES
LOADINGNEXTSALE
![HAPPY WEEKEND]()
HAPPY WEEKEND
![]()
(function () { var WORKER = "https://calm-disk-5a7d.fuoeyceo.workers.dev"; var EVENT = "happy"; var PREVIEW_TIME = 3200; var MODAL_TIME = 4500; var card = document.getElementById( "happy-card" ); var img = document.getElementById( "happy-img" ); var placeholder = document.getElementById( "happy-placeholder" ); var modal = document.getElementById( "happy-modal" ); var modalImg = document.getElementById( "happy-modal-img" ); var closeBtn = document.getElementById( "happy-close" ); var prevBtn = document.getElementById( "happy-prev" ); var nextBtn = document.getElementById( "happy-next" ); var autoBtn = document.getElementById( "happy-auto" ); var meta = null; var vendors = []; var vendorsLoaded = false; var vendorLoading = false; /* -1 = LOGO 0+ = VENDOR */ var current = -1; var previewTimer = null; var hover = false; var modalIndex = 0; var modalAuto = false; var modalTimer = null; var isTouch = window.matchMedia( "(hover: none)" ).matches; /* ===================================== SHOW IMAGE ===================================== */ function showImage( url, fit ) { if (!url) { return; } img.style.objectFit = fit || "contain"; img.src = url; img.style.display = "block"; placeholder.style.display = "none"; } /* ===================================== META ===================================== */ fetch( WORKER + "/meta?event=" + EVENT + "&t=" + Date.now() ) .then(function(response) { if (!response.ok) { throw new Error( "META HTTP " + response.status ); } return response.json(); }) .then(function(data) { meta = data; if ( meta.ok === true && meta.active === true && meta.hasGallery === true && meta.logo ) { /* LOGO = COVER */ showImage( meta.logo, "cover" ); } }) .catch(function(error) { console.error( "GRIDLY HAPPY META ERROR", error ); }); /* ===================================== LOAD VENDORS ===================================== */ function loadVendors( callback ) { if ( vendorsLoaded ) { callback(); return; } if ( vendorLoading ) { return; } vendorLoading = true; fetch( WORKER + "/json?event=" + EVENT + "&t=" + Date.now() ) .then(function(response) { if (!response.ok) { throw new Error( "VENDOR HTTP " + response.status ); } return response.json(); }) .then(function(data) { vendors = Array.isArray( data.vendors ) ? data.vendors : []; vendorsLoaded = true; vendorLoading = false; callback(); }) .catch(function(error) { vendorLoading = false; console.error( "GRIDLY HAPPY VENDOR ERROR", error ); }); } /* ===================================== SHOW VENDOR ===================================== */ function showVendor( index ) { if ( !vendors.length ) { return; } index = ( index + vendors.length ) % vendors.length; current = index; /* VENDOR = CONTAIN SEM ZOOM / SEM CORTE */ showImage( vendors[index].url, "contain" ); /* PRELOAD NEXT */ var next = new Image(); next.src = vendors[ ( index + 1 ) % vendors.length ].url; } /* ===================================== PREVIEW ===================================== */ function stopPreview() { if ( previewTimer ) { clearInterval( previewTimer ); previewTimer = null; } } function startPreview() { if ( !meta || meta.active !== true ) { return; } loadVendors( function() { if ( !vendors.length ) { return; } if ( current === -1 ) { showVendor( 0 ); } stopPreview(); previewTimer = setInterval( function() { showVendor( current + 1 ); }, PREVIEW_TIME ); } ); } /* ===================================== DESKTOP ===================================== */ card.addEventListener( "mouseenter", function() { if ( isTouch ) { return; } hover = true; startPreview(); } ); card.addEventListener( "mouseleave", function() { if ( isTouch ) { return; } hover = false; stopPreview(); } ); /* ===================================== MOBILE ===================================== */ if ( isTouch && "IntersectionObserver" in window ) { var observer = new IntersectionObserver( function(entries) { var visible = entries[0].isIntersecting && entries[0].intersectionRatio >= 0.6; if ( visible ) { startPreview(); } else { stopPreview(); } }, { threshold:[ 0, 0.6, 1 ] } ); observer.observe( card ); } /* ===================================== MODAL ===================================== */ function modalTotal() { return ( vendors.length + 1 ); } function modalSource( index ) { if ( index === 0 ) { return meta.logo; } var vendor = vendors[ index - 1 ]; return vendor ? vendor.url : null; } function showModal( index ) { var total = modalTotal(); if ( total <= 0 ) { return; } index = ( index + total ) % total; modalIndex = index; var source = modalSource( modalIndex ); if ( source ) { modalImg.src = source; } } /* ===================================== OPEN MODAL ===================================== */ card.addEventListener( "click", function() { if ( !meta || meta.active !== true ) { return; } loadVendors( function() { stopPreview(); modal.classList.add( "open" ); if ( current === -1 ) { showModal( 0 ); } else { showModal( current + 1 ); } setAuto( false ); } ); } ); /* ===================================== CLOSE MODAL ===================================== */ function closeModal() { modal.classList.remove( "open" ); setAuto( false ); if ( hover && !isTouch ) { startPreview(); } } closeBtn.addEventListener( "click", function(event) { event.stopPropagation(); closeModal(); } ); modal.addEventListener( "click", function(event) { if ( event.target === modal ) { closeModal(); } } ); /* ===================================== ARROWS ===================================== */ prevBtn.addEventListener( "click", function(event) { event.stopPropagation(); showModal( modalIndex - 1 ); } ); nextBtn.addEventListener( "click", function(event) { event.stopPropagation(); showModal( modalIndex + 1 ); } ); /* ===================================== AUTO ===================================== */ function setAuto( value ) { modalAuto = value; if ( modalTimer ) { clearInterval( modalTimer ); modalTimer = null; } if ( modalAuto ) { autoBtn.textContent = "❚❚ AUTO"; modalTimer = setInterval( function() { showModal( modalIndex + 1 ); }, MODAL_TIME ); } else { autoBtn.textContent = "▶ AUTO"; } } autoBtn.addEventListener( "click", function(event) { event.stopPropagation(); setAuto( !modalAuto ); } ); /* ===================================== KEYBOARD ===================================== */ document.addEventListener( "keydown", function(event) { if ( !modal.classList.contains( "open" ) ) { return; } if ( event.key === "Escape" ) { closeModal(); } if ( event.key === "ArrowLeft" ) { showModal( modalIndex - 1 ); } if ( event.key === "ArrowRight" ) { showModal( modalIndex + 1 ); } } ); /* ===================================== TAB HIDDEN ===================================== */ document.addEventListener( "visibilitychange", function() { if ( document.hidden ) { stopPreview(); if ( modalTimer ) { clearInterval( modalTimer ); modalTimer = null; } return; } if ( modal.classList.contains( "open" ) && modalAuto ) { setAuto( true ); } else if ( hover && !isTouch ) { startPreview(); } } ); })(); LOADINGNEXTSALE
![CRAFTY WEEKEND]()
CRAFTY WEEKEND
![]()
(function () { var WORKER = "https://calm-disk-5a7d.fuoeyceo.workers.dev"; var EVENT = "crafty"; var PREVIEW_TIME = 3200; var MODAL_TIME = 4500; var card = document.getElementById( "crafty-card" ); var img = document.getElementById( "crafty-img" ); var placeholder = document.getElementById( "crafty-placeholder" ); var modal = document.getElementById( "crafty-modal" ); var modalImg = document.getElementById( "crafty-modal-img" ); var closeBtn = document.getElementById( "crafty-close" ); var prevBtn = document.getElementById( "crafty-prev" ); var nextBtn = document.getElementById( "crafty-next" ); var autoBtn = document.getElementById( "crafty-auto" ); var meta = null; var vendors = []; var vendorsLoaded = false; var vendorLoading = false; /* -1 = LOGO 0+ = VENDOR */ var current = -1; var previewTimer = null; var hover = false; var modalIndex = 0; var modalAuto = false; var modalTimer = null; var isTouch = window.matchMedia( "(hover: none)" ).matches; /* ===================================== SHOW IMAGE ===================================== */ function showImage( url, fit ) { if (!url) { return; } img.style.objectFit = fit || "contain"; img.src = url; img.style.display = "block"; placeholder.style.display = "none"; } /* ===================================== META ===================================== */ fetch( WORKER + "/meta?event=" + EVENT + "&t=" + Date.now() ) .then(function(response) { if (!response.ok) { throw new Error( "META HTTP " + response.status ); } return response.json(); }) .then(function(data) { meta = data; if ( meta.ok === true && meta.active === true && meta.hasGallery === true && meta.logo ) { /* LOGO: COVER */ showImage( meta.logo, "cover" ); } }) .catch(function(error) { console.error( "GRIDLY CRAFTY META ERROR", error ); }); /* ===================================== LOAD VENDORS ===================================== */ function loadVendors( callback ) { if ( vendorsLoaded ) { callback(); return; } if ( vendorLoading ) { return; } vendorLoading = true; fetch( WORKER + "/json?event=" + EVENT + "&t=" + Date.now() ) .then(function(response) { if (!response.ok) { throw new Error( "VENDOR HTTP " + response.status ); } return response.json(); }) .then(function(data) { vendors = Array.isArray( data.vendors ) ? data.vendors : []; vendorsLoaded = true; vendorLoading = false; callback(); }) .catch(function(error) { vendorLoading = false; console.error( "GRIDLY CRAFTY VENDOR ERROR", error ); }); } /* ===================================== SHOW VENDOR ===================================== */ function showVendor( index ) { if ( !vendors.length ) { return; } index = ( index + vendors.length ) % vendors.length; current = index; /* VENDOR: CONTAIN NO ZOOM / NO CROP */ showImage( vendors[index].url, "contain" ); /* PRELOAD NEXT */ var next = new Image(); next.src = vendors[ ( index + 1 ) % vendors.length ].url; } /* ===================================== PREVIEW ===================================== */ function stopPreview() { if ( previewTimer ) { clearInterval( previewTimer ); previewTimer = null; } } function startPreview() { if ( !meta || meta.active !== true ) { return; } loadVendors( function() { if ( !vendors.length ) { return; } if ( current === -1 ) { showVendor( 0 ); } stopPreview(); previewTimer = setInterval( function() { showVendor( current + 1 ); }, PREVIEW_TIME ); } ); } /* ===================================== DESKTOP ===================================== */ card.addEventListener( "mouseenter", function() { if ( isTouch ) { return; } hover = true; startPreview(); } ); card.addEventListener( "mouseleave", function() { if ( isTouch ) { return; } hover = false; stopPreview(); } ); /* ===================================== MOBILE ===================================== */ if ( isTouch && "IntersectionObserver" in window ) { var observer = new IntersectionObserver( function(entries) { var visible = entries[0].isIntersecting && entries[0].intersectionRatio >= 0.6; if ( visible ) { startPreview(); } else { stopPreview(); } }, { threshold:[ 0, 0.6, 1 ] } ); observer.observe( card ); } /* ===================================== MODAL ===================================== */ function modalTotal() { return ( vendors.length + 1 ); } function modalSource( index ) { if ( index === 0 ) { return meta.logo; } var vendor = vendors[ index - 1 ]; return vendor ? vendor.url : null; } function showModal( index ) { var total = modalTotal(); if ( total <= 0 ) { return; } index = ( index + total ) % total; modalIndex = index; var source = modalSource( modalIndex ); if ( source ) { modalImg.src = source; } } /* ===================================== OPEN MODAL ===================================== */ card.addEventListener( "click", function() { if ( !meta || meta.active !== true ) { return; } loadVendors( function() { stopPreview(); modal.classList.add( "open" ); if ( current === -1 ) { showModal( 0 ); } else { showModal( current + 1 ); } setAuto( false ); } ); } ); /* ===================================== CLOSE MODAL ===================================== */ function closeModal() { modal.classList.remove( "open" ); setAuto( false ); if ( hover && !isTouch ) { startPreview(); } } closeBtn.addEventListener( "click", function(event) { event.stopPropagation(); closeModal(); } ); modal.addEventListener( "click", function(event) { if ( event.target === modal ) { closeModal(); } } ); /* ===================================== ARROWS ===================================== */ prevBtn.addEventListener( "click", function(event) { event.stopPropagation(); showModal( modalIndex - 1 ); } ); nextBtn.addEventListener( "click", function(event) { event.stopPropagation(); showModal( modalIndex + 1 ); } ); /* ===================================== AUTO ===================================== */ function setAuto( value ) { modalAuto = value; if ( modalTimer ) { clearInterval( modalTimer ); modalTimer = null; } if ( modalAuto ) { autoBtn.textContent = "❚❚ AUTO"; modalTimer = setInterval( function() { showModal( modalIndex + 1 ); }, MODAL_TIME ); } else { autoBtn.textContent = "▶ AUTO"; } } autoBtn.addEventListener( "click", function(event) { event.stopPropagation(); setAuto( !modalAuto ); } ); /* ===================================== KEYBOARD ===================================== */ document.addEventListener( "keydown", function(event) { if ( !modal.classList.contains( "open" ) ) { return; } if ( event.key === "Escape" ) { closeModal(); } if ( event.key === "ArrowLeft" ) { showModal( modalIndex - 1 ); } if ( event.key === "ArrowRight" ) { showModal( modalIndex + 1 ); } } ); /* ===================================== TAB HIDDEN ===================================== */ document.addEventListener( "visibilitychange", function() { if ( document.hidden ) { stopPreview(); if ( modalTimer ) { clearInterval( modalTimer ); modalTimer = null; } return; } if ( modal.classList.contains( "open" ) && modalAuto ) { setAuto( true ); } else if ( hover && !isTouch ) { startPreview(); } } ); })(); LOADINGNEXTSALE
![KINKY 69]()
![]()
(function () { /* ===================================== CONFIG ===================================== */ var WORKER = "https://calm-disk-5a7d.fuoeyceo.workers.dev"; var EVENT = "kinky"; var PREVIEW_TIME = 3200; var MODAL_TIME = 4500; /* ===================================== ELEMENTS ===================================== */ var card = document.getElementById( "kinky-card" ); var img = document.getElementById( "kinky-img" ); var placeholder = document.getElementById( "kinky-placeholder" ); var modal = document.getElementById( "kinky-modal" ); var modalImg = document.getElementById( "kinky-modal-img" ); var closeBtn = document.getElementById( "kinky-close" ); var prevBtn = document.getElementById( "kinky-prev" ); var nextBtn = document.getElementById( "kinky-next" ); var autoBtn = document.getElementById( "kinky-auto" ); /* ===================================== STATE ===================================== */ var meta = null; var vendors = []; var vendorsLoaded = false; var vendorLoading = false; /* -1 = LOGO 0+ = VENDOR */ var current = -1; var previewTimer = null; var hover = false; var modalIndex = 0; var modalAuto = false; var modalTimer = null; var isTouch = window.matchMedia( "(hover: none)" ).matches; /* ===================================== SHOW IMAGE ===================================== */ function showImage( url, fit ) { if ( !url ) { return; } img.style.objectFit = fit || "contain"; img.src = url; img.style.display = "block"; placeholder.style.display = "none"; } /* ===================================== META ===================================== */ fetch( WORKER + "/meta?event=" + EVENT + "&t=" + Date.now() ) .then( function( response ) { if ( !response.ok ) { throw new Error( "META HTTP " + response.status ); } return response.json(); } ) .then( function( data ) { meta = data; if ( meta.ok === true && meta.active === true && meta.hasGallery === true && meta.logo ) { /* LOGO: COVER */ showImage( meta.logo, "cover" ); } } ) .catch( function( error ) { console.error( "GRIDLY KINKY META ERROR", error ); } ); /* ===================================== LOAD VENDORS ===================================== */ function loadVendors( callback ) { if ( vendorsLoaded ) { callback(); return; } if ( vendorLoading ) { return; } vendorLoading = true; fetch( WORKER + "/json?event=" + EVENT + "&t=" + Date.now() ) .then( function( response ) { if ( !response.ok ) { throw new Error( "VENDOR HTTP " + response.status ); } return response.json(); } ) .then( function( data ) { vendors = Array.isArray( data.vendors ) ? data.vendors : []; vendorsLoaded = true; vendorLoading = false; callback(); } ) .catch( function( error ) { vendorLoading = false; console.error( "GRIDLY KINKY VENDOR ERROR", error ); } ); } /* ===================================== SHOW VENDOR ===================================== */ function showVendor( index ) { if ( !vendors.length ) { return; } index = ( index + vendors.length ) % vendors.length; current = index; /* VENDOR: CONTAIN NO ZOOM / NO CROP */ showImage( vendors[index].url, "contain" ); /* PRELOAD NEXT */ var next = new Image(); next.src = vendors[ ( index + 1 ) % vendors.length ].url; } /* ===================================== PREVIEW ===================================== */ function stopPreview() { if ( previewTimer ) { clearInterval( previewTimer ); previewTimer = null; } } function startPreview() { if ( !meta || meta.active !== true ) { return; } loadVendors( function() { if ( !vendors.length ) { return; } if ( current === -1 ) { showVendor( 0 ); } stopPreview(); previewTimer = setInterval( function() { showVendor( current + 1 ); }, PREVIEW_TIME ); } ); } /* ===================================== DESKTOP ===================================== */ card.addEventListener( "mouseenter", function() { if ( isTouch ) { return; } hover = true; startPreview(); } ); card.addEventListener( "mouseleave", function() { if ( isTouch ) { return; } hover = false; stopPreview(); } ); /* ===================================== MOBILE ===================================== */ if ( isTouch && "IntersectionObserver" in window ) { var observer = new IntersectionObserver( function( entries ) { var visible = entries[0] .isIntersecting && entries[0] .intersectionRatio >= 0.6; if ( visible ) { startPreview(); } else { stopPreview(); } }, { threshold:[ 0, 0.6, 1 ] } ); observer.observe( card ); } /* ===================================== MODAL SOURCES ===================================== */ function modalTotal() { return ( vendors.length + 1 ); } function modalSource( index ) { if ( index === 0 ) { return meta.logo; } var vendor = vendors[ index - 1 ]; return vendor ? vendor.url : null; } function showModal( index ) { var total = modalTotal(); if ( total <= 0 ) { return; } index = ( index + total ) % total; modalIndex = index; var source = modalSource( modalIndex ); if ( source ) { modalImg.src = source; } } /* ===================================== OPEN MODAL ===================================== */ card.addEventListener( "click", function() { if ( !meta || meta.active !== true ) { return; } loadVendors( function() { stopPreview(); modal.classList.add( "open" ); if ( current === -1 ) { showModal( 0 ); } else { showModal( current + 1 ); } /* AUTO STARTS OFF */ setAuto( false ); } ); } ); /* ===================================== CLOSE MODAL ===================================== */ function closeModal() { modal.classList.remove( "open" ); setAuto( false ); if ( hover && !isTouch ) { startPreview(); } } closeBtn.addEventListener( "click", function( event ) { event.stopPropagation(); closeModal(); } ); modal.addEventListener( "click", function( event ) { if ( event.target === modal ) { closeModal(); } } ); /* ===================================== ARROWS ===================================== */ prevBtn.addEventListener( "click", function( event ) { event.stopPropagation(); showModal( modalIndex - 1 ); } ); nextBtn.addEventListener( "click", function( event ) { event.stopPropagation(); showModal( modalIndex + 1 ); } ); /* ===================================== AUTO ===================================== */ function setAuto( value ) { modalAuto = value; if ( modalTimer ) { clearInterval( modalTimer ); modalTimer = null; } if ( modalAuto ) { autoBtn.textContent = "❚❚ AUTO"; modalTimer = setInterval( function() { showModal( modalIndex + 1 ); }, MODAL_TIME ); } else { autoBtn.textContent = "▶ AUTO"; } } autoBtn.addEventListener( "click", function( event ) { event.stopPropagation(); setAuto( !modalAuto ); } ); /* ===================================== KEYBOARD ===================================== */ document.addEventListener( "keydown", function( event ) { if ( !modal .classList .contains( "open" ) ) { return; } if ( event.key === "Escape" ) { closeModal(); } if ( event.key === "ArrowLeft" ) { showModal( modalIndex - 1 ); } if ( event.key === "ArrowRight" ) { showModal( modalIndex + 1 ); } } ); /* ===================================== TAB VISIBILITY ===================================== */ document.addEventListener( "visibilitychange", function() { if ( document.hidden ) { stopPreview(); if ( modalTimer ) { clearInterval( modalTimer ); modalTimer = null; } return; } if ( modal .classList .contains( LOADINGNEXTSALE
![GOAT 66-96]()
GOAT 66-96
![]()
(function () { var WORKER = "https://calm-disk-5a7d.fuoeyceo.workers.dev"; var EVENT = "goat"; var PREVIEW_TIME = 3200; var MODAL_TIME = 4500; var card = document.getElementById( "goat-card" ); var img = document.getElementById( "goat-img" ); var placeholder = document.getElementById( "goat-placeholder" ); var modal = document.getElementById( "goat-modal" ); var modalImg = document.getElementById( "goat-modal-img" ); var closeBtn = document.getElementById( "goat-close" ); var prevBtn = document.getElementById( "goat-prev" ); var nextBtn = document.getElementById( "goat-next" ); var autoBtn = document.getElementById( "goat-auto" ); var meta = null; var vendors = []; var vendorsLoaded = false; var vendorLoading = false; var current = -1; var previewTimer = null; var hover = false; var modalIndex = 0; var modalAuto = false; var modalTimer = null; var isTouch = window.matchMedia( "(hover: none)" ).matches; /* ===================================== IMAGE ===================================== */ function showImage( url, fit ) { if (!url) { return; } img.style.objectFit = fit || "contain"; img.src = url; img.style.display = "block"; placeholder.style.display = "none"; } /* ===================================== META ===================================== */ fetch( WORKER + "/meta?event=" + EVENT + "&t=" + Date.now() ) .then(function(response) { if (!response.ok) { throw new Error( "META HTTP " + response.status ); } return response.json(); }) .then(function(data) { meta = data; if ( meta.ok === true && meta.active === true && meta.hasGallery === true && meta.logo ) { showImage( meta.logo, "cover" ); } }) .catch(function(error) { console.error( "GRIDLY GOAT META ERROR", error ); }); /* ===================================== LOAD VENDORS ===================================== */ function loadVendors( callback ) { if ( vendorsLoaded ) { callback(); return; } if ( vendorLoading ) { return; } vendorLoading = true; fetch( WORKER + "/json?event=" + EVENT + "&t=" + Date.now() ) .then(function(response) { if (!response.ok) { throw new Error( "VENDOR HTTP " + response.status ); } return response.json(); }) .then(function(data) { vendors = Array.isArray( data.vendors ) ? data.vendors : []; vendorsLoaded = true; vendorLoading = false; callback(); }) .catch(function(error) { vendorLoading = false; console.error( "GRIDLY GOAT VENDOR ERROR", error ); }); } /* ===================================== SHOW VENDOR ===================================== */ function showVendor( index ) { if ( !vendors.length ) { return; } index = ( index + vendors.length ) % vendors.length; current = index; showImage( vendors[index].url, "contain" ); var next = new Image(); next.src = vendors[ ( index + 1 ) % vendors.length ].url; } /* ===================================== PREVIEW ===================================== */ function stopPreview() { if ( previewTimer ) { clearInterval( previewTimer ); previewTimer = null; } } function startPreview() { if ( !meta || meta.active !== true ) { return; } loadVendors( function() { if ( !vendors.length ) { return; } if ( current === -1 ) { showVendor( 0 ); } stopPreview(); previewTimer = setInterval( function() { showVendor( current + 1 ); }, PREVIEW_TIME ); } ); } /* ===================================== DESKTOP ===================================== */ card.addEventListener( "mouseenter", function() { if ( isTouch ) { return; } hover = true; startPreview(); } ); card.addEventListener( "mouseleave", function() { if ( isTouch ) { return; } hover = false; stopPreview(); } ); /* ===================================== MOBILE ===================================== */ if ( isTouch && "IntersectionObserver" in window ) { var observer = new IntersectionObserver( function(entries) { var visible = entries[0].isIntersecting && entries[0].intersectionRatio >= 0.6; if ( visible ) { startPreview(); } else { stopPreview(); } }, { threshold:[ 0, 0.6, 1 ] } ); observer.observe( card ); } /* ===================================== MODAL ===================================== */ function modalTotal() { return ( vendors.length + 1 ); } function modalSource( index ) { if ( index === 0 ) { return meta.logo; } var vendor = vendors[ index - 1 ]; return vendor ? vendor.url : null; } function showModal( index ) { var total = modalTotal(); if ( total <= 0 ) { return; } index = ( index + total ) % total; modalIndex = index; var source = modalSource( modalIndex ); if ( source ) { modalImg.src = source; } } /* ===================================== OPEN MODAL ===================================== */ card.addEventListener( "click", function() { if ( !meta || meta.active !== true ) { return; } loadVendors( function() { stopPreview(); modal.classList.add( "open" ); if ( current === -1 ) { showModal( 0 ); } else { showModal( current + 1 ); } setAuto( false ); } ); } ); /* ===================================== CLOSE ===================================== */ function closeModal() { modal.classList.remove( "open" ); setAuto( false ); if ( hover && !isTouch ) { startPreview(); } } closeBtn.addEventListener( "click", function(event) { event.stopPropagation(); closeModal(); } ); modal.addEventListener( "click", function(event) { if ( event.target === modal ) { closeModal(); } } ); /* ===================================== ARROWS ===================================== */ prevBtn.addEventListener( "click", function(event) { event.stopPropagation(); showModal( modalIndex - 1 ); } ); nextBtn.addEventListener( "click", function(event) { event.stopPropagation(); showModal( modalIndex + 1 ); } ); /* ===================================== AUTO ===================================== */ function setAuto( value ) { modalAuto = value; if ( modalTimer ) { clearInterval( modalTimer ); modalTimer = null; } if ( modalAuto ) { autoBtn.textContent = "❚❚ AUTO"; modalTimer = setInterval( function() { showModal( modalIndex + 1 ); }, MODAL_TIME ); } else { autoBtn.textContent = "▶ AUTO"; } } autoBtn.addEventListener( "click", function(event) { event.stopPropagation(); setAuto( !modalAuto ); } ); /* ===================================== KEYBOARD ===================================== */ document.addEventListener( "keydown", function(event) { if ( !modal.classList.contains( "open" ) ) { return; } if ( event.key === "Escape" ) { closeModal(); } if ( event.key === "ArrowLeft" ) { showModal( modalIndex - 1 ); } if ( event.key === "ArrowRight" ) { showModal( modalIndex + 1 ); } } ); /* ===================================== TAB VISIBILITY ===================================== */ document.addEventListener( "visibilitychange", function() { if ( document.hidden ) { stopPreview(); if ( modalTimer ) { clearInterval( modalTimer ); modalTimer = null; } return; } if ( modal.classList.contains( "open" ) && modalAuto ) { setAuto( true ); } else if ( hover && !isTouch ) { startPreview(); } } ); })(); LOADINGNEXTSALE
![WAIFU DREAMS]()
WAIFU DREAMS
![]()
(function () { var WORKER = "https://calm-disk-5a7d.fuoeyceo.workers.dev"; var EVENT = "waifu"; var PREVIEW_TIME = 3200; var MODAL_TIME = 4500; var card = document.getElementById( "waifu-card" ); var img = document.getElementById( "waifu-img" ); var placeholder = document.getElementById( "waifu-placeholder" ); var modal = document.getElementById( "waifu-modal" ); var modalImg = document.getElementById( "waifu-modal-img" ); var closeBtn = document.getElementById( "waifu-close" ); var prevBtn = document.getElementById( "waifu-prev" ); var nextBtn = document.getElementById( "waifu-next" ); var autoBtn = document.getElementById( "waifu-auto" ); var meta = null; var vendors = []; var vendorsLoaded = false; var vendorLoading = false; var current = -1; var previewTimer = null; var hover = false; var modalIndex = 0; var modalAuto = false; var modalTimer = null; var isTouch = window.matchMedia( "(hover: none)" ).matches; /* ===================================== IMAGE ===================================== */ function showImage( url, fit ) { if (!url) { return; } img.style.objectFit = fit || "contain"; img.src = url; img.style.display = "block"; placeholder.style.display = "none"; } /* ===================================== META ===================================== */ fetch( WORKER + "/meta?event=" + EVENT + "&t=" + Date.now() ) .then(function(response) { if (!response.ok) { throw new Error( "META HTTP " + response.status ); } return response.json(); }) .then(function(data) { meta = data; if ( meta.ok === true && meta.active === true && meta.hasGallery === true && meta.logo ) { showImage( meta.logo, "cover" ); } }) .catch(function(error) { console.error( "GRIDLY WAIFU META ERROR", error ); }); /* ===================================== LOAD VENDORS ===================================== */ function loadVendors( callback ) { if ( vendorsLoaded ) { callback(); return; } if ( vendorLoading ) { return; } vendorLoading = true; fetch( WORKER + "/json?event=" + EVENT + "&t=" + Date.now() ) .then(function(response) { if (!response.ok) { throw new Error( "VENDOR HTTP " + response.status ); } return response.json(); }) .then(function(data) { vendors = Array.isArray( data.vendors ) ? data.vendors : []; vendorsLoaded = true; vendorLoading = false; callback(); }) .catch(function(error) { vendorLoading = false; console.error( "GRIDLY WAIFU VENDOR ERROR", error ); }); } /* ===================================== SHOW VENDOR ===================================== */ function showVendor( index ) { if ( !vendors.length ) { return; } index = ( index + vendors.length ) % vendors.length; current = index; showImage( vendors[index].url, "contain" ); var next = new Image(); next.src = vendors[ ( index + 1 ) % vendors.length ].url; } /* ===================================== PREVIEW ===================================== */ function stopPreview() { if ( previewTimer ) { clearInterval( previewTimer ); previewTimer = null; } } function startPreview() { if ( !meta || meta.active !== true ) { return; } loadVendors( function() { if ( !vendors.length ) { return; } if ( current === -1 ) { showVendor( 0 ); } stopPreview(); previewTimer = setInterval( function() { showVendor( current + 1 ); }, PREVIEW_TIME ); } ); } /* ===================================== DESKTOP ===================================== */ card.addEventListener( "mouseenter", function() { if ( isTouch ) { return; } hover = true; startPreview(); } ); card.addEventListener( "mouseleave", function() { if ( isTouch ) { return; } hover = false; stopPreview(); } ); /* ===================================== MOBILE ===================================== */ if ( isTouch && "IntersectionObserver" in window ) { var observer = new IntersectionObserver( function(entries) { var visible = entries[0].isIntersecting && entries[0].intersectionRatio >= 0.6; if ( visible ) { startPreview(); } else { stopPreview(); } }, { threshold:[ 0, 0.6, 1 ] } ); observer.observe( card ); } /* ===================================== MODAL ===================================== */ function modalTotal() { return ( vendors.length + 1 ); } function modalSource( index ) { if ( index === 0 ) { return meta.logo; } var vendor = vendors[ index - 1 ]; return vendor ? vendor.url : null; } function showModal( index ) { var total = modalTotal(); if ( total <= 0 ) { return; } index = ( index + total ) % total; modalIndex = index; var source = modalSource( modalIndex ); if ( source ) { modalImg.src = source; } } /* ===================================== OPEN MODAL ===================================== */ card.addEventListener( "click", function() { if ( !meta || meta.active !== true ) { return; } loadVendors( function() { stopPreview(); modal.classList.add( "open" ); if ( current === -1 ) { showModal( 0 ); } else { showModal( current + 1 ); } setAuto( false ); } ); } ); /* ===================================== CLOSE ===================================== */ function closeModal() { modal.classList.remove( "open" ); setAuto( false ); if ( hover && !isTouch ) { startPreview(); } } closeBtn.addEventListener( "click", function(event) { event.stopPropagation(); closeModal(); } ); modal.addEventListener( "click", function(event) { if ( event.target === modal ) { closeModal(); } } ); /* ===================================== ARROWS ===================================== */ prevBtn.addEventListener( "click", function(event) { event.stopPropagation(); showModal( modalIndex - 1 ); } ); nextBtn.addEventListener( "click", function(event) { event.stopPropagation(); showModal( modalIndex + 1 ); } ); /* ===================================== AUTO ===================================== */ function setAuto( value ) { modalAuto = value; if ( modalTimer ) { clearInterval( modalTimer ); modalTimer = null; } if ( modalAuto ) { autoBtn.textContent = "❚❚ AUTO"; modalTimer = setInterval( function() { showModal( modalIndex + 1 ); }, MODAL_TIME ); } else { autoBtn.textContent = "▶ AUTO"; } } autoBtn.addEventListener( "click", function(event) { event.stopPropagation(); setAuto( !modalAuto ); } ); /* ===================================== KEYBOARD ===================================== */ document.addEventListener( "keydown", function(event) { if ( !modal.classList.contains( "open" ) ) { return; } if ( event.key === "Escape" ) { closeModal(); } if ( event.key === "ArrowLeft" ) { showModal( modalIndex - 1 ); } if ( event.key === "ArrowRight" ) { showModal( modalIndex + 1 ); } } ); /* ===================================== TAB VISIBILITY ===================================== */ document.addEventListener( "visibilitychange", function() { if ( document.hidden ) { stopPreview(); if ( modalTimer ) { clearInterval( modalTimer ); modalTimer = null; } return; } if ( modal.classList.contains( "open" ) && modalAuto ) { setAuto( true ); } else if ( hover && !isTouch ) { startPreview(); } } ); })(); LOADINGNEXTSALE
![ALPHA WEEKEND]()
ALPHA WEEKEND
![]()
(function () { var WORKER = "https://calm-disk-5a7d.fuoeyceo.workers.dev"; var EVENT = "alpha"; var PREVIEW_TIME = 3200; var MODAL_TIME = 4500; var card = document.getElementById( "alpha-card" ); var img = document.getElementById( "alpha-img" ); var placeholder = document.getElementById( "alpha-placeholder" ); var modal = document.getElementById( "alpha-modal" ); var modalImg = document.getElementById( "alpha-modal-img" ); var closeBtn = document.getElementById( "alpha-close" ); var prevBtn = document.getElementById( "alpha-prev" ); var nextBtn = document.getElementById( "alpha-next" ); var autoBtn = document.getElementById( "alpha-auto" ); var meta = null; var vendors = []; var vendorsLoaded = false; var vendorLoading = false; /* -1 = LOGO 0+ = VENDOR */ var current = -1; var previewTimer = null; var hover = false; var modalIndex = 0; var modalAuto = false; var modalTimer = null; var isTouch = window.matchMedia( "(hover: none)" ).matches; /* ===================================== SHOW IMAGE ===================================== */ function showImage( url, fit ) { if (!url) { return; } img.style.objectFit = fit || "contain"; img.src = url; img.style.display = "block"; placeholder.style.display = "none"; } /* ===================================== META ===================================== */ fetch( WORKER + "/meta?event=" + EVENT + "&t=" + Date.now() ) .then(function(response) { if (!response.ok) { throw new Error( "META HTTP " + response.status ); } return response.json(); }) .then(function(data) { meta = data; if ( meta.ok === true && meta.active === true && meta.hasGallery === true && meta.logo ) { /* LOGO: COVER */ showImage( meta.logo, "cover" ); } }) .catch(function(error) { console.error( "GRIDLY ALPHA META ERROR", error ); }); /* ===================================== LOAD VENDORS ===================================== */ function loadVendors( callback ) { if ( vendorsLoaded ) { callback(); return; } if ( vendorLoading ) { return; } vendorLoading = true; fetch( WORKER + "/json?event=" + EVENT + "&t=" + Date.now() ) .then(function(response) { if (!response.ok) { throw new Error( "VENDOR HTTP " + response.status ); } return response.json(); }) .then(function(data) { vendors = Array.isArray( data.vendors ) ? data.vendors : []; vendorsLoaded = true; vendorLoading = false; callback(); }) .catch(function(error) { vendorLoading = false; console.error( "GRIDLY ALPHA VENDOR ERROR", error ); }); } /* ===================================== SHOW VENDOR ===================================== */ function showVendor( index ) { if ( !vendors.length ) { return; } index = ( index + vendors.length ) % vendors.length; current = index; /* VENDOR: CONTAIN NO ZOOM / NO CROP */ showImage( vendors[index].url, "contain" ); /* PRELOAD NEXT */ var next = new Image(); next.src = vendors[ ( index + 1 ) % vendors.length ].url; } /* ===================================== PREVIEW ===================================== */ function stopPreview() { if ( previewTimer ) { clearInterval( previewTimer ); previewTimer = null; } } function startPreview() { if ( !meta || meta.active !== true ) { return; } loadVendors( function() { if ( !vendors.length ) { return; } if ( current === -1 ) { showVendor( 0 ); } stopPreview(); previewTimer = setInterval( function() { showVendor( current + 1 ); }, PREVIEW_TIME ); } ); } /* ===================================== DESKTOP ===================================== */ card.addEventListener( "mouseenter", function() { if ( isTouch ) { return; } hover = true; startPreview(); } ); card.addEventListener( "mouseleave", function() { if ( isTouch ) { return; } hover = false; stopPreview(); } ); /* ===================================== MOBILE ===================================== */ if ( isTouch && "IntersectionObserver" in window ) { var observer = new IntersectionObserver( function(entries) { var visible = entries[0].isIntersecting && entries[0].intersectionRatio >= 0.6; if ( visible ) { startPreview(); } else { stopPreview(); } }, { threshold:[ 0, 0.6, 1 ] } ); observer.observe( card ); } /* ===================================== MODAL ===================================== */ function modalTotal() { return ( vendors.length + 1 ); } function modalSource( index ) { if ( index === 0 ) { return meta.logo; } var vendor = vendors[ index - 1 ]; return vendor ? vendor.url : null; } function showModal( index ) { var total = modalTotal(); if ( total <= 0 ) { return; } index = ( index + total ) % total; modalIndex = index; var source = modalSource( modalIndex ); if ( source ) { modalImg.src = source; } } /* ===================================== OPEN MODAL ===================================== */ card.addEventListener( "click", function() { if ( !meta || meta.active !== true ) { return; } loadVendors( function() { stopPreview(); modal.classList.add( "open" ); if ( current === -1 ) { showModal( 0 ); } else { showModal( current + 1 ); } setAuto( false ); } ); } ); /* ===================================== CLOSE MODAL ===================================== */ function closeModal() { modal.classList.remove( "open" ); setAuto( false ); if ( hover && !isTouch ) { startPreview(); } } closeBtn.addEventListener( "click", function(event) { event.stopPropagation(); closeModal(); } ); modal.addEventListener( "click", function(event) { if ( event.target === modal ) { closeModal(); } } ); /* ===================================== ARROWS ===================================== */ prevBtn.addEventListener( "click", function(event) { event.stopPropagation(); showModal( modalIndex - 1 ); } ); nextBtn.addEventListener( "click", function(event) { event.stopPropagation(); showModal( modalIndex + 1 ); } ); /* ===================================== AUTO ===================================== */ function setAuto( value ) { modalAuto = value; if ( modalTimer ) { clearInterval( modalTimer ); modalTimer = null; } if ( modalAuto ) { autoBtn.textContent = "❚❚ AUTO"; modalTimer = setInterval( function() { showModal( modalIndex + 1 ); }, MODAL_TIME ); } else { autoBtn.textContent = "▶ AUTO"; } } autoBtn.addEventListener( "click", function(event) { event.stopPropagation(); setAuto( !modalAuto ); } ); /* ===================================== KEYBOARD ===================================== */ document.addEventListener( "keydown", function(event) { if ( !modal.classList.contains( "open" ) ) { return; } if ( event.key === "Escape" ) { closeModal(); } if ( event.key === "ArrowLeft" ) { showModal( modalIndex - 1 ); } if ( event.key === "ArrowRight" ) { showModal( modalIndex + 1 ); } } ); /* ===================================== TAB HIDDEN ===================================== */ document.addEventListener( "visibilitychange", function() { if ( document.hidden ) { stopPreview(); if ( modalTimer ) { clearInterval( modalTimer ); modalTimer = null; } return; } if ( modal.classList.contains( "open" ) && modalAuto ) { setAuto( true ); } else if ( hover && !isTouch ) { startPreview(); } } ); })(); LOADINGNEXTSALE
![MIIX WEEKEND]()
MIIX WEEKEND
![]()
(function () { var WORKER = "https://calm-disk-5a7d.fuoeyceo.workers.dev"; var EVENT = "miix"; var PREVIEW_TIME = 3200; var MODAL_TIME = 4500; var card = document.getElementById( "miix-card" ); var img = document.getElementById( "miix-img" ); var placeholder = document.getElementById( "miix-placeholder" ); var modal = document.getElementById( "miix-modal" ); var modalImg = document.getElementById( "miix-modal-img" ); var closeBtn = document.getElementById( "miix-close" ); var prevBtn = document.getElementById( "miix-prev" ); var nextBtn = document.getElementById( "miix-next" ); var autoBtn = document.getElementById( "miix-auto" ); var meta = null; var vendors = []; var vendorsLoaded = false; var vendorLoading = false; /* -1 = LOGO 0+ = VENDOR */ var current = -1; var previewTimer = null; var hover = false; var modalIndex = 0; var modalAuto = false; var modalTimer = null; var isTouch = window.matchMedia( "(hover: none)" ).matches; /* ===================================== SHOW CARD IMAGE ===================================== */ function showImage( url, fit ) { if (!url) { return; } img.style.objectFit = fit || "contain"; img.src = url; img.style.display = "block"; placeholder.style.display = "none"; } /* ===================================== LOAD META ===================================== */ fetch( WORKER + "/meta?event=" + EVENT + "&t=" + Date.now() ) .then(function(response) { if (!response.ok) { throw new Error( "META HTTP " + response.status ); } return response.json(); }) .then(function(data) { meta = data; console.log( "GRIDLY MIIX META", meta ); if ( meta.ok === true && meta.active === true && meta.hasGallery === true && meta.logo ) { /* LOGO: FILL ENTIRE SQUARE */ showImage( meta.logo, "cover" ); } }) .catch(function(error) { console.error( "GRIDLY MIIX META ERROR", error ); }); /* ===================================== LOAD VENDORS ===================================== */ function loadVendors( callback ) { if ( vendorsLoaded ) { callback(); return; } if ( vendorLoading ) { return; } vendorLoading = true; fetch( WORKER + "/json?event=" + EVENT + "&t=" + Date.now() ) .then(function(response) { if (!response.ok) { throw new Error( "VENDOR HTTP " + response.status ); } return response.json(); }) .then(function(data) { vendors = Array.isArray( data.vendors ) ? data.vendors : []; vendorsLoaded = true; vendorLoading = false; console.log( "GRIDLY MIIX VENDORS", vendors.length ); callback(); }) .catch(function(error) { vendorLoading = false; console.error( "GRIDLY MIIX VENDOR ERROR", error ); }); } /* ===================================== SHOW VENDOR ===================================== */ function showVendor( index ) { if ( !vendors.length ) { return; } index = ( index + vendors.length ) % vendors.length; current = index; /* VENDOR: SHOW ENTIRE IMAGE NO ZOOM / NO CROP */ showImage( vendors[index].url, "contain" ); /* PRELOAD NEXT VENDOR ONLY */ var next = new Image(); next.src = vendors[ ( index + 1 ) % vendors.length ].url; } /* ===================================== PREVIEW TIMER ===================================== */ function stopPreview() { if ( previewTimer ) { clearInterval( previewTimer ); previewTimer = null; } } function startPreview() { if ( !meta || meta.active !== true ) { return; } loadVendors( function() { if ( !vendors.length ) { return; } /* FIRST HOVER: LOGO -> FIRST VENDOR */ if ( current === -1 ) { showVendor( 0 ); } stopPreview(); previewTimer = setInterval( function() { showVendor( current + 1 ); }, PREVIEW_TIME ); } ); } /* ===================================== DESKTOP HOVER ===================================== */ card.addEventListener( "mouseenter", function() { if ( isTouch ) { return; } hover = true; startPreview(); } ); card.addEventListener( "mouseleave", function() { if ( isTouch ) { return; } hover = false; stopPreview(); } ); /* ===================================== MOBILE ===================================== */ if ( isTouch && "IntersectionObserver" in window ) { var observer = new IntersectionObserver( function(entries) { var visible = entries[0].isIntersecting && entries[0].intersectionRatio >= 0.6; if ( visible ) { startPreview(); } else { stopPreview(); } }, { threshold:[ 0, 0.6, 1 ] } ); observer.observe( card ); } /* ===================================== MODAL ===================================== */ function modalTotal() { return ( vendors.length + 1 ); } function modalSource( index ) { if ( index === 0 ) { return meta.logo; } var vendor = vendors[ index - 1 ]; return vendor ? vendor.url : null; } function showModal( index ) { var total = modalTotal(); if ( total <= 0 ) { return; } index = ( index + total ) % total; modalIndex = index; var source = modalSource( modalIndex ); if ( source ) { modalImg.src = source; } } /* ===================================== OPEN MODAL ===================================== */ card.addEventListener( "click", function() { if ( !meta || meta.active !== true ) { return; } loadVendors( function() { stopPreview(); modal.classList.add( "open" ); /* OPEN CURRENT IMAGE */ if ( current === -1 ) { showModal( 0 ); } else { showModal( current + 1 ); } /* AUTO STARTS OFF */ setAuto( false ); } ); } ); /* ===================================== CLOSE MODAL ===================================== */ function closeModal() { modal.classList.remove( "open" ); setAuto( false ); if ( hover && !isTouch ) { startPreview(); } } closeBtn.addEventListener( "click", function(event) { event.stopPropagation(); closeModal(); } ); modal.addEventListener( "click", function(event) { if ( event.target === modal ) { closeModal(); } } ); /* ===================================== MODAL ARROWS ===================================== */ prevBtn.addEventListener( "click", function(event) { event.stopPropagation(); showModal( modalIndex - 1 ); } ); nextBtn.addEventListener( "click", function(event) { event.stopPropagation(); showModal( modalIndex + 1 ); } ); /* ===================================== MODAL AUTO ===================================== */ function setAuto( value ) { modalAuto = value; if ( modalTimer ) { clearInterval( modalTimer ); modalTimer = null; } if ( modalAuto ) { autoBtn.textContent = "❚❚ AUTO"; modalTimer = setInterval( function() { showModal( modalIndex + 1 ); }, MODAL_TIME ); } else { autoBtn.textContent = "▶ AUTO"; } } autoBtn.addEventListener( "click", function(event) { event.stopPropagation(); setAuto( !modalAuto ); } ); /* ===================================== KEYBOARD ===================================== */ document.addEventListener( "keydown", function(event) { if ( !modal.classList.contains( "open" ) ) { return; } if ( event.key === "Escape" ) { closeModal(); } if ( event.key === "ArrowLeft" ) { showModal( modalIndex - 1 ); } if ( event.key === "ArrowRight" ) { showModal( modalIndex + 1 ); } } ); /* ===================================== TAB VISIBILITY ===================================== */ document.addEventListener( "visibilitychange", function() { if ( document.hidden ) { stopPreview(); if ( modalTimer ) { clearInterval( modalTimer ); modalTimer = null; } return; } if ( modal.classList.contains( "open" ) && modalAuto ) { setAuto( true ); } else if ( hover && !isTouch ) { startPreview(); } } ); })(); LOADINGNEXTSALE
![THE SATURDAY SALE]()
THE SATURDAY SALE
![]()
(function () { /* ===================================== CONFIG ===================================== */ var WORKER = "https://calm-disk-5a7d.fuoeyceo.workers.dev"; var EVENT = "tss"; var PREVIEW_TIME = 3200; var MODAL_TIME = 4500; /* ===================================== ELEMENTS ===================================== */ var card = document.getElementById( "tss-card" ); var img = document.getElementById( "tss-img" ); var placeholder = document.getElementById( "tss-placeholder" ); var modal = document.getElementById( "tss-modal" ); var modalImg = document.getElementById( "tss-modal-img" ); var closeBtn = document.getElementById( "tss-close" ); var prevBtn = document.getElementById( "tss-prev" ); var nextBtn = document.getElementById( "tss-next" ); var autoBtn = document.getElementById( "tss-auto" ); /* ===================================== STATE ===================================== */ var meta = null; var vendors = []; var vendorsLoaded = false; var vendorPromise = null; /* -1 = LOGO 0+ = VENDOR */ var current = -1; var previewTimer = null; var hover = false; var modalIndex = 0; var modalAuto = false; var modalTimer = null; var isTouch = window.matchMedia( "(hover: none)" ).matches; /* ===================================== SHOW IMAGE ===================================== */ function showImage( url, fit ) { if (!url) { return; } img.style.objectFit = fit || "contain"; img.src = url; img.style.display = "block"; placeholder.style.display = "none"; } /* ===================================== META ===================================== */ fetch( WORKER + "/meta?event=" + EVENT + "&t=" + Date.now() ) .then(function(response) { if (!response.ok) { throw new Error( "META HTTP " + response.status ); } return response.json(); }) .then(function(data) { meta = data; if ( meta.ok === true && meta.active === true && meta.hasGallery === true && meta.logo ) { /* LOGO: COVER */ showImage( meta.logo, "cover" ); } }) .catch(function(error) { console.error( "GRIDLY TSS META ERROR", error ); }); /* ===================================== LOAD VENDORS ===================================== */ function loadVendors() { if ( vendorsLoaded ) { return Promise.resolve( true ); } if ( vendorPromise ) { return vendorPromise; } vendorPromise = fetch( WORKER + "/json?event=" + EVENT + "&t=" + Date.now() ) .then(function(response) { if (!response.ok) { throw new Error( "VENDOR HTTP " + response.status ); } return response.json(); }) .then(function(data) { vendors = Array.isArray( data.vendors ) ? data.vendors : []; vendorsLoaded = vendors.length > 0; return vendorsLoaded; }) .catch(function(error) { console.error( "GRIDLY TSS VENDOR ERROR", error ); return false; }) .finally(function() { vendorPromise = null; }); return vendorPromise; } /* ===================================== SHOW VENDOR ===================================== */ function showVendor( index ) { if ( !vendors.length ) { return; } index = ( index + vendors.length ) % vendors.length; current = index; /* VENDOR: CONTAIN SEM ZOOM / SEM CORTE */ showImage( vendors[index].url, "contain" ); /* PRELOAD SOMENTE O PRÓXIMO */ var next = new Image(); next.src = vendors[ ( index + 1 ) % vendors.length ].url; } /* ===================================== PREVIEW ===================================== */ function stopPreview() { if ( previewTimer ) { clearInterval( previewTimer ); previewTimer = null; } } function startPreview() { if ( !meta || meta.active !== true ) { return; } loadVendors() .then(function(ready) { if ( !ready || !vendors.length ) { return; } /* PRIMEIRO HOVER: LOGO -> VENDOR 1 */ if ( current === -1 ) { showVendor( 0 ); } stopPreview(); previewTimer = setInterval( function() { if ( document.hidden ) { return; } showVendor( current + 1 ); }, PREVIEW_TIME ); }); } /* ===================================== DESKTOP ===================================== */ card.addEventListener( "mouseenter", function() { if ( isTouch ) { return; } hover = true; startPreview(); } ); card.addEventListener( "mouseleave", function() { if ( isTouch ) { return; } hover = false; stopPreview(); } ); /* ===================================== MOBILE ===================================== */ if ( isTouch && "IntersectionObserver" in window ) { var observer = new IntersectionObserver( function(entries) { var visible = entries[0].isIntersecting && entries[0].intersectionRatio >= 0.6; if ( visible ) { startPreview(); } else { stopPreview(); } }, { threshold:[ 0, 0.6, 1 ] } ); observer.observe( card ); } /* ===================================== MODAL ===================================== */ function modalTotal() { return ( vendors.length + 1 ); } function modalSource( index ) { if ( index === 0 ) { return meta.logo; } var vendor = vendors[ index - 1 ]; return vendor ? vendor.url : null; } function showModal( index ) { var total = modalTotal(); if ( total <= 0 ) { return; } index = ( index + total ) % total; modalIndex = index; var source = modalSource( modalIndex ); if ( source ) { modalImg.src = source; } } /* ===================================== OPEN MODAL ===================================== */ card.addEventListener( "click", function() { if ( !meta || meta.active !== true ) { return; } loadVendors() .then(function(ready) { if ( !ready ) { return; } stopPreview(); modal.classList.add( "open" ); /* ABRE EXATAMENTE NA IMAGEM ATUAL */ if ( current === -1 ) { showModal( 0 ); } else { showModal( current + 1 ); } /* AUTO COMEÇA DESLIGADO */ setAuto( false ); }); } ); /* ===================================== CLOSE MODAL ===================================== */ function closeModal() { modal.classList.remove( "open" ); setAuto( false ); if ( hover && !isTouch ) { startPreview(); } } closeBtn.addEventListener( "click", function(event) { event.stopPropagation(); closeModal(); } ); modal.addEventListener( "click", function(event) { if ( event.target === modal ) { closeModal(); } } ); /* ===================================== ARROWS ===================================== */ prevBtn.addEventListener( "click", function(event) { event.stopPropagation(); showModal( modalIndex - 1 ); } ); nextBtn.addEventListener( "click", function(event) { event.stopPropagation(); showModal( modalIndex + 1 ); } ); /* ===================================== AUTO ===================================== */ function setAuto( value ) { modalAuto = value; if ( modalTimer ) { clearInterval( modalTimer ); modalTimer = null; } if ( modalAuto ) { autoBtn.textContent = "❚❚ AUTO"; if ( !document.hidden ) { modalTimer = setInterval( function() { showModal( modalIndex + 1 ); }, MODAL_TIME ); } } else { autoBtn.textContent = "▶ AUTO"; } } autoBtn.addEventListener( "click", function(event) { event.stopPropagation(); setAuto( !modalAuto ); } ); /* ===================================== KEYBOARD ===================================== */ document.addEventListener( "keydown", function(event) { if ( !modal.classList.contains( "open" ) ) { return; } if ( event.key === "Escape" ) { closeModal(); } if ( event.key === "ArrowLeft" ) { showModal( modalIndex - 1 ); } if ( event.key === "ArrowRight" ) { showModal( modalIndex + 1 ); } } ); /* ===================================== TAB VISIBILITY ===================================== */ document.addEventListener( "visibilitychange", function() { if ( document.hidden ) { stopPreview(); if ( modalTimer ) { clearInterval( modalTimer ); modalTimer = null; } return; } if ( modal.classList.contains( "open" ) && modalAuto ) { setAuto( true ); } else if ( hover && !isTouch ) { startPreview(); } } ); })(); LOADINGNEXTSALE
![MANLY WEEKEND]()
MANLY WEEKEND
![]()
(function () { var WORKER = "https://calm-disk-5a7d.fuoeyceo.workers.dev"; var EVENT = "manly"; var PREVIEW_TIME = 3200; var MODAL_TIME = 4500; var card = document.getElementById( "manly-card" ); var img = document.getElementById( "manly-img" ); var placeholder = document.getElementById( "manly-placeholder" ); var modal = document.getElementById( "manly-modal" ); var modalImg = document.getElementById( "manly-modal-img" ); var closeBtn = document.getElementById( "manly-close" ); var prevBtn = document.getElementById( "manly-prev" ); var nextBtn = document.getElementById( "manly-next" ); var autoBtn = document.getElementById( "manly-auto" ); var meta = null; var vendors = []; var vendorsLoaded = false; var vendorLoading = false; var current = -1; var previewTimer = null; var hover = false; var modalIndex = 0; var modalAuto = false; var modalTimer = null; var isTouch = window.matchMedia( "(hover: none)" ).matches; /* ================================ IMAGE ================================ */ function showImage( url, fit ) { if (!url) { return; } img.style.objectFit = fit || "contain"; img.src = url; img.style.display = "block"; placeholder.style.display = "none"; } /* ================================ META ================================ */ fetch( WORKER + "/meta?event=" + EVENT + "&t=" + Date.now() ) .then(function(response) { if (!response.ok) { throw new Error( "META HTTP " + response.status ); } return response.json(); }) .then(function(data) { meta = data; if ( meta.ok === true && meta.active === true && meta.hasGallery === true && meta.logo ) { showImage( meta.logo, "cover" ); } }) .catch(function(error) { console.error( "GRIDLY MANLY META ERROR", error ); }); /* ================================ VENDORS ================================ */ function loadVendors( callback ) { if ( vendorsLoaded ) { callback(); return; } if ( vendorLoading ) { return; } vendorLoading = true; fetch( WORKER + "/json?event=" + EVENT + "&t=" + Date.now() ) .then(function(response) { if (!response.ok) { throw new Error( "VENDOR HTTP " + response.status ); } return response.json(); }) .then(function(data) { vendors = Array.isArray( data.vendors ) ? data.vendors : []; vendorsLoaded = true; vendorLoading = false; callback(); }) .catch(function(error) { vendorLoading = false; console.error( "GRIDLY MANLY VENDOR ERROR", error ); }); } /* ================================ SHOW VENDOR ================================ */ function showVendor( index ) { if ( !vendors.length ) { return; } index = ( index + vendors.length ) % vendors.length; current = index; showImage( vendors[index].url, "contain" ); var next = new Image(); next.src = vendors[ ( index + 1 ) % vendors.length ].url; } /* ================================ PREVIEW ================================ */ function stopPreview() { if ( previewTimer ) { clearInterval( previewTimer ); previewTimer = null; } } function startPreview() { if ( !meta || meta.active !== true ) { return; } loadVendors( function() { if ( !vendors.length ) { return; } if ( current === -1 ) { showVendor( 0 ); } stopPreview(); previewTimer = setInterval( function() { showVendor( current + 1 ); }, PREVIEW_TIME ); } ); } /* ================================ DESKTOP ================================ */ card.addEventListener( "mouseenter", function() { if ( isTouch ) { return; } hover = true; startPreview(); } ); card.addEventListener( "mouseleave", function() { if ( isTouch ) { return; } hover = false; stopPreview(); } ); /* ================================ MOBILE ================================ */ if ( isTouch && "IntersectionObserver" in window ) { var observer = new IntersectionObserver( function(entries) { var visible = entries[0].isIntersecting && entries[0].intersectionRatio >= 0.6; if ( visible ) { startPreview(); } else { stopPreview(); } }, { threshold:[ 0, 0.6, 1 ] } ); observer.observe( card ); } /* ================================ MODAL ================================ */ function modalTotal() { return ( vendors.length + 1 ); } function modalSource( index ) { if ( index === 0 ) { return meta.logo; } var vendor = vendors[ index - 1 ]; return vendor ? vendor.url : null; } function showModal( index ) { var total = modalTotal(); if ( total <= 0 ) { return; } index = ( index + total ) % total; modalIndex = index; var source = modalSource( modalIndex ); if ( source ) { modalImg.src = source; } } /* ================================ OPEN MODAL ================================ */ card.addEventListener( "click", function() { if ( !meta || meta.active !== true ) { return; } loadVendors( function() { stopPreview(); modal.classList.add( "open" ); if ( current === -1 ) { showModal( 0 ); } else { showModal( current + 1 ); } setAuto( false ); } ); } ); /* ================================ CLOSE ================================ */ function closeModal() { modal.classList.remove( "open" ); setAuto( false ); if ( hover && !isTouch ) { startPreview(); } } closeBtn.addEventListener( "click", function(event) { event.stopPropagation(); closeModal(); } ); modal.addEventListener( "click", function(event) { if ( event.target === modal ) { closeModal(); } } ); /* ================================ ARROWS ================================ */ prevBtn.addEventListener( "click", function(event) { event.stopPropagation(); showModal( modalIndex - 1 ); } ); nextBtn.addEventListener( "click", function(event) { event.stopPropagation(); showModal( modalIndex + 1 ); } ); /* ================================ AUTO ================================ */ function setAuto( value ) { modalAuto = value; if ( modalTimer ) { clearInterval( modalTimer ); modalTimer = null; } if ( modalAuto ) { autoBtn.textContent = "❚❚ AUTO"; modalTimer = setInterval( function() { showModal( modalIndex + 1 ); }, MODAL_TIME ); } else { autoBtn.textContent = "▶ AUTO"; } } autoBtn.addEventListener( "click", function(event) { event.stopPropagation(); setAuto( !modalAuto ); } ); /* ================================ KEYBOARD ================================ */ document.addEventListener( "keydown", function(event) { if ( !modal.classList.contains( "open" ) ) { return; } if ( event.key === "Escape" ) { closeModal(); } if ( event.key === "ArrowLeft" ) { showModal( modalIndex - 1 ); } if ( event.key === "ArrowRight" ) { showModal( modalIndex + 1 ); } } ); /* ================================ TAB HIDDEN ================================ */ document.addEventListener( "visibilitychange", function() { if ( document.hidden ) { stopPreview(); if ( modalTimer ) { clearInterval( modalTimer ); modalTimer = null; } return; } if ( modal.classList.contains( "open" ) && modalAuto ) { setAuto( true ); } else if ( hover && !isTouch ) { startPreview(); } } ); })(); LOADINGNEXTSALE
![SO KAWAII SUNDAYS]()
SO KAWAII SUNDAYS
![]()
(function () { var WORKER = "https://calm-disk-5a7d.fuoeyceo.workers.dev"; var EVENT = "sokawaii"; var PREVIEW_TIME = 3200; var MODAL_TIME = 4500; var card = document.getElementById( "sokawaii-card" ); var img = document.getElementById( "sokawaii-img" ); var placeholder = document.getElementById( "sokawaii-placeholder" ); var modal = document.getElementById( "sokawaii-modal" ); var modalImg = document.getElementById( "sokawaii-modal-img" ); var closeBtn = document.getElementById( "sokawaii-close" ); var prevBtn = document.getElementById( "sokawaii-prev" ); var nextBtn = document.getElementById( "sokawaii-next" ); var autoBtn = document.getElementById( "sokawaii-auto" ); var meta = null; var vendors = []; var vendorsLoaded = false; var vendorLoading = false; var current = -1; var previewTimer = null; var hover = false; var modalIndex = 0; var modalAuto = false; var modalTimer = null; var isTouch = window.matchMedia( "(hover: none)" ).matches; /* ===================================== IMAGE ===================================== */ function showImage( url, fit ) { if (!url) { return; } img.style.objectFit = fit || "contain"; img.src = url; img.style.display = "block"; placeholder.style.display = "none"; } /* ===================================== META ===================================== */ fetch( WORKER + "/meta?event=" + EVENT + "&t=" + Date.now() ) .then(function(response) { if (!response.ok) { throw new Error( "META HTTP " + response.status ); } return response.json(); }) .then(function(data) { meta = data; if ( meta.ok === true && meta.active === true && meta.hasGallery === true && meta.logo ) { showImage( meta.logo, "cover" ); } }) .catch(function(error) { console.error( "GRIDLY SO KAWAII META ERROR", error ); }); /* ===================================== LOAD VENDORS ===================================== */ function loadVendors( callback ) { if ( vendorsLoaded ) { callback(); return; } if ( vendorLoading ) { return; } vendorLoading = true; fetch( WORKER + "/json?event=" + EVENT + "&t=" + Date.now() ) .then(function(response) { if (!response.ok) { throw new Error( "VENDOR HTTP " + response.status ); } return response.json(); }) .then(function(data) { vendors = Array.isArray( data.vendors ) ? data.vendors : []; vendorsLoaded = true; vendorLoading = false; callback(); }) .catch(function(error) { vendorLoading = false; console.error( "GRIDLY SO KAWAII VENDOR ERROR", error ); }); } /* ===================================== SHOW VENDOR ===================================== */ function showVendor( index ) { if ( !vendors.length ) { return; } index = ( index + vendors.length ) % vendors.length; current = index; showImage( vendors[index].url, "contain" ); var next = new Image(); next.src = vendors[ ( index + 1 ) % vendors.length ].url; } /* ===================================== PREVIEW ===================================== */ function stopPreview() { if ( previewTimer ) { clearInterval( previewTimer ); previewTimer = null; } } function startPreview() { if ( !meta || meta.active !== true ) { return; } loadVendors( function() { if ( !vendors.length ) { return; } if ( current === -1 ) { showVendor( 0 ); } stopPreview(); previewTimer = setInterval( function() { showVendor( current + 1 ); }, PREVIEW_TIME ); } ); } /* ===================================== DESKTOP ===================================== */ card.addEventListener( "mouseenter", function() { if ( isTouch ) { return; } hover = true; startPreview(); } ); card.addEventListener( "mouseleave", function() { if ( isTouch ) { return; } hover = false; stopPreview(); } ); /* ===================================== MOBILE ===================================== */ if ( isTouch && "IntersectionObserver" in window ) { var observer = new IntersectionObserver( function(entries) { var visible = entries[0].isIntersecting && entries[0].intersectionRatio >= 0.6; if ( visible ) { startPreview(); } else { stopPreview(); } }, { threshold:[ 0, 0.6, 1 ] } ); observer.observe( card ); } /* ===================================== MODAL ===================================== */ function modalTotal() { return ( vendors.length + 1 ); } function modalSource( index ) { if ( index === 0 ) { return meta.logo; } var vendor = vendors[ index - 1 ]; return vendor ? vendor.url : null; } function showModal( index ) { var total = modalTotal(); if ( total <= 0 ) { return; } index = ( index + total ) % total; modalIndex = index; var source = modalSource( modalIndex ); if ( source ) { modalImg.src = source; } } /* ===================================== OPEN MODAL ===================================== */ card.addEventListener( "click", function() { if ( !meta || meta.active !== true ) { return; } loadVendors( function() { stopPreview(); modal.classList.add( "open" ); if ( current === -1 ) { showModal( 0 ); } else { showModal( current + 1 ); } setAuto( false ); } ); } ); /* ===================================== CLOSE ===================================== */ function closeModal() { modal.classList.remove( "open" ); setAuto( false ); if ( hover && !isTouch ) { startPreview(); } } closeBtn.addEventListener( "click", function(event) { event.stopPropagation(); closeModal(); } ); modal.addEventListener( "click", function(event) { if ( event.target === modal ) { closeModal(); } } ); /* ===================================== ARROWS ===================================== */ prevBtn.addEventListener( "click", function(event) { event.stopPropagation(); showModal( modalIndex - 1 ); } ); nextBtn.addEventListener( "click", function(event) { event.stopPropagation(); showModal( modalIndex + 1 ); } ); /* ===================================== AUTO ===================================== */ function setAuto( value ) { modalAuto = value; if ( modalTimer ) { clearInterval( modalTimer ); modalTimer = null; } if ( modalAuto ) { autoBtn.textContent = "❚❚ AUTO"; modalTimer = setInterval( function() { showModal( modalIndex + 1 ); }, MODAL_TIME ); } else { autoBtn.textContent = "▶ AUTO"; } } autoBtn.addEventListener( "click", function(event) { event.stopPropagation(); setAuto( !modalAuto ); } ); /* ===================================== KEYBOARD ===================================== */ document.addEventListener( "keydown", function(event) { if ( !modal.classList.contains( "open" ) ) { return; } if ( event.key === "Escape" ) { closeModal(); } if ( event.key === "ArrowLeft" ) { showModal( modalIndex - 1 ); } if ( event.key === "ArrowRight" ) { showModal( modalIndex + 1 ); } } ); /* ===================================== TAB VISIBILITY ===================================== */ document.addEventListener( "visibilitychange", function() { if ( document.hidden ) { stopPreview(); if ( modalTimer ) { clearInterval( modalTimer ); modalTimer = null; } return; } if ( modal.classList.contains( "open" ) && modalAuto ) { setAuto( true ); } else if ( hover && !isTouch ) { startPreview(); } } ); })();
SUPPORT
SECOND LIFE
--
PLAYERS ONLINE
(function () { var ENDPOINT = "https://calm-disk-5a7d.fuoeyceo.workers.dev/online"; var REFRESH_TIME = 180000; var wrap = document.getElementById( "sl-online-wrap" ); var count = document.getElementById( "sl-online-count" ); var status = document.getElementById( "sl-online-status" ); function formatNumber( number ) { return Number( number ).toLocaleString( "en-US" ); } function loadOnline() { fetch( ENDPOINT + "?t=" + Date.now() ) .then(function(response) { if ( !response.ok ) { throw new Error( "HTTP " + response.status ); } return response.json(); }) .then(function(data) { if ( data.ok !== true || !Number.isFinite( Number( data.online ) ) ) { throw new Error( "Invalid online value" ); } wrap.classList.remove( "error" ); count.style.opacity = "0"; setTimeout( function() { count.textContent = formatNumber( data.online ); count.style.opacity = "1"; }, 120 ); status .lastElementChild .textContent = "PLAYERS ONLINE"; }) .catch(function(error) { console.error( "GRIDLY SECOND LIFE ONLINE ERROR", error ); wrap.classList.add( "error" ); count.textContent = "--"; status .lastElementChild .textContent = "STATUS UNAVAILABLE"; }); } loadOnline(); setInterval( function() { if ( !document.hidden ) { loadOnline(); } }, REFRESH_TIME ); document.addEventListener( "visibilitychange", function() { if ( !document.hidden ) { loadOnline(); } } ); })();
RENTALS
LAND
DECORATED
CHEAPER
COMMUNITY
HANGOUT
Still under construction.
SAILLING
ENG · PT · ES · +
GOLF CLUB
ENG · PT · ES · +
FREEBIE
ENG · PT · ES · +
● 00 HERE
(async function () { const CLUB_NAME = "GALAXY"; const DESTINATION_SLUG = "freebie-galaxy"; const API_BASE = "https://little-leaf-7be8.fuoeyceo.workers.dev"; const script = document.currentScript; const wrapper = script.parentElement; const el = wrapper.querySelector("[data-gridly-count]"); const links = [...document.querySelectorAll("a")]; const club = links.find(a => a.textContent.trim().toUpperCase() === CLUB_NAME.toUpperCase() ); if (club) { const style = window.getComputedStyle(club); el.style.fontFamily = style.fontFamily; el.style.fontWeight = style.fontWeight; } try { const response = await fetch( API_BASE + "/count?slug=" + encodeURIComponent(DESTINATION_SLUG) ); const data = await response.json(); if (!data.ok || typeof data.count !== "number") { throw new Error(); } el.textContent = "● " + data.count + " HERE"; el.style.visibility = "visible"; } catch (error) { el.style.visibility = "hidden"; } })(); RP
ENG · PT · ES · +
● 00 HERE
(async function () { const CLUB_NAME = "BLACKWATERS"; const DESTINATION_SLUG = "backwaters"; const API_BASE = "https://little-leaf-7be8.fuoeyceo.workers.dev"; const script = document.currentScript; const wrapper = script.parentElement; const el = wrapper.querySelector("[data-gridly-count]"); const links = [...document.querySelectorAll("a")]; const club = links.find(a => a.textContent.trim().toUpperCase() === CLUB_NAME.toUpperCase() ); if (club) { const style = window.getComputedStyle(club); el.style.fontFamily = style.fontFamily; el.style.fontWeight = style.fontWeight; } try { const response = await fetch( API_BASE + "/count?slug=" + encodeURIComponent(DESTINATION_SLUG) ); const data = await response.json(); if (!data.ok || typeof data.count !== "number") { throw new Error(); } el.textContent = "● " + data.count + " HERE"; el.style.visibility = "visible"; } catch (error) { el.style.visibility = "hidden"; } })(); SEX · MEET · CLUB
ENG · PT · ES · +
SEX
ENG · PT · ES · +
● 00 HERE
(async function () { const DESTINATION_SLUG = "the-beauty-hole"; const API_BASE = "https://little-leaf-7be8.fuoeyceo.workers.dev"; const script = document.currentScript; const wrapper = script.parentElement; const el = wrapper.querySelector("[data-gridly-count]"); /* USA A MESMA FONTE DO GALAXY */ const links = [...document.querySelectorAll("a")]; const reference = links.find(a => a.textContent.trim().toUpperCase() === "GALAXY" ); if (reference) { const style = window.getComputedStyle(reference); el.style.fontFamily = style.fontFamily; el.style.fontWeight = style.fontWeight; } /* BUSCA A CONTAGEM DO BEAUTY HOLE */ try { const response = await fetch( API_BASE + "/count?slug=" + encodeURIComponent(DESTINATION_SLUG) ); const data = await response.json(); if (!data.ok || typeof data.count !== "number") { throw new Error(); } el.textContent = "● " + data.count + " HERE"; el.style.visibility = "visible"; } catch (error) { el.style.visibility = "hidden"; } })(); SEX · NUDE BEACH
ENG · PT · ES · +
SEX · NUDE BEACH · MEET
PT
SEX · MEET
ENG · PT · ES · +
TRAVEL
Still under construction.
CLUBS
Still under construction.
HOUSE · TECHNO
● -- HERE
(async function () { /* ===================================== ALTERE SOMENTE ESTAS DUAS LINHAS ===================================== */ const CLUB_NAME = "PEAK"; const DESTINATION_SLUG = "peak-lounge"; /* ===================================== */ const API_BASE = "https://little-leaf-7be8.fuoeyceo.workers.dev"; const script = document.currentScript; const wrapper = script.parentElement; const el = wrapper.querySelector("[data-gridly-count]"); /* COPIA A FONTE DO NOME DO CLUBE */ const links = [...document.querySelectorAll("a")]; const club = links.find(a => a.textContent.trim().toUpperCase() === CLUB_NAME.toUpperCase() ); if (club) { const style = window.getComputedStyle(club); el.style.fontFamily = style.fontFamily; el.style.fontWeight = style.fontWeight; } /* BUSCA A CONTAGEM */ try { const response = await fetch( API_BASE + "/count?slug=" + encodeURIComponent(DESTINATION_SLUG) ); const data = await response.json(); if (!data.ok) { throw new Error(); } el.textContent = "● " + data.count + " HERE"; } catch (error) { el.textContent = "● -- HERE"; } })(); MIXED
● -- HERE
(async function () { /* ===================================== ALTERE SOMENTE ESTAS DUAS LINHAS ===================================== */ const CLUB_NAME = "SONANCE"; const DESTINATION_SLUG = "sonance"; /* ===================================== */ const API_BASE = "https://little-leaf-7be8.fuoeyceo.workers.dev"; const script = document.currentScript; const wrapper = script.parentElement; const el = wrapper.querySelector("[data-gridly-count]"); /* COPIA A FONTE DO NOME DO CLUBE */ const links = [...document.querySelectorAll("a")]; const club = links.find(a => a.textContent.trim().toUpperCase() === CLUB_NAME.toUpperCase() ); if (club) { const style = window.getComputedStyle(club); el.style.fontFamily = style.fontFamily; el.style.fontWeight = style.fontWeight; } /* BUSCA A CONTAGEM */ try { const response = await fetch( API_BASE + "/count?slug=" + encodeURIComponent(DESTINATION_SLUG) ); const data = await response.json(); if (!data.ok) { throw new Error(); } el.textContent = "● " + data.count + " HERE"; } catch (error) { el.textContent = "● -- HERE"; } })(); HOUSE · TECHNO
● -- HERE
(async function () { /* ===================================== ALTERE SOMENTE ESTAS DUAS LINHAS ===================================== */ const CLUB_NAME = "THE DRIP"; const DESTINATION_SLUG = "the-drip-dance-club"; /* ===================================== */ const API_BASE = "https://little-leaf-7be8.fuoeyceo.workers.dev"; const script = document.currentScript; const wrapper = script.parentElement; const el = wrapper.querySelector("[data-gridly-count]"); /* COPIA A FONTE DO NOME DO CLUBE */ const links = [...document.querySelectorAll("a")]; const club = links.find(a => a.textContent.trim().toUpperCase() === CLUB_NAME.toUpperCase() ); if (club) { const style = window.getComputedStyle(club); el.style.fontFamily = style.fontFamily; el.style.fontWeight = style.fontWeight; } /* BUSCA A CONTAGEM */ try { const response = await fetch( API_BASE + "/count?slug=" + encodeURIComponent(DESTINATION_SLUG) ); const data = await response.json(); if (!data.ok) { throw new Error(); } el.textContent = "● " + data.count + " HERE"; } catch (error) { el.textContent = "● -- HERE"; } })(); HOUSE · TECHNO
● -- HERE
(async function () { /* ===================================== ALTERE SOMENTE ESTAS DUAS LINHAS ===================================== */ const CLUB_NAME = "DEEP BOX"; const DESTINATION_SLUG = "deep-box"; /* ===================================== */ const API_BASE = "https://little-leaf-7be8.fuoeyceo.workers.dev"; const script = document.currentScript; const wrapper = script.parentElement; const el = wrapper.querySelector("[data-gridly-count]"); /* COPIA A FONTE DO NOME DO CLUBE */ const links = [...document.querySelectorAll("a")]; const club = links.find(a => a.textContent.trim().toUpperCase() === CLUB_NAME.toUpperCase() ); if (club) { const style = window.getComputedStyle(club); el.style.fontFamily = style.fontFamily; el.style.fontWeight = style.fontWeight; } /* BUSCA A CONTAGEM */ try { const response = await fetch( API_BASE + "/count?slug=" + encodeURIComponent(DESTINATION_SLUG) ); const data = await response.json(); if (!data.ok) { throw new Error(); } el.textContent = "● " + data.count + " HERE"; } catch (error) { el.textContent = "● -- HERE"; } })(); HOUSE · TECHNO
● -- HERE
(async function () { /* ===================================== ALTERE SOMENTE ESTAS DUAS LINHAS ===================================== */ const CLUB_NAME = "WAREHOUSE"; const DESTINATION_SLUG = "warehouse-21"; /* ===================================== */ const API_BASE = "https://little-leaf-7be8.fuoeyceo.workers.dev"; const script = document.currentScript; const wrapper = script.parentElement; const el = wrapper.querySelector("[data-gridly-count]"); /* COPIA A FONTE DO NOME DO CLUBE */ const links = [...document.querySelectorAll("a")]; const club = links.find(a => a.textContent.trim().toUpperCase() === CLUB_NAME.toUpperCase() ); if (club) { const style = window.getComputedStyle(club); el.style.fontFamily = style.fontFamily; el.style.fontWeight = style.fontWeight; } /* BUSCA A CONTAGEM */ try { const response = await fetch( API_BASE + "/count?slug=" + encodeURIComponent(DESTINATION_SLUG) ); const data = await response.json(); if (!data.ok) { throw new Error(); } el.textContent = "● " + data.count + " HERE"; } catch (error) { el.textContent = "● -- HERE"; } })(); BLUES · JAZZ
● -- HERE
(async function () { /* ===================================== ALTERE SOMENTE ESTAS DUAS LINHAS ===================================== */ const CLUB_NAME = "FOGBOUND BLUES"; const DESTINATION_SLUG = "fogbound-blues"; /* ===================================== */ const API_BASE = "https://little-leaf-7be8.fuoeyceo.workers.dev"; const script = document.currentScript; const wrapper = script.parentElement; const el = wrapper.querySelector("[data-gridly-count]"); /* COPIA A FONTE DO NOME DO CLUBE */ const links = [...document.querySelectorAll("a")]; const club = links.find(a => a.textContent.trim().toUpperCase() === CLUB_NAME.toUpperCase() ); if (club) { const style = window.getComputedStyle(club); el.style.fontFamily = style.fontFamily; el.style.fontWeight = style.fontWeight; } /* BUSCA A CONTAGEM */ try { const response = await fetch( API_BASE + "/count?slug=" + encodeURIComponent(DESTINATION_SLUG) ); const data = await response.json(); if (!data.ok) { throw new Error(); } el.textContent = "● " + data.count + " HERE"; } catch (error) { el.textContent = "● -- HERE"; } })(); MIXED
● -- HERE
(async function () { /* ===================================== ALTERE SOMENTE ESTAS DUAS LINHAS ===================================== */ const CLUB_NAME = "511"; const DESTINATION_SLUG = "club-511"; /* ===================================== */ const API_BASE = "https://little-leaf-7be8.fuoeyceo.workers.dev"; const script = document.currentScript; const wrapper = script.parentElement; const el = wrapper.querySelector("[data-gridly-count]"); /* COPIA A FONTE DO NOME DO CLUBE */ const links = [...document.querySelectorAll("a")]; const club = links.find(a => a.textContent.trim().toUpperCase() === CLUB_NAME.toUpperCase() ); if (club) { const style = window.getComputedStyle(club); el.style.fontFamily = style.fontFamily; el.style.fontWeight = style.fontWeight; } /* BUSCA A CONTAGEM */ try { const response = await fetch( API_BASE + "/count?slug=" + encodeURIComponent(DESTINATION_SLUG) ); const data = await response.json(); if (!data.ok) { throw new Error(); } el.textContent = "● " + data.count + " HERE"; } catch (error) { el.textContent = "● -- HERE"; } })(); REGGAETON
● -- HERE
(async function () { /* ===================================== ALTERE SOMENTE ESTAS DUAS LINHAS ===================================== */ const CLUB_NAME = "MR JUERGA"; const DESTINATION_SLUG = "mr-juerga-reggaeton-club"; /* ===================================== */ const API_BASE = "https://little-leaf-7be8.fuoeyceo.workers.dev"; const script = document.currentScript; const wrapper = script.parentElement; const el = wrapper.querySelector("[data-gridly-count]"); /* COPIA A FONTE DO NOME DO CLUBE */ const links = [...document.querySelectorAll("a")]; const club = links.find(a => a.textContent.trim().toUpperCase() === CLUB_NAME.toUpperCase() ); if (club) { const style = window.getComputedStyle(club); el.style.fontFamily = style.fontFamily; el.style.fontWeight = style.fontWeight; } /* BUSCA A CONTAGEM */ try { const response = await fetch( API_BASE + "/count?slug=" + encodeURIComponent(DESTINATION_SLUG) ); const data = await response.json(); if (!data.ok) { throw new Error(); } el.textContent = "● " + data.count + " HERE"; } catch (error) { el.textContent = "● -- HERE"; } })(); HOUSE · TECHNO
● -- HERE
(async function () { /* ===================================== ALTERE SOMENTE ESTAS DUAS LINHAS ===================================== */ const CLUB_NAME = "LOULOU"; const DESTINATION_SLUG = "loulou"; /* ===================================== */ const API_BASE = "https://little-leaf-7be8.fuoeyceo.workers.dev"; const script = document.currentScript; const wrapper = script.parentElement; const el = wrapper.querySelector("[data-gridly-count]"); /* COPIA A FONTE DO NOME DO CLUBE */ const links = [...document.querySelectorAll("a")]; const club = links.find(a => a.textContent.trim().toUpperCase() === CLUB_NAME.toUpperCase() ); if (club) { const style = window.getComputedStyle(club); el.style.fontFamily = style.fontFamily; el.style.fontWeight = style.fontWeight; } /* BUSCA A CONTAGEM */ try { const response = await fetch( API_BASE + "/count?slug=" + encodeURIComponent(DESTINATION_SLUG) ); const data = await response.json(); if (!data.ok) { throw new Error(); } el.textContent = "● " + data.count + " HERE"; } catch (error) { el.textContent = "● -- HERE"; } })(); MIXED
● -- HERE
(async function () { /* ===================================== ALTERE SOMENTE ESTAS DUAS LINHAS ===================================== */ const CLUB_NAME = "SUNVANA"; const DESTINATION_SLUG = "sunvana"; /* ===================================== */ const API_BASE = "https://little-leaf-7be8.fuoeyceo.workers.dev"; const script = document.currentScript; const wrapper = script.parentElement; const el = wrapper.querySelector("[data-gridly-count]"); /* COPIA A FONTE DO NOME DO CLUBE */ const links = [...document.querySelectorAll("a")]; const club = links.find(a => a.textContent.trim().toUpperCase() === CLUB_NAME.toUpperCase() ); if (club) { const style = window.getComputedStyle(club); el.style.fontFamily = style.fontFamily; el.style.fontWeight = style.fontWeight; } /* BUSCA A CONTAGEM */ try { const response = await fetch( API_BASE + "/count?slug=" + encodeURIComponent(DESTINATION_SLUG) ); const data = await response.json(); if (!data.ok) { throw new Error(); } el.textContent = "● " + data.count + " HERE"; } catch (error) { el.textContent = "● -- HERE"; } })(); MIXED
● -- HERE
(async function () { /* ===================================== ALTERE SOMENTE ESTAS DUAS LINHAS ===================================== */ const CLUB_NAME = "BALI"; const DESTINATION_SLUG = "portugal"; /* ===================================== */ const API_BASE = "https://little-leaf-7be8.fuoeyceo.workers.dev"; const script = document.currentScript; const wrapper = script.parentElement; const el = wrapper.querySelector("[data-gridly-count]"); /* COPIA A FONTE DO NOME DO CLUBE */ const links = [...document.querySelectorAll("a")]; const club = links.find(a => a.textContent.trim().toUpperCase() === CLUB_NAME.toUpperCase() ); if (club) { const style = window.getComputedStyle(club); el.style.fontFamily = style.fontFamily; el.style.fontWeight = style.fontWeight; } /* BUSCA A CONTAGEM */ try { const response = await fetch( API_BASE + "/count?slug=" + encodeURIComponent(DESTINATION_SLUG) ); const data = await response.json(); if (!data.ok) { throw new Error(); } el.textContent = "● " + data.count + " HERE"; } catch (error) { el.textContent = "● -- HERE"; } })(); HOUSE · TECHNO
● -- HERE
(async function () { /* ===================================== ALTERE SOMENTE ESTAS DUAS LINHAS ===================================== */ const CLUB_NAME = "SYLVAN"; const DESTINATION_SLUG = "sylvan"; /* ===================================== */ const API_BASE = "https://little-leaf-7be8.fuoeyceo.workers.dev"; const script = document.currentScript; const wrapper = script.parentElement; const el = wrapper.querySelector("[data-gridly-count]"); /* COPIA A FONTE DO NOME DO CLUBE */ const links = [...document.querySelectorAll("a")]; const club = links.find(a => a.textContent.trim().toUpperCase() === CLUB_NAME.toUpperCase() ); if (club) { const style = window.getComputedStyle(club); el.style.fontFamily = style.fontFamily; el.style.fontWeight = style.fontWeight; } /* BUSCA A CONTAGEM */ try { const response = await fetch( API_BASE + "/count?slug=" + encodeURIComponent(DESTINATION_SLUG) ); const data = await response.json(); if (!data.ok) { throw new Error(); } el.textContent = "● " + data.count + " HERE"; } catch (error) { el.textContent = "● -- HERE"; } })(); HOUSE · TECHNO
● -- HERE
(async function () { /* ===================================== ALTERE SOMENTE ESTAS DUAS LINHAS ===================================== */ const CLUB_NAME = "TOMORROWLAND"; const DESTINATION_SLUG = "tomorrowland"; /* ===================================== */ const API_BASE = "https://little-leaf-7be8.fuoeyceo.workers.dev"; const script = document.currentScript; const wrapper = script.parentElement; const el = wrapper.querySelector("[data-gridly-count]"); /* COPIA A FONTE DO NOME DO CLUBE */ const links = [...document.querySelectorAll("a")]; const club = links.find(a => a.textContent.trim().toUpperCase() === CLUB_NAME.toUpperCase() ); if (club) { const style = window.getComputedStyle(club); el.style.fontFamily = style.fontFamily; el.style.fontWeight = style.fontWeight; } /* BUSCA A CONTAGEM */ try { const response = await fetch( API_BASE + "/count?slug=" + encodeURIComponent(DESTINATION_SLUG) ); const data = await response.json(); if (!data.ok) { throw new Error(); } el.textContent = "● " + data.count + " HERE"; } catch (error) { el.textContent = "● -- HERE"; } })(); MIXED
● -- HERE
(async function () { /* ===================================== ALTERE SOMENTE ESTAS DUAS LINHAS ===================================== */ const CLUB_NAME = "BIG DADDY"; const DESTINATION_SLUG = "big-daddys"; /* ===================================== */ const API_BASE = "https://little-leaf-7be8.fuoeyceo.workers.dev"; const script = document.currentScript; const wrapper = script.parentElement; const el = wrapper.querySelector("[data-gridly-count]"); /* COPIA A FONTE DO NOME DO CLUBE */ const links = [...document.querySelectorAll("a")]; const club = links.find(a => a.textContent.trim().toUpperCase() === CLUB_NAME.toUpperCase() ); if (club) { const style = window.getComputedStyle(club); el.style.fontFamily = style.fontFamily; el.style.fontWeight = style.fontWeight; } /* BUSCA A CONTAGEM */ try { const response = await fetch( API_BASE + "/count?slug=" + encodeURIComponent(DESTINATION_SLUG) ); const data = await response.json(); if (!data.ok) { throw new Error(); } el.textContent = "● " + data.count + " HERE"; } catch (error) { el.textContent = "● -- HERE"; } })(); MIXED
● -- HERE
(async function () { /* ===================================== ALTERE SOMENTE ESTAS DUAS LINHAS ===================================== */ const CLUB_NAME = "SOUNDSTATION"; const DESTINATION_SLUG = "soundsation"; /* ===================================== */ const API_BASE = "https://little-leaf-7be8.fuoeyceo.workers.dev"; const script = document.currentScript; const wrapper = script.parentElement; const el = wrapper.querySelector("[data-gridly-count]"); /* COPIA A FONTE DO NOME DO CLUBE */ const links = [...document.querySelectorAll("a")]; const club = links.find(a => a.textContent.trim().toUpperCase() === CLUB_NAME.toUpperCase() ); if (club) { const style = window.getComputedStyle(club); el.style.fontFamily = style.fontFamily; el.style.fontWeight = style.fontWeight; } /* BUSCA A CONTAGEM */ try { const response = await fetch( API_BASE + "/count?slug=" + encodeURIComponent(DESTINATION_SLUG) ); const data = await response.json(); if (!data.ok) { throw new Error(); } el.textContent = "● " + data.count + " HERE"; } catch (error) { el.textContent = "● -- HERE"; } })();
SELECT SESSION
Still under construction.
UNISEX EVENTS
02TH SEPT 2026 - (YEAR EVENT)
EVENT ALERTS
Get notified when new events open.
SLT CONVERTER
SECOND LIFE
SLT · PACIFIC TIME
CURRENT TIME
SELECT A FUTURE TIME TO SET AN ALERT