| Server IP : 127.0.0.1 / Your IP : 216.73.216.109 Web Server : Apache/2.4.54 (Win64) OpenSSL/1.1.1q PHP/8.1.10 System : Windows NT DESKTOP-E5T4RUN 10.0 build 19045 (Windows 10) AMD64 User : SERVERWEB ( 0) PHP Version : 8.1.10 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : C:/Users/SERVERWEB/AppData/Local/Microsoft/OneDrive/26.074.0420.0001/WebAssets/ |
Upload File : |
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Discovery</title><script src="/static/platform/vibe-telemetry.js"></script><script src="/static/platform/od4-fetch.js"></script><script src="/static/platform/ecs.js"></script><script src="/static/view-lib/sql.js"></script><script src="/static/view-lib/theme-sync.js"></script><script src="/static/view-lib/user-activity.js"></script><script>ViewLib.ThemeSync.applyInitialTheme({detectOd4Skin:!0})</script><link rel="stylesheet" href="/static/tokens/theme.css"><link rel="stylesheet" href="/static/tokens/scrollbar.css"><style>*{margin:0;padding:0;box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',system-ui,sans-serif;background:var(--bg-neutral-1-rest);color:var(--fg-neutral-1-rest);height:100vh;overflow-y:auto;overflow-x:hidden}.feed{max-width:640px;margin:0 auto;padding:24px 16px 64px;display:flex;flex-direction:column;gap:20px}.card{background:var(--bg-neutral-2-alt);border-radius:12px;box-shadow:0 2px 8px rgba(0,0,0,.15);overflow:hidden}.card-header{padding:16px 20px 12px}.card-title{font-size:var(--font-size-body-2-stronger);font-weight:700;color:var(--fg-neutral-1-rest);display:flex;align-items:center;gap:8px}.card-subtitle{font-size:var(--font-size-caption-1);color:var(--fg-neutral-2-rest);margin-top:4px}.year-group{padding:0 20px 16px}.year-label{font-size:14px;font-weight:600;color:var(--fg-neutral-2-rest);margin-bottom:8px}.thumb-strip{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none}.thumb-strip::-webkit-scrollbar{display:none}.thumb-strip img{width:88px;height:88px;border-radius:8px;object-fit:cover;cursor:pointer;flex-shrink:0;transition:transform .15s ease;background:var(--bg-neutral-2-rest)}.thumb-strip img:hover{transform:scale(1.05)}.skeleton{background:var(--bg-neutral-2-alt);border-radius:12px;overflow:hidden}.skeleton-bar{height:16px;border-radius:4px;background:linear-gradient(90deg,var(--bg-neutral-2-rest) 25%,var(--bg-neutral-2-alt) 50%,var(--bg-neutral-2-rest) 75%);background-size:200% 100%;animation:shimmer 1.4s infinite}.skeleton-thumb{width:88px;height:88px;border-radius:8px;flex-shrink:0;background:linear-gradient(90deg,var(--bg-neutral-2-rest) 25%,var(--bg-neutral-2-alt) 50%,var(--bg-neutral-2-rest) 75%);background-size:200% 100%;animation:shimmer 1.4s infinite}@keyframes shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}}.stub-card{position:relative}.stub-body{padding:20px;min-height:80px;display:flex;align-items:center;justify-content:center;color:var(--fg-neutral-2-rest);font-size:14px}.badge{position:absolute;top:12px;right:12px;background:var(--fg-neutral-2-rest);color:var(--bg-neutral-2-alt);font-size:10px;font-weight:700;text-transform:uppercase;padding:3px 8px;border-radius:4px;letter-spacing:.5px}.empty-state{padding:32px 20px;text-align:center;color:var(--fg-neutral-2-rest);font-size:14px}</style></head><body><div class="feed"><div class="card" id="otd-card"><div class="card-header"><div class="card-title">On This Day</div><div class="card-subtitle" id="otd-subtitle">Loading...</div></div><div id="otd-content"><div style="padding:0 20px 16px"><div class="skeleton-bar" style="width:60px;margin-bottom:12px"></div><div style="display:flex;gap:6px"><div class="skeleton-thumb"></div><div class="skeleton-thumb"></div><div class="skeleton-thumb"></div></div></div></div></div><div class="card stub-card"><div class="card-header"><div class="card-title">Rediscover</div><div class="card-subtitle">Photos you haven't viewed in a while</div></div><div class="stub-body">Coming soon</div><span class="badge">Coming soon</span></div><div class="card stub-card"><div class="card-header"><div class="card-title">Best of Location</div><div class="card-subtitle">Top shots from your favorite places</div></div><div class="stub-body">Coming soon</div><span class="badge">Coming soon</span></div><div class="card stub-card"><div class="card-header"><div class="card-title">Year in Review</div><div class="card-subtitle">Highlights from each year</div></div><div class="stub-body">Coming soon</div><span class="badge">Coming soon</span></div></div><script src="/static/view-lib/messages.js"></script><script>function handleThumbClick(t){var e=JSON.parse(t.getAttribute("data-photo")),o=JSON.parse(t.getAttribute("data-group")),n=parseInt(t.getAttribute("data-index"),10),a=t.getBoundingClientRect(),i={x:a.x,y:a.y,width:a.width,height:a.height};window.parent.postMessage({type:"photo-selected",photo:e,cluster:o,index:n,thumbRect:i},"*")}!function(){var t=document.getElementById("otd-content"),e=document.getElementById("otd-subtitle");fetch("/api/photos/on-this-day").then(function(t){return t.json()}).then(function(o){if(!o.groups||0===o.groups.length)return t.innerHTML='<div class="empty-state">No photos from this day in previous years</div>',void(e.textContent="No memories today");var n=new Date;e.textContent=["January","February","March","April","May","June","July","August","September","October","November","December"][n.getMonth()]+" "+n.getDate();var a="";o.groups.forEach(function(t){a+='<div class="year-group">',a+='<div class="year-label">'+t.year+"</div>",a+='<div class="thumb-strip">',t.photos.forEach(function(e,o){a+='<img src="/api/thumb/'+e.driveItemId+'" alt="'+(e.name||"").replace(/"/g,""")+'" loading="lazy" data-photo=\''+JSON.stringify(e).replace(/'/g,"'")+"' data-group='"+JSON.stringify(t.photos).replace(/'/g,"'")+"' data-index=\""+o+'" onclick="handleThumbClick(this)">'}),a+="</div></div>"}),t.innerHTML=a}).catch(function(o){t.innerHTML='<div class="empty-state">Could not load photos</div>',e.textContent="Error"}),ViewLib.Messages.sendViewReadyToShell("discovery.html")}()</script></body></html>