1 line
12 KiB
JavaScript
1 line
12 KiB
JavaScript
System.register(["./vue-legacy-BnJhYd-u.js","./_plugin-vue_export-helper-legacy-DNBbTZ02.js","./index-legacy-Ce-qKpT_.js","./yaml-legacy-PSsIiII3.js","./ThumbnailSlide-legacy-CSXTq44l.js","./folderEntryParser-legacy-SgEP6AcQ.js"],function(e,t){var a,r,n,i,s,o,p,l,d,g,c,f,u,m,h,w,y,v,b,j,A,P,E,M,O,C,I,D,R,k,x,T,L,B,S,U,$,W,_,F,q,J,K,N,z,G,V,Y,H,Z,Q,X,ee,te,ae,re,ne,ie,se,oe,pe,le,de,ge,ce,fe,ue,me,he,we,ye,ve,be,je,Ae,Pe,Ee,Me;return{setters:[function(e){a=e.At,r=e.B,n=e.G,i=e.H,s=e.K,o=e.Mt,p=e.Tt,l=e.W,d=e.Z,g=e.at,c=e.ct,f=e.g,u=e.it,m=e.k,h=e.kt,w=e.ot,y=e.p,v=e.ut},function(e){b=e.t},function(e){j=e.n},function(e){A=e.n},function(e){P=e.K,E=e.gt,M=e.ot,O=e.t},function(e){C=e.i,I=e.n,D=e.r,R=e.t}],execute:function(){(k=document.createElement("style")).textContent="html,body,#app{background:#fff;width:100%;height:100%;min-height:100vh}.raw-preview[data-v-2545fa61]{width:100vw;min-height:100vh;background:#fff;min-height:100dvh}.raw-preview-pages[data-v-2545fa61]{flex-direction:column;width:100%;display:flex}.raw-preview-page[data-v-2545fa61]{background:#fff;border:0;border-radius:0;flex-shrink:0;margin:0;overflow:hidden}\n/*$vite$:1*/",document.head.appendChild(k),x={gif:"image/gif",jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",svg:"image/svg+xml",webp:"image/webp"},T="[RawPreview]",L={info:(...e)=>{console.info(T,...e)},warn:(...e)=>{console.warn(T,...e)},error:(...e)=>{console.error(T,...e)}},B=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),S=e=>!!B(e)&&"string"==typeof e.path&&"string"==typeof e.content,U=e=>!!B(e)&&"string"==typeof e.path,$=e=>/\.(png|jpe?g|webp|gif|svg)$/i.test(e),W=e=>/\.pptd$/i.test(e),_=e=>e?.replace(/^sandbox:\/+/,""),F=e=>(_(e)??e).replace(/^\/+/,""),q=e=>{const t=_(e);if(!t)return;const a=t.lastIndexOf("/");return a>=0?t.substring(0,a+1):void 0},J=e=>{const t=e?F(e):"";return t?`${t.replace(/\/+$/,"")}/`:""},K=(e,t="application/octet-stream")=>{const a=e.split(".").pop()?.toLowerCase();return a?x[a]??t:t},N=e=>Array.isArray(e.files)?e.files.filter(S):[],z=e=>N(e).find(e=>W(e.path)),G=e=>"string"==typeof e.pptdContent?e.pptdContent:"string"==typeof e.pptd?e.pptd:S(e.pptd)?e.pptd.content:z(e)?.content,V=e=>"string"==typeof e.pptdPath?e.pptdPath:S(e.pptd)?e.pptd.path:z(e)?.path,Y=e=>{const t=new Map;return e.forEach(e=>{t.set(e.path,e)}),[...t.values()]},H=e=>({path:e.path,content:e.content,mimeType:K(e.path)}),Z=e=>{const t=N(e).filter(e=>$(e.path)).map(H),a=Array.isArray(e.images)?e.images.filter(U):[];return Y([...t,...a])},Q=e=>{const t=Array.isArray(e.pages)?e.pages.filter(S):[];return S(e.page)&&t.push(e.page),Y([...t,...N(e)]).filter(e=>!W(e.path)&&!$(e.path))},X=e=>/^\s*(?:<\?xml[\s\S]*?)?<svg[\s>]/i.test(e),ee=(e,t)=>{try{return new Blob([fe(t)],{type:K(e)})}catch(a){return void L.warn("invalid image base64",{path:e,error:a})}},te=(e,t)=>{const a=K(e);if("image/svg+xml"===a&&X(t))return new Blob([t],{type:a})},ae=e=>{if(!B(e))return;const t=e,a=G(t),r=Q(t);return a&&0!==r.length?{pptdContent:a,pptdPath:V(t),pages:r,pageIds:Array.isArray(t.pageIds)?t.pageIds.filter(e=>"string"==typeof e):void 0,images:Z(t),imageReplacerMap:B(t.imageReplacerMap)?Object.fromEntries(Object.entries(t.imageReplacerMap).filter(e=>"string"==typeof e[1])):void 0,lastModifiedTime:t.lastModifiedTime}:void 0},re=e=>{if(!B(e))return{dataType:typeof e};const t=e,a=Q(t);return{keys:Object.keys(e),hasPptd:"string"==typeof t.pptd||S(t.pptd),hasPptdContent:"string"==typeof t.pptdContent,pptdPath:V(t),filesCount:Array.isArray(t.files)?t.files.length:0,pagesCount:a.length,imagesCount:Z(t).length,imageReplacerCount:B(t.imageReplacerMap)?Object.keys(t.imageReplacerMap).length:0,pageIds:Array.isArray(t.pageIds)?t.pageIds:void 0}},ne=e=>{if(!B(e))return"data is not object";const t=e;return G(t)?0===Q(t).length?"missing pages or page":void 0:"missing pptdContent or pptd"},ie=e=>{const t={};return e.forEach(e=>{B(e)&&"string"==typeof e.elementType&&(t[e.elementType]=(t[e.elementType]??0)+1)}),t},se=e=>{if("text"===e.elementType)return e.content.text.replace(/<[^>]+>/g," ").replace(/\s+/g," ").trim()},oe=e=>{const t=e.elements.filter(e=>"image"===e.elementType).map(e=>e.src).filter(Boolean).slice(0,12),a=e.elements.map(se).filter(e=>!!e).slice(0,6);return{pageId:e.pageId,pagePath:e.pagePath,typeCounts:ie(e.elements),imageSrcs:t,textSamples:a}},pe=e=>Object.entries(e).map(([e,t])=>{try{return oe({...A(t),pageId:e.replace(/\.page$/,""),pagePath:e})}catch(a){return{pagePath:e,error:a}}}),le=e=>/^data:/i.test(e),de=e=>/^blob:/i.test(e),ge=e=>/^https?:\/\//i.test(e),ce=e=>{const t=e.indexOf(",");return t>=0?e.slice(t+1):e},fe=e=>{const t=atob(ce(e)),a=new Uint8Array(t.length);for(let r=0;r<t.length;r++)a[r]=t.charCodeAt(r);return a},ue=(e,t)=>{if("undefined"!=typeof Blob&&e instanceof Blob)return e;if(e instanceof ArrayBuffer)return new Blob([e],{type:t});if(ArrayBuffer.isView(e)){const a=new Uint8Array(e.buffer,e.byteOffset,e.byteLength),r=new Uint8Array(a);return new Blob([r],{type:t})}return Array.isArray(e)?new Blob([new Uint8Array(e)],{type:t}):B(e)&&Array.isArray(e.data)?new Blob([new Uint8Array(e.data)],{type:t}):void 0},me=e=>e?{seconds:"string"==typeof e.seconds?BigInt(e.seconds):e.seconds,nanos:e.nanos}:null,he=e=>{document.documentElement.dataset.rawPreviewStatus=e,L.info("status",e),window.dispatchEvent(new CustomEvent("raw-preview:status",{detail:{status:e}}))},we=(e,t)=>{"image"===e?.type&&e.src&&t.push(e.src)},ye=e=>{const t=[];for(const a of Object.values(e))try{const e=A(a);we(e.background,t);for(const a of e.elements)"image"===a.elementType&&t.push(a.src),"fill"in a&&we(a.fill,t),"table"===a.elementType&&("string"!=typeof a.style&&we(a.style?.fill,t),a.rows.forEach(e=>{e.forEach(e=>{we(e?.fill,t)})}))}catch{}return[...new Set(t.filter(Boolean))]},ve=(e,t,a)=>{const r={...t},n=Object.entries(t).map(([e,t])=>[F(e),t]),i=J(a);for(const s of ye(e)){const e=F(s),t=i?F(`${i}${e}`):"",a=n.find(([a])=>a===e||a===t||a.endsWith(`/${e}`));a&&(r[s]=a[1])}return r},be=(e,t)=>{const a=e.find(e=>e.path.endsWith(".pptd"))??e[0];if(!a)throw new Error("Invalid fsjson");return{pptdContent:a.content,pptdPath:t??a.path,pages:e.filter(e=>e!==a&&!$(e.path)).map(e=>({path:e.path,content:e.content})),images:e.filter(e=>e!==a&&$(e.path)).map(H)}},je=(e={})=>{const{importFSJSON:t,pages:a,setLastModified:r}=M(),{resolveValidImageUrl:n,setImageConfig:i}=P(),s=p(!0),o=p(!1),l=p();let d,c=!1,f=[];const m=()=>{f.forEach(e=>URL.revokeObjectURL(e)),f=[]},h=e=>{const t=URL.createObjectURL(e);return f.push(t),t},y=e=>{const t=e.mimeType||K(e.path),a=e.content??e.data??e.base64;if(e.url&&(ge(e.url)||le(e.url)||de(e.url)))return e.url;if("string"==typeof a){if(ge(a)||le(a)||de(a))return a;const t=te(e.path,a)??ee(e.path,a);return t?h(t):void 0}if(a){const e=ue(a,t);return e?h(e):void 0}},v=(e,t)=>{m();const a={},r=J(t);for(const n of e.images??[]){const e=y(n);if(!e)continue;const t=F(n.path),i=r&&t.startsWith(r)?t.slice(r.length):t;a[n.path]=e,a[t]=e,a[i]=e}return a},b=e=>{if(e)return Object.fromEntries(Object.entries(e).map(([e,t])=>{if(ge(t)||le(t)||de(t))return[e,t];const a=te(e,t)??ee(e,t);return[e,a?h(a):t]}))},A=async(p,g,f="message")=>{const m=ae(p);if(m){if(!c)return d={rawData:p,extraImageReplacerMap:g,source:f},void L.info("cache message before ready",{source:f,summary:re(p)});s.value=!0,o.value=!1,he("loading");try{const o=_(m.pptdPath)??"presentation.pptd",p=q(m.pptdPath),d=Object.fromEntries(m.pages.map(e=>[e.path,e.content]));L.info("start import",{source:f,pptdPath:o,basePath:p,pagesCount:m.pages.length,pageIds:m.pageIds,imagesCount:m.images?.length??0,extraImageReplacerCount:g?Object.keys(g).length:0}),L.info("page yaml elements",{pages:pe(d)});const c=[{path:o,content:m.pptdContent},...m.pages.map(e=>({path:e.path,content:e.content}))],h={...ve(d,v(m,p),p),...b(g),...b(m.imageReplacerMap)};L.info("image config",{imageReplacerCount:Object.keys(h).length,imageReplacerKeys:Object.keys(h).slice(0,20)}),i({basePath:p,imageReplacerMap:Object.keys(h).length?h:void 0}),r(me(m.lastModifiedTime)),l.value=m.pageIds;const w=ye(d);L.info("preload images",{count:w.length}),await Promise.allSettled(w.map(e=>n(e))),L.info("import fsjson",{filesCount:c.length}),t(c),L.info("store elements after import",{pages:[...a.value.values()].map(oe)}),s.value=!1,await E(),await(async()=>{await u(),await(document.fonts?.ready.catch(()=>{})),await new Promise(e=>requestAnimationFrame(()=>requestAnimationFrame(()=>e()))),await new Promise(e=>setTimeout(e,60))})(),await(e.onLoaded?.()),he("loaded"),L.info("loaded",{source:f,pagesCount:m.pages.length}),window.dispatchEvent(new CustomEvent("raw-preview:loaded",{detail:{source:f}}))}catch(h){L.error("load failed",h),j(h),s.value=!1,o.value=!0,he("error"),window.dispatchEvent(new CustomEvent("raw-preview:error",{detail:{error:h,source:f}}))}}else L.warn("ignore loadMessageData",{reason:ne(p),summary:re(p)})},O=e=>A(e),C=(e,t)=>O(be(e,t)),I=(e,t,a=window.location.origin)=>{window.postMessage(be(e,t),a)},D=e=>{L.info("message received",{origin:e.origin,summary:re(e.data)}),ae(e.data)?O(e.data):L.warn("message ignored",{reason:ne(e.data)})};return"undefined"!=typeof window&&window.addEventListener("message",D),w(()=>{c=!0,he("idle"),window.rawPreview={fsjsonToMessage:be,postFSJSON:I,loadFSJSON:C,loadMessage:O},L.info("api ready",{hasPendingMessage:!!d}),(()=>{if(!d)return;const e=d;d=void 0,L.info("consume cached message",{source:e.source,summary:re(e.rawData)}),A(e.rawData,e.extraImageReplacerMap,e.source)})()}),g(()=>{c=!1,d=void 0,m(),window.removeEventListener("message",D),window.rawPreview?.loadMessage===O&&(window.rawPreview=void 0)}),{isLoading:s,isError:o,messagePageIds:l,loadMessageData:A}},Ae=e=>/\.(png|jpe?g|webp|gif|svg)$/i.test(e),Pe=e=>{e.preventDefault(),e.stopPropagation()},Ee=e=>{let t=new Map;const a=()=>{t.forEach(e=>URL.revokeObjectURL(e)),t=new Map},r=async r=>{const n=await D(r);if(0===n.length)throw new Error("目录下未找到 .pptd 文件");const i=n[0];await(async e=>{a();const r=(await I(e)).filter(e=>Ae(e.relativePath)),n=await Promise.all(r.map(async e=>{const t=await R(e.file);return[F(e.relativePath),URL.createObjectURL(t)]}));t=new Map(n)})(i.parentDir);const{metaYaml:s,pagesYamlMap:o}=await C(i.file,i.parentDir),p=i.displayPath.replace(/^\.\//,"")||i.file.name,l=[{path:p,content:s},...Object.entries(o).map(([e,t])=>({path:e,content:t}))];await e.loadMessageData(be(l,p),ve(o,Object.fromEntries(t)),"drop")},n=Pe,i=Pe;return g(()=>{a()}),{handleDragEnter:n,handleDragOver:e=>{Pe(e),e.dataTransfer&&(e.dataTransfer.dropEffect="copy")},handleDragLeave:i,handleDrop:async e=>{Pe(e);const t=e.dataTransfer?.items;if(!t||0===t.length)return;const a=Array.from(t).map(e=>e.webkitGetAsEntry?.()).filter(e=>!!e).find(e=>e.isDirectory);if(a)try{await r(a)}catch(n){j(n),window.dispatchEvent(new CustomEvent("raw-preview:error",{detail:{error:n,source:"drop"}}))}}}},Me={key:0,class:"raw-preview-pages"},e("default",b(d({__name:"Raw",setup(e){const t=m(),{pages:d,pageOrder:g,pageSize:u}=M(),b=p(),j=p("undefined"==typeof window?0:window.innerWidth),A=()=>{j.value=b.value?.clientWidth??window.innerWidth},{isLoading:P,isError:E,loadMessageData:C}=je({onLoaded:A}),{handleDragEnter:I,handleDragOver:D,handleDragLeave:R,handleDrop:k}=Ee({loadMessageData:C}),x=i(()=>{const e=t.query.pageIds;return Array.isArray(e)?e[0]:e}),T=i(()=>void 0!==t.query.pageIds),L=i(()=>"string"==typeof x.value?x.value.split(",").map(e=>e.trim()).filter(Boolean):[]),B=i(()=>T.value?L.value:g.value),S=i(()=>Math.max(j.value,0)),U=i(()=>B.value.flatMap((e,t)=>{const a=d.value.get(e);return a?{key:`${t}:${e}`,pageId:e,slide:a}:[]}));return f(b,A),y(window,"resize",A),y(window,"dragenter",I),y(window,"dragover",D),y(window,"dragleave",R),y(window,"drop",k),w(A),(e,t)=>(c(),s("div",{ref_key:"previewRef",ref:b,class:a(["raw-preview",{"is-loading":h(P),"is-error":h(E)}]),onDragenter:t[0]||(t[0]=(...e)=>h(I)&&h(I)(...e)),onDragover:t[1]||(t[1]=(...e)=>h(D)&&h(D)(...e)),onDragleave:t[2]||(t[2]=(...e)=>h(R)&&h(R)(...e)),onDrop:t[3]||(t[3]=(...e)=>h(k)&&h(k)(...e))},[h(P)||h(E)?n("",!0):(c(),s("div",Me,[(c(!0),s(r,null,v(U.value,e=>(c(),l(O,{key:e.key,class:"thumbnail-page raw-preview-page","data-page-id":e.pageId,slide:e.slide,"page-width":h(u)[0],"page-height":h(u)[1],style:o({width:`${S.value}px`})},null,8,["data-page-id","slide","page-width","page-height","style"]))),128))]))],34))}}),[["__scopeId","data-v-2545fa61"]]))}}});
|