Merge pull request #681 from zanllp/feature/context-menu-enhancements

Add 'Move To', 'Copy To', 'Copy File Path', and 'Open File Location i…
pull/682/head
zanllp 2024-07-01 08:07:12 +08:00 committed by GitHub
commit 83c8845e34
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
49 changed files with 206 additions and 75 deletions

View File

@ -40,6 +40,7 @@ https://github.com/zanllp/sd-webui-infinite-image-browsing/assets/25872019/807b8
- 您可以将其作为 SD-webui 的扩展安装。
- 您可以使用 Python 独立运行它。
- 还提供桌面应用程序版本。
- 支持多种流行的AI软件
### 🚶‍♀️ Walk模式
- 自动加载下一个文件夹 `(类似于 os.walk)`,可让您无需分页浏览所有图像。
@ -50,9 +51,12 @@ https://github.com/zanllp/sd-webui-infinite-image-browsing/assets/25872019/807b8
- 支持自动刷新。
- 支持基本文件操作以及多选删除/移动/复制,新建文件夹等。
- 按住 Ctrl、Shift 或 Cmd 键可选择多个项目。
- 支持多选的操作有:删除、移动、复制、打包下载、添加标签、移除标签,移动到其他文件夹,复制到其他文件夹,拖拽
- 你可以通过右下角的保持多选按钮来保持多选的状态,对选中的文件集合可以很方便的进行多次操作
### 🆚 图像对比 (类似ImgSli)
- 提供两张图片的并排比较
- 同时提供图像生成信息的比较
### 🌐 多语言支持
- 目前支持简体中文/繁体中文/英文/德语。

View File

@ -6,7 +6,7 @@
# Stable Diffusion webui Infinite Image Browsing
<p>It's not just an image/video browser, but also a powerful image manager. Precise image search combined with multi-selection operations allows for filtering/archiving/packaging, greatly increasing efficiency. It also supports running in standalone mode, without the need for SD-Webui.
<p>It's not just an image/video browser, but also a powerful image manager. Precise image search combined with multi-selection operations allows for filtering/archiving/packaging ...etc, greatly increasing efficiency. It also supports running in standalone mode, without the need for SD-Webui.
It is also suitable for managing regular photos and videos, allowing you to tag or search them. We have made numerous optimizations to ensure performance under extreme conditions.</p>
@ -51,6 +51,7 @@ You can add your own parser through https://github.com/zanllp/sd-webui-infinite-
- You can install it as an extension on SD-webui.
- You can run it independently using Python.
- The desktop app version is also available.
- Supports multiple popular AI software.
### 🚶‍♀️ Walk Mode
@ -62,9 +63,12 @@ You can add your own parser through https://github.com/zanllp/sd-webui-infinite-
- Supports automatic refreshing.
- Supports basic file operations, such as multiple selection for deleting/moving/copying, and creating new folders.
- Hold down the Ctrl, Shift, or Cmd key to select multiple items.
- Supported multi-select operations include: delete, move, copy, pack download, add tags, remove tags, move to another folder, copy to another folder, drag and drop.
- You can keep the multi-select state by clicking the "Keep Multi-Select" button in the lower right corner, allowing you to perform multiple operations on the selected file collection conveniently.
### 🆚 image comparison (similar to Imgsli)
- Provides a side-by-side comparison of two images.
- Provides a comparison of image generation information at the same time.
### 🌐 Multilingual Support
- Currently supports Simplified Chinese/Traditional Chinese/English/German.

View File

