Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0614dcd89b | ||
|
|
fcb248a5fe | ||
|
|
bf73e4dea3 | ||
|
|
b28952cb25 | ||
|
|
1e96fd9035 | ||
|
|
e423395ef0 | ||
|
|
65bbf44e3c |
16
CHANGELOG.md
16
CHANGELOG.md
@@ -2,6 +2,22 @@
|
|||||||
|
|
||||||
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
||||||
|
|
||||||
|
## [2.37.0](https://github.com/filebrowser/filebrowser/compare/v2.36.3...v2.37.0) (2025-07-08)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* Translate frontend/src/i18n/en.json in zh_CN ([65bbf44](https://github.com/filebrowser/filebrowser/commit/65bbf44e3c0bff83e64193d46e9d6ad302952276))
|
||||||
|
* Translate frontend/src/i18n/en.json in zh_TW ([b28952c](https://github.com/filebrowser/filebrowser/commit/b28952cb2582bd4eb44e91d0676e2803c458cf31))
|
||||||
|
* Translate frontend/src/i18n/en.json in zh_TW ([1e96fd9](https://github.com/filebrowser/filebrowser/commit/1e96fd9035d5185dc80970a2826ccb573b5f000e))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* long file name overlap ([fcb248a](https://github.com/filebrowser/filebrowser/commit/fcb248a5feb7b7404ca5923aae17f6d3f8d3cc96))
|
||||||
|
* preview PDF is correctly displayed ([bf73e4d](https://github.com/filebrowser/filebrowser/commit/bf73e4dea3b27c01c8f6e60fb2048e1a2122a70e))
|
||||||
|
* Upload progress size calculation ([e423395](https://github.com/filebrowser/filebrowser/commit/e423395ef0bcd106ddc7d460c055b95b5208415e))
|
||||||
|
|
||||||
### [2.36.3](https://github.com/filebrowser/filebrowser/compare/v2.36.2...v2.36.3) (2025-07-06)
|
### [2.36.3](https://github.com/filebrowser/filebrowser/compare/v2.36.2...v2.36.3) (2025-07-06)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -195,10 +195,6 @@ html[dir="rtl"] #listing {
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
#listing.list .item p.name:not(#listing.list .item.header .name) {
|
|
||||||
margin-right: -3em;
|
|
||||||
}
|
|
||||||
|
|
||||||
#listing.list .item .name {
|
#listing.list .item .name {
|
||||||
width: 50%;
|
width: 50%;
|
||||||
}
|
}
|
||||||
@@ -227,18 +223,18 @@ html[dir="rtl"] #listing {
|
|||||||
border-bottom: 1px solid var(--borderPrimary);
|
border-bottom: 1px solid var(--borderPrimary);
|
||||||
}
|
}
|
||||||
|
|
||||||
#listing.list .item.header > div:first-child {
|
#listing.list .item.header > div {
|
||||||
width: 0;
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#listing.list .item.header .name {
|
||||||
|
margin-right: 3em;
|
||||||
}
|
}
|
||||||
|
|
||||||
#listing.list .header a {
|
#listing.list .header a {
|
||||||
color: inherit;
|
color: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
#listing.list .item.header > div:first-child {
|
|
||||||
width: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#listing.list .name {
|
#listing.list .name {
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
word-wrap: break-word;
|
word-wrap: break-word;
|
||||||
|
|||||||
@@ -170,7 +170,7 @@
|
|||||||
"commandRunnerHelp": "你可以在此设置在下列事件中执行的命令。每行必须写一条命令。可以在命令中使用环境变量 {0} 和 {1},使 {0} 与 {1} 相关联。关于此功能和可用环境变量的更多信息,请阅读 {2}。",
|
"commandRunnerHelp": "你可以在此设置在下列事件中执行的命令。每行必须写一条命令。可以在命令中使用环境变量 {0} 和 {1},使 {0} 与 {1} 相关联。关于此功能和可用环境变量的更多信息,请阅读 {2}。",
|
||||||
"commandsUpdated": "命令已更新!",
|
"commandsUpdated": "命令已更新!",
|
||||||
"createUserDir": "在添加新用户的同时自动创建用户的主目录",
|
"createUserDir": "在添加新用户的同时自动创建用户的主目录",
|
||||||
"minimumPasswordLength": "Minimum password length",
|
"minimumPasswordLength": "最小密码长度",
|
||||||
"tusUploads": "分块上传",
|
"tusUploads": "分块上传",
|
||||||
"tusUploadsHelp": "File Browser 支持分块上传,在不佳的网络下也可进行高效、可靠、可续的文件上传",
|
"tusUploadsHelp": "File Browser 支持分块上传,在不佳的网络下也可进行高效、可靠、可续的文件上传",
|
||||||
"tusUploadsChunkSize": "分块上传大小,例如 10MB 或 1GB",
|
"tusUploadsChunkSize": "分块上传大小,例如 10MB 或 1GB",
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
"ok": "確認",
|
"ok": "確認",
|
||||||
"permalink": "獲取永久連結",
|
"permalink": "獲取永久連結",
|
||||||
"previous": "上一個",
|
"previous": "上一個",
|
||||||
"preview": "Preview",
|
"preview": "預覽",
|
||||||
"publish": "發佈",
|
"publish": "發佈",
|
||||||
"rename": "重新命名",
|
"rename": "重新命名",
|
||||||
"replace": "更換",
|
"replace": "更換",
|
||||||
@@ -170,7 +170,7 @@
|
|||||||
"commandRunnerHelp": "在這裡你可以設定在下面的事件中執行的命令。每行必須寫一條命令。可以在命令中使用環境變數 {0} 和 {1}。關於此功能和可用環境變數的更多資訊,請閱讀{2}.",
|
"commandRunnerHelp": "在這裡你可以設定在下面的事件中執行的命令。每行必須寫一條命令。可以在命令中使用環境變數 {0} 和 {1}。關於此功能和可用環境變數的更多資訊,請閱讀{2}.",
|
||||||
"commandsUpdated": "命令已更新!",
|
"commandsUpdated": "命令已更新!",
|
||||||
"createUserDir": "在新增新使用者的同時自動建立使用者的個人目錄",
|
"createUserDir": "在新增新使用者的同時自動建立使用者的個人目錄",
|
||||||
"minimumPasswordLength": "Minimum password length",
|
"minimumPasswordLength": "密碼最短長度",
|
||||||
"tusUploads": "分塊上傳",
|
"tusUploads": "分塊上傳",
|
||||||
"tusUploadsHelp": "File Browser 支援分塊上傳,在不佳的網絡環境下也可進行高效、可靠、可續的檔案上傳",
|
"tusUploadsHelp": "File Browser 支援分塊上傳,在不佳的網絡環境下也可進行高效、可靠、可續的檔案上傳",
|
||||||
"tusUploadsChunkSize": "分塊上傳大小,例如 10MB 或 1GB",
|
"tusUploadsChunkSize": "分塊上傳大小,例如 10MB 或 1GB",
|
||||||
|
|||||||
@@ -74,7 +74,12 @@ export const useUploadStore = defineStore("upload", {
|
|||||||
if (state.progress.length === 0 || state.sizes.length === 0) {
|
if (state.progress.length === 0 || state.sizes.length === 0) {
|
||||||
return "0 Bytes";
|
return "0 Bytes";
|
||||||
}
|
}
|
||||||
const sum = state.progress.reduce((acc, val) => +acc + +val, 0) as number;
|
const sum = state.progress.reduce(
|
||||||
|
(sum, p, i) =>
|
||||||
|
(sum as number) +
|
||||||
|
(typeof p === "number" ? p : p ? state.sizes[i] : 0),
|
||||||
|
0
|
||||||
|
) as number;
|
||||||
return formatSize(sum);
|
return formatSize(sum);
|
||||||
},
|
},
|
||||||
getTotalSize: (state) => {
|
getTotalSize: (state) => {
|
||||||
|
|||||||
@@ -162,7 +162,6 @@
|
|||||||
>
|
>
|
||||||
<div>
|
<div>
|
||||||
<div class="item header">
|
<div class="item header">
|
||||||
<div></div>
|
|
||||||
<div>
|
<div>
|
||||||
<p
|
<p
|
||||||
:class="{ active: nameSorted }"
|
:class="{ active: nameSorted }"
|
||||||
|
|||||||
@@ -60,7 +60,7 @@
|
|||||||
<div v-if="isEpub" class="epub-reader">
|
<div v-if="isEpub" class="epub-reader">
|
||||||
<vue-reader
|
<vue-reader
|
||||||
:location="location"
|
:location="location"
|
||||||
:url="raw"
|
:url="previewUrl"
|
||||||
:get-rendition="getRendition"
|
:get-rendition="getRendition"
|
||||||
:epubInitOptions="{
|
:epubInitOptions="{
|
||||||
requestCredentials: true,
|
requestCredentials: true,
|
||||||
@@ -87,11 +87,14 @@
|
|||||||
<span>{{ size }}%</span>
|
<span>{{ size }}%</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<ExtendedImage v-else-if="fileStore.req?.type == 'image'" :src="raw" />
|
<ExtendedImage
|
||||||
|
v-else-if="fileStore.req?.type == 'image'"
|
||||||
|
:src="previewUrl"
|
||||||
|
/>
|
||||||
<audio
|
<audio
|
||||||
v-else-if="fileStore.req?.type == 'audio'"
|
v-else-if="fileStore.req?.type == 'audio'"
|
||||||
ref="player"
|
ref="player"
|
||||||
:src="raw"
|
:src="previewUrl"
|
||||||
controls
|
controls
|
||||||
:autoplay="autoPlay"
|
:autoplay="autoPlay"
|
||||||
@play="autoPlay = true"
|
@play="autoPlay = true"
|
||||||
@@ -99,12 +102,12 @@
|
|||||||
<VideoPlayer
|
<VideoPlayer
|
||||||
v-else-if="fileStore.req?.type == 'video'"
|
v-else-if="fileStore.req?.type == 'video'"
|
||||||
ref="player"
|
ref="player"
|
||||||
:source="raw"
|
:source="previewUrl"
|
||||||
:subtitles="subtitles"
|
:subtitles="subtitles"
|
||||||
:options="videoOptions"
|
:options="videoOptions"
|
||||||
>
|
>
|
||||||
</VideoPlayer>
|
</VideoPlayer>
|
||||||
<object v-else-if="isPdf" class="pdf" :data="raw"></object>
|
<object v-else-if="isPdf" class="pdf" :data="previewUrl"></object>
|
||||||
<div v-else-if="fileStore.req?.type == 'blob'" class="info">
|
<div v-else-if="fileStore.req?.type == 'blob'" class="info">
|
||||||
<div class="title">
|
<div class="title">
|
||||||
<i class="material-icons">feedback</i>
|
<i class="material-icons">feedback</i>
|
||||||
@@ -119,7 +122,7 @@
|
|||||||
</a>
|
</a>
|
||||||
<a
|
<a
|
||||||
target="_blank"
|
target="_blank"
|
||||||
:href="raw"
|
:href="previewUrl"
|
||||||
class="button button--flat"
|
class="button button--flat"
|
||||||
v-if="!fileStore.req?.isDir"
|
v-if="!fileStore.req?.isDir"
|
||||||
>
|
>
|
||||||
@@ -256,16 +259,20 @@ const downloadUrl = computed(() =>
|
|||||||
fileStore.req ? api.getDownloadURL(fileStore.req, false) : ""
|
fileStore.req ? api.getDownloadURL(fileStore.req, false) : ""
|
||||||
);
|
);
|
||||||
|
|
||||||
const raw = computed(() => {
|
const previewUrl = computed(() => {
|
||||||
if (fileStore.req?.type === "image" && !fullSize.value) {
|
if (!fileStore.req) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fileStore.req.type === "image" && !fullSize.value) {
|
||||||
return api.getPreviewURL(fileStore.req, "big");
|
return api.getPreviewURL(fileStore.req, "big");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isEpub.value) {
|
if (isEpub.value) {
|
||||||
return createURL("api/raw" + fileStore.req?.path, {});
|
return createURL("api/raw" + fileStore.req.path, {});
|
||||||
}
|
}
|
||||||
|
|
||||||
return downloadUrl.value;
|
return api.getDownloadURL(fileStore.req, true);
|
||||||
});
|
});
|
||||||
|
|
||||||
const isPdf = computed(() => fileStore.req?.extension.toLowerCase() == ".pdf");
|
const isPdf = computed(() => fileStore.req?.extension.toLowerCase() == ".pdf");
|
||||||
|
|||||||
Reference in New Issue
Block a user