Help
RSS
API
Feed
Maltego
Contact
Domain > letsgobrewers.com
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2025-03-12
18.67.0.108
(
ClassC
)
2025-07-31
3.175.34.106
(
ClassC
)
Port 80
HTTP/1.1 301 Moved PermanentlyServer: CloudFrontDate: Thu, 31 Jul 2025 06:38:54 GMTContent-Type: text/htmlContent-Length: 167Connection: keep-aliveLocation: https://letsgobrewers.com/X-Cache: Redirect from cloudfrontVia: 1.1 240505787baa09e4b0a287e248b4543a.cloudfront.net (CloudFront)X-Amz-Cf-Pop: HIO52-P3X-Amz-Cf-Id: h75oOZbffyy9tUTpRHTd_lkSIWzv-D18zHuRrAFuKHZ5P4q7JKNvSQ html>head>title>301 Moved Permanently/title>/head>body>center>h1>301 Moved Permanently/h1>/center>hr>center>CloudFront/center>/body>/html>
Port 443
HTTP/1.1 200 OKContent-Type: text/html; charsetutf-8Content-Length: 45842Connection: keep-aliveDate: Thu, 31 Jul 2025 06:38:55 GMTLast-Modified: Sun, 22 Jun 2025 13:01:18 GMTETag: 74d1ca1f81a7ef6dca767a78f2b137e7x-amz-server-side-encryption: AES256x-amz-version-id: JAi8KkZKaKGq69MwMxe0cGvC2I_6DyimAccept-Ranges: bytesServer: AmazonS3X-Cache: Miss from cloudfrontVia: 1.1 e3de3342d71bbdf1f2c9c88468a73486.cloudfront.net (CloudFront)X-Amz-Cf-Pop: HIO52-P3X-Amz-Cf-Id: wZ18yVawN_W_3RW36TPJNq56SplT7Ue2namNEw1HRN5GP0e0vMaxsg !DOCTYPE html>html langen>head> title>Lets Go Brewers! Countdown to first pitch/title> meta charsetutf-8> meta nameviewport contentwidthdevice-width, user-scalableno, minimum-scale1.0, maximum-scale1.0> style> body { background-color: #000000; color: #444; margin: 0; overflow: hidden; } a { color: #08f; } .header { width: 100%; height: 45px; text-align: center; font-size: 12px; color: #a9deff; background-color: #13294B; display: flex; justify-content: space-between; align-items: center; padding: 10px; box-sizing: border-box; position: fixed; top: 0; z-index: 1000; } .headertxt { display: flex; justify-content: center; align-items: center; font-size: 12px; color: #a9deff; } .headertxt a:link, .headertxt a:visited, .headertxt a:hover, .headertxt a:active { text-decoration: none; color: #a9deff; } .footer { position: absolute; bottom: 0; width: 100%; height: 45px; text-align: center; font-size: 12px; color: #a9deff; background-color: #13294B; display: flex; justify-content: center; align-items: center; padding: 10px; box-sizing: border-box; } .footertxt { display: flex; justify-content: center; align-items: center; font-size: 12px; color: #a9deff; } .footertxt a:link, .footertxt a:visited, .footertxt a:hover, .footertxt a:active { text-decoration: none; color: #a9deff; } .imgcenter { position: absolute; margin: auto; top: 0; left: 0; right: 0; bottom: 0; } .weather { font-size: 12px; color: #a9deff; } .ticker-wrapper { position: absolute; bottom: 45px; width: 100%; background-color: #13294B; color: #a9deff; overflow: hidden; white-space: nowrap; box-sizing: border-box; } .ticker { display: inline-block; white-space: nowrap; } .highlight { color: white; } .burger-menu { display: flex; flex-direction: column; cursor: pointer; position: absolute; top: 10px; right: 10px; } .burger-menu span { height: 3px; width: 25px; background-color: #a9deff; margin: 4px 0; transition: 0.4s; } .nav-links { display: none; flex-direction: column; position: absolute; top: 45px; right: 10px; background-color: #444; width: 150px; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3); z-index: 1001; } .nav-links a { padding: 10px; text-decoration: none; color: #a9deff; text-align: center; } .nav-links a:hover { background-color: #555; } .donate-button-header { position: absolute; top: 10px; right: 50px; } /style> link relapple-touch-icon sizes180x180 href/apple-touch-icon.png> link relicon typeimage/png sizes32x32 href/favicon-32x32.png> link relicon typeimage/png sizes16x16 href/favicon-16x16.png> link relmanifest href/site.webmanifest> meta namemsapplication-TileColor content#da532c> meta nametheme-color content#ffffff>/head>body> script typeimportmap> { imports: { three: /threejs/three.module.js, three/addons/: /threejs/ } } /script> script typemodule> import * as THREE from three; import { OrbitControls } from three/addons/controls/OrbitControls.js; import { FontLoader } from three/addons/loaders/FontLoader.js; import { GLTFLoader } from three/addons/loaders/GLTFLoader.js; import { DRACOLoader } from three/addons/loaders/DRACOLoader.js; import { SVGLoader } from three/addons/loaders/SVGLoader.js; import { ImprovedNoise } from /threejs/math/ImprovedNoise.js; import { MeshoptDecoder } from /threejs/meshopt_decoder.module.js; let glow 0.5; let camera, scene, renderer, textMesh, lineText, dateTextMesh, lineDateText, weatherTextMesh, lineWeatherText; let cylinderLiquid, liquidClock; let targetDates ; let currentTargetIndex 0; let baseball; let startTime Date.now(); let radius 50; let weatherData null; let weatherIconGroup null; let isAnimating true; let bubbleParticles; let clock; let perlin; let bubbleDelay 0.5; // Delay before bubbles start in seconds let initialSwirlDuration 5; // Duration for initial swirling motion in seconds let backgroundChanged false; // Track if background has been changed const timeZoneAbbreviations { Pacific/Honolulu: HST, America/Anchorage: AKST, America/Los_Angeles: PST, America/Denver: MST, America/Chicago: CST, America/New_York: EST, America/Adak: HDT, Europe/London: GMT, Europe/Berlin: CET, Asia/Tokyo: JST, Australia/Sydney: AEST }; const liquidColors 0xFAE96F, 0xFFD700, 0xFF8C00, 0xFF4500, 0xFCDC96, 0x4A0000; // Add more colors as needed let selectedLiquidColor; // Randomized values that will remain constant for each page load or refresh const radialSegments Math.random() 0.5 ? Math.floor(Math.random() * (200 - 32 + 1)) + 32 : (Math.random() 0.5 ? Math.floor(Math.random() * (560 - 560 + 1)) + 560 : Math.floor(Math.random() * (660 - 580 + 1)) + 580); // Randomized radialSegments between 32-200 or 550-560 or 580-660 const sloshFrequency Math.random() + 4; // Randomized between 4 and 5 const sloshAmplitude Math.random() * 65 + 15; // Randomized between 15 and 80 // Select a random color for the liquid selectedLiquidColor liquidColorsMath.floor(Math.random() * liquidColors.length); // Colors to be used for swapping const originalEmissiveColor 0x13294B; const originalDarkColor 0xFFC72C; const swappedEmissiveColor originalDarkColor; const swappedDarkColor originalEmissiveColor; // Check if the selected color is 0x4A0000 and swap the colors if true let matEmissiveColor selectedLiquidColor 0x4A0000 ? swappedEmissiveColor : originalEmissiveColor; let matDarkColor selectedLiquidColor 0x4A0000 ? swappedDarkColor : originalDarkColor; const matDark new THREE.LineBasicMaterial({ color: matDarkColor, side: THREE.DoubleSide }); const matEmissive new THREE.MeshPhongMaterial({ emissive: matEmissiveColor, emissiveIntensity: glow, color: matEmissiveColor, side: THREE.DoubleSide }); function getTimeZoneAbbreviation(timeZone) { return timeZoneAbbreviationstimeZone || timeZone.split(/)1; } function formatTimeWithoutLeadingZero(timeString) { return timeString.replace(/^0/, ); } function findNextValidTargetIndex() { const currentDate new Date().getTime(); for (let i 0; i targetDates.length; i++) { if (targetDatesi > currentDate) { return i; } } return -1; } async function fetchWeather(gameDate) { const apiKey 7f9028813ac0bfbff22f2441fbf87a7a; const url `https://api.openweathermap.org/data/2.5/forecast?lat43.0282&lon-87.9713&unitsimperial&appid${apiKey}`; try { const response await fetch(url); const data await response.json(); let closestForecast data.list0; for (let forecast of data.list) { const forecastTime new Date(forecast.dt * 1000); if (Math.abs(forecastTime - gameDate) Math.abs(new Date(closestForecast.dt * 1000) - gameDate)) { closestForecast forecast; } } return { temp: Math.round(closestForecast.main.temp), icon: closestForecast.weather0.main.toLowerCase(), description: closestForecast.weather0.description }; } catch (error) { console.error(Error fetching weather data: , error); return null; } } function getWeatherIcon(weatherDescription) { switch (weatherDescription) { case clear sky: case clear: return day.svg; case few clouds: return partlycloudy.svg; case scattered clouds: return partlycloudy.svg; case broken clouds: return partlycloudy.svg; case partly cloudy: return partlycloudy.svg; case overcast clouds: return cloudy.svg; case clouds: return cloudy.svg; case rain: return rainy-6.svg; default: return ; } } async function loadSVGIcon(url, position) { const loader new SVGLoader(); loader.load( url, function (data) { const paths data.paths; weatherIconGroup new THREE.Group(); for (let i 0; i paths.length; i++) { const path pathsi; const material new THREE.MeshBasicMaterial({ color: path.color, side: THREE.DoubleSide, depthWrite: false, transparent: true, opacity: 1 }); const shapes SVGLoader.createShapes(path); for (let j 0; j shapes.length; j++) { const shape shapesj; const geometry new THREE.ShapeGeometry(shape); const mesh new THREE.Mesh(geometry, material); mesh.renderOrder 999; weatherIconGroup.add(mesh); } } weatherIconGroup.position.set(0, -34, 0); weatherIconGroup.rotation.x Math.PI; weatherIconGroup.scale.set(0.3, 0.3, 0.3); scene.add(weatherIconGroup); }, function (xhr) { }, function (error) { } ); } let animationFrameId; function initVisibilityHandling() { document.addEventListener(visibilitychange, function () { if (document.hidden) { stopAnimation(); } else { startAnimation(); updateWeatherIfNeeded(); } }); window.addEventListener(focus, startAnimation); window.addEventListener(blur, stopAnimation); } function stopAnimation() { isAnimating false; if (animationFrameId) { cancelAnimationFrame(animationFrameId); } } function startAnimation() { if (!isAnimating) { isAnimating true; animate(0); } } async function updateWeatherIfNeeded() { if (!weatherData) { weatherData await fetchWeather(new Date(targetDatescurrentTargetIndex)); } } async function init() { await loadDates(); if (targetDates.length 0) { console.error(No dates available for countdown.); return; } currentTargetIndex findNextValidTargetIndex(); if (currentTargetIndex -1) { console.log(All dates are in the past.); return; } const fov 45; const aspect window.innerWidth / window.innerHeight; const near 1; const far 20000; camera new THREE.PerspectiveCamera(fov, aspect, near, far); camera.position.set(30, 50, 150); scene new THREE.Scene(); scene.background new THREE.Color(0xffffff); const loader new FontLoader(); loader.load(/fonts/helvetiker_regular.typeface.json, function (font) { const color 0x65b2e8; const position new THREE.Vector3(0, 2, -50); const datePosition new THREE.Vector3(0, -10, -50); const weatherPosition new THREE.Vector3(0, -20, -50); async function updateCountdown() { try { const currentDate new Date().getTime(); const timeRemaining targetDatescurrentTargetIndex - currentDate; if (timeRemaining 0) { currentTargetIndex findNextValidTargetIndex(); if (currentTargetIndex -1) { console.log(Countdown complete for all dates.); return; } } const days Math.floor(timeRemaining / (1000 * 60 * 60 * 24)); const hours Math.floor((timeRemaining % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); const minutes Math.floor((timeRemaining % (1000 * 60 * 60)) / (1000 * 60)); const seconds Math.floor((timeRemaining % (1000 * 60)) / 1000); const countdownText `${days}d ${hours}h ${minutes}m ${seconds}s`; const gameDate new Date(targetDatescurrentTargetIndex); const cstTime formatTimeWithoutLeadingZero(gameDate.toLocaleTimeString(en-US, { timeZone: America/Chicago, hour: 2-digit, minute: 2-digit })); const userTimeZone Intl.DateTimeFormat().resolvedOptions().timeZone; const userTimeZoneAbbreviation getTimeZoneAbbreviation(userTimeZone); const userTime formatTimeWithoutLeadingZero(gameDate.toLocaleTimeString(en-US, { timeZone: userTimeZone, hour: 2-digit, minute: 2-digit })); let gameDateText `Next Home Game: \n ${gameDate.toDateString()} at ${userTime} ${userTimeZoneAbbreviation}`; if (userTimeZoneAbbreviation ! CST) { gameDateText + `\n (${cstTime} CST)`; } if (textMesh) { scene.remove(textMesh); textMesh null; } if (lineText) { scene.remove(lineText); lineText null; } if (dateTextMesh) { scene.remove(dateTextMesh); dateTextMesh null; } if (lineDateText) { scene.remove(lineDateText); lineDateText null; } if (weatherTextMesh) { scene.remove(weatherTextMesh); weatherTextMesh null; } if (lineWeatherText) { scene.remove(lineWeatherText); lineWeatherText null; } // Render countdown text try { const shapes font.generateShapes(countdownText, 5); const geometry new THREE.ShapeGeometry(shapes); geometry.computeBoundingBox(); const xMid -.5 * (geometry.boundingBox.max.x - geometry.boundingBox.min.x); geometry.translate(xMid, -25, 50); textMesh new THREE.Mesh(geometry, matEmissive); scene.add(textMesh); textMesh.position.copy(position); textMesh.castShadow true; textMesh.receiveShadow false; lineText new THREE.Object3D(); for (let i 0; i shapes.length; i++) { const shape shapesi; const points shape.getPoints(); const geometry new THREE.BufferGeometry().setFromPoints(points); geometry.translate(xMid, -23, 2); const lineMesh new THREE.Line(geometry, matDark); lineText.add(lineMesh); } scene.add(lineText); } catch (error) { console.error(Error rendering countdown text:, error); } // Render game date text try { const dateShapes font.generateShapes(gameDateText, 3); const dateGeometry new THREE.ShapeGeometry(dateShapes); dateGeometry.computeBoundingBox(); const dateXMid -.5 * (dateGeometry.boundingBox.max.x - dateGeometry.boundingBox.min.x); dateGeometry.translate(dateXMid, -25, 50); dateTextMesh new THREE.Mesh(dateGeometry, matEmissive); scene.add(dateTextMesh); dateTextMesh.position.copy(datePosition); dateTextMesh.castShadow true; dateTextMesh.receiveShadow false; lineDateText new THREE.Object3D(); for (let i 0; i dateShapes.length; i++) { const shape dateShapesi; const points shape.getPoints(); const geometry new THREE.BufferGeometry().setFromPoints(points); geometry.translate(dateXMid, -35, -3); const lineMesh new THREE.Line(geometry, matDark); lineDateText.add(lineMesh); } scene.add(lineDateText); } catch (error) { console.error(Error rendering game date text:, error); } // Render weather text try { if (!weatherData) { weatherData await fetchWeather(gameDate); } if (weatherData) { const weatherText `${weatherData.temp}°F`; const weatherIconUrl getWeatherIcon(weatherData.icon); if (weatherIconUrl && !weatherIconGroup) { await loadSVGIcon(weatherIconUrl, new THREE.Vector3(15, -16.5, -50)); } const weatherShapes font.generateShapes(weatherText, 3); const weatherGeometry new THREE.ShapeGeometry(weatherShapes); weatherGeometry.computeBoundingBox(); const weatherXMid -.5 * (weatherGeometry.boundingBox.max.x - weatherGeometry.boundingBox.min.x); weatherGeometry.translate(weatherXMid, -25, 50); weatherTextMesh new THREE.Mesh(weatherGeometry, matEmissive); scene.add(weatherTextMesh); weatherTextMesh.position.copy(weatherPosition); weatherTextMesh.castShadow true; weatherTextMesh.receiveShadow false; lineWeatherText new THREE.Object3D(); for (let i 0; i weatherShapes.length; i++) { const shape weatherShapesi; const points shape.getPoints(); const geometry new THREE.BufferGeometry().setFromPoints(points); geometry.translate(weatherXMid, -45, -3); const lineMesh new THREE.Line(geometry, matDark); lineWeatherText.add(lineMesh); } scene.add(lineWeatherText); } } catch (error) { console.error(Error rendering weather text:, error); } } catch (error) { console.error(Error in updateCountdown:, error); } } const gltfLoader new GLTFLoader(); const gltfFilenames LetsGoBrewers_Banner.gltf, LetsGoBrewers_Banner2.gltf, LetsGoBrewers_2017Banner1.gltf, LetsGoBrewers_2017Banner2.gltf, LetsGoBrewers_RetroBanner1-2.gltf, LetsGoBrewers_RetroBanner1-3.gltf; const selectedGltfFile gltfFilenamesMath.floor(Math.random() * gltfFilenames.length); gltfLoader.load(selectedGltfFile, function (gltf) { const brewersban gltf.scene; brewersban.position.y 20; brewersban.position.x -1.25; brewersban.rotation.y 0.2; brewersban.scale.set(500, 500, 500); brewersban.traverse(function (node) { if (node.isMesh) { node.castShadow false; } }); scene.add(brewersban); }, undefined, function (error) { console.error(error); }); gltfLoader.load(LetsGoBrewers_cd.gltf, function (gltf) { const brewersCD gltf.scene; brewersCD.position.y 20; brewersCD.rotation.y 0.2; brewersCD.scale.set(500, 500, 500); brewersCD.traverse(function (node) { if (node.isMesh) { node.castShadow false; } }); scene.add(brewersCD); }, undefined, function (error) { console.error(error); }); gltfLoader.load(baseball-opt.glb, function (gltf) { baseball gltf.scene; baseball.position.y 20; baseball.rotation.y 0.2; baseball.scale.set(10, 10, 10); baseball.traverse(function (node) { if (node.isMesh) { node.castShadow false; } }); scene.add(baseball); }, undefined, function (error) { console.error(error); }); updateCountdown(); setInterval(updateCountdown, 1000); }); renderer new THREE.WebGLRenderer({ antialias: true }); renderer.setPixelRatio(window.devicePixelRatio); renderer.setSize(window.innerWidth, window.innerHeight); renderer.outputColorSpace THREE.SRGBColorSpace; document.body.appendChild(renderer.domElement); renderer.shadowMap.enabled true; const directionalLight new THREE.DirectionalLight(0xfffffff, 3); directionalLight.position.set(-50, -50, 200); directionalLight.castShadow true; directionalLight.shadow.mapSize.width 1024; directionalLight.shadow.mapSize.height 1024; directionalLight.shadow.camera.near 1; directionalLight.shadow.camera.far 300; directionalLight.shadow.radius 8; scene.add(directionalLight); var side 50; directionalLight.shadow.camera.top side; directionalLight.shadow.camera.bottom -side; directionalLight.shadow.camera.left side; directionalLight.shadow.camera.right -side; const hemiLight new THREE.HemisphereLight(0xffffff, 0x080820, 1); hemiLight.position.set(0, 50, 0); hemiLight.groundColor.set(0x000000); scene.add(hemiLight); const controls new OrbitControls(camera, renderer.domElement); controls.target.set(0, 0, 0); controls.update(); controls.addEventListener(change, render); controls.enablePan false; controls.minDistance 50; controls.maxDistance 200; controls.minPolarAngle Math.PI / 3; controls.maxPolarAngle Math.PI / 1.15; controls.minAzimuthAngle -Math.PI / 4; controls.maxAzimuthAngle Math.PI / 4; window.addEventListener(resize, onWindowResize); clock new THREE.Clock(); perlin new ImprovedNoise(); createBubbleParticles(); createCylinder(); // Change background color to match liquid color after 5 seconds setTimeout(() > { scene.background.set(selectedLiquidColor); backgroundChanged true; }, 5000); animate(); } async function loadDates() { try { const response await fetch(schedule.json?v1.0); const data await response.json(); if (data.dates && data.dates.length > 0) { targetDates data.dates.map(date > { const match date.match(/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})$/); if (!match) { console.error(`Invalid date format: ${date}`); return 0; } const , year, month, day, hour, minute, second match; const tempDate new Date(Date.UTC(year, month - 1, day, hour, minute, second)); const cstString tempDate.toLocaleString(en-US, { timeZone: America/Chicago, timeZoneName: short }); const isDST cstString.includes(CDT); const offsetHours isDST ? 5 : 6; tempDate.setHours(tempDate.getHours() + offsetHours); return tempDate.getTime(); }).filter(time > time ! 0); targetDates.sort((a, b) > a - b); if (targetDates.length 0 || findNextValidTargetIndex() -1) { window.location.href offseason.html; } } else { console.warn(No dates found in schedule.json); window.location.href offseason.html; } } catch (error) { console.error(Error loading dates:, error); window.location.href offseason.html; } } function createBubbleParticles() { const particleCount 500; const particles new THREE.BufferGeometry(); const positions ; const velocities ; const horizontalVelocities ; for (let i 0; i particleCount; i++) { positions.push(Math.random() * 200 - 100); // X position positions.push(-150); // Start below the scene positions.push(Math.random() * 100 - 100 + 85); // Z position velocities.push(0); velocities.push(Math.random() * 0.4 + 0.1); // Varying Y velocity (0.1 to 0.5) velocities.push(0); // Add random horizontal velocities horizontalVelocities.push((Math.random() - 0.5) * 0.1); // X velocity } particles.setAttribute(position, new THREE.Float32BufferAttribute(positions, 3)); particles.setAttribute(velocity, new THREE.Float32BufferAttribute(velocities, 3)); particles.setAttribute(horizontalVelocity, new THREE.Float32BufferAttribute(horizontalVelocities, 1)); const textureLoader new THREE.TextureLoader(); const bubbleTexture textureLoader.load(bubble-texture.png); // Replace with the path to your circular texture const particleMaterial new THREE.PointsMaterial({ map: bubbleTexture, color: 0xffffff, // Base color matching the background size: 5, transparent: true, opacity: 1, depthWrite: false }); bubbleParticles new THREE.Points(particles, particleMaterial); scene.add(bubbleParticles); } function updateBubbleParticles(delta) { const elapsedTime clock.getElapsedTime(); if (elapsedTime bubbleDelay) return; // Delay bubble animation start const positions bubbleParticles.geometry.attributes.position.array; const velocities bubbleParticles.geometry.attributes.velocity.array; const horizontalVelocities bubbleParticles.geometry.attributes.horizontalVelocity.array; for (let i 0; i positions.length; i + 3) { positionsi + horizontalVelocitiesi / 3 * delta; // Update X position with horizontal velocity positionsi + 1 + velocitiesi + 1 * delta; // Update Y position with varying velocities if (positionsi + 1 > 100) { positionsi + 1 -50; // Reset position if it goes above the scene velocitiesi + 1 Math.random() * 0.4 + 0.5; // Reassign varying Y velocity } // Add some randomness to the horizontal movement if (Math.random() 0.01) { horizontalVelocitiesi / 3 (Math.random() - 0.5) * 0.1; // Randomize horizontal velocity occasionally } } bubbleParticles.geometry.attributes.position.needsUpdate true; } function createCylinder() { const radiusTop 125; const radiusBottom 50; const height 3000; const liquidGeometry new THREE.CylinderGeometry(radiusTop, radiusBottom, height, radialSegments); const liquidMaterial new THREE.MeshPhongMaterial({ color: selectedLiquidColor, side: THREE.DoubleSide, transparent: true, opacity: 0.8, }); cylinderLiquid new THREE.Mesh(liquidGeometry, liquidMaterial); cylinderLiquid.position.set(150, 100 - height / 20, -125); // Position behind other elements scene.add(cylinderLiquid); liquidClock new THREE.Clock(); } function updateCylinderLiquid(delta) { const elapsed liquidClock.getElapsedTime(); const fillSpeed 85; const maxHeight 3000; const fillHeight Math.min(elapsed * fillSpeed + (maxHeight * 0.5), maxHeight); // Start from 50% height cylinderLiquid.scale.set(25, fillHeight / maxHeight, 1); cylinderLiquid.position.y -maxHeight / 1.625 + fillHeight / 2; // Sloshing effect with randomized values const positions cylinderLiquid.geometry.attributes.position.array; for (let i 0; i positions.length; i + 3) { const y positionsi + 1; if (y maxHeight / 2) { // Top vertices positionsi + 2 Math.sin((elapsed + positionsi) * 5) * sloshAmplitude; // Sloshing effect } } cylinderLiquid.geometry.attributes.position.needsUpdate true; // Change background color to match liquid color once filled if (fillHeight maxHeight && !backgroundChanged) { scene.background.set(selectedLiquidColor); backgroundChanged true; } } function render() { renderer.render(scene, camera); } let baseballSpeedMultiplier 50; // Adjust this to change the baseballs speed let bubbleSpeedMultiplier 50; // Adjust this to change the bubbles speed let previousTime 0; function animate(time) { if (!isAnimating) return; const delta (time - previousTime) / 1000; previousTime time; animationFrameId requestAnimationFrame(animate); updateBubbleParticles(delta * bubbleSpeedMultiplier); updateCylinderLiquid(delta); const elapsed (Date.now() - startTime) / 1000; if (baseball) { baseball.rotation.y + 0.05 * delta * baseballSpeedMultiplier; baseball.rotation.x + 0.02 * delta * baseballSpeedMultiplier; baseball.position.x Math.cos(elapsed) * radius; baseball.position.z Math.sin(elapsed) * radius; baseball.position.y 10 + Math.sin(elapsed * 3) * 100; baseball.position.x 30 + Math.sin(elapsed * 2) * 100; baseball.position.z 20 + Math.sin(elapsed * 1) * 100; } render(); } function onWindowResize() { camera.aspect window.innerWidth / window.innerHeight; camera.updateProjectionMatrix(); renderer.setSize(window.innerWidth, window.innerHeight); render(); } async function start() { await init(); initVisibilityHandling(); animate(0); } start(); /script> div classheader> div classheadertxt>/div> div classdonate-button-header> div iddonate-button-header>/div> script srchttps://www.paypalobjects.com/donate/sdk/donate-sdk.js charsetUTF-8>/script> script> PayPal.Donation.Button({ env: production, hosted_button_id: GSPXQZVB4KY44, image: { src: https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif, alt: Donate with PayPal button, title: PayPal - The safer, easier way to pay online!, } }).render(#donate-button-header); /script> /div> div classnav-links idnav-links>/div> /div> div classticker-wrapper> div classticker idticker>Loading scores.../div> /div> script> function toggleMenu() { const navLinks document.getElementById(nav-links); navLinks.style.display navLinks.style.display flex ? none : flex; } document.addEventListener(click, function (event) { const navLinks document.getElementById(nav-links); const burgerMenu document.querySelector(.burger-menu); const isClickInsideMenu burgerMenu && (burgerMenu.contains(event.target) || navLinks.contains(event.target)); if (!isClickInsideMenu) { navLinks.style.display none; } }); const apiEndpoint https://t9nprslkhd.execute-api.us-east-1.amazonaws.com/prod/scores; async function fetchRecentGames() { const gameDate getTodayDate(); const url `${apiEndpoint}?gameDate${gameDate}`; try { const response await fetch(url); const data await response.json(); if (data.statusCode 200) { let responseBody data.body; try { let parsedBody JSON.parse(responseBody); if (Object.keys(parsedBody.body).length 0) { return { message: No games scheduled today }; } return parsedBody.body; } catch (parseError) { console.error(Error parsing JSON body:, parseError, Raw body:, responseBody); return null; } } else { console.error(Unexpected game data format:, data); return null; } } catch (error) { console.error(Error fetching recent MLB games: , error); return null; } } function getTodayDate() { const today new Date(); const yyyy today.getFullYear(); const mm String(today.getMonth() + 1).padStart(2, 0); const dd String(today.getDate()).padStart(2, 0); return `${yyyy}${mm}${dd}`; } let previousScores {}; function convertToUserTimeZone(epochTime, timeZone) { const date new Date(epochTime * 1000); const options { timeZone: timeZone, hour: numeric, minute: numeric, hour12: true }; const formattedTime date.toLocaleString(en-US, options); const formattedTimeAP formattedTime.replace( AM, A).replace( PM, P); return formattedTimeAP; } function formatGameInfo(game, userTimeZone) { const homeTeam game.home || N/A; const awayTeam game.away || N/A; const homeScore game.lineScore && game.lineScore.home && game.lineScore.home.R ! null ? game.lineScore.home.R : -; const awayScore game.lineScore && game.lineScore.away && game.lineScore.away.R ! null ? game.lineScore.away.R : -; let status ; if (game.gameStatus && (game.gameStatus.includes(Live) || game.gameStatus.includes(In Progress))) { const inningParts game.currentInning ? game.currentInning.split( ) : , ; const inning inningParts1 || ; const arrow inningParts0 Bot ? ▼ : ▲; status ` span classhighlight>${inning}${arrow}/span>`; } else if (game.gameStatus && (game.gameStatus.includes(Final) || game.gameStatus.includes(Completed))) { status ` span classhighlight>F/span>`; } else if (game.gameStatus Not Started Yet) { const localTime convertToUserTimeZone(parseFloat(game.gameTime_epoch), userTimeZone); status ` span classhighlight>${localTime}/span>`; } else { status ` span classhighlight>N/A/span>`; } return `${awayTeam} span classhighlight>${awayScore} - ${homeScore}/span> ${homeTeam}${status} | `; } function updateScores(newData, userTimeZone) { let newScores {}; Object.keys(newData).forEach(gameID > { const game newDatagameID; if (game) { newScoresgameID formatGameInfo(game, userTimeZone); } else { console.error(`Game data missing for gameID: ${gameID}`); } }); previousScores { ...previousScores, ...newScores }; let updatedScores ; for (let key in previousScores) { if (newScoreskey || previousScoreskey.includes(F)) { updatedScores.push(previousScoreskey); } } return updatedScores.join(); } async function updateTicker() { const data await fetchRecentGames(); const tickerElement document.getElementById(ticker); const userTimeZone Intl.DateTimeFormat().resolvedOptions().timeZone; if (data) { if (data.message) { tickerElement.innerHTML data.message; } else { const updatedContent updateScores(data, userTimeZone); tickerElement.innerHTML updatedContent + updatedContent; startTicker(); } } else { tickerElement.innerHTML No live scores available at the moment.; } } function startTicker() { const tickerElement document.getElementById(ticker); let tickerWidth tickerElement.offsetWidth; const wrapperWidth tickerElement.parentElement.offsetWidth; let startPosition wrapperWidth; function animateTicker() { if (startPosition -tickerWidth) { startPosition wrapperWidth; } startPosition - 1; tickerElement.style.transform `translateX(${startPosition}px)`; requestAnimationFrame(animateTicker); } animateTicker(); } fetchRecentGames().then(updateTicker); setInterval(updateTicker, 60000); window.addEventListener(load, startTicker); /script> div classfooter> div classfootertxt> font> LetsGoBrewers.com is not affiliated with MLB or the Milwaukee Brewers. Drink responsibly and enjoy the game. All Rights Reserved. a hrefmailto: admin@letsgobrewers.com styefootertxt>Inquiries/a> /font> /div> /div> script async srchttps://scripts.simpleanalyticscdn.com/latest.js>/script>/body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]