HEX
Server: Apache/2.4.46 (Win64) OpenSSL/1.1.1j PHP/8.4.25
System: Windows NT DESKTOP-4TAV2RJ 10.0 build 19045 (Windows 10) AMD64
User: fred (0)
PHP: 8.4.25
Disabled: NONE
Upload Files
File: C:/Users/fred/AppData/Local/Microsoft/OneDrive/26.168.0830.0006/WebAssets/static/views/curated.js
(function(){"use strict";var S=[],R=!1;function D(e){var n=e.filter(function(l){return l.colorH!==void 0&&l.colorH!==null}),r=e.filter(function(l){return l.colorH===void 0||l.colorH===null});if(n.length===0)return[{hue:0,items:r,avgWeight:.5}];n.sort(function(l,d){return l.colorH-d.colorH});for(var t=[],a=[n[0]],i=1;i<n.length;i++){var o=n[i].colorH-n[i-1].colorH;o>25||a.length>=20?(t.push(a),a=[n[i]]):a.push(n[i])}a.length&&t.push(a);var s=t.map(function(l){var d=l.reduce(function(h,c){return h+c.colorH},0)/l.length,g=l.reduce(function(h,c){return h+(c.visualWeight||.5)},0)/l.length,I=Math.round(l.reduce(function(h,c){return h+(c.colorR||128)},0)/l.length),f=Math.round(l.reduce(function(h,c){return h+(c.colorG||128)},0)/l.length),p=Math.round(l.reduce(function(h,c){return h+(c.colorB||128)},0)/l.length);return{hue:d,items:l,avgWeight:g,avgR:I,avgG:f,avgB:p}});if(r.length&&s.length){var u=s.reduce(function(l,d){return l.items.length>d.items.length?l:d});u.items.push.apply(u.items,r)}return s}function z(e){if(e.length<=1)return e;e.sort(function(I,f){return f.avgWeight-I.avgWeight});for(var n=e[0],r=e.slice(1),t=[],a=[],i=[],o=[],s=0;s<r.length;s++){var u=r[s],l=Math.abs(u.hue-n.hue),d=Math.min(l,360-l);d>150&&d<210?t.push(u):d<40?a.push(u):d>100&&d<140?i.push(u):o.push(u)}var g=[n].concat(t,a,i,o);return g.forEach(function(I,f){I.items.sort(function(p,h){var c=p.colorL!==void 0?p.colorL:.5,w=h.colorL!==void 0?h.colorL:.5;return f%2===0?c-w:w-c}),I.mode="justified"}),g}function W(e,n,r){if(!e.length)return[];r=r||220;var t=4,a=e.length,i=e.map(function(b){return b.aspectRatio||(b.width&&b.height?b.width/b.height:1)});function o(b,$){for(var j=0,P=b;P<$;P++)j+=i[P];return(n-($-b-1)*t)/Math.max(j,.1)}var s=12,u=new Array(a+1).fill(1/0),l=new Array(a+1).fill(0);u[0]=0;for(var d=1;d<=a;d++)for(var g=Math.max(0,d-s);g<d;g++){var I=o(g,d),f=Math.pow(I-r,2),p=u[g]+f;p<u[d]&&(u[d]=p,l[d]=g)}for(var h=[],c=a;c>0;)h.unshift(l[c]),c=l[c];h.push(a);for(var w=[],C=0;C<h.length-1;C++){for(var K=h[C],Q=h[C+1],he=o(K,Q),X=Math.max(80,Math.min(400,he)),Y=[],N=K;N<Q;N++)Y.push({item:e[N],width:Math.round(i[N]*X),height:Math.round(X)});w.push(Y)}return w}function V(e){if(e.length<=2)return e;for(var n=0,r=-1,t=0;t<e.length;t++){var a=e[t].item.visualWeight||0;a>r&&(r=a,n=t)}var i=Math.round((e.length-1)*.382);if(n!==i){var o=e.splice(n,1)[0];e.splice(i,0,o)}return e}var y=document.getElementById("gallery-container"),H=document.getElementById("progress-bar"),ee=document.getElementById("progress-fill"),te=document.getElementById("progress-text"),M=document.getElementById("status-msg"),O=document.getElementById("empty-state"),m=[],v=[],ne=null,re=!1,k=[],x=new Map;function G(){x.clear();for(var e=0;e<v.length;e++){var n=v[e];if(n){var r=n.thumbnailId||n.driveItemId;r!=null&&x.set(r,e)}}}function A(e){return e?{id:e.thumbnailId||e.driveItemId,thumbnailId:Od4Shared.NumericUtils.toPositiveInt(e.thumbnailId),driveId:null,driveItemId:e.driveItemId||null,isVideo:0,width:e.width||null,height:e.height||null,isFavorite:e.isFavorite||0}:null}function ae(e){return e?{id:e.thumbnailId||e.driveItemId,thumbnailId:Od4Shared.NumericUtils.toPositiveInt(e.thumbnailId),driveId:null,driveItemId:e.driveItemId||null,isVideo:0,width:e.width||null,height:e.height||null,isFavorite:e.isFavorite||0,name:e.name||"",date:e.takenDateTime||""}:null}ViewLib.OneUpNeighbors.install(ViewLib.OneUpNeighbors.arrayResolver({getItems:function(){return v},indexOfId:function(e){return x.get(e)},makeItem:function(e,n){return n?ae(e):A(e)}})),window.addEventListener("message",function(e){if(e.data){if(e.data.type==="favorite-changed"){for(var n=0;n<m.length;n++)if(m[n]&&m[n].driveItemId===e.data.driveItemId){m[n].isFavorite=e.data.isFavorite;break}for(var r=0;r<v.length;r++)if(v[r]&&v[r].driveItemId===e.data.driveItemId){v[r].isFavorite=e.data.isFavorite;break}}if(e.data.type==="photo-deleted"){for(var t=e.data.driveItemId,a=0;a<m.length;a++)if(m[a]&&(m[a].driveItemId===t||String(m[a].driveItemId)===String(t))){var i=m[a].thumbnailId;m.splice(a,1);for(var r=0;r<v.length;r++)if(v[r]&&(v[r].driveItemId===t||String(v[r].driveItemId)===String(t))){v.splice(r,1);break}if(i){var o=y.querySelector('.photo-tile[data-tid="'+i+'"]');o&&o.remove()}break}}}});function E(e,n,r){var t=document.createElement("div");t.className="photo-tile",t.style.width=n+"px",t.style.height=r+"px",t.dataset.tid=e.thumbnailId,e.blurhash?t.appendChild(window.OD4CuratedBlurhash.renderBlurhashCanvas(e.blurhash)):t.style.background=e.colorR!==void 0?"rgb("+e.colorR+","+e.colorG+","+e.colorB+")":"#2a2a2a";var a=document.createElement("img");return a.loading="lazy",a.dataset.od4ApiName="thumbnail.single",a.src=ViewLib.Thumbnail.buildThumbnailUrl(e.thumbnailId),a.alt=e.name||"",a.onload=function(){a.classList.add("loaded")},t.appendChild(a),t.addEventListener("click",function(){U(e)}),t}function U(e){var n=y.querySelector(".photo-tile.selected");n&&n.classList.remove("selected"),ne=e.thumbnailId;var r=y.querySelector('.photo-tile[data-tid="'+e.thumbnailId+'"]');r&&r.classList.add("selected"),re=!0;var t=e.thumbnailId||e.driveItemId,a=x.get(t),i=null,o=null;a!=null&&(a>0&&v[a-1]&&(i=A(v[a-1])),a<v.length-1&&v[a+1]&&(o=A(v[a+1]))),ViewLib.Messages.sendToShell({type:"photo-selected",photo:{id:e.thumbnailId,thumbnailId:Od4Shared.NumericUtils.toPositiveInt(e.thumbnailId),name:e.name||"",date:e.takenDateTime||"",driveItemId:e.driveItemId||null,driveId:null,isVideo:0,width:e.width||null,height:e.height||null,isFavorite:e.isFavorite||0},prevItem:i,nextItem:o})}function ie(e){var n=document.createElement("div");n.className="hero-section zone-section";var r=e.items.slice();r.sort(function(p,h){return(h.visualWeight||0)-(p.visualWeight||0)});var t=r[0],a=r.slice(1),i=document.createElement("div");i.className="hero-image-wrap";var o=t.aspectRatio||(t.width&&t.height?t.width/t.height:1.5),s=Math.min(window.innerHeight*.5,y.clientWidth/o);i.style.height=s+"px",t.blurhash&&i.appendChild(window.OD4CuratedBlurhash.renderBlurhashCanvas(t.blurhash));var u=document.createElement("img");if(u.loading="lazy",u.dataset.od4ApiName="thumbnail.single",u.src=ViewLib.Thumbnail.buildThumbnailUrl(t.thumbnailId),u.onload=function(){u.classList.add("loaded")},i.appendChild(u),i.dataset.tid=t.thumbnailId,i.addEventListener("click",function(){U(t)}),n.appendChild(i),a.length)for(var l=W(a,y.clientWidth-24,160),d=0;d<l.length;d++){var g=document.createElement("div");g.className="justified-row";for(var I=V(l[d]),f=0;f<I.length;f++)g.appendChild(E(I[f].item,I[f].width,I[f].height));n.appendChild(g)}return n}function le(e){var n=document.createElement("div");n.className="zone-section";for(var r=y.clientWidth-24,t=W(e.items,r,220),a=0;a<t.length;a++){var i=document.createElement("div");i.className="justified-row";for(var o=V(t[a]),s=0;s<o.length;s++)i.appendChild(E(o[s].item,o[s].width,o[s].height));n.appendChild(i)}return n}function oe(e){var n=document.createElement("div");n.className="zone-section";var r=e.items.slice();r.sort(function(w,C){return(C.visualWeight||0)-(w.visualWeight||0)});for(var t=0;t<r.length;){var a=r.length-t;if(a>=3){var i=document.createElement("div");i.className=t/3%2===0?"editorial-grid":"editorial-grid-reverse";var o=r[t],s=340,u=E(o,Math.round((o.aspectRatio||1.2)*s),s);u.classList.add("feature"),u.style.width="100%",u.style.height=s+"px",i.appendChild(u);for(var l=1;l<=2&&t+l<r.length;l++){var d=E(r[t+l],200,Math.round(s/2-2));d.style.width="100%",d.style.height=Math.round(s/2-2)+"px",i.appendChild(d)}n.appendChild(i),t+=3}else{for(var g=r.slice(t),I=y.clientWidth-24,f=W(g,I,180),p=0;p<f.length;p++){var h=document.createElement("div");h.className="justified-row";for(var c=0;c<f[p].length;c++)h.appendChild(E(f[p][c].item,f[p][c].width,f[p][c].height));n.appendChild(h)}break}}return n}function de(e){var n=document.createElement("div");n.className="zone-divider";var r=e.avgR||128,t=e.avgG||128,a=e.avgB||128;return n.style.background="linear-gradient(90deg, transparent, rgba("+r+","+t+","+a+",0.6), transparent)",n}function L(e){if(y.innerHTML="",k=[],v=[],!e.length){O.style.display="block",G();return}O.style.display="none",T=y.clientWidth;var n=D(e),r=z(n);r.forEach(function(t,a){a>0&&y.appendChild(de(t));var i;t.mode==="hero"&&t.items.length>=2?i=ie(t):t.mode==="editorial"&&t.items.length>=3?i=oe(t):i=le(t),y.appendChild(i),k.push({zone:t,element:i});for(var o=0;o<t.items.length;o++)v.push(t.items[o])}),G(),M.textContent=e.length+" photos in "+r.length+" color zones"}var T=0,q=null;window.addEventListener("resize",function(){clearTimeout(q),q=setTimeout(function(){var e=y.clientWidth;e&&e!==T&&m.length&&(T=e,L(B(m)))},150)});var _=200;function Z(e){if(!e.length)return Promise.resolve();H.classList.remove("hidden");var n=e.length,r=0;function t(a){if(a>=e.length)return H.classList.add("hidden"),Promise.resolve();var i=e.slice(a,a+_);return fetch("/api/curated/analyze",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ids:i}),_od4ApiName:"curated.analyze"}).catch(function(){}).then(function(){r+=i.length;var o=Math.round(r/n*100);return ee.style.width=o+"%",te.textContent="Analyzing colors: "+r+"/"+n,t(a+_)})}return t(0)}function B(e){var n=e;if(R&&S.length){var r=new Set(S);n=n.filter(function(t){return r.has(t.thumbnailId)})}return n}function F(){var e=500,n=[],r=0,t=1/0;function a(){return r>=t?Promise.resolve({items:n,unanalyzed:[]}):fetch("/api/curated/colors?offset="+r+"&limit="+e,{_od4ApiName:"curated.colors"}).then(function(i){return i.json()}).then(function(i){return i.error?(console.error(i.error),{items:n,unanalyzed:[]}):(n.push.apply(n,i.items),t=i.total,r+=e,i.unanalyzed&&i.unanalyzed.length>0&&n.length===0?{items:[],unanalyzed:i.unanalyzed}:(r<t&&(M.textContent="Loading: "+n.length+"/"+t),a()))})}return a()}function ue(){return M.textContent="Loading...",F().then(function(e){return e.items.length===0&&e.unanalyzed.length>0?Z(e.unanalyzed).then(function(){return F()}):e}).then(function(e){m=e.items,L(B(m)),m.length>0&&J()}).catch(function(e){console.error("Curated load error:",e),M.textContent="Error loading photos"})}function J(){fetch("/api/curated/analyze-status",{_od4ApiName:"curated.status"}).then(function(e){return e.json()}).then(function(e){if(!(e.pending<=0))return fetch("/api/curated/colors?limit=1",{_od4ApiName:"curated.colors"}).then(function(n){return n.json()}).then(function(n){if(!(!n.unanalyzed||n.unanalyzed.length===0))return Z(n.unanalyzed).then(function(){return F().then(function(r){m=r.items,L(B(m)),J()})})})}).catch(function(e){console.error("[Curated] continueAnalysis error:",e)})}ViewLib.Messages.onFiltersChanged(function(e){S=e.peopleThumbnailIds||[],R=e.peopleFilterActive||!1,L(B(m))}),ViewLib.Messages.onGetVisiblePhotosRequest(function(){var e=y.querySelectorAll(".photo-tile[data-tid]"),n=[];e.forEach(function(r){var t=r.getBoundingClientRect();t.top<window.innerHeight&&t.bottom>0&&n.push(parseInt(r.dataset.tid,10))}),ViewLib.Messages.sendVisiblePhotosToShell(n)}),ue()})();