Merge pull request #596 from zanllp/fix/resolve-parsing-error
Resolve parsing issue causing errorspull/598/head
commit
664fa1bdef
|
|
@ -13,8 +13,8 @@ Promise.resolve().then(async () => {
|
||||||
<link rel="icon" href="/favicon.ico" />
|
<link rel="icon" href="/favicon.ico" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Infinite Image Browsing</title>
|
<title>Infinite Image Browsing</title>
|
||||||
<script type="module" crossorigin src="/infinite_image_browsing/fe-static/assets/index-1dba0a34.js"></script>
|
<script type="module" crossorigin src="/infinite_image_browsing/fe-static/assets/index-e900ad8e.js"></script>
|
||||||
<link rel="stylesheet" href="/infinite_image_browsing/fe-static/assets/index-d284a60a.css">
|
<link rel="stylesheet" href="/infinite_image_browsing/fe-static/assets/index-f6de8b10.css">
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,7 @@ def backup_db_file(db_file_path):
|
||||||
|
|
||||||
if not os.path.exists(db_file_path):
|
if not os.path.exists(db_file_path):
|
||||||
return
|
return
|
||||||
max_backup_count = int(os.environ.get('IIB_DB_FILE_BACKUP_MAX', '20'))
|
max_backup_count = int(os.environ.get('IIB_DB_FILE_BACKUP_MAX', '16'))
|
||||||
if max_backup_count < 1:
|
if max_backup_count < 1:
|
||||||
return
|
return
|
||||||
backup_folder = os.path.join(cwd,'iib_db_backup')
|
backup_folder = os.path.join(cwd,'iib_db_backup')
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1 @@
|
||||||
|
import{d as a,o as t,k as s,c as n,cd as _,q as o}from"./index-e900ad8e.js";const c={class:"img-sli-container"},i=a({__name:"ImgSliPagePane",props:{paneIdx:{},tabIdx:{},left:{},right:{}},setup(l){return(e,r)=>(t(),s("div",c,[n(_,{left:e.left,right:e.right},null,8,["left","right"])]))}});const d=o(i,[["__scopeId","data-v-ae3fb9a8"]]);export{d as default};
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
.img-sli-container[data-v-ec71de83]{position:relative;overflow-y:auto;height:calc(100vh - 40px)}
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
import{d as t,o as a,k as s,c as n,cd as _,q as o}from"./index-1dba0a34.js";const c={class:"img-sli-container"},i=t({__name:"ImgSliPagePane",props:{paneIdx:{},tabIdx:{},left:{},right:{}},setup(l){return(e,r)=>(a(),s("div",c,[n(_,{left:e.left,right:e.right},null,8,["left","right"])]))}});const p=o(i,[["__scopeId","data-v-ec71de83"]]);export{p as default};
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
.img-sli-container[data-v-ae3fb9a8]{position:relative;overflow-y:auto;height:calc(100vh - 40px)}
|
||||||
|
|
@ -1 +1 @@
|
||||||
import{d as se,s as ne,a3 as oe,r as ie,o as u,k as I,c as s,B as e,A as n,E as R,l as d,G as ae,t as a,m as p,z as V,Q as de,p as k,R as D,U as re,V as ce,X as z,am as ue,an as me,bD as pe,q as ge}from"./index-1dba0a34.js";import{L as ve,R as fe,f as Ie,M as ke,S as _e}from"./MultiSelectKeep-e434457c.js";import{g as he,h as Ce,F as we}from"./FileItem-18a129ce.js";import{c as Se,u as xe}from"./hook-9f3a8988.js";import{o as be}from"./functionalCallableComp-c6ea0d31.js";import"./index-972d384a.js";import"./index-595f5599.js";const Me=r=>(ue("data-v-183ddb50"),r=r(),me(),r),ye={class:"hint"},Ae={class:"action-bar"},Te=Me(()=>d("div",{style:{padding:"16px 0 512px"}},null,-1)),$e={key:1},Fe={class:"no-res-hint"},Re={class:"hint"},Ve={key:2,class:"preview-switch"},De=se({__name:"MatchedImageGrid",props:{tabIdx:{},paneIdx:{},selectedTagIds:{},id:{}},setup(r){const _=r,g=Se(l=>pe(_.selectedTagIds,l)),{queue:B,images:i,onContextMenuClickU:h,stackViewEl:G,previewIdx:c,previewing:C,onPreviewVisibleChange:E,previewImgMove:w,canPreview:S,itemSize:x,gridItems:N,showGenInfo:m,imageGenInfo:b,q:U,multiSelectedIdxs:v,onFileItemClick:J,scroller:M,showMenuIdx:f,onFileDragStart:L,onFileDragEnd:P,cellWidth:q,onScroll:y,saveAllFileAsJson:K,saveLoadedFileAsJson:O}=xe(g);ne(()=>_.selectedTagIds,async()=>{var l;await g.reset(),await oe(),(l=M.value)==null||l.scrollToItem(0),y()},{immediate:!0});const Q=ie(),{onClearAllSelected:W,onSelectAll:X,onReverseSelect:j}=he();return(l,t)=>{const H=ke,Y=re,Z=ce,A=z,ee=z,te=_e;return u(),I("div",{class:"container",ref_key:"stackViewEl",ref:G},[s(H,{show:!!e(v).length||e(Q).keepMultiSelect,onClearAllSelected:e(W),onSelectAll:e(X),onReverseSelect:e(j)},null,8,["show","onClearAllSelected","onSelectAll","onReverseSelect"]),s(te,{size:"large",spinning:!e(B).isIdle},{default:n(()=>{var T,$;return[s(Z,{visible:e(m),"onUpdate:visible":t[1]||(t[1]=o=>R(m)?m.value=o:null),width:"70vw","mask-closable":"",onOk:t[2]||(t[2]=o=>m.value=!1)},{cancelText:n(()=>[]),default:n(()=>[s(Y,{active:"",loading:!e(U).isIdle},{default:n(()=>[d("div",{style:{width:"100%","word-break":"break-all","white-space":"pre-line","max-height":"70vh",overflow:"auto"},onDblclick:t[0]||(t[0]=o=>e(ae)(e(b)))},[d("div",ye,a(l.$t("doubleClickToCopy")),1),p(" "+a(e(b)),1)],32)]),_:1},8,["loading"])]),_:1},8,["visible"]),d("div",Ae,[s(A,{onClick:e(O)},{default:n(()=>[p(a(l.$t("saveLoadedImageAsJson")),1)]),_:1},8,["onClick"]),s(A,{onClick:e(K)},{default:n(()=>[p(a(l.$t("saveAllAsJson")),1)]),_:1},8,["onClick"])]),(T=e(i))!=null&&T.length?(u(),V(e(Ce),{key:0,ref_key:"scroller",ref:M,class:"file-list",items:e(i),"item-size":e(x).first,"key-field":"fullpath","item-secondary-size":e(x).second,gridItems:e(N),onScroll:e(y)},{after:n(()=>[Te]),default:n(({item:o,index:F})=>[s(we,{idx:F,file:o,"cell-width":e(q),"show-menu-idx":e(f),"onUpdate:showMenuIdx":t[3]||(t[3]=le=>R(f)?f.value=le:null),onDragstart:e(L),onDragend:e(P),onFileItemClick:e(J),"full-screen-preview-image-url":e(i)[e(c)]?e(de)(e(i)[e(c)]):"",selected:e(v).includes(F),onContextMenuClick:e(h),onPreviewVisibleChange:e(E),"is-selected-mutil-files":e(v).length>1},null,8,["idx","file","cell-width","show-menu-idx","onDragstart","onDragend","onFileItemClick","full-screen-preview-image-url","selected","onContextMenuClick","onPreviewVisibleChange","is-selected-mutil-files"])]),_:1},8,["items","item-size","item-secondary-size","gridItems","onScroll"])):e(g).load&&l.selectedTagIds.and_tags.length===1&&!(($=l.selectedTagIds.folder_paths_str)!=null&&$.trim())?(u(),I("div",$e,[d("div",Fe,[d("p",Re,a(l.$t("tagSearchNoResultsMessage")),1),s(ee,{onClick:t[4]||(t[4]=o=>e(be)()),type:"primary"},{default:n(()=>[p(a(l.$t("rebuildImageIndex")),1)]),_:1})])])):k("",!0),e(C)?(u(),I("div",Ve,[s(e(ve),{onClick:t[5]||(t[5]=o=>e(w)("prev")),class:D({disable:!e(S)("prev")})},null,8,["class"]),s(e(fe),{onClick:t[6]||(t[6]=o=>e(w)("next")),class:D({disable:!e(S)("next")})},null,8,["class"])])):k("",!0)]}),_:1},8,["spinning"]),e(C)&&e(i)&&e(i)[e(c)]?(u(),V(Ie,{key:0,file:e(i)[e(c)],idx:e(c),onContextMenuClick:e(h)},null,8,["file","idx","onContextMenuClick"])):k("",!0)],512)}}});const Le=ge(De,[["__scopeId","data-v-183ddb50"]]);export{Le as default};
|
import{d as se,s as ne,a3 as oe,r as ie,o as u,k as I,c as s,B as e,A as n,E as R,l as d,G as ae,t as a,m as p,z as V,Q as de,p as k,R as D,U as re,V as ce,X as z,am as ue,an as me,bD as pe,q as ge}from"./index-e900ad8e.js";import{L as ve,R as fe,f as Ie,M as ke,S as _e}from"./MultiSelectKeep-db10e85f.js";import{g as he,h as Ce,F as we}from"./FileItem-8ded4a35.js";import{c as Se,u as xe}from"./hook-b775db6d.js";import{o as be}from"./functionalCallableComp-c0d6c0f7.js";import"./index-7d66b69f.js";import"./index-ed55848e.js";const Me=r=>(ue("data-v-479efe51"),r=r(),me(),r),ye={class:"hint"},Ae={class:"action-bar"},Te=Me(()=>d("div",{style:{padding:"16px 0 512px"}},null,-1)),$e={key:1},Fe={class:"no-res-hint"},Re={class:"hint"},Ve={key:2,class:"preview-switch"},De=se({__name:"MatchedImageGrid",props:{tabIdx:{},paneIdx:{},selectedTagIds:{},id:{}},setup(r){const _=r,g=Se(l=>pe(_.selectedTagIds,l)),{queue:B,images:i,onContextMenuClickU:h,stackViewEl:G,previewIdx:c,previewing:C,onPreviewVisibleChange:E,previewImgMove:w,canPreview:S,itemSize:x,gridItems:N,showGenInfo:m,imageGenInfo:b,q:U,multiSelectedIdxs:v,onFileItemClick:J,scroller:M,showMenuIdx:f,onFileDragStart:L,onFileDragEnd:P,cellWidth:q,onScroll:y,saveAllFileAsJson:K,saveLoadedFileAsJson:O}=xe(g);ne(()=>_.selectedTagIds,async()=>{var l;await g.reset(),await oe(),(l=M.value)==null||l.scrollToItem(0),y()},{immediate:!0});const Q=ie(),{onClearAllSelected:W,onSelectAll:X,onReverseSelect:j}=he();return(l,t)=>{const H=ke,Y=re,Z=ce,A=z,ee=z,te=_e;return u(),I("div",{class:"container",ref_key:"stackViewEl",ref:G},[s(H,{show:!!e(v).length||e(Q).keepMultiSelect,onClearAllSelected:e(W),onSelectAll:e(X),onReverseSelect:e(j)},null,8,["show","onClearAllSelected","onSelectAll","onReverseSelect"]),s(te,{size:"large",spinning:!e(B).isIdle},{default:n(()=>{var T,$;return[s(Z,{visible:e(m),"onUpdate:visible":t[1]||(t[1]=o=>R(m)?m.value=o:null),width:"70vw","mask-closable":"",onOk:t[2]||(t[2]=o=>m.value=!1)},{cancelText:n(()=>[]),default:n(()=>[s(Y,{active:"",loading:!e(U).isIdle},{default:n(()=>[d("div",{style:{width:"100%","word-break":"break-all","white-space":"pre-line","max-height":"70vh",overflow:"auto"},onDblclick:t[0]||(t[0]=o=>e(ae)(e(b)))},[d("div",ye,a(l.$t("doubleClickToCopy")),1),p(" "+a(e(b)),1)],32)]),_:1},8,["loading"])]),_:1},8,["visible"]),d("div",Ae,[s(A,{onClick:e(O)},{default:n(()=>[p(a(l.$t("saveLoadedImageAsJson")),1)]),_:1},8,["onClick"]),s(A,{onClick:e(K)},{default:n(()=>[p(a(l.$t("saveAllAsJson")),1)]),_:1},8,["onClick"])]),(T=e(i))!=null&&T.length?(u(),V(e(Ce),{key:0,ref_key:"scroller",ref:M,class:"file-list",items:e(i),"item-size":e(x).first,"key-field":"fullpath","item-secondary-size":e(x).second,gridItems:e(N),onScroll:e(y)},{after:n(()=>[Te]),default:n(({item:o,index:F})=>[s(we,{idx:F,file:o,"cell-width":e(q),"show-menu-idx":e(f),"onUpdate:showMenuIdx":t[3]||(t[3]=le=>R(f)?f.value=le:null),onDragstart:e(L),onDragend:e(P),onFileItemClick:e(J),"full-screen-preview-image-url":e(i)[e(c)]?e(de)(e(i)[e(c)]):"",selected:e(v).includes(F),onContextMenuClick:e(h),onPreviewVisibleChange:e(E),"is-selected-mutil-files":e(v).length>1},null,8,["idx","file","cell-width","show-menu-idx","onDragstart","onDragend","onFileItemClick","full-screen-preview-image-url","selected","onContextMenuClick","onPreviewVisibleChange","is-selected-mutil-files"])]),_:1},8,["items","item-size","item-secondary-size","gridItems","onScroll"])):e(g).load&&l.selectedTagIds.and_tags.length===1&&!(($=l.selectedTagIds.folder_paths_str)!=null&&$.trim())?(u(),I("div",$e,[d("div",Fe,[d("p",Re,a(l.$t("tagSearchNoResultsMessage")),1),s(ee,{onClick:t[4]||(t[4]=o=>e(be)()),type:"primary"},{default:n(()=>[p(a(l.$t("rebuildImageIndex")),1)]),_:1})])])):k("",!0),e(C)?(u(),I("div",Ve,[s(e(ve),{onClick:t[5]||(t[5]=o=>e(w)("prev")),class:D({disable:!e(S)("prev")})},null,8,["class"]),s(e(fe),{onClick:t[6]||(t[6]=o=>e(w)("next")),class:D({disable:!e(S)("next")})},null,8,["class"])])):k("",!0)]}),_:1},8,["spinning"]),e(C)&&e(i)&&e(i)[e(c)]?(u(),V(Ie,{key:0,file:e(i)[e(c)],idx:e(c),onContextMenuClick:e(h)},null,8,["file","idx","onContextMenuClick"])):k("",!0)],512)}}});const Le=ge(De,[["__scopeId","data-v-479efe51"]]);export{Le as default};
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
.preview-switch[data-v-183ddb50]{position:fixed;top:0;bottom:0;left:0;right:0;display:flex;align-items:center;justify-content:space-between;z-index:11111;pointer-events:none}.preview-switch>*[data-v-183ddb50]{color:#fff;margin:16px;font-size:4em;pointer-events:all;cursor:pointer}.preview-switch>*.disable[data-v-183ddb50]{opacity:0;pointer-events:none;cursor:none}.container[data-v-183ddb50]{background:var(--zp-secondary-background);position:relative}.container .action-bar[data-v-183ddb50]{display:flex;align-items:center;user-select:none;gap:4px;padding:4px}.container .action-bar>*[data-v-183ddb50]{flex-wrap:wrap}.container .file-list[data-v-183ddb50]{list-style:none;padding:8px;overflow:auto;height:calc(var(--pane-max-height) - 40px);width:100%}.container .no-res-hint[data-v-183ddb50]{height:var(--pane-max-height);display:flex;align-items:center;flex-direction:column;justify-content:center}.container .no-res-hint .hint[data-v-183ddb50]{font-size:1.6em;margin-bottom:2em;text-align:center}
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
.preview-switch[data-v-479efe51]{position:fixed;top:0;bottom:0;left:0;right:0;display:flex;align-items:center;justify-content:space-between;z-index:11111;pointer-events:none}.preview-switch>*[data-v-479efe51]{color:#fff;margin:16px;font-size:4em;pointer-events:all;cursor:pointer}.preview-switch>*.disable[data-v-479efe51]{opacity:0;pointer-events:none;cursor:none}.container[data-v-479efe51]{background:var(--zp-secondary-background);position:relative}.container .action-bar[data-v-479efe51]{display:flex;align-items:center;user-select:none;gap:4px;padding:4px}.container .action-bar>*[data-v-479efe51]{flex-wrap:wrap}.container .file-list[data-v-479efe51]{list-style:none;padding:8px;overflow:auto;height:calc(var(--pane-max-height) - 40px);width:100%}.container .no-res-hint[data-v-479efe51]{height:var(--pane-max-height);display:flex;align-items:center;flex-direction:column;justify-content:center}.container .no-res-hint .hint[data-v-479efe51]{font-size:1.6em;margin-bottom:2em;text-align:center}
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1 @@
|
||||||
|
[data-v-ecedc00a] .float-panel{position:fixed}.regex-icon[data-v-ecedc00a]{user-select:none;padding:4px;margin:0 4px;cursor:pointer;border:1px solid var(--zp-border);border-radius:4px}.regex-icon img[data-v-ecedc00a]{height:1.5em}.regex-icon[data-v-ecedc00a]:hover{background:var(--zp-border)}.regex-icon.selected[data-v-ecedc00a]{background:var(--primary-color-1);border:1px solid var(--primary-color)}.search-bar[data-v-ecedc00a]{padding:8px 8px 0;display:flex}.search-bar.last[data-v-ecedc00a]{padding-bottom:8px}.search-bar .form-name[data-v-ecedc00a]{flex-shrink:0;padding:4px 8px}.search-bar .actions>*[data-v-ecedc00a]{margin-right:4px}.preview-switch[data-v-ecedc00a]{position:fixed;top:0;bottom:0;left:0;right:0;display:flex;align-items:center;justify-content:space-between;z-index:11111;pointer-events:none}.preview-switch>*[data-v-ecedc00a]{color:#fff;margin:16px;font-size:4em;pointer-events:all;cursor:pointer}.preview-switch>*.disable[data-v-ecedc00a]{opacity:0;pointer-events:none;cursor:none}.container[data-v-ecedc00a]{background:var(--zp-secondary-background);position:relative}.container .file-list[data-v-ecedc00a]{list-style:none;padding:8px;height:100%;overflow:auto;height:var(--pane-max-height);width:100%}
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
[data-v-39554c4f] .float-panel{position:fixed}.regex-icon[data-v-39554c4f]{user-select:none;padding:4px;margin:0 4px;cursor:pointer;border:1px solid var(--zp-border);border-radius:4px}.regex-icon img[data-v-39554c4f]{height:1.5em}.regex-icon[data-v-39554c4f]:hover{background:var(--zp-border)}.regex-icon.selected[data-v-39554c4f]{background:var(--primary-color-1);border:1px solid var(--primary-color)}.search-bar[data-v-39554c4f]{padding:8px 8px 0;display:flex}.search-bar.last[data-v-39554c4f]{padding-bottom:8px}.search-bar .form-name[data-v-39554c4f]{flex-shrink:0;padding:4px 8px}.search-bar .actions>*[data-v-39554c4f]{margin-right:4px}.preview-switch[data-v-39554c4f]{position:fixed;top:0;bottom:0;left:0;right:0;display:flex;align-items:center;justify-content:space-between;z-index:11111;pointer-events:none}.preview-switch>*[data-v-39554c4f]{color:#fff;margin:16px;font-size:4em;pointer-events:all;cursor:pointer}.preview-switch>*.disable[data-v-39554c4f]{opacity:0;pointer-events:none;cursor:none}.container[data-v-39554c4f]{background:var(--zp-secondary-background);position:relative}.container .file-list[data-v-39554c4f]{list-style:none;padding:8px;height:100%;overflow:auto;height:var(--pane-max-height);width:100%}
|
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1 @@
|
||||||
|
.container[data-v-aab31da2]{background:var(--zp-secondary-background);height:100%;overflow:auto;display:flex;flex-direction:column}.container .actions-panel[data-v-aab31da2]{padding:8px;background-color:var(--zp-primary-background)}.container .file-list[data-v-aab31da2]{flex:1;list-style:none;padding:8px;height:var(--pane-max-height);width:100%}.container .file-list .hint[data-v-aab31da2]{text-align:center;font-size:2em;padding:30vh 128px 0}
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
import{d as v,ce as C,bO as I,o as i,k as _,l as f,c,A as r,m as h,t as d,B as e,z,Q as B,cf as F,cg as x,X as $,q as R}from"./index-1dba0a34.js";import{u as S,b as A,k as E,F as V,h as T}from"./FileItem-18a129ce.js";import"./functionalCallableComp-c6ea0d31.js";import"./index-595f5599.js";import"./index-972d384a.js";const L={class:"actions-panel actions"},N={key:0,class:"file-list"},U={class:"hint"},q=v({__name:"batchDownload",props:{tabIdx:{},paneIdx:{},id:{}},setup(H){const{stackViewEl:k}=S().toRefs(),{itemSize:p,gridItems:w,cellWidth:y}=A(),n=E(),{selectdFiles:l}=C(n),m=I(),D=async t=>{const s=F(t);s&&n.addFiles(s.nodes)},b=async()=>{m.pushAction(async()=>{const t=await x.value.post("/zip",{paths:l.value.map(a=>a.fullpath)},{responseType:"blob"}),s=window.URL.createObjectURL(new Blob([t.data])),o=document.createElement("a");o.href=s,o.setAttribute("download",`iib_${new Date().toLocaleString()}.zip`),document.body.appendChild(o),o.click()})},g=t=>{l.value.splice(t,1)};return(t,s)=>{const o=$;return i(),_("div",{class:"container",ref_key:"stackViewEl",ref:k,onDrop:D},[f("div",L,[c(o,{onClick:s[0]||(s[0]=a=>e(n).selectdFiles=[])},{default:r(()=>[h(d(t.$t("clear")),1)]),_:1}),c(o,{onClick:b,type:"primary",loading:!e(m).isIdle},{default:r(()=>[h(d(t.$t("zipDownload")),1)]),_:1},8,["loading"])]),e(l).length?(i(),z(e(T),{key:1,ref:"scroller",class:"file-list",items:e(l).slice(),"item-size":e(p).first,"key-field":"fullpath","item-secondary-size":e(p).second,gridItems:e(w)},{default:r(({item:a,index:u})=>[c(V,{idx:u,file:a,"cell-width":e(y),"enable-close-icon":"",onCloseIconClick:O=>g(u),"full-screen-preview-image-url":e(B)(a),"enable-right-click-menu":!1},null,8,["idx","file","cell-width","onCloseIconClick","full-screen-preview-image-url"])]),_:1},8,["items","item-size","item-secondary-size","gridItems"])):(i(),_("div",N,[f("p",U,d(t.$t("batchDownloaDDragAndDropHint")),1)]))],544)}}});const J=R(q,[["__scopeId","data-v-16c4c9dd"]]);export{J as default};
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
.container[data-v-16c4c9dd]{background:var(--zp-secondary-background);height:100%;overflow:auto;display:flex;flex-direction:column}.container .actions-panel[data-v-16c4c9dd]{padding:8px;background-color:var(--zp-primary-background)}.container .file-list[data-v-16c4c9dd]{flex:1;list-style:none;padding:8px;height:var(--pane-max-height);width:100%}.container .file-list .hint[data-v-16c4c9dd]{text-align:center;font-size:2em;padding:30vh 128px 0}
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
import{d as v,ce as C,bO as I,o as i,k as _,l as f,c,A as r,m as h,t as d,B as e,z,Q as B,cf as F,cg as x,X as $,q as R}from"./index-e900ad8e.js";import{u as S,b as A,k as E,F as V,h as T}from"./FileItem-8ded4a35.js";import"./functionalCallableComp-c0d6c0f7.js";import"./index-ed55848e.js";import"./index-7d66b69f.js";const L={class:"actions-panel actions"},N={key:0,class:"file-list"},U={class:"hint"},q=v({__name:"batchDownload",props:{tabIdx:{},paneIdx:{},id:{}},setup(H){const{stackViewEl:k}=S().toRefs(),{itemSize:p,gridItems:w,cellWidth:b}=A(),n=E(),{selectdFiles:l}=C(n),m=I(),y=async t=>{const s=F(t);s&&n.addFiles(s.nodes)},D=async()=>{m.pushAction(async()=>{const t=await x.value.post("/zip",{paths:l.value.map(o=>o.fullpath)},{responseType:"blob"}),s=window.URL.createObjectURL(new Blob([t.data])),a=document.createElement("a");a.href=s,a.setAttribute("download",`iib_${new Date().toLocaleString()}.zip`),document.body.appendChild(a),a.click()})},g=t=>{l.value.splice(t,1)};return(t,s)=>{const a=$;return i(),_("div",{class:"container",ref_key:"stackViewEl",ref:k,onDrop:y},[f("div",L,[c(a,{onClick:s[0]||(s[0]=o=>e(n).selectdFiles=[])},{default:r(()=>[h(d(t.$t("clear")),1)]),_:1}),c(a,{onClick:D,type:"primary",loading:!e(m).isIdle},{default:r(()=>[h(d(t.$t("zipDownload")),1)]),_:1},8,["loading"])]),e(l).length?(i(),z(e(T),{key:1,ref:"scroller",class:"file-list",items:e(l).slice(),"item-size":e(p).first,"key-field":"fullpath","item-secondary-size":e(p).second,gridItems:e(w)},{default:r(({item:o,index:u})=>[c(V,{idx:u,file:o,"cell-width":e(b),"enable-close-icon":"",onCloseIconClick:O=>g(u),"full-screen-preview-image-url":e(B)(o),"enable-right-click-menu":!1},null,8,["idx","file","cell-width","onCloseIconClick","full-screen-preview-image-url"])]),_:1},8,["items","item-size","item-secondary-size","gridItems"])):(i(),_("div",N,[f("p",U,d(t.$t("batchDownloaDDragAndDropHint")),1)]))],544)}}});const J=R(q,[["__scopeId","data-v-aab31da2"]]);export{J as default};
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1 +1 @@
|
||||||
@keyframes antCheckboxEffect{0%{transform:scale(1);opacity:.5}to{transform:scale(1.6);opacity:0}}.ant-checkbox{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;top:.2em;line-height:1;white-space:nowrap;outline:none;cursor:pointer}.ant-checkbox-wrapper:hover .ant-checkbox-inner,.ant-checkbox:hover .ant-checkbox-inner,.ant-checkbox-input:focus+.ant-checkbox-inner{border-color:#d03f0a}.ant-checkbox-checked:after{position:absolute;top:0;left:0;width:100%;height:100%;border:1px solid #d03f0a;border-radius:2px;visibility:hidden;animation:antCheckboxEffect .36s ease-in-out;animation-fill-mode:backwards;content:""}.ant-checkbox:hover:after,.ant-checkbox-wrapper:hover .ant-checkbox:after{visibility:visible}.ant-checkbox-inner{position:relative;top:0;left:0;display:block;width:16px;height:16px;direction:ltr;background-color:#fff;border:1px solid #d9d9d9;border-radius:2px;border-collapse:separate;transition:all .3s}.ant-checkbox-inner:after{position:absolute;top:50%;left:21.5%;display:table;width:5.71428571px;height:9.14285714px;border:2px solid #fff;border-top:0;border-left:0;transform:rotate(45deg) scale(0) translate(-50%,-50%);opacity:0;transition:all .1s cubic-bezier(.71,-.46,.88,.6),opacity .1s;content:" "}.ant-checkbox-input{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;width:100%;height:100%;cursor:pointer;opacity:0}.ant-checkbox-checked .ant-checkbox-inner:after{position:absolute;display:table;border:2px solid #fff;border-top:0;border-left:0;transform:rotate(45deg) scale(1) translate(-50%,-50%);opacity:1;transition:all .2s cubic-bezier(.12,.4,.29,1.46) .1s;content:" "}.ant-checkbox-checked .ant-checkbox-inner{background-color:#d03f0a;border-color:#d03f0a}.ant-checkbox-disabled{cursor:not-allowed}.ant-checkbox-disabled.ant-checkbox-checked .ant-checkbox-inner:after{border-color:#00000040;animation-name:none}.ant-checkbox-disabled .ant-checkbox-input{cursor:not-allowed;pointer-events:none}.ant-checkbox-disabled .ant-checkbox-inner{background-color:#f5f5f5;border-color:#d9d9d9!important}.ant-checkbox-disabled .ant-checkbox-inner:after{border-color:#f5f5f5;border-collapse:separate;animation-name:none}.ant-checkbox-disabled+span{color:#00000040;cursor:not-allowed}.ant-checkbox-disabled:hover:after,.ant-checkbox-wrapper:hover .ant-checkbox-disabled:after{visibility:hidden}.ant-checkbox-wrapper{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";display:inline-flex;align-items:baseline;line-height:unset;cursor:pointer}.ant-checkbox-wrapper:after{display:inline-block;width:0;overflow:hidden;content:" "}.ant-checkbox-wrapper.ant-checkbox-wrapper-disabled{cursor:not-allowed}.ant-checkbox-wrapper+.ant-checkbox-wrapper{margin-left:8px}.ant-checkbox+span{padding-right:8px;padding-left:8px}.ant-checkbox-group{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";display:inline-block}.ant-checkbox-group-item{margin-right:8px}.ant-checkbox-group-item:last-child{margin-right:0}.ant-checkbox-group-item+.ant-checkbox-group-item{margin-left:0}.ant-checkbox-indeterminate .ant-checkbox-inner{background-color:#fff;border-color:#d9d9d9}.ant-checkbox-indeterminate .ant-checkbox-inner:after{top:50%;left:50%;width:8px;height:8px;background-color:#d03f0a;border:0;transform:translate(-50%,-50%) scale(1);opacity:1;content:" "}.ant-checkbox-indeterminate.ant-checkbox-disabled .ant-checkbox-inner:after{background-color:#00000040;border-color:#00000040}.ant-checkbox-rtl{direction:rtl}.ant-checkbox-group-rtl .ant-checkbox-group-item{margin-right:0;margin-left:8px}.ant-checkbox-group-rtl .ant-checkbox-group-item:last-child{margin-left:0!important}.ant-checkbox-group-rtl .ant-checkbox-group-item+.ant-checkbox-group-item{margin-left:8px}.panel[data-v-273b24fb]{padding:8px;margin:16px;border-radius:8px;background:var(--zp-primary-background);overflow:auto;height:calc(100% - 32px)}.panel[data-v-273b24fb]>:not(:first-child){margin-left:16px}.lang-select-wrap[data-v-273b24fb]{width:128px;display:inline-block;padding-right:16px}h2[data-v-273b24fb]{margin:64px 0 16px;font-weight:700}.row[data-v-273b24fb]{margin-top:16px;padding:0 16px}.col[data-v-273b24fb]{display:flex}.clear-btn[data-v-273b24fb]{margin-left:16px}
|
@keyframes antCheckboxEffect{0%{transform:scale(1);opacity:.5}to{transform:scale(1.6);opacity:0}}.ant-checkbox{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;top:.2em;line-height:1;white-space:nowrap;outline:none;cursor:pointer}.ant-checkbox-wrapper:hover .ant-checkbox-inner,.ant-checkbox:hover .ant-checkbox-inner,.ant-checkbox-input:focus+.ant-checkbox-inner{border-color:#d03f0a}.ant-checkbox-checked:after{position:absolute;top:0;left:0;width:100%;height:100%;border:1px solid #d03f0a;border-radius:2px;visibility:hidden;animation:antCheckboxEffect .36s ease-in-out;animation-fill-mode:backwards;content:""}.ant-checkbox:hover:after,.ant-checkbox-wrapper:hover .ant-checkbox:after{visibility:visible}.ant-checkbox-inner{position:relative;top:0;left:0;display:block;width:16px;height:16px;direction:ltr;background-color:#fff;border:1px solid #d9d9d9;border-radius:2px;border-collapse:separate;transition:all .3s}.ant-checkbox-inner:after{position:absolute;top:50%;left:21.5%;display:table;width:5.71428571px;height:9.14285714px;border:2px solid #fff;border-top:0;border-left:0;transform:rotate(45deg) scale(0) translate(-50%,-50%);opacity:0;transition:all .1s cubic-bezier(.71,-.46,.88,.6),opacity .1s;content:" "}.ant-checkbox-input{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;width:100%;height:100%;cursor:pointer;opacity:0}.ant-checkbox-checked .ant-checkbox-inner:after{position:absolute;display:table;border:2px solid #fff;border-top:0;border-left:0;transform:rotate(45deg) scale(1) translate(-50%,-50%);opacity:1;transition:all .2s cubic-bezier(.12,.4,.29,1.46) .1s;content:" "}.ant-checkbox-checked .ant-checkbox-inner{background-color:#d03f0a;border-color:#d03f0a}.ant-checkbox-disabled{cursor:not-allowed}.ant-checkbox-disabled.ant-checkbox-checked .ant-checkbox-inner:after{border-color:#00000040;animation-name:none}.ant-checkbox-disabled .ant-checkbox-input{cursor:not-allowed;pointer-events:none}.ant-checkbox-disabled .ant-checkbox-inner{background-color:#f5f5f5;border-color:#d9d9d9!important}.ant-checkbox-disabled .ant-checkbox-inner:after{border-color:#f5f5f5;border-collapse:separate;animation-name:none}.ant-checkbox-disabled+span{color:#00000040;cursor:not-allowed}.ant-checkbox-disabled:hover:after,.ant-checkbox-wrapper:hover .ant-checkbox-disabled:after{visibility:hidden}.ant-checkbox-wrapper{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";display:inline-flex;align-items:baseline;line-height:unset;cursor:pointer}.ant-checkbox-wrapper:after{display:inline-block;width:0;overflow:hidden;content:" "}.ant-checkbox-wrapper.ant-checkbox-wrapper-disabled{cursor:not-allowed}.ant-checkbox-wrapper+.ant-checkbox-wrapper{margin-left:8px}.ant-checkbox+span{padding-right:8px;padding-left:8px}.ant-checkbox-group{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";display:inline-block}.ant-checkbox-group-item{margin-right:8px}.ant-checkbox-group-item:last-child{margin-right:0}.ant-checkbox-group-item+.ant-checkbox-group-item{margin-left:0}.ant-checkbox-indeterminate .ant-checkbox-inner{background-color:#fff;border-color:#d9d9d9}.ant-checkbox-indeterminate .ant-checkbox-inner:after{top:50%;left:50%;width:8px;height:8px;background-color:#d03f0a;border:0;transform:translate(-50%,-50%) scale(1);opacity:1;content:" "}.ant-checkbox-indeterminate.ant-checkbox-disabled .ant-checkbox-inner:after{background-color:#00000040;border-color:#00000040}.ant-checkbox-rtl{direction:rtl}.ant-checkbox-group-rtl .ant-checkbox-group-item{margin-right:0;margin-left:8px}.ant-checkbox-group-rtl .ant-checkbox-group-item:last-child{margin-left:0!important}.ant-checkbox-group-rtl .ant-checkbox-group-item+.ant-checkbox-group-item{margin-left:8px}.panel[data-v-e5d3d829]{padding:8px;margin:16px;border-radius:8px;background:var(--zp-primary-background);overflow:auto;height:calc(100% - 32px)}.panel[data-v-e5d3d829]>:not(:first-child){margin-left:16px}.lang-select-wrap[data-v-e5d3d829]{width:128px;display:inline-block;padding-right:16px}h2[data-v-e5d3d829]{margin:64px 0 16px;font-weight:700}.row[data-v-e5d3d829]{margin-top:16px;padding:0 16px}.col[data-v-e5d3d829]{display:flex}.clear-btn[data-v-e5d3d829]{margin-left:16px}
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -1 +0,0 @@
|
||||||
import{u as w,b as k,F as y,h}from"./FileItem-18a129ce.js";import{d as x,r as b,c6 as F,v as D,aS as I,aW as C,o as E,k as S,c as n,A as V,B as e,Q as z,cf as B,ch as A,q as R}from"./index-1dba0a34.js";import"./functionalCallableComp-c6ea0d31.js";import"./index-595f5599.js";import"./index-972d384a.js";const q=x({__name:"gridView",props:{tabIdx:{},paneIdx:{},id:{},removable:{type:Boolean},allowDragAndDrop:{type:Boolean},files:{},paneKey:{}},setup(p){const o=p,d=b(),{stackViewEl:m}=w().toRefs(),{itemSize:i,gridItems:u,cellWidth:f}=k(),g=F(),s=D(o.files??[]),_=async a=>{const l=B(a);o.allowDragAndDrop&&l&&(s.value=A([...s.value,...l.nodes]))},v=a=>{s.value.splice(a,1)};return I(()=>{d.pageFuncExportMap.set(o.paneKey,{getFiles:()=>C(s.value),setFiles:a=>s.value=a})}),(a,l)=>(E(),S("div",{class:"container",ref_key:"stackViewEl",ref:m,onDrop:_},[n(e(h),{ref:"scroller",class:"file-list",items:s.value.slice(),"item-size":e(i).first,"key-field":"fullpath","item-secondary-size":e(i).second,gridItems:e(u)},{default:V(({item:t,index:r})=>{var c;return[n(y,{idx:r,file:t,"cell-width":e(f),"enable-close-icon":o.removable,onCloseIconClick:K=>v(r),"full-screen-preview-image-url":e(z)(t),"extra-tags":(c=t==null?void 0:t.tags)==null?void 0:c.map(e(g).tagConvert),"enable-right-click-menu":!1},null,8,["idx","file","cell-width","enable-close-icon","onCloseIconClick","full-screen-preview-image-url","extra-tags"])]}),_:1},8,["items","item-size","item-secondary-size","gridItems"])],544))}});const M=R(q,[["__scopeId","data-v-0c31f6b2"]]);export{M as default};
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
.container[data-v-0c31f6b2]{background:var(--zp-secondary-background);height:100%;overflow:auto;display:flex;flex-direction:column}.container .actions-panel[data-v-0c31f6b2]{padding:8px;background-color:var(--zp-primary-background)}.container .file-list[data-v-0c31f6b2]{flex:1;list-style:none;padding:8px;height:var(--pane-max-height);width:100%}.container .file-list .hint[data-v-0c31f6b2]{text-align:center;font-size:2em;padding:30vh 128px 0}
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
import{u as w,b as k,F as y,h}from"./FileItem-8ded4a35.js";import{d as x,r as F,c6 as D,v as I,aS as b,aW as C,o as E,k as S,c,A as V,B as e,Q as z,cf as B,ch as A,q as R}from"./index-e900ad8e.js";import"./functionalCallableComp-c0d6c0f7.js";import"./index-ed55848e.js";import"./index-7d66b69f.js";const q=x({__name:"gridView",props:{tabIdx:{},paneIdx:{},id:{},removable:{type:Boolean},allowDragAndDrop:{type:Boolean},files:{},paneKey:{}},setup(p){const o=p,d=F(),{stackViewEl:m}=w().toRefs(),{itemSize:i,gridItems:u,cellWidth:f}=k(),g=D(),s=I(o.files??[]),_=async a=>{const l=B(a);o.allowDragAndDrop&&l&&(s.value=A([...s.value,...l.nodes]))},v=a=>{s.value.splice(a,1)};return b(()=>{d.pageFuncExportMap.set(o.paneKey,{getFiles:()=>C(s.value),setFiles:a=>s.value=a})}),(a,l)=>(E(),S("div",{class:"container",ref_key:"stackViewEl",ref:m,onDrop:_},[c(e(h),{ref:"scroller",class:"file-list",items:s.value.slice(),"item-size":e(i).first,"key-field":"fullpath","item-secondary-size":e(i).second,gridItems:e(u)},{default:V(({item:t,index:r})=>{var n;return[c(y,{idx:r,file:t,"cell-width":e(f),"enable-close-icon":o.removable,onCloseIconClick:K=>v(r),"full-screen-preview-image-url":e(z)(t),"extra-tags":(n=t==null?void 0:t.tags)==null?void 0:n.map(e(g).tagConvert),"enable-right-click-menu":!1},null,8,["idx","file","cell-width","enable-close-icon","onCloseIconClick","full-screen-preview-image-url","extra-tags"])]}),_:1},8,["items","item-size","item-secondary-size","gridItems"])],544))}});const M=R(q,[["__scopeId","data-v-f35f4802"]]);export{M as default};
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
.container[data-v-f35f4802]{background:var(--zp-secondary-background);height:100%;overflow:auto;display:flex;flex-direction:column}.container .actions-panel[data-v-f35f4802]{padding:8px;background-color:var(--zp-primary-background)}.container .file-list[data-v-f35f4802]{flex:1;list-style:none;padding:8px;height:var(--pane-max-height);width:100%}.container .file-list .hint[data-v-f35f4802]{text-align:center;font-size:2em;padding:30vh 128px 0}
|
||||||
|
|
@ -1 +1 @@
|
||||||
import{bd as F,v as g,c0 as q,c1 as A,aj as b,ag as D,bO as N,b3 as O,c2 as j}from"./index-1dba0a34.js";import{u as z,b as G,f as L,c as Q,d as H,e as T,i as U}from"./FileItem-18a129ce.js";let W=0;const B=()=>++W,K=(o,c,{dataUpdateStrategy:l="replace"}={})=>{const n=F([""]),u=g(!1),t=g(),a=g(!1);let f=g(-1);const v=new Set,w=e=>{var s;l==="replace"?t.value=e:l==="merge"&&(b((Array.isArray(t.value)||typeof t.value>"u")&&Array.isArray(e),"数据更新策略为合并时仅可用于值为数组的情况"),t.value=[...(s=t==null?void 0:t.value)!==null&&s!==void 0?s:[],...e])},d=e=>A(void 0,void 0,void 0,function*(){if(a.value||u.value&&typeof e>"u")return!1;a.value=!0;const s=B();f.value=s;try{let r;if(typeof e=="number"){if(r=n[e],typeof r!="string")return!1}else r=n[n.length-1];const m=yield o(r);if(v.has(s))return v.delete(s),!1;w(c(m));const i=m.cursor;if((e===n.length-1||typeof e!="number")&&(u.value=!i.has_next,i.has_next)){const p=i.next_cursor||i.next;b(typeof p=="string"),n.push(p)}}finally{f.value===s&&(a.value=!1)}return!0}),h=()=>{v.add(f.value),a.value=!1},S=(e=!1)=>A(void 0,void 0,void 0,function*(){const{refetch:s,force:r}=typeof e=="object"?e:{refetch:e};r&&h(),b(!a.value),n.splice(0,n.length,""),a.value=!1,t.value=void 0,u.value=!1,s&&(yield d())}),I=()=>({next:()=>A(void 0,void 0,void 0,function*(){if(a.value)throw new Error("不允许同时迭代");return{done:!(yield d()),value:t.value}})});return q({abort:h,load:u,next:d,res:t,loading:a,cursorStack:n,reset:S,[Symbol.asyncIterator]:I,iter:{[Symbol.asyncIterator]:I}})},Z=o=>F(K(o,c=>c.files,{dataUpdateStrategy:"merge"})),$=o=>{const c=F(new Set),l=D(()=>(o.res??[]).filter(y=>!c.has(y.fullpath))),n=N(),{stackViewEl:u,multiSelectedIdxs:t,stack:a,scroller:f}=z({images:l}).toRefs(),{itemSize:v,gridItems:w,cellWidth:d,onScroll:h}=G({fetchNext:()=>o.next()}),{showMenuIdx:S}=L(),{onFileDragStart:I,onFileDragEnd:e}=Q(),{showGenInfo:s,imageGenInfo:r,q:m,onContextMenuClick:i,onFileItemClick:p}=H({openNext:O}),{previewIdx:C,previewing:_,onPreviewVisibleChange:E,previewImgMove:M,canPreview:J}=T(),P=async(y,x,R)=>{a.value=[{curr:"",files:l.value}],await i(y,x,R)};U("removeFiles",async({paths:y})=>{y.forEach(x=>c.add(x))});const k=()=>{j(l.value)};return{images:l,scroller:f,queue:n,iter:o,onContextMenuClickU:P,stackViewEl:u,previewIdx:C,previewing:_,onPreviewVisibleChange:E,previewImgMove:M,canPreview:J,itemSize:v,gridItems:w,showGenInfo:s,imageGenInfo:r,q:m,onContextMenuClick:i,onFileItemClick:p,showMenuIdx:S,multiSelectedIdxs:t,onFileDragStart:I,onFileDragEnd:e,cellWidth:d,onScroll:h,saveLoadedFileAsJson:k,saveAllFileAsJson:async()=>{for(;!o.load;)await o.next();k()}}};export{Z as c,$ as u};
|
import{bd as F,v as g,c0 as q,c1 as A,aj as b,ag as D,bO as N,b3 as O,c2 as j}from"./index-e900ad8e.js";import{u as z,b as G,f as L,c as Q,d as H,e as T,i as U}from"./FileItem-8ded4a35.js";let W=0;const B=()=>++W,K=(o,c,{dataUpdateStrategy:l="replace"}={})=>{const n=F([""]),u=g(!1),t=g(),a=g(!1);let f=g(-1);const v=new Set,w=e=>{var s;l==="replace"?t.value=e:l==="merge"&&(b((Array.isArray(t.value)||typeof t.value>"u")&&Array.isArray(e),"数据更新策略为合并时仅可用于值为数组的情况"),t.value=[...(s=t==null?void 0:t.value)!==null&&s!==void 0?s:[],...e])},d=e=>A(void 0,void 0,void 0,function*(){if(a.value||u.value&&typeof e>"u")return!1;a.value=!0;const s=B();f.value=s;try{let r;if(typeof e=="number"){if(r=n[e],typeof r!="string")return!1}else r=n[n.length-1];const m=yield o(r);if(v.has(s))return v.delete(s),!1;w(c(m));const i=m.cursor;if((e===n.length-1||typeof e!="number")&&(u.value=!i.has_next,i.has_next)){const p=i.next_cursor||i.next;b(typeof p=="string"),n.push(p)}}finally{f.value===s&&(a.value=!1)}return!0}),h=()=>{v.add(f.value),a.value=!1},S=(e=!1)=>A(void 0,void 0,void 0,function*(){const{refetch:s,force:r}=typeof e=="object"?e:{refetch:e};r&&h(),b(!a.value),n.splice(0,n.length,""),a.value=!1,t.value=void 0,u.value=!1,s&&(yield d())}),I=()=>({next:()=>A(void 0,void 0,void 0,function*(){if(a.value)throw new Error("不允许同时迭代");return{done:!(yield d()),value:t.value}})});return q({abort:h,load:u,next:d,res:t,loading:a,cursorStack:n,reset:S,[Symbol.asyncIterator]:I,iter:{[Symbol.asyncIterator]:I}})},Z=o=>F(K(o,c=>c.files,{dataUpdateStrategy:"merge"})),$=o=>{const c=F(new Set),l=D(()=>(o.res??[]).filter(y=>!c.has(y.fullpath))),n=N(),{stackViewEl:u,multiSelectedIdxs:t,stack:a,scroller:f}=z({images:l}).toRefs(),{itemSize:v,gridItems:w,cellWidth:d,onScroll:h}=G({fetchNext:()=>o.next()}),{showMenuIdx:S}=L(),{onFileDragStart:I,onFileDragEnd:e}=Q(),{showGenInfo:s,imageGenInfo:r,q:m,onContextMenuClick:i,onFileItemClick:p}=H({openNext:O}),{previewIdx:C,previewing:_,onPreviewVisibleChange:E,previewImgMove:M,canPreview:J}=T(),P=async(y,x,R)=>{a.value=[{curr:"",files:l.value}],await i(y,x,R)};U("removeFiles",async({paths:y})=>{y.forEach(x=>c.add(x))});const k=()=>{j(l.value)};return{images:l,scroller:f,queue:n,iter:o,onContextMenuClickU:P,stackViewEl:u,previewIdx:C,previewing:_,onPreviewVisibleChange:E,previewImgMove:M,canPreview:J,itemSize:v,gridItems:w,showGenInfo:s,imageGenInfo:r,q:m,onContextMenuClick:i,onFileItemClick:p,showMenuIdx:S,multiSelectedIdxs:t,onFileDragStart:I,onFileDragEnd:e,cellWidth:d,onScroll:h,saveLoadedFileAsJson:k,saveAllFileAsJson:async()=>{for(;!o.load;)await o.next();k()}}};export{Z as c,$ as u};
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1 +1 @@
|
||||||
import{d as E,bg as $,v as f,s as M,_ as T,a as c,a0 as W,h as g,c as v,P as z}from"./index-1dba0a34.js";var G=["prefixCls","name","id","type","disabled","readonly","tabindex","autofocus","value","required"],H={prefixCls:String,name:String,id:String,type:String,defaultChecked:{type:[Boolean,Number],default:void 0},checked:{type:[Boolean,Number],default:void 0},disabled:Boolean,tabindex:{type:[Number,String]},readonly:Boolean,autofocus:Boolean,value:z.any,required:Boolean};const L=E({compatConfig:{MODE:3},name:"Checkbox",inheritAttrs:!1,props:$(H,{prefixCls:"rc-checkbox",type:"checkbox",defaultChecked:!1}),emits:["click","change"],setup:function(a,d){var t=d.attrs,h=d.emit,x=d.expose,o=f(a.checked===void 0?a.defaultChecked:a.checked),i=f();M(function(){return a.checked},function(){o.value=a.checked}),x({focus:function(){var e;(e=i.value)===null||e===void 0||e.focus()},blur:function(){var e;(e=i.value)===null||e===void 0||e.blur()}});var l=f(),m=function(e){if(!a.disabled){a.checked===void 0&&(o.value=e.target.checked),e.shiftKey=l.value;var r={target:c(c({},a),{},{checked:e.target.checked}),stopPropagation:function(){e.stopPropagation()},preventDefault:function(){e.preventDefault()},nativeEvent:e};a.checked!==void 0&&(i.value.checked=!!a.checked),h("change",r),l.value=!1}},C=function(e){h("click",e),l.value=e.shiftKey};return function(){var n,e=a.prefixCls,r=a.name,s=a.id,p=a.type,b=a.disabled,K=a.readonly,P=a.tabindex,B=a.autofocus,S=a.value,N=a.required,_=T(a,G),q=t.class,D=t.onFocus,j=t.onBlur,w=t.onKeydown,A=t.onKeypress,F=t.onKeyup,y=c(c({},_),t),O=Object.keys(y).reduce(function(k,u){return(u.substr(0,5)==="aria-"||u.substr(0,5)==="data-"||u==="role")&&(k[u]=y[u]),k},{}),R=W(e,q,(n={},g(n,"".concat(e,"-checked"),o.value),g(n,"".concat(e,"-disabled"),b),n)),V=c(c({name:r,id:s,type:p,readonly:K,disabled:b,tabindex:P,class:"".concat(e,"-input"),checked:!!o.value,autofocus:B,value:S},O),{},{onChange:m,onClick:C,onFocus:D,onBlur:j,onKeydown:w,onKeypress:A,onKeyup:F,required:N});return v("span",{class:R},[v("input",c({ref:i},V),null),v("span",{class:"".concat(e,"-inner")},null)])}}});export{L as V};
|
import{d as E,bg as $,v as f,s as M,_ as T,a as c,a0 as W,h as g,c as v,P as z}from"./index-e900ad8e.js";var G=["prefixCls","name","id","type","disabled","readonly","tabindex","autofocus","value","required"],H={prefixCls:String,name:String,id:String,type:String,defaultChecked:{type:[Boolean,Number],default:void 0},checked:{type:[Boolean,Number],default:void 0},disabled:Boolean,tabindex:{type:[Number,String]},readonly:Boolean,autofocus:Boolean,value:z.any,required:Boolean};const L=E({compatConfig:{MODE:3},name:"Checkbox",inheritAttrs:!1,props:$(H,{prefixCls:"rc-checkbox",type:"checkbox",defaultChecked:!1}),emits:["click","change"],setup:function(a,d){var t=d.attrs,h=d.emit,x=d.expose,o=f(a.checked===void 0?a.defaultChecked:a.checked),i=f();M(function(){return a.checked},function(){o.value=a.checked}),x({focus:function(){var e;(e=i.value)===null||e===void 0||e.focus()},blur:function(){var e;(e=i.value)===null||e===void 0||e.blur()}});var l=f(),m=function(e){if(!a.disabled){a.checked===void 0&&(o.value=e.target.checked),e.shiftKey=l.value;var r={target:c(c({},a),{},{checked:e.target.checked}),stopPropagation:function(){e.stopPropagation()},preventDefault:function(){e.preventDefault()},nativeEvent:e};a.checked!==void 0&&(i.value.checked=!!a.checked),h("change",r),l.value=!1}},C=function(e){h("click",e),l.value=e.shiftKey};return function(){var n,e=a.prefixCls,r=a.name,s=a.id,p=a.type,b=a.disabled,K=a.readonly,P=a.tabindex,B=a.autofocus,S=a.value,N=a.required,_=T(a,G),q=t.class,D=t.onFocus,j=t.onBlur,w=t.onKeydown,A=t.onKeypress,F=t.onKeyup,y=c(c({},_),t),O=Object.keys(y).reduce(function(k,u){return(u.substr(0,5)==="aria-"||u.substr(0,5)==="data-"||u==="role")&&(k[u]=y[u]),k},{}),R=W(e,q,(n={},g(n,"".concat(e,"-checked"),o.value),g(n,"".concat(e,"-disabled"),b),n)),V=c(c({name:r,id:s,type:p,readonly:K,disabled:b,tabindex:P,class:"".concat(e,"-input"),checked:!!o.value,autofocus:B,value:S},O),{},{onChange:m,onClick:C,onFocus:D,onBlur:j,onKeydown:w,onKeypress:A,onKeyup:F,required:N});return v("span",{class:R},[v("input",c({ref:i},V),null),v("span",{class:"".concat(e,"-inner")},null)])}}});export{L as V};
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 195 B After Width: | Height: | Size: 195 B |
File diff suppressed because one or more lines are too long
|
|
@ -1 +1 @@
|
||||||
.ant-breadcrumb{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";color:#00000073;font-size:14px}.ant-breadcrumb .anticon{font-size:14px}.ant-breadcrumb a{color:#00000073;transition:color .3s}.ant-breadcrumb a:hover{color:#de632f}.ant-breadcrumb>span:last-child{color:#000000d9}.ant-breadcrumb>span:last-child a{color:#000000d9}.ant-breadcrumb>span:last-child .ant-breadcrumb-separator{display:none}.ant-breadcrumb-separator{margin:0 8px;color:#00000073}.ant-breadcrumb-link>.anticon+span,.ant-breadcrumb-link>.anticon+a{margin-left:4px}.ant-breadcrumb-overlay-link>.anticon{margin-left:4px}.ant-breadcrumb-rtl{direction:rtl}.ant-breadcrumb-rtl:before{display:table;content:""}.ant-breadcrumb-rtl:after{display:table;clear:both;content:""}.ant-breadcrumb-rtl>span{float:right}.ant-breadcrumb-rtl .ant-breadcrumb-link>.anticon+span,.ant-breadcrumb-rtl .ant-breadcrumb-link>.anticon+a{margin-right:4px;margin-left:0}.ant-breadcrumb-rtl .ant-breadcrumb-overlay-link>.anticon{margin-right:4px;margin-left:0}.nprogress{pointer-events:none}.nprogress .bar{background:#29d;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}.nprogress .peg{display:block;position:absolute;right:0px;width:100px;height:100%;box-shadow:0 0 10px #29d,0 0 5px #29d;opacity:1;-webkit-transform:rotate(3deg) translate(0px,-4px);-ms-transform:rotate(3deg) translate(0px,-4px);transform:rotate(3deg) translateY(-4px)}.nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}.nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border:solid 2px transparent;border-top-color:#29d;border-left-color:#29d;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent .nprogress .spinner,.nprogress-custom-parent .nprogress .bar{position:absolute}@-webkit-keyframes nprogress-spinner{0%{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(360deg)}}@keyframes nprogress-spinner{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.base-info[data-v-7f9c0b15]{position:absolute;padding:4px;font-size:.8em;background:var(--zp-primary-background);color:var(--zp-primary);left:0;bottom:0;border-top-right-radius:4px}.preview-switch[data-v-ed55779e]{position:fixed;top:0;bottom:0;left:0;right:0;display:flex;align-items:center;justify-content:space-between;z-index:11111;pointer-events:none}.preview-switch>*[data-v-ed55779e]{color:#fff;margin:16px;font-size:4em;pointer-events:all;cursor:pointer}.preview-switch>*.disable[data-v-ed55779e]{opacity:0;pointer-events:none;cursor:none}.location-act[data-v-ed55779e]{margin-left:8px}.location-act .copy[data-v-ed55779e]{margin-right:4px}@media (max-width: 768px){.location-act[data-v-ed55779e]{display:flex;flex-direction:column}.location-act>*[data-v-ed55779e],.location-act .copy[data-v-ed55779e]{margin:2px}}.breadcrumb[data-v-ed55779e]{display:flex;align-items:center}.breadcrumb>*[data-v-ed55779e]{margin-right:4px}@media (max-width: 768px){.breadcrumb[data-v-ed55779e]{width:100%}.breadcrumb .ant-breadcrumb>*[data-v-ed55779e]{display:inline-block}}.container[data-v-ed55779e]{background:var(--zp-secondary-background);height:var(--pane-max-height)}.location-bar[data-v-ed55779e]{padding:4px 16px;background:var(--zp-primary-background);border-bottom:1px solid var(--zp-border);display:flex;align-items:center;justify-content:space-between}@media (max-width: 768px){.location-bar[data-v-ed55779e]{flex-direction:column}.location-bar[data-v-ed55779e] ::-webkit-scrollbar{height:2px;background-color:var(--zp-secondary-variant-background)}.location-bar .actions[data-v-ed55779e]{padding:4px 0;width:100%;overflow:auto;display:flex;align-items:center}.location-bar .actions>*[data-v-ed55779e]{flex-shrink:0}}.location-bar .actions[data-v-ed55779e]{display:flex;align-items:center;flex-shrink:0}.location-bar a.opt[data-v-ed55779e]{margin-left:8px}.view[data-v-ed55779e]{padding:8px;height:calc(100vh - 48px)}.view .file-list[data-v-ed55779e]{list-style:none;padding:8px;height:100%;overflow:auto}.hint[data-v-ed55779e]{padding:4px;border:4px;background:var(--zp-secondary-background);border:1px solid var(--zp-border)}
|
.ant-breadcrumb{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";color:#00000073;font-size:14px}.ant-breadcrumb .anticon{font-size:14px}.ant-breadcrumb a{color:#00000073;transition:color .3s}.ant-breadcrumb a:hover{color:#de632f}.ant-breadcrumb>span:last-child{color:#000000d9}.ant-breadcrumb>span:last-child a{color:#000000d9}.ant-breadcrumb>span:last-child .ant-breadcrumb-separator{display:none}.ant-breadcrumb-separator{margin:0 8px;color:#00000073}.ant-breadcrumb-link>.anticon+span,.ant-breadcrumb-link>.anticon+a{margin-left:4px}.ant-breadcrumb-overlay-link>.anticon{margin-left:4px}.ant-breadcrumb-rtl{direction:rtl}.ant-breadcrumb-rtl:before{display:table;content:""}.ant-breadcrumb-rtl:after{display:table;clear:both;content:""}.ant-breadcrumb-rtl>span{float:right}.ant-breadcrumb-rtl .ant-breadcrumb-link>.anticon+span,.ant-breadcrumb-rtl .ant-breadcrumb-link>.anticon+a{margin-right:4px;margin-left:0}.ant-breadcrumb-rtl .ant-breadcrumb-overlay-link>.anticon{margin-right:4px;margin-left:0}.nprogress{pointer-events:none}.nprogress .bar{background:#29d;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}.nprogress .peg{display:block;position:absolute;right:0px;width:100px;height:100%;box-shadow:0 0 10px #29d,0 0 5px #29d;opacity:1;-webkit-transform:rotate(3deg) translate(0px,-4px);-ms-transform:rotate(3deg) translate(0px,-4px);transform:rotate(3deg) translateY(-4px)}.nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}.nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border:solid 2px transparent;border-top-color:#29d;border-left-color:#29d;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent .nprogress .spinner,.nprogress-custom-parent .nprogress .bar{position:absolute}@-webkit-keyframes nprogress-spinner{0%{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(360deg)}}@keyframes nprogress-spinner{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.base-info[data-v-afd25667]{position:absolute;padding:4px;font-size:.8em;background:var(--zp-primary-background);color:var(--zp-primary);left:0;bottom:0;border-top-right-radius:4px}.preview-switch[data-v-3ae1cdaf]{position:fixed;top:0;bottom:0;left:0;right:0;display:flex;align-items:center;justify-content:space-between;z-index:11111;pointer-events:none}.preview-switch>*[data-v-3ae1cdaf]{color:#fff;margin:16px;font-size:4em;pointer-events:all;cursor:pointer}.preview-switch>*.disable[data-v-3ae1cdaf]{opacity:0;pointer-events:none;cursor:none}.location-act[data-v-3ae1cdaf]{margin-left:8px}.location-act .copy[data-v-3ae1cdaf]{margin-right:4px}@media (max-width: 768px){.location-act[data-v-3ae1cdaf]{display:flex;flex-direction:column}.location-act>*[data-v-3ae1cdaf],.location-act .copy[data-v-3ae1cdaf]{margin:2px}}.breadcrumb[data-v-3ae1cdaf]{display:flex;align-items:center}.breadcrumb>*[data-v-3ae1cdaf]{margin-right:4px}@media (max-width: 768px){.breadcrumb[data-v-3ae1cdaf]{width:100%}.breadcrumb .ant-breadcrumb>*[data-v-3ae1cdaf]{display:inline-block}}.container[data-v-3ae1cdaf]{background:var(--zp-secondary-background);height:var(--pane-max-height)}.location-bar[data-v-3ae1cdaf]{padding:4px 16px;background:var(--zp-primary-background);border-bottom:1px solid var(--zp-border);display:flex;align-items:center;justify-content:space-between}@media (max-width: 768px){.location-bar[data-v-3ae1cdaf]{flex-direction:column}.location-bar[data-v-3ae1cdaf] ::-webkit-scrollbar{height:2px;background-color:var(--zp-secondary-variant-background)}.location-bar .actions[data-v-3ae1cdaf]{padding:4px 0;width:100%;overflow:auto;display:flex;align-items:center}.location-bar .actions>*[data-v-3ae1cdaf]{flex-shrink:0}}.location-bar .actions[data-v-3ae1cdaf]{display:flex;align-items:center;flex-shrink:0}.location-bar a.opt[data-v-3ae1cdaf]{margin-left:8px}.view[data-v-3ae1cdaf]{padding:8px;height:calc(100vh - 48px)}.view .file-list[data-v-3ae1cdaf]{list-style:none;padding:8px;height:100%;overflow:auto}.hint[data-v-3ae1cdaf]{padding:4px;border:4px;background:var(--zp-secondary-background);border:1px solid var(--zp-border)}
|
||||||
|
|
@ -7,8 +7,8 @@
|
||||||
<link rel="icon" href="/favicon.ico" />
|
<link rel="icon" href="/favicon.ico" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Infinite Image Browsing</title>
|
<title>Infinite Image Browsing</title>
|
||||||
<script type="module" crossorigin src="/infinite_image_browsing/fe-static/assets/index-1dba0a34.js"></script>
|
<script type="module" crossorigin src="/infinite_image_browsing/fe-static/assets/index-e900ad8e.js"></script>
|
||||||
<link rel="stylesheet" href="/infinite_image_browsing/fe-static/assets/index-d284a60a.css">
|
<link rel="stylesheet" href="/infinite_image_browsing/fe-static/assets/index-f6de8b10.css">
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,6 @@
|
||||||
"pinia-plugin-persistedstate": "^3.1.0",
|
"pinia-plugin-persistedstate": "^3.1.0",
|
||||||
"sjcl": "^1.0.8",
|
"sjcl": "^1.0.8",
|
||||||
"splitpanes": "^3.1.5",
|
"splitpanes": "^3.1.5",
|
||||||
"stable-diffusion-image-metadata": "^1.0.13",
|
|
||||||
"vue": "^3.3.4",
|
"vue": "^3.3.4",
|
||||||
"vue-diff": "^1.2.4",
|
"vue-diff": "^1.2.4",
|
||||||
"vue-i18n": "^9.3.0-beta.19",
|
"vue-i18n": "^9.3.0-beta.19",
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ import { FileNodeInfo } from '@/api/files'
|
||||||
import { getImageGenerationInfo } from '@/api'
|
import { getImageGenerationInfo } from '@/api'
|
||||||
import { watch, ref } from 'vue'
|
import { watch, ref } from 'vue'
|
||||||
import { createReactiveQueue } from '@/util'
|
import { createReactiveQueue } from '@/util'
|
||||||
import { parse } from 'stable-diffusion-image-metadata'
|
import { parse } from '@/util/stable-diffusion-image-metadata'
|
||||||
import { useGlobalStore } from '@/store/useGlobalStore'
|
import { useGlobalStore } from '@/store/useGlobalStore'
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ import { toRawFileUrl } from '@/util/file'
|
||||||
import ContextMenu from '@/components/ContextMenu.vue'
|
import ContextMenu from '@/components/ContextMenu.vue'
|
||||||
import { useWatchDocument } from 'vue3-ts-util'
|
import { useWatchDocument } from 'vue3-ts-util'
|
||||||
import { useTagStore } from '@/store/useTagStore'
|
import { useTagStore } from '@/store/useTagStore'
|
||||||
import { parse } from 'stable-diffusion-image-metadata'
|
import { parse } from '@/util/stable-diffusion-image-metadata'
|
||||||
|
|
||||||
const global = useGlobalStore()
|
const global = useGlobalStore()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ import { copy2clipboardI18n } from '@/util'
|
||||||
import { openFolder, getImageGenerationInfoBatch } from '@/api'
|
import { openFolder, getImageGenerationInfoBatch } from '@/api'
|
||||||
import { sortMethods } from './fileSort'
|
import { sortMethods } from './fileSort'
|
||||||
import { isTauri } from '@/util/env'
|
import { isTauri } from '@/util/env'
|
||||||
import { parse } from 'stable-diffusion-image-metadata'
|
import { parse } from '@/util/stable-diffusion-image-metadata'
|
||||||
import { ref } from 'vue'
|
import { ref } from 'vue'
|
||||||
import type { FileNodeInfo, GenDiffInfo } from '@/api/files'
|
import type { FileNodeInfo, GenDiffInfo } from '@/api/files'
|
||||||
import MultiSelectKeep from '@/components/MultiSelectKeep.vue'
|
import MultiSelectKeep from '@/components/MultiSelectKeep.vue'
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,188 @@
|
||||||
|
|
||||||
|
// Fork from https://github.com/jiw0220/stable-diffusion-image-metadata/blob/main/src/index.ts
|
||||||
|
type ImageMeta = {
|
||||||
|
prompt?: string;
|
||||||
|
negativePrompt?: string;
|
||||||
|
steps?: string;
|
||||||
|
sampler?: string;
|
||||||
|
cfgScale?: string;
|
||||||
|
seed?: string;
|
||||||
|
clipSkip?: string;
|
||||||
|
hashes?: { [k: string]: any };
|
||||||
|
width?: number;
|
||||||
|
height?: number;
|
||||||
|
resources?: Resource[];
|
||||||
|
} & Record<string, any>;
|
||||||
|
|
||||||
|
type Resource = {
|
||||||
|
type: string;
|
||||||
|
name: string;
|
||||||
|
weight?: number;
|
||||||
|
hash?: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
type PreProcessValueFn = (v: string) => string;
|
||||||
|
type PreProcessValue = string;
|
||||||
|
|
||||||
|
const imageMetadataKeys: Array<[string, string]> = [
|
||||||
|
['Seed', 'seed'],
|
||||||
|
['CFG scale', 'cfgScale'],
|
||||||
|
['Sampler', 'sampler'],
|
||||||
|
['Steps', 'steps'],
|
||||||
|
['Clip skip', 'clipSkip'],
|
||||||
|
['Size', 'size'],
|
||||||
|
];
|
||||||
|
const imageMetaKeyMap = new Map<string, string>(imageMetadataKeys);
|
||||||
|
const imageMetaKeyReverseMap = new Map<string, string>(
|
||||||
|
imageMetadataKeys.map((i) => i.reverse()) as Array<[string, string]>
|
||||||
|
);
|
||||||
|
const automaticExtraNetsRegex = /<(lora|hypernet):([a-zA-Z0-9_.]+):([0-9.]+)>/g;
|
||||||
|
const automaticNameHash = /([a-zA-Z0-9_.]+)\(([a-zA-Z0-9]+)\)/;
|
||||||
|
const getImageMetaKey = (key: string, keyMap: Map<string, string>) => keyMap.get(key.trim()) ?? key.trim();
|
||||||
|
const stripKeys = ['Template: ', 'Negative Template: '] as const;
|
||||||
|
|
||||||
|
function preproccessFormatJSONValueFn(v: string) {
|
||||||
|
try {
|
||||||
|
return JSON.parse(encodeURIComponent(v));
|
||||||
|
} catch (e) {
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function preproccessFormatHandler(configValue: PreProcessValue | PreProcessValueFn, inputValue: string) {
|
||||||
|
if (typeof configValue === 'function') {
|
||||||
|
return configValue.call(null, inputValue);
|
||||||
|
}
|
||||||
|
return configValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const preproccessConfigs = [
|
||||||
|
{ reg: /(ControlNet \d+): "([^"]+)"/g },
|
||||||
|
{ reg: /(Lora hashes): "([^"]+)"/g },
|
||||||
|
{ reg: /(Hashes): ({[^}]+})/g, key: 'hashes', value: preproccessFormatJSONValueFn },
|
||||||
|
//...There should be many configs that need to be preprocessed in the future
|
||||||
|
];
|
||||||
|
|
||||||
|
export function parse(parameters: string): ImageMeta {
|
||||||
|
const metadata: ImageMeta = {};
|
||||||
|
if (!parameters) return metadata;
|
||||||
|
|
||||||
|
const metaLines = parameters.split('\n').filter((line) => {
|
||||||
|
return line.trim() !== '' && !stripKeys.some((key) => line.startsWith(key));
|
||||||
|
});
|
||||||
|
|
||||||
|
const detailsLineIndex = metaLines.findIndex((line) => line.startsWith('Steps: '));
|
||||||
|
let detailsLine = metaLines[detailsLineIndex] || '';
|
||||||
|
// Strip it from the meta lines
|
||||||
|
if (detailsLineIndex > -1) metaLines.splice(detailsLineIndex, 1);
|
||||||
|
// Remove meta keys I wish I hadn't made... :(
|
||||||
|
|
||||||
|
preproccessConfigs.forEach(({ reg, key: configKey, value: configValue }) => {
|
||||||
|
const matchData: any = {};
|
||||||
|
const matchValues = [];
|
||||||
|
let match;
|
||||||
|
while ((match = reg.exec(detailsLine)) !== null) {
|
||||||
|
const key = configKey !== void 0 ? preproccessFormatHandler(configKey, match[1]) : match[1];
|
||||||
|
const value = configValue !== void 0 ? preproccessFormatHandler(configValue, match[2]) : match[2];
|
||||||
|
matchData[key] = value;
|
||||||
|
matchValues.push(match[0]);
|
||||||
|
}
|
||||||
|
matchValues.forEach((value) => (detailsLine = detailsLine.replace(value, '')));
|
||||||
|
Object.assign(metadata, matchData);
|
||||||
|
});
|
||||||
|
|
||||||
|
detailsLine.split(', ').forEach((str: string) => {
|
||||||
|
const [_k, _v] = str.split(': ');
|
||||||
|
if (!_k) return;
|
||||||
|
const key = getImageMetaKey(_k, imageMetaKeyMap);
|
||||||
|
metadata[key] = _v;
|
||||||
|
});
|
||||||
|
|
||||||
|
// Extract prompts
|
||||||
|
const [prompt, ...negativePrompt] = metaLines
|
||||||
|
.join('\n')
|
||||||
|
.split('Negative prompt:')
|
||||||
|
.map((x) => x.trim());
|
||||||
|
metadata.prompt = prompt;
|
||||||
|
metadata.negativePrompt = negativePrompt.join(' ').trim();
|
||||||
|
|
||||||
|
// Extract resources
|
||||||
|
const extranets = [...prompt.matchAll(automaticExtraNetsRegex)];
|
||||||
|
const resources: Resource[] = extranets.map(([, type, name, weight]) => ({
|
||||||
|
type,
|
||||||
|
name,
|
||||||
|
weight: parseFloat(weight),
|
||||||
|
}));
|
||||||
|
|
||||||
|
if (metadata.Size || metadata.size) {
|
||||||
|
const sizes = (metadata.Size || metadata.size || '0x0').split('x');
|
||||||
|
if (!metadata.width) {
|
||||||
|
metadata.width = parseFloat(sizes[0]) || 0;
|
||||||
|
}
|
||||||
|
if (!metadata.height) {
|
||||||
|
metadata.height = parseFloat(sizes[1]) || 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (metadata['Model'] && metadata['Model hash']) {
|
||||||
|
const model = metadata['Model'] as string;
|
||||||
|
const modelHash = metadata['Model hash'] as string;
|
||||||
|
if (typeof metadata.hashes !== 'object') metadata.hashes = {};
|
||||||
|
if (!metadata.hashes['model']) metadata.hashes['model'] = modelHash;
|
||||||
|
|
||||||
|
resources.push({
|
||||||
|
type: 'model',
|
||||||
|
name: model,
|
||||||
|
hash: modelHash,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (metadata['Hypernet'] && metadata['Hypernet strength'])
|
||||||
|
resources.push({
|
||||||
|
type: 'hypernet',
|
||||||
|
name: metadata['Hypernet'] as string,
|
||||||
|
weight: parseFloat(metadata['Hypernet strength'] as string),
|
||||||
|
});
|
||||||
|
|
||||||
|
if (metadata['AddNet Enabled'] === 'True') {
|
||||||
|
let i = 1;
|
||||||
|
// eslint-disable-next-line no-constant-condition
|
||||||
|
while (true) {
|
||||||
|
const fullname = metadata[`AddNet Model ${i}`] as string;
|
||||||
|
if (!fullname) break;
|
||||||
|
const [, name, hash] = fullname.match(automaticNameHash) ?? [];
|
||||||
|
|
||||||
|
resources.push({
|
||||||
|
type: (metadata[`AddNet Module ${i}`] as string).toLowerCase(),
|
||||||
|
name,
|
||||||
|
hash,
|
||||||
|
weight: parseFloat(metadata[`AddNet Weight ${i}`] as string),
|
||||||
|
});
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
metadata.resources = resources;
|
||||||
|
return metadata;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function stringify(metadata: ImageMeta): string {
|
||||||
|
const { prompt, negativePrompt, width, height, hashes, resources, ...other } = metadata;
|
||||||
|
// [width, height, hashes, resources] is ignore keys
|
||||||
|
const lines: string[] = [];
|
||||||
|
if (!prompt || !other.steps) {
|
||||||
|
//invalid metadata
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
lines.push(prompt);
|
||||||
|
if (negativePrompt) {
|
||||||
|
lines.push(`Negative prompt: ${negativePrompt}`);
|
||||||
|
}
|
||||||
|
const details: string[] = [];
|
||||||
|
Object.entries(other).forEach(([_k, v]) => {
|
||||||
|
const k = getImageMetaKey(_k, imageMetaKeyReverseMap);
|
||||||
|
details.push(`${k}: ${v}`);
|
||||||
|
});
|
||||||
|
lines.push(details.join(', '));
|
||||||
|
|
||||||
|
return lines.join('\n');
|
||||||
|
}
|
||||||
|
|
@ -1063,11 +1063,6 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
vue-demi "*"
|
vue-demi "*"
|
||||||
|
|
||||||
"@xmldom/xmldom@^0.8.10":
|
|
||||||
version "0.8.10"
|
|
||||||
resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz#a1337ca426aa61cef9fe15b5b28e340a72f6fa99"
|
|
||||||
integrity sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==
|
|
||||||
|
|
||||||
"@zanllp/vue-virtual-scroller@^2.0.0-beta.7":
|
"@zanllp/vue-virtual-scroller@^2.0.0-beta.7":
|
||||||
version "2.0.0-beta.7"
|
version "2.0.0-beta.7"
|
||||||
resolved "https://registry.yarnpkg.com/@zanllp/vue-virtual-scroller/-/vue-virtual-scroller-2.0.0-beta.7.tgz#be56cd78d60c5b8241f32f06b477599ccb75d1f9"
|
resolved "https://registry.yarnpkg.com/@zanllp/vue-virtual-scroller/-/vue-virtual-scroller-2.0.0-beta.7.tgz#be56cd78d60c5b8241f32f06b477599ccb75d1f9"
|
||||||
|
|
@ -1607,13 +1602,6 @@ eventemitter3@^5.0.0:
|
||||||
resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz"
|
resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz"
|
||||||
integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==
|
integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==
|
||||||
|
|
||||||
exifreader@^4.13.0:
|
|
||||||
version "4.20.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/exifreader/-/exifreader-4.20.0.tgz#3d53eb38067adbbecc51c7a09a444f658c402bcf"
|
|
||||||
integrity sha512-C28BhOHe5svd0Jj/5DGSIXD3PnPp46gfvHN4OkRfvHYZHkcJMhxeUxlwsgJ6Yl62zlZRtmfN+9suZFg0fv4hgg==
|
|
||||||
optionalDependencies:
|
|
||||||
"@xmldom/xmldom" "^0.8.10"
|
|
||||||
|
|
||||||
fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
|
fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
|
||||||
version "3.1.3"
|
version "3.1.3"
|
||||||
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
|
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
|
||||||
|
|
@ -2464,13 +2452,6 @@ splitpanes@^3.1.5:
|
||||||
resolved "https://registry.yarnpkg.com/splitpanes/-/splitpanes-3.1.5.tgz#de81da25681c252d131747a9cb48a17156e2b210"
|
resolved "https://registry.yarnpkg.com/splitpanes/-/splitpanes-3.1.5.tgz#de81da25681c252d131747a9cb48a17156e2b210"
|
||||||
integrity sha512-r3Mq2ITFQ5a2VXLOy4/Sb2Ptp7OfEO8YIbhVJqJXoFc9hc5nTXXkCvtVDjIGbvC0vdE7tse+xTM9BMjsszP6bw==
|
integrity sha512-r3Mq2ITFQ5a2VXLOy4/Sb2Ptp7OfEO8YIbhVJqJXoFc9hc5nTXXkCvtVDjIGbvC0vdE7tse+xTM9BMjsszP6bw==
|
||||||
|
|
||||||
stable-diffusion-image-metadata@^1.0.13:
|
|
||||||
version "1.0.13"
|
|
||||||
resolved "https://registry.yarnpkg.com/stable-diffusion-image-metadata/-/stable-diffusion-image-metadata-1.0.13.tgz#fc68984e8e933c658f9659ce55e8a8d02082938a"
|
|
||||||
integrity sha512-YQ/mrUHcRueRrPkwYQ5RjOCOYjkaKzOVmVIpzx6ZKvVeB4SMh2RTisZ9gNdkF25YLS/hMwuRPNUEfk1Wp5i3kw==
|
|
||||||
dependencies:
|
|
||||||
exifreader "^4.13.0"
|
|
||||||
|
|
||||||
strip-ansi@^6.0.1:
|
strip-ansi@^6.0.1:
|
||||||
version "6.0.1"
|
version "6.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
|
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue