全新popiart网站 react项目重构
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

2 lines
3.3 KiB

function h(m){return String(m??"").trim()}function k(m){const u=m.currentTarget;if(!u)return null;if(u instanceof HTMLImageElement)return u.complete&&u.naturalWidth>0&&u.naturalHeight>0?u:null;const f=u.querySelector("img");return f&&f.complete&&f.naturalWidth>0&&f.naturalHeight>0?f:null}function L(m){const u=Math.max(8,Number(m?.maxCacheCount??32)),f=m?.enableCanvasWarmup??!0,N=Math.max(1,Number(m?.maxWarmupPerCall??24)),v=m?.disableCanvasPreview??!1,i=new Map,g=new Map,c=new Map,w=new Set,l=document.createElement("div");l.style.width="1px",l.style.height="1px",l.style.position="fixed",l.style.top="-9999px",l.style.left="-9999px",l.style.opacity="0",document.body.appendChild(l);const D=e=>{const t=i.get(e);t?.parentNode&&t.parentNode.removeChild(t),i.delete(e),g.delete(e)},W=e=>{const t=c.get(e);t?.parentNode&&t.parentNode.removeChild(t),c.delete(e)},E=()=>{for(;i.size>u;){const e=i.keys().next().value;if(!e)break;D(e),W(e)}},C=e=>{if(!e.complete||e.naturalWidth<=0||e.naturalHeight<=0)return null;const t=120,a=document.createElement("canvas");a.width=t,a.height=t,a.style.width=`${t}px`,a.style.height=`${t}px`,a.style.position="fixed",a.style.top="-9999px",a.style.left="-9999px";const r=a.getContext("2d");if(!r)return null;const n=e.naturalWidth,d=e.naturalHeight,s=n/d,o=1;let p=0,T=0,x=n,I=d;return s>o?(x=d*o,p=(n-x)/2):s<o&&(I=n/o,T=(d-I)/2),r.drawImage(e,p,T,x,I,0,0,t,t),a},y=e=>{const t=h(e);if(!t)return null;const a=i.get(t);if(a)return i.delete(t),i.set(t,a),a;const r=new Image;return r.src=t,r.style.width="120px",r.style.height="120px",r.style.objectFit="cover",r.decoding="async",r.loading="eager",i.set(t,r),E(),r},P=e=>{const t=h(e);if(!t)return Promise.resolve();const a=g.get(t);if(a)return a;const r=y(t);if(!r)return Promise.resolve();const n=new Promise(d=>{if(r.complete&&r.naturalWidth>0){d();return}const s=()=>{r.removeEventListener("load",s),r.removeEventListener("error",s),d()};r.addEventListener("load",s,{once:!0}),r.addEventListener("error",s,{once:!0})}).then(async()=>{try{typeof r.decode=="function"&&await r.decode()}catch{}});return g.set(t,n),n},b=e=>{const t=h(e);return!t||c.has(t)?Promise.resolve():P(t).then(()=>{if(c.has(t))return;const a=i.get(t);if(!a)return;const r=C(a);r&&(document.body.appendChild(r),c.set(t,r))})};return{ensurePreviewImage:y,warmupPreviewImages:e=>{let t=0;e.forEach(a=>{if(t>=N)return;const r=h(a);if(!r||w.has(r))return;w.add(r),t+=1;const n=()=>{P(r),f&&!v&&b(r)};"requestIdleCallback"in window?window.requestIdleCallback(n,{timeout:1200}):setTimeout(n,0)})},startImageDrag:({evt:e,dragUrl:t,previewUrl:a})=>{const r=h(t);if(!r||!e.dataTransfer)return!1;e.dataTransfer.clearData(),e.dataTransfer.setData("text/plain",r),e.dataTransfer.setData("text/uri-list",r),e.dataTransfer.setData("text/html",`<img src="${r}" alt="" />`);const n=h(a??r),d=y(n);let s=v?null:c.get(n);if(!s&&!v&&d){const o=C(d);o?(document.body.appendChild(o),c.set(n,o),s=o):b(n)}if(!s){const o=k(e);if(o){const p=C(o);p&&(document.body.appendChild(p),c.set(n,p),s=p)}}return s?e.dataTransfer.setDragImage(s,60,60):e.dataTransfer.setDragImage(l,0,0),!0},dispose:()=>{i.forEach(e=>{e.parentNode&&e.parentNode.removeChild(e)}),c.forEach(e=>{e.parentNode&&e.parentNode.removeChild(e)}),i.clear(),g.clear(),c.clear(),w.clear(),l.parentNode&&l.parentNode.removeChild(l)}}}export{L as c};
//# sourceMappingURL=imageDragTransfer-vBkaf40H.js.map