From 3bd94c84f51feee8d18e107b6d5cffc38ed06613 Mon Sep 17 00:00:00 2001 From: Sura Hanna Date: Thu, 27 Jun 2024 15:03:03 -0400 Subject: [PATCH] adding frontend development files to repo --- frontend-dev/vwss-frontend/frontend.js | 276 +++++++ frontend-dev/vwss-frontend/index.html | 52 ++ frontend-dev/vwss-frontend/package-lock.json | 758 ++++++++++++++++++ frontend-dev/vwss-frontend/package.json | 14 + frontend-dev/vwss-frontend/public/favicon.ico | Bin 0 -> 1150 bytes .../vwss-frontend/public/ngci-logo-black.png | Bin 0 -> 47613 bytes .../public/ngci-logo-white-wide.svg | 296 +++++++ frontend-dev/vwss-frontend/style.css | 214 +++++ public/assets/index-CWJf9nUx.js | 1 + public/assets/index-DWgpMFbj.js | 1 - public/index.html | 2 +- 11 files changed, 1612 insertions(+), 2 deletions(-) create mode 100644 frontend-dev/vwss-frontend/frontend.js create mode 100644 frontend-dev/vwss-frontend/index.html create mode 100644 frontend-dev/vwss-frontend/package-lock.json create mode 100644 frontend-dev/vwss-frontend/package.json create mode 100644 frontend-dev/vwss-frontend/public/favicon.ico create mode 100755 frontend-dev/vwss-frontend/public/ngci-logo-black.png create mode 100755 frontend-dev/vwss-frontend/public/ngci-logo-white-wide.svg create mode 100644 frontend-dev/vwss-frontend/style.css create mode 100644 public/assets/index-CWJf9nUx.js delete mode 100644 public/assets/index-DWgpMFbj.js diff --git a/frontend-dev/vwss-frontend/frontend.js b/frontend-dev/vwss-frontend/frontend.js new file mode 100644 index 0000000..9f83184 --- /dev/null +++ b/frontend-dev/vwss-frontend/frontend.js @@ -0,0 +1,276 @@ +function populateTable(resourceUPN, events, container) { + + events.sort((a, b) => new Date(a.start.dateTime) - new Date(b.start.dateTime)); + + // Create a wrapper for the resource and its events + const resourceWrapper = document.createElement('div'); + resourceWrapper.className = 'resource-wrapper'; + + // Create a row for the resource title + const titleRow = document.createElement('div'); + titleRow.className = 'title-row'; + + switch (resourceUPN.split("@")[0]) { + case "s-er-1431-00": + titleRow.innerHTML = 'ER 1431-00 Open Space'; + break; + case "s-er-1431-03": + titleRow.innerHTML = 'ER 1431-03 Visualization Lab'; + break; + case "s-er-1431-33": + titleRow.innerHTML = 'ER 1431-33 Ideation Room'; + break; + case "s-er-1431-37": + titleRow.innerHTML = 'ER 1431-37 Multipurpose Room'; + break; + case "s-er-1431-39": + titleRow.innerHTML = 'ER 1431-39 Conference Room'; + break; + } + resourceWrapper.appendChild(titleRow); + // Create a grid for events + const eventGrid = document.createElement('div'); + eventGrid.className = 'event-row'; + + events.forEach((event, index) => { + if (index < 3) { + + const eventCell = document.createElement('div'); + eventCell.className = 'flex-cell'; + const title = event.subject.length > 18 ? event.subject.substring(0, 18) + "..." : event.subject; + const organizer = !event.location.displayName || event.organizer.emailAddress.address === resourceUPN ? "Walk-Up" : event.organizer.emailAddress.name; + const startTime = formatTime(event.start.dateTime + "Z"); + const endTime = formatTime(event.end.dateTime + "Z"); + + const endTimeCheck = new Date(event.end.dateTime); + const currentTime = new Date(); + + if (endTimeCheck > currentTime) { + + const titleDiv = document.createElement('div'); + titleDiv.textContent = title; + + const organizerDiv = document.createElement('div'); + organizerDiv.textContent = organizer; + organizerDiv.className = 'organizer'; + + const timeDiv = document.createElement('div'); + timeDiv.className = 'time-range'; + timeDiv.innerHTML = `${startTime} - ${endTime}`; + + eventCell.appendChild(titleDiv); + eventCell.appendChild(organizerDiv); + eventCell.appendChild(timeDiv); + eventGrid.appendChild(eventCell); + } + } + + }); + + if (eventGrid.children.length === 0) { + const noEventsMessage = document.createElement('div'); + noEventsMessage.className = 'flex-cell'; + noEventsMessage.textContent = 'No upcoming meetings at this time'; + eventGrid.appendChild(noEventsMessage); + } + resourceWrapper.appendChild(eventGrid); + container.appendChild(resourceWrapper); +} + +function formatTime(date) { + const etDate = new Date(date); + const hours = etDate.getHours(); + const minutes = etDate.getMinutes().toString().padStart(2, '0'); + + return `${hours}:${minutes}`; +} + +async function fetchAllEvents() { + console.log("fetching events"); + const response = await fetch('http://localhost:8080/api/events'); + const allEvents = await response.json(); + + const resourcesContainer = document.getElementById('resources-container'); + resourcesContainer.innerHTML = ''; + const keys = Object.keys(allEvents); + + keys.forEach((key) => { + populateTable(key, allEvents[key], resourcesContainer); + }); +} + + +function updateTime(showSeparator) { + let timeString = formatTime(new Date()); + + if (!showSeparator) { + timeString = timeString.replace(':', ' '); + } + document.getElementById('time').innerHTML = timeString; + +} + +function updateFontSize(elementId) { + const element = document.getElementById(elementId); + const textLength = element.textContent.length; + + if (textLength <= 83) { + element.style.fontSize = '5em'; + } else if (textLength <= 166) { + element.style.fontSize = '4em'; + } else { + element.style.fontSize = '3em'; + } +} + + +// Function to fetch and display a quote +async function fetchAndDisplayQuote() { + try { + const response = await fetch('http://localhost:8080/api/quotes'); + + if (response.ok) { + const data = await response.json(); + const quotes = data.results; + const randomIndex = Math.floor(Math.random() * quotes.length); + const randomQuote = quotes[randomIndex]; + + document.getElementById('quote').innerHTML = `${randomQuote.content}`; + updateFontSize('quote'); + document.getElementById('author').innerHTML = `${randomQuote.author}`; + + } else { + document.getElementById('quote').innerHTML = `Wishing you an utmost wonderful day!`; + updateFontSize('quote'); + document.getElementById('author').innerHTML = `Next-Generation Cities Institute`; + } + } catch (error) { + console.error('An error occurred:', error); + } +} + +// Fetch Current Weather +async function fetchWeather() { + const response = await fetch('http://localhost:8080/api/weather'); + const data = await response.json(); + if (data.cod === 200) { + const temperature = data.main.temp; + const description = data.weather[0].description; + const iconCode = data.weather[0].icon; + const iconUrl = `https://openweathermap.org/img/wn/${iconCode}.png` + + document.getElementById("weather-icon-container").innerHTML = `Weather Icon`; + document.getElementById("temperature").innerHTML = `${temperature}°`; + document.getElementById("description").innerHTML = `${description}`; + } else { + document.getElementById("weather").innerText = 'Weather data unavailable'; + } +} + +// Display Current Time +function displayTime() { + const now = new Date(); + const timeHtml = formatTime(now); + document.getElementById("time").innerHTML = timeHtml; + setTimeout(displayTime, 60000); + +} + +// Slideshow + +async function fetchSlideshowImages() { + try { + const response = await fetch('http://localhost:8080/api/slideshow'); + if (!response.ok) { + throw new Error('Failed to fetch slideshow images'); + } + const images = await response.json(); + updateSlideshow(images); + } catch (error) { + console.error('Error fetching slideshow images:', error); + } +} + +function createSlideshowElement(src) { + const img = document.createElement('img'); + // img.src = src; + img.src = `http://localhost:8080${src}`; + img.className = 'slideshow-img'; + img.style.width = '100%'; + img.style.maxHeight = '100vh'; + img.style.objectFit = 'cover'; + const filename = src.split('/').pop().split('.')[0]; // Extracts filename without extension + + // Set the filename as the alt text + img.alt = filename; + + // If you also want to set the title attribute + img.title = filename; + return img; +} + +let currentIndex = 0; +function updateSlideshow(images) { + if (images.length === 0) { + console.log('No images found for the slideshow.'); + return; + } + + const slideshowContainer = document.getElementById('slideshow'); + slideshowContainer.innerHTML = ''; + const imageElement = createSlideshowElement(images[currentIndex]); + slideshowContainer.appendChild(imageElement); + + // Wait a little bit before starting the fade-in to ensure it's loaded + setTimeout(() => { imageElement.style.opacity = '1'; }, 100); + + // Clean up the previous image after the new one has faded in + setTimeout(() => { + while (slideshowContainer.children.length > 1) { + slideshowContainer.removeChild(slideshowContainer.firstChild); + } + }, 100); + + currentIndex = (currentIndex + 1) % images.length; + setTimeout(() => updateSlideshow(images), 30000); // Change image every 30 seconds +} + +const welcomeDiv = document.getElementById('welcome-message'); +const logo = document.querySelector('#welcome-message img'); +const backgroundColors = ['#00ADEF', '#912338', '#e5a712', '#db0272', '#8cc63e', '#573996']; +const logoColors = ['black', 'white', 'black', 'white', 'black', 'white']; +let colorIndex = 0; + +function showWelcomeMessage() { + welcomeDiv.classList.add('visible'); + welcomeDiv.style.backgroundColor = backgroundColors[colorIndex]; + logo.src = logoColors[colorIndex] === 'white' ? 'ngci-logo-white-wide.svg' : 'ngci-logo-black.png'; + colorIndex = (colorIndex + 1) % backgroundColors.length; +} + +function hideWelcomeMessage() { + welcomeDiv.classList.remove('visible'); +} + +setInterval(function() { + showWelcomeMessage(); + setTimeout(hideWelcomeMessage, 30000); +}, 600000); + +fetchAndDisplayQuote(); +setInterval(fetchAndDisplayQuote, 60 * 60 * 1000); + +fetchWeather(); +setInterval(fetchWeather, 5 * 60 * 1000); + +let showSeparator = true; +updateTime(showSeparator); +setInterval(() => { + updateTime(showSeparator); + showSeparator = !showSeparator; +}, 1000); + +fetchSlideshowImages(); + +fetchAllEvents(); +setInterval(fetchAllEvents, 3 * 60 * 1000); diff --git a/frontend-dev/vwss-frontend/index.html b/frontend-dev/vwss-frontend/index.html new file mode 100644 index 0000000..7ad7607 --- /dev/null +++ b/frontend-dev/vwss-frontend/index.html @@ -0,0 +1,52 @@ + + + + + + + NGCI Daily Schedule + + + + + +
+ + +
+ +
+
+
+ +
+
+
+ +
+ +
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + diff --git a/frontend-dev/vwss-frontend/package-lock.json b/frontend-dev/vwss-frontend/package-lock.json new file mode 100644 index 0000000..4546465 --- /dev/null +++ b/frontend-dev/vwss-frontend/package-lock.json @@ -0,0 +1,758 @@ +{ + "name": "vwss-frontend", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "vwss-frontend", + "version": "0.0.0", + "devDependencies": { + "vite": "^5.1.6" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.0.tgz", + "integrity": "sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.0.tgz", + "integrity": "sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.0.tgz", + "integrity": "sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.0.tgz", + "integrity": "sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.0.tgz", + "integrity": "sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.0.tgz", + "integrity": "sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.0.tgz", + "integrity": "sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.0.tgz", + "integrity": "sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.0.tgz", + "integrity": "sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.0.tgz", + "integrity": "sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.0.tgz", + "integrity": "sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.0.tgz", + "integrity": "sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.0.tgz", + "integrity": "sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/postcss": { + "version": "8.4.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.36.tgz", + "integrity": "sha512-/n7eumA6ZjFHAsbX30yhHup/IMkOmlmvtEi7P+6RMYf+bGJSUHc3geH4a0NSZxAz/RJfiS9tooCTs9LAVYUZKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/rollup": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.13.0.tgz", + "integrity": "sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.13.0", + "@rollup/rollup-android-arm64": "4.13.0", + "@rollup/rollup-darwin-arm64": "4.13.0", + "@rollup/rollup-darwin-x64": "4.13.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.13.0", + "@rollup/rollup-linux-arm64-gnu": "4.13.0", + "@rollup/rollup-linux-arm64-musl": "4.13.0", + "@rollup/rollup-linux-riscv64-gnu": "4.13.0", + "@rollup/rollup-linux-x64-gnu": "4.13.0", + "@rollup/rollup-linux-x64-musl": "4.13.0", + "@rollup/rollup-win32-arm64-msvc": "4.13.0", + "@rollup/rollup-win32-ia32-msvc": "4.13.0", + "@rollup/rollup-win32-x64-msvc": "4.13.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/source-map-js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.1.0.tgz", + "integrity": "sha512-9vC2SfsJzlej6MAaMPLu8HiBSHGdRAJ9hVFYN1ibZoNkeanmDmLUcIrj6G9DGL7XMJ54AKg/G75akXl1/izTOw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vite": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.6.tgz", + "integrity": "sha512-yYIAZs9nVfRJ/AiOLCA91zzhjsHUgMjB+EigzFb6W2XTLO8JixBCKCjvhKZaye+NKYHCrkv3Oh50dH9EdLU2RA==", + "dev": true, + "dependencies": { + "esbuild": "^0.19.3", + "postcss": "^8.4.35", + "rollup": "^4.2.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + } + } +} diff --git a/frontend-dev/vwss-frontend/package.json b/frontend-dev/vwss-frontend/package.json new file mode 100644 index 0000000..afafff4 --- /dev/null +++ b/frontend-dev/vwss-frontend/package.json @@ -0,0 +1,14 @@ +{ + "name": "vwss-frontend", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "devDependencies": { + "vite": "^5.1.6" + } +} diff --git a/frontend-dev/vwss-frontend/public/favicon.ico b/frontend-dev/vwss-frontend/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..eace64481d8ca444d8de2aa947ec606da861385e GIT binary patch literal 1150 zcmb7E%T7~K6g?(>05OpW1bNA;YLtPA#@{dw`~rtgB@CE2G9mE`j98@f)}Y1_!GW3> zMdFi?w)bAbBhp8Tw)9C_SgySp6YH;TA?sQwXJgpOuc^;(zQzXQg5l@Eb7%TtlVf)E1>~t!ODLq? zBe(hz`NSL4YGqV%E^MhMJm}SRz_kkH)q%}-cQkh^Hi_uuY2_oD{V}a=s*`!t@!(u)&$>mYLgKCFyU(w~3HAB+ zX&*#8;eNPhgIagBoIz!K1$L;Pxrf(}`#r$@7g4SJ!p=7Jp^n<~x-(ARYK*5_^T!uS)70%NUy+bx< ew5f)5T&Rc4nBFJ$Qf5i}A#wlRYy3a>-}m2J_1yLV literal 0 HcmV?d00001 diff --git a/frontend-dev/vwss-frontend/public/ngci-logo-black.png b/frontend-dev/vwss-frontend/public/ngci-logo-black.png new file mode 100755 index 0000000000000000000000000000000000000000..96249ba50e537cc3fcafe8bf6eec7d3c75437cf8 GIT binary patch literal 47613 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 vp|yGKq<+(8OjOSVk3&OWVY#QQcK + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/frontend-dev/vwss-frontend/style.css b/frontend-dev/vwss-frontend/style.css new file mode 100644 index 0000000..38e6b9c --- /dev/null +++ b/frontend-dev/vwss-frontend/style.css @@ -0,0 +1,214 @@ +:root { + --font-size: 1vw; + --width: 65vw; + --img-margin: -2vw; +} + +@media (orientation: landscape) { + :root { + --font-size: 1vh; + --width: 65vh; + --img-margin: -2vh; + } +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +html { + height: 100%; + font-size: var(--font-size); +} + +body { + height: 100%; + font-family: "Calibri", sans-serif; + background-color: black; + color: #FFFFFF; +} + +.header { + text-align: center; + width: 100%; + flex-grow: 0; +} + +.resource-wrapper { + /* display: flex; */ + /* flex-direction: column; */ + /* justify-content: space-around; */ + width: 100%; + /* overflow-x: hidden; */ +} + +.title-row { + font-weight: bold; + font-size: 3em; + padding: 0.25em 0; +} + +.event-row { + display: flex; + flex-wrap: nowrap; + overflow-x: hidden; + font-size: 3em; +} + +.flex-row { + display: flex; + flex-direction: row; +} + +.flex-cell { + display: flex; + flex-direction: column; + flex-grow: 1; + flex-basis: 33%; + justify-content: start; + align-items: left; + margin-right: 0.5em; +} + +.organizer { + font-weight: lighter; + font-style: italic; +} +.horizontal-logo { + width: 100%; + /* margin: 2em 0 1em 0; */ +} + +#resources-container { + width: 100%; + height: 100%; + overflow: hidden; + display: flex; + flex-direction: column; + justify-content: space-between; + flex-grow: 1; +} + +#grid { + display: grid; + grid-template-columns: 1fr 2fr 1fr; + /* gap: 1em; */ + height: 100%; + width: 100%; +} + +#schedule-container { + height: 100%; + grid-column: 1; + padding: 2em; + display: flex; + flex-direction: column; +} + +#schedule-container .header { + margin-bottom: 3em; +} + +#homepage-container { + grid-column: 3; + padding: 2em; + text-align: center; + display: flex; + flex-direction: column; + height: 100%; +} + +.top-container { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + height: 50%; +} + +#time-weather-container { + display: grid; + grid-template-columns: 1fr 1fr; + align-items: center; + width: 100%; + font-size: 5em; + font-weight: bold; +} + +.time { + font-family: 'Calibri', sans-serif; +} + +.separator { + font-family: 'Courier New', monospace; +} + +#slideshow { + grid-column: 2; + overflow: hidden; +} + +.slideshow-img { + transition: opacity 500ms ease-in-out; + opacity: 0; +} + +#bottom-section { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +#weather-icon { + align-self: end; /* Aligns the icon to the end of its grid cell */ + width: 2em; + margin: var(--img-margin); +} + +#temperature { + align-self: start; /* Aligns the temperature text to the start of its grid cell */ +} +#description { + font-weight: lighter; +} + +#quote { + font-size: 5em; + margin: 0 10%; + max-height: 40vh; + text-align: left; +} + +#author { + margin-top: 2.5%; + font-size: 4em; + width: 75%; + text-align: right; +} + +#welcome-message { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100vh; + /* CYAN DEFAULT BACKGROUND */ + background-color: #00ADEF; + + justify-content: center; + align-items: center; + color: white; + font-size: 2em; + display: flex; + z-index: 1001; + padding: 20em; + opacity: 0; + transition: opacity 1s linear; + +} +#welcome-message.visible { + opacity: 1; +} diff --git a/public/assets/index-CWJf9nUx.js b/public/assets/index-CWJf9nUx.js new file mode 100644 index 0000000..cec8562 --- /dev/null +++ b/public/assets/index-CWJf9nUx.js @@ -0,0 +1 @@ +(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const t of document.querySelectorAll('link[rel="modulepreload"]'))r(t);new MutationObserver(t=>{for(const s of t)if(s.type==="childList")for(const i of s.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&r(i)}).observe(document,{childList:!0,subtree:!0});function o(t){const s={};return t.integrity&&(s.integrity=t.integrity),t.referrerPolicy&&(s.referrerPolicy=t.referrerPolicy),t.crossOrigin==="use-credentials"?s.credentials="include":t.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function r(t){if(t.ep)return;t.ep=!0;const s=o(t);fetch(t.href,s)}})();function N(n,e,o){e.sort((i,d)=>new Date(i.start.dateTime)-new Date(d.start.dateTime));const r=document.createElement("div");r.className="resource-wrapper";const t=document.createElement("div");switch(t.className="title-row",n.split("@")[0]){case"s-er-1431-00":t.innerHTML="ER 1431-00 Open Space";break;case"s-er-1431-03":t.innerHTML="ER 1431-03 Visualization Lab";break;case"s-er-1431-33":t.innerHTML="ER 1431-33 Ideation Room";break;case"s-er-1431-37":t.innerHTML="ER 1431-37 Multipurpose Room";break;case"s-er-1431-39":t.innerHTML="ER 1431-39 Conference Room";break}r.appendChild(t);const s=document.createElement("div");if(s.className="event-row",e.forEach((i,d)=>{if(d<3){const c=document.createElement("div");c.className="flex-cell";const I=i.subject.length>18?i.subject.substring(0,18)+"...":i.subject,L=!i.location.displayName||i.organizer.emailAddress.address===n?"Walk-Up":i.organizer.emailAddress.name,M=p(i.start.dateTime+"Z"),H=p(i.end.dateTime+"Z");if(new Date(i.end.dateTime)>new Date){const f=document.createElement("div");f.textContent=I;const m=document.createElement("div");m.textContent=L,m.className="organizer";const u=document.createElement("div");u.className="time-range",u.innerHTML=`${M} - ${H}`,c.appendChild(f),c.appendChild(m),c.appendChild(u),s.appendChild(c)}}}),s.children.length===0){const i=document.createElement("div");i.className="flex-cell",i.textContent="No upcoming meetings at this time",s.appendChild(i)}r.appendChild(s),o.appendChild(r)}function p(n){const e=new Date(n),o=e.getHours(),r=e.getMinutes().toString().padStart(2,"0");return`${o}:${r}`}async function E(){console.log("fetching events");const e=await(await fetch("http://localhost:8080/api/events")).json(),o=document.getElementById("resources-container");o.innerHTML="",Object.keys(e).forEach(t=>{N(t,e[t],o)})}function T(n){let e=p(new Date);n||(e=e.replace(":"," ")),document.getElementById("time").innerHTML=e}function w(n){const e=document.getElementById(n),o=e.textContent.length;o<=83?e.style.fontSize="5em":o<=166?e.style.fontSize="4em":e.style.fontSize="3em"}async function C(){try{const n=await fetch("http://localhost:8080/api/quotes");if(n.ok){const o=(await n.json()).results,r=Math.floor(Math.random()*o.length),t=o[r];document.getElementById("quote").innerHTML=`${t.content}`,w("quote"),document.getElementById("author").innerHTML=`${t.author}`}else document.getElementById("quote").innerHTML="Wishing you an utmost wonderful day!",w("quote"),document.getElementById("author").innerHTML="Next-Generation Cities Institute"}catch(n){console.error("An error occurred:",n)}}async function b(){const e=await(await fetch("http://localhost:8080/api/weather")).json();if(e.cod===200){const o=e.main.temp,r=e.weather[0].description,s=`https://openweathermap.org/img/wn/${e.weather[0].icon}.png`;document.getElementById("weather-icon-container").innerHTML=`Weather Icon`,document.getElementById("temperature").innerHTML=`${o}°`,document.getElementById("description").innerHTML=`${r}`}else document.getElementById("weather").innerText="Weather data unavailable"}async function S(){try{const n=await fetch("http://localhost:8080/api/slideshow");if(!n.ok)throw new Error("Failed to fetch slideshow images");const e=await n.json();v(e)}catch(n){console.error("Error fetching slideshow images:",n)}}function k(n){const e=document.createElement("img");e.src=`http://localhost:8080${n}`,e.className="slideshow-img",e.style.width="100%",e.style.maxHeight="100vh",e.style.objectFit="cover";const o=n.split("/").pop().split(".")[0];return e.alt=o,e.title=o,e}let h=0;function v(n){if(n.length===0){console.log("No images found for the slideshow.");return}const e=document.getElementById("slideshow");e.innerHTML="";const o=k(n[h]);e.appendChild(o),setTimeout(()=>{o.style.opacity="1"},100),setTimeout(()=>{for(;e.children.length>1;)e.removeChild(e.firstChild)},100),h=(h+1)%n.length,setTimeout(()=>v(n),3e4)}const g=document.getElementById("welcome-message"),x=document.querySelector("#welcome-message img"),y=["#00ADEF","#912338","#e5a712","#db0272","#8cc63e","#573996"],B=["black","white","black","white","black","white"];let a=0;function D(){g.classList.add("visible"),g.style.backgroundColor=y[a],x.src=B[a]==="white"?"ngci-logo-white-wide.svg":"ngci-logo-black.png",a=(a+1)%y.length}function $(){g.classList.remove("visible")}setInterval(function(){D(),setTimeout($,3e4)},6e5);C();setInterval(C,60*60*1e3);b();setInterval(b,5*60*1e3);let l=!0;T(l);setInterval(()=>{T(l),l=!l},1e3);S();E();setInterval(E,3*60*1e3); diff --git a/public/assets/index-DWgpMFbj.js b/public/assets/index-DWgpMFbj.js deleted file mode 100644 index e995a31..0000000 --- a/public/assets/index-DWgpMFbj.js +++ /dev/null @@ -1 +0,0 @@ -(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const t of document.querySelectorAll('link[rel="modulepreload"]'))i(t);new MutationObserver(t=>{for(const s of t)if(s.type==="childList")for(const r of s.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&i(r)}).observe(document,{childList:!0,subtree:!0});function o(t){const s={};return t.integrity&&(s.integrity=t.integrity),t.referrerPolicy&&(s.referrerPolicy=t.referrerPolicy),t.crossOrigin==="use-credentials"?s.credentials="include":t.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function i(t){if(t.ep)return;t.ep=!0;const s=o(t);fetch(t.href,s)}})();function H(n,e,o){e.sort((r,d)=>new Date(r.start.dateTime)-new Date(d.start.dateTime));const i=document.createElement("div");i.className="resource-wrapper";const t=document.createElement("div");switch(t.className="title-row",n.split("@")[0]){case"s-er-1431-00":t.innerHTML="ER 1431-00 Open Space";break;case"s-er-1431-03":t.innerHTML="ER 1431-03 Visualization Lab";break;case"s-er-1431-33":t.innerHTML="ER 1431-33 Ideation Room";break;case"s-er-1431-37":t.innerHTML="ER 1431-37 Multipurpose Room";break;case"s-er-1431-39":t.innerHTML="ER 1431-39 Conference Room";break}i.appendChild(t);const s=document.createElement("div");if(s.className="event-row",e.forEach((r,d)=>{if(d<3){const c=document.createElement("div");c.className="flex-cell";const C=r.subject.length>18?r.subject.substring(0,18)+"...":r.subject,I=!r.location.displayName||r.organizer.emailAddress.address===n?"Walk-Up":r.organizer.emailAddress.name,L=p(r.start.dateTime+"Z"),M=p(r.end.dateTime+"Z");if(new Date(r.end.dateTime)>new Date){const g=document.createElement("div");g.textContent=C;const m=document.createElement("div");m.textContent=I,m.className="organizer";const u=document.createElement("div");u.className="time-range",u.innerHTML=`${L} - ${M}`,c.appendChild(g),c.appendChild(m),c.appendChild(u),s.appendChild(c)}}}),s.children.length===0){const r=document.createElement("div");r.className="flex-cell",r.textContent="No upcoming meetings at this time",s.appendChild(r)}i.appendChild(s),o.appendChild(i)}function p(n){const e=new Date(n),o=e.getHours(),i=e.getMinutes().toString().padStart(2,"0");return`${o}:${i}`}async function y(){console.log("fetching events");const e=await(await fetch("http://localhost:8080/api/events")).json(),o=document.getElementById("resources-container");o.innerHTML="",Object.keys(e).forEach(t=>{H(t,e[t],o)})}function E(n){let e=p(new Date);n||(e=e.replace(":"," ")),document.getElementById("time").innerHTML=e}function S(n){const e=document.getElementById(n),o=e.textContent.length;o<=83?e.style.fontSize="5em":o<=166?e.style.fontSize="4em":e.style.fontSize="3em"}async function T(){try{const n=await fetch("http://localhost:8080/api/quotes");if(n.ok){const o=(await n.json()).results,i=Math.floor(Math.random()*o.length),t=o[i];document.getElementById("quote").innerHTML=`${t.content}`,S("quote"),document.getElementById("author").innerHTML=`${t.author}`}else console.error("Failed to fetch data")}catch(n){console.error("An error occurred:",n)}}async function b(){const e=await(await fetch("http://localhost:8080/api/weather")).json();if(e.cod===200){const o=e.main.temp,i=e.weather[0].description,s=`https://openweathermap.org/img/wn/${e.weather[0].icon}.png`;document.getElementById("weather-icon-container").innerHTML=`Weather Icon`,document.getElementById("temperature").innerHTML=`${o}°`,document.getElementById("description").innerHTML=`${i}`}else document.getElementById("weather").innerText="Weather data unavailable"}async function k(){try{const n=await fetch("http://localhost:8080/api/slideshow");if(!n.ok)throw new Error("Failed to fetch slideshow images");const e=await n.json();v(e)}catch(n){console.error("Error fetching slideshow images:",n)}}function D(n){const e=document.createElement("img");e.src=`http://localhost:8080${n}`,e.className="slideshow-img",e.style.width="100%",e.style.maxHeight="100vh",e.style.objectFit="cover";const o=n.split("/").pop().split(".")[0];return e.alt=o,e.title=o,e}let h=0;function v(n){if(n.length===0){console.log("No images found for the slideshow.");return}const e=document.getElementById("slideshow");e.innerHTML="";const o=D(n[h]);e.appendChild(o),setTimeout(()=>{o.style.opacity="1"},100),setTimeout(()=>{for(;e.children.length>1;)e.removeChild(e.firstChild)},100),h=(h+1)%n.length,setTimeout(()=>v(n),3e4)}const f=document.getElementById("welcome-message"),N=document.querySelector("#welcome-message img"),w=["#00ADEF","#912338","#e5a712","#db0272","#8cc63e","#573996"],x=["black","white","black","white","black","white"];let a=0;function B(){f.classList.add("visible"),f.style.backgroundColor=w[a],N.src=x[a]==="white"?"ngci-logo-white-wide.svg":"ngci-logo-black.png",a=(a+1)%w.length}function $(){f.classList.remove("visible")}setInterval(function(){B(),setTimeout($,3e4)},6e5);T();setInterval(T,60*60*1e3);b();setInterval(b,5*60*1e3);let l=!0;E(l);setInterval(()=>{E(l),l=!l},1e3);k();y();setInterval(y,3*60*1e3); diff --git a/public/index.html b/public/index.html index e5affb4..e8d1a02 100644 --- a/public/index.html +++ b/public/index.html @@ -6,7 +6,7 @@ NGCI Daily Schedule - +