Compare commits
40 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0e3b35b30e | ||
|
|
05bfae264a | ||
|
|
4c233c3db3 | ||
|
|
7797a4ef18 | ||
|
|
d70650689c | ||
|
|
8dddc8a450 | ||
|
|
cdf8def330 | ||
|
|
e167c3e1ef | ||
|
|
fe5ca74aa1 | ||
|
|
dfad87386f | ||
|
|
6d7ba65faf | ||
|
|
d5487ba6fa | ||
|
|
34a08170c8 | ||
|
|
d49c3dfacf | ||
|
|
2cfee2183c | ||
|
|
fb1a09c7c1 | ||
|
|
b19710efca | ||
|
|
ff9502ff34 | ||
|
|
62f0dfb302 | ||
|
|
81cd8fc6d3 | ||
|
|
70c826133b | ||
|
|
2f6c473977 | ||
|
|
bf36cc00f1 | ||
|
|
883383a571 | ||
|
|
0a05f8c01f | ||
|
|
a4b089a6db | ||
|
|
5c5ab6b875 | ||
|
|
04e03a83b4 | ||
|
|
c4e955acf4 | ||
|
|
fc04578e28 | ||
|
|
3264cea830 | ||
|
|
748af7172c | ||
|
|
da595326ee | ||
|
|
821fba41a2 | ||
|
|
cfafefa35a | ||
|
|
391a078cd4 | ||
|
|
fc2ee37353 | ||
|
|
a09dfa8d9f | ||
|
|
4dbc802972 | ||
|
|
d59ad594b8 |
3
.github/PULL_REQUEST_TEMPLATE.md
vendored
3
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -4,12 +4,11 @@ Please explain the changes you made here.
|
|||||||
If the feature changes current behaviour, explain why your solution is better.
|
If the feature changes current behaviour, explain why your solution is better.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
:rotating_light: Before submitting your PR, please read [community](https://github.com/filebrowser/community), and indicate which issues (in any of the repos) are either fixed or closed by this PR. See [GitHub Help: Closing issues using keywords](https://help.github.com/articles/closing-issues-via-commit-messages/).
|
:rotating_light: Before submitting your PR, please indicate which issues are either fixed or closed by this PR. See [GitHub Help: Closing issues using keywords](https://help.github.com/articles/closing-issues-via-commit-messages/).
|
||||||
|
|
||||||
- [ ] DO make sure you are requesting to **pull a topic/feature/bugfix branch** (right side). Don't request your master!
|
- [ ] DO make sure you are requesting to **pull a topic/feature/bugfix branch** (right side). Don't request your master!
|
||||||
- [ ] DO make sure you are making a pull request against the **master branch** (left side). Also you should start *your branch* off *our master*.
|
- [ ] DO make sure you are making a pull request against the **master branch** (left side). Also you should start *your branch* off *our master*.
|
||||||
- [ ] DO make sure that File Browser can be successfully built. See [builds](https://github.com/filebrowser/community/blob/master/builds.md) and [development](https://github.com/filebrowser/community/blob/master/development.md).
|
- [ ] DO make sure that File Browser can be successfully built. See [builds](https://github.com/filebrowser/community/blob/master/builds.md) and [development](https://github.com/filebrowser/community/blob/master/development.md).
|
||||||
- [ ] DO make sure that related issues are opened in other repositories. I.e., the frontend, caddy plugins or the web page need to be updated accordingly.
|
|
||||||
- [ ] AVOID breaking the continuous integration build.
|
- [ ] AVOID breaking the continuous integration build.
|
||||||
|
|
||||||
**Further comments**
|
**Further comments**
|
||||||
|
|||||||
26
.github/workflows/main.yaml
vendored
26
.github/workflows/main.yaml
vendored
@@ -13,26 +13,26 @@ jobs:
|
|||||||
lint-frontend:
|
lint-frontend:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-node@v2
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: '18'
|
node-version: '18'
|
||||||
- run: make lint-frontend
|
- run: make lint-frontend
|
||||||
lint-backend:
|
lint-backend:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-go@v2
|
- uses: actions/setup-go@v5
|
||||||
with:
|
with:
|
||||||
go-version: 1.21.0
|
go-version: 1.21.0
|
||||||
- run: make lint-backend
|
- run: make lint-backend
|
||||||
lint-commits:
|
lint-commits:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- uses: actions/setup-node@v2
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: '18'
|
node-version: '18'
|
||||||
- run: make lint-commits
|
- run: make lint-commits
|
||||||
@@ -46,16 +46,16 @@ jobs:
|
|||||||
test-frontend:
|
test-frontend:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-node@v2
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: '18'
|
node-version: '18'
|
||||||
- run: make test-frontend
|
- run: make test-frontend
|
||||||
test-backend:
|
test-backend:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-go@v2
|
- uses: actions/setup-go@v5
|
||||||
with:
|
with:
|
||||||
go-version: 1.21.0
|
go-version: 1.21.0
|
||||||
- run: make test-backend
|
- run: make test-backend
|
||||||
@@ -71,13 +71,13 @@ jobs:
|
|||||||
needs: [lint, test]
|
needs: [lint, test]
|
||||||
if: startsWith(github.event.ref, 'refs/tags/v')
|
if: startsWith(github.event.ref, 'refs/tags/v')
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- uses: actions/setup-go@v2
|
- uses: actions/setup-go@v5
|
||||||
with:
|
with:
|
||||||
go-version: 1.21.0
|
go-version: 1.21.0
|
||||||
- uses: actions/setup-node@v2
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: '18'
|
node-version: '18'
|
||||||
- name: Set up QEMU
|
- name: Set up QEMU
|
||||||
|
|||||||
57
CHANGELOG.md
57
CHANGELOG.md
@@ -2,6 +2,63 @@
|
|||||||
|
|
||||||
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.28.0](https://github.com/filebrowser/filebrowser/compare/v2.27.0...v2.28.0) (2024-04-01)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* allow to configure if home directory is automatically created from cli ([#2963](https://github.com/filebrowser/filebrowser/issues/2963)) ([a4b089a](https://github.com/filebrowser/filebrowser/commit/a4b089a6dbf9821ecede428cd7d13e69c8b85231))
|
||||||
|
* auto hiding header bar in preview to enlarge the preview window ([#3024](https://github.com/filebrowser/filebrowser/issues/3024)) ([d706506](https://github.com/filebrowser/filebrowser/commit/d70650689c34ce9f631fda6a453fd521faef22fa))
|
||||||
|
* close editor when click escape key ([#2947](https://github.com/filebrowser/filebrowser/issues/2947)) ([70c8261](https://github.com/filebrowser/filebrowser/commit/70c826133b8578b8712e6db8f762a15a076cd9a9))
|
||||||
|
* enable preview in shared folder ([#3055](https://github.com/filebrowser/filebrowser/issues/3055)) ([4c233c3](https://github.com/filebrowser/filebrowser/commit/4c233c3db39ea5a00d6e602ec0ecbddecb590877))
|
||||||
|
* focus editor when opened ([#2946](https://github.com/filebrowser/filebrowser/issues/2946)) ([b19710e](https://github.com/filebrowser/filebrowser/commit/b19710efca6daa7af56dc211d0051d500d2eea22))
|
||||||
|
* freezing the list in the backgroud while previewing a file ([#3004](https://github.com/filebrowser/filebrowser/issues/3004)) ([e167c3e](https://github.com/filebrowser/filebrowser/commit/e167c3e1efed8b16be45d994a8d443fda1d8cf49))
|
||||||
|
* prompt to confirm discard editor changes ([#2948](https://github.com/filebrowser/filebrowser/issues/2948)) ([fb1a09c](https://github.com/filebrowser/filebrowser/commit/fb1a09c7c172b913c12b30975ca545e505df0c05))
|
||||||
|
* select multiple files with ctrl even with singleClick option ([#2953](https://github.com/filebrowser/filebrowser/issues/2953)) ([d49c3df](https://github.com/filebrowser/filebrowser/commit/d49c3dfacfc0ff07e620b3ad2700e64927b06235))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* dashboard buttons position in rtl layout ([#2949](https://github.com/filebrowser/filebrowser/issues/2949)) ([2cfee21](https://github.com/filebrowser/filebrowser/commit/2cfee2183c98d0cb67fc4e9788644ed4278e25bc))
|
||||||
|
* editor discard prompt ([#2990](https://github.com/filebrowser/filebrowser/issues/2990)) ([34a0817](https://github.com/filebrowser/filebrowser/commit/34a08170c894321d49bb843e259a0e59e2245998))
|
||||||
|
* files and directories are created with the correct permissions ([#2966](https://github.com/filebrowser/filebrowser/issues/2966)) ([5c5ab6b](https://github.com/filebrowser/filebrowser/commit/5c5ab6b8750a5168f0ae2a26bd5de41e0b6d9637))
|
||||||
|
* fix lint warnings ([#2976](https://github.com/filebrowser/filebrowser/issues/2976)) ([fe5ca74](https://github.com/filebrowser/filebrowser/commit/fe5ca74aa1e4257e5cb36f1de58daa0c3548319f))
|
||||||
|
* **healthcheck:** use address configured if not empty ([#2938](https://github.com/filebrowser/filebrowser/issues/2938)) ([81cd8fc](https://github.com/filebrowser/filebrowser/commit/81cd8fc6d307b00af278beefcdbad4158a128fea))
|
||||||
|
* keyboard shortcut to confirm prompts ([#2932](https://github.com/filebrowser/filebrowser/issues/2932)) ([ff9502f](https://github.com/filebrowser/filebrowser/commit/ff9502ff34790c46f31d175911cd51c9b62804fb))
|
||||||
|
* moment locale ([#2952](https://github.com/filebrowser/filebrowser/issues/2952)) ([883383a](https://github.com/filebrowser/filebrowser/commit/883383a5715d82883c51138dfb547805dfad2a3c))
|
||||||
|
* shell direction ([#2980](https://github.com/filebrowser/filebrowser/issues/2980)) ([6d7ba65](https://github.com/filebrowser/filebrowser/commit/6d7ba65faf576ee4ed095f3d0c41775b21e498de))
|
||||||
|
* stay in the same position after renaming or deleting ([#3039](https://github.com/filebrowser/filebrowser/issues/3039)) ([cdf8def](https://github.com/filebrowser/filebrowser/commit/cdf8def3304315bef261da7f52f8599d90b1f0f0))
|
||||||
|
|
||||||
|
|
||||||
|
### Build
|
||||||
|
|
||||||
|
* **deps-dev:** bump vite from 4.4.12 to 4.5.2 in /frontend ([#2951](https://github.com/filebrowser/filebrowser/issues/2951)) ([bf36cc0](https://github.com/filebrowser/filebrowser/commit/bf36cc00f1369dd10a422f230ccabcbeefae1517))
|
||||||
|
* **deps:** bump google.golang.org/protobuf from 1.31.0 to 1.33.0 ([#3045](https://github.com/filebrowser/filebrowser/issues/3045)) ([05bfae2](https://github.com/filebrowser/filebrowser/commit/05bfae264a7a477d1b7db582f06f4efb24d26ec9))
|
||||||
|
* **deps:** bump google.golang.org/protobuf in /tools ([#3044](https://github.com/filebrowser/filebrowser/issues/3044)) ([7797a4e](https://github.com/filebrowser/filebrowser/commit/7797a4ef18038a877df31bd34f2ebf70d18823f8))
|
||||||
|
|
||||||
|
## [2.27.0](https://github.com/filebrowser/filebrowser/compare/v2.26.0...v2.27.0) (2024-01-02)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* allow setting theme via cli ([#2881](https://github.com/filebrowser/filebrowser/issues/2881)) ([748af71](https://github.com/filebrowser/filebrowser/commit/748af7172ce96f0b66c394e88839bd57c194ffc7))
|
||||||
|
* display image resolutions in file details ([#2830](https://github.com/filebrowser/filebrowser/issues/2830)) ([a09dfa8](https://github.com/filebrowser/filebrowser/commit/a09dfa8d9f190243d811a841de44c4abb4403d87))
|
||||||
|
* make user session timeout configurable by flags ([#2845](https://github.com/filebrowser/filebrowser/issues/2845)) ([391a078](https://github.com/filebrowser/filebrowser/commit/391a078cd486e618c95a0c5850326076cbc025b6))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* delete message when delete file from preview ([3264cea](https://github.com/filebrowser/filebrowser/commit/3264cea8307dca9ab5463dc81f2a10a817eb3d54))
|
||||||
|
* fix typo ([#2843](https://github.com/filebrowser/filebrowser/issues/2843)) ([4dbc802](https://github.com/filebrowser/filebrowser/commit/4dbc802972c930f5f42fc27507fac35c28c42afd))
|
||||||
|
* set correct port in docker healthcheck ([#2812](https://github.com/filebrowser/filebrowser/issues/2812)) ([d59ad59](https://github.com/filebrowser/filebrowser/commit/d59ad594b8649f57f61453b0dfbc350c57b690a2))
|
||||||
|
* typo in build error [#2903](https://github.com/filebrowser/filebrowser/issues/2903) ([#2904](https://github.com/filebrowser/filebrowser/issues/2904)) ([c4e955a](https://github.com/filebrowser/filebrowser/commit/c4e955acf4a1a8f8e8e94f697ffc838515e69a60))
|
||||||
|
|
||||||
|
|
||||||
|
### Build
|
||||||
|
|
||||||
|
* **deps-dev:** bump vite from 4.4.9 to 4.4.12 in /frontend ([#2862](https://github.com/filebrowser/filebrowser/issues/2862)) ([fc2ee37](https://github.com/filebrowser/filebrowser/commit/fc2ee373536584d024f7def62f350bdbb712d927))
|
||||||
|
* **deps:** bump golang.org/x/crypto from 0.14.0 to 0.17.0 ([#2890](https://github.com/filebrowser/filebrowser/issues/2890)) ([821fba4](https://github.com/filebrowser/filebrowser/commit/821fba41a25ba99d47641f01b10ac51960157888))
|
||||||
|
|
||||||
## [2.26.0](https://github.com/filebrowser/filebrowser/compare/v2.25.0...v2.26.0) (2023-11-02)
|
## [2.26.0](https://github.com/filebrowser/filebrowser/compare/v2.25.0...v2.26.0) (2023-11-02)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ func addConfigFlags(flags *pflag.FlagSet) {
|
|||||||
addServerFlags(flags)
|
addServerFlags(flags)
|
||||||
addUserFlags(flags)
|
addUserFlags(flags)
|
||||||
flags.BoolP("signup", "s", false, "allow users to signup")
|
flags.BoolP("signup", "s", false, "allow users to signup")
|
||||||
|
flags.Bool("create-user-dir", false, "generate user's home directory automatically")
|
||||||
flags.String("shell", "", "shell command to which other commands should be appended")
|
flags.String("shell", "", "shell command to which other commands should be appended")
|
||||||
|
|
||||||
flags.String("auth.method", string(auth.MethodJSONAuth), "authentication type")
|
flags.String("auth.method", string(auth.MethodJSONAuth), "authentication type")
|
||||||
@@ -42,6 +43,7 @@ func addConfigFlags(flags *pflag.FlagSet) {
|
|||||||
flags.String("recaptcha.secret", "", "ReCaptcha secret")
|
flags.String("recaptcha.secret", "", "ReCaptcha secret")
|
||||||
|
|
||||||
flags.String("branding.name", "", "replace 'File Browser' by this name")
|
flags.String("branding.name", "", "replace 'File Browser' by this name")
|
||||||
|
flags.String("branding.theme", "", "set the theme")
|
||||||
flags.String("branding.color", "", "set the theme color")
|
flags.String("branding.color", "", "set the theme color")
|
||||||
flags.String("branding.files", "", "path to directory with images and custom styles")
|
flags.String("branding.files", "", "path to directory with images and custom styles")
|
||||||
flags.Bool("branding.disableExternal", false, "disable external links such as GitHub links")
|
flags.Bool("branding.disableExternal", false, "disable external links such as GitHub links")
|
||||||
@@ -150,6 +152,7 @@ func printSettings(ser *settings.Server, set *settings.Settings, auther auth.Aut
|
|||||||
fmt.Fprintf(w, "\tDisable external links:\t%t\n", set.Branding.DisableExternal)
|
fmt.Fprintf(w, "\tDisable external links:\t%t\n", set.Branding.DisableExternal)
|
||||||
fmt.Fprintf(w, "\tDisable used disk percentage graph:\t%t\n", set.Branding.DisableUsedPercentage)
|
fmt.Fprintf(w, "\tDisable used disk percentage graph:\t%t\n", set.Branding.DisableUsedPercentage)
|
||||||
fmt.Fprintf(w, "\tColor:\t%s\n", set.Branding.Color)
|
fmt.Fprintf(w, "\tColor:\t%s\n", set.Branding.Color)
|
||||||
|
fmt.Fprintf(w, "\tTheme:\t%s\n", set.Branding.Theme)
|
||||||
fmt.Fprintln(w, "\nServer:")
|
fmt.Fprintln(w, "\nServer:")
|
||||||
fmt.Fprintf(w, "\tLog:\t%s\n", ser.Log)
|
fmt.Fprintf(w, "\tLog:\t%s\n", ser.Log)
|
||||||
fmt.Fprintf(w, "\tPort:\t%s\n", ser.Port)
|
fmt.Fprintf(w, "\tPort:\t%s\n", ser.Port)
|
||||||
|
|||||||
@@ -29,15 +29,17 @@ override the options.`,
|
|||||||
authMethod, auther := getAuthentication(flags)
|
authMethod, auther := getAuthentication(flags)
|
||||||
|
|
||||||
s := &settings.Settings{
|
s := &settings.Settings{
|
||||||
Key: generateKey(),
|
Key: generateKey(),
|
||||||
Signup: mustGetBool(flags, "signup"),
|
Signup: mustGetBool(flags, "signup"),
|
||||||
Shell: convertCmdStrToCmdArray(mustGetString(flags, "shell")),
|
CreateUserDir: mustGetBool(flags, "create-user-dir"),
|
||||||
AuthMethod: authMethod,
|
Shell: convertCmdStrToCmdArray(mustGetString(flags, "shell")),
|
||||||
Defaults: defaults,
|
AuthMethod: authMethod,
|
||||||
|
Defaults: defaults,
|
||||||
Branding: settings.Branding{
|
Branding: settings.Branding{
|
||||||
Name: mustGetString(flags, "branding.name"),
|
Name: mustGetString(flags, "branding.name"),
|
||||||
DisableExternal: mustGetBool(flags, "branding.disableExternal"),
|
DisableExternal: mustGetBool(flags, "branding.disableExternal"),
|
||||||
DisableUsedPercentage: mustGetBool(flags, "branding.disableUsedPercentage"),
|
DisableUsedPercentage: mustGetBool(flags, "branding.disableUsedPercentage"),
|
||||||
|
Theme: mustGetString(flags, "branding.theme"),
|
||||||
Files: mustGetString(flags, "branding.files"),
|
Files: mustGetString(flags, "branding.files"),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,10 +49,14 @@ you want to change. Other options will remain unchanged.`,
|
|||||||
hasAuth = true
|
hasAuth = true
|
||||||
case "shell":
|
case "shell":
|
||||||
set.Shell = convertCmdStrToCmdArray(mustGetString(flags, flag.Name))
|
set.Shell = convertCmdStrToCmdArray(mustGetString(flags, flag.Name))
|
||||||
|
case "create-user-dir":
|
||||||
|
set.CreateUserDir = mustGetBool(flags, flag.Name)
|
||||||
case "branding.name":
|
case "branding.name":
|
||||||
set.Branding.Name = mustGetString(flags, flag.Name)
|
set.Branding.Name = mustGetString(flags, flag.Name)
|
||||||
case "branding.color":
|
case "branding.color":
|
||||||
set.Branding.Color = mustGetString(flags, flag.Name)
|
set.Branding.Color = mustGetString(flags, flag.Name)
|
||||||
|
case "branding.theme":
|
||||||
|
set.Branding.Theme = mustGetString(flags, flag.Name)
|
||||||
case "branding.disableExternal":
|
case "branding.disableExternal":
|
||||||
set.Branding.DisableExternal = mustGetBool(flags, flag.Name)
|
set.Branding.DisableExternal = mustGetBool(flags, flag.Name)
|
||||||
case "branding.disableUsedPercentage":
|
case "branding.disableUsedPercentage":
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ func addServerFlags(flags *pflag.FlagSet) {
|
|||||||
flags.Uint32("socket-perm", 0666, "unix socket file permissions") //nolint:gomnd
|
flags.Uint32("socket-perm", 0666, "unix socket file permissions") //nolint:gomnd
|
||||||
flags.StringP("baseurl", "b", "", "base url")
|
flags.StringP("baseurl", "b", "", "base url")
|
||||||
flags.String("cache-dir", "", "file cache directory (disabled if empty)")
|
flags.String("cache-dir", "", "file cache directory (disabled if empty)")
|
||||||
|
flags.String("token-expiration-time", "2h", "user session timeout")
|
||||||
flags.Int("img-processors", 4, "image processors count") //nolint:gomnd
|
flags.Int("img-processors", 4, "image processors count") //nolint:gomnd
|
||||||
flags.Bool("disable-thumbnails", false, "disable image thumbnails")
|
flags.Bool("disable-thumbnails", false, "disable image thumbnails")
|
||||||
flags.Bool("disable-preview-resize", false, "disable resize of image previews")
|
flags.Bool("disable-preview-resize", false, "disable resize of image previews")
|
||||||
@@ -261,6 +262,10 @@ func getRunParams(flags *pflag.FlagSet, st *storage.Storage) *settings.Server {
|
|||||||
_, disableExec := getParamB(flags, "disable-exec")
|
_, disableExec := getParamB(flags, "disable-exec")
|
||||||
server.EnableExec = !disableExec
|
server.EnableExec = !disableExec
|
||||||
|
|
||||||
|
if val, set := getParamB(flags, "token-expiration-time"); set {
|
||||||
|
server.TokenExpirationTime = val
|
||||||
|
}
|
||||||
|
|
||||||
return server
|
return server
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
11
cmd/utils.go
11
cmd/utils.go
@@ -87,16 +87,23 @@ func python(fn pythonFunc, cfg pythonConfig) cobraFunc {
|
|||||||
data := pythonData{hadDB: true}
|
data := pythonData{hadDB: true}
|
||||||
|
|
||||||
path := getParam(cmd.Flags(), "database")
|
path := getParam(cmd.Flags(), "database")
|
||||||
|
absPath, err := filepath.Abs(path)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
exists, err := dbExists(path)
|
exists, err := dbExists(path)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
} else if exists && cfg.noDB {
|
} else if exists && cfg.noDB {
|
||||||
log.Fatal(path + " already exists")
|
log.Fatal(absPath + " already exists")
|
||||||
} else if !exists && !cfg.noDB && !cfg.allowNoDB {
|
} else if !exists && !cfg.noDB && !cfg.allowNoDB {
|
||||||
log.Fatal(path + " does not exist. Please run 'filebrowser config init' first.")
|
log.Fatal(absPath + " does not exist. Please run 'filebrowser config init' first.")
|
||||||
|
} else if !exists && !cfg.noDB {
|
||||||
|
log.Println("Warning: filebrowser.db can't be found. Initialing in " + strings.TrimSuffix(absPath, "filebrowser.db"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log.Println("Using database: " + absPath)
|
||||||
data.hadDB = exists
|
data.hadDB = exists
|
||||||
db, err := storm.Open(path)
|
db, err := storm.Open(path)
|
||||||
checkErr(err)
|
checkErr(err)
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import (
|
|||||||
"crypto/sha512"
|
"crypto/sha512"
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
"hash"
|
"hash"
|
||||||
|
"image"
|
||||||
"io"
|
"io"
|
||||||
"log"
|
"log"
|
||||||
"mime"
|
"mime"
|
||||||
@@ -23,7 +24,7 @@ import (
|
|||||||
"github.com/filebrowser/filebrowser/v2/rules"
|
"github.com/filebrowser/filebrowser/v2/rules"
|
||||||
)
|
)
|
||||||
|
|
||||||
const PermFile = 0664
|
const PermFile = 0644
|
||||||
const PermDir = 0755
|
const PermDir = 0755
|
||||||
|
|
||||||
// FileInfo describes a file.
|
// FileInfo describes a file.
|
||||||
@@ -44,6 +45,7 @@ type FileInfo struct {
|
|||||||
Checksums map[string]string `json:"checksums,omitempty"`
|
Checksums map[string]string `json:"checksums,omitempty"`
|
||||||
Token string `json:"token,omitempty"`
|
Token string `json:"token,omitempty"`
|
||||||
currentDir []os.FileInfo `json:"-"`
|
currentDir []os.FileInfo `json:"-"`
|
||||||
|
Resolution *ImageResolution `json:"resolution,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// FileOptions are the options when getting a file info.
|
// FileOptions are the options when getting a file info.
|
||||||
@@ -58,6 +60,11 @@ type FileOptions struct {
|
|||||||
Content bool
|
Content bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ImageResolution struct {
|
||||||
|
Width int `json:"width"`
|
||||||
|
Height int `json:"height"`
|
||||||
|
}
|
||||||
|
|
||||||
// NewFileInfo creates a File object from a path and a given user. This File
|
// NewFileInfo creates a File object from a path and a given user. This File
|
||||||
// object will be automatically filled depending on if it is a directory
|
// object will be automatically filled depending on if it is a directory
|
||||||
// or a file. If it's a video file, it will also detect any subtitles.
|
// or a file. If it's a video file, it will also detect any subtitles.
|
||||||
@@ -236,6 +243,12 @@ func (i *FileInfo) detectType(modify, saveContent, readHeader bool) error {
|
|||||||
return nil
|
return nil
|
||||||
case strings.HasPrefix(mimetype, "image"):
|
case strings.HasPrefix(mimetype, "image"):
|
||||||
i.Type = "image"
|
i.Type = "image"
|
||||||
|
resolution, err := calculateImageResolution(i.Fs, i.Path)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error calculating image resolution: %v", err)
|
||||||
|
} else {
|
||||||
|
i.Resolution = resolution
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
case strings.HasSuffix(mimetype, "pdf"):
|
case strings.HasSuffix(mimetype, "pdf"):
|
||||||
i.Type = "pdf"
|
i.Type = "pdf"
|
||||||
@@ -264,6 +277,28 @@ func (i *FileInfo) detectType(modify, saveContent, readHeader bool) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func calculateImageResolution(fs afero.Fs, filePath string) (*ImageResolution, error) {
|
||||||
|
file, err := fs.Open(filePath)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer func() {
|
||||||
|
if cErr := file.Close(); cErr != nil {
|
||||||
|
log.Printf("Failed to close file: %v", cErr)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
config, _, err := image.DecodeConfig(file)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &ImageResolution{
|
||||||
|
Width: config.Width,
|
||||||
|
Height: config.Height,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (i *FileInfo) readFirstBytes() []byte {
|
func (i *FileInfo) readFirstBytes() []byte {
|
||||||
reader, err := i.Fs.Open(i.Path)
|
reader, err := i.Fs.Open(i.Path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -361,6 +396,15 @@ func (i *FileInfo) readListing(checker rules.Checker, readHeader bool) error {
|
|||||||
currentDir: dir,
|
currentDir: dir,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !file.IsDir && strings.HasPrefix(mime.TypeByExtension(file.Extension), "image/") {
|
||||||
|
resolution, err := calculateImageResolution(file.Fs, file.Path)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error calculating resolution for image %s: %v", file.Path, err)
|
||||||
|
} else {
|
||||||
|
file.Resolution = resolution
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if file.IsDir {
|
if file.IsDir {
|
||||||
listing.NumDirs++
|
listing.NumDirs++
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ import (
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
|
||||||
"github.com/spf13/afero"
|
"github.com/spf13/afero"
|
||||||
|
|
||||||
|
"github.com/filebrowser/filebrowser/v2/files"
|
||||||
)
|
)
|
||||||
|
|
||||||
// MoveFile moves file from src to dst.
|
// MoveFile moves file from src to dst.
|
||||||
@@ -40,13 +42,13 @@ func CopyFile(fs afero.Fs, source, dest string) error {
|
|||||||
|
|
||||||
// Makes the directory needed to create the dst
|
// Makes the directory needed to create the dst
|
||||||
// file.
|
// file.
|
||||||
err = fs.MkdirAll(filepath.Dir(dest), 0666) //nolint:gomnd
|
err = fs.MkdirAll(filepath.Dir(dest), files.PermDir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create the destination file.
|
// Create the destination file.
|
||||||
dst, err := fs.OpenFile(dest, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0775) //nolint:gomnd
|
dst, err := fs.OpenFile(dest, os.O_RDWR|os.O_CREATE|os.O_TRUNC, files.PermFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
8
frontend/package-lock.json
generated
8
frontend/package-lock.json
generated
@@ -46,7 +46,7 @@
|
|||||||
"postcss": "^8.4.31",
|
"postcss": "^8.4.31",
|
||||||
"prettier": "^3.0.1",
|
"prettier": "^3.0.1",
|
||||||
"terser": "^5.19.2",
|
"terser": "^5.19.2",
|
||||||
"vite": "^4.4.9",
|
"vite": "^4.5.2",
|
||||||
"vite-plugin-compression2": "^0.10.3",
|
"vite-plugin-compression2": "^0.10.3",
|
||||||
"vite-plugin-rewrite-all": "^1.0.1"
|
"vite-plugin-rewrite-all": "^1.0.1"
|
||||||
}
|
}
|
||||||
@@ -5663,9 +5663,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/vite": {
|
"node_modules/vite": {
|
||||||
"version": "4.4.9",
|
"version": "4.5.2",
|
||||||
"resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz",
|
"resolved": "https://registry.npmjs.org/vite/-/vite-4.5.2.tgz",
|
||||||
"integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==",
|
"integrity": "sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"esbuild": "^0.18.10",
|
"esbuild": "^0.18.10",
|
||||||
|
|||||||
@@ -52,7 +52,7 @@
|
|||||||
"postcss": "^8.4.31",
|
"postcss": "^8.4.31",
|
||||||
"prettier": "^3.0.1",
|
"prettier": "^3.0.1",
|
||||||
"terser": "^5.19.2",
|
"terser": "^5.19.2",
|
||||||
"vite": "^4.4.9",
|
"vite": "^4.5.2",
|
||||||
"vite-plugin-compression2": "^0.10.3",
|
"vite-plugin-compression2": "^0.10.3",
|
||||||
"vite-plugin-rewrite-all": "^1.0.1"
|
"vite-plugin-rewrite-all": "^1.0.1"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -16,6 +16,8 @@
|
|||||||
[{[ if .Name -]}][{[ .Name ]}][{[ else ]}]File Browser[{[ end ]}]
|
[{[ if .Name -]}][{[ .Name ]}][{[ else ]}]File Browser[{[ end ]}]
|
||||||
</title>
|
</title>
|
||||||
|
|
||||||
|
<meta name="robots" content="noindex,nofollow">
|
||||||
|
|
||||||
<link
|
<link
|
||||||
rel="icon"
|
rel="icon"
|
||||||
type="image/png"
|
type="image/png"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<div
|
<div
|
||||||
class="shell"
|
class="shell"
|
||||||
:class="{ ['shell--hidden']: !showShell }"
|
:class="{ ['shell--hidden']: !showShell }"
|
||||||
:style="{ height: `${this.shellHeight}em` }"
|
:style="{ height: `${this.shellHeight}em`, direction: 'ltr' }"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
@pointerdown="startDrag()"
|
@pointerdown="startDrag()"
|
||||||
|
|||||||
@@ -38,7 +38,7 @@
|
|||||||
import { enableThumbs } from "@/utils/constants";
|
import { enableThumbs } from "@/utils/constants";
|
||||||
import { mapMutations, mapGetters, mapState } from "vuex";
|
import { mapMutations, mapGetters, mapState } from "vuex";
|
||||||
import { filesize } from "@/utils";
|
import { filesize } from "@/utils";
|
||||||
import moment from "moment";
|
import moment from "moment/min/moment-with-locales";
|
||||||
import { files as api } from "@/api";
|
import { files as api } from "@/api";
|
||||||
import * as upload from "@/utils/upload";
|
import * as upload from "@/utils/upload";
|
||||||
|
|
||||||
@@ -191,7 +191,12 @@ export default {
|
|||||||
action(overwrite, rename);
|
action(overwrite, rename);
|
||||||
},
|
},
|
||||||
itemClick: function (event) {
|
itemClick: function (event) {
|
||||||
if (this.singleClick && !this.$store.state.multiple) this.open();
|
if (
|
||||||
|
!(event.ctrlKey || event.metaKey) &&
|
||||||
|
this.singleClick &&
|
||||||
|
!this.$store.state.multiple
|
||||||
|
)
|
||||||
|
this.open();
|
||||||
else this.click(event);
|
else this.click(event);
|
||||||
},
|
},
|
||||||
click: function (event) {
|
click: function (event) {
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
<div
|
<div
|
||||||
class="card-action"
|
class="card-action"
|
||||||
style="display: flex; align-items: center; justify-content: space-between;"
|
style="display: flex; align-items: center; justify-content: space-between"
|
||||||
>
|
>
|
||||||
<template v-if="user.perm.create">
|
<template v-if="user.perm.create">
|
||||||
<button
|
<button
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
@click="$refs.fileList.createDir()"
|
@click="$refs.fileList.createDir()"
|
||||||
:aria-label="$t('sidebar.newFolder')"
|
:aria-label="$t('sidebar.newFolder')"
|
||||||
:title="$t('sidebar.newFolder')"
|
:title="$t('sidebar.newFolder')"
|
||||||
style="justify-self: left;"
|
style="justify-self: left"
|
||||||
>
|
>
|
||||||
<span>{{ $t("sidebar.newFolder") }}</span>
|
<span>{{ $t("sidebar.newFolder") }}</span>
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="card floating">
|
<div class="card floating">
|
||||||
<div class="card-content">
|
<div class="card-content">
|
||||||
<p v-if="selectedCount === 1">
|
<p v-if="!this.isListing || selectedCount === 1">
|
||||||
{{ $t("prompts.deleteMessageSingle") }}
|
{{ $t("prompts.deleteMessageSingle") }}
|
||||||
</p>
|
</p>
|
||||||
<p v-else>
|
<p v-else>
|
||||||
@@ -45,6 +45,7 @@ export default {
|
|||||||
submit: async function () {
|
submit: async function () {
|
||||||
buttons.loading("delete");
|
buttons.loading("delete");
|
||||||
|
|
||||||
|
window.sessionStorage.setItem("modified", "true");
|
||||||
try {
|
try {
|
||||||
if (!this.isListing) {
|
if (!this.isListing) {
|
||||||
await api.remove(this.$route.path);
|
await api.remove(this.$route.path);
|
||||||
|
|||||||
45
frontend/src/components/prompts/DiscardEditorChanges.vue
Normal file
45
frontend/src/components/prompts/DiscardEditorChanges.vue
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
<template>
|
||||||
|
<div class="card floating">
|
||||||
|
<div class="card-content">
|
||||||
|
<p>
|
||||||
|
{{ $t("prompts.discardEditorChanges") }}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="card-action">
|
||||||
|
<button
|
||||||
|
@click="$store.commit('closeHovers')"
|
||||||
|
class="button button--flat button--grey"
|
||||||
|
:aria-label="$t('buttons.cancel')"
|
||||||
|
:title="$t('buttons.cancel')"
|
||||||
|
>
|
||||||
|
{{ $t("buttons.cancel") }}
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
@click="submit"
|
||||||
|
class="button button--flat button--red"
|
||||||
|
:aria-label="$t('buttons.discardChanges')"
|
||||||
|
:title="$t('buttons.discardChanges')"
|
||||||
|
>
|
||||||
|
{{ $t("buttons.discardChanges") }}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { mapMutations } from "vuex";
|
||||||
|
import url from "@/utils/url";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "discardEditorChanges",
|
||||||
|
methods: {
|
||||||
|
...mapMutations(["closeHovers"]),
|
||||||
|
submit: async function () {
|
||||||
|
this.$store.commit("updateRequest", {});
|
||||||
|
|
||||||
|
let uri = url.removeLastDir(this.$route.path) + "/";
|
||||||
|
this.$router.push({ path: uri });
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
@@ -12,10 +12,17 @@
|
|||||||
<p class="break-word" v-if="selected.length < 2">
|
<p class="break-word" v-if="selected.length < 2">
|
||||||
<strong>{{ $t("prompts.displayName") }}</strong> {{ name }}
|
<strong>{{ $t("prompts.displayName") }}</strong> {{ name }}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p v-if="!dir || selected.length > 1">
|
<p v-if="!dir || selected.length > 1">
|
||||||
<strong>{{ $t("prompts.size") }}:</strong>
|
<strong>{{ $t("prompts.size") }}:</strong>
|
||||||
<span id="content_length"></span> {{ humanSize }}
|
<span id="content_length"></span> {{ humanSize }}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<div v-if="resolution">
|
||||||
|
<strong>{{ $t("prompts.resolution") }}:</strong>
|
||||||
|
{{ resolution.width }} x {{ resolution.height }}
|
||||||
|
</div>
|
||||||
|
|
||||||
<p v-if="selected.length < 2" :title="modTime">
|
<p v-if="selected.length < 2" :title="modTime">
|
||||||
<strong>{{ $t("prompts.lastModified") }}:</strong> {{ humanTime }}
|
<strong>{{ $t("prompts.lastModified") }}:</strong> {{ humanTime }}
|
||||||
</p>
|
</p>
|
||||||
@@ -82,7 +89,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import { mapState, mapGetters } from "vuex";
|
import { mapState, mapGetters } from "vuex";
|
||||||
import { filesize } from "@/utils";
|
import { filesize } from "@/utils";
|
||||||
import moment from "moment";
|
import moment from "moment/min/moment-with-locales";
|
||||||
import { files as api } from "@/api";
|
import { files as api } from "@/api";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
@@ -126,6 +133,17 @@ export default {
|
|||||||
: this.req.items[this.selected[0]].isDir)
|
: this.req.items[this.selected[0]].isDir)
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
resolution: function () {
|
||||||
|
if (this.selectedCount === 1) {
|
||||||
|
const selectedItem = this.req.items[this.selected[0]];
|
||||||
|
if (selectedItem && selectedItem.type === "image") {
|
||||||
|
return selectedItem.resolution;
|
||||||
|
}
|
||||||
|
} else if (this.req && this.req.type === "image") {
|
||||||
|
return this.req.resolution;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
checksum: async function (event, algo) {
|
checksum: async function (event, algo) {
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
<div
|
<div
|
||||||
class="card-action"
|
class="card-action"
|
||||||
style="display: flex; align-items: center; justify-content: space-between;"
|
style="display: flex; align-items: center; justify-content: space-between"
|
||||||
>
|
>
|
||||||
<template v-if="user.perm.create">
|
<template v-if="user.perm.create">
|
||||||
<button
|
<button
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
@click="$refs.fileList.createDir()"
|
@click="$refs.fileList.createDir()"
|
||||||
:aria-label="$t('sidebar.newFolder')"
|
:aria-label="$t('sidebar.newFolder')"
|
||||||
:title="$t('sidebar.newFolder')"
|
:title="$t('sidebar.newFolder')"
|
||||||
style="justify-self: left;"
|
style="justify-self: left"
|
||||||
>
|
>
|
||||||
<span>{{ $t("sidebar.newFolder") }}</span>
|
<span>{{ $t("sidebar.newFolder") }}</span>
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import Share from "./Share.vue";
|
|||||||
import Upload from "./Upload.vue";
|
import Upload from "./Upload.vue";
|
||||||
import ShareDelete from "./ShareDelete.vue";
|
import ShareDelete from "./ShareDelete.vue";
|
||||||
import Sidebar from "../Sidebar.vue";
|
import Sidebar from "../Sidebar.vue";
|
||||||
|
import DiscardEditorChanges from "./DiscardEditorChanges.vue";
|
||||||
import { mapGetters, mapState } from "vuex";
|
import { mapGetters, mapState } from "vuex";
|
||||||
import buttons from "@/utils/buttons";
|
import buttons from "@/utils/buttons";
|
||||||
|
|
||||||
@@ -47,7 +48,8 @@ export default {
|
|||||||
ReplaceRename,
|
ReplaceRename,
|
||||||
Upload,
|
Upload,
|
||||||
ShareDelete,
|
ShareDelete,
|
||||||
Sidebar
|
Sidebar,
|
||||||
|
DiscardEditorChanges,
|
||||||
},
|
},
|
||||||
data: function () {
|
data: function () {
|
||||||
return {
|
return {
|
||||||
@@ -62,17 +64,16 @@ export default {
|
|||||||
window.addEventListener("keydown", (event) => {
|
window.addEventListener("keydown", (event) => {
|
||||||
if (this.currentPrompt == null) return;
|
if (this.currentPrompt == null) return;
|
||||||
|
|
||||||
let prompt = this.$refs.currentComponent;
|
const promptName = this.currentPrompt.prompt;
|
||||||
|
const prompt = this.$refs[promptName];
|
||||||
|
|
||||||
// Esc!
|
if (event.code === "Escape") {
|
||||||
if (event.keyCode === 27) {
|
|
||||||
event.stopImmediatePropagation();
|
event.stopImmediatePropagation();
|
||||||
this.$store.commit("closeHovers");
|
this.$store.commit("closeHovers");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Enter
|
if (event.code === "Enter") {
|
||||||
if (event.keyCode == 13) {
|
switch (promptName) {
|
||||||
switch (this.currentPrompt.prompt) {
|
|
||||||
case "delete":
|
case "delete":
|
||||||
prompt.submit();
|
prompt.submit();
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -88,6 +88,7 @@ export default {
|
|||||||
newLink =
|
newLink =
|
||||||
url.removeLastDir(oldLink) + "/" + encodeURIComponent(this.name);
|
url.removeLastDir(oldLink) + "/" + encodeURIComponent(this.name);
|
||||||
|
|
||||||
|
window.sessionStorage.setItem("modified", "true");
|
||||||
try {
|
try {
|
||||||
await api.move([{ from: oldLink, to: newLink }]);
|
await api.move([{ from: oldLink, to: newLink }]);
|
||||||
if (!this.isListing) {
|
if (!this.isListing) {
|
||||||
|
|||||||
@@ -128,7 +128,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import { mapState, mapGetters } from "vuex";
|
import { mapState, mapGetters } from "vuex";
|
||||||
import { share as api, pub as pub_api } from "@/api";
|
import { share as api, pub as pub_api } from "@/api";
|
||||||
import moment from "moment";
|
import moment from "moment/min/moment-with-locales";
|
||||||
import Clipboard from "clipboard";
|
import Clipboard from "clipboard";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
|||||||
@@ -220,6 +220,10 @@ body.rtl .card .card-title>*:first-child {
|
|||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
body.rtl .card .card-action {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
.card .card-content.full {
|
.card .card-content.full {
|
||||||
padding-bottom: 0;
|
padding-bottom: 0;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
|
|||||||
@@ -2,10 +2,6 @@
|
|||||||
nav {
|
nav {
|
||||||
width: 10em
|
width: 10em
|
||||||
}
|
}
|
||||||
/* Mobile Only fix div hidden by bottom navigation bar of mobile browser when using height: 100vh */
|
|
||||||
#previewer .preview {
|
|
||||||
height: calc(100% - 4em) !important;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (max-width: 1024px) {
|
@media (max-width: 1024px) {
|
||||||
|
|||||||
@@ -152,8 +152,7 @@ main .spinner .bounce2 {
|
|||||||
/* PREVIEWER */
|
/* PREVIEWER */
|
||||||
|
|
||||||
#previewer {
|
#previewer {
|
||||||
background-color: rgba(0, 0, 0, 0.9);
|
background-color: rgba(0, 0, 0, 0.99);
|
||||||
padding-top: 4em;
|
|
||||||
position: fixed;
|
position: fixed;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
@@ -166,15 +165,25 @@ main .spinner .bounce2 {
|
|||||||
#previewer header {
|
#previewer header {
|
||||||
background: none;
|
background: none;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
|
border-bottom: 0px;
|
||||||
|
box-shadow: 0px 0px 0px;
|
||||||
|
z-index: 19999;
|
||||||
}
|
}
|
||||||
|
|
||||||
#previewer header > .action i {
|
#previewer header > .action i {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
|
text-shadow: 1px 1px 1px #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
#previewer header > title {
|
||||||
|
white-space: nowrap;
|
||||||
|
text-shadow: 1px 1px 1px #000000;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (min-width: 738px) {
|
@media (min-width: 738px) {
|
||||||
#previewer header #dropdown .action i {
|
#previewer header #dropdown .action i {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
|
text-shadow: 1px 1px 1px #000000;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -188,7 +197,7 @@ main .spinner .bounce2 {
|
|||||||
|
|
||||||
#previewer .preview {
|
#previewer .preview {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
height: calc(100vh - 4em);
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
#previewer .preview pre {
|
#previewer .preview pre {
|
||||||
@@ -203,6 +212,12 @@ main .spinner .bounce2 {
|
|||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#previewer .preview audio {
|
||||||
|
width: 95%;
|
||||||
|
height: 88%;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#previewer .preview video {
|
#previewer .preview video {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
@@ -247,7 +262,7 @@ main .spinner .bounce2 {
|
|||||||
#previewer > button {
|
#previewer > button {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
top: calc(50% + 1.85em);
|
top: 50%;
|
||||||
transform: translateY(-50%);
|
transform: translateY(-50%);
|
||||||
background-color: rgba(80, 80, 80, 0.5);
|
background-color: rgba(80, 80, 80, 0.5);
|
||||||
color: white;
|
color: white;
|
||||||
|
|||||||
@@ -5,10 +5,13 @@
|
|||||||
"copy": "نسخ",
|
"copy": "نسخ",
|
||||||
"copyFile": "نسخ الملف",
|
"copyFile": "نسخ الملف",
|
||||||
"copyToClipboard": "نسخ الى الحافظة",
|
"copyToClipboard": "نسخ الى الحافظة",
|
||||||
|
"copyDownloadLinkToClipboard": "نسخ رابط التحميل الى الحافظة",
|
||||||
"create": "إنشاء",
|
"create": "إنشاء",
|
||||||
"delete": "حذف",
|
"delete": "حذف",
|
||||||
"download": "تحميل",
|
"download": "تحميل",
|
||||||
"hideDotfiles": "",
|
"file": "ملف",
|
||||||
|
"folder": "مجلد",
|
||||||
|
"hideDotfiles": "إخفاء ملفات النقطة",
|
||||||
"info": "معلومات",
|
"info": "معلومات",
|
||||||
"more": "المزيد",
|
"more": "المزيد",
|
||||||
"move": "نقل",
|
"move": "نقل",
|
||||||
@@ -16,7 +19,7 @@
|
|||||||
"new": "جديد",
|
"new": "جديد",
|
||||||
"next": "التالي",
|
"next": "التالي",
|
||||||
"ok": "موافق",
|
"ok": "موافق",
|
||||||
"permalink": "الحصول على لنك دائم",
|
"permalink": "الحصول على رابط دائم",
|
||||||
"previous": "السابق",
|
"previous": "السابق",
|
||||||
"publish": "نشر",
|
"publish": "نشر",
|
||||||
"rename": "إعادة تسمية",
|
"rename": "إعادة تسمية",
|
||||||
@@ -28,21 +31,28 @@
|
|||||||
"select": "تحديد",
|
"select": "تحديد",
|
||||||
"selectMultiple": "تحديد متعدد",
|
"selectMultiple": "تحديد متعدد",
|
||||||
"share": "مشاركة",
|
"share": "مشاركة",
|
||||||
"shell": "Toggle shell",
|
"shell": "تفعيل/إغلاق واجهة اﻷوامر (shell)",
|
||||||
|
"submit": "تسليم",
|
||||||
"switchView": "تغيير العرض",
|
"switchView": "تغيير العرض",
|
||||||
"toggleSidebar": "تبديل الشريط الجانبي",
|
"toggleSidebar": "تبديل الشريط الجانبي",
|
||||||
"update": "تحديث",
|
"update": "تحديث",
|
||||||
"upload": "رفع"
|
"upload": "رفع",
|
||||||
|
"openFile": "فتح الملف",
|
||||||
|
"continue": "متابعة"
|
||||||
},
|
},
|
||||||
"download": {
|
"download": {
|
||||||
"downloadFile": "Download File",
|
"downloadFile": "تحميل الملف",
|
||||||
"downloadFolder": "Download Folder",
|
"downloadFolder": "تحميل المجلد",
|
||||||
"downloadSelected": ""
|
"downloadSelected": "تحميل الملفات المحددة"
|
||||||
|
},
|
||||||
|
"upload": {
|
||||||
|
"abortUpload": "هل تريد بالتاكيد إلغاء الرفع؟"
|
||||||
},
|
},
|
||||||
"errors": {
|
"errors": {
|
||||||
"forbidden": "You don't have permissions to access this.",
|
"forbidden": "ليست لديك الصلاحيات للوصول لهذا المحتوى.",
|
||||||
"internal": "لقد حدث خطأ ما.",
|
"internal": "لقد حدث خطأ ما.",
|
||||||
"notFound": "لا يمكن الوصول لهذا المحتوى."
|
"notFound": "لا يمكن الوصول لهذا المحتوى.",
|
||||||
|
"connection": "لا يمكن اﻹتصال بالخادم."
|
||||||
},
|
},
|
||||||
"files": {
|
"files": {
|
||||||
"body": "الصفحة",
|
"body": "الصفحة",
|
||||||
@@ -50,17 +60,18 @@
|
|||||||
"closePreview": "إغلاق العرض",
|
"closePreview": "إغلاق العرض",
|
||||||
"files": "الملفات",
|
"files": "الملفات",
|
||||||
"folders": "المجلدات",
|
"folders": "المجلدات",
|
||||||
"home": "الصفحة الاولى",
|
"home": "الصفحة الرئيسية",
|
||||||
"lastModified": "آخر تعديل",
|
"lastModified": "آخر تعديل",
|
||||||
"loading": "جاري التحميل...",
|
"loading": "جاري التحميل...",
|
||||||
"lonely": "تبدو وحيدا هنا...",
|
"lonely": "تبدو وحيدا هنا...",
|
||||||
"metadata": "بيانات تعريفية",
|
"metadata": "بيانات وصفية",
|
||||||
"multipleSelectionEnabled": "التحديد المتعدد مفعل",
|
"multipleSelectionEnabled": "التحديد المتعدد مفعل",
|
||||||
"name": "الإسم",
|
"name": "اﻹسم",
|
||||||
"size": "الحجم",
|
"size": "الحجم",
|
||||||
"sortByLastModified": "الترتيب بآخر تعديل",
|
"sortByLastModified": "الترتيب بآخر تعديل",
|
||||||
"sortByName": "الترتيب بالإسم",
|
"sortByName": "الترتيب باﻹسم",
|
||||||
"sortBySize": "الترتيب بالحجم"
|
"sortBySize": "الترتيب بالحجم",
|
||||||
|
"noPreview": "لا يوجد عرض مسبق لهذا الملف."
|
||||||
},
|
},
|
||||||
"help": {
|
"help": {
|
||||||
"click": "حدد الملف أو المجلد",
|
"click": "حدد الملف أو المجلد",
|
||||||
@@ -71,7 +82,7 @@
|
|||||||
},
|
},
|
||||||
"del": "حذف البيانات المحددة",
|
"del": "حذف البيانات المحددة",
|
||||||
"doubleClick": "فتح المجلد او الملف",
|
"doubleClick": "فتح المجلد او الملف",
|
||||||
"esc": "مسح التحديد وإغلاق النافذة المنبثقة",
|
"esc": "مسح التحديد و إغلاق النافذة المنبثقة",
|
||||||
"f1": "هذه المعلومات",
|
"f1": "هذه المعلومات",
|
||||||
"f2": "إعادة تسمية الملف",
|
"f2": "إعادة تسمية الملف",
|
||||||
"help": "مساعدة"
|
"help": "مساعدة"
|
||||||
@@ -81,47 +92,49 @@
|
|||||||
"hu": "Magyar",
|
"hu": "Magyar",
|
||||||
"ar": "العربية",
|
"ar": "العربية",
|
||||||
"de": "Deutsch",
|
"de": "Deutsch",
|
||||||
|
"el": "Ελληνικά",
|
||||||
"en": "English",
|
"en": "English",
|
||||||
"es": "Español",
|
"es": "Español",
|
||||||
"fr": "Français",
|
"fr": "Français",
|
||||||
"is": "",
|
"is": "Icelandic",
|
||||||
"it": "Italiano",
|
"it": "Italiano",
|
||||||
"ja": "日本語",
|
"ja": "日本語",
|
||||||
"ko": "한국어",
|
"ko": "한국어",
|
||||||
"nlBE": "",
|
"nlBE": "Dutch (Belgium)",
|
||||||
"pl": "Polski",
|
"pl": "Polski",
|
||||||
"pt": "Português",
|
"pt": "Português",
|
||||||
"ptBR": "Português (Brasil)",
|
"ptBR": "Português (Brasil)",
|
||||||
"ro": "",
|
"ro": "Romanian",
|
||||||
"ru": "Русский",
|
"ru": "Русский",
|
||||||
"sk": "Slovenčina",
|
"sk": "Slovenčina",
|
||||||
"svSE": "",
|
"svSE": "Swedish (Sweden)",
|
||||||
"tr" : "Türkçe",
|
"tr": "Türkçe",
|
||||||
"ua": "Українська",
|
"ua": "Українська",
|
||||||
"zhCN": "中文 (简体)",
|
"zhCN": "中文 (简体)",
|
||||||
"zhTW": "中文 (繁體)"
|
"zhTW": "中文 (繁體)"
|
||||||
},
|
},
|
||||||
"login": {
|
"login": {
|
||||||
"createAnAccount": "Create an account",
|
"createAnAccount": "إنشاء حساب جديد",
|
||||||
"loginInstead": "Already have an account",
|
"loginInstead": "هل لديك حساب",
|
||||||
"password": "كلمة المرور",
|
"password": "كلمة المرور",
|
||||||
"passwordConfirm": "Password Confirmation",
|
"passwordConfirm": "تأكيد كلمة المرور",
|
||||||
"passwordsDontMatch": "Passwords don't match",
|
"passwordsDontMatch": "كلمة المرور غير متطابقة",
|
||||||
"signup": "Signup",
|
"signup": "إشترك",
|
||||||
"submit": "تسجيل دخول",
|
"submit": "تسجيل دخول",
|
||||||
"username": "إسم المستخدم",
|
"username": "إسم المستخدم",
|
||||||
"usernameTaken": "Username already taken",
|
"usernameTaken": "إسم المستخدم غير متاح",
|
||||||
"wrongCredentials": "بيانات دخول خاطئة"
|
"wrongCredentials": "بيانات دخول خاطئة"
|
||||||
},
|
},
|
||||||
"permanent": "دائم",
|
"permanent": "دائم",
|
||||||
"prompts": {
|
"prompts": {
|
||||||
"copy": "نسخ",
|
"copy": "نسخ",
|
||||||
"copyMessage": "رجاء حدد المكان لنسخ ملفاتك فيه:",
|
"copyMessage": "حدد المكان لنسخ ملفاتك فيه:",
|
||||||
"currentlyNavigating": "يتم الإنتقال حاليا إلى:",
|
"currentlyNavigating": "يتم اﻹنتقال حاليا إلى:",
|
||||||
"deleteMessageMultiple": "هل تريد بالتأكيد حذف {count} ملف؟",
|
"deleteMessageMultiple": "هل تريد بالتأكيد حذف {count} ملف؟",
|
||||||
"deleteMessageSingle": "هل تريد بالتأكيد حذف هذا الملف/المجلد؟",
|
"deleteMessageSingle": "هل تريد بالتأكيد حذف هذا الملف/المجلد؟",
|
||||||
|
"deleteMessageShare": "هل تريد بالتأكيد إلغاء مشاركة هذا الملف/المجلد ({path})؟",
|
||||||
"deleteTitle": "حذف الملفات",
|
"deleteTitle": "حذف الملفات",
|
||||||
"displayName": "الإسم:",
|
"displayName": "عرض اﻹسم:",
|
||||||
"download": "تحميل الملفات",
|
"download": "تحميل الملفات",
|
||||||
"downloadMessage": "حدد إمتداد الملف المراد تحميله.",
|
"downloadMessage": "حدد إمتداد الملف المراد تحميله.",
|
||||||
"error": "لقد حدث خطأ ما",
|
"error": "لقد حدث خطأ ما",
|
||||||
@@ -130,81 +143,90 @@
|
|||||||
"lastModified": "آخر تعديل",
|
"lastModified": "آخر تعديل",
|
||||||
"move": "نقل",
|
"move": "نقل",
|
||||||
"moveMessage": "إختر مكان جديد للملفات أو المجلدات المراد نقلها:",
|
"moveMessage": "إختر مكان جديد للملفات أو المجلدات المراد نقلها:",
|
||||||
"newArchetype": "إنشاء منشور من المنشور الأصلي. الملف سيتم انشاءه في مجلد المحتويات.",
|
"newArchetype": "إنشاء منشور من المنشور اﻷصلي. الملف سيتم انشاءه في مجلد المحتويات.",
|
||||||
"newDir": "مجلد جديد",
|
"newDir": "مجلد جديد",
|
||||||
"newDirMessage": "رجاء أدخل اسم المجلد الجديد.",
|
"newDirMessage": "أدخل اسم المجلد الجديد.",
|
||||||
"newFile": "ملف جديد",
|
"newFile": "ملف جديد",
|
||||||
"newFileMessage": "رجاء ادخل اسم الملف الجديد.",
|
"newFileMessage": "ادخل اسم الملف الجديد.",
|
||||||
"numberDirs": "عدد المجلدات",
|
"numberDirs": "عدد المجلدات",
|
||||||
"numberFiles": "عدد الملفات",
|
"numberFiles": "عدد الملفات",
|
||||||
"rename": "إعادة تسمية",
|
"rename": "إعادة تسمية",
|
||||||
"renameMessage": "إدراج اسم جديد لـ",
|
"renameMessage": "إدراج اسم جديد لـ",
|
||||||
"replace": "إستبدال",
|
"replace": "إستبدال",
|
||||||
"replaceMessage": "أحد الملفات التي تحاول رفعها يتعارض مع ملف موجود بنفس الإسم. هل تريد إستبدال الملف الموجود؟\n",
|
"replaceMessage": "أحد الملفات التي تحاول رفعها يتعارض مع ملف موجود بنفس اﻹسم. هل المتابعة مع تخطي هذا الملف ام تريد إستبدال الملف الموجود؟\n",
|
||||||
"schedule": "جدولة",
|
"schedule": "جدولة",
|
||||||
"scheduleMessage": "أختر الوقت والتاريخ لجدولة نشر هذا المقال.",
|
"scheduleMessage": "أختر الوقت و التاريخ لجدولة نشر هذا المقال.",
|
||||||
"show": "عرض",
|
"show": "عرض",
|
||||||
"size": "الحجم",
|
"size": "الحجم",
|
||||||
"upload": "",
|
"upload": "رفع",
|
||||||
"uploadMessage": ""
|
"uploadFiles": "يتم رفع {files} ملفات.",
|
||||||
|
"uploadMessage": "إختر الملفات التي تريد رفعها.",
|
||||||
|
"optionalPassword": "كلمة مرور إختيارية"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"images": "الصور",
|
"images": "الصور",
|
||||||
"music": "الموسيقى",
|
"music": "الموسيقى",
|
||||||
"pdf": "PDF",
|
"pdf": "PDF",
|
||||||
"pressToSearch": "Press enter to search...",
|
"pressToSearch": "أضغط زر اﻹدخال للبحث...",
|
||||||
"search": "البحث...",
|
"search": "البحث...",
|
||||||
"typeToSearch": "Type to search...",
|
"typeToSearch": "اكتب للبحث...",
|
||||||
"types": "الأنواع",
|
"types": "اﻷنواع",
|
||||||
"video": "فيديوهات"
|
"video": "فيديوهات"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"admin": "Admin",
|
"admin": "إدارة",
|
||||||
"administrator": "Administrator",
|
"administrator": "مدير",
|
||||||
"allowCommands": "تنفيذ الأوامر",
|
"allowCommands": "تنفيذ اﻷوامر",
|
||||||
"allowEdit": "تعديل، إعادة تسمية وحذف الملفات والمجلدات",
|
"allowEdit": "تعديل، إعادة تسمية و حذف الملفات و المجلدات",
|
||||||
"allowNew": "إنشاء ملفات ومجلدات جديدة",
|
"allowNew": "إنشاء ملفات و مجلدات جديدة",
|
||||||
"allowPublish": "نشر مقالات وصفحات جديدة",
|
"allowPublish": "نشر مقالات و صفحات جديدة",
|
||||||
"allowSignup": "Allow users to signup",
|
"allowSignup": "اسمح للمستخدمين بالاشتراك",
|
||||||
"avoidChanges": "(أتركه فارغاً إن لم ترد تغييره)",
|
"avoidChanges": "(أتركه فارغاً إن لم ترد تغييره)",
|
||||||
"branding": "Branding",
|
"branding": "الشعار",
|
||||||
"brandingDirectoryPath": "Branding directory path",
|
"brandingDirectoryPath": "مسار مجلد الشعار",
|
||||||
"brandingHelp": "You can customize how your File Browser instance looks and feels by changing its name, replacing the logo, adding custom styles and even disable external links to GitHub.\nFor more information about custom branding, please check out the {0}.",
|
"brandingHelp": "بإمكانك ان تخصص شكل و مظهر متصفح الملفات الخاص بك عن طريق تغيير اسمه، او تغيير الشعار، او اضافة ستايل مخصص، او حتى تعطيل الروابط الخارجية لـ GitHub.\nلمزيد من المعلومات حول التخصيص، يرجى الاطلاع على {0}.",
|
||||||
"changePassword": "تغيير كلمة المرور",
|
"changePassword": "تغيير كلمة المرور",
|
||||||
"commandRunner": "Command runner",
|
"commandRunner": "منفذ اﻷوامر",
|
||||||
"commandRunnerHelp": "Here you can set commands that are executed in the named events. You must write one per line. The environment variables {0} and {1} will be available, being {0} relative to {1}. For more information about this feature and the available environment variables, please read the {2}.",
|
"commandRunnerHelp": "هنا بإمكانك تعيين اﻷوامر التي سيتم تنفيذها في اﻷحداث المسماة. يجب كتابة أمر واحد في كل سطر. ستكون المتغيرات البيئية (env) {0} و {1} متاحة، حيث {0} نسبي لـ {1}. لمزيد من المعلومات حول هذه الميزة و المتغيرات البيئية المتاحة، يرجى قراءة {2}.",
|
||||||
"commandsUpdated": "تم تحديث الأوامر",
|
"commandsUpdated": "تم تحديث اﻷوامر",
|
||||||
"createUserDir": "Auto create user home dir while adding new user",
|
"createUserDir": "إنشاء مجلد المستخدم (home) تلقائياً عند إنشاء مستخدم جديد",
|
||||||
|
"tusUploads": "التحميلات المتقطعة",
|
||||||
|
"tusUploadsHelp": "يدعم متصفح الملفات تحميل الملفات المتقطعة، مما يسمح بتحميلات الملفات بشكل فعال و موثوق و قابلة للمتابغة و متقطعة حتى على الشبكات غير الموثوقة.",
|
||||||
|
"tusUploadsChunkSize": "يشير إلى الحد اﻷقصى لحجم الطلب (سيتم استخدام التحميل المباشر للتحميلات صغيرة الخحم). يمكنك إدخال عدد صحيح عادي يدل على الحجم بوحدة البايت أو نمظ مثل10MB, 1GB, إلخ.",
|
||||||
|
"tusUploadsRetryCount": "عدد مرات إعادة المحاولة إذا فشلت عملية تحميل القطعة.",
|
||||||
|
"userHomeBasePath": "المسار الرئيسي لمجلد المستخدم (home)",
|
||||||
|
"userScopeGenerationPlaceholder": "سيتم تعيين نطاق المستخدم تلقائياً",
|
||||||
|
"createUserHomeDirectory": "إنشاء مجلد المستخدم (home)",
|
||||||
"customStylesheet": "ستايل مخصص",
|
"customStylesheet": "ستايل مخصص",
|
||||||
"defaultUserDescription": "This are the default settings for new users.",
|
"defaultUserDescription": "هذه اﻹعدادات اﻹفتراضية للمستخدمين الجدد.",
|
||||||
"disableExternalLinks": "Disable external links (except documentation)",
|
"disableExternalLinks": "تعطيل الروابط الخارجية (بإسثناء الوثائق)",
|
||||||
"disableUsedDiskPercentage": "Disable used disk percentage graph",
|
"disableUsedDiskPercentage": "تعطيل الرسم البياني لنسبة القرص المستخدم",
|
||||||
"documentation": "documentation",
|
"documentation": "التوثيق",
|
||||||
"examples": "أمثلة",
|
"examples": "أمثلة",
|
||||||
"executeOnShell": "Execute on shell",
|
"executeOnShell": "نفيذ اﻷمر على الواجهة (shell)",
|
||||||
"executeOnShellDescription": "By default, File Browser executes the commands by calling their binaries directly. If you want to run them on a shell instead (such as Bash or PowerShell), you can define it here with the required arguments and flags. If set, the command you execute will be appended as an argument. This apply to both user commands and event hooks.",
|
"executeOnShellDescription": "يقوم متصفح الملفات بتنفيذ اﻷوامر عن طريق استدعاء البرامج المنفذة مباشرة. إذا كنت تريد تشغيلها عن ظريق واجهة اﻷوامر (shell) مثل Bash أو PowerShell، يمكنك تعريفها هنا مع الوسائظ (arguments) المطلوبة. إذا تم تعيينها، سيتم إضافة اﻷمر الذي تقوم بتنفيذه كوسيط. ينطبق هذا على كل من أوامر المستخدم روابظ الحدث (hooks).",
|
||||||
"globalRules": "This is a global set of allow and disallow rules. They apply to every user. You can define specific rules on each user's settings to override this ones.",
|
"globalRules": "هذه مجموعة من القواعد العامة للسماح و المنع. تطبق على كل المستخدمين. يمكنك تحديد قواعد محددة لكل مستخدم لتجاوز القواعد الغامة.",
|
||||||
"globalSettings": "إعدادات عامة",
|
"globalSettings": "إعدادات عامة",
|
||||||
"hideDotfiles": "",
|
"hideDotfiles": "إخفاء ملفات النقطة",
|
||||||
"insertPath": "Insert the path",
|
"insertPath": "ادخل المسار",
|
||||||
"insertRegex": "Insert regex expression",
|
"insertRegex": "ادخل تعبيراً منطقياً (regex)",
|
||||||
"instanceName": "Instance name",
|
"instanceName": "اسم النسخة",
|
||||||
"language": "اللغة",
|
"language": "اللغة",
|
||||||
"lockPassword": "منع المستخدم من تغيير كلمة المرور",
|
"lockPassword": "منع المستخدم من تغيير كلمة المرور",
|
||||||
"newPassword": "كلمة المرور الجديدة",
|
"newPassword": "كلمة المرور الجديدة",
|
||||||
"newPasswordConfirm": "تأكيد كلمة المرور",
|
"newPasswordConfirm": "تأكيد كلمة المرور",
|
||||||
"newUser": "مستخدم جديد",
|
"newUser": "مستخدم جديد",
|
||||||
"password": "كلمة المرور",
|
"password": "كلمة المرور",
|
||||||
"passwordUpdated": "تم تغيير كلمة المرور",
|
"passwordUpdated": "تم تغيير كلمة المرور!",
|
||||||
"path": "",
|
"path": "المسار",
|
||||||
"perm": {
|
"perm": {
|
||||||
"create": "Create files and directories",
|
"create": "إنشاء ملفات و مجلدات جديدة",
|
||||||
"delete": "Delete files and directories",
|
"delete": "حذف ملفات و مجلدات",
|
||||||
"download": "Download",
|
"download": "تحميل",
|
||||||
"execute": "Execute commands",
|
"execute": "تنفيذ اﻷوامر",
|
||||||
"modify": "Edit files",
|
"modify": "تعديل محتويات الملفات",
|
||||||
"rename": "Rename or move files and directories",
|
"rename": "إعادة تسمية او نقل ملفات و مجلدات",
|
||||||
"share": "Share files"
|
"share": "مشاركة ملفات"
|
||||||
},
|
},
|
||||||
"permissions": "الصلاحيات",
|
"permissions": "الصلاحيات",
|
||||||
"permissionsHelp": "يمكنك تعيين المستخدم كـ \"مدير\" أو تحديد الصلاحيات بشكل منفرد.\n إذا قمت بتحديد المستخدم كـ \"مدير\"، باقي الخيارات سيتم تحديدها تلقائياً.\n إدارة المستخدمين تبقى صلاحية فريدة للـ \"مدير\" فقط.\n",
|
"permissionsHelp": "يمكنك تعيين المستخدم كـ \"مدير\" أو تحديد الصلاحيات بشكل منفرد.\n إذا قمت بتحديد المستخدم كـ \"مدير\"، باقي الخيارات سيتم تحديدها تلقائياً.\n إدارة المستخدمين تبقى صلاحية فريدة للـ \"مدير\" فقط.\n",
|
||||||
@@ -212,22 +234,24 @@
|
|||||||
"ruleExample1": "منع الوصول إلى الملفات التي تبدأ بنقطة مثل (.git، و .gitignore) في كل مجلد.\n",
|
"ruleExample1": "منع الوصول إلى الملفات التي تبدأ بنقطة مثل (.git، و .gitignore) في كل مجلد.\n",
|
||||||
"ruleExample2": "منع الوصول إلى الملف المسمى Caddyfile في نطاق الجذر.",
|
"ruleExample2": "منع الوصول إلى الملف المسمى Caddyfile في نطاق الجذر.",
|
||||||
"rules": "المجموعات",
|
"rules": "المجموعات",
|
||||||
"rulesHelp": "يمكنك هنا تحديد مجموعة من شروط السماح والمنع لهذا المستخدم. الملفات الممنوعة لن تظهر ضمن القائمة لهذا المستخدم ولن يستطيع الوصول لها. هنا ندعم الـ regex والـ relative path لنطاق المستخدمين.\n",
|
"rulesHelp": "يمكنك هنا تحديد مجموعة من شروط السماح و المنع لهذا المستخدم. الملفات الممنوعة لن تظهر ضمن القائمة لهذا المستخدم و لن يستطيع الوصول لها. هنا ندعم الـ regex و الـ relative path لنطاق المستخدمين.\n",
|
||||||
"scope": "نطاق",
|
"scope": "نطاق",
|
||||||
"settingsUpdated": "تم تعديل الإعدادات",
|
"setDateFormat": "حدد تنسيق التاريخ",
|
||||||
"shareDuration": "",
|
"settingsUpdated": "تم تعديل اﻹعدادات",
|
||||||
"shareManagement": "",
|
"shareDuration": "مدة المشاركة",
|
||||||
"singleClick": "",
|
"shareManagement": "إدارة المشاركات",
|
||||||
|
"shareDeleted": "تم حذف المشاركة!",
|
||||||
|
"singleClick": "استخدم النقرة الواحدة لفتح الملفات",
|
||||||
"themes": {
|
"themes": {
|
||||||
"dark": "",
|
"dark": "غامق",
|
||||||
"light": "",
|
"light": "فاتح",
|
||||||
"title": ""
|
"title": "موضوع"
|
||||||
},
|
},
|
||||||
"user": "المستخدم",
|
"user": "المستخدم",
|
||||||
"userCommands": "الأوامر",
|
"userCommands": "اﻷوامر",
|
||||||
"userCommandsHelp": "الأوامر المتاحة لهذا المستخدم مفصولة فيما بينها بمسافة. مثال:\n",
|
"userCommandsHelp": "اﻷوامر المتاحة لهذا المستخدم مفصولة فيما بينها بمسافة. مثال:\n",
|
||||||
"userCreated": "تم إنشاء المستخدم",
|
"userCreated": "تم إنشاء المستخدم",
|
||||||
"userDefaults": "User default settings",
|
"userDefaults": "إعدادات المستخدم اﻹفتراضية",
|
||||||
"userDeleted": "تم حذف المستخدم",
|
"userDeleted": "تم حذف المستخدم",
|
||||||
"userManagement": "إدارة المستخدمين",
|
"userManagement": "إدارة المستخدمين",
|
||||||
"userUpdated": "تم تعديل المستخدم",
|
"userUpdated": "تم تعديل المستخدم",
|
||||||
@@ -237,14 +261,14 @@
|
|||||||
"sidebar": {
|
"sidebar": {
|
||||||
"help": "مساعدة",
|
"help": "مساعدة",
|
||||||
"hugoNew": "هيوجو جديد",
|
"hugoNew": "هيوجو جديد",
|
||||||
"login": "Login",
|
"login": "تسجيل دخول",
|
||||||
"logout": "تسجيل خروج",
|
"logout": "تسجيل خروج",
|
||||||
"myFiles": "ملفاتي",
|
"myFiles": "ملفاتي",
|
||||||
"newFile": "ملف جديد",
|
"newFile": "ملف جديد",
|
||||||
"newFolder": "مجلد جديد",
|
"newFolder": "مجلد جديد",
|
||||||
"preview": "معاينة",
|
"preview": "عرض مسبق",
|
||||||
"settings": "الإعدادات",
|
"settings": "اﻹعدادات",
|
||||||
"signup": "Signup",
|
"signup": "إشتراك",
|
||||||
"siteSettings": "إعدادات الموقع"
|
"siteSettings": "إعدادات الموقع"
|
||||||
},
|
},
|
||||||
"success": {
|
"success": {
|
||||||
@@ -258,3 +282,4 @@
|
|||||||
"unit": "وحدة الوقت"
|
"unit": "وحدة الوقت"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -38,7 +38,8 @@
|
|||||||
"update": "Update",
|
"update": "Update",
|
||||||
"upload": "Upload",
|
"upload": "Upload",
|
||||||
"openFile": "Open file",
|
"openFile": "Open file",
|
||||||
"continue": "Continue"
|
"continue": "Continue",
|
||||||
|
"discardChanges": "Discard"
|
||||||
},
|
},
|
||||||
"download": {
|
"download": {
|
||||||
"downloadFile": "Download File",
|
"downloadFile": "Download File",
|
||||||
@@ -46,7 +47,7 @@
|
|||||||
"downloadSelected": "Download Selected"
|
"downloadSelected": "Download Selected"
|
||||||
},
|
},
|
||||||
"upload": {
|
"upload": {
|
||||||
"abortUpload": "Are you sure you want to abort?"
|
"abortUpload": "Are you sure you wish to abort?"
|
||||||
},
|
},
|
||||||
"errors": {
|
"errors": {
|
||||||
"forbidden": "You don't have permissions to access this.",
|
"forbidden": "You don't have permissions to access this.",
|
||||||
@@ -128,32 +129,32 @@
|
|||||||
"permanent": "Permanent",
|
"permanent": "Permanent",
|
||||||
"prompts": {
|
"prompts": {
|
||||||
"copy": "Copy",
|
"copy": "Copy",
|
||||||
"copyMessage": "Choose the place to copy your files:",
|
"copyMessage": "Choose the location to copy your files to:",
|
||||||
"currentlyNavigating": "Currently navigating on:",
|
"currentlyNavigating": "Currently navigating on:",
|
||||||
"deleteMessageMultiple": "Are you sure you want to delete {count} file(s)?",
|
"deleteMessageMultiple": "Are you sure you wish to delete {count} file(s)?",
|
||||||
"deleteMessageSingle": "Are you sure you want to delete this file/folder?",
|
"deleteMessageSingle": "Are you sure you wish to delete this file/folder?",
|
||||||
"deleteMessageShare": "Are you sure you want to delete this share({path})?",
|
"deleteMessageShare": "Are you sure you wish to delete this share({path})?",
|
||||||
"deleteTitle": "Delete files",
|
"deleteTitle": "Delete files",
|
||||||
"displayName": "Display Name:",
|
"displayName": "Display Name:",
|
||||||
"download": "Download files",
|
"download": "Download files",
|
||||||
"downloadMessage": "Choose the format you want to download.",
|
"downloadMessage": "Choose the format you wish to download.",
|
||||||
"error": "Something went wrong",
|
"error": "Something went wrong",
|
||||||
"fileInfo": "File information",
|
"fileInfo": "File information",
|
||||||
"filesSelected": "{count} files selected.",
|
"filesSelected": "{count} files selected.",
|
||||||
"lastModified": "Last Modified",
|
"lastModified": "Last Modified",
|
||||||
"move": "Move",
|
"move": "Move",
|
||||||
"moveMessage": "Choose new house for your file(s)/folder(s):",
|
"moveMessage": "Choose new home for your file(s)/folder(s):",
|
||||||
"newArchetype": "Create a new post based on an archetype. Your file will be created on content folder.",
|
"newArchetype": "Create a new post based on an archetype. Your file will be created on content folder.",
|
||||||
"newDir": "New directory",
|
"newDir": "New directory",
|
||||||
"newDirMessage": "Write the name of the new directory.",
|
"newDirMessage": "Name your new directory.",
|
||||||
"newFile": "New file",
|
"newFile": "New file",
|
||||||
"newFileMessage": "Write the name of the new file.",
|
"newFileMessage": "Name your new file.",
|
||||||
"numberDirs": "Number of directories",
|
"numberDirs": "Number of directories",
|
||||||
"numberFiles": "Number of files",
|
"numberFiles": "Number of files",
|
||||||
"rename": "Rename",
|
"rename": "Rename",
|
||||||
"renameMessage": "Insert a new name for",
|
"renameMessage": "Insert a new name for",
|
||||||
"replace": "Replace",
|
"replace": "Replace",
|
||||||
"replaceMessage": "One of the files you're trying to upload is conflicting because of its name. Do you wish to continue to upload or replace the existing one?\n",
|
"replaceMessage": "One of the files you're trying to upload has a conflicting name. Do you wish to skip this file and continue to upload or replace the existing one?\n",
|
||||||
"schedule": "Schedule",
|
"schedule": "Schedule",
|
||||||
"scheduleMessage": "Pick a date and time to schedule the publication of this post.",
|
"scheduleMessage": "Pick a date and time to schedule the publication of this post.",
|
||||||
"show": "Show",
|
"show": "Show",
|
||||||
@@ -161,7 +162,9 @@
|
|||||||
"upload": "Upload",
|
"upload": "Upload",
|
||||||
"uploadFiles": "Uploading {files} files...",
|
"uploadFiles": "Uploading {files} files...",
|
||||||
"uploadMessage": "Select an option to upload.",
|
"uploadMessage": "Select an option to upload.",
|
||||||
"optionalPassword": "Optional password"
|
"optionalPassword": "Optional password",
|
||||||
|
"resolution": "Resolution",
|
||||||
|
"discardEditorChanges": "Are you sure you wish to discard the changes you've made?"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"images": "Images",
|
"images": "Images",
|
||||||
@@ -192,7 +195,7 @@
|
|||||||
"createUserDir": "Auto create user home dir while adding new user",
|
"createUserDir": "Auto create user home dir while adding new user",
|
||||||
"tusUploads": "Chunked Uploads",
|
"tusUploads": "Chunked Uploads",
|
||||||
"tusUploadsHelp": "File Browser supports chunked file uploads, allowing for the creation of efficient, reliable, resumable and chunked file uploads even on unreliable networks.",
|
"tusUploadsHelp": "File Browser supports chunked file uploads, allowing for the creation of efficient, reliable, resumable and chunked file uploads even on unreliable networks.",
|
||||||
"tusUploadsChunkSize": "Indicates to maximum size of a request (direct uploads will be used for smaller uploads). You may input a plain integer denoting a bytes input or a string like 10MB, 1GB etc.",
|
"tusUploadsChunkSize": "Indicates to maximum size of a request (direct uploads will be used for smaller uploads). You may input a plain integer denoting byte size input or a string like 10MB, 1GB etc.",
|
||||||
"tusUploadsRetryCount": "Number of retries to perform if a chunk fails to upload.",
|
"tusUploadsRetryCount": "Number of retries to perform if a chunk fails to upload.",
|
||||||
"userHomeBasePath": "Base path for user home directories",
|
"userHomeBasePath": "Base path for user home directories",
|
||||||
"userScopeGenerationPlaceholder": "The scope will be auto generated",
|
"userScopeGenerationPlaceholder": "The scope will be auto generated",
|
||||||
@@ -204,7 +207,7 @@
|
|||||||
"documentation": "documentation",
|
"documentation": "documentation",
|
||||||
"examples": "Examples",
|
"examples": "Examples",
|
||||||
"executeOnShell": "Execute on shell",
|
"executeOnShell": "Execute on shell",
|
||||||
"executeOnShellDescription": "By default, File Browser executes the commands by calling their binaries directly. If you want to run them on a shell instead (such as Bash or PowerShell), you can define it here with the required arguments and flags. If set, the command you execute will be appended as an argument. This apply to both user commands and event hooks.",
|
"executeOnShellDescription": "By default, File Browser executes the commands by calling their binaries directly. If you wish to run them on a shell instead (such as Bash or PowerShell), you can define it here with the required arguments and flags. If set, the command you execute will be appended as an argument. This applies to both user commands and event hooks.",
|
||||||
"globalRules": "This is a global set of allow and disallow rules. They apply to every user. You can define specific rules on each user's settings to override these ones.",
|
"globalRules": "This is a global set of allow and disallow rules. They apply to every user. You can define specific rules on each user's settings to override these ones.",
|
||||||
"globalSettings": "Global Settings",
|
"globalSettings": "Global Settings",
|
||||||
"hideDotfiles": "Hide dotfiles",
|
"hideDotfiles": "Hide dotfiles",
|
||||||
@@ -231,7 +234,7 @@
|
|||||||
"permissions": "Permissions",
|
"permissions": "Permissions",
|
||||||
"permissionsHelp": "You can set the user to be an administrator or choose the permissions individually. If you select \"Administrator\", all of the other options will be automatically checked. The management of users remains a privilege of an administrator.\n",
|
"permissionsHelp": "You can set the user to be an administrator or choose the permissions individually. If you select \"Administrator\", all of the other options will be automatically checked. The management of users remains a privilege of an administrator.\n",
|
||||||
"profileSettings": "Profile Settings",
|
"profileSettings": "Profile Settings",
|
||||||
"ruleExample1": "prevents the access to any dot file (such as .git, .gitignore) in every folder.\n",
|
"ruleExample1": "prevents the access to any dotfile (such as .git, .gitignore) in every folder.\n",
|
||||||
"ruleExample2": "blocks the access to the file named Caddyfile on the root of the scope.",
|
"ruleExample2": "blocks the access to the file named Caddyfile on the root of the scope.",
|
||||||
"rules": "Rules",
|
"rules": "Rules",
|
||||||
"rulesHelp": "Here you can define a set of allow and disallow rules for this specific user. The blocked files won't show up in the listings and they wont be accessible to the user. We support regex and paths relative to the users scope.\n",
|
"rulesHelp": "Here you can define a set of allow and disallow rules for this specific user. The blocked files won't show up in the listings and they wont be accessible to the user. We support regex and paths relative to the users scope.\n",
|
||||||
|
|||||||
@@ -2,47 +2,53 @@
|
|||||||
"buttons": {
|
"buttons": {
|
||||||
"cancel": "ביטול",
|
"cancel": "ביטול",
|
||||||
"close": "סגירה",
|
"close": "סגירה",
|
||||||
"copy": "העתק",
|
"copy": "העתקה",
|
||||||
"copyFile": "העתק קובץ",
|
"copyFile": "העתק קובץ",
|
||||||
"copyToClipboard": "העתק ללוח",
|
"copyToClipboard": "העתק ללוח",
|
||||||
|
"copyDownloadLinkToClipboard": "העתק קישור הורדה ללוח",
|
||||||
"create": "צור",
|
"create": "צור",
|
||||||
"delete": "מחק",
|
"delete": "מחק",
|
||||||
"download": "הורד",
|
"download": "הורדה",
|
||||||
"file": "קובץ",
|
"file": "קובץ",
|
||||||
"folder": "תקייה",
|
"folder": "תיקייה",
|
||||||
"hideDotfiles": "הסתר קבצים נסתרים",
|
"hideDotfiles": "הסתר קבצים/תיקיות ששמם מתחיל בנקודה",
|
||||||
"info": "מידע",
|
"info": "מידע",
|
||||||
"more": "עוד",
|
"more": "עוד",
|
||||||
"move": "העבר",
|
"move": "העברה",
|
||||||
"moveFile": "העבר קובץ",
|
"moveFile": "העבר קובץ",
|
||||||
"new": "חדש",
|
"new": "חדש",
|
||||||
"next": "הבא",
|
"next": "הבא",
|
||||||
"ok": "אישור",
|
"ok": "אישור",
|
||||||
"permalink": "צור קישור קבוע",
|
"permalink": "יצירת קישור קבוע",
|
||||||
"previous": "הקודם",
|
"previous": "הקודם",
|
||||||
"publish": "יצירה",
|
"publish": "פרסום",
|
||||||
"rename": "שנה שם",
|
"rename": "שינוי שם",
|
||||||
"replace": "החלף",
|
"replace": "החלפה",
|
||||||
"reportIssue": "דווח על תקלה",
|
"reportIssue": "דווח על תקלה",
|
||||||
"save": "שמור",
|
"save": "שמירה",
|
||||||
"schedule": "תזמון",
|
"schedule": "תזמון",
|
||||||
"search": "חיפוש",
|
"search": "חיפוש",
|
||||||
"select": "בחר",
|
"select": "בחירה",
|
||||||
"selectMultiple": "בחירה מרובה",
|
"selectMultiple": "בחירה מרובה",
|
||||||
"share": "שתף",
|
"share": "שיתוף",
|
||||||
"shell": "פתיחת מסוף",
|
"shell": "פתיחת מסוף",
|
||||||
"submit": "אישור",
|
"submit": "אישור",
|
||||||
"switchView": "שנה תצוגה",
|
"switchView": "שינוי תצוגה",
|
||||||
"toggleSidebar": "פתיחת / סגירת סרגל צד",
|
"toggleSidebar": "פתיחת/סגירת סרגל צד",
|
||||||
"update": "עדכון",
|
"update": "עדכון",
|
||||||
"upload": "העלאה",
|
"upload": "העלאה",
|
||||||
"openFile": "פתח קובץ"
|
"openFile": "פתח קובץ",
|
||||||
|
"continue": "המשך",
|
||||||
|
"discardChanges": "זריקת השינויים"
|
||||||
},
|
},
|
||||||
"download": {
|
"download": {
|
||||||
"downloadFile": "הורד קובץ",
|
"downloadFile": "הורד קובץ",
|
||||||
"downloadFolder": "הורד תקייה",
|
"downloadFolder": "הורד תיקייה",
|
||||||
"downloadSelected": "הורד קבצים שנבחרו"
|
"downloadSelected": "הורד קבצים שנבחרו"
|
||||||
},
|
},
|
||||||
|
"upload": {
|
||||||
|
"abortUpload": "האם אתה בטוח שברצונך להפסיק את ההעלאה?"
|
||||||
|
},
|
||||||
"errors": {
|
"errors": {
|
||||||
"forbidden": "אין לך הרשאות גישה",
|
"forbidden": "אין לך הרשאות גישה",
|
||||||
"internal": "משהו השתבש",
|
"internal": "משהו השתבש",
|
||||||
@@ -51,10 +57,10 @@
|
|||||||
},
|
},
|
||||||
"files": {
|
"files": {
|
||||||
"body": "גוף",
|
"body": "גוף",
|
||||||
"clear": "נקה",
|
"clear": "ניקוי",
|
||||||
"closePreview": "סגירת תצוגה מקדימה",
|
"closePreview": "סגירת תצוגה מקדימה",
|
||||||
"files": "קבצים",
|
"files": "קבצים",
|
||||||
"folders": "תקיות",
|
"folders": "תיקיות",
|
||||||
"home": "ראשי",
|
"home": "ראשי",
|
||||||
"lastModified": "שונה לאחרונה",
|
"lastModified": "שונה לאחרונה",
|
||||||
"loading": "טוען...",
|
"loading": "טוען...",
|
||||||
@@ -66,20 +72,20 @@
|
|||||||
"sortByLastModified": "מיין לפי השינוי האחרון",
|
"sortByLastModified": "מיין לפי השינוי האחרון",
|
||||||
"sortByName": "מיין לפי שם",
|
"sortByName": "מיין לפי שם",
|
||||||
"sortBySize": "מיין לפי גודל",
|
"sortBySize": "מיין לפי גודל",
|
||||||
"noPreview": "תצוגה מקדימה לא זמינה לקובץ זה"
|
"noPreview": "לא זמינה תצוגה מקדימה לקובץ זה"
|
||||||
},
|
},
|
||||||
"help": {
|
"help": {
|
||||||
"click": "בחר קובץ או תקייה",
|
"click": "בחר קובץ או תיקייה",
|
||||||
"ctrl": {
|
"ctrl": {
|
||||||
"click": "בחר מספר קבצים או תקיות",
|
"click": "בחר מספר קבצים או תיקיות",
|
||||||
"f": "פותח את החיפוש",
|
"f": "פותח את החיפוש",
|
||||||
"s": "לשמור קובץ או להוריד את התקייה שבה אתה נמצא"
|
"s": "לשמור קובץ או להוריד את התיקייה שבה אתה נמצא"
|
||||||
},
|
},
|
||||||
"del": "מחק את מה שנבחר",
|
"del": "מחק את הבחירה",
|
||||||
"doubleClick": "פתח קובץ או תקייה",
|
"doubleClick": "פתח קובץ או תיקייה",
|
||||||
"esc": "נקה את הבחירה ו/או סגור את השדה",
|
"esc": "נקה את הבחירה ו/או סגור את השדה",
|
||||||
"f1": "המידע הזה",
|
"f1": "המידע הזה",
|
||||||
"f2": "שנה שם קובץ",
|
"f2": "שינוי שם קובץ",
|
||||||
"help": "עזרה"
|
"help": "עזרה"
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
@@ -109,44 +115,44 @@
|
|||||||
},
|
},
|
||||||
"login": {
|
"login": {
|
||||||
"createAnAccount": "צור חשבון",
|
"createAnAccount": "צור חשבון",
|
||||||
"loginInstead": "חשבון קיים",
|
"loginInstead": "כבר יש לי חשבון",
|
||||||
"password": "סיסמא",
|
"password": "סיסמא",
|
||||||
"passwordConfirm": "אימות סיסמא",
|
"passwordConfirm": "אימות סיסמא",
|
||||||
"passwordsDontMatch": "סיסמאות אינן תואמות",
|
"passwordsDontMatch": "הסיסמאות אינן תואמות",
|
||||||
"signup": "הרשמה",
|
"signup": "הרשמה",
|
||||||
"submit": "התחברות",
|
"submit": "התחברות",
|
||||||
"username": "שם משתמש",
|
"username": "שם משתמש",
|
||||||
"usernameTaken": "שם משתמש כבר קיים",
|
"usernameTaken": "שם המשתמש כבר קיים",
|
||||||
"wrongCredentials": "פרטי התחברות שגויים"
|
"wrongCredentials": "פרטי התחברות שגויים"
|
||||||
},
|
},
|
||||||
"permanent": "קבוע",
|
"permanent": "קבוע",
|
||||||
"prompts": {
|
"prompts": {
|
||||||
"copy": "העתק",
|
"copy": "העתקה",
|
||||||
"copyMessage": "בחר לאן להעתיק את הקבצים:",
|
"copyMessage": "בחר לאן להעתיק את הקבצים:",
|
||||||
"currentlyNavigating": "כרגע מנווט ב:",
|
"currentlyNavigating": "כרגע מנווט ב:",
|
||||||
"deleteMessageMultiple": "האם אתה בטוח שברצונך למחוק {count} קבצים?",
|
"deleteMessageMultiple": "האם אתה בטוח שברצונך למחוק {count} קבצים?",
|
||||||
"deleteMessageSingle": "האם אתה בטוח שברצונך למחוק את הקובץ או התקייה?",
|
"deleteMessageSingle": "האם אתה בטוח שברצונך למחוק את הקובץ/התיקייה?",
|
||||||
"deleteMessageShare": "האם אתה בטוח שברצונך למחוק את השיתוף הזה?({path})?",
|
"deleteMessageShare": "האם אתה בטוח שברצונך למחוק את השיתוף הזה ({path})?",
|
||||||
"deleteTitle": "מחק קבצים",
|
"deleteTitle": "מחיקת קבצים",
|
||||||
"displayName": "שם:",
|
"displayName": "שם:",
|
||||||
"download": "הורד קבצים",
|
"download": "הורדת קבצים",
|
||||||
"downloadMessage": "בחר את הפורמט שברצונך להוריד",
|
"downloadMessage": "בחר את הפורמט שברצונך להוריד",
|
||||||
"error": "משהו השתבש",
|
"error": "משהו השתבש",
|
||||||
"fileInfo": "מידע על הקובץ",
|
"fileInfo": "מידע על הקובץ",
|
||||||
"filesSelected": "{count} קבצים נבחרו.",
|
"filesSelected": "{count} קבצים נבחרו.",
|
||||||
"lastModified": "שונה לאחרונה",
|
"lastModified": "שונה לאחרונה",
|
||||||
"move": "העבר",
|
"move": "העברה",
|
||||||
"moveMessage": "בחר מיקום חדש לקובץ / תקייה:",
|
"moveMessage": "בחר מיקום חדש לקובץ/תיקייה:",
|
||||||
"newArchetype": "צור פוסט חדש. הקובץ יווצר בתקיית התוכן",
|
"newArchetype": "Create a new post based on an archetype. Your file will be created on content folder",
|
||||||
"newDir": "תקייה חדשה",
|
"newDir": "תיקייה חדשה",
|
||||||
"newDirMessage": "כתוב את שם התקייה החדשה",
|
"newDirMessage": "כתוב את שם התיקייה החדשה",
|
||||||
"newFile": "קובץ חדש",
|
"newFile": "קובץ חדש",
|
||||||
"newFileMessage": "כתוב את שם הקובץ החדש",
|
"newFileMessage": "כתוב את שם הקובץ החדש",
|
||||||
"numberDirs": "מספר התקיות",
|
"numberDirs": "כמות התיקיות",
|
||||||
"numberFiles": "מספר הקבצים",
|
"numberFiles": "כמות הקבצים",
|
||||||
"rename": "שנה שם",
|
"rename": "שינוי שם",
|
||||||
"renameMessage": "הכנס שם חדש עבור",
|
"renameMessage": "הכנס שם חדש עבור",
|
||||||
"replace": "החלף",
|
"replace": "החלפה",
|
||||||
"replaceMessage": "אחד הקבצים בעל שם זהה לקובץ קיים, האם ברצונך להחליף את הקובץ הקיים בחדש? זהירות - הקובץ הישן ימחק\n",
|
"replaceMessage": "אחד הקבצים בעל שם זהה לקובץ קיים, האם ברצונך להחליף את הקובץ הקיים בחדש? זהירות - הקובץ הישן ימחק\n",
|
||||||
"schedule": "תזמון",
|
"schedule": "תזמון",
|
||||||
"scheduleMessage": "בחר תאריך ושעה לתזמון הפרסום של פוסט זה.",
|
"scheduleMessage": "בחר תאריך ושעה לתזמון הפרסום של פוסט זה.",
|
||||||
@@ -155,53 +161,55 @@
|
|||||||
"upload": "העלאה",
|
"upload": "העלאה",
|
||||||
"uploadFiles": "מעלה {files} קבצים...",
|
"uploadFiles": "מעלה {files} קבצים...",
|
||||||
"uploadMessage": "בחר אפשרות העלאה.",
|
"uploadMessage": "בחר אפשרות העלאה.",
|
||||||
"optionalPassword": "סיסמא אופציונלית"
|
"optionalPassword": "סיסמא אופציונלית",
|
||||||
|
"discardEditorChanges": "האם אתה בטוח שברצונך לבטל את השינויים שביצעת?"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"images": "תמונות",
|
"images": "תמונות",
|
||||||
"music": "מוזיקה",
|
"music": "מוזיקה",
|
||||||
"pdf": "PDF",
|
"pdf": "PDF",
|
||||||
"pressToSearch": "הקש אנטר לחיפוש...",
|
"pressToSearch": "הקש אנטר כדי לחפש...",
|
||||||
"search": "חפש...",
|
"search": "חיפוש...",
|
||||||
"typeToSearch": "הקלד לחיפוש...",
|
"typeToSearch": "הקלד כדי לחפש...",
|
||||||
"types": "סוג",
|
"types": "סוגים",
|
||||||
"video": "וידאו"
|
"video": "וידאו"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"admin": "מנהל",
|
"admin": "מנהל",
|
||||||
"administrator": "מנהל ראשי",
|
"administrator": "מנהל ראשי",
|
||||||
"allowCommands": "הפעל פקודות",
|
"allowCommands": "הפעלת פקודות",
|
||||||
"allowEdit": "ערוך, שנה שם ומחק קבצים או תקיות",
|
"allowEdit": "עריכת, שינוי שם ומחיקת קבצים/תיקיות",
|
||||||
"allowNew": "צור קבצים ותקיות חדשות",
|
"allowNew": "יצירת קבצים ותיקיות חדשות",
|
||||||
"allowPublish": "פרסם פוסטים ודפים חדשים",
|
"allowPublish": "פרסום פוסטים ודפים חדשים",
|
||||||
"allowSignup": "אפשר למשתמשים להירשם",
|
"allowSignup": "אפשר למשתמשים חדשים להירשם",
|
||||||
"avoidChanges": "(השאר ריק כדי למנוע שינויים)",
|
"avoidChanges": "(השאר ריק כדי למנוע שינויים)",
|
||||||
"branding": "מיתוג",
|
"branding": "מיתוג",
|
||||||
"brandingDirectoryPath": "נתיב תקיית מיתוג",
|
"brandingDirectoryPath": "נתיב תיקיית מיתוג",
|
||||||
"brandingHelp": "אתה יכול להגדיר את האופן שבו האפליקציה תראה על ידי שינוי שם האפליקציה, החלפת הלוגו, הוספת עיצוב מותאם אישית ואפילו השבתת קישורים חיצוניים לGithub.\nלמידע נוסף עיין ב-{0}.",
|
"brandingHelp": "אתה יכול להגדיר את האופן שבו האפליקציה תראה על ידי שינוי שם האפליקציה, החלפת הלוגו, הוספת עיצוב מותאם אישית ואפילו השבתת קישורים חיצוניים לGithub.\nלמידע נוסף עיין ב-{0}.",
|
||||||
"changePassword": "שנה סיסמא",
|
"changePassword": "שינוי סיסמא",
|
||||||
"commandRunner": "הרצת פקודות",
|
"commandRunner": "הרצת פקודות",
|
||||||
"commandRunnerHelp": "אתה יכול להגדיר פקודות שיבוצעו באירועים שונים. עליך לכתוב אחד בכל שורה. משתני הסביבה {0} ו-{1} יהיו זמינים, בהיותם {0} ביחס ל-{1}. למידע נוסף על תכונה זו ועל משתני הסביבה הזמינים, עיין ב {2}.",
|
"commandRunnerHelp": "אתה יכול להגדיר פקודות שיבוצעו באירועים שונים. עליך לכתוב אחד בכל שורה. משתני הסביבה {0} ו-{1} יהיו זמינים, בהיותם {0} ביחס ל-{1}. למידע נוסף על תכונה זו ועל משתני הסביבה הזמינים, עיין ב {2}.",
|
||||||
"commandsUpdated": "הפקודות עודכנו.",
|
"commandsUpdated": "הפקודות עודכנו!",
|
||||||
"createUserDir": "צור תקיית בית במהלך הוספת משתמש חדש",
|
"createUserDir": "צור אוטומטית תיקיית בית בעת הוספת משתמש חדש",
|
||||||
"userHomeBasePath": "נתיב ראשי לתקיות הבית של משתמשים",
|
"userHomeBasePath": "נתיב ראשי לתיקיות הבית של משתמשים",
|
||||||
"userScopeGenerationPlaceholder": "התחום יווצר אוטומטית",
|
"userScopeGenerationPlaceholder": "ההיקף יווצר אוטומטית",
|
||||||
"createUserHomeDirectory": "צור תקיית בית למשתמש",
|
"createUserHomeDirectory": "צור תיקיית בית למשתמש",
|
||||||
"customStylesheet": "עיצוב מותאם אישית (Stylesheet)",
|
"customStylesheet": "עיצוב מותאם אישית (Stylesheet)",
|
||||||
"defaultUserDescription": "אלה הגדרות ברירת המחדל למשתמשים חדשים",
|
"defaultUserDescription": "הגדרות ברירת המחדל למשתמשים חדשים",
|
||||||
"disableExternalLinks": "השבת קישורים חיצוניים (למעט תיעוד)",
|
"disableExternalLinks": "השבת קישורים חיצוניים (למעט תיעוד)",
|
||||||
|
"disableUsedDiskPercentage": "אל תציג גרף שימוש בדיסק",
|
||||||
"documentation": "תיעוד",
|
"documentation": "תיעוד",
|
||||||
"examples": "דוגמאות",
|
"examples": "דוגמאות",
|
||||||
"executeOnShell": "בצע במסוף",
|
"executeOnShell": "בצע במסוף",
|
||||||
"executeOnShellDescription": "כברירת מחדל, האפליקציה מבצעת את הפקודות על ידי הפעלה ישירה לקבצים (הבינארים). אם אתה רוצה להפעיל אותם מתוך מעטפת כלשהי, (לדוגמא מתוך Bash או PowerShell) אתה יכול להגדיר אותם כאן עם הפרמטרים הנדרשים. שים לב שזה יבוצע גם על פקודות משתמש וגם על הוקים (Hooks) לאירועים.",
|
"executeOnShellDescription": "כברירת מחדל, האפליקציה מבצעת את הפקודות על ידי הפעלה ישירה לקבצים (הבינארים). אם אתה רוצה להפעיל אותם מתוך מעטפת כלשהי, (לדוגמא מתוך Bash או PowerShell) אתה יכול להגדיר אותם כאן עם הפרמטרים הנדרשים. שים לב שזה יבוצע גם על פקודות משתמש וגם על הוקים (Hooks) לאירועים.",
|
||||||
"globalRules": "זוהי קבוצה גלובלית של חוקים והרשאות (מה מותר ומה אסור), הם חלים על כל משתמש. אתה יכול להגדיר כללים ספציפיים בהגדרות של כל משתמש, כדי לעקוף את החוקים הגלובלים.",
|
"globalRules": "זוהי קבוצה גלובלית של חוקים והרשאות (מה מותר ומה אסור), הם חלים על כל משתמש. אתה יכול להגדיר כללים ספציפיים בהגדרות של כל משתמש, כדי לעקוף את החוקים הגלובלים.",
|
||||||
"globalSettings": "הגדרות גלובליות",
|
"globalSettings": "הגדרות גלובליות",
|
||||||
"hideDotfiles": "הסתר קבצים נסתרים",
|
"hideDotfiles": "הסתר קבצים/תיקיות ששמם מתחיל בנקודה",
|
||||||
"insertPath": "הכנס את הנתיב",
|
"insertPath": "הכנס את הנתיב",
|
||||||
"insertRegex": "הוסף ביטוי רגולרי",
|
"insertRegex": "הוסף ביטוי רגולרי",
|
||||||
"instanceName": "שם",
|
"instanceName": "שם מופע",
|
||||||
"language": "שפה",
|
"language": "שפה",
|
||||||
"lockPassword": "מנע ממשתמש להחליף סיסמא",
|
"lockPassword": "מנע מהמשתמש להחליף סיסמא",
|
||||||
"newPassword": "הסיסמא החדשה שלך",
|
"newPassword": "הסיסמא החדשה שלך",
|
||||||
"newPasswordConfirm": "אשר את הסיסמה החדשה שלך",
|
"newPasswordConfirm": "אשר את הסיסמה החדשה שלך",
|
||||||
"newUser": "משתמש חדש",
|
"newUser": "משתמש חדש",
|
||||||
@@ -209,28 +217,28 @@
|
|||||||
"passwordUpdated": "הסיסמא עודכנה!",
|
"passwordUpdated": "הסיסמא עודכנה!",
|
||||||
"path": "נתיב",
|
"path": "נתיב",
|
||||||
"perm": {
|
"perm": {
|
||||||
"create": "יצירת קבצים ותקיות",
|
"create": "יצירת קבצים ותיקיות",
|
||||||
"delete": "מחיקת קבצים ותקיות",
|
"delete": "מחיקת קבצים ותיקיות",
|
||||||
"download": "הורדת קבצים ותקיות",
|
"download": "הורדת קבצים ותיקיות",
|
||||||
"execute": "ביצוע פקודות",
|
"execute": "ביצוע פקודות",
|
||||||
"modify": "עריכת קבצים קבצים",
|
"modify": "עריכת קבצים קבצים",
|
||||||
"rename": "שינוי שם או העברת קבצים ותקיות",
|
"rename": "שינוי שם/העברת קבצים ותיקיות",
|
||||||
"share": "שיתוף קבצים"
|
"share": "שיתוף קבצים"
|
||||||
},
|
},
|
||||||
"permissions": "הרשאות",
|
"permissions": "הרשאות",
|
||||||
"permissionsHelp": "אתה יכול להגדיר את המשתמש להיות מנהל מערכת או לבחור את ההרשאות בנפרד. אם תבחר \"מנהל מערכת\", כל ההרשאות ייבחרו אוטומטית. ניהול המשתמשים נשאר הרשאה של מנהל מערכת.\n",
|
"permissionsHelp": "אתה יכול להגדיר את המשתמש להיות מנהל מערכת או לבחור את ההרשאות בנפרד. אם תבחר \"מנהל מערכת\", כל ההרשאות יינתנו אוטומטית. ניהול המשתמשים נשאר הרשאה של מנהל מערכת.\n",
|
||||||
"profileSettings": "הגדרות פרופיל",
|
"profileSettings": "הגדרות פרופיל",
|
||||||
"ruleExample1": "מנע גישה לקבצים נסתרים (כל קובץ שמתחיל בנקודה, לדוגמא .git)",
|
"ruleExample1": "מנע גישה לקבצים נסתרים (כל קובץ/תיקייה שמתחיל בנקודה, לדוגמא .git)",
|
||||||
"ruleExample2": "חסימת גישה לקובץ בשם Caddyfile בתחום הראשי.",
|
"ruleExample2": "חסימת גישה לקובץ בשם Caddyfile בהיקף הראשי.",
|
||||||
"rules": "חוקים",
|
"rules": "חוקים",
|
||||||
"rulesHelp": "כאן אתה יכול להגדיר רשימה של כללים למשתמש ספציפי, רשימה שחורה ולבנה. הקבצים החסומים לא יופיעו ברשימת הקבצים ולא יהיו נגישים למשתמש. יש תמיכה בנתיבים (ביחס לתקייה הראשית של המשתמש), וגם בביטוי רגולרי.\n",
|
"rulesHelp": "כאן אתה יכול להגדיר רשימה של כללים למשתמש ספציפי, רשימה שחורה ולבנה. הקבצים החסומים לא יופיעו ברשימת הקבצים ולא יהיו נגישים למשתמש. יש תמיכה בנתיבים (ביחס לתיקייה הראשית של המשתמש), וגם בביטוי רגולרי.\n",
|
||||||
"scope": "תחום",
|
"scope": "היקף",
|
||||||
"setDateFormat": "הגדר פורמט תאריך",
|
"setDateFormat": "הגדר פורמט תאריך",
|
||||||
"settingsUpdated": "ההגדרות עודכנו!",
|
"settingsUpdated": "ההגדרות עודכנו!",
|
||||||
"shareDuration": "משך השיתוף",
|
"shareDuration": "משך השיתוף",
|
||||||
"shareManagement": "ניהול שיתוף",
|
"shareManagement": "ניהול שיתוף",
|
||||||
"shareDeleted": "שיתוף נמחק!",
|
"shareDeleted": "השיתוף נמחק!",
|
||||||
"singleClick": "השתמש בלחיצות בודדות כדי לפתוח קבצים ותקיות",
|
"singleClick": "השתמש בלחיצה בודדת כדי לפתוח קובץ/תיקייה",
|
||||||
"themes": {
|
"themes": {
|
||||||
"dark": "כהה",
|
"dark": "כהה",
|
||||||
"light": "בהיר",
|
"light": "בהיר",
|
||||||
@@ -238,10 +246,10 @@
|
|||||||
},
|
},
|
||||||
"user": "משתמש",
|
"user": "משתמש",
|
||||||
"userCommands": "פקודות",
|
"userCommands": "פקודות",
|
||||||
"userCommandsHelp": "רשימה מופרדת עם רווחים עם הפקודות הזמינות עבור משתמש זה. דוגמא:\n",
|
"userCommandsHelp": "רשימה מופרדת ברווחים של הפקודות הזמינות עבור משתמש זה. דוגמא:\n",
|
||||||
"userCreated": "משתמש נוצר!",
|
"userCreated": "המשתמש נוצר!",
|
||||||
"userDefaults": "הגדרות ברירת מחדל למשתמש",
|
"userDefaults": "הגדרות ברירת מחדל למשתמש",
|
||||||
"userDeleted": "משתמש נמחק!",
|
"userDeleted": "המשתמש נמחק!",
|
||||||
"userManagement": "ניהול משתמש",
|
"userManagement": "ניהול משתמש",
|
||||||
"userUpdated": "המשתמש עודכן!",
|
"userUpdated": "המשתמש עודכן!",
|
||||||
"username": "שם משתמש",
|
"username": "שם משתמש",
|
||||||
@@ -254,11 +262,11 @@
|
|||||||
"logout": "התנתק",
|
"logout": "התנתק",
|
||||||
"myFiles": "הקבצים שלי",
|
"myFiles": "הקבצים שלי",
|
||||||
"newFile": "קובץ חדש",
|
"newFile": "קובץ חדש",
|
||||||
"newFolder": "תקייה חדשה",
|
"newFolder": "תיקייה חדשה",
|
||||||
"preview": "תצוגה מקדימה",
|
"preview": "תצוגה מקדימה",
|
||||||
"settings": "הגדרות",
|
"settings": "הגדרות",
|
||||||
"signup": "הרשמה",
|
"signup": "הרשמה",
|
||||||
"siteSettings": "הגדרות"
|
"siteSettings": "הגדרות אתר"
|
||||||
},
|
},
|
||||||
"success": {
|
"success": {
|
||||||
"linkCopied": "הקישור הועתק!"
|
"linkCopied": "הקישור הועתק!"
|
||||||
|
|||||||
@@ -3,76 +3,87 @@
|
|||||||
"cancel": "キャンセル",
|
"cancel": "キャンセル",
|
||||||
"close": "閉じる",
|
"close": "閉じる",
|
||||||
"copy": "コピー",
|
"copy": "コピー",
|
||||||
"copyFile": "ファイルをコピー",
|
"copyFile": "ファイルのコピー",
|
||||||
"copyToClipboard": "クリップボードにコピー",
|
"copyToClipboard": "共有リンクをコピー",
|
||||||
|
"copyDownloadLinkToClipboard": "ダウンロードリンクをコピー",
|
||||||
"create": "作成",
|
"create": "作成",
|
||||||
"delete": "削除",
|
"delete": "削除",
|
||||||
"download": "ダウンロード",
|
"download": "ダウンロード",
|
||||||
"hideDotfiles": "",
|
"file": "ファイル",
|
||||||
|
"folder": "フォルダー",
|
||||||
|
"hideDotfiles": "ドットで始まるファイルを表示しない",
|
||||||
"info": "情報",
|
"info": "情報",
|
||||||
"more": "More",
|
"more": "さらに",
|
||||||
"move": "移動",
|
"move": "移動",
|
||||||
"moveFile": "ファイルを移動",
|
"moveFile": "ファイルの移動",
|
||||||
"new": "新規",
|
"new": "新規",
|
||||||
"next": "次",
|
"next": "次へ",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"permalink": "固定リンク",
|
"permalink": "パーマリンクを取得",
|
||||||
"previous": "前",
|
"previous": "前へ",
|
||||||
"publish": "発表",
|
"publish": "公開",
|
||||||
"rename": "名前を変更",
|
"rename": "名前の変更",
|
||||||
"replace": "置き換える",
|
"replace": "置換する",
|
||||||
"reportIssue": "問題を報告",
|
"reportIssue": "問題を報告",
|
||||||
"save": "保存",
|
"save": "保存",
|
||||||
"schedule": "スケジュール",
|
"schedule": "スケジュール",
|
||||||
"search": "検索",
|
"search": "検索",
|
||||||
"select": "選択",
|
"select": "選択",
|
||||||
"selectMultiple": "複数選択",
|
"selectMultiple": "複数選択",
|
||||||
"share": "シェア",
|
"share": "共有",
|
||||||
"shell": "Toggle shell",
|
"shell": "シェルの切り替え",
|
||||||
"switchView": "表示を切り替わる",
|
"submit": "送信",
|
||||||
"toggleSidebar": "サイドバーを表示する",
|
"switchView": "表示の切り替え",
|
||||||
|
"toggleSidebar": "サイドバーの切り替え",
|
||||||
"update": "更新",
|
"update": "更新",
|
||||||
"upload": "アップロード"
|
"upload": "アップロード",
|
||||||
|
"openFile": "ファイルを開く",
|
||||||
|
"continue": "続行"
|
||||||
},
|
},
|
||||||
"download": {
|
"download": {
|
||||||
"downloadFile": "Download File",
|
"downloadFile": "ファイルのダウンロード",
|
||||||
"downloadFolder": "Download Folder",
|
"downloadFolder": "フォルダーのダウンロード",
|
||||||
"downloadSelected": ""
|
"downloadSelected": "選択した項目のダウンロード"
|
||||||
|
},
|
||||||
|
"upload": {
|
||||||
|
"abortUpload": "アップロードをキャンセルしますか?"
|
||||||
},
|
},
|
||||||
"errors": {
|
"errors": {
|
||||||
"forbidden": "You don't have permissions to access this.",
|
"forbidden": "これにアクセスする権限がありません。",
|
||||||
"internal": "内部エラーが発生しました。",
|
"internal": "内部エラーが発生しました。",
|
||||||
"notFound": "リソースが見つからなりませんでした。"
|
"notFound": "リソースが見つかりませんでした。",
|
||||||
|
"connection": "サーバーに接続できませんでした。"
|
||||||
},
|
},
|
||||||
"files": {
|
"files": {
|
||||||
"body": "本文",
|
"body": "本文",
|
||||||
"clear": "クリアー",
|
"clear": "消去",
|
||||||
"closePreview": "プレビューを閉じる",
|
"closePreview": "プレビューを閉じる",
|
||||||
"files": "ファイル",
|
"files": "ファイル",
|
||||||
"folders": "フォルダ",
|
"folders": "フォルダー",
|
||||||
"home": "ホーム",
|
"home": "ホーム",
|
||||||
"lastModified": "最終変更",
|
"lastModified": "更新日時",
|
||||||
"loading": "ローディング...",
|
"loading": "読み込み中…",
|
||||||
"lonely": "ここには何もない...",
|
"lonely": "ここには何もないようです…",
|
||||||
"metadata": "メタデータ",
|
"metadata": "メタデータ",
|
||||||
"multipleSelectionEnabled": "複数選択有効",
|
"multipleSelectionEnabled": "複数選択が有効になっています",
|
||||||
"name": "名前",
|
"name": "名前",
|
||||||
"size": "サイズ",
|
"size": "サイズ",
|
||||||
"sortByLastModified": "最終変更日付によるソート",
|
"sortByLastModified": "更新日時で並べ替え",
|
||||||
"sortByName": "名前によるソート",
|
"sortByName": "名前で並べ替え",
|
||||||
"sortBySize": "サイズによるソート"
|
"sortBySize": "サイズで並べ替え",
|
||||||
|
"noPreview": "プレビューはこのファイルでは利用できません"
|
||||||
},
|
},
|
||||||
"help": {
|
"help": {
|
||||||
"click": "ファイルやディレクトリを選択",
|
"click": "ファイルやフォルダーを選択",
|
||||||
"ctrl": {
|
"ctrl": {
|
||||||
"click": "複数のファイルやディレクトリを選択",
|
"click": "複数のファイルやフォルダーを選択",
|
||||||
"f": "検索を有効にする",
|
"f": "検索画面を開く",
|
||||||
"s": "ファイルを保存またはカレントディレクトリをダウンロード"
|
"s": "現在のフォルダーにあるファイルを保存またはダウンロード"
|
||||||
},
|
},
|
||||||
"del": "選択した項目を削除",
|
"del": "選択した項目を削除",
|
||||||
"doubleClick": "ファイルやディレクトリをオープン",
|
"doubleClick": "ファイルやフォルダーを開く",
|
||||||
"esc": "選択をクリアーまたはプロンプトを閉じる",
|
"esc": "選択を解除/ダイアログを閉じる",
|
||||||
"f1": "このヘルプを表示",
|
"f1": "ヘルプを表示",
|
||||||
"f2": "ファイルの名前を変更",
|
"f2": "ファイルの名前を変更",
|
||||||
"help": "ヘルプ"
|
"help": "ヘルプ"
|
||||||
},
|
},
|
||||||
@@ -81,180 +92,193 @@
|
|||||||
"hu": "Magyar",
|
"hu": "Magyar",
|
||||||
"ar": "العربية",
|
"ar": "العربية",
|
||||||
"de": "Deutsch",
|
"de": "Deutsch",
|
||||||
|
"el": "Ελληνικά",
|
||||||
"en": "English",
|
"en": "English",
|
||||||
"es": "Español",
|
"es": "Español",
|
||||||
"fr": "Français",
|
"fr": "Français",
|
||||||
"is": "",
|
"is": "Icelandic",
|
||||||
"it": "Italiano",
|
"it": "Italiano",
|
||||||
"ja": "日本語",
|
"ja": "日本語",
|
||||||
"ko": "한국어",
|
"ko": "한국어",
|
||||||
"nlBE": "",
|
"nlBE": "Dutch (Belgium)",
|
||||||
"pl": "Polski",
|
"pl": "Polski",
|
||||||
"pt": "Português",
|
"pt": "Português",
|
||||||
"ptBR": "Português (Brasil)",
|
"ptBR": "Português (Brasil)",
|
||||||
"ro": "",
|
"ro": "Romanian",
|
||||||
"ru": "Русский",
|
"ru": "Русский",
|
||||||
"sk": "Slovenčina",
|
"sk": "Slovenčina",
|
||||||
"svSE": "",
|
"svSE": "Swedish (Sweden)",
|
||||||
"tr" : "Türkçe",
|
"tr": "Türkçe",
|
||||||
"ua": "Українська",
|
"ua": "Українська",
|
||||||
"zhCN": "中文 (简体)",
|
"zhCN": "中文 (简体)",
|
||||||
"zhTW": "中文 (繁體)"
|
"zhTW": "中文 (繁體)"
|
||||||
},
|
},
|
||||||
"login": {
|
"login": {
|
||||||
"createAnAccount": "Create an account",
|
"createAnAccount": "アカウントを作成",
|
||||||
"loginInstead": "Already have an account",
|
"loginInstead": "ログインする",
|
||||||
"password": "パスワード",
|
"password": "パスワード",
|
||||||
"passwordConfirm": "Password Confirmation",
|
"passwordConfirm": "パスワード(確認用)",
|
||||||
"passwordsDontMatch": "Passwords don't match",
|
"passwordsDontMatch": "パスワードが一致しません",
|
||||||
"signup": "Signup",
|
"signup": "アカウント作成",
|
||||||
"submit": "ログイン",
|
"submit": "ログイン",
|
||||||
"username": "ユーザ名",
|
"username": "ユーザー名",
|
||||||
"usernameTaken": "Username already taken",
|
"usernameTaken": "ユーザー名はすでに取得されています",
|
||||||
"wrongCredentials": "ユーザ名またはパスワードが間違っています。"
|
"wrongCredentials": "ユーザー名またはパスワードが間違っています"
|
||||||
},
|
},
|
||||||
"permanent": "永久",
|
"permanent": "永久",
|
||||||
"prompts": {
|
"prompts": {
|
||||||
"copy": "コピー",
|
"copy": "コピー",
|
||||||
"copyMessage": "コピーの目標ディレクトリを選択してください:",
|
"copyMessage": "ファイルをコピーする場所を選択してください:",
|
||||||
"currentlyNavigating": "現在閲覧しているディレクトリ:",
|
"currentlyNavigating": "現在閲覧しているディレクトリ:",
|
||||||
"deleteMessageMultiple": "{count} つのファイルを本当に削除してよろしいですか。",
|
"deleteMessageMultiple": "{count} 個のファイルを削除してもよろしいですか?",
|
||||||
"deleteMessageSingle": "このファイル/フォルダを本当に削除してよろしいですか。",
|
"deleteMessageSingle": "このファイル/フォルダーを削除してもよろしいですか?",
|
||||||
"deleteTitle": "ファイルを削除",
|
"deleteMessageShare": "共有中のファイル({path})を削除してもよろしいですか?",
|
||||||
"displayName": "名前:",
|
"deleteTitle": "ファイルの削除",
|
||||||
"download": "ファイルをダウンロード",
|
"displayName": "表示名:",
|
||||||
"downloadMessage": "圧縮形式を選択してください。",
|
"download": "ファイルのダウンロード",
|
||||||
"error": "あるエラーが発生しました。",
|
"downloadMessage": "ダウンロードする際の圧縮形式を選んでください:",
|
||||||
|
"error": "エラーが発生しました",
|
||||||
"fileInfo": "ファイル情報",
|
"fileInfo": "ファイル情報",
|
||||||
"filesSelected": "{count} つのファイルは選択されました。",
|
"filesSelected": "{count} 個のファイル/フォルダーが選択されています",
|
||||||
"lastModified": "最終変更",
|
"lastModified": "更新日時",
|
||||||
"move": "移動",
|
"move": "移動",
|
||||||
"moveMessage": "移動の目標ディレクトリを選択してください:",
|
"moveMessage": "ファイル/フォルダーの新しいハウスを選択してください:",
|
||||||
"newArchetype": "ある元型に基づいて新しいポストを作成します。ファイルは コンテンツフォルダに作成されます。",
|
"newArchetype": "archetype に基づいて新しい投稿を作成します。ファイルは content フォルダーに作成されます。",
|
||||||
"newDir": "新しいディレクトリを作成",
|
"newDir": "新規フォルダー",
|
||||||
"newDirMessage": "新しいディレクトリの名前を入力してください。",
|
"newDirMessage": "フォルダーの名前を入力してください:",
|
||||||
"newFile": "新しいファイルを作成",
|
"newFile": "新規ファイル",
|
||||||
"newFileMessage": "新しいファイルの名前を入力してください。",
|
"newFileMessage": "ファイルの名前を入力してください:",
|
||||||
"numberDirs": "ディレクトリ個数",
|
"numberDirs": "ディレクトリの数",
|
||||||
"numberFiles": "ファイル個数",
|
"numberFiles": "ファイルの数",
|
||||||
"rename": "名前を変更",
|
"rename": "名前変更",
|
||||||
"renameMessage": "名前を変更しようファイルは:",
|
"renameMessage": "変更後のファイルの名前を入力してください",
|
||||||
"replace": "置き換える",
|
"replace": "ファイルの置き換え",
|
||||||
"replaceMessage": "アップロードするファイルの中でかち合う名前が一つあります。 既存のファイルを置き換えりませんか。\n",
|
"replaceMessage": "アップロードしようとしているファイルと既存のファイルの名前が重複しています。既存のものを置き換えずにアップロードを続けるか、既存のものを置き換えますか?\n",
|
||||||
"schedule": "スケジュール",
|
"schedule": "スケジュール",
|
||||||
"scheduleMessage": "このポストの発表日付をスケジュールしてください。",
|
"scheduleMessage": "この投稿の公開予定日時を選んでください。",
|
||||||
"show": "表示",
|
"show": "表示",
|
||||||
"size": "サイズ",
|
"size": "サイズ",
|
||||||
"upload": "",
|
"upload": "アップロード",
|
||||||
"uploadMessage": ""
|
"uploadFiles": "{files} 個のファイルをアップロードしています…",
|
||||||
|
"uploadMessage": "アップロードするオプションを選択してください。",
|
||||||
|
"optionalPassword": "パスワード(オプション)"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"images": "画像",
|
"images": "画像",
|
||||||
"music": "音楽",
|
"music": "音楽",
|
||||||
"pdf": "PDF",
|
"pdf": "PDF",
|
||||||
"pressToSearch": "Press enter to search...",
|
"pressToSearch": "エンターを押して検索します",
|
||||||
"search": "検索...",
|
"search": "検索",
|
||||||
"typeToSearch": "Type to search...",
|
"typeToSearch": "検索の種類",
|
||||||
"types": "種類",
|
"types": "ファイルの種類",
|
||||||
"video": "ビデオ"
|
"video": "動画"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"admin": "管理者",
|
"admin": "管理者",
|
||||||
"administrator": "管理者",
|
"administrator": "管理者",
|
||||||
"allowCommands": "コマンドの実行",
|
"allowCommands": "コマンドの実行",
|
||||||
"allowEdit": "ファイルやディレクトリの編集、名前変更と削除",
|
"allowEdit": "ファイルやフォルダーの編集、名前の変更、削除",
|
||||||
"allowNew": "ファイルとディレクトリの作成",
|
"allowNew": "ファイルやフォルダーの新規作成",
|
||||||
"allowPublish": "ポストとぺーじの発表",
|
"allowPublish": "新しい投稿やページの公開",
|
||||||
"allowSignup": "Allow users to signup",
|
"allowSignup": "ユーザーの新規登録を許可",
|
||||||
"avoidChanges": "(変更を避けるために空白にしてください)",
|
"avoidChanges": "(変更しない場合は空白のままにしてください)",
|
||||||
"branding": "Branding",
|
"branding": "ブランディング",
|
||||||
"brandingDirectoryPath": "Branding directory path",
|
"brandingDirectoryPath": "ブランディングのディレクトリへのパス",
|
||||||
"brandingHelp": "You can customize how your File Browser instance looks and feels by changing its name, replacing the logo, adding custom styles and even disable external links to GitHub.\nFor more information about custom branding, please check out the {0}.",
|
"brandingHelp": "インスタンスの名前の変更、ロゴの変更、カスタムスタイルの追加、GitHub への外部リンクの無効化など、File Browser の見た目や使い勝手をカスタマイズすることができます。\nカスタムブランディングの詳細については、{0}をご覧ください。",
|
||||||
"changePassword": "パスワードを変更",
|
"changePassword": "パスワードの変更",
|
||||||
"commandRunner": "Command runner",
|
"commandRunner": "コマンドランナー",
|
||||||
"commandRunnerHelp": "Here you can set commands that are executed in the named events. You must write one per line. The environment variables {0} and {1} will be available, being {0} relative to {1}. For more information about this feature and the available environment variables, please read the {2}.",
|
"commandRunnerHelp": "ここでは、指定したイベントの際に実行されるコマンドを設定することができます。1行に1つずつ書く必要があります。環境変数として {0} や {1} が使用可能で、{0} は {1} に関連した変数として扱われます。この機能と使用可能な環境変数の詳細については、{2}をお読みください。",
|
||||||
"commandsUpdated": "コマンドは更新されました!",
|
"commandsUpdated": "コマンドを更新しました!",
|
||||||
"createUserDir": "Auto create user home dir while adding new user",
|
"createUserDir": "新規ユーザー追加時にユーザーのホームディレクトリを自動生成する",
|
||||||
"customStylesheet": "カスタムスタイルシ ート",
|
"tusUploads": "チャンクされたファイルアップロード",
|
||||||
"defaultUserDescription": "This are the default settings for new users.",
|
"tusUploadsHelp": "File Browser はチャンクされたファイルアップロードをサポートしており、信頼性の低いネットワーク上でも、効率的で信頼性の高い、再開可能なチャンクされたファイルアップロードを作成することができます。",
|
||||||
"disableExternalLinks": "Disable external links (except documentation)",
|
"tusUploadsChunkSize": "1チャンクあたりのリクエストの最大サイズ。バイト数を示す整数か、10MB、1GBなどの文字列を入力できます。",
|
||||||
"disableUsedDiskPercentage": "Disable used disk percentage graph",
|
"tusUploadsRetryCount": "チャンクのアップロードに失敗した場合の再試行回数。",
|
||||||
"documentation": "documentation",
|
"userHomeBasePath": "ユーザーのホームディレクトリのベースパス",
|
||||||
|
"userScopeGenerationPlaceholder": "スコープは自動生成されます",
|
||||||
|
"createUserHomeDirectory": "ユーザーのホームディレクトリを作成する",
|
||||||
|
"customStylesheet": "カスタムスタイルシート",
|
||||||
|
"defaultUserDescription": "これらは新規ユーザーのデフォルト設定です。",
|
||||||
|
"disableExternalLinks": "外部リンクを無効にする(ドキュメントへのリンクを除く)",
|
||||||
|
"disableUsedDiskPercentage": "ディスク使用率のグラフを無効にする",
|
||||||
|
"documentation": "ドキュメント",
|
||||||
"examples": "例",
|
"examples": "例",
|
||||||
"executeOnShell": "Execute on shell",
|
"executeOnShell": "シェルで実行する",
|
||||||
"executeOnShellDescription": "By default, File Browser executes the commands by calling their binaries directly. If you want to run them on a shell instead (such as Bash or PowerShell), you can define it here with the required arguments and flags. If set, the command you execute will be appended as an argument. This apply to both user commands and event hooks.",
|
"executeOnShellDescription": "デフォルトでは、File Browser はバイナリを直接呼び出してコマンドを実行します。代わりにシェル(Bash や PowerShell など)で実行したい場合は、必要な引数やフラグをここで指定します。値が指定されている場合、実行するコマンドが引数として追加されます。これは、ユーザーコマンドとイベントフックの両方に適用されます。",
|
||||||
"globalRules": "This is a global set of allow and disallow rules. They apply to every user. You can define specific rules on each user's settings to override this ones.",
|
"globalRules": "これはグローバルな許可と不許可のルールセットです。これはすべてのユーザーに適用されます。ユーザーごとに特定のルールを設定することで、これらのルールを上書きすることができます。",
|
||||||
"globalSettings": "グローバル設定",
|
"globalSettings": "グローバル設定",
|
||||||
"hideDotfiles": "",
|
"hideDotfiles": "ドットで始まるファイルを表示しない",
|
||||||
"insertPath": "Insert the path",
|
"insertPath": "パスを入力してください",
|
||||||
"insertRegex": "Insert regex expression",
|
"insertRegex": "正規表現を入力してください",
|
||||||
"instanceName": "Instance name",
|
"instanceName": "インスタンス名",
|
||||||
"language": "言語",
|
"language": "言語",
|
||||||
"lockPassword": "新しいパスワードを変更に禁止",
|
"lockPassword": "ユーザーがパスワードを変更できないようにする",
|
||||||
"newPassword": "新しいパスワード",
|
"newPassword": "新しいパスワード",
|
||||||
"newPasswordConfirm": "新しいパスワードを確認します",
|
"newPasswordConfirm": "新しいパスワード(再入力)",
|
||||||
"newUser": "新しいユーザー",
|
"newUser": "新規ユーザー作成",
|
||||||
"password": "パスワード",
|
"password": "パスワード",
|
||||||
"passwordUpdated": "パスワードは更新されました!",
|
"passwordUpdated": "パスワードを更新しました!",
|
||||||
"path": "",
|
"path": "パス",
|
||||||
"perm": {
|
"perm": {
|
||||||
"create": "Create files and directories",
|
"create": "ファイルやフォルダーの作成",
|
||||||
"delete": "Delete files and directories",
|
"delete": "ファイルやフォルダーの削除",
|
||||||
"download": "Download",
|
"download": "ダウンロード",
|
||||||
"execute": "Execute commands",
|
"execute": "コマンドの実行",
|
||||||
"modify": "Edit files",
|
"modify": "ファイルの編集",
|
||||||
"rename": "Rename or move files and directories",
|
"rename": "ファイルやフォルダーの編集・移動",
|
||||||
"share": "Share files"
|
"share": "ファイルの共有"
|
||||||
},
|
},
|
||||||
"permissions": "権限",
|
"permissions": "権限",
|
||||||
"permissionsHelp": "あなたはユーザーを管理者に設定し、または権限を個々に設定しできます。\"管理者\"を選択する場合、その他のすべての選択肢は自動的に設定されます。ユーザーの管理は管理者の権限として保留されました。",
|
"permissionsHelp": "ユーザーを管理者に設定するか、その他の権限を個別に選択することができます。「管理者」を選択すると、他のオプションはすべて自動的にチェックされます。ユーザーを管理するには管理者権限が必要です。\n",
|
||||||
"profileSettings": "プロファイル設定",
|
"profileSettings": "プロフィール設定",
|
||||||
"ruleExample1": "各フォルダに名前はドットで始まるファイル(例えば、.git、.gitignore)へのアクセスを制限します。",
|
"ruleExample1": ".git や .gitignore のようなドットから始まるファイルへのアクセスを禁止します。\n",
|
||||||
"ruleExample2": "範囲のルートパスに名前は Caddyfile のファイルへのアクセスを制限します。",
|
"ruleExample2": "スコープのルートにある Caddyfile という名前のファイルへのアクセスを禁止します。",
|
||||||
"rules": "規則",
|
"rules": "ルール",
|
||||||
"rulesHelp": "ここに、あなたはこのユーザーの許可または拒否規則を設定できます。ブロックされたファイルはリストに表示されません、それではアクセスも制限されます。正規表現(regex)のサポートと範囲に相対のパスが提供されています。",
|
"rulesHelp": "ここでは、特定のユーザーに対して許可と不許可のルールを設定することができます。ブロックされたファイルはリストに表示されず、ユーザはアクセスできなくなります。正規表現とユーザースコープからの相対パスをサポートしています。\n",
|
||||||
"scope": "範囲",
|
"scope": "スコープ",
|
||||||
"settingsUpdated": "設定は更新されました!",
|
"setDateFormat": "正確な日時表記を使用する",
|
||||||
"shareDuration": "",
|
"settingsUpdated": "設定を更新しました!",
|
||||||
"shareManagement": "",
|
"shareDuration": "共有期間",
|
||||||
"singleClick": "",
|
"shareManagement": "共有の管理",
|
||||||
|
"shareDeleted": "ファイルの共有を削除しました!",
|
||||||
|
"singleClick": "ダブルクリックの代わりにクリックでファイルやフォルダーを開く",
|
||||||
"themes": {
|
"themes": {
|
||||||
"dark": "",
|
"dark": "ダーク",
|
||||||
"light": "",
|
"light": "ライト",
|
||||||
"title": ""
|
"title": "テーマ"
|
||||||
},
|
},
|
||||||
"user": "ユーザー",
|
"user": "ユーザー",
|
||||||
"userCommands": "ユーザーのコマンド",
|
"userCommands": "コマンド",
|
||||||
"userCommandsHelp": "空白区切りの有効のコマンドのリストを指定してください。例:",
|
"userCommandsHelp": "このユーザーが使用可能なコマンドをスペースで区切ったリスト。例:\n",
|
||||||
"userCreated": "ユーザーは作成されました!",
|
"userCreated": "ユーザーを作成しました!",
|
||||||
"userDefaults": "User default settings",
|
"userDefaults": "ユーザーのデフォルト設定",
|
||||||
"userDeleted": "ユーザーは削除されました!",
|
"userDeleted": "ユーザーを削除しました!",
|
||||||
"userManagement": "ユーザー管理",
|
"userManagement": "ユーザー管理",
|
||||||
"userUpdated": "ユーザーは更新されました!",
|
"userUpdated": "ユーザーを更新しました!",
|
||||||
"username": "ユーザー名",
|
"username": "ユーザー名",
|
||||||
"users": "ユーザー"
|
"users": "ユーザー"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"help": "ヘルプ",
|
"help": "ヘルプ",
|
||||||
"hugoNew": "Hugo New",
|
"hugoNew": "Hugo New",
|
||||||
"login": "Login",
|
"login": "ログイン",
|
||||||
"logout": "ログアウト",
|
"logout": "ログアウト",
|
||||||
"myFiles": "私のファイル",
|
"myFiles": "マイファイル",
|
||||||
"newFile": "新しいファイルを作成",
|
"newFile": "新規ファイル",
|
||||||
"newFolder": "新しいフォルダを作成",
|
"newFolder": "新規フォルダー",
|
||||||
"preview": "プレビュー",
|
"preview": "プレビュー",
|
||||||
"settings": "設定",
|
"settings": "設定",
|
||||||
"signup": "Signup",
|
"signup": "サインアップ",
|
||||||
"siteSettings": "サイト設定"
|
"siteSettings": "サイト設定"
|
||||||
},
|
},
|
||||||
"success": {
|
"success": {
|
||||||
"linkCopied": "リンクがコピーされました!"
|
"linkCopied": "リンクをコピーしました!"
|
||||||
},
|
},
|
||||||
"time": {
|
"time": {
|
||||||
"days": "日",
|
"days": "日",
|
||||||
"hours": "時間",
|
"hours": "時間",
|
||||||
"minutes": "分",
|
"minutes": "分",
|
||||||
"seconds": "秒",
|
"seconds": "秒",
|
||||||
"unit": "時間単位"
|
"unit": "時間の単位"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
"copy": "复制",
|
"copy": "复制",
|
||||||
"copyFile": "复制文件",
|
"copyFile": "复制文件",
|
||||||
"copyToClipboard": "复制到剪贴板",
|
"copyToClipboard": "复制到剪贴板",
|
||||||
|
"copyDownloadLinkToClipboard": "复制下载链接到剪贴板",
|
||||||
"create": "创建",
|
"create": "创建",
|
||||||
"delete": "删除",
|
"delete": "删除",
|
||||||
"download": "下载",
|
"download": "下载",
|
||||||
@@ -36,13 +37,17 @@
|
|||||||
"toggleSidebar": "切换侧边栏",
|
"toggleSidebar": "切换侧边栏",
|
||||||
"update": "更新",
|
"update": "更新",
|
||||||
"upload": "上传",
|
"upload": "上传",
|
||||||
"openFile": "打开文件"
|
"openFile": "打开文件",
|
||||||
|
"continue": "继续"
|
||||||
},
|
},
|
||||||
"download": {
|
"download": {
|
||||||
"downloadFile": "下载文件",
|
"downloadFile": "下载文件",
|
||||||
"downloadFolder": "下载文件夹",
|
"downloadFolder": "下载文件夹",
|
||||||
"downloadSelected": "下载已选"
|
"downloadSelected": "下载已选"
|
||||||
},
|
},
|
||||||
|
"upload": {
|
||||||
|
"abortUpload": "你确定要中止吗?"
|
||||||
|
},
|
||||||
"errors": {
|
"errors": {
|
||||||
"forbidden": "你无权限访问",
|
"forbidden": "你无权限访问",
|
||||||
"internal": "服务器出了点问题。",
|
"internal": "服务器出了点问题。",
|
||||||
@@ -69,9 +74,9 @@
|
|||||||
"noPreview": "此文件无法预览。"
|
"noPreview": "此文件无法预览。"
|
||||||
},
|
},
|
||||||
"help": {
|
"help": {
|
||||||
"click": "选择文件或目录",
|
"click": "选择文件或文件夹",
|
||||||
"ctrl": {
|
"ctrl": {
|
||||||
"click": "选择多个文件或目录",
|
"click": "选择多个文件或文件夹",
|
||||||
"f": "打开搜索框",
|
"f": "打开搜索框",
|
||||||
"s": "保存文件或下载当前文件夹"
|
"s": "保存文件或下载当前文件夹"
|
||||||
},
|
},
|
||||||
@@ -87,6 +92,7 @@
|
|||||||
"hu": "Magyar",
|
"hu": "Magyar",
|
||||||
"ar": "العربية",
|
"ar": "العربية",
|
||||||
"de": "Deutsch",
|
"de": "Deutsch",
|
||||||
|
"el": "Ελληνικά",
|
||||||
"en": "English",
|
"en": "English",
|
||||||
"es": "Español",
|
"es": "Español",
|
||||||
"fr": "Français",
|
"fr": "Français",
|
||||||
@@ -94,7 +100,7 @@
|
|||||||
"it": "Italiano",
|
"it": "Italiano",
|
||||||
"ja": "日本語",
|
"ja": "日本語",
|
||||||
"ko": "한국어",
|
"ko": "한국어",
|
||||||
"nlBE": "Dutch(Belgium)",
|
"nlBE": "Dutch (Belgium)",
|
||||||
"pl": "Polski",
|
"pl": "Polski",
|
||||||
"pt": "Português",
|
"pt": "Português",
|
||||||
"ptBR": "Português(Brasil)",
|
"ptBR": "Português(Brasil)",
|
||||||
@@ -122,7 +128,7 @@
|
|||||||
"permanent": "永久",
|
"permanent": "永久",
|
||||||
"prompts": {
|
"prompts": {
|
||||||
"copy": "复制",
|
"copy": "复制",
|
||||||
"copyMessage": "请选择欲复制至的目录:",
|
"copyMessage": "请选择目标目录:",
|
||||||
"currentlyNavigating": "当前目录:",
|
"currentlyNavigating": "当前目录:",
|
||||||
"deleteMessageMultiple": "你确定要删除这 {count} 个文件吗?",
|
"deleteMessageMultiple": "你确定要删除这 {count} 个文件吗?",
|
||||||
"deleteMessageSingle": "你确定要删除这个文件/文件夹吗?",
|
"deleteMessageSingle": "你确定要删除这个文件/文件夹吗?",
|
||||||
@@ -136,31 +142,33 @@
|
|||||||
"filesSelected": "已选择 {count} 个文件。",
|
"filesSelected": "已选择 {count} 个文件。",
|
||||||
"lastModified": "最后修改",
|
"lastModified": "最后修改",
|
||||||
"move": "移动",
|
"move": "移动",
|
||||||
"moveMessage": "请选择欲移动至的目录:",
|
"moveMessage": "请选择目标目录:",
|
||||||
"newArchetype": "创建一个基于原型的新帖子。您的文件将会创建在内容文件夹中。",
|
"newArchetype": "创建一个基于原型的新帖子。你的文件将会创建在内容文件夹中。",
|
||||||
"newDir": "新建目录",
|
"newDir": "新建文件夹",
|
||||||
"newDirMessage": "请输入新目录的名称。",
|
"newDirMessage": "请输入新文件夹的名称。",
|
||||||
"newFile": "新建文件",
|
"newFile": "新建文件",
|
||||||
"newFileMessage": "请输入新文件的名称。",
|
"newFileMessage": "请输入新文件的名称。",
|
||||||
"numberDirs": "目录数",
|
"numberDirs": "文件夹数",
|
||||||
"numberFiles": "文件数",
|
"numberFiles": "文件数",
|
||||||
"rename": "重命名",
|
"rename": "重命名",
|
||||||
"renameMessage": "请输入新名称,旧名称为:",
|
"renameMessage": "请输入新名称,旧名称为:",
|
||||||
"replace": "替换",
|
"replace": "替换",
|
||||||
"replaceMessage": "您尝试上传的文件中有一个与现有文件的名称存在冲突。是否替换现有的同名文件?\n",
|
"replaceMessage": "你尝试上传的文件中有一个与现有文件的名称存在冲突。是否替换现有的同名文件?\n",
|
||||||
"schedule": "计划",
|
"schedule": "计划",
|
||||||
"scheduleMessage": "请选择发布这篇帖子的日期与时间。",
|
"scheduleMessage": "请选择发布这篇帖子的日期与时间。",
|
||||||
"show": "点击以显示",
|
"show": "点击以显示",
|
||||||
"size": "大小",
|
"size": "大小",
|
||||||
"upload": "上传",
|
"upload": "上传",
|
||||||
|
"uploadFiles": "正在上传 {files} ...",
|
||||||
"uploadMessage": "选择上传选项。",
|
"uploadMessage": "选择上传选项。",
|
||||||
"optionalPassword": "密码(选填,不填即无密码)"
|
"optionalPassword": "密码(选填,不填即无密码)",
|
||||||
|
"resolution": "分辨率"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"images": "图像",
|
"images": "图像",
|
||||||
"music": "音乐",
|
"music": "音乐",
|
||||||
"pdf": "PDF",
|
"pdf": "PDF",
|
||||||
"pressToSearch": "输入回车以搜索...",
|
"pressToSearch": "按回车以搜索...",
|
||||||
"search": "搜索...",
|
"search": "搜索...",
|
||||||
"typeToSearch": "输入以搜索...",
|
"typeToSearch": "输入以搜索...",
|
||||||
"types": "类型",
|
"types": "类型",
|
||||||
@@ -170,28 +178,35 @@
|
|||||||
"admin": "管理员",
|
"admin": "管理员",
|
||||||
"administrator": "管理员",
|
"administrator": "管理员",
|
||||||
"allowCommands": "执行命令(Shell 命令)",
|
"allowCommands": "执行命令(Shell 命令)",
|
||||||
"allowEdit": "编辑、重命名或删除文件/目录",
|
"allowEdit": "编辑、重命名或删除文件/文件夹",
|
||||||
"allowNew": "创建新文件和目录",
|
"allowNew": "创建新文件和文件夹",
|
||||||
"allowPublish": "发布新的帖子与页面",
|
"allowPublish": "发布新的帖子与页面",
|
||||||
"allowSignup": "允许用户注册",
|
"allowSignup": "允许用户注册",
|
||||||
"avoidChanges": "(留空以避免更改)",
|
"avoidChanges": "(留空以避免更改)",
|
||||||
"branding": "品牌",
|
"branding": "品牌",
|
||||||
"brandingDirectoryPath": "品牌信息文件夹路径",
|
"brandingDirectoryPath": "品牌信息文件夹路径",
|
||||||
"brandingHelp": "您可以通过改变实例名称,更换 Logo,加入自定义样式,甚至禁用到 Github 的外部链接来自定义 File Browser 的外观和感觉。\n想获得更多信息,请查看 {0}。",
|
"brandingHelp": "你可以通过改变实例名称,更换 Logo,加入自定义样式,甚至禁用到 Github 的外部链接来自定义 File Browser 的外观和感觉。\n想获得更多信息,请查看 {0}。",
|
||||||
"changePassword": "更改密码",
|
"changePassword": "更改密码",
|
||||||
"commandRunner": "命令执行器",
|
"commandRunner": "命令执行器",
|
||||||
"commandRunnerHelp": "你可以在此设置在下列事件中执行的命令。每行必须写一条命令。可以在命令中使用环境变量 {0} 和 {1},使 {0} 与 {1} 相关联。关于此功能和可用环境变量的更多信息,请阅读 {2}。",
|
"commandRunnerHelp": "你可以在此设置在下列事件中执行的命令。每行必须写一条命令。可以在命令中使用环境变量 {0} 和 {1},使 {0} 与 {1} 相关联。关于此功能和可用环境变量的更多信息,请阅读 {2}。",
|
||||||
"commandsUpdated": "命令已更新!",
|
"commandsUpdated": "命令已更新!",
|
||||||
"createUserDir": "在添加新用户的同时自动创建用户的个人目录",
|
"createUserDir": "在添加新用户的同时自动创建用户的主目录",
|
||||||
|
"tusUploads": "分块上传",
|
||||||
|
"tusUploadsHelp": "File Browser 支持分块上传,在不佳的网络下也可进行高效、可靠、可续的文件上传",
|
||||||
|
"tusUploadsChunkSize": "分块上传大小,例如 10MB 或 1GB",
|
||||||
|
"tusUploadsRetryCount": "分块上传失败时的重试次数",
|
||||||
|
"userHomeBasePath": "用户主目录的路径",
|
||||||
|
"userScopeGenerationPlaceholder": "自动生成目录范围",
|
||||||
|
"createUserHomeDirectory": "创建用户主目录",
|
||||||
"customStylesheet": "自定义样式表(CSS)",
|
"customStylesheet": "自定义样式表(CSS)",
|
||||||
"defaultUserDescription": "这些是新用户的默认设置。",
|
"defaultUserDescription": "这些是新用户的默认设置。",
|
||||||
"disableExternalLinks": "禁止外部链接(帮助文档除外)",
|
"disableExternalLinks": "禁止外部链接(帮助文档除外)",
|
||||||
"disableUsedDiskPercentage": "Disable used disk percentage graph",
|
"disableUsedDiskPercentage": "禁用磁盘已用空间展示",
|
||||||
"documentation": "帮助文档",
|
"documentation": "帮助文档",
|
||||||
"examples": "例子",
|
"examples": "示例",
|
||||||
"executeOnShell": "在 Shell 中执行",
|
"executeOnShell": "在 Shell 中执行",
|
||||||
"executeOnShellDescription": "默认情况下,File Browser 通过直接调用命令的二进制包来执行命令,如果想在 Shell中 执行(如 Bash 或 PowerShell),你可以在这里定义所使用的 Shell 和参数。设置后,您所执行的命令会作为参数追加。本设置对用户命令和事件钩子都生效。",
|
"executeOnShellDescription": "默认情况下,File Browser 通过直接调用命令的二进制包来执行命令,如果想在 Shell中 执行(如 Bash 或 PowerShell),你可以在这里定义所使用的 Shell 和参数。设置后,你所执行的命令会作为参数追加。本设置对用户命令和事件钩子都生效。",
|
||||||
"globalRules": "这是全局允许与禁止规则。它们作用于所有用户。您可以给每个用户定义单独的特殊规则来覆盖全局规则。",
|
"globalRules": "这是全局允许与禁止规则。它们作用于所有用户。你可以给每个用户定义单独的特殊规则来覆盖全局规则。",
|
||||||
"globalSettings": "全局设置",
|
"globalSettings": "全局设置",
|
||||||
"hideDotfiles": "不显示隐藏文件",
|
"hideDotfiles": "不显示隐藏文件",
|
||||||
"insertPath": "插入路径",
|
"insertPath": "插入路径",
|
||||||
@@ -199,8 +214,8 @@
|
|||||||
"instanceName": "实例名称",
|
"instanceName": "实例名称",
|
||||||
"language": "语言",
|
"language": "语言",
|
||||||
"lockPassword": "禁止用户修改密码",
|
"lockPassword": "禁止用户修改密码",
|
||||||
"newPassword": "您的新密码",
|
"newPassword": "你的新密码",
|
||||||
"newPasswordConfirm": "再次输入以确认您的新密码",
|
"newPasswordConfirm": "再次输入以确认你的新密码",
|
||||||
"newUser": "新建用户",
|
"newUser": "新建用户",
|
||||||
"password": "密码",
|
"password": "密码",
|
||||||
"passwordUpdated": "密码已更新!",
|
"passwordUpdated": "密码已更新!",
|
||||||
@@ -215,19 +230,19 @@
|
|||||||
"share": "分享文件"
|
"share": "分享文件"
|
||||||
},
|
},
|
||||||
"permissions": "权限",
|
"permissions": "权限",
|
||||||
"permissionsHelp": "您可以将该用户设置为管理员或单独选择各项权限。如果您选择了“管理员”,则其他的选项会被自动选中,同时该用户可以管理其他用户。\n",
|
"permissionsHelp": "你可以将该用户设置为管理员或单独选择各项权限。如果你选择了“管理员”,则其他的选项会被自动选中,同时该用户可以管理其他用户。\n",
|
||||||
"profileSettings": "个人设置",
|
"profileSettings": "个人设置",
|
||||||
"ruleExample1": "阻止用户访问所有文件夹下任何以 . 开头的文件(隐藏文件, 例如: .git, .gitignore)。\n",
|
"ruleExample1": "阻止用户访问所有文件夹下任何以 . 开头的文件(隐藏文件, 例如: .git, .gitignore)。\n",
|
||||||
"ruleExample2": "阻止用户访问其目录范围的根目录下名为 Caddyfile 的文件。",
|
"ruleExample2": "阻止用户访问其目录范围的根目录下名为 Caddyfile 的文件。",
|
||||||
"rules": "规则",
|
"rules": "规则",
|
||||||
"rulesHelp": "您可以为该用户制定一组黑名单或白名单式的规则,被屏蔽的文件将不会显示在列表中,用户也无权限访问,支持正则表达式和相对于用户范围的路径。\n",
|
"rulesHelp": "你可以为该用户制定一组黑名单或白名单式的规则,被屏蔽的文件将不会显示在列表中,用户也无权限访问,支持正则表达式和相对于用户范围的路径。\n",
|
||||||
"scope": "目录范围",
|
"scope": "目录范围",
|
||||||
"setDateFormat": "显示精确的日期格式",
|
"setDateFormat": "显示精确的日期格式",
|
||||||
"settingsUpdated": "设置已更新!",
|
"settingsUpdated": "设置已更新!",
|
||||||
"shareDuration": "分享期限",
|
"shareDuration": "分享期限",
|
||||||
"shareManagement": "分享管理",
|
"shareManagement": "分享管理",
|
||||||
"shareDeleted": "分享已删除!",
|
"shareDeleted": "分享已删除!",
|
||||||
"singleClick": "使用单击来打开文件和目录",
|
"singleClick": "使用单击来打开文件和文件夹",
|
||||||
"themes": {
|
"themes": {
|
||||||
"dark": "深色",
|
"dark": "深色",
|
||||||
"light": "浅色",
|
"light": "浅色",
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import * as i18n from "@/i18n";
|
import * as i18n from "@/i18n";
|
||||||
import moment from "moment";
|
import moment from "moment/min/moment-with-locales";
|
||||||
|
|
||||||
const mutations = {
|
const mutations = {
|
||||||
closeHovers: (state) => {
|
closeHovers: (state) => {
|
||||||
|
|||||||
@@ -3,10 +3,10 @@
|
|||||||
<header-bar v-if="error || req.type == null" showMenu showLogo />
|
<header-bar v-if="error || req.type == null" showMenu showLogo />
|
||||||
|
|
||||||
<breadcrumbs base="/files" />
|
<breadcrumbs base="/files" />
|
||||||
|
<listing />
|
||||||
<errors v-if="error" :errorCode="error.status" />
|
<errors v-if="error" :errorCode="error.status" />
|
||||||
<component v-else-if="currentView" :is="currentView"></component>
|
<component v-else-if="currentView" :is="currentView"></component>
|
||||||
<div v-else>
|
<div v-else-if="currentView !== null">
|
||||||
<h2 class="message delayed">
|
<h2 class="message delayed">
|
||||||
<div class="spinner">
|
<div class="spinner">
|
||||||
<div class="bounce1"></div>
|
<div class="bounce1"></div>
|
||||||
@@ -52,12 +52,8 @@ export default {
|
|||||||
computed: {
|
computed: {
|
||||||
...mapState(["req", "reload", "loading"]),
|
...mapState(["req", "reload", "loading"]),
|
||||||
currentView() {
|
currentView() {
|
||||||
if (this.req.type == undefined) {
|
if (this.req.type == undefined || this.req.isDir) {
|
||||||
return null;
|
return null;
|
||||||
}
|
|
||||||
|
|
||||||
if (this.req.isDir) {
|
|
||||||
return "listing";
|
|
||||||
} else if (
|
} else if (
|
||||||
this.req.type === "text" ||
|
this.req.type === "text" ||
|
||||||
this.req.type === "textImmutable"
|
this.req.type === "textImmutable"
|
||||||
@@ -72,7 +68,26 @@ export default {
|
|||||||
this.fetchData();
|
this.fetchData();
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
$route: "fetchData",
|
$route: function (to, from) {
|
||||||
|
if (from.path.endsWith("/")) {
|
||||||
|
if (to.path.endsWith("/")) {
|
||||||
|
window.sessionStorage.setItem("listFrozen", "false");
|
||||||
|
this.fetchData();
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
window.sessionStorage.setItem("listFrozen", "true");
|
||||||
|
this.fetchData();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else if (to.path.endsWith("/")) {
|
||||||
|
this.$store.commit("updateRequest", {});
|
||||||
|
this.fetchData();
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
this.fetchData();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
},
|
||||||
reload: function (value) {
|
reload: function (value) {
|
||||||
if (value === true) {
|
if (value === true) {
|
||||||
this.fetchData();
|
this.fetchData();
|
||||||
@@ -101,7 +116,9 @@ export default {
|
|||||||
this.$store.commit("closeHovers");
|
this.$store.commit("closeHovers");
|
||||||
|
|
||||||
// Set loading to true and reset the error.
|
// Set loading to true and reset the error.
|
||||||
this.setLoading(true);
|
if (window.sessionStorage.getItem("listFrozen") !=="true" && window.sessionStorage.getItem("modified") !=="true"){
|
||||||
|
this.setLoading(true);
|
||||||
|
}
|
||||||
this.error = null;
|
this.error = null;
|
||||||
|
|
||||||
let url = this.$route.path;
|
let url = this.$route.path;
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
<breadcrumbs :base="'/share/' + hash" />
|
<breadcrumbs :base="'/share/' + hash" />
|
||||||
|
|
||||||
<div v-if="loading">
|
<div v-if="loading">
|
||||||
<h2 class="message delayed">
|
<h2 class="message delayed" style="padding-top: 3em !important;">
|
||||||
<div class="spinner">
|
<div class="spinner">
|
||||||
<div class="bounce1"></div>
|
<div class="bounce1"></div>
|
||||||
<div class="bounce2"></div>
|
<div class="bounce2"></div>
|
||||||
@@ -73,28 +73,34 @@
|
|||||||
</div>
|
</div>
|
||||||
<div v-else>
|
<div v-else>
|
||||||
<div class="share">
|
<div class="share">
|
||||||
<div class="share__box share__box__info">
|
<div class="share__box share__box__info"
|
||||||
<div class="share__box__header">
|
style="
|
||||||
|
position: -webkit-sticky;
|
||||||
|
position: sticky;
|
||||||
|
top:-20.6em;
|
||||||
|
z-index:999;"
|
||||||
|
>
|
||||||
|
<div class="share__box__header" style="height:3em">
|
||||||
{{
|
{{
|
||||||
req.isDir
|
req.isDir
|
||||||
? $t("download.downloadFolder")
|
? $t("download.downloadFolder")
|
||||||
: $t("download.downloadFile")
|
: $t("download.downloadFile")
|
||||||
}}
|
}}
|
||||||
</div>
|
</div>
|
||||||
<div class="share__box__element share__box__center share__box__icon">
|
<div v-if="!this.req.isDir" class="share__box__element share__box__center share__box__icon">
|
||||||
<i class="material-icons">{{ icon }}</i>
|
<i class="material-icons">{{ icon }}</i>
|
||||||
</div>
|
</div>
|
||||||
<div class="share__box__element">
|
<div class="share__box__element" style="height:3em">
|
||||||
<strong>{{ $t("prompts.displayName") }}</strong> {{ req.name }}
|
<strong>{{ $t("prompts.displayName") }}</strong> {{ req.name }}
|
||||||
</div>
|
</div>
|
||||||
<div class="share__box__element" :title="modTime">
|
<div v-if="!this.req.isDir" class="share__box__element" :title="modTime">
|
||||||
<strong>{{ $t("prompts.lastModified") }}:</strong> {{ humanTime }}
|
<strong>{{ $t("prompts.lastModified") }}:</strong> {{ humanTime }}
|
||||||
</div>
|
</div>
|
||||||
<div class="share__box__element">
|
<div class="share__box__element" style="height:3em">
|
||||||
<strong>{{ $t("prompts.size") }}:</strong> {{ humanSize }}
|
<strong>{{ $t("prompts.size") }}:</strong> {{ humanSize }}
|
||||||
</div>
|
</div>
|
||||||
<div class="share__box__element share__box__center">
|
<div class="share__box__element share__box__center">
|
||||||
<a target="_blank" :href="link" class="button button--flat">
|
<a target="_blank" :href="link" class="button button--flat" style="height:4em">
|
||||||
<div>
|
<div>
|
||||||
<i class="material-icons">file_download</i
|
<i class="material-icons">file_download</i
|
||||||
>{{ $t("buttons.download") }}
|
>{{ $t("buttons.download") }}
|
||||||
@@ -111,12 +117,73 @@
|
|||||||
>{{ $t("buttons.openFile") }}
|
>{{ $t("buttons.openFile") }}
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
|
<qrcode-vue v-if="this.req.isDir" :value="fullLink" size="100" level="M"></qrcode-vue>
|
||||||
</div>
|
</div>
|
||||||
<div class="share__box__element share__box__center">
|
<div v-if="!this.req.isDir" class="share__box__element share__box__center">
|
||||||
<qrcode-vue :value="link" size="200" level="M"></qrcode-vue>
|
<qrcode-vue :value="link" size="200" level="M"></qrcode-vue>
|
||||||
</div>
|
</div>
|
||||||
|
<div v-if="this.req.isDir" class="share__box__element share__box__header" style="height:3em">
|
||||||
|
{{ $t("sidebar.preview") }}
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
v-if="this.req.isDir"
|
||||||
|
class="share__box__element share__box__center share__box__icon"
|
||||||
|
style="padding:0em !important;height:12em !important;"
|
||||||
|
>
|
||||||
|
<a
|
||||||
|
target="_blank"
|
||||||
|
:href="raw"
|
||||||
|
class="button button--flat"
|
||||||
|
v-if= "!this.$store.state.multiple &&
|
||||||
|
selectedCount === 1 &&
|
||||||
|
req.items[this.selected[0]].type === 'image'"
|
||||||
|
style="height: 12em; padding:0; margin:0;"
|
||||||
|
>
|
||||||
|
<img
|
||||||
|
style="height: 12em;"
|
||||||
|
:src="raw"
|
||||||
|
>
|
||||||
|
</a>
|
||||||
|
<div
|
||||||
|
v-else-if= "
|
||||||
|
!this.$store.state.multiple &&
|
||||||
|
selectedCount === 1 &&
|
||||||
|
req.items[this.selected[0]].type === 'audio'"
|
||||||
|
style="height: 12em; paddingTop:1em; margin:0;"
|
||||||
|
>
|
||||||
|
<button @click="play" v-if="!this.tag" style="fontSize:6em !important; border:0px;outline:none; background: white;" class="material-icons">play_circle_filled</button>
|
||||||
|
<button @click="play" v-if="this.tag" style="fontSize:6em !important; border:0px;outline:none; background: white;" class="material-icons">pause_circle_filled</button>
|
||||||
|
<audio id="myaudio"
|
||||||
|
:src="raw"
|
||||||
|
controls="controls"
|
||||||
|
:autoplay="tag"
|
||||||
|
>
|
||||||
|
</audio>
|
||||||
|
</div>
|
||||||
|
<video
|
||||||
|
v-else-if= "
|
||||||
|
!this.$store.state.multiple &&
|
||||||
|
selectedCount === 1 &&
|
||||||
|
req.items[this.selected[0]].type === 'video'"
|
||||||
|
style="height: 12em; padding:0; margin:0;"
|
||||||
|
:src="raw"
|
||||||
|
controls="controls"
|
||||||
|
>
|
||||||
|
Sorry, your browser doesn't support embedded videos, but don't worry,
|
||||||
|
you can <a :href="raw">download it</a>
|
||||||
|
and watch it with your favorite video player!
|
||||||
|
</video>
|
||||||
|
<i
|
||||||
|
v-else-if= "
|
||||||
|
!this.$store.state.multiple &&
|
||||||
|
selectedCount === 1 &&
|
||||||
|
req.items[this.selected[0]].isDir"
|
||||||
|
class="material-icons">folder
|
||||||
|
</i>
|
||||||
|
<i v-else class="material-icons">call_to_action</i>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div id="shareList"
|
||||||
v-if="req.isDir && req.items.length > 0"
|
v-if="req.isDir && req.items.length > 0"
|
||||||
class="share__box share__box__items"
|
class="share__box share__box__items"
|
||||||
>
|
>
|
||||||
@@ -183,7 +250,7 @@
|
|||||||
import { mapState, mapMutations, mapGetters } from "vuex";
|
import { mapState, mapMutations, mapGetters } from "vuex";
|
||||||
import { pub as api } from "@/api";
|
import { pub as api } from "@/api";
|
||||||
import { filesize } from "@/utils";
|
import { filesize } from "@/utils";
|
||||||
import moment from "moment";
|
import moment from "moment/min/moment-with-locales";
|
||||||
|
|
||||||
import HeaderBar from "@/components/header/HeaderBar.vue";
|
import HeaderBar from "@/components/header/HeaderBar.vue";
|
||||||
import Action from "@/components/header/Action.vue";
|
import Action from "@/components/header/Action.vue";
|
||||||
@@ -211,6 +278,7 @@ export default {
|
|||||||
hash: null,
|
hash: null,
|
||||||
token: null,
|
token: null,
|
||||||
clip: null,
|
clip: null,
|
||||||
|
tag: false,
|
||||||
}),
|
}),
|
||||||
watch: {
|
watch: {
|
||||||
$route: function () {
|
$route: function () {
|
||||||
@@ -248,6 +316,9 @@ export default {
|
|||||||
link: function () {
|
link: function () {
|
||||||
return api.getDownloadURL(this.req);
|
return api.getDownloadURL(this.req);
|
||||||
},
|
},
|
||||||
|
raw: function () {
|
||||||
|
return this.req.items[this.selected[0]].url.replace(/share/, 'api/public/dl')+'?token='+this.token;
|
||||||
|
},
|
||||||
inlineLink: function () {
|
inlineLink: function () {
|
||||||
return api.getDownloadURL(this.req, true);
|
return api.getDownloadURL(this.req, true);
|
||||||
},
|
},
|
||||||
@@ -270,6 +341,16 @@ export default {
|
|||||||
base64: function (name) {
|
base64: function (name) {
|
||||||
return window.btoa(unescape(encodeURIComponent(name)));
|
return window.btoa(unescape(encodeURIComponent(name)));
|
||||||
},
|
},
|
||||||
|
play() {
|
||||||
|
var audio = document.getElementById('myaudio');
|
||||||
|
if(this.tag){
|
||||||
|
audio.pause();
|
||||||
|
this.tag = false;
|
||||||
|
} else {
|
||||||
|
audio.play();
|
||||||
|
this.tag = true;
|
||||||
|
}
|
||||||
|
},
|
||||||
fetchData: async function () {
|
fetchData: async function () {
|
||||||
// Reset view information.
|
// Reset view information.
|
||||||
this.$store.commit("setReload", false);
|
this.$store.commit("setReload", false);
|
||||||
@@ -358,3 +439,17 @@ export default {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
<style scoped>
|
||||||
|
#listing.list{
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
#shareList{
|
||||||
|
overflow-y: scroll;
|
||||||
|
}
|
||||||
|
@media (min-width: 930px) {
|
||||||
|
#shareList{
|
||||||
|
height: calc(100vh - 9.8em);
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -1,5 +1,9 @@
|
|||||||
<template>
|
<template>
|
||||||
<div id="editor-container">
|
<div
|
||||||
|
id="editor-container"
|
||||||
|
@touchmove.prevent.stop
|
||||||
|
@wheel.prevent.stop
|
||||||
|
>
|
||||||
<header-bar>
|
<header-bar>
|
||||||
<action icon="close" :label="$t('buttons.close')" @action="close()" />
|
<action icon="close" :label="$t('buttons.close')" @action="close()" />
|
||||||
<title>{{ req.name }}</title>
|
<title>{{ req.name }}</title>
|
||||||
@@ -103,13 +107,15 @@ export default {
|
|||||||
if (theme == "dark") {
|
if (theme == "dark") {
|
||||||
this.editor.setTheme("ace/theme/twilight");
|
this.editor.setTheme("ace/theme/twilight");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.editor.focus();
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
back() {
|
|
||||||
let uri = url.removeLastDir(this.$route.path) + "/";
|
|
||||||
this.$router.push({ path: uri });
|
|
||||||
},
|
|
||||||
keyEvent(event) {
|
keyEvent(event) {
|
||||||
|
if (event.code === "Escape") {
|
||||||
|
this.close();
|
||||||
|
}
|
||||||
|
|
||||||
if (!event.ctrlKey && !event.metaKey) {
|
if (!event.ctrlKey && !event.metaKey) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -127,6 +133,7 @@ export default {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
await api.put(this.$route.path, this.editor.getValue());
|
await api.put(this.$route.path, this.editor.getValue());
|
||||||
|
this.editor.session.getUndoManager().markClean();
|
||||||
buttons.success(button);
|
buttons.success(button);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
buttons.done(button);
|
buttons.done(button);
|
||||||
@@ -134,6 +141,11 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
close() {
|
close() {
|
||||||
|
if (!this.editor.session.getUndoManager().isClean()) {
|
||||||
|
this.$store.commit("showHover", "discardEditorChanges");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
this.$store.commit("updateRequest", {});
|
this.$store.commit("updateRequest", {});
|
||||||
|
|
||||||
let uri = url.removeLastDir(this.$route.path) + "/";
|
let uri = url.removeLastDir(this.$route.path) + "/";
|
||||||
|
|||||||
@@ -383,17 +383,23 @@ export default {
|
|||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
req: function () {
|
req: function () {
|
||||||
// Reset the show value
|
if (window.sessionStorage.getItem("listFrozen") !=="true" && window.sessionStorage.getItem("modified") !=="true"){
|
||||||
this.showLimit = 50;
|
// Reset the show value
|
||||||
|
this.showLimit = 50;
|
||||||
|
|
||||||
// Ensures that the listing is displayed
|
// Ensures that the listing is displayed
|
||||||
Vue.nextTick(() => {
|
Vue.nextTick(() => {
|
||||||
// How much every listing item affects the window height
|
// How much every listing item affects the window height
|
||||||
this.setItemWeight();
|
this.setItemWeight();
|
||||||
|
|
||||||
// Fill and fit the window with listing items
|
// Fill and fit the window with listing items
|
||||||
this.fillWindow(true);
|
this.fillWindow(true);
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
if (this.req.isDir) {
|
||||||
|
window.sessionStorage.setItem("listFrozen", "false");
|
||||||
|
window.sessionStorage.setItem("modified", "false");
|
||||||
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
mounted: function () {
|
mounted: function () {
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
<template>
|
<template>
|
||||||
<div
|
<div
|
||||||
id="previewer"
|
id="previewer"
|
||||||
|
@touchmove.prevent.stop
|
||||||
|
@wheel.prevent.stop
|
||||||
@mousemove="toggleNavigation"
|
@mousemove="toggleNavigation"
|
||||||
@touchstart="toggleNavigation"
|
@touchstart="toggleNavigation"
|
||||||
>
|
>
|
||||||
<header-bar>
|
<header-bar v-if="showNav">
|
||||||
<action icon="close" :label="$t('buttons.close')" @action="close()" />
|
<action icon="close" :label="$t('buttons.close')" @action="close()" />
|
||||||
<title>{{ name }}</title>
|
<title>{{ name }}</title>
|
||||||
<action
|
<action
|
||||||
|
|||||||
@@ -63,7 +63,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import { share as api, users } from "@/api";
|
import { share as api, users } from "@/api";
|
||||||
import { mapState, mapMutations } from "vuex";
|
import { mapState, mapMutations } from "vuex";
|
||||||
import moment from "moment";
|
import moment from "moment/min/moment-with-locales";
|
||||||
import Clipboard from "clipboard";
|
import Clipboard from "clipboard";
|
||||||
import Errors from "@/views/Errors.vue";
|
import Errors from "@/views/Errors.vue";
|
||||||
|
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ export default {
|
|||||||
this.user = {
|
this.user = {
|
||||||
...defaults,
|
...defaults,
|
||||||
username: "",
|
username: "",
|
||||||
passsword: "",
|
password: "",
|
||||||
rules: [],
|
rules: [],
|
||||||
lockPassword: false,
|
lockPassword: false,
|
||||||
id: 0,
|
id: 0,
|
||||||
|
|||||||
8
go.mod
8
go.mod
@@ -23,9 +23,9 @@ require (
|
|||||||
github.com/stretchr/testify v1.8.4
|
github.com/stretchr/testify v1.8.4
|
||||||
github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce
|
github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce
|
||||||
go.etcd.io/bbolt v1.3.7
|
go.etcd.io/bbolt v1.3.7
|
||||||
golang.org/x/crypto v0.14.0
|
golang.org/x/crypto v0.17.0
|
||||||
golang.org/x/image v0.10.0
|
golang.org/x/image v0.10.0
|
||||||
golang.org/x/text v0.13.0
|
golang.org/x/text v0.14.0
|
||||||
gopkg.in/natefinch/lumberjack.v2 v2.2.1
|
gopkg.in/natefinch/lumberjack.v2 v2.2.1
|
||||||
gopkg.in/yaml.v2 v2.4.0
|
gopkg.in/yaml.v2 v2.4.0
|
||||||
)
|
)
|
||||||
@@ -60,8 +60,8 @@ require (
|
|||||||
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect
|
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect
|
||||||
github.com/yusufpapurcu/wmi v1.2.2 // indirect
|
github.com/yusufpapurcu/wmi v1.2.2 // indirect
|
||||||
golang.org/x/net v0.17.0 // indirect
|
golang.org/x/net v0.17.0 // indirect
|
||||||
golang.org/x/sys v0.13.0 // indirect
|
golang.org/x/sys v0.15.0 // indirect
|
||||||
google.golang.org/protobuf v1.31.0 // indirect
|
google.golang.org/protobuf v1.33.0 // indirect
|
||||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
|
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
|
||||||
gopkg.in/ini.v1 v1.67.0 // indirect
|
gopkg.in/ini.v1 v1.67.0 // indirect
|
||||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
|
|||||||
16
go.sum
16
go.sum
@@ -292,8 +292,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh
|
|||||||
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
|
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
|
||||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc=
|
golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k=
|
||||||
golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
|
golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
|
||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
|
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
|
||||||
@@ -432,8 +432,8 @@ golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||||||
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
|
golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
|
||||||
golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||||
@@ -446,8 +446,8 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
|||||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||||
golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
||||||
golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
|
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
|
||||||
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||||
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
@@ -595,8 +595,8 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj
|
|||||||
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
|
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
|
||||||
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
||||||
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||||
google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
|
google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
|
||||||
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
PORT=$(jq .port /.filebrowser.json)
|
PORT=${FB_PORT:-$(jq .port /.filebrowser.json)}
|
||||||
curl -f http://localhost:$PORT/health || exit 1
|
ADDRESS=${FB_ADDRESS:-$(jq .address /.filebrowser.json)}
|
||||||
|
ADDRESS=${ADDRESS:-localhost}
|
||||||
|
curl -f http://$ADDRESS:$PORT/health || exit 1
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ func resourcePostHandler(fileCache FileCache) handleFunc {
|
|||||||
|
|
||||||
// Directories creation on POST.
|
// Directories creation on POST.
|
||||||
if strings.HasSuffix(r.URL.Path, "/") {
|
if strings.HasSuffix(r.URL.Path, "/") {
|
||||||
err := d.user.Fs.MkdirAll(r.URL.Path, 0775) //nolint:gomnd
|
err := d.user.Fs.MkdirAll(r.URL.Path, files.PermDir)
|
||||||
return errToStatus(err), err
|
return errToStatus(err), err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -256,12 +256,12 @@ func addVersionSuffix(source string, fs afero.Fs) string {
|
|||||||
|
|
||||||
func writeFile(fs afero.Fs, dst string, in io.Reader) (os.FileInfo, error) {
|
func writeFile(fs afero.Fs, dst string, in io.Reader) (os.FileInfo, error) {
|
||||||
dir, _ := path.Split(dst)
|
dir, _ := path.Split(dst)
|
||||||
err := fs.MkdirAll(dir, 0775) //nolint:gomnd
|
err := fs.MkdirAll(dir, files.PermDir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
file, err := fs.OpenFile(dst, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0775) //nolint:gomnd
|
file, err := fs.OpenFile(dst, os.O_RDWR|os.O_CREATE|os.O_TRUNC, files.PermFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -173,7 +173,7 @@ require (
|
|||||||
golang.org/x/sync v0.3.0 // indirect
|
golang.org/x/sync v0.3.0 // indirect
|
||||||
golang.org/x/sys v0.10.0 // indirect
|
golang.org/x/sys v0.10.0 // indirect
|
||||||
golang.org/x/text v0.9.0 // indirect
|
golang.org/x/text v0.9.0 // indirect
|
||||||
google.golang.org/protobuf v1.28.0 // indirect
|
google.golang.org/protobuf v1.33.0 // indirect
|
||||||
gopkg.in/ini.v1 v1.67.0 // indirect
|
gopkg.in/ini.v1 v1.67.0 // indirect
|
||||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
|
|||||||
@@ -934,8 +934,8 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj
|
|||||||
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
|
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
|
||||||
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
||||||
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||||
google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw=
|
google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
|
||||||
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
|
||||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
|||||||
Reference in New Issue
Block a user