@ -13,7 +13,7 @@ Promise.resolve().then(async () => {
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Infinite Image Browsing</title>
<script type="module" crossorigin src="/infinite_image_browsing/fe-static/assets/index-11413b17.js"></script>
<script type="module" crossorigin src="/infinite_image_browsing/fe-static/assets/index-5ad9f674.js"></script>
<link rel="stylesheet" href="/infinite_image_browsing/fe-static/assets/index-f652cc2f.css">
</head>

View File

@ -11,6 +11,7 @@ from scripts.iib.tool import (
get_video_type,
human_readable_size,
is_valid_media_path,
is_media_file,
temp_path,
get_formatted_date,
is_win,
@ -404,18 +405,41 @@ def infinite_image_browsing_api(app: FastAPI, **kwargs):
raise HTTPException(400, detail=error_msg)
conn = DataBase.get_conn()
for path in req.file_paths:
check_path_trust(path)
try:
ret_path = shutil.move(path, req.dest)
def move_file_with_geninfo(path: str, dest: str):
path = os.path.normpath(path)
txt_path = get_img_geninfo_txt_path(path)
if txt_path:
shutil.move(txt_path, req.dest)
img = DbImg.get(conn, os.path.normpath(path))
shutil.move(txt_path, dest)
img = DbImg.get(conn, path)
new_path = os.path.normpath(os.path.join(dest, os.path.basename(path)))
if img:
img.update_path(conn, ret_path)
logger.info(f"update file path: {path} -> {new_path} in db")
img.update_path(conn, new_path, force=True)
for path in req.file_paths:
check_path_trust(path)
path = os.path.normpath(path)
base_dir = os.path.dirname(path)
try:
files = list(os.walk(path))
is_dir = os.path.isdir(path)
shutil.move(path, req.dest)
if is_dir:
for root, _, files in files:
relative_path = root[len(base_dir) + 1 :]
dest = os.path.join(req.dest, relative_path)
for file in files:
is_valid = is_media_file(file)
if is_valid:
move_file_with_geninfo(os.path.join(root, file), dest)
else:
move_file_with_geninfo(path, req.dest)
conn.commit()
except OSError as e:
conn.rollback()
error_msg = (
f"Error moving file {path} to {req.dest}: {e}"
if locale == "en"

View File

@ -116,9 +116,11 @@ class Image:
)
self.id = cur.lastrowid
def update_path(self, conn: Connection, new_path: str):
def update_path(self, conn: Connection, new_path: str, force=False):
self.path = os.path.normpath(new_path)
with closing(conn.cursor()) as cur:
if force: # force update path
cur.execute("DELETE FROM image WHERE path = ?", (self.path,))
cur.execute("UPDATE image SET path = ? WHERE id = ?", (self.path, self.id))
@classmethod

View File

@ -228,7 +228,8 @@ def is_valid_media_path(path):
return False
return is_image_file(abs_path) or is_video_file(abs_path)
def is_media_file(file_path):
return is_image_file(file_path) or is_video_file(file_path)
def create_zip_file(file_paths: List[str], zip_file_name: str):
"""

View File

@ -1 +1 @@
import{d as E,bw as $,r as f,k as M,_ as T,a as c,aj as W,h as g,c as v,P as z}from"./index-11413b17.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,m=d.expose,o=f(a.checked===void 0?a.defaultChecked:a.checked),i=f();M(function(){return a.checked},function(){o.value=a.checked}),m({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(),x=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),j=t.class,q=t.onFocus,w=t.onBlur,D=t.onKeydown,A=t.onKeypress,F=t.onKeyup,k=c(c({},_),t),O=Object.keys(k).reduce(function(y,u){return(u.substr(0,5)==="aria-"||u.substr(0,5)==="data-"||u==="role")&&(y[u]=k[u]),y},{}),R=W(e,j,(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:x,onClick:C,onFocus:q,onBlur:w,onKeydown:D,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,bw as $,r as f,k as M,_ as T,a as c,aj as W,h as g,c as v,P as z}from"./index-5ad9f674.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,m=d.expose,o=f(a.checked===void 0?a.defaultChecked:a.checked),i=f();M(function(){return a.checked},function(){o.value=a.checked}),m({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(),x=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),j=t.class,q=t.onFocus,w=t.onBlur,D=t.onKeydown,A=t.onKeypress,F=t.onKeyup,k=c(c({},_),t),O=Object.keys(k).reduce(function(y,u){return(u.substr(0,5)==="aria-"||u.substr(0,5)==="data-"||u==="role")&&(y[u]=k[u]),y},{}),R=W(e,j,(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:x,onClick:C,onFocus:q,onBlur:w,onKeydown:D,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};

3
vue/dist/assets/FileItem-28d2dfc5.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
import{d as a,N as t,O as s,c as n,cG as _,V as o}from"./index-11413b17.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};
import{d as a,N as t,O as s,c as n,cH as _,V as o}from"./index-5ad9f674.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};

View File

@ -1 +0,0 @@
import{d as se,k as ne,av as oe,W as ie,N as u,O as I,c as s,Z as e,Y as n,a0 as R,Q as d,E as ae,S as a,R as p,X as V,a9 as de,U as k,aa as D,ac as re,ad as ce,af as z,aI as ue,aJ as me,bN as pe,V as ge}from"./index-11413b17.js";import{S as fe}from"./index-0e64ca4e.js";import{L as ve,R as Ie,f as ke,M as _e}from"./MultiSelectKeep-3c32b446.js";import{c as Ce,d as he,F as we}from"./FileItem-431a5775.js";import{c as Se,u as xe}from"./hook-4add0d11.js";import{a as be}from"./functionalCallableComp-2ff9816d.js";import"./shortcut-ecd99e57.js";import"./Checkbox-5c259f39.js";/* empty css */import"./index-7ad2febc.js";const Me=r=>(ue("data-v-ce7f8df3"),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:C,stackViewEl:N,previewIdx:c,previewing:h,onPreviewVisibleChange:G,previewImgMove:w,canPreview:S,itemSize:x,gridItems:E,showGenInfo:m,imageGenInfo:b,q:J,multiSelectedIdxs:f,onFileItemClick:U,scroller:M,showMenuIdx:v,onFileDragStart:L,onFileDragEnd:O,cellWidth:P,onScroll:y,saveAllFileAsJson:K,saveLoadedFileAsJson:q}=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:Y}=Ce();return(l,t)=>{const Z=_e,j=re,H=ce,A=z,ee=z,te=fe;return u(),I("div",{class:"container",ref_key:"stackViewEl",ref:N},[s(Z,{show:!!e(f).length||e(Q).keepMultiSelect,onClearAllSelected:e(W),onSelectAll:e(X),onReverseSelect:e(Y)},null,8,["show","onClearAllSelected","onSelectAll","onReverseSelect"]),s(te,{size:"large",spinning:!e(B).isIdle},{default:n(()=>{var T,$;return[s(H,{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(j,{active:"",loading:!e(J).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(q)},{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(he),{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(E),onScroll:e(y)},{after:n(()=>[Te]),default:n(({item:o,index:F})=>[s(we,{idx:F,file:o,"cell-width":e(P),"show-menu-idx":e(v),"onUpdate:showMenuIdx":t[3]||(t[3]=le=>R(v)?v.value=le:null),onDragstart:e(L),onDragend:e(O),onFileItemClick:e(U),"full-screen-preview-image-url":e(i)[e(c)]?e(de)(e(i)[e(c)]):"",selected:e(f).includes(F),onContextMenuClick:e(C),onPreviewVisibleChange:e(G),"is-selected-mutil-files":e(f).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(h)?(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(Ie),{onClick:t[6]||(t[6]=o=>e(w)("next")),class:D({disable:!e(S)("next")})},null,8,["class"])])):k("",!0)]}),_:1},8,["spinning"]),e(h)&&e(i)&&e(i)[e(c)]?(u(),V(ke,{key:0,file:e(i)[e(c)],idx:e(c),onContextMenuClick:e(C)},null,8,["file","idx","onContextMenuClick"])):k("",!0)],512)}}});const Ke=ge(De,[["__scopeId","data-v-ce7f8df3"]]);export{Ke as default};

View File

@ -0,0 +1 @@
.container[data-v-fbf8262b]{background:var(--zp-secondary-background);position:relative}.container .action-bar[data-v-fbf8262b]{display:flex;align-items:center;user-select:none;gap:4px;padding:4px}.container .action-bar>*[data-v-fbf8262b]{flex-wrap:wrap}.container .file-list[data-v-fbf8262b]{list-style:none;padding:8px;overflow:auto;height:calc(var(--pane-max-height) - 40px);width:100%}.container .no-res-hint[data-v-fbf8262b]{height:var(--pane-max-height);display:flex;align-items:center;flex-direction:column;justify-content:center}.container .no-res-hint .hint[data-v-fbf8262b]{font-size:1.6em;margin-bottom:2em;text-align:center}

View File

@ -1 +0,0 @@
.container[data-v-ce7f8df3]{background:var(--zp-secondary-background);position:relative}.container .action-bar[data-v-ce7f8df3]{display:flex;align-items:center;user-select:none;gap:4px;padding:4px}.container .action-bar>*[data-v-ce7f8df3]{flex-wrap:wrap}.container .file-list[data-v-ce7f8df3]{list-style:none;padding:8px;overflow:auto;height:calc(var(--pane-max-height) - 40px);width:100%}.container .no-res-hint[data-v-ce7f8df3]{height:var(--pane-max-height);display:flex;align-items:center;flex-direction:column;justify-content:center}.container .no-res-hint .hint[data-v-ce7f8df3]{font-size:1.6em;margin-bottom:2em;text-align:center}

View File

@ -0,0 +1 @@
import{d as ne,k as R,av as ie,W as ae,N as u,O as k,c as s,Z as e,Y as o,a0 as V,Q as r,E as re,S as a,R as m,X as D,a9 as de,U as _,aa as z,ac as ce,ad as ue,af as B,aI as pe,aJ as me,bN as ge,V as fe}from"./index-5ad9f674.js";import{S as ve}from"./index-eb7650a0.js";import{L as Ie,R as ke,f as _e,M as Ce}from"./MultiSelectKeep-b2238f90.js";import{c as he,d as we,F as Se}from"./FileItem-28d2dfc5.js";import{c as be,u as xe}from"./hook-d85a9a4b.js";import{a as ye}from"./functionalCallableComp-fb332440.js";import"./shortcut-6f226e11.js";import"./Checkbox-1693a989.js";/* empty css */import"./index-b56880ed.js";const Me=d=>(pe("data-v-fbf8262b"),d=d(),me(),d),Ae={class:"hint"},Te={class:"action-bar"},$e=Me(()=>r("div",{style:{padding:"16px 0 512px"}},null,-1)),Fe={key:1},Re={class:"no-res-hint"},Ve={class:"hint"},De={key:2,class:"preview-switch"},ze=ne({__name:"MatchedImageGrid",props:{tabIdx:{},paneIdx:{},selectedTagIds:{},id:{}},setup(d){const g=d,f=be(t=>ge(g.selectedTagIds,t)),{queue:N,images:i,onContextMenuClickU:C,stackViewEl:G,previewIdx:c,previewing:h,onPreviewVisibleChange:U,previewImgMove:w,canPreview:S,itemSize:b,gridItems:E,showGenInfo:p,imageGenInfo:x,q:J,multiSelectedIdxs:v,onFileItemClick:L,scroller:y,showMenuIdx:I,onFileDragStart:O,onFileDragEnd:P,cellWidth:K,onScroll:M,saveAllFileAsJson:q,props:Q,saveLoadedFileAsJson:W}=xe(f);R(()=>g.selectedTagIds,async()=>{var t;await f.reset(),await ie(),(t=y.value)==null||t.scrollToItem(0),M()},{immediate:!0}),R(()=>g,async t=>{Q.value=t},{deep:!0,immediate:!0});const X=ae(),{onClearAllSelected:Y,onSelectAll:Z,onReverseSelect:j}=he();return(t,l)=>{const H=Ce,ee=ce,te=ue,A=B,le=B,se=ve;return u(),k("div",{class:"container",ref_key:"stackViewEl",ref:G},[s(H,{show:!!e(v).length||e(X).keepMultiSelect,onClearAllSelected:e(Y),onSelectAll:e(Z),onReverseSelect:e(j)},null,8,["show","onClearAllSelected","onSelectAll","onReverseSelect"]),s(se,{size:"large",spinning:!e(N).isIdle},{default:o(()=>{var T,$;return[s(te,{visible:e(p),"onUpdate:visible":l[1]||(l[1]=n=>V(p)?p.value=n:null),width:"70vw","mask-closable":"",onOk:l[2]||(l[2]=n=>p.value=!1)},{cancelText:o(()=>[]),default:o(()=>[s(ee,{active:"",loading:!e(J).isIdle},{default:o(()=>[r("div",{style:{width:"100%","word-break":"break-all","white-space":"pre-line","max-height":"70vh",overflow:"auto"},onDblclick:l[0]||(l[0]=n=>e(re)(e(x)))},[r("div",Ae,a(t.$t("doubleClickToCopy")),1),m(" "+a(e(x)),1)],32)]),_:1},8,["loading"])]),_:1},8,["visible"]),r("div",Te,[s(A,{onClick:e(W)},{default:o(()=>[m(a(t.$t("saveLoadedImageAsJson")),1)]),_:1},8,["onClick"]),s(A,{onClick:e(q)},{default:o(()=>[m(a(t.$t("saveAllAsJson")),1)]),_:1},8,["onClick"])]),(T=e(i))!=null&&T.length?(u(),D(e(we),{key:0,ref_key:"scroller",ref:y,class:"file-list",items:e(i),"item-size":e(b).first,"key-field":"fullpath","item-secondary-size":e(b).second,gridItems:e(E),onScroll:e(M)},{after:o(()=>[$e]),default:o(({item:n,index:F})=>[s(Se,{idx:F,file:n,"cell-width":e(K),"show-menu-idx":e(I),"onUpdate:showMenuIdx":l[3]||(l[3]=oe=>V(I)?I.value=oe:null),onDragstart:e(O),onDragend:e(P),onFileItemClick:e(L),"full-screen-preview-image-url":e(i)[e(c)]?e(de)(e(i)[e(c)]):"",selected:e(v).includes(F),onContextMenuClick:e(C),onPreviewVisibleChange:e(U),"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(f).load&&t.selectedTagIds.and_tags.length===1&&!(($=t.selectedTagIds.folder_paths_str)!=null&&$.trim())?(u(),k("div",Fe,[r("div",Re,[r("p",Ve,a(t.$t("tagSearchNoResultsMessage")),1),s(le,{onClick:l[4]||(l[4]=n=>e(ye)()),type:"primary"},{default:o(()=>[m(a(t.$t("rebuildImageIndex")),1)]),_:1})])])):_("",!0),e(h)?(u(),k("div",De,[s(e(Ie),{onClick:l[5]||(l[5]=n=>e(w)("prev")),class:z({disable:!e(S)("prev")})},null,8,["class"]),s(e(ke),{onClick:l[6]||(l[6]=n=>e(w)("next")),class:z({disable:!e(S)("next")})},null,8,["class"])])):_("",!0)]}),_:1},8,["spinning"]),e(h)&&e(i)&&e(i)[e(c)]?(u(),D(_e,{key:0,file:e(i)[e(c)],idx:e(c),onContextMenuClick:e(C)},null,8,["file","idx","onContextMenuClick"])):_("",!0)],512)}}});const qe=fe(ze,[["__scopeId","data-v-fbf8262b"]]);export{qe as default};

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
.full-screen-menu[data-v-810a0fc5]{position:fixed;z-index:9999;background:var(--zp-primary-background);padding:8px 16px;box-shadow:0 0 4px var(--zp-secondary);border-radius:4px}.full-screen-menu .tags-container[data-v-810a0fc5]{margin:4px 0}.full-screen-menu .tags-container .tag[data-v-810a0fc5]{margin-right:4px;margin-bottom:4px;padding:2px 16px;border-radius:4px;display:inline-block;cursor:pointer;font-weight:700;transition:.5s all ease;border:2px solid var(--tag-color);color:var(--tag-color);background:var(--zp-primary-background);user-select:none}.full-screen-menu .tags-container .tag.selected[data-v-810a0fc5]{background:var(--tag-color);color:#fff}.full-screen-menu .container[data-v-810a0fc5]{height:100%;display:flex;overflow:hidden;flex-direction:column}.full-screen-menu .gen-info[data-v-810a0fc5]{flex:1;word-break:break-all;white-space:pre-line;overflow:auto;z-index:1;padding-top:4px;position:relative}.full-screen-menu .gen-info code[data-v-810a0fc5]{font-size:.9em;display:block;padding:4px;background:var(--zp-primary-background);border-radius:4px;margin-right:20px;white-space:pre-wrap;word-break:break-word;line-height:1.78em}.full-screen-menu .gen-info code[data-v-810a0fc5] span{background:var(--zp-secondary-variant-background);color:var(--zp-primary);padding:2px 4px;border-radius:4px;margin-right:4px}.full-screen-menu .gen-info code[data-v-810a0fc5] .has-parentheses{background:rgba(255,100,100,.14)}.full-screen-menu .gen-info code[data-v-810a0fc5] span:hover{background:rgba(120,0,0,.15)}.full-screen-menu .gen-info table[data-v-810a0fc5]{font-size:1em;border-radius:4px;border-collapse:separate;margin-bottom:3em}.full-screen-menu .gen-info table tr td[data-v-810a0fc5]:first-child{white-space:nowrap}.full-screen-menu .gen-info table td[data-v-810a0fc5]{padding-right:14px;padding-left:4px;border-bottom:1px solid var(--zp-secondary);border-collapse:collapse}.full-screen-menu .gen-info .info-tags .info-tag[data-v-810a0fc5]{display:inline-block;overflow:hidden;border-radius:4px;margin-right:8px;border:2px solid var(--zp-primary)}.full-screen-menu .gen-info .info-tags .name[data-v-810a0fc5]{background-color:var(--zp-primary);color:var(--zp-primary-background);padding:4px;border-bottom-right-radius:4px}.full-screen-menu .gen-info .info-tags .value[data-v-810a0fc5]{padding:4px}.full-screen-menu.unset-size[data-v-810a0fc5]{width:unset!important;height:unset!important}.full-screen-menu .mouse-sensor[data-v-810a0fc5]{position:absolute;bottom:0;right:0;transform:rotate(90deg);cursor:se-resize;z-index:1;background:var(--zp-primary-background);border-radius:2px}.full-screen-menu .mouse-sensor>*[data-v-810a0fc5]{font-size:18px;padding:4px}.full-screen-menu .action-bar[data-v-810a0fc5]{display:flex;align-items:center;user-select:none;gap:4px}.full-screen-menu .action-bar .icon[data-v-810a0fc5]{font-size:1.5em;padding:2px 4px;border-radius:4px}.full-screen-menu .action-bar .icon[data-v-810a0fc5]:hover{background:var(--zp-secondary-variant-background)}.full-screen-menu .action-bar>*[data-v-810a0fc5]{flex-wrap:wrap}.full-screen-menu.lr[data-v-810a0fc5]{top:var(--4315b672)!important;right:0!important;bottom:0!important;left:100vw!important;height:unset!important;width:var(--410a5a36)!important;transition:left ease .3s}.full-screen-menu.lr.always-on[data-v-810a0fc5],.full-screen-menu.lr.mouse-in[data-v-810a0fc5]{left:var(--9c59682e)!important}.lr-layout-control[data-v-810a0fc5]{display:flex;align-items:center;gap:16px;padding:4px 8px;flex-wrap:wrap;border-radius:2px;border-left:3px solid var(--zp-luminous);background-color:var(--zp-secondary-background)}.lr-layout-control .ctrl-item[data-v-810a0fc5]{display:flex;align-items:center;gap:4px;flex-wrap:nowrap}.select-actions[data-v-b04c3508]>:not(:last-child){margin-right:4px}.float-panel[data-v-b04c3508]{position:absolute;bottom:32px;right:32px;background:var(--zp-primary-background);border-radius:4px;z-index:1000;padding:8px;box-shadow:0 0 4px var(--zp-secondary)}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
.full-screen-menu[data-v-6d0bf78c]{position:fixed;z-index:9999;background:var(--zp-primary-background);padding:8px 16px;box-shadow:0 0 4px var(--zp-secondary);border-radius:4px}.full-screen-menu .tags-container[data-v-6d0bf78c]{margin:4px 0}.full-screen-menu .tags-container .tag[data-v-6d0bf78c]{margin-right:4px;margin-bottom:4px;padding:2px 16px;border-radius:4px;display:inline-block;cursor:pointer;font-weight:700;transition:.5s all ease;border:2px solid var(--tag-color);color:var(--tag-color);background:var(--zp-primary-background);user-select:none}.full-screen-menu .tags-container .tag.selected[data-v-6d0bf78c]{background:var(--tag-color);color:#fff}.full-screen-menu .container[data-v-6d0bf78c]{height:100%;display:flex;overflow:hidden;flex-direction:column}.full-screen-menu .gen-info[data-v-6d0bf78c]{flex:1;word-break:break-all;white-space:pre-line;overflow:auto;z-index:1;padding-top:4px;position:relative}.full-screen-menu .gen-info code[data-v-6d0bf78c]{font-size:.9em;display:block;padding:4px;background:var(--zp-primary-background);border-radius:4px;margin-right:20px;white-space:pre-wrap;word-break:break-word;line-height:1.78em}.full-screen-menu .gen-info code[data-v-6d0bf78c] span{background:var(--zp-secondary-variant-background);color:var(--zp-primary);padding:2px 4px;border-radius:4px;margin-right:4px}.full-screen-menu .gen-info code[data-v-6d0bf78c] .has-parentheses{background:rgba(255,100,100,.14)}.full-screen-menu .gen-info code[data-v-6d0bf78c] span:hover{background:rgba(120,0,0,.15)}.full-screen-menu .gen-info table[data-v-6d0bf78c]{font-size:1em;border-radius:4px;border-collapse:separate;margin-bottom:3em}.full-screen-menu .gen-info table tr td[data-v-6d0bf78c]:first-child{white-space:nowrap}.full-screen-menu .gen-info table td[data-v-6d0bf78c]{padding-right:14px;padding-left:4px;border-bottom:1px solid var(--zp-secondary);border-collapse:collapse}.full-screen-menu .gen-info .info-tags .info-tag[data-v-6d0bf78c]{display:inline-block;overflow:hidden;border-radius:4px;margin-right:8px;border:2px solid var(--zp-primary)}.full-screen-menu .gen-info .info-tags .name[data-v-6d0bf78c]{background-color:var(--zp-primary);color:var(--zp-primary-background);padding:4px;border-bottom-right-radius:4px}.full-screen-menu .gen-info .info-tags .value[data-v-6d0bf78c]{padding:4px}.full-screen-menu.unset-size[data-v-6d0bf78c]{width:unset!important;height:unset!important}.full-screen-menu .mouse-sensor[data-v-6d0bf78c]{position:absolute;bottom:0;right:0;transform:rotate(90deg);cursor:se-resize;z-index:1;background:var(--zp-primary-background);border-radius:2px}.full-screen-menu .mouse-sensor>*[data-v-6d0bf78c]{font-size:18px;padding:4px}.full-screen-menu .action-bar[data-v-6d0bf78c]{display:flex;align-items:center;user-select:none;gap:4px}.full-screen-menu .action-bar .icon[data-v-6d0bf78c]{font-size:1.5em;padding:2px 4px;border-radius:4px}.full-screen-menu .action-bar .icon[data-v-6d0bf78c]:hover{background:var(--zp-secondary-variant-background)}.full-screen-menu .action-bar>*[data-v-6d0bf78c]{flex-wrap:wrap}.full-screen-menu.lr[data-v-6d0bf78c]{top:var(--6d199430)!important;right:0!important;bottom:0!important;left:100vw!important;height:unset!important;width:var(--44764cdb)!important;transition:left ease .3s}.full-screen-menu.lr.always-on[data-v-6d0bf78c],.full-screen-menu.lr.mouse-in[data-v-6d0bf78c]{left:var(--519f1f5f)!important}.lr-layout-control[data-v-6d0bf78c]{display:flex;align-items:center;gap:16px;padding:4px 8px;flex-wrap:wrap;border-radius:2px;border-left:3px solid var(--zp-luminous);background-color:var(--zp-secondary-background)}.lr-layout-control .ctrl-item[data-v-6d0bf78c]{display:flex;align-items:center;gap:4px;flex-wrap:nowrap}.select-actions[data-v-b04c3508]>:not(:last-child){margin-right:4px}.float-panel[data-v-b04c3508]{position:absolute;bottom:32px;right:32px;background:var(--zp-primary-background);border-radius:4px;z-index:1000;padding:8px;box-shadow:0 0 4px var(--zp-secondary)}

View File

@ -1 +0,0 @@
[data-v-4bc4969a] .float-panel{position:fixed}.regex-icon[data-v-4bc4969a]{user-select:none;padding:4px;margin:0 4px;cursor:pointer;border:1px solid var(--zp-border);border-radius:4px}.regex-icon img[data-v-4bc4969a]{height:1.5em}.regex-icon[data-v-4bc4969a]:hover{background:var(--zp-border)}.regex-icon.selected[data-v-4bc4969a]{background:var(--primary-color-1);border:1px solid var(--primary-color)}.search-bar[data-v-4bc4969a]{padding:8px 8px 0;display:flex}.search-bar.last[data-v-4bc4969a]{padding-bottom:8px}.search-bar .form-name[data-v-4bc4969a]{flex-shrink:0;padding:4px 8px}.search-bar .actions>*[data-v-4bc4969a]{margin-right:4px}.container[data-v-4bc4969a]{background:var(--zp-secondary-background);position:relative}.container .file-list[data-v-4bc4969a]{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

View File

@ -0,0 +1 @@
[data-v-9cf612bf] .float-panel{position:fixed}.regex-icon[data-v-9cf612bf]{user-select:none;padding:4px;margin:0 4px;cursor:pointer;border:1px solid var(--zp-border);border-radius:4px}.regex-icon img[data-v-9cf612bf]{height:1.5em}.regex-icon[data-v-9cf612bf]:hover{background:var(--zp-border)}.regex-icon.selected[data-v-9cf612bf]{background:var(--primary-color-1);border:1px solid var(--primary-color)}.search-bar[data-v-9cf612bf]{padding:8px 8px 0;display:flex}.search-bar.last[data-v-9cf612bf]{padding-bottom:8px}.search-bar .form-name[data-v-9cf612bf]{flex-shrink:0;padding:4px 8px}.search-bar .actions>*[data-v-9cf612bf]{margin-right:4px}.container[data-v-9cf612bf]{background:var(--zp-secondary-background);position:relative}.container .file-list[data-v-9cf612bf]{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

View File

@ -1 +1 @@
import{d as v,cH as I,bX as C,N as l,O as _,Q as f,c,Y as r,R as h,S as d,Z as e,X as F,a9 as z,ca as B,cI as x,af as R,V as S}from"./index-11413b17.js";import{u as $,a as V,k as E,F as A,d as N}from"./FileItem-431a5775.js";import"./functionalCallableComp-2ff9816d.js";import"./index-7ad2febc.js";/* empty css */const T={class:"actions-panel actions"},H={key:0,class:"file-list"},L={class:"hint"},U=v({__name:"batchDownload",props:{tabIdx:{},paneIdx:{},id:{}},setup(O){const{stackViewEl:w}=$().toRefs(),{itemSize:p,gridItems:k,cellWidth:b}=V(),i=E(),{selectdFiles:n}=I(i),u=C(),y=async t=>{const s=B(t);s&&i.addFiles(s.nodes)},D=async()=>{u.pushAction(async()=>{const t=await x.value.post("/zip",{paths:n.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=>{n.value.splice(t,1)};return(t,s)=>{const a=R;return l(),_("div",{class:"container",ref_key:"stackViewEl",ref:w,onDrop:y},[f("div",T,[c(a,{onClick:s[0]||(s[0]=o=>e(i).selectdFiles=[])},{default:r(()=>[h(d(t.$t("clear")),1)]),_:1}),c(a,{onClick:D,type:"primary",loading:!e(u).isIdle},{default:r(()=>[h(d(t.$t("zipDownload")),1)]),_:1},8,["loading"])]),e(n).length?(l(),F(e(N),{key:1,ref:"scroller",class:"file-list",items:e(n).slice(),"item-size":e(p).first,"key-field":"fullpath","item-secondary-size":e(p).second,gridItems:e(k)},{default:r(({item:o,index:m})=>[c(A,{idx:m,file:o,"cell-width":e(b),"enable-close-icon":"",onCloseIconClick:Q=>g(m),"full-screen-preview-image-url":e(z)(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"])):(l(),_("div",H,[f("p",L,d(t.$t("batchDownloaDDragAndDropHint")),1)]))],544)}}});const Z=S(U,[["__scopeId","data-v-aab31da2"]]);export{Z as default};
import{d as v,cI as I,bX as C,N as l,O as _,Q as f,c,Y as r,R as h,S as d,Z as e,X as F,a9 as z,ca as B,cJ as x,af as R,V as S}from"./index-5ad9f674.js";import{u as $,a as V,k as E,F as A,d as N}from"./FileItem-28d2dfc5.js";import"./functionalCallableComp-fb332440.js";import"./index-b56880ed.js";/* empty css */const T={class:"actions-panel actions"},L={key:0,class:"file-list"},U={class:"hint"},H=v({__name:"batchDownload",props:{tabIdx:{},paneIdx:{},id:{}},setup(O){const{stackViewEl:w}=$().toRefs(),{itemSize:p,gridItems:k,cellWidth:b}=V(),i=E(),{selectdFiles:n}=I(i),u=C(),y=async t=>{const s=B(t);s&&i.addFiles(s.nodes)},D=async()=>{u.pushAction(async()=>{const t=await x.value.post("/zip",{paths:n.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=>{n.value.splice(t,1)};return(t,s)=>{const a=R;return l(),_("div",{class:"container",ref_key:"stackViewEl",ref:w,onDrop:y},[f("div",T,[c(a,{onClick:s[0]||(s[0]=o=>e(i).selectdFiles=[])},{default:r(()=>[h(d(t.$t("clear")),1)]),_:1}),c(a,{onClick:D,type:"primary",loading:!e(u).isIdle},{default:r(()=>[h(d(t.$t("zipDownload")),1)]),_:1},8,["loading"])]),e(n).length?(l(),F(e(N),{key:1,ref:"scroller",class:"file-list",items:e(n).slice(),"item-size":e(p).first,"key-field":"fullpath","item-secondary-size":e(p).second,gridItems:e(k)},{default:r(({item:o,index:m})=>[c(A,{idx:m,file:o,"cell-width":e(b),"enable-close-icon":"",onCloseIconClick:Q=>g(m),"full-screen-preview-image-url":e(z)(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"])):(l(),_("div",L,[f("p",U,d(t.$t("batchDownloaDDragAndDropHint")),1)]))],544)}}});const Y=S(H,[["__scopeId","data-v-aab31da2"]]);export{Y as default};

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
import{c as o,A as g,cI as i,co as b,W as w,ad as c,dc as y,dd as h,af as x,ch as O,a9 as I,x as r,de as S,az as F,v as M,r as m,ae as v,q as k,R as D,df as _}from"./index-11413b17.js";function R(t){var e=t==null?0:t.length;return e?t[e-1]:void 0}var P={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M505.7 661a8 8 0 0012.6 0l112-141.7c4.1-5.2.4-12.9-6.3-12.9h-74.1V168c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v338.3H400c-6.7 0-10.4 7.7-6.3 12.9l112 141.8zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z"}}]},name:"download",theme:"outlined"};const V=P;function p(t){for(var e=1;e<arguments.length;e++){var a=arguments[e]!=null?Object(arguments[e]):{},n=Object.keys(a);typeof Object.getOwnPropertySymbols=="function"&&(n=n.concat(Object.getOwnPropertySymbols(a).filter(function(l){return Object.getOwnPropertyDescriptor(a,l).enumerable}))),n.forEach(function(l){j(t,l,a[l])})}return t}function j(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}var d=function(e,a){var n=p({},e,a.attrs);return o(g,p({},n,{icon:V}),null)};d.displayName="DownloadOutlined";d.inheritAttrs=!1;const C=d,T=async t=>(await i.value.get("/files",{params:{folder_path:t}})).data,U=async t=>(await i.value.post("/delete_files",{file_paths:t})).data,A=async(t,e,a)=>(await i.value.post("/move_files",{file_paths:t,dest:e,create_dest_folder:a})).data,E=async(t,e,a)=>(await i.value.post("/copy_files",{file_paths:t,dest:e,create_dest_folder:a})).data,N=async t=>{await i.value.post("/mkdirs",{dest_folder:t})},H=t=>{const e=m("");return new Promise(a=>{c.confirm({title:r("inputFolderName"),content:()=>o(v,{value:e.value,"onUpdate:value":n=>e.value=n},null),async onOk(){if(!e.value)return;const n=k(t,e.value);await N(n),a()}})})},W=()=>o("p",{style:{background:"var(--zp-secondary-background)",padding:"8px",borderLeft:"4px solid var(--primary-color)"}},[D("Tips: "),r("multiSelectTips")]),$=(t,e)=>{const a=b(),n=w(),l=s=>{var u;return!!((u=a.tagMap.get(t.fullpath))!=null&&u.some(f=>f.id===s))};c.confirm({width:"80vw",title:t.name,icon:null,content:()=>o("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",flexDirection:"column"}},[o("video",{style:{maxHeight:y?"80vh":"60vh",maxWidth:"100%",minWidth:"70%"},src:h(t),controls:!0,autoplay:!0},null),o("div",{style:{marginTop:"4px"}},[n.conf.all_custom_tags.map(s=>o("div",{key:s.id,onClick:()=>e==null?void 0:e(s.id),style:{background:l(s.id)?a.getColor(s.name):"var(--zp-primary-background)",color:l(s.id)?"white":a.getColor(s.name),margin:"2px",padding:"2px 16px","border-radius":"4px",display:"inline-block",cursor:"pointer","font-weight":"bold",transition:".5s all ease",border:`2px solid ${a.getColor(s.name)}`,"user-select":"none"}},[s.name]))]),o("div",{class:"actions",style:{marginTop:"16px"}},[o(x,{onClick:()=>O([I(t,!0)])},{icon:o(C,null,null),default:r("download")})])]),maskClosable:!0,wrapClassName:"hidden-antd-btns-modal"})},B=()=>{c.confirm({title:r("confirmRebuildImageIndex"),onOk:async()=>{await S(),F.emit("searchIndexExpired"),M.success(r("rebuildComplete"))}})},q=t=>{const e=m(t.split(/[\\/]/).pop()??"");return new Promise(a=>{c.confirm({title:r("rename"),content:()=>o(v,{value:e.value,"onUpdate:value":n=>e.value=n},null),async onOk(){if(!e.value)return;const n=await _({path:t,name:e.value});a(n.new_path)}})})};export{W as M,B as a,q as b,E as c,U as d,$ as e,T as g,R as l,A as m,H as o};
import{c as o,A as g,cJ as i,co as b,W as w,ad as c,dc as y,dd as h,af as x,ch as O,a9 as S,x as r,de as F,az as I,v as M,r as m,ae as v,q as k,R as D,df as _}from"./index-5ad9f674.js";function R(t){var e=t==null?0:t.length;return e?t[e-1]:void 0}var P={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M505.7 661a8 8 0 0012.6 0l112-141.7c4.1-5.2.4-12.9-6.3-12.9h-74.1V168c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v338.3H400c-6.7 0-10.4 7.7-6.3 12.9l112 141.8zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z"}}]},name:"download",theme:"outlined"};const V=P;function p(t){for(var e=1;e<arguments.length;e++){var a=arguments[e]!=null?Object(arguments[e]):{},n=Object.keys(a);typeof Object.getOwnPropertySymbols=="function"&&(n=n.concat(Object.getOwnPropertySymbols(a).filter(function(l){return Object.getOwnPropertyDescriptor(a,l).enumerable}))),n.forEach(function(l){j(t,l,a[l])})}return t}function j(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}var d=function(e,a){var n=p({},e,a.attrs);return o(g,p({},n,{icon:V}),null)};d.displayName="DownloadOutlined";d.inheritAttrs=!1;const C=d,T=async t=>(await i.value.get("/files",{params:{folder_path:t}})).data,U=async t=>(await i.value.post("/delete_files",{file_paths:t})).data,A=async(t,e,a)=>(await i.value.post("/move_files",{file_paths:t,dest:e,create_dest_folder:a})).data,E=async(t,e,a)=>(await i.value.post("/copy_files",{file_paths:t,dest:e,create_dest_folder:a})).data,N=async t=>{await i.value.post("/mkdirs",{dest_folder:t})},H=t=>{const e=m("");return new Promise(a=>{c.confirm({title:r("inputFolderName"),content:()=>o(v,{value:e.value,"onUpdate:value":n=>e.value=n},null),async onOk(){if(!e.value)return;const n=k(t,e.value);await N(n),a()}})})},W=()=>o("p",{style:{background:"var(--zp-secondary-background)",padding:"8px",borderLeft:"4px solid var(--primary-color)"}},[D("Tips: "),r("multiSelectTips")]),$=(t,e)=>{const a=b(),n=w(),l=s=>{var u;return!!((u=a.tagMap.get(t.fullpath))!=null&&u.some(f=>f.id===s))};c.confirm({width:"80vw",title:t.name,icon:null,content:()=>o("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",flexDirection:"column"}},[o("video",{style:{maxHeight:y?"80vh":"60vh",maxWidth:"100%",minWidth:"70%"},src:h(t),controls:!0,autoplay:!0},null),o("div",{style:{marginTop:"4px"}},[n.conf.all_custom_tags.map(s=>o("div",{key:s.id,onClick:()=>e==null?void 0:e(s.id),style:{background:l(s.id)?a.getColor(s.name):"var(--zp-primary-background)",color:l(s.id)?"white":a.getColor(s.name),margin:"2px",padding:"2px 16px","border-radius":"4px",display:"inline-block",cursor:"pointer","font-weight":"bold",transition:".5s all ease",border:`2px solid ${a.getColor(s.name)}`,"user-select":"none"}},[s.name]))]),o("div",{class:"actions",style:{marginTop:"16px"}},[o(x,{onClick:()=>O([S(t,!0)])},{icon:o(C,null,null),default:r("download")})])]),maskClosable:!0,wrapClassName:"hidden-antd-btns-modal"})},B=()=>{c.confirm({title:r("confirmRebuildImageIndex"),onOk:async()=>{await F(),I.emit("searchIndexExpired"),M.success(r("rebuildComplete"))}})},q=t=>{const e=m(t.split(/[\\/]/).pop()??"");return new Promise(a=>{c.confirm({title:r("rename"),content:()=>o(v,{value:e.value,"onUpdate:value":n=>e.value=n},null),async onOk(){if(!e.value)return;const n=await _({path:t,name:e.value});a(n.new_path)}})})};export{W as M,B as a,q as b,E as c,U as d,$ as e,T as g,R as l,A as m,H as o};

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
import{u as w,a as y,F as k,d as x}from"./FileItem-431a5775.js";import{d as b,W as F,co as h,r as D,b7 as I,bb as C,N as V,O as E,c,Y as z,Z as e,a9 as S,ca as B,cJ as R,V as A}from"./index-11413b17.js";import"./functionalCallableComp-2ff9816d.js";import"./index-7ad2febc.js";/* empty css */const K=b({__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}=y(),g=h(),s=D(o.files??[]),_=async a=>{const l=B(a);o.allowDragAndDrop&&l&&(s.value=R([...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)=>(V(),E("div",{class:"container",ref_key:"stackViewEl",ref:m,onDrop:_},[c(e(x),{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:z(({item:t,index:r})=>{var n;return[c(k,{idx:r,file:t,"cell-width":e(f),"enable-close-icon":o.removable,onCloseIconClick:N=>v(r),"full-screen-preview-image-url":e(S)(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 H=A(K,[["__scopeId","data-v-f35f4802"]]);export{H as default};
import{u as w,a as y,F as k,d as x}from"./FileItem-28d2dfc5.js";import{d as b,W as F,co as h,r as D,b7 as I,bb as C,N as V,O as E,c,Y as z,Z as e,a9 as S,ca as B,cK as K,V as R}from"./index-5ad9f674.js";import"./functionalCallableComp-fb332440.js";import"./index-b56880ed.js";/* empty css */const A=b({__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}=y(),g=h(),s=D(o.files??[]),_=async a=>{const l=B(a);o.allowDragAndDrop&&l&&(s.value=K([...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)=>(V(),E("div",{class:"container",ref_key:"stackViewEl",ref:m,onDrop:_},[c(e(x),{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:z(({item:t,index:r})=>{var n;return[c(k,{idx:r,file:t,"cell-width":e(f),"enable-close-icon":o.removable,onCloseIconClick:N=>v(r),"full-screen-preview-image-url":e(S)(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 H=R(A,[["__scopeId","data-v-f35f4802"]]);export{H as default};

View File

@ -1 +0,0 @@
import{ah as F,r as g,c5 as q,c6 as A,H as b,B as D,bX as N,bk as z,c7 as G}from"./index-11413b17.js";import{u as H,a as L,b as O,e as Q}from"./FileItem-431a5775.js";import{a as j,b as B,c as T}from"./MultiSelectKeep-3c32b446.js";let U=0;const W=()=>++U,X=(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=W();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 p=yield o(r);if(v.has(s))return v.delete(s),!1;w(c(p));const i=p.cursor;if((e===n.length-1||typeof e!="number")&&(u.value=!i.has_next,i.has_next)){const I=i.next_cursor||i.next;b(typeof I=="string"),n.push(I)}}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())}),m=()=>({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]:m,iter:{[Symbol.asyncIterator]:m}})},$=o=>F(X(o,c=>c.files,{dataUpdateStrategy:"merge"})),ee=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}=H({images:l}).toRefs(),{itemSize:v,gridItems:w,cellWidth:d,onScroll:h}=L({fetchNext:()=>o.next()}),{showMenuIdx:S}=O(),{onFileDragStart:m,onFileDragEnd:e}=j(),{showGenInfo:s,imageGenInfo:r,q:p,onContextMenuClick:i,onFileItemClick:I}=B({openNext:z}),{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)};Q("removeFiles",async({paths:y})=>{y.forEach(x=>c.add(x))});const k=()=>{G(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:p,onContextMenuClick:i,onFileItemClick:I,showMenuIdx:S,multiSelectedIdxs:t,onFileDragStart:m,onFileDragEnd:e,cellWidth:d,onScroll:h,saveLoadedFileAsJson:k,saveAllFileAsJson:async()=>{for(;!o.load;)await o.next();k()}}};export{$ as c,ee as u};

1
vue/dist/assets/hook-d85a9a4b.js vendored Normal file
View File

@ -0,0 +1 @@
import{ah as F,r as g,c5 as D,c6 as A,H as b,B as N,bX as z,bk as G,c7 as H}from"./index-5ad9f674.js";import{u as L,a as O,b as Q,e as j}from"./FileItem-28d2dfc5.js";import{a as B,b as T,c as U}from"./MultiSelectKeep-b2238f90.js";let W=0;const X=()=>++W,K=(o,i,{dataUpdateStrategy:l="replace"}={})=>{const n=F([""]),c=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||c.value&&typeof e>"u")return!1;a.value=!0;const s=X();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 I=yield o(r);if(v.has(s))return v.delete(s),!1;w(i(I));const u=I.cursor;if((e===n.length-1||typeof e!="number")&&(c.value=!u.has_next,u.has_next)){const y=u.next_cursor||u.next;b(typeof y=="string"),n.push(y)}}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,c.value=!1,s&&(yield d())}),m=()=>({next:()=>A(void 0,void 0,void 0,function*(){if(a.value)throw new Error("不允许同时迭代");return{done:!(yield d()),value:t.value}})});return D({abort:h,load:c,next:d,res:t,loading:a,cursorStack:n,reset:S,[Symbol.asyncIterator]:m,iter:{[Symbol.asyncIterator]:m}})},ee=o=>F(K(o,i=>i.files,{dataUpdateStrategy:"merge"})),te=o=>{const i=F(new Set),l=N(()=>(o.res??[]).filter(p=>!i.has(p.fullpath))),n=z(),{stackViewEl:c,multiSelectedIdxs:t,stack:a,scroller:f,props:v}=L({images:l}).toRefs(),{itemSize:w,gridItems:d,cellWidth:h,onScroll:S}=O({fetchNext:()=>o.next()}),{showMenuIdx:m}=Q(),{onFileDragStart:e,onFileDragEnd:s}=B(),{showGenInfo:r,imageGenInfo:I,q:u,onContextMenuClick:y,onFileItemClick:C}=T({openNext:G}),{previewIdx:_,previewing:E,onPreviewVisibleChange:M,previewImgMove:J,canPreview:P}=U(),R=async(p,x,q)=>{a.value=[{curr:"",files:l.value}],await y(p,x,q)};j("removeFiles",async({paths:p})=>{p.forEach(x=>i.add(x))});const k=()=>{H(l.value)};return{images:l,scroller:f,queue:n,iter:o,onContextMenuClickU:R,stackViewEl:c,previewIdx:_,previewing:E,onPreviewVisibleChange:M,previewImgMove:J,canPreview:P,itemSize:w,gridItems:d,showGenInfo:r,imageGenInfo:I,q:u,onContextMenuClick:y,onFileItemClick:C,showMenuIdx:m,multiSelectedIdxs:t,onFileDragStart:e,onFileDragEnd:s,cellWidth:h,onScroll:S,saveLoadedFileAsJson:k,saveAllFileAsJson:async()=>{for(;!o.load;)await o.next();k()},props:v}};export{ee as c,te as u};

View File

@ -1 +1 @@
import{r as F,o as P,cB as K,ar as L,B as l,at as T,au as B,d as I,u as $,cC as _,b as y,ba as V,cD as A,aj as E,h as c,c as D,a as G}from"./index-11413b17.js";const W=function(){var o=F(!1);return P(function(){o.value=K()}),o};var M=Symbol("rowContextKey"),U=function(r){T(M,r)},k=function(){return L(M,{gutter:l(function(){}),wrap:l(function(){}),supportFlexGap:l(function(){})})};B("top","middle","bottom","stretch");B("start","end","center","space-around","space-between");var q=function(){return{align:String,justify:String,prefixCls:String,gutter:{type:[Number,Array,Object],default:0},wrap:{type:Boolean,default:void 0}}},H=I({compatConfig:{MODE:3},name:"ARow",props:q(),setup:function(r,N){var m=N.slots,v=$("row",r),d=v.prefixCls,h=v.direction,j,x=F({xs:!0,sm:!0,md:!0,lg:!0,xl:!0,xxl:!0,xxxl:!0}),S=W();P(function(){j=_.subscribe(function(e){var t=r.gutter||0;(!Array.isArray(t)&&y(t)==="object"||Array.isArray(t)&&(y(t[0])==="object"||y(t[1])==="object"))&&(x.value=e)})}),V(function(){_.unsubscribe(j)});var w=l(function(){var e=[0,0],t=r.gutter,n=t===void 0?0:t,s=Array.isArray(n)?n:[n,0];return s.forEach(function(i,b){if(y(i)==="object")for(var a=0;a<A.length;a++){var p=A[a];if(x.value[p]&&i[p]!==void 0){e[b]=i[p];break}}else e[b]=i||0}),e});U({gutter:w,supportFlexGap:S,wrap:l(function(){return r.wrap})});var R=l(function(){var e;return E(d.value,(e={},c(e,"".concat(d.value,"-no-wrap"),r.wrap===!1),c(e,"".concat(d.value,"-").concat(r.justify),r.justify),c(e,"".concat(d.value,"-").concat(r.align),r.align),c(e,"".concat(d.value,"-rtl"),h.value==="rtl"),e))}),O=l(function(){var e=w.value,t={},n=e[0]>0?"".concat(e[0]/-2,"px"):void 0,s=e[1]>0?"".concat(e[1]/-2,"px"):void 0;return n&&(t.marginLeft=n,t.marginRight=n),S.value?t.rowGap="".concat(e[1],"px"):s&&(t.marginTop=s,t.marginBottom=s),t});return function(){var e;return D("div",{class:R.value,style:O.value},[(e=m.default)===null||e===void 0?void 0:e.call(m)])}}});const Y=H;function J(o){return typeof o=="number"?"".concat(o," ").concat(o," auto"):/^\d+(\.\d+)?(px|em|rem|%)$/.test(o)?"0 0 ".concat(o):o}var Q=function(){return{span:[String,Number],order:[String,Number],offset:[String,Number],push:[String,Number],pull:[String,Number],xs:{type:[String,Number,Object],default:void 0},sm:{type:[String,Number,Object],default:void 0},md:{type:[String,Number,Object],default:void 0},lg:{type:[String,Number,Object],default:void 0},xl:{type:[String,Number,Object],default:void 0},xxl:{type:[String,Number,Object],default:void 0},xxxl:{type:[String,Number,Object],default:void 0},prefixCls:String,flex:[String,Number]}};const Z=I({compatConfig:{MODE:3},name:"ACol",props:Q(),setup:function(r,N){var m=N.slots,v=k(),d=v.gutter,h=v.supportFlexGap,j=v.wrap,x=$("col",r),S=x.prefixCls,w=x.direction,R=l(function(){var e,t=r.span,n=r.order,s=r.offset,i=r.push,b=r.pull,a=S.value,p={};return["xs","sm","md","lg","xl","xxl","xxxl"].forEach(function(g){var f,u={},C=r[g];typeof C=="number"?u.span=C:y(C)==="object"&&(u=C||{}),p=G(G({},p),{},(f={},c(f,"".concat(a,"-").concat(g,"-").concat(u.span),u.span!==void 0),c(f,"".concat(a,"-").concat(g,"-order-").concat(u.order),u.order||u.order===0),c(f,"".concat(a,"-").concat(g,"-offset-").concat(u.offset),u.offset||u.offset===0),c(f,"".concat(a,"-").concat(g,"-push-").concat(u.push),u.push||u.push===0),c(f,"".concat(a,"-").concat(g,"-pull-").concat(u.pull),u.pull||u.pull===0),c(f,"".concat(a,"-rtl"),w.value==="rtl"),f))}),E(a,(e={},c(e,"".concat(a,"-").concat(t),t!==void 0),c(e,"".concat(a,"-order-").concat(n),n),c(e,"".concat(a,"-offset-").concat(s),s),c(e,"".concat(a,"-push-").concat(i),i),c(e,"".concat(a,"-pull-").concat(b),b),e),p)}),O=l(function(){var e=r.flex,t=d.value,n={};if(t&&t[0]>0){var s="".concat(t[0]/2,"px");n.paddingLeft=s,n.paddingRight=s}if(t&&t[1]>0&&!h.value){var i="".concat(t[1]/2,"px");n.paddingTop=i,n.paddingBottom=i}return e&&(n.flex=J(e),j.value===!1&&!n.minWidth&&(n.minWidth=0)),n});return function(){var e;return D("div",{class:R.value,style:O.value},[(e=m.default)===null||e===void 0?void 0:e.call(m)])}}});export{Z as C,Y as R};
import{r as F,o as P,cC as K,ar as L,B as l,at as T,au as I,d as $,u as B,cD as _,b as y,ba as V,cE as A,aj as E,h as c,c as D,a as G}from"./index-5ad9f674.js";const W=function(){var o=F(!1);return P(function(){o.value=K()}),o};var M=Symbol("rowContextKey"),U=function(r){T(M,r)},k=function(){return L(M,{gutter:l(function(){}),wrap:l(function(){}),supportFlexGap:l(function(){})})};I("top","middle","bottom","stretch");I("start","end","center","space-around","space-between");var q=function(){return{align:String,justify:String,prefixCls:String,gutter:{type:[Number,Array,Object],default:0},wrap:{type:Boolean,default:void 0}}},H=$({compatConfig:{MODE:3},name:"ARow",props:q(),setup:function(r,N){var m=N.slots,v=B("row",r),d=v.prefixCls,h=v.direction,j,x=F({xs:!0,sm:!0,md:!0,lg:!0,xl:!0,xxl:!0,xxxl:!0}),S=W();P(function(){j=_.subscribe(function(e){var t=r.gutter||0;(!Array.isArray(t)&&y(t)==="object"||Array.isArray(t)&&(y(t[0])==="object"||y(t[1])==="object"))&&(x.value=e)})}),V(function(){_.unsubscribe(j)});var w=l(function(){var e=[0,0],t=r.gutter,n=t===void 0?0:t,s=Array.isArray(n)?n:[n,0];return s.forEach(function(i,b){if(y(i)==="object")for(var a=0;a<A.length;a++){var p=A[a];if(x.value[p]&&i[p]!==void 0){e[b]=i[p];break}}else e[b]=i||0}),e});U({gutter:w,supportFlexGap:S,wrap:l(function(){return r.wrap})});var R=l(function(){var e;return E(d.value,(e={},c(e,"".concat(d.value,"-no-wrap"),r.wrap===!1),c(e,"".concat(d.value,"-").concat(r.justify),r.justify),c(e,"".concat(d.value,"-").concat(r.align),r.align),c(e,"".concat(d.value,"-rtl"),h.value==="rtl"),e))}),O=l(function(){var e=w.value,t={},n=e[0]>0?"".concat(e[0]/-2,"px"):void 0,s=e[1]>0?"".concat(e[1]/-2,"px"):void 0;return n&&(t.marginLeft=n,t.marginRight=n),S.value?t.rowGap="".concat(e[1],"px"):s&&(t.marginTop=s,t.marginBottom=s),t});return function(){var e;return D("div",{class:R.value,style:O.value},[(e=m.default)===null||e===void 0?void 0:e.call(m)])}}});const Y=H;function J(o){return typeof o=="number"?"".concat(o," ").concat(o," auto"):/^\d+(\.\d+)?(px|em|rem|%)$/.test(o)?"0 0 ".concat(o):o}var Q=function(){return{span:[String,Number],order:[String,Number],offset:[String,Number],push:[String,Number],pull:[String,Number],xs:{type:[String,Number,Object],default:void 0},sm:{type:[String,Number,Object],default:void 0},md:{type:[String,Number,Object],default:void 0},lg:{type:[String,Number,Object],default:void 0},xl:{type:[String,Number,Object],default:void 0},xxl:{type:[String,Number,Object],default:void 0},xxxl:{type:[String,Number,Object],default:void 0},prefixCls:String,flex:[String,Number]}};const Z=$({compatConfig:{MODE:3},name:"ACol",props:Q(),setup:function(r,N){var m=N.slots,v=k(),d=v.gutter,h=v.supportFlexGap,j=v.wrap,x=B("col",r),S=x.prefixCls,w=x.direction,R=l(function(){var e,t=r.span,n=r.order,s=r.offset,i=r.push,b=r.pull,a=S.value,p={};return["xs","sm","md","lg","xl","xxl","xxxl"].forEach(function(g){var f,u={},C=r[g];typeof C=="number"?u.span=C:y(C)==="object"&&(u=C||{}),p=G(G({},p),{},(f={},c(f,"".concat(a,"-").concat(g,"-").concat(u.span),u.span!==void 0),c(f,"".concat(a,"-").concat(g,"-order-").concat(u.order),u.order||u.order===0),c(f,"".concat(a,"-").concat(g,"-offset-").concat(u.offset),u.offset||u.offset===0),c(f,"".concat(a,"-").concat(g,"-push-").concat(u.push),u.push||u.push===0),c(f,"".concat(a,"-").concat(g,"-pull-").concat(u.pull),u.pull||u.pull===0),c(f,"".concat(a,"-rtl"),w.value==="rtl"),f))}),E(a,(e={},c(e,"".concat(a,"-").concat(t),t!==void 0),c(e,"".concat(a,"-order-").concat(n),n),c(e,"".concat(a,"-offset-").concat(s),s),c(e,"".concat(a,"-push-").concat(i),i),c(e,"".concat(a,"-pull-").concat(b),b),e),p)}),O=l(function(){var e=r.flex,t=d.value,n={};if(t&&t[0]>0){var s="".concat(t[0]/2,"px");n.paddingLeft=s,n.paddingRight=s}if(t&&t[1]>0&&!h.value){var i="".concat(t[1]/2,"px");n.paddingTop=i,n.paddingBottom=i}return e&&(n.flex=J(e),j.value===!1&&!n.minWidth&&(n.minWidth=0)),n});return function(){var e;return D("div",{class:R.value,style:O.value},[(e=m.default)===null||e===void 0?void 0:e.call(m)])}}});export{Z as C,Y as R};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
import{d as z,bw as D,ar as A,cE as j,av as k,l as V,cF as B,cb as y,e as $,c as a,_ as T,h as r,a as P,bC as F,P as b}from"./index-11413b17.js";var M=["class","style"],O=function(){return{prefixCls:String,spinning:{type:Boolean,default:void 0},size:String,wrapperClassName:String,tip:b.any,delay:Number,indicator:b.any}},p=null;function W(t,n){return!!t&&!!n&&!isNaN(Number(n))}function G(t){var n=t.indicator;p=typeof n=="function"?n:function(){return a(n,null,null)}}const H=z({compatConfig:{MODE:3},name:"ASpin",inheritAttrs:!1,props:D(O(),{size:"default",spinning:!0,wrapperClassName:""}),setup:function(){return{originalUpdateSpinning:null,configProvider:A("configProvider",j)}},data:function(){var n=this.spinning,e=this.delay,i=W(n,e);return{sSpinning:n&&!i}},created:function(){this.originalUpdateSpinning=this.updateSpinning,this.debouncifyUpdateSpinning(this.$props)},mounted:function(){this.updateSpinning()},updated:function(){var n=this;k(function(){n.debouncifyUpdateSpinning(),n.updateSpinning()})},beforeUnmount:function(){this.cancelExistingSpin()},methods:{debouncifyUpdateSpinning:function(n){var e=n||this.$props,i=e.delay;i&&(this.cancelExistingSpin(),this.updateSpinning=V(this.originalUpdateSpinning,i))},updateSpinning:function(){var n=this.spinning,e=this.sSpinning;e!==n&&(this.sSpinning=n)},cancelExistingSpin:function(){var n=this.updateSpinning;n&&n.cancel&&n.cancel()},renderIndicator:function(n){var e="".concat(n,"-dot"),i=B(this,"indicator");return i===null?null:(Array.isArray(i)&&(i=i.length===1?i[0]:i),y(i)?$(i,{class:e}):p&&y(p())?$(p(),{class:e}):a("span",{class:"".concat(e," ").concat(n,"-dot-spin")},[a("i",{class:"".concat(n,"-dot-item")},null),a("i",{class:"".concat(n,"-dot-item")},null),a("i",{class:"".concat(n,"-dot-item")},null),a("i",{class:"".concat(n,"-dot-item")},null)]))}},render:function(){var n,e,i,o=this.$props,f=o.size,x=o.prefixCls,h=o.tip,d=h===void 0?(n=(e=this.$slots).tip)===null||n===void 0?void 0:n.call(e):h,N=o.wrapperClassName,l=this.$attrs,v=l.class,_=l.style,C=T(l,M),S=this.configProvider,U=S.getPrefixCls,E=S.direction,s=U("spin",x),u=this.sSpinning,w=(i={},r(i,s,!0),r(i,"".concat(s,"-sm"),f==="small"),r(i,"".concat(s,"-lg"),f==="large"),r(i,"".concat(s,"-spinning"),u),r(i,"".concat(s,"-show-text"),!!d),r(i,"".concat(s,"-rtl"),E==="rtl"),r(i,v,!!v),i),m=a("div",P(P({},C),{},{style:_,class:w}),[this.renderIndicator(s),d?a("div",{class:"".concat(s,"-text")},[d]):null]),g=F(this);if(g&&g.length){var c,I=(c={},r(c,"".concat(s,"-container"),!0),r(c,"".concat(s,"-blur"),u),c);return a("div",{class:["".concat(s,"-nested-loading"),N]},[u&&a("div",{key:"loading"},[m]),a("div",{class:I,key:"container"},[g])])}return m}});export{H as S,G as s};
import{d as z,bw as D,ar as A,cF as j,av as k,l as V,cG as B,cb as y,e as $,c as a,_ as T,h as r,a as P,bC as F,P as b}from"./index-5ad9f674.js";var G=["class","style"],M=function(){return{prefixCls:String,spinning:{type:Boolean,default:void 0},size:String,wrapperClassName:String,tip:b.any,delay:Number,indicator:b.any}},p=null;function O(t,n){return!!t&&!!n&&!isNaN(Number(n))}function q(t){var n=t.indicator;p=typeof n=="function"?n:function(){return a(n,null,null)}}const H=z({compatConfig:{MODE:3},name:"ASpin",inheritAttrs:!1,props:D(M(),{size:"default",spinning:!0,wrapperClassName:""}),setup:function(){return{originalUpdateSpinning:null,configProvider:A("configProvider",j)}},data:function(){var n=this.spinning,e=this.delay,i=O(n,e);return{sSpinning:n&&!i}},created:function(){this.originalUpdateSpinning=this.updateSpinning,this.debouncifyUpdateSpinning(this.$props)},mounted:function(){this.updateSpinning()},updated:function(){var n=this;k(function(){n.debouncifyUpdateSpinning(),n.updateSpinning()})},beforeUnmount:function(){this.cancelExistingSpin()},methods:{debouncifyUpdateSpinning:function(n){var e=n||this.$props,i=e.delay;i&&(this.cancelExistingSpin(),this.updateSpinning=V(this.originalUpdateSpinning,i))},updateSpinning:function(){var n=this.spinning,e=this.sSpinning;e!==n&&(this.sSpinning=n)},cancelExistingSpin:function(){var n=this.updateSpinning;n&&n.cancel&&n.cancel()},renderIndicator:function(n){var e="".concat(n,"-dot"),i=B(this,"indicator");return i===null?null:(Array.isArray(i)&&(i=i.length===1?i[0]:i),y(i)?$(i,{class:e}):p&&y(p())?$(p(),{class:e}):a("span",{class:"".concat(e," ").concat(n,"-dot-spin")},[a("i",{class:"".concat(n,"-dot-item")},null),a("i",{class:"".concat(n,"-dot-item")},null),a("i",{class:"".concat(n,"-dot-item")},null),a("i",{class:"".concat(n,"-dot-item")},null)]))}},render:function(){var n,e,i,o=this.$props,f=o.size,x=o.prefixCls,h=o.tip,d=h===void 0?(n=(e=this.$slots).tip)===null||n===void 0?void 0:n.call(e):h,N=o.wrapperClassName,l=this.$attrs,v=l.class,_=l.style,C=T(l,G),S=this.configProvider,U=S.getPrefixCls,w=S.direction,s=U("spin",x),u=this.sSpinning,E=(i={},r(i,s,!0),r(i,"".concat(s,"-sm"),f==="small"),r(i,"".concat(s,"-lg"),f==="large"),r(i,"".concat(s,"-spinning"),u),r(i,"".concat(s,"-show-text"),!!d),r(i,"".concat(s,"-rtl"),w==="rtl"),r(i,v,!!v),i),m=a("div",P(P({},C),{},{style:_,class:E}),[this.renderIndicator(s),d?a("div",{class:"".concat(s,"-text")},[d]):null]),g=F(this);if(g&&g.length){var c,I=(c={},r(c,"".concat(s,"-container"),!0),r(c,"".concat(s,"-blur"),u),c);return a("div",{class:["".concat(s,"-nested-loading"),N]},[u&&a("div",{key:"loading"},[m]),a("div",{class:I,key:"container"},[g])])}return m}});export{H as S,q as s};

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
import{R as y,C as v}from"./index-a22c536c.js";import{bJ as f,c as d,A as w,d as P,N as a,O as c,Q as r,T as S,a2 as b,aC as O,Y as R,R as u,S as p,Z as V,af as $,V as x,I as C,cp as _}from"./index-11413b17.js";const A=f(y),E=f(v);var H={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M878.3 392.1L631.9 145.7c-6.5-6.5-15-9.7-23.5-9.7s-17 3.2-23.5 9.7L423.8 306.9c-12.2-1.4-24.5-2-36.8-2-73.2 0-146.4 24.1-206.5 72.3-15.4 12.3-16.6 35.4-2.7 49.4l181.7 181.7-215.4 215.2a15.8 15.8 0 00-4.6 9.8l-3.4 37.2c-.9 9.4 6.6 17.4 15.9 17.4.5 0 1 0 1.5-.1l37.2-3.4c3.7-.3 7.2-2 9.8-4.6l215.4-215.4 181.7 181.7c6.5 6.5 15 9.7 23.5 9.7 9.7 0 19.3-4.2 25.9-12.4 56.3-70.3 79.7-158.3 70.2-243.4l161.1-161.1c12.9-12.8 12.9-33.8 0-46.8z"}}]},name:"pushpin",theme:"filled"};const L=H;function h(t){for(var e=1;e<arguments.length;e++){var s=arguments[e]!=null?Object(arguments[e]):{},n=Object.keys(s);typeof Object.getOwnPropertySymbols=="function"&&(n=n.concat(Object.getOwnPropertySymbols(s).filter(function(i){return Object.getOwnPropertyDescriptor(s,i).enumerable}))),n.forEach(function(i){N(t,i,s[i])})}return t}function N(t,e,s){return e in t?Object.defineProperty(t,e,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[e]=s,t}var l=function(e,s){var n=h({},e,s.attrs);return d(w,h({},n,{icon:L}),null)};l.displayName="PushpinFilled";l.inheritAttrs=!1;const z=l,F={class:"record-container"},I={style:{flex:"1"}},k={class:"rec-actions"},B=["onClick"],J=P({__name:"HistoryRecord",props:{records:{}},emits:["reuseRecord"],setup(t){return(e,s)=>{const n=$;return a(),c("div",null,[r("ul",F,[(a(!0),c(S,null,b(e.records.getRecords(),i=>(a(),c("li",{key:i.id,class:"record"},[r("div",I,[O(e.$slots,"default",{record:i},void 0,!0)]),r("div",k,[d(n,{onClick:g=>e.$emit("reuseRecord",i),type:"primary"},{default:R(()=>[u(p(e.$t("restore")),1)]),_:2},1032,["onClick"]),r("div",{class:"pin",onClick:g=>e.records.switchPin(i)},[d(V(z)),u(" "+p(e.records.isPinned(i)?e.$t("unpin"):e.$t("pin")),1)],8,B)])]))),128))])])}}});const T=x(J,[["__scopeId","data-v-834a248f"]]);class o{constructor(e=128,s=[],n=[]){this.maxLength=e,this.records=s,this.pinnedValues=n}isPinned(e){return this.pinnedValues.some(s=>s.id===e.id)}add(e){this.records.length>=this.maxLength&&this.records.pop(),this.records.unshift({...e,id:C()+Date.now(),time:new Date().toLocaleString()})}pin(e){const s=this.records.findIndex(n=>n.id===e.id);s!==-1&&this.records.splice(s,1),this.pinnedValues.push(e)}unpin(e){const s=this.pinnedValues.findIndex(n=>n.id===e.id);s!==-1&&this.pinnedValues.splice(s,1),this.records.unshift(e)}switchPin(e){this.isPinned(e)?this.unpin(e):this.pin(e)}getRecords(){return[...this.pinnedValues,...this.records]}}const m="iib://",q=_(`${m}fuzzy-search-HistoryRecord`,new o,{serializer:{read:t=>{const e=JSON.parse(t);return new o(e.maxLength,e.records,e.pinnedValues)},write:JSON.stringify}}),M=_(`${m}tag-search-HistoryRecord`,new o,{serializer:{read:t=>{const e=JSON.parse(t);return new o(e.maxLength,e.records,e.pinnedValues)},write:JSON.stringify}});export{T as H,E as _,A as a,q as f,M as t};
import{R as y,C as v}from"./index-23e7636b.js";import{bJ as f,c as d,A as w,d as P,N as a,O as c,Q as r,T as S,a2 as b,aC as O,Y as R,R as u,S as p,Z as V,af as $,V as x,I as C,cp as _}from"./index-5ad9f674.js";const A=f(y),E=f(v);var H={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M878.3 392.1L631.9 145.7c-6.5-6.5-15-9.7-23.5-9.7s-17 3.2-23.5 9.7L423.8 306.9c-12.2-1.4-24.5-2-36.8-2-73.2 0-146.4 24.1-206.5 72.3-15.4 12.3-16.6 35.4-2.7 49.4l181.7 181.7-215.4 215.2a15.8 15.8 0 00-4.6 9.8l-3.4 37.2c-.9 9.4 6.6 17.4 15.9 17.4.5 0 1 0 1.5-.1l37.2-3.4c3.7-.3 7.2-2 9.8-4.6l215.4-215.4 181.7 181.7c6.5 6.5 15 9.7 23.5 9.7 9.7 0 19.3-4.2 25.9-12.4 56.3-70.3 79.7-158.3 70.2-243.4l161.1-161.1c12.9-12.8 12.9-33.8 0-46.8z"}}]},name:"pushpin",theme:"filled"};const L=H;function h(t){for(var e=1;e<arguments.length;e++){var s=arguments[e]!=null?Object(arguments[e]):{},n=Object.keys(s);typeof Object.getOwnPropertySymbols=="function"&&(n=n.concat(Object.getOwnPropertySymbols(s).filter(function(i){return Object.getOwnPropertyDescriptor(s,i).enumerable}))),n.forEach(function(i){N(t,i,s[i])})}return t}function N(t,e,s){return e in t?Object.defineProperty(t,e,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[e]=s,t}var l=function(e,s){var n=h({},e,s.attrs);return d(w,h({},n,{icon:L}),null)};l.displayName="PushpinFilled";l.inheritAttrs=!1;const z=l,F={class:"record-container"},I={style:{flex:"1"}},k={class:"rec-actions"},B=["onClick"],J=P({__name:"HistoryRecord",props:{records:{}},emits:["reuseRecord"],setup(t){return(e,s)=>{const n=$;return a(),c("div",null,[r("ul",F,[(a(!0),c(S,null,b(e.records.getRecords(),i=>(a(),c("li",{key:i.id,class:"record"},[r("div",I,[O(e.$slots,"default",{record:i},void 0,!0)]),r("div",k,[d(n,{onClick:g=>e.$emit("reuseRecord",i),type:"primary"},{default:R(()=>[u(p(e.$t("restore")),1)]),_:2},1032,["onClick"]),r("div",{class:"pin",onClick:g=>e.records.switchPin(i)},[d(V(z)),u(" "+p(e.records.isPinned(i)?e.$t("unpin"):e.$t("pin")),1)],8,B)])]))),128))])])}}});const T=x(J,[["__scopeId","data-v-834a248f"]]);class o{constructor(e=128,s=[],n=[]){this.maxLength=e,this.records=s,this.pinnedValues=n}isPinned(e){return this.pinnedValues.some(s=>s.id===e.id)}add(e){this.records.length>=this.maxLength&&this.records.pop(),this.records.unshift({...e,id:C()+Date.now(),time:new Date().toLocaleString()})}pin(e){const s=this.records.findIndex(n=>n.id===e.id);s!==-1&&this.records.splice(s,1),this.pinnedValues.push(e)}unpin(e){const s=this.pinnedValues.findIndex(n=>n.id===e.id);s!==-1&&this.pinnedValues.splice(s,1),this.records.unshift(e)}switchPin(e){this.isPinned(e)?this.unpin(e):this.pin(e)}getRecords(){return[...this.pinnedValues,...this.records]}}const m="iib://",q=_(`${m}fuzzy-search-HistoryRecord`,new o,{serializer:{read:t=>{const e=JSON.parse(t);return new o(e.maxLength,e.records,e.pinnedValues)},write:JSON.stringify}}),M=_(`${m}tag-search-HistoryRecord`,new o,{serializer:{read:t=>{const e=JSON.parse(t);return new o(e.maxLength,e.records,e.pinnedValues)},write:JSON.stringify}});export{T as H,E as _,A as a,q as f,M as t};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

2
vue/dist/index.html vendored
View File

@ -7,7 +7,7 @@
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Infinite Image Browsing</title>
<script type="module" crossorigin src="/infinite_image_browsing/fe-static/assets/index-11413b17.js"></script>
<script type="module" crossorigin src="/infinite_image_browsing/fe-static/assets/index-5ad9f674.js"></script>
<link rel="stylesheet" href="/infinite_image_browsing/fe-static/assets/index-f652cc2f.css">
</head>

View File

@ -49,10 +49,20 @@ const tags = computed(() => {
</a-sub-menu>
</template>
<a-menu-item key="rename">{{ $t('rename') }}</a-menu-item>
<a-menu-item key="send2BatchDownload">{{ $t('sendToBatchDownload') }}</a-menu-item>
<a-menu-item key="send2savedDir">{{ $t('send2savedDir') }}</a-menu-item>
<a-sub-menu key="copy2target" :title="$t('copyTo')">
<a-menu-item v-for="path in global.quickMovePaths" :key="`copy-to-${path.dir}`">{{ path.zh }}
</a-menu-item>
</a-sub-menu>
<a-sub-menu key="move2target" :title="$t('moveTo')">
<a-menu-item v-for="path in global.quickMovePaths" :key="`move-to-${path.dir}`">{{ path.zh }}
</a-menu-item>
</a-sub-menu>
<a-menu-divider />
<template v-if="isSelectedMutilFiles">
<a-sub-menu key="batch-add-tag" :title="$t('batchAddTag')">
<a-menu-item v-for="tag in tags" :key="`batch-add-tag-${tag.id}`">{{ tag.name }}
@ -68,11 +78,18 @@ const tags = computed(() => {
v-if="tag.selected" /><star-outlined v-else />
</a-menu-item>
</a-sub-menu>
<a-menu-divider />
<a-menu-item key="openFileLocationInNewTab">{{ $t('openFileLocationInNewTab') }}</a-menu-item>
<a-menu-item key="openWithLocalFileBrowser">{{ $t('openWithLocalFileBrowser') }}</a-menu-item>
</template>
<a-menu-divider />
<a-menu-item key="rename" >{{ $t('rename') }}</a-menu-item>
<a-menu-item key="previewInNewWindow">{{ $t('previewInNewWindow') }}</a-menu-item>
<a-menu-item key="download">{{ $t('download') }}</a-menu-item>
<a-menu-item key="copyPreviewUrl">{{ $t('copySourceFilePreviewLink') }}</a-menu-item>
<a-menu-item key="copyFilePath">{{ $t('copyFilePath') }}</a-menu-item>
</template>
</a-menu>
</template>

View File

@ -1,6 +1,13 @@
import type { IIBI18nMap } from '.'
export const en: IIBI18nMap = {
openFileLocationInNewTab: 'Open File Location in New Tab',
copyTo: 'Copy to',
moveTo: 'Move to',
moveSuccess: 'Move success',
copySuccess: 'Copy success',
copyFilePath: 'Copy file path',
previewMaskBackgroundOpacity: 'Preview Mask Background Opacity',
experimentalLRLayout: 'Experimental Side-by-Side Layout',
width: 'Width',

View File

@ -1,4 +1,10 @@
export const zhHans = {
openFileLocationInNewTab: '在新标签页打开文件位置',
copyTo: '复制到',
moveTo: '移动到',
moveSuccess: '移动成功',
copySuccess: '复制成功',
copyFilePath: '复制文件路径',
previewMaskBackgroundOpacity: '预览遮罩背景透明度',
experimentalLRLayout: '实验性并列布局',
width: '宽度',

View File

@ -1,6 +1,13 @@
import type { IIBI18nMap } from '.'
export const zhHant: Partial<IIBI18nMap> = {
openFileLocationInNewTab: '在新標籤頁打開文件位置',
copyTo: '複製到',
moveTo: '移動到',
moveSuccess: '移動成功',
copySuccess: '複製成功',
copyFilePath: '複製文件路徑',
previewMaskBackgroundOpacity: '預覽遮罩背景透明度',
experimentalLRLayout: '實驗性並列布局',
width: '寬度',

View File

@ -21,6 +21,7 @@ const props = defineProps<{
id: string
}>()
const iter = createImageSearchIter(cursor => getImagesByTags(props.selectedTagIds, cursor))
const {
queue,
@ -46,6 +47,7 @@ const {
cellWidth,
onScroll,
saveAllFileAsJson,
props: propsUpstream,
saveLoadedFileAsJson
} = useImageSearch(iter)
@ -60,6 +62,16 @@ watch(
{ immediate: true }
)
watch(
() => props,
async (v) => {
propsUpstream.value = v
},
{ deep: true, immediate: true}
)
const g = useGlobalStore()
const { onClearAllSelected, onSelectAll, onReverseSelect } = useKeepMultiSelect()
</script>

View File

@ -1,5 +1,5 @@
<script lang="ts" setup>
import { nextTick, onMounted, ref } from 'vue'
import { nextTick, onMounted, ref, watch } from 'vue'
import fileItemCell from '@/components/FileItem.vue'
import '@zanllp/vue-virtual-scroller/dist/vue-virtual-scroller.css'
// @ts-ignore
@ -57,7 +57,8 @@ const {
cellWidth,
onScroll,
saveAllFileAsJson,
saveLoadedFileAsJson
saveLoadedFileAsJson,
props: propsUpstream
} = useImageSearch(iter)
@ -73,6 +74,17 @@ onMounted(async () => {
}
})
watch(
() => props,
async (v) => {
propsUpstream.value = v
},
{ deep: true, immediate: true}
)
const onUpdateBtnClick = makeAsyncFunctionSingle(
() =>
queue.pushAction(async () => {

View File

@ -25,7 +25,7 @@ export const useImageSearch = (iter: ReturnType<typeof createImageSearchIter>) =
const deletedImagePahts = reactive(new Set<String>())
const images = computed(() => (iter.res ?? []).filter((v) => !deletedImagePahts.has(v.fullpath)))
const queue = createReactiveQueue()
const { stackViewEl, multiSelectedIdxs, stack, scroller } = useHookShareState({
const { stackViewEl, multiSelectedIdxs, stack, scroller, props } = useHookShareState({
images: images as any
}).toRefs()
const { itemSize, gridItems, cellWidth, onScroll } = useFilesDisplay({ fetchNext: () => iter.next() })
@ -87,6 +87,7 @@ export const useImageSearch = (iter: ReturnType<typeof createImageSearchIter>) =
cellWidth,
onScroll,
saveLoadedFileAsJson,
saveAllFileAsJson
saveAllFileAsJson,
props
}
}

View File

@ -203,11 +203,12 @@ useWatchDocument('dblclick', e => {
})
const showFullContent = computed(() => lr.value || state.value.expanded)
</script>
<template>
<div ref="el" class="full-screen-menu" @wheel.capture.stop
@keydown.capture="onKeydown"
<div ref="el" class="full-screen-menu" @wheel.capture.stop @keydown.capture="onKeydown"
:class="{ 'unset-size': !state.expanded, lr, 'always-on': lrMenuAlwaysOn, 'mouse-in': isInside }">
<div v-if="lr">
@ -220,7 +221,7 @@ useWatchDocument('dblclick', e => {
<div v-if="!lr" class="icon" style="cursor: pointer" @click="state.expanded = !state.expanded"
:title="t('clickToToggleMaximizeMinimize')">
<FullscreenExitOutlined v-if="state.expanded" />
<FullscreenExitOutlined v-if="showFullContent" />
<FullscreenOutlined v-else />
</div>
<div style="display: flex; flex-direction: column; align-items: center; cursor: grab" class="icon"
@ -236,8 +237,8 @@ useWatchDocument('dblclick', e => {
@context-menu-click="(e, f, i) => emit('contextMenuClick', e, f, i)" />
</template>
</a-dropdown>
<div flex-placeholder v-if="state.expanded" />
<div v-if="state.expanded" class="action-bar">
<div flex-placeholder v-if="showFullContent" />
<div v-if="showFullContent" class="action-bar">
<a-dropdown :trigger="['hover']" :get-popup-container="getParNode">
<a-button>{{ t('openContextMenu') }}</a-button>
@ -255,12 +256,21 @@ useWatchDocument('dblclick', e => {
</a-sub-menu>
</template>
<a-menu-item key="send2BatchDownload">{{ $t('sendToBatchDownload') }}</a-menu-item>
<a-menu-item key="send2savedDir">{{ $t('send2savedDir') }}</a-menu-item>
<a-sub-menu key="copy2target" :title="$t('copyTo')">
<a-menu-item v-for="path in global.quickMovePaths" :key="`copy-to-${path.dir}`">{{ path.zh }}
</a-menu-item>
</a-sub-menu>
<a-sub-menu key="move2target" :title="$t('moveTo')">
<a-menu-item v-for="path in global.quickMovePaths" :key="`move-to-${path.dir}`">{{ path.zh }}
</a-menu-item>
</a-sub-menu>
<a-menu-divider />
<a-menu-item key="deleteFiles">
{{ $t('deleteSelected') }}
</a-menu-item>
<a-menu-item key="previewInNewWindow">{{ $t('previewInNewWindow') }}</a-menu-item>
<a-menu-item key="copyPreviewUrl">{{ $t('copySourceFilePreviewLink') }}</a-menu-item>
<a-menu-item key="copyFilePath">{{ $t('copyFilePath') }}</a-menu-item>
</a-menu>
</template>
</a-dropdown>
@ -274,7 +284,7 @@ useWatchDocument('dblclick', e => {
}}</a-button>
</div>
</div>
<div class="gen-info" v-if="state.expanded">
<div class="gen-info" v-if="showFullContent">
<div class="info-tags">
<span class="info-tag" v-for="tag in baseInfoTags" :key="tag.name">
<span class="name">
@ -300,8 +310,8 @@ useWatchDocument('dblclick', e => {
<template v-if="lr">
<div class="ctrl-item">
{{ $t('width') }}: <a-input-number v-model:value="lrLayoutInfoPanelWidth" style="width:64px" :step="16" :min="128"
:max="1024" />
{{ $t('width') }}: <a-input-number v-model:value="lrLayoutInfoPanelWidth" style="width:64px" :step="16"
:min="128" :max="1024" />
</div>
<a-tooltip :title="$t('alwaysOnTooltipInfo')">
<div class="ctrl-item">

View File

@ -9,7 +9,7 @@ import {
createReactiveQueue,
isImageFile,
copy2clipboardI18n} from '@/util'
import { type FileNodeInfo, deleteFiles, moveFiles } from '@/api/files'
import { type FileNodeInfo, deleteFiles, moveFiles, copyFiles } from '@/api/files'
import { last, range, uniqueId } from 'lodash-es'
import * as Path from '@/util/path'
import { Checkbox, Modal, message } from 'ant-design-vue'
@ -153,10 +153,30 @@ export function useFileItemActions (
await tagStore.refreshTags(paths)
message.success(t(action === 'add' ? 'addCompleted' : 'removeCompleted'))
return
} else if (key.startsWith('copy-to-')){
const targetPath = key.split('copy-to-')[1]
const selectedFiles = getSelectedImg()
const paths = selectedFiles.map((v) => v.fullpath)
await copyFiles(paths, targetPath, true)
events.emit('addFiles', { files: selectedFiles, loc: targetPath })
message.success(t('copySuccess'))
return
} else if (key.startsWith('move-to-')){
const targetPath = key.split('move-to-')[1]
const selectedFiles = getSelectedImg()
const paths = selectedFiles.map((v) => v.fullpath)
await moveFiles(paths, targetPath, true)
events.emit('removeFiles', { paths, loc: currLocation.value })
events.emit('addFiles', { files: selectedFiles, loc: targetPath })
message.success(t('moveSuccess'))
return
}
switch (e.key) {
case 'previewInNewWindow':
return window.open(url)
case 'copyFilePath':
return copy2clipboardI18n(file.fullpath)
case 'saveSelectedAsJson':
return downloadFileInfoJSON(getSelectedImg())
case 'openWithDefaultApp':
@ -241,15 +261,15 @@ export function useFileItemActions (
tab.key = pane.key
break
}
case 'openFileLocationInNewTab':
case 'openInNewTab': {
stackCache.set(path, stack.value)
const tab = global.tabList[props.value.tabIdx]
const pane: FileTransferTabPane = {
type: 'local',
key: uniqueId(),
path: file.fullpath,
path: e.key === 'openInNewTab' ? file.fullpath : Path.getParentDirectory(file.fullpath),
name: t('local'),
stackKey: path
mode: 'scanned-fixed'
}
tab.panes.push(pane)
tab.key = pane.key

View File

@ -106,6 +106,10 @@ export function useFilesDisplay ({ fetchNext }: {fetchNext?: () => Promise<any>}
}
})
state.useEventListen('refresh', async () => {
state.eventEmitter.emit('viewableAreaFilesChange')
})
const onViewableAreaChangeDebounced = debounce(() => state.eventEmitter.emit('viewableAreaFilesChange'), 300)
watch(currLocation, onViewableAreaChangeDebounced)