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
2.4 KiB
2 lines
2.4 KiB
function d(c){return String(c??"").trim()}function C(){const c=new Map,f=new Map,l=new Map,o=document.createElement("div");o.style.width="1px",o.style.height="1px",o.style.position="fixed",o.style.top="-9999px",o.style.left="-9999px",o.style.opacity="0",document.body.appendChild(o);const m=t=>{const r=d(t);if(!r)return null;const a=c.get(r);if(a)return a;const e=new Image;return e.src=r,e.style.width="120px",e.style.height="120px",e.style.objectFit="cover",e.style.position="fixed",e.style.top="-9999px",e.style.left="-9999px",document.body.appendChild(e),c.set(r,e),e},y=t=>{const r=d(t);if(!r)return Promise.resolve();const a=f.get(r);if(a)return a;const e=m(r);if(!e)return Promise.resolve();const s=new Promise(i=>{if(e.complete&&e.naturalWidth>0){i();return}const n=()=>{e.removeEventListener("load",n),e.removeEventListener("error",n),i()};e.addEventListener("load",n,{once:!0}),e.addEventListener("error",n,{once:!0})}).then(async()=>{try{typeof e.decode=="function"&&await e.decode()}catch{}});return f.set(r,s),s},x=t=>{const r=d(t);return!r||l.has(r)?Promise.resolve():y(r).then(()=>{if(l.has(r))return;const a=c.get(r);if(!a||!a.complete||a.naturalWidth<=0||a.naturalHeight<=0)return;const e=document.createElement("canvas"),s=120;e.width=s,e.height=s,e.style.width=`${s}px`,e.style.height=`${s}px`,e.style.position="fixed",e.style.top="-9999px",e.style.left="-9999px";const i=e.getContext("2d");if(!i)return;const n=a.naturalWidth,u=a.naturalHeight,w=n/u,p=1;let v=0,D=0,g=n,h=u;w>p?(g=u*p,v=(n-g)/2):w<p&&(h=n/p,D=(u-h)/2),i.drawImage(a,v,D,g,h,0,0,s,s),document.body.appendChild(e),l.set(r,e)})};return{ensurePreviewImage:m,warmupPreviewImages:t=>{t.forEach(r=>{y(r),x(r)})},startImageDrag:({evt:t,dragUrl:r,previewUrl:a})=>{const e=d(r);if(!e||!t.dataTransfer)return!1;t.dataTransfer.clearData(),t.dataTransfer.setData("text/plain",e),t.dataTransfer.setData("text/uri-list",e),t.dataTransfer.setData("text/html",`<img src="${e}" alt="" />`);const s=d(a??e),i=l.get(s);i?t.dataTransfer.setDragImage(i,60,60):x(s);const n=m(s);return!i&&n&&n.complete&&n.naturalWidth>0?t.dataTransfer.setDragImage(n,60,60):i||t.dataTransfer.setDragImage(o,0,0),!0},dispose:()=>{c.forEach(t=>{t.parentNode&&t.parentNode.removeChild(t)}),l.forEach(t=>{t.parentNode&&t.parentNode.removeChild(t)}),c.clear(),f.clear(),l.clear(),o.parentNode&&o.parentNode.removeChild(o)}}}export{C as c};
|
|
//# sourceMappingURL=imageDragTransfer-BlwV0yxr.js.map
|
|
|