diff --git a/.babelrc b/.babelrc
deleted file mode 100644
index 4595f772..00000000
--- a/.babelrc
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "presets": [
- ["env", { "modules": false }],
- "stage-2"
- ],
- "plugins": ["transform-runtime"],
- "env": {
- "test": {
- "presets": ["env", "stage-2"],
- "plugins": [ "istanbul" ]
- }
- }
-}
diff --git a/.circleci/config.yml b/.circleci/config.yml
new file mode 100644
index 00000000..4085fb1f
--- /dev/null
+++ b/.circleci/config.yml
@@ -0,0 +1,19 @@
+version: 2
+jobs:
+ build:
+ docker:
+ - image: circleci/golang:1.9
+
+ working_directory: /go/src/github.com/filebrowser/filebrowser
+
+ steps:
+ - checkout
+ - run:
+ name: Install Dependencies
+ run: |
+ go get github.com/alecthomas/gometalinter
+ /go/bin/gometalinter --install
+
+ - run:
+ name: Run linting
+ command: gometalinter --disable-all -E gofmt -E misspell -E ineffassign -E goimports -E deadcode --exclude="rice-box.go" --tests ./...
diff --git a/.dockerignore b/.dockerignore
index ac45b0ea..1471126c 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -1,4 +1,2 @@
-assets/
testdata/
-caddy/
.github/
diff --git a/.editorconfig b/.editorconfig
deleted file mode 100644
index 2043e3a3..00000000
--- a/.editorconfig
+++ /dev/null
@@ -1,14 +0,0 @@
-root = true
-
-[*]
-charset = utf-8
-indent_style = space
-indent_size = 2
-end_of_line = lf
-insert_final_newline = true
-trim_trailing_whitespace = true
-
-# 4 space indentation
-[*.go]
-indent_style = tab
-indent_size = 4
\ No newline at end of file
diff --git a/.eslintignore b/.eslintignore
deleted file mode 100644
index c8cd7690..00000000
--- a/.eslintignore
+++ /dev/null
@@ -1,2 +0,0 @@
-build/*.js
-config/*.js
diff --git a/.eslintrc.js b/.eslintrc.js
deleted file mode 100644
index 74d59e4f..00000000
--- a/.eslintrc.js
+++ /dev/null
@@ -1,27 +0,0 @@
-// http://eslint.org/docs/user-guide/configuring
-
-module.exports = {
- root: true,
- parser: 'babel-eslint',
- parserOptions: {
- sourceType: 'module'
- },
- env: {
- browser: true,
- },
- // https://github.com/feross/standard/blob/master/RULES.md#javascript-standard-style
- extends: 'standard',
- // required to lint *.vue files
- plugins: [
- 'html'
- ],
- // add your custom rules here
- 'rules': {
- // allow paren-less arrow functions
- 'arrow-parens': 0,
- // allow async-await
- 'generator-star-spacing': 0,
- // allow debugger during development
- 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0
- }
-}
diff --git a/.goreleaser.yml b/.goreleaser.yml
index 57a1c086..282914c3 100644
--- a/.goreleaser.yml
+++ b/.goreleaser.yml
@@ -1,6 +1,6 @@
build:
- main: cmd/filemanager/main.go
- binary: filemanager
+ main: cmd/filebrowser/main.go
+ binary: filebrowser
goos:
- darwin
- linux
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
deleted file mode 100644
index 883952d3..00000000
--- a/CODE_OF_CONDUCT.md
+++ /dev/null
@@ -1,46 +0,0 @@
-# Contributor Covenant Code of Conduct
-
-## Our Pledge
-
-In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
-
-## Our Standards
-
-Examples of behavior that contributes to creating a positive environment include:
-
-* Using welcoming and inclusive language
-* Being respectful of differing viewpoints and experiences
-* Gracefully accepting constructive criticism
-* Focusing on what is best for the community
-* Showing empathy towards other community members
-
-Examples of unacceptable behavior by participants include:
-
-* The use of sexualized language or imagery and unwelcome sexual attention or advances
-* Trolling, insulting/derogatory comments, and personal or political attacks
-* Public or private harassment
-* Publishing others' private information, such as a physical or electronic address, without explicit permission
-* Other conduct which could reasonably be considered inappropriate in a professional setting
-
-## Our Responsibilities
-
-Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
-
-Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
-
-## Scope
-
-This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
-
-## Enforcement
-
-Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at hacdias@gmail.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
-
-Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
-
-## Attribution
-
-This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
-
-[homepage]: http://contributor-covenant.org
-[version]: http://contributor-covenant.org/version/1/4/
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
deleted file mode 100644
index f0b430df..00000000
--- a/CONTRIBUTING.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Contributing
-
-If you want to contribute or want to build the code from source, you will need to have the most recent version of Go and, if you want to change the static assets (JS, CSS, ...), Node.js installed on your computer. To start developing, you just need to do the following:
-
-1. `go get github.com/hacdias/filemanager/cmd/filemanager`
-2. `cd $GOPATH/src/github.com/hacdias/filemanager`
-3. `npm install`
-4. `npm run dev` - regenerates the static assets automatically
-5. `go install github.com/hacdias/filemanager/cmd/filemanager`
-6. Execute `$GOPATH/bin/filemanager`
-
-The steps 3 and 4 are only required **if you want to develop the front-end**. Otherwise, you can ignore them. Before pulling, if you made any change on assets folder, you must run the `build.sh` script on the root of this repository.
-
-If you are using this as a Caddy plugin, you should use its [official instructions for plugins](https://github.com/mholt/caddy/wiki/Extending-Caddy#2-plug-in-your-plugin) and import `github.com/hacdias/filemanager/caddy/filemanager`.
diff --git a/Dockerfile b/Dockerfile
index e5cb7f2d..e238dbaf 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,17 +1,18 @@
+
FROM golang:alpine
-COPY . /go/src/github.com/hacdias/filemanager
+COPY . /go/src/github.com/filebrowser/filebrowser
-WORKDIR /go/src/github.com/hacdias/filemanager
+WORKDIR /go/src/github.com/filebrowser/filebrowser
RUN apk add --no-cache git
RUN go get ./...
-WORKDIR /go/src/github.com/hacdias/filemanager/cmd/filemanager
+WORKDIR /go/src/github.com/filebrowser/filebrowser/cmd/filebrowser
RUN CGO_ENABLED=0 go build -a
-RUN mv filemanager /go/bin/filemanager
+RUN mv filebrowser /go/bin/filebrowser
FROM scratch
-COPY --from=0 /go/bin/filemanager /filemanager
+COPY --from=0 /go/bin/filebrowser /filebrowser
VOLUME /tmp
VOLUME /srv
@@ -19,5 +20,5 @@ EXPOSE 80
COPY Docker.json /config.json
-ENTRYPOINT ["/filemanager"]
+ENTRYPOINT ["/filebrowser"]
CMD ["--config", "/config.json"]
diff --git a/README.md b/README.md
index 2d4a96b8..cc6b6f43 100644
--- a/README.md
+++ b/README.md
@@ -1,13 +1,13 @@

-# filemanager
+# filebrowser
-[](https://travis-ci.org/hacdias/filemanager)
-[](https://goreportcard.com/report/hacdias/filemanager)
-[](http://godoc.org/github.com/hacdias/filemanager)
-[](https://github.com/hacdias/filemanager/releases/latest)
+[](https://travis-ci.org/filebrowser/filebrowser)
+[](https://goreportcard.com/report/github.com/filebrowser/filebrowser)
+[](http://godoc.org/github.com/filebrowser/filebrowser)
+[](https://github.com/filebrowser/filebrowser/releases/latest)
-filemanager provides a file managing interface within a specified directory and it can be used to upload, delete, preview, rename and edit your files. It allows the creation of multiple users and each user can have its own directory. It can be used as a standalone app or as a middleware.
+filebrowser provides a file managing interface within a specified directory and it can be used to upload, delete, preview, rename and edit your files. It allows the creation of multiple users and each user can have its own directory. It can be used as a standalone app or as a middleware.
# Table of contents
@@ -20,7 +20,7 @@ filemanager provides a file managing interface within a specified directory and
# Getting started
-You can find the Getting Started guide on the [documentation](https://henriquedias.com/filemanager/quick-start/).
+You can find the Getting Started guide on the [documentation](https://filebrowser.github.io/quick-start/).
# Features
@@ -50,7 +50,7 @@ We support multiple users and each user can have its own scope and custom styles
## Search
-FileManager allows you to search through your files and it has some options. By default, your search will be something like this:
+File Browser allows you to search through your files and it has some options. By default, your search will be something like this:
```
this are keywords
@@ -72,4 +72,4 @@ this are keywords case:insensitive
# Contributing
-The contributing guidelines can be found [here](https://github.com/hacdias/filemanager/blob/master/CONTRIBUTING.md).
+The contributing guidelines can be found [here](https://github.com/filebrowser/community).
diff --git a/assets/build/build.js b/assets/build/build.js
deleted file mode 100644
index 431f3c8f..00000000
--- a/assets/build/build.js
+++ /dev/null
@@ -1,31 +0,0 @@
-require('./check-versions')()
-
-process.env.NODE_ENV = 'production'
-
-var ora = require('ora')
-var rm = require('rimraf')
-var path = require('path')
-var chalk = require('chalk')
-var webpack = require('webpack')
-var config = require('./config')
-var webpackConfig = require('./webpack.prod.conf')
-
-var spinner = ora('building for production...')
-spinner.start()
-
-rm(path.join(config.assetsRoot, config.assetsSubDirectory), err => {
- if (err) throw err
- webpack(webpackConfig, function (err, stats) {
- spinner.stop()
- if (err) throw err
- process.stdout.write(stats.toString({
- colors: true,
- modules: false,
- children: false,
- chunks: false,
- chunkModules: false
- }) + '\n\n')
-
- console.log(chalk.cyan(' Build complete.\n'))
- })
-})
diff --git a/assets/build/check-versions.js b/assets/build/check-versions.js
deleted file mode 100644
index 57bcf30a..00000000
--- a/assets/build/check-versions.js
+++ /dev/null
@@ -1,48 +0,0 @@
-var chalk = require('chalk')
-var semver = require('semver')
-var packageConfig = require('../../package.json')
-var shell = require('shelljs')
-function exec (cmd) {
- return require('child_process').execSync(cmd).toString().trim()
-}
-
-var versionRequirements = [
- {
- name: 'node',
- currentVersion: semver.clean(process.version),
- versionRequirement: packageConfig.engines.node
- }
-]
-
-if (shell.which('npm')) {
- versionRequirements.push({
- name: 'npm',
- currentVersion: exec('npm --version'),
- versionRequirement: packageConfig.engines.npm
- })
-}
-
-module.exports = function () {
- var warnings = []
- for (var i = 0; i < versionRequirements.length; i++) {
- var mod = versionRequirements[i]
- if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {
- warnings.push(mod.name + ': ' +
- chalk.red(mod.currentVersion) + ' should be ' +
- chalk.green(mod.versionRequirement)
- )
- }
- }
-
- if (warnings.length) {
- console.log('')
- console.log(chalk.yellow('To use this template, you must update following to modules:'))
- console.log()
- for (var i = 0; i < warnings.length; i++) {
- var warning = warnings[i]
- console.log(' ' + warning)
- }
- console.log()
- process.exit(1)
- }
-}
diff --git a/assets/build/config.js b/assets/build/config.js
deleted file mode 100644
index 19e90718..00000000
--- a/assets/build/config.js
+++ /dev/null
@@ -1,26 +0,0 @@
-// see http://vuejs-templates.github.io/webpack for documentation.
-var path = require('path')
-
-module.exports = {
- index: path.resolve(__dirname, '../dist/index.html'),
- assetsRoot: path.resolve(__dirname, '../dist'),
- assetsSubDirectory: 'static',
- assetsPublicPath: '{{ .BaseURL }}/',
- build: {
- env: {
- NODE_ENV: '"production"'
- },
- productionSourceMap: true,
- // Run the build command with an extra argument to
- // View the bundle analyzer report after build finishes:
- // `npm run build --report`
- // Set to `true` or `false` to always turn it on or off
- bundleAnalyzerReport: process.env.npm_config_report
- },
- dev: {
- env: {
- NODE_ENV: '"development"'
- },
- produceSourceMap: true
- }
-}
diff --git a/assets/build/dev.js b/assets/build/dev.js
deleted file mode 100644
index 9b42a437..00000000
--- a/assets/build/dev.js
+++ /dev/null
@@ -1,35 +0,0 @@
-require('./check-versions')()
-
-process.env.NODE_ENV = 'development'
-
-var rm = require('rimraf')
-var path = require('path')
-var chalk = require('chalk')
-var webpack = require('webpack')
-var config = require('./config')
-var webpackConfig = require('./webpack.dev.conf')
-var fs = require('fs')
-
-if (fs.existsSync('./rice-box.go')) {
- fs.unlinkSync('./rice-box.go')
-}
-
-if (fs.existsSync('./plugins/rice-box.go')) {
- fs.unlinkSync('./plugins/rice-box.go')
-}
-
-rm(path.join(config.assetsRoot, config.assetsSubDirectory), err => {
- if (err) throw err
- webpack(webpackConfig, function (err, stats) {
- if (err) throw err
- process.stdout.write(stats.toString({
- colors: true,
- modules: false,
- children: false,
- chunks: false,
- chunkModules: false
- }) + '\n\n')
-
- console.log(chalk.cyan(' Build complete.\n'))
- })
-})
diff --git a/assets/build/service-worker-dev.js b/assets/build/service-worker-dev.js
deleted file mode 100644
index 5b17a579..00000000
--- a/assets/build/service-worker-dev.js
+++ /dev/null
@@ -1,17 +0,0 @@
-// This service worker file is effectively a 'no-op' that will reset any
-// previous service worker registered for the same host:port combination.
-// In the production build, this file is replaced with an actual service worker
-// file that will precache your site's local assets.
-// See https://github.com/facebookincubator/create-react-app/issues/2272#issuecomment-302832432
-
-self.addEventListener('install', () => self.skipWaiting());
-
-self.addEventListener('activate', () => {
- self.clients.matchAll({ type: 'window' }).then(windowClients => {
- for (let windowClient of windowClients) {
- // Force open pages to refresh, so that they have a chance to load the
- // fresh navigation response from the local dev server.
- windowClient.navigate(windowClient.url);
- }
- });
-});
\ No newline at end of file
diff --git a/assets/build/service-worker-prod.js b/assets/build/service-worker-prod.js
deleted file mode 100644
index bf704fda..00000000
--- a/assets/build/service-worker-prod.js
+++ /dev/null
@@ -1,55 +0,0 @@
-(function() {
- 'use strict';
-
- // Check to make sure service workers are supported in the current browser,
- // and that the current page is accessed from a secure origin. Using a
- // service worker from an insecure origin will trigger JS console errors.
- const isLocalhost = Boolean(window.location.hostname === 'localhost' ||
- // [::1] is the IPv6 localhost address.
- window.location.hostname === '[::1]' ||
- // 127.0.0.1/8 is considered localhost for IPv4.
- window.location.hostname.match(
- /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/
- )
- );
-
- window.addEventListener('load', function() {
- if ('serviceWorker' in navigator &&
- (window.location.protocol === 'https:' || isLocalhost)) {
- navigator.serviceWorker.register('{{ .BaseURL }}/sw.js')
- .then(function(registration) {
- // updatefound is fired if service-worker.js changes.
- registration.onupdatefound = function() {
- // updatefound is also fired the very first time the SW is installed,
- // and there's no need to prompt for a reload at that point.
- // So check here to see if the page is already controlled,
- // i.e. whether there's an existing service worker.
- if (navigator.serviceWorker.controller) {
- // The updatefound event implies that registration.installing is set
- const installingWorker = registration.installing;
-
- installingWorker.onstatechange = function() {
- switch (installingWorker.state) {
- case 'installed':
- // At this point, the old content will have been purged and the
- // fresh content will have been added to the cache.
- // It's the perfect time to display a "New content is
- // available; please refresh." message in the page's interface.
- break;
-
- case 'redundant':
- throw new Error('The installing ' +
- 'service worker became redundant.');
-
- default:
- // Ignore
- }
- };
- }
- };
- }).catch(function(e) {
- console.error('Error during service worker registration:', e);
- });
- }
- });
-})();
diff --git a/assets/build/utils.js b/assets/build/utils.js
deleted file mode 100644
index 09f8272a..00000000
--- a/assets/build/utils.js
+++ /dev/null
@@ -1,70 +0,0 @@
-var path = require('path')
-var config = require('./config')
-var ExtractTextPlugin = require('extract-text-webpack-plugin')
-
-exports.assetsPath = function (_path) {
- var assetsSubDirectory = config.assetsSubDirectory
-
- return path.posix.join(assetsSubDirectory, _path)
-}
-
-exports.cssLoaders = function (options) {
- options = options || {}
-
- var cssLoader = {
- loader: 'css-loader',
- options: {
- minimize: process.env.NODE_ENV === 'production',
- sourceMap: options.sourceMap
- }
- }
-
- // generate loader string to be used with extract text plugin
- function generateLoaders (loader, loaderOptions) {
- var loaders = [cssLoader]
- if (loader) {
- loaders.push({
- loader: loader + '-loader',
- options: Object.assign({}, loaderOptions, {
- sourceMap: options.sourceMap
- })
- })
- }
-
- // Extract CSS when that option is specified
- // (which is the case during production build)
- if (options.extract) {
- return ExtractTextPlugin.extract({
- use: loaders,
- fallback: 'vue-style-loader'
- })
- } else {
- return ['vue-style-loader'].concat(loaders)
- }
- }
-
- // https://vue-loader.vuejs.org/en/configurations/extract-css.html
- return {
- css: generateLoaders(),
- postcss: generateLoaders(),
- less: generateLoaders('less'),
- sass: generateLoaders('sass', { indentedSyntax: true }),
- scss: generateLoaders('sass'),
- stylus: generateLoaders('stylus'),
- styl: generateLoaders('stylus')
- }
-}
-
-// Generate loaders for standalone style files (outside of .vue)
-exports.styleLoaders = function (options) {
- var output = []
- var loaders = exports.cssLoaders(options)
- for (var extension in loaders) {
- var loader = loaders[extension]
- output.push({
- test: new RegExp('\\.' + extension + '$'),
- use: loader
- })
- }
- return output
-}
diff --git a/assets/build/vue-loader.conf.js b/assets/build/vue-loader.conf.js
deleted file mode 100644
index 8953aaca..00000000
--- a/assets/build/vue-loader.conf.js
+++ /dev/null
@@ -1,12 +0,0 @@
-var utils = require('./utils')
-var config = require('./config')
-var isProduction = process.env.NODE_ENV === 'production'
-
-module.exports = {
- loaders: utils.cssLoaders({
- sourceMap: isProduction
- ? config.build.productionSourceMap
- : config.dev.produceSourceMap,
- extract: isProduction
- })
-}
diff --git a/assets/build/webpack.base.conf.js b/assets/build/webpack.base.conf.js
deleted file mode 100644
index 53c97bfe..00000000
--- a/assets/build/webpack.base.conf.js
+++ /dev/null
@@ -1,69 +0,0 @@
-var path = require('path')
-var utils = require('./utils')
-var config = require('./config')
-var vueLoaderConfig = require('./vue-loader.conf')
-
-function resolve (dir) {
- return path.join(__dirname, '..', dir)
-}
-
-module.exports = {
- entry: {
- app: './assets/src/main.js'
- },
- output: {
- path: config.assetsRoot,
- filename: '[name].js',
- publicPath: config.assetsPublicPath
- },
- resolve: {
- extensions: ['.js', '.vue', '.json'],
- alias: {
- 'vue$': 'vue/dist/vue.esm.js',
- '@': resolve('src')
- }
- },
- module: {
- rules: [
- {
- test: /\.(yml|yaml)$/,
- loader: 'yml-loader'
- },
- {
- test: /\.(js|vue)$/,
- loader: 'eslint-loader',
- enforce: 'pre',
- include: [resolve('src'), resolve('test')],
- options: {
- formatter: require('eslint-friendly-formatter')
- }
- },
- {
- test: /\.vue$/,
- loader: 'vue-loader',
- options: vueLoaderConfig
- },
- {
- test: /\.js$/,
- loader: 'babel-loader',
- include: [resolve('src'), resolve('test')]
- },
- {
- test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
- loader: 'url-loader',
- options: {
- limit: 10000,
- name: utils.assetsPath('img/[name].[hash:7].[ext]')
- }
- },
- {
- test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
- loader: 'url-loader',
- options: {
- // limit: 10000,
- name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
- }
- }
- ]
- }
-}
diff --git a/assets/build/webpack.dev.conf.js b/assets/build/webpack.dev.conf.js
deleted file mode 100644
index 3276b7ea..00000000
--- a/assets/build/webpack.dev.conf.js
+++ /dev/null
@@ -1,81 +0,0 @@
-var fs = require('fs')
-var path = require('path')
-var utils = require('./utils')
-var webpack = require('webpack')
-var config = require('./config')
-var merge = require('webpack-merge')
-var baseWebpackConfig = require('./webpack.base.conf')
-var HtmlWebpackPlugin = require('html-webpack-plugin')
-var ExtractTextPlugin = require('extract-text-webpack-plugin')
-var FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
-var CopyWebpackPlugin = require('copy-webpack-plugin')
-
-module.exports = merge(baseWebpackConfig, {
- watch: true,
- module: {
- rules: utils.styleLoaders({
- sourceMap: config.dev.produceSourceMap,
- extract: true
- })
- },
- devtool: '#cheap-module-eval-source-map',
- output: {
- path: config.assetsRoot,
- filename: utils.assetsPath('js/[name].[chunkhash].js'),
- chunkFilename: utils.assetsPath('js/[id].[chunkhash].js')
- },
- plugins: [
- new webpack.NoEmitOnErrorsPlugin(),
- new FriendlyErrorsPlugin(),
- new webpack.DefinePlugin({
- 'process.env': config.dev.env
- }),
- // extract css into its own file
- new ExtractTextPlugin({
- filename: utils.assetsPath('css/[name].[contenthash].css')
- }),
- // generate dist index.html with correct asset hash for caching.
- // you can customize output by editing /index.html
- // see https://github.com/ampedandwired/html-webpack-plugin
- new HtmlWebpackPlugin({
- filename: config.index,
- template: 'assets/index.html',
- inject: true,
- // necessary to consistently work with multiple chunks via CommonsChunkPlugin
- chunksSortMode: 'dependency',
- serviceWorkerLoader: ``
- }),
- // split vendor js into its own file
- new webpack.optimize.CommonsChunkPlugin({
- name: 'vendor',
- minChunks: function (module, count) {
- // any required modules inside node_modules are extracted to vendor
- return (
- module.resource &&
- /\.js$/.test(module.resource) &&
- module.resource.indexOf(
- path.join(__dirname, '../../node_modules')
- ) === 0
- )
- }
- }),
- // extract webpack runtime and module manifest to its own file in order to
- // prevent vendor hash from being updated whenever app bundle is updated
- new webpack.optimize.CommonsChunkPlugin({
- name: 'manifest',
- chunks: ['vendor']
- }),
- new CopyWebpackPlugin([
- {
- from: path.resolve(__dirname, '../static'),
- to: config.assetsSubDirectory,
- ignore: ['.*']
- },
- {
- from: path.resolve(__dirname, '../../node_modules/codemirror/mode/*/*'),
- to: path.join(config.assetsSubDirectory, 'js/codemirror/mode/[name]/[name].js')
- }
- ])
- ]
-})
diff --git a/assets/build/webpack.prod.conf.js b/assets/build/webpack.prod.conf.js
deleted file mode 100644
index 7912ad3f..00000000
--- a/assets/build/webpack.prod.conf.js
+++ /dev/null
@@ -1,127 +0,0 @@
-var fs = require('fs')
-var path = require('path')
-var utils = require('./utils')
-var webpack = require('webpack')
-var config = require('./config')
-var merge = require('webpack-merge')
-var baseWebpackConfig = require('./webpack.base.conf')
-var CopyWebpackPlugin = require('copy-webpack-plugin')
-var HtmlWebpackPlugin = require('html-webpack-plugin')
-var ExtractTextPlugin = require('extract-text-webpack-plugin')
-var OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin')
-var SWPrecacheWebpackPlugin = require('sw-precache-webpack-plugin')
-var UglifyJS = require('uglify-js')
-
-var env = config.build.env
-
-var webpackConfig = merge(baseWebpackConfig, {
- module: {
- rules: utils.styleLoaders({
- sourceMap: config.build.productionSourceMap,
- extract: true
- })
- },
- devtool: config.build.productionSourceMap ? '#source-map' : false,
- output: {
- path: config.assetsRoot,
- filename: utils.assetsPath('js/[name].[chunkhash].js'),
- chunkFilename: utils.assetsPath('js/[id].[chunkhash].js')
- },
- plugins: [
- new CopyWebpackPlugin([
- {
- from: path.resolve(__dirname, '../static'),
- to: config.assetsSubDirectory,
- ignore: ['.*']
- },
- {
- from: path.resolve(__dirname, '../../node_modules/codemirror/mode/*/*'),
- to: path.join(config.assetsSubDirectory, 'js/codemirror/mode/[name]/[name].js'),
- transform: function (source, path) {
- let result = UglifyJS.minify(source.toString('utf8'))
- if (result.error !== undefined) {
- return source
- }
- return result.code
- }
- }
- ]),
- // http://vuejs.github.io/vue-loader/en/workflow/production.html
- new webpack.DefinePlugin({
- 'process.env': env
- }),
- new webpack.optimize.UglifyJsPlugin({
- compress: {
- warnings: false
- },
- sourceMap: true
- }),
- // extract css into its own file
- new ExtractTextPlugin({
- filename: utils.assetsPath('css/[name].[contenthash].css')
- }),
- // Compress extracted CSS. We are using this plugin so that possible
- // duplicated CSS from different components can be deduped.
- new OptimizeCSSPlugin({
- cssProcessorOptions: {
- safe: true
- }
- }),
- // generate dist index.html with correct asset hash for caching.
- // you can customize output by editing /index.html
- // see https://github.com/ampedandwired/html-webpack-plugin
- new HtmlWebpackPlugin({
- filename: config.index,
- template: 'assets/index.html',
- inject: true,
- minify: {
- removeComments: true,
- collapseWhitespace: true,
- removeAttributeQuotes: true,
- minifyCSS: true
- // more options:
- // https://github.com/kangax/html-minifier#options-quick-reference
- },
- // necessary to consistently work with multiple chunks via CommonsChunkPlugin
- chunksSortMode: 'dependency',
- serviceWorkerLoader: ``
- }),
- // split vendor js into its own file
- new webpack.optimize.CommonsChunkPlugin({
- name: 'vendor',
- minChunks: function (module, count) {
- // any required modules inside node_modules are extracted to vendor
- return (
- module.resource &&
- /\.js$/.test(module.resource) &&
- module.resource.indexOf(
- path.join(__dirname, '../../node_modules')
- ) === 0
- )
- }
- }),
- // extract webpack runtime and module manifest to its own file in order to
- // prevent vendor hash from being updated whenever app bundle is updated
- new webpack.optimize.CommonsChunkPlugin({
- name: 'manifest',
- chunks: ['vendor']
- }),
- // service worker caching
- new SWPrecacheWebpackPlugin({
- cacheId: 'File Manager',
- filename: 'sw.js',
- replacePrefix: '{{ .BaseURL }}/',
- staticFileGlobs: ['dist/**/*.{js,html,css}'],
- minify: true,
- stripPrefix: 'dist/'
- })
- ]
-})
-
-if (config.build.bundleAnalyzerReport) {
- var BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
- webpackConfig.plugins.push(new BundleAnalyzerPlugin())
-}
-
-module.exports = webpackConfig
diff --git a/assets/index.html b/assets/index.html
deleted file mode 100644
index 5ef39dd3..00000000
--- a/assets/index.html
+++ /dev/null
@@ -1,116 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
- File Manager
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ if .ReCaptcha -}}
-
- {{ end }}
-
- <% for (var chunk of webpack.chunks) {
- for (var file of chunk.files) {
- if (file.match(/\.(js|css)$/)) { %>
- <% }}} %>
-
-
-
-
-
-
-
-
- <%= htmlWebpackPlugin.options.serviceWorkerLoader %>
-
-
diff --git a/assets/src/App.vue b/assets/src/App.vue
deleted file mode 100644
index ba1aa39d..00000000
--- a/assets/src/App.vue
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
-
-
-
-
-
diff --git a/assets/src/assets/fonts/material/icons.woff2 b/assets/src/assets/fonts/material/icons.woff2
deleted file mode 100644
index 05a8ab5d..00000000
Binary files a/assets/src/assets/fonts/material/icons.woff2 and /dev/null differ
diff --git a/assets/src/assets/fonts/roboto/medium-cyrillic-ext.woff2 b/assets/src/assets/fonts/roboto/medium-cyrillic-ext.woff2
deleted file mode 100644
index f63bc9a1..00000000
Binary files a/assets/src/assets/fonts/roboto/medium-cyrillic-ext.woff2 and /dev/null differ
diff --git a/assets/src/assets/fonts/roboto/medium-cyrillic.woff2 b/assets/src/assets/fonts/roboto/medium-cyrillic.woff2
deleted file mode 100644
index b3ca824d..00000000
Binary files a/assets/src/assets/fonts/roboto/medium-cyrillic.woff2 and /dev/null differ
diff --git a/assets/src/assets/fonts/roboto/medium-greek-ext.woff2 b/assets/src/assets/fonts/roboto/medium-greek-ext.woff2
deleted file mode 100644
index 7e1a8078..00000000
Binary files a/assets/src/assets/fonts/roboto/medium-greek-ext.woff2 and /dev/null differ
diff --git a/assets/src/assets/fonts/roboto/medium-greek.woff2 b/assets/src/assets/fonts/roboto/medium-greek.woff2
deleted file mode 100644
index 314cf3f8..00000000
Binary files a/assets/src/assets/fonts/roboto/medium-greek.woff2 and /dev/null differ
diff --git a/assets/src/assets/fonts/roboto/medium-latin-ext.woff2 b/assets/src/assets/fonts/roboto/medium-latin-ext.woff2
deleted file mode 100644
index 604b8935..00000000
Binary files a/assets/src/assets/fonts/roboto/medium-latin-ext.woff2 and /dev/null differ
diff --git a/assets/src/assets/fonts/roboto/medium-latin.woff2 b/assets/src/assets/fonts/roboto/medium-latin.woff2
deleted file mode 100644
index 5f96609d..00000000
Binary files a/assets/src/assets/fonts/roboto/medium-latin.woff2 and /dev/null differ
diff --git a/assets/src/assets/fonts/roboto/medium-vietnamese.woff2 b/assets/src/assets/fonts/roboto/medium-vietnamese.woff2
deleted file mode 100644
index d92b7125..00000000
Binary files a/assets/src/assets/fonts/roboto/medium-vietnamese.woff2 and /dev/null differ
diff --git a/assets/src/assets/fonts/roboto/normal-cyrillic-ext.woff2 b/assets/src/assets/fonts/roboto/normal-cyrillic-ext.woff2
deleted file mode 100644
index e4546e49..00000000
Binary files a/assets/src/assets/fonts/roboto/normal-cyrillic-ext.woff2 and /dev/null differ
diff --git a/assets/src/assets/fonts/roboto/normal-cyrillic.woff2 b/assets/src/assets/fonts/roboto/normal-cyrillic.woff2
deleted file mode 100644
index d08397f7..00000000
Binary files a/assets/src/assets/fonts/roboto/normal-cyrillic.woff2 and /dev/null differ
diff --git a/assets/src/assets/fonts/roboto/normal-greek-ext.woff2 b/assets/src/assets/fonts/roboto/normal-greek-ext.woff2
deleted file mode 100644
index ed0b13ca..00000000
Binary files a/assets/src/assets/fonts/roboto/normal-greek-ext.woff2 and /dev/null differ
diff --git a/assets/src/assets/fonts/roboto/normal-greek.woff2 b/assets/src/assets/fonts/roboto/normal-greek.woff2
deleted file mode 100644
index f630772d..00000000
Binary files a/assets/src/assets/fonts/roboto/normal-greek.woff2 and /dev/null differ
diff --git a/assets/src/assets/fonts/roboto/normal-latin-ext.woff2 b/assets/src/assets/fonts/roboto/normal-latin-ext.woff2
deleted file mode 100644
index 0c7aec28..00000000
Binary files a/assets/src/assets/fonts/roboto/normal-latin-ext.woff2 and /dev/null differ
diff --git a/assets/src/assets/fonts/roboto/normal-latin.woff2 b/assets/src/assets/fonts/roboto/normal-latin.woff2
deleted file mode 100644
index 120796bb..00000000
Binary files a/assets/src/assets/fonts/roboto/normal-latin.woff2 and /dev/null differ
diff --git a/assets/src/assets/fonts/roboto/normal-vietnamese.woff2 b/assets/src/assets/fonts/roboto/normal-vietnamese.woff2
deleted file mode 100644
index 7936b665..00000000
Binary files a/assets/src/assets/fonts/roboto/normal-vietnamese.woff2 and /dev/null differ
diff --git a/assets/src/assets/logo.svg b/assets/src/assets/logo.svg
deleted file mode 100644
index 4284f684..00000000
--- a/assets/src/assets/logo.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/assets/src/components/Header.vue b/assets/src/components/Header.vue
deleted file mode 100644
index b11f0668..00000000
--- a/assets/src/components/Header.vue
+++ /dev/null
@@ -1,220 +0,0 @@
-
-
-
-
-
diff --git a/assets/src/components/Languages.vue b/assets/src/components/Languages.vue
deleted file mode 100644
index 8d10ac28..00000000
--- a/assets/src/components/Languages.vue
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
- {{ $t('languages.en') }}
- {{ $t('languages.fr') }}
- {{ $t('languages.pt') }}
- {{ $t('languages.ja') }}
- {{ $t('languages.zhCN') }}
- {{ $t('languages.zhTW') }}
- {{ $t('languages.es') }}
-
-
-
-
diff --git a/assets/src/components/Search.vue b/assets/src/components/Search.vue
deleted file mode 100644
index 0f719588..00000000
--- a/assets/src/components/Search.vue
+++ /dev/null
@@ -1,265 +0,0 @@
-
-
-
-
- arrow_back
-
- search
-
-
-
-
-
-
- {{ text }}
-
-
-
-
{{ $t('search.types') }}
-
-
-
insert_photo
-
{{ $t('search.images') }}
-
-
-
-
volume_up
-
{{ $t('search.music') }}
-
-
-
-
movie
-
{{ $t('search.video') }}
-
-
-
-
picture_as_pdf
-
{{ $t('search.pdf') }}
-
-
-
-
-
-
-
-
-
- folder
- insert_drive_file
- ./{{ s.path }}
-
-
-
-
-
- {{ c }}
-
-
-
autorenew
-
-
-
-
-
diff --git a/assets/src/components/Sidebar.vue b/assets/src/components/Sidebar.vue
deleted file mode 100644
index d2afa191..00000000
--- a/assets/src/components/Sidebar.vue
+++ /dev/null
@@ -1,90 +0,0 @@
-
-
-
- folder
- {{ $t('sidebar.myFiles') }}
-
-
-
-
- create_new_folder
- {{ $t('sidebar.newFolder') }}
-
-
-
- note_add
- {{ $t('sidebar.newFile') }}
-
-
-
-
-
- settings
- {{ $t('sidebar.siteSettings') }}
-
-
-
-
- merge_type
- {{ $t('sidebar.hugoNew') }}
-
-
-
-
- remove_red_eye
- {{ $t('sidebar.preview') }}
-
-
-
-
-
- settings_applications
- {{ $t('sidebar.settings') }}
-
-
-
- exit_to_app
- {{ $t('sidebar.logout') }}
-
-
-
-
- File Manager v{{ version }}
- {{ $t('sidebar.help') }}
-
-
-
-
-
diff --git a/assets/src/components/buttons/Copy.vue b/assets/src/components/buttons/Copy.vue
deleted file mode 100644
index 810061bd..00000000
--- a/assets/src/components/buttons/Copy.vue
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
- content_copy
- {{ $t('buttons.copyFile') }}
-
-
-
-
diff --git a/assets/src/components/buttons/Delete.vue b/assets/src/components/buttons/Delete.vue
deleted file mode 100644
index 9879087d..00000000
--- a/assets/src/components/buttons/Delete.vue
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
- delete
- {{ $t('buttons.delete') }}
-
-
-
-
diff --git a/assets/src/components/buttons/Download.vue b/assets/src/components/buttons/Download.vue
deleted file mode 100644
index 99943094..00000000
--- a/assets/src/components/buttons/Download.vue
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
- file_download
- {{ $t('buttons.download') }}
- {{ selectedCount }}
-
-
-
-
diff --git a/assets/src/components/buttons/Info.vue b/assets/src/components/buttons/Info.vue
deleted file mode 100644
index d5a38090..00000000
--- a/assets/src/components/buttons/Info.vue
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
- info
- {{ $t('buttons.info') }}
-
-
-
-
diff --git a/assets/src/components/buttons/Move.vue b/assets/src/components/buttons/Move.vue
deleted file mode 100644
index 4b348e15..00000000
--- a/assets/src/components/buttons/Move.vue
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
- forward
- {{ $t('buttons.moveFile') }}
-
-
-
-
diff --git a/assets/src/components/buttons/Rename.vue b/assets/src/components/buttons/Rename.vue
deleted file mode 100644
index 73b61d33..00000000
--- a/assets/src/components/buttons/Rename.vue
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
- mode_edit
- {{ $t('buttons.rename') }}
-
-
-
-
diff --git a/assets/src/components/buttons/Schedule.vue b/assets/src/components/buttons/Schedule.vue
deleted file mode 100644
index 1927845d..00000000
--- a/assets/src/components/buttons/Schedule.vue
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
- alarm
- {{ $t('buttons.schedule') }}
-
-
-
-
diff --git a/assets/src/components/buttons/Share.vue b/assets/src/components/buttons/Share.vue
deleted file mode 100644
index 40c769f5..00000000
--- a/assets/src/components/buttons/Share.vue
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
- share
- {{ $t('buttons.share') }}
-
-
-
-
diff --git a/assets/src/components/buttons/SwitchView.vue b/assets/src/components/buttons/SwitchView.vue
deleted file mode 100644
index bc954caa..00000000
--- a/assets/src/components/buttons/SwitchView.vue
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
- {{ icon }}
- {{ $t('buttons.switchView') }}
-
-
-
-
diff --git a/assets/src/components/buttons/Upload.vue b/assets/src/components/buttons/Upload.vue
deleted file mode 100644
index 82e8aab9..00000000
--- a/assets/src/components/buttons/Upload.vue
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
- file_upload
- {{ $t('buttons.upload') }}
-
-
-
-
diff --git a/assets/src/components/files/Editor.vue b/assets/src/components/files/Editor.vue
deleted file mode 100644
index f0367f3a..00000000
--- a/assets/src/components/files/Editor.vue
+++ /dev/null
@@ -1,143 +0,0 @@
-
-
-
-
-
diff --git a/assets/src/components/files/Listing.vue b/assets/src/components/files/Listing.vue
deleted file mode 100644
index 93fd3179..00000000
--- a/assets/src/components/files/Listing.vue
+++ /dev/null
@@ -1,381 +0,0 @@
-
-
-
- sentiment_dissatisfied
- {{ $t('files.lonely') }}
-
-
-
-
-
-
-
-
-
{{ $t('files.folders') }}
-
- -
-
-
-
-
{{ $t('files.files') }}
-
- -
-
-
-
-
-
-
-
{{ $t('files.multipleSelectionEnabled') }}
-
- clear
-
-
-
-
-
-
diff --git a/assets/src/components/files/ListingItem.vue b/assets/src/components/files/ListingItem.vue
deleted file mode 100644
index 3217ee20..00000000
--- a/assets/src/components/files/ListingItem.vue
+++ /dev/null
@@ -1,158 +0,0 @@
-
-
-
- {{ icon }}
-
-
-
-
{{ name }}
-
-
—
-
{{ humanSize() }}
-
-
- {{ humanTime() }}
-
-
-
-
-
-
diff --git a/assets/src/components/files/Preview.vue b/assets/src/components/files/Preview.vue
deleted file mode 100644
index 78aecc9a..00000000
--- a/assets/src/components/files/Preview.vue
+++ /dev/null
@@ -1,139 +0,0 @@
-
-
-
-
- close
-
-
-
-
-
-
-
-
-
- chevron_left
-
-
- chevron_right
-
-
-
-
-
-
-
diff --git a/assets/src/components/prompts/Copy.vue b/assets/src/components/prompts/Copy.vue
deleted file mode 100644
index b1523d1c..00000000
--- a/assets/src/components/prompts/Copy.vue
+++ /dev/null
@@ -1,69 +0,0 @@
-
-
-
-
{{ $t('prompts.copy') }}
-
-
-
-
{{ $t('prompts.copyMessage') }}
-
dest = val">
-
-
-
- {{ $t('buttons.cancel') }}
- {{ $t('buttons.copy') }}
-
-
-
-
-
diff --git a/assets/src/components/prompts/Delete.vue b/assets/src/components/prompts/Delete.vue
deleted file mode 100644
index 10d1fe80..00000000
--- a/assets/src/components/prompts/Delete.vue
+++ /dev/null
@@ -1,80 +0,0 @@
-
-
-
-
{{ $t('prompts.deleteMessageSingle') }}
-
{{ $t('prompts.deleteMessageMultiple', { count: selectedCount}) }}
-
-
- {{ $t('buttons.cancel') }}
- {{ $t('buttons.delete') }}
-
-
-
-
-
diff --git a/assets/src/components/prompts/Download.vue b/assets/src/components/prompts/Download.vue
deleted file mode 100644
index 6eb743b1..00000000
--- a/assets/src/components/prompts/Download.vue
+++ /dev/null
@@ -1,47 +0,0 @@
-
-
-
-
{{ $t('prompts.download') }}
-
-
-
-
{{ $t('prompts.downloadMessage') }}
-
-
zip
-
tar
-
tar.gz
-
tar.bz2
-
tar.xz
-
-
-
-
-
diff --git a/assets/src/components/prompts/FileList.vue b/assets/src/components/prompts/FileList.vue
deleted file mode 100644
index 15e9c538..00000000
--- a/assets/src/components/prompts/FileList.vue
+++ /dev/null
@@ -1,140 +0,0 @@
-
-
-
-
-
{{ $t('prompts.currentlyNavigating') }} {{ nav }}
.
-
-
-
-
diff --git a/assets/src/components/prompts/Help.vue b/assets/src/components/prompts/Help.vue
deleted file mode 100644
index 95f983b8..00000000
--- a/assets/src/components/prompts/Help.vue
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
-
{{ $t('help.help') }}
-
-
-
-
- F1 - {{ $t('help.f1') }}
- F2 - {{ $t('help.f2') }}
- DEL - {{ $t('help.del') }}
- ESC - {{ $t('help.esc') }}
- CTRL + S - {{ $t('help.ctrl.s') }}
- CTRL + F - {{ $t('help.ctrl.f') }}
- CTRL + Click - {{ $t('help.ctrl.click') }}
- Click - {{ $t('help.click') }}
- Double click - {{ $t('help.doubleClick') }}
-
-
-
-
- {{ $t('buttons.ok') }}
-
-
-
-
-
-
diff --git a/assets/src/components/prompts/Info.vue b/assets/src/components/prompts/Info.vue
deleted file mode 100644
index f26450a6..00000000
--- a/assets/src/components/prompts/Info.vue
+++ /dev/null
@@ -1,122 +0,0 @@
-
-
-
-
{{ $t('prompts.fileInfo') }}
-
-
-
-
{{ $t('prompts.filesSelected', { count: selected.length }) }}
-
-
{{ $t('prompts.displayName') }} {{ name() }}
-
{{ $t('prompts.size') }}: {{ humanSize() }}
-
{{ $t('prompts.lastModified') }}: {{ humanTime() }}
-
-
- {{ $t('prompts.numberFiles') }}: {{ req.numFiles }}
- {{ $t('prompts.numberDirs') }}: {{ req.numDirs }}
-
-
-
- MD5: {{ $t('prompts.show') }}
- SHA1: {{ $t('prompts.show') }}
- SHA256: {{ $t('prompts.show') }}
- SHA512: {{ $t('prompts.show') }}
-
-
-
-
- {{ $t('buttons.ok') }}
-
-
-
-
-
diff --git a/assets/src/components/prompts/Move.vue b/assets/src/components/prompts/Move.vue
deleted file mode 100644
index 8df25dd8..00000000
--- a/assets/src/components/prompts/Move.vue
+++ /dev/null
@@ -1,70 +0,0 @@
-
-
-
-
{{ $t('prompts.move') }}
-
-
-
- dest = val">
-
-
-
- {{ $t('buttons.cancel') }}
- {{ $t('buttons.move') }}
-
-
-
-
-
diff --git a/assets/src/components/prompts/NewArchetype.vue b/assets/src/components/prompts/NewArchetype.vue
deleted file mode 100644
index 6ec99fb4..00000000
--- a/assets/src/components/prompts/NewArchetype.vue
+++ /dev/null
@@ -1,76 +0,0 @@
-
-
-
-
{{ $t('prompts.newFile') }}
-
-
-
-
-
- {{ $t('buttons.cancel') }}
- {{ $t('buttons.create') }}
-
-
-
-
-
-
diff --git a/assets/src/components/prompts/NewDir.vue b/assets/src/components/prompts/NewDir.vue
deleted file mode 100644
index 7730ad22..00000000
--- a/assets/src/components/prompts/NewDir.vue
+++ /dev/null
@@ -1,60 +0,0 @@
-
-
-
-
{{ $t('prompts.newDir') }}
-
-
-
-
{{ $t('prompts.newDirMessage') }}
-
-
-
-
- {{ $t('buttons.cancel') }}
- {{ $t('buttons.create') }}
-
-
-
-
-
-
diff --git a/assets/src/components/prompts/NewFile.vue b/assets/src/components/prompts/NewFile.vue
deleted file mode 100644
index c7729b9c..00000000
--- a/assets/src/components/prompts/NewFile.vue
+++ /dev/null
@@ -1,61 +0,0 @@
-
-
-
-
{{ $t('prompts.newFile') }}
-
-
-
-
{{ $t('prompts.newFileMessage') }}
-
-
-
-
- {{ $t('buttons.cancel') }}
- {{ $t('buttons.create') }}
-
-
-
-
-
-
diff --git a/assets/src/components/prompts/Prompts.vue b/assets/src/components/prompts/Prompts.vue
deleted file mode 100644
index 84bc4e12..00000000
--- a/assets/src/components/prompts/Prompts.vue
+++ /dev/null
@@ -1,87 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/assets/src/components/prompts/Rename.vue b/assets/src/components/prompts/Rename.vue
deleted file mode 100644
index c5af3afc..00000000
--- a/assets/src/components/prompts/Rename.vue
+++ /dev/null
@@ -1,84 +0,0 @@
-
-
-
-
{{ $t('prompts.rename') }}
-
-
-
-
{{ $t('prompts.renameMessage') }} {{ oldName() }}
:
-
-
-
-
- {{ $t('buttons.cancel') }}
- {{ $t('buttons.rename') }}
-
-
-
-
-
diff --git a/assets/src/components/prompts/Replace.vue b/assets/src/components/prompts/Replace.vue
deleted file mode 100644
index a310e9f4..00000000
--- a/assets/src/components/prompts/Replace.vue
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
-
{{ $t('prompts.replace') }}
-
-
-
-
{{ $t('prompts.replaceMessage') }}
-
-
-
- {{ $t('buttons.cancel') }}
- {{ $t('buttons.replace') }}
-
-
-
-
-
diff --git a/assets/src/components/prompts/Schedule.vue b/assets/src/components/prompts/Schedule.vue
deleted file mode 100644
index fbb5b772..00000000
--- a/assets/src/components/prompts/Schedule.vue
+++ /dev/null
@@ -1,47 +0,0 @@
-
-
-
-
{{ $t('prompts.schedule') }}
-
-
-
-
{{ $t('prompts.scheduleMessage') }}
-
-
-
-
- {{ $t('buttons.cancel') }}
- {{ $t('buttons.schedule') }}
-
-
-
-
-
-
diff --git a/assets/src/components/prompts/Share.vue b/assets/src/components/prompts/Share.vue
deleted file mode 100644
index 5408af6a..00000000
--- a/assets/src/components/prompts/Share.vue
+++ /dev/null
@@ -1,162 +0,0 @@
-
-
-
-
{{ $t('buttons.share') }}
-
-
-
-
-
- {{ $t('buttons.close') }}
-
-
-
-
-
-
diff --git a/assets/src/css/base.css b/assets/src/css/base.css
deleted file mode 100644
index c6eeaa79..00000000
--- a/assets/src/css/base.css
+++ /dev/null
@@ -1,214 +0,0 @@
-body {
- font-family: 'Roboto', sans-serif;
- padding-top: 4em;
- background-color: #fafafa;
- color: #333333;
-}
-
-* {
- box-sizing: border-box;
-}
-
-*,
-*:hover,
-*:active,
-*:focus {
- outline: 0
-}
-
-a {
- text-decoration: none;
-}
-
-img {
- max-width: 100%;
-}
-
-audio,
-video {
- width: 100%;
-}
-
-pre {
- padding: 1em;
- border: 1px solid #e6e6e6;
- border-radius: 0.5em;
- background-color: #f5f5f5;
- white-space: pre-wrap;
- white-space: -moz-pre-wrap;
- white-space: -pre-wrap;
- white-space: -o-pre-wrap;
- word-wrap: break-word;
-}
-
-input,
-button {
- outline: 0 !important;
-}
-
-input[type="submit"],
-button {
- border: 0;
- padding: .5em 1em;
- margin-left: .5em;
- border-radius: .1em;
- cursor: pointer;
- background: #2196f3;
- color: #fff;
- border: 1px solid rgba(0, 0, 0, 0.05);
- box-shadow: 0 0 5px rgba(0, 0, 0, 0.05);
- transition: .1s ease all;
-}
-
-input[type="submit"]:hover,
-button:hover {
- background-color: #1E88E5;
-}
-
-input[type="submit"].block,
-button.block {
- display: block;
- width: 100%;
- margin: 0 0 1em;
-}
-
-button.delete {
- background: #F44336;
-}
-
-button.delete:hover {
- background: #D32F2F;
-}
-
-button.cancel {
- background-color: #ECEFF1;
- color: #37474F;
-}
-
-button.cancel:hover {
- background-color: #e9eaeb;
-}
-
-button.flat,
-input[type="submit"].flat {
- color: #1E88E5;
- background: transparent;
- box-shadow: 0 0 0;
- border: 0;
- margin-left: 0;
- text-transform: uppercase;
-}
-
-button.flat:hover,
-input[type="submit"].flat:hover {
- background: rgba(0,0,0,0.05)
-}
-
-button.flat.delete {
- color: #F44336;
-}
-
-button.flat.cancel {
- color: #ccc;
-}
-
-button.flat[disabled] {
- color: #ccc;
- cursor: not-allowed;
-}
-
-.mobile-only {
- display: none !important;
-}
-
-.container {
- width: 95%;
- max-width: 960px;
- margin: 1em auto 0;
-}
-
-i.spin {
- animation: 1s spin linear infinite;
-}
-
-#app {
- transition: .2s ease padding;
-}
-
-#app.multiple {
- padding-bottom: 4em;
-}
-
-nav {
- width: 16em;
- position: fixed;
- top: 4em;
- left: 0;
-}
-
-nav .action {
- width: 100%;
- display: block;
- border-radius: 0;
- font-size: 1.1em;
- padding: .5em;
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-
-nav>div {
- border-top: 1px solid rgba(0, 0, 0, 0.05);
-}
-
-nav .action>* {
- vertical-align: middle;
-}
-
-main {
- min-height: 1em;
- margin: 0 1em 1em auto;
- width: calc(100% - 19em);
-}
-
-#breadcrumbs {
- height: 3em;
- border-bottom: 1px solid rgba(0, 0, 0, 0.05);
-}
-
-#breadcrumbs span,
-#breadcrumbs {
- display: flex;
- align-items: center;
- color: #6f6f6f;
-}
-
-#breadcrumbs a {
- color: inherit;
- transition: .1s ease-in;
- border-radius: .125em;
-}
-
-#breadcrumbs a:hover {
- background-color: rgba(0,0,0, 0.05);
-}
-
-#breadcrumbs span a {
- padding: .2em;
-}
-
-#progress {
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- height: 3px;
- z-index: 9999999999;
-}
-
-#progress div {
- height: 100%;
- background-color: #40c4ff;
- width: 0;
- transition: .2s ease width;
-}
diff --git a/assets/src/css/dashboard.css b/assets/src/css/dashboard.css
deleted file mode 100644
index dbb22548..00000000
--- a/assets/src/css/dashboard.css
+++ /dev/null
@@ -1,420 +0,0 @@
-.dashboard {
- max-width: 600px;
- margin: 1em 0;
-}
-
-a {
- color: inherit
-}
-
-select,
-textarea,
-input[type="text"],
-input[type="password"] {
- padding: 0.5em 0;
- line-height: 1;
- display: block;
- border: 0;
- border-bottom: 1px solid #dddddd;
- transition: .2s ease border;
- width: 100%;
- background: transparent;
-}
-
-textarea {
- line-height: 1.15;
- padding: .5em;
- border: 1px solid #ddd;
- font-family: monospace;
- min-height: 10em;
- resize: none;
- border-radius: 2px;
-}
-
-.dashboard #locale,
-.dashboard #username,
-.dashboard #password,
-.dashboard #scope {
- max-width: 18em;
-}
-
-.dashboard #locale {
- margin-top: .5em;
-}
-
-textarea:focus,
-textarea:hover,
-input[type="text"]:focus,
-input[type="password"]:focus,
-input[type="text"]:hover,
-input[type="password"]:hover {
- border-color: #2979ff;
-}
-
-input.red {
- border-color: red;
-}
-
-input.green {
- border-color: green;
-}
-
-.dashboard p label {
- margin-bottom: .2em;
- display: block;
- font-size: .8em;
- font-weight: 500;
- color: rgba(0, 0, 0, 0.57);
-}
-
-li code,
-p code {
- background: rgba(0, 0, 0, 0.05);
- padding: .1em;
- border-radius: .2em;
-}
-
-.small {
- font-size: .8em;
- line-height: 1.5;
-}
-
-.dashboard #nav {
- list-style: none;
- display: flex;
- color: rgb(84, 110, 122);
- font-weight: 500;
- margin: 0 0 1em;
- font-size: .8em;
- text-align: center;
- justify-content: space-between;
- padding: 0;
-}
-
-.dashboard #nav li {
- width: 100%;
- padding: 0 0 1em;
- border-bottom: 2px solid rgba(0, 0, 0, 0.05);
-}
-
-.dashboard #nav li.active {
- border-color: #2196f3
-}
-
-.dashboard #nav i {
- font-size: 1em;
- vertical-align: middle;
-}
-
-table {
- border-collapse: collapse;
- width: 100%;
-}
-
-table tr {
- border-bottom: 1px solid #ccc;
-}
-
-table tr:last-child {
- border: 0;
-}
-
-table th {
- font-weight: 500;
- color: #757575;
- text-align: left;
-}
-
-table th,
-table td {
- padding: .5em 0;
-}
-
-table td.small {
- width: 1em;
-}
-
-table tr>*:first-child {
- padding-left: 1em;
-}
-
-table tr>*:last-child {
- padding-right: 1em;
-}
-
-.card {
- position: relative;
- margin: .5rem 0 1rem 0;
- background-color: #fff;
- border-radius: 2px;
- box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2);
-}
-
-.card.floating {
- position: fixed;
- top: 50%;
- left: 50%;
- transform: translate(-50%, -50%);
- z-index: 99999;
- max-width: 25em;
- width: 90%;
- max-height: 95%;
- z-index: 99999;
- animation: .1s show forwards;
-}
-
-.card>*>*:first-child {
- margin-top: 0;
-}
-
-.card>*>*:last-child {
- margin-bottom: 0;
-}
-
-.card .card-title {
- padding: 1.5em 1em 1em;
- display: flex;
-}
-
-.card .card-title>*:first-child {
- margin-right: auto;
-}
-
-.card>div {
- padding: 1em 1em;
-}
-
-.card>div:first-child {
- padding-top: 1.5em;
-}
-
-.card>div:last-child {
- padding-bottom: 1.5em;
-}
-
-.card .card-title * {
- margin: 0;
-}
-
-.card .card-action {
- text-align: right;
-}
-
-.card .card-content.full {
- padding-bottom: 0;
-}
-
-.card h2 {
- font-weight: 500;
-}
-
-.card h3 {
- color: rgba(0, 0, 0, 0.53);
- font-size: 1em;
- font-weight: 500;
- margin: 2em 0 1em;
-}
-
-.card-content table {
- margin: 0 -1em;
- width: calc(100% + 2em);
-}
-
-.card code {
- word-wrap: break-word;
-}
-
-.card#download {
- max-width: 15em;
-}
-
-.card#share ul {
- list-style: none;
- padding: 0;
- margin: 0;
-}
-
-.card#share ul li {
- display: flex;
- justify-content: space-between;
- align-items: center;
-}
-
-.card#share ul li a {
- color: #2196F3;
- cursor: pointer;
- margin-right: auto;
-}
-
-.card#share ul li .action i {
- font-size: 1em;
-}
-
-.card#share ul li input,
-.card#share ul li select {
- padding: .2em;
- margin-right: .5em;
- border: 1px solid #dadada;
-}
-
-.card#share .action.copy-clipboard::after {
- content: 'Copied!';
- position: absolute;
- left: -25%;
- width: 150%;
- font-size: .6em;
- text-align: center;
- background: #44a6f5;
- color: #fff;
- padding: .5em .2em;
- border-radius: .4em;
- top: -2em;
- transition: .1s ease opacity;
- opacity: 0;
-}
-
-.card#share .action.copy-clipboard.active::after {
- opacity: 1;
-}
-
-.overlay {
- background-color: rgba(0, 0, 0, 0.5);
- position: fixed;
- top: 0;
- left: 0;
- height: 100%;
- width: 100%;
- z-index: 9999;
- animation: .1s show forwards;
-}
-
-
-/* * * * * * * * * * * * * * * *
- * PROMPT - MOVE *
- * * * * * * * * * * * * * * * */
-
-.file-list {
- max-height: 50vh;
- overflow: auto;
- list-style: none;
- margin: 0;
- padding: 0;
- width: 100%;
-}
-
-.file-list li {
- width: 100%;
- user-select: none;
- border-radius: .2em;
- padding: .3em;
-}
-
-.file-list li[aria-selected=true] {
- background: #2196f3 !important;
- color: #fff !important;
- transition: .1s ease all;
-}
-
-.file-list li:hover {
- background-color: #e9eaeb;
- cursor: pointer;
-}
-
-.file-list li:before {
- content: "folder";
- color: #6f6f6f;
- vertical-align: middle;
- line-height: 1.4;
- font-family: 'Material Icons';
- font-size: 1.75em;
- margin-right: .25em;
-}
-
-.file-list li[aria-selected=true]:before {
- color: white;
-}
-
-.help {
- max-width: 24em;
-}
-
-.help ul {
- padding: 0;
- margin: 1em 0;
- list-style: none;
-}
-
-@keyframes show {
- 0% {
- display: none;
- opacity: 0;
- }
- 1% {
- display: block;
- opacity: 0;
- }
- 100% {
- display: block;
- opacity: 1;
- }
-}
-
-.collapsible {
- border-top: 1px solid rgba(0,0,0,0.1);
-}
-
-.collapsible:last-of-type {
- border-bottom: 1px solid rgba(0,0,0,0.1);
-}
-
-.collapsible > input {
- display: none;
-}
-
-.collapsible > label {
- padding: 1em 0;
- cursor: pointer;
- border-right: 0;
- border-left: 0;
- display: flex;
- justify-content: space-between;
-}
-
-.collapsible > label * {
- margin: 0;
- color: rgba(0,0,0,0.57);
-}
-
-.collapsible > label i {
- transition: .2s ease transform;
- user-select: none;
-}
-
-.collapsible .collapse {
- max-height: 0;
- overflow: hidden;
- transition: .2s ease all;
-}
-
-.collapsible > input:checked ~ .collapse {
- padding-top: 1em;
- padding-bottom: 1em;
- max-height: 20em;
-}
-
-.collapsible > input:checked ~ label i {
- transform: rotate(180deg)
-}
-
-.card .collapsible {
- width: calc(100% + 2em);
- margin: 0 -1em;
-}
-
-.card .collapsible > label {
- padding: 1em;
-}
-
-.card .collapsible .collapse {
- padding: 0 1em;
-}
diff --git a/assets/src/css/editor.css b/assets/src/css/editor.css
deleted file mode 100644
index d96db5aa..00000000
--- a/assets/src/css/editor.css
+++ /dev/null
@@ -1,184 +0,0 @@
-@import "~codemirror/lib/codemirror.css";
-@import "~codemirror/theme/ttcn.css";
-#editor {
- max-width: 800px;
- margin: 0 auto;
-}
-
-#editor .CodeMirror {
- box-shadow: rgba(0, 0, 0, 0.06) 0px 1px 3px, rgba(0, 0, 0, 0.12) 0px 1px 2px;
- margin: 2em 0;
- border-radius: .5em;
-}
-
-#editor h2 {
- color: rgba(0, 0, 0, 0.3);
- font-weight: 500;
-}
-
-.CodeMirror {
- height: auto;
-}
-
-.markdown .CodeMirror {
- padding: .75em;
-}
-
-.cm-s-markdown .CodeMirror-gutter {
- border-right: 1px solid #eff3f5;
- padding-right: 5px;
- margin-right: 15px;
- min-width: 2.5em;
- padding-bottom: 30px;
-}
-
-.cm-s-markdown .CodeMirror-cursor {
- border-right: 2px solid #667880;
-}
-
-.cm-s-markdown .CodeMirror-lines {
- margin: 0;
-}
-
-.cm-s-markdown {
- color: #3D494E;
-}
-
-.cm-s-markdown span.cm-header {
- color: #3D494E;
- font-weight: bold;
-}
-
-.cm-s-markdown span.cm-variable-2 {
- color: #3D494E;
-}
-
-.cm-s-markdown span.cm-meta {
- color: #516066;
-}
-
-.cm-s-markdown span.cm-hr {
- color: #516066;
-}
-
-.cm-s-markdown span.cm-comment {
- color: #868f93;
-}
-
-.cm-s-markdown span.cm-qualifier {
- color: #868f93;
-}
-
-.cm-s-markdown span.cm-number {
- color: #197987;
-}
-
-.cm-s-markdown span.cm-variable {
- color: #197987;
-}
-
-.cm-s-markdown span.cm-builtin {
- color: #197987;
-}
-
-.cm-s-markdown span.cm-link {
- color: #197987;
- text-decoration: underline;
-}
-
-.cm-s-markdown span.cm-tag {
- color: #197987;
-}
-
-.cm-s-markdown span.cm-string {
- color: #48abb9;
-}
-
-.cm-s-markdown span.cm-string-2 {
- color: #48abb9;
-}
-
-.cm-s-markdown span.cm-quote {
- color: #48abb9;
-}
-
-.cm-s-markdown span.cm-atom {
- color: #48abb9;
-}
-
-.cm-s-markdown span.cm-property {
- color: #82a367;
-}
-
-.cm-s-markdown span.cm-operator {
- color: #82a367;
-}
-
-.cm-s-markdown span.cm-variable-3 {
- color: #82a367;
-}
-
-.cm-s-markdown span.cm-attribute {
- color: #90bb74;
-}
-
-.cm-s-markdown span.cm-def {
- color: #90bb74;
-}
-
-.cm-s-markdown span.cm-keyword {
- color: #ec6c45;
-}
-
-.cm-s-markdown span.cm-bracket {
- color: #ec6c45;
-}
-
-.cm-s-markdown span.cm-error {
- color: #e45346;
-}
-
-.cm-s-markdown span.cm-em {
- font-style: italic;
-}
-
-.cm-s-markdown span.cm-strong {
- font-weight: bold;
-}
-
-.cm-s-markdown .cm-header-1 {
- font-size: 200%;
- line-height: 200%;
-}
-
-.cm-s-markdown .cm-header-2 {
- font-size: 160%;
- line-height: 160%;
-}
-
-.cm-s-markdown .cm-header-3 {
- font-size: 125%;
- line-height: 125%;
-}
-
-.cm-s-markdown .cm-header-4 {
- font-size: 110%;
- line-height: 110%;
-}
-
-.cm-s-markdown .cm-comment {
- background: rgba(0, 0, 0, .05);
- border-radius: 2px;
-}
-
-.cm-s-markdown .cm-link {
- color: #7f8c8d;
-}
-
-.cm-s-markdown .cm-url {
- color: #aab2b3;
-}
-
-.cm-s-markdown .cm-strikethrough {
- text-decoration: line-through;
-}
diff --git a/assets/src/css/fonts.css b/assets/src/css/fonts.css
deleted file mode 100644
index f0400c31..00000000
--- a/assets/src/css/fonts.css
+++ /dev/null
@@ -1,137 +0,0 @@
-@font-face {
- font-family: 'Roboto';
- font-style: normal;
- font-weight: 400;
- src: local('Roboto'), local('Roboto-Regular'), url(../assets/fonts/roboto/normal-cyrillic-ext.woff2) format('woff2');
- unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F;
-}
-
-@font-face {
- font-family: 'Roboto';
- font-style: normal;
- font-weight: 400;
- src: local('Roboto'), local('Roboto-Regular'), url(../assets/fonts/roboto/normal-cyrillic.woff2) format('woff2');
- unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
-}
-
-@font-face {
- font-family: 'Roboto';
- font-style: normal;
- font-weight: 400;
- src: local('Roboto'), local('Roboto-Regular'), url(../assets/fonts/roboto/normal-greek-ext.woff2) format('woff2');
- unicode-range: U+1F00-1FFF;
-}
-
-@font-face {
- font-family: 'Roboto';
- font-style: normal;
- font-weight: 400;
- src: local('Roboto'), local('Roboto-Regular'), url(../assets/fonts/roboto/normal-greek.woff2) format('woff2');
- unicode-range: U+0370-03FF;
-}
-
-@font-face {
- font-family: 'Roboto';
- font-style: normal;
- font-weight: 400;
- src: local('Roboto'), local('Roboto-Regular'), url(../assets/fonts/roboto/normal-vietnamese.woff2) format('woff2');
- unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB;
-}
-
-@font-face {
- font-family: 'Roboto';
- font-style: normal;
- font-weight: 400;
- src: local('Roboto'), local('Roboto-Regular'), url(../assets/fonts/roboto/normal-latin-ext.woff2) format('woff2');
- unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
-}
-
-@font-face {
- font-family: 'Roboto';
- font-style: normal;
- font-weight: 400;
- src: local('Roboto'), local('Roboto-Regular'), url(../assets/fonts/roboto/normal-latin.woff2) format('woff2');
- unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
-}
-
-@font-face {
- font-family: 'Roboto';
- font-style: normal;
- font-weight: 500;
- src: local('Roboto Medium'), local('Roboto-Medium'), url(../assets/fonts/roboto/medium-cyrillic-ext.woff2) format('woff2');
- unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F;
-}
-
-@font-face {
- font-family: 'Roboto';
- font-style: normal;
- font-weight: 500;
- src: local('Roboto Medium'), local('Roboto-Medium'), url(../assets/fonts/roboto/medium-cyrillic.woff2) format('woff2');
- unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
-}
-
-@font-face {
- font-family: 'Roboto';
- font-style: normal;
- font-weight: 500;
- src: local('Roboto Medium'), local('Roboto-Medium'), url(../assets/fonts/roboto/medium-greek-ext.woff2) format('woff2');
- unicode-range: U+1F00-1FFF;
-}
-
-@font-face {
- font-family: 'Roboto';
- font-style: normal;
- font-weight: 500;
- src: local('Roboto Medium'), local('Roboto-Medium'), url(../assets/fonts/roboto/medium-greek.woff2) format('woff2');
- unicode-range: U+0370-03FF;
-}
-
-@font-face {
- font-family: 'Roboto';
- font-style: normal;
- font-weight: 500;
- src: local('Roboto Medium'), local('Roboto-Medium'), url(../assets/fonts/roboto/medium-vietnamese.woff2) format('woff2');
- unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB;
-}
-
-@font-face {
- font-family: 'Roboto';
- font-style: normal;
- font-weight: 500;
- src: local('Roboto Medium'), local('Roboto-Medium'), url(../assets/fonts/roboto/medium-latin-ext.woff2) format('woff2');
- unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
-}
-
-@font-face {
- font-family: 'Roboto';
- font-style: normal;
- font-weight: 500;
- src: local('Roboto Medium'), local('Roboto-Medium'), url(../assets/fonts/roboto/medium-latin.woff2) format('woff2');
- unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
-}
-
-@font-face {
- font-family: 'Material Icons';
- font-style: normal;
- font-weight: 400;
- src: local('Material Icons'), local('MaterialIcons-Regular'), url(../assets/fonts/material/icons.woff2) format('woff2');
-}
-
-.prompt .file-list ul li:before,
-.material-icons {
- font-family: 'Material Icons';
- font-weight: normal;
- font-style: normal;
- font-size: 24px;
- line-height: 1;
- letter-spacing: normal;
- text-transform: none;
- display: inline-block;
- white-space: nowrap;
- word-wrap: normal;
- direction: ltr;
- -webkit-font-smoothing: antialiased;
- text-rendering: optimizeLegibility;
- -moz-osx-font-smoothing: grayscale;
- font-feature-settings: 'liga';
-}
diff --git a/assets/src/css/header.css b/assets/src/css/header.css
deleted file mode 100644
index 7d559daf..00000000
--- a/assets/src/css/header.css
+++ /dev/null
@@ -1,260 +0,0 @@
-header {
- z-index: 1000;
- background-color: #fff;
- border-bottom: 1px solid rgba(0, 0, 0, 0.075);
- box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- padding: 0;
- display: flex;
-}
-
-header .overlay {
- width: 0;
- height: 0;
-}
-
-header a,
-header a:hover {
- color: inherit;
-}
-
-header>div:first-child>.action,
-header img {
- margin-right: 1em;
-}
-
-header img {
- height: 2.5em;
-}
-
-header>div:first-child>.action {
- display: none;
-}
-
-header>div {
- display: flex;
- width: 100%;
- padding: 0.5em 0.5em 0.5em 1em;
- align-items: center;
-}
-
-header .action span {
- display: none;
-}
-
-header>div div {
- vertical-align: middle;
- position: relative;
-}
-
-header>div:last-child div {
- display: flex;
-}
-
-header>div:first-child {
- height: 4em;
-}
-
-header>div:last-child {
- justify-content: flex-end;
-}
-
-header .search-button {
- display: none;
-}
-
-#more {
- display: none;
-}
-
-#search {
- position: relative;
- height: 100%;
- width: 100%;
- max-width: 25em;
-}
-
-#search.active {
- position: fixed;
- top: 0;
- right: 0;
- width: 100%;
- max-width: 100%;
- height: 100%;
- z-index: 9999;
-}
-
-#search #input {
- background-color: #f5f5f5;
- display: flex;
- padding: 0.75em;
- border-radius: 0.3em;
- transition: .1s ease all;
- align-items: center;
- z-index: 2;
-}
-
-#search.active #input {
- border-bottom: 1px solid rgba(0, 0, 0, 0.075);
- box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
- background-color: #fff;
- height: 4em;
-}
-
-#search.active>div {
- border-radius: 0 !important;
-}
-
-#search.active i,
-#search.active input {
- color: #212121;
-}
-
-#search #input>.action,
-#search #input>i {
- margin-right: 0.3em;
- user-select: none;
-}
-
-#search input {
- width: 100%;
- border: 0;
- background-color: transparent;
- line-height: 0;
- padding: 0;
-}
-
-#search #result {
- visibility: visible;
- max-height: none;
- background-color: #f8f8f8;
- text-align: left;
- padding: 0;
- color: rgba(0, 0, 0, 0.6);
- height: 0;
- transition: .1s ease height, .1s ease padding;
- overflow-x: hidden;
- overflow-y: auto;
- z-index: 1;
-}
-
-#search #result>div>*:first-child {
- margin-top: 0;
-}
-
-#search.active #result {
- padding: .5em;
- height: calc(100% - 4em);
-}
-
-#search ul {
- padding: 0;
- margin: 0;
- list-style: none;
-}
-
-#search li {
- margin-bottom: .5em;
-}
-
-#search #result>div {
- max-width: 45em;
- margin: 0 auto;
-}
-
-#search #result #renew {
- width: 100%;
- text-align: center;
- display: none;
- margin: 0;
- max-width: none;
-}
-
-#search.ongoing #result #renew {
- display: block;
-}
-
-#search.active #result i {
- color: #ccc;
-}
-
-#search.active #result>p>i {
- text-align: center;
- margin: 0 auto;
- display: table;
-}
-
-#search.active #result ul li a {
- display: flex;
- align-items: center;
- padding: .3em 0;
-}
-
-#search.active #result ul li a i {
- margin-right: .3em;
-}
-
-#search::-webkit-input-placeholder {
- color: rgba(255, 255, 255, .5);
-}
-
-#search:-moz-placeholder {
- opacity: 1;
- color: rgba(255, 255, 255, .5);
-}
-
-#search::-moz-placeholder {
- opacity: 1;
- color: rgba(255, 255, 255, .5);
-}
-
-#search:-ms-input-placeholder {
- color: rgba(255, 255, 255, .5);
-}
-
-#search .boxes {
- border: 1px solid rgba(0, 0, 0, 0.075);
- box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
- background: #fff;
- margin: 1em 0;
-}
-
-#search .boxes h3 {
- margin: 0;
- font-weight: 500;
- font-size: 1em;
- color: #212121;
- padding: .5em;
-}
-
-#search .boxes>div {
- display: flex;
- flex-wrap: wrap;
- justify-content: space-between;
- margin-right: -1em;
- margin-bottom: -1em;
-}
-
-#search .boxes>div>div {
- background: #2196F3;
- color: #fff;
- text-align: center;
- width: 10em;
- padding: 1em;
- cursor: pointer;
- margin-bottom: 1em;
- margin-right: 1em;
- flex-grow: 1;
-}
-
-#search .boxes p {
- margin: 1em 0 0;
-}
-
-#search .boxes i {
- color: #fff !important;
- font-size: 3.5em;
-}
diff --git a/assets/src/css/listing.css b/assets/src/css/listing.css
deleted file mode 100644
index 02bd8d9c..00000000
--- a/assets/src/css/listing.css
+++ /dev/null
@@ -1,237 +0,0 @@
-#listing h2 {
- margin: 0 0 0 0.5em;
- font-size: .9em;
- color: rgba(0, 0, 0, 0.38);
- font-weight: 500;
-}
-
-#listing .item div:last-of-type * {
- text-overflow: ellipsis;
- overflow: hidden;
-}
-
-#listing>div {
- display: flex;
- padding: 0;
- flex-wrap: wrap;
- justify-content: flex-start;
- position: relative;
-}
-
-#listing .item {
- background-color: #fff;
- position: relative;
- display: flex;
- flex-wrap: nowrap;
- color: #6f6f6f;
- transition: .1s ease background, .1s ease opacity;
- align-items: center;
- cursor: pointer;
-}
-
-#listing .item div:last-of-type {
- text-overflow: ellipsis;
- white-space: nowrap;
- overflow: hidden;
-}
-
-#listing .item p {
- margin: 0;
-}
-
-#listing .item .size,
-#listing .item .modified {
- font-size: 0.9em;
-}
-
-#listing .item .name {
- font-weight: bold;
-}
-
-#listing .item i {
- font-size: 4em;
- margin-right: 0.1em;
- vertical-align: bottom;
-}
-
-.message {
- text-align: center;
- font-size: 2em;
- margin: 1em auto;
- display: block !important;
- width: 95%;
- color: rgba(0, 0, 0, 0.3);
- font-weight: 500;
-}
-
-.message i {
- font-size: 2.5em;
- margin-bottom: .2em;
- display: block;
-}
-
-#listing.mosaic {
- padding-top: 1em;
- margin: 0 -0.5em;
-}
-
-#listing.mosaic .item {
- width: calc(33% - 1em);
- margin: .5em;
- padding: 0.5em;
- border-radius: 0.2em;
- box-shadow: 0 1px 3px rgba(0, 0, 0, .06), 0 1px 2px rgba(0, 0, 0, .12);
-}
-
-#listing.mosaic .item:hover {
- box-shadow: 0 1px 3px rgba(0, 0, 0, .12), 0 1px 2px rgba(0, 0, 0, .24) !important;
-}
-
-#listing.mosaic .header {
- display: none;
-}
-
-#listing.mosaic .item div:first-of-type {
- width: 5em;
-}
-
-#listing.mosaic .item div:last-of-type {
- width: calc(100% - 5vw);
-}
-
-#listing.list {
- flex-direction: column;
- padding-top: 3.25em;
- width: 100%;
- max-width: 100%;
- margin: 0;
-}
-
-#listing.list .item {
- width: 100%;
- margin: 0;
- border: 1px solid rgba(0, 0, 0, 0.1);
- padding: 1em;
- border-top: 0;
-}
-
-#listing.list h2 {
- display: none;
-}
-
-#listing .item[aria-selected=true] {
- background: #2196f3 !important;
- color: #fff !important;
-}
-
-#listing.list .item div:first-of-type {
- width: 3em;
-}
-
-#listing.list .item div:first-of-type i {
- font-size: 2em;
-}
-
-#listing.list .item div:last-of-type {
- width: calc(100% - 3em);
- display: flex;
- align-items: center;
-}
-
-#listing.list .item .name {
- width: 50%;
-}
-
-#listing.list .item .size {
- width: 25%;
-}
-
-#listing .item.header {
- display: none !important;
- background-color: #ccc;
-}
-
-#listing.list .header i {
- font-size: 1.5em;
- vertical-align: middle;
- margin-left: .2em;
-}
-
-#listing.list .item.header {
- display: flex !important;
- background: #fafafa;
- position: fixed;
- width: calc(100% - 19em);
- top: 7em;
- right: 1em;
- z-index: 999;
- padding: .85em;
- border: 0;
- border-bottom: 1px solid rgba(0, 0, 0, 0.1);
-}
-
-#listing.list .item.header>div:first-child {
- width: 0;
-}
-
-#listing.list .item.header .name {
- margin-right: 3em;
-}
-
-#listing.list .header a {
- color: inherit;
-}
-
-#listing.list .item.header>div:first-child {
- width: 0;
-}
-
-#listing.list .name {
- font-weight: normal;
-}
-
-#listing.list .item.header .name {
- margin-right: 3em;
-}
-
-#listing.list .header span {
- vertical-align: middle;
-}
-
-#listing.list .header i {
- opacity: 0;
- transition: .1s ease all;
-}
-
-#listing.list .header p:hover i,
-#listing.list .header .active i {
- opacity: 1;
-}
-
-#listing.list .item.header .active {
- font-weight: bold;
-}
-
-#listing #multiple-selection {
- position: fixed;
- bottom: -4em;
- left: 0;
- z-index: 99999;
- width: 100%;
- background-color: #2196f3;
- height: 4em;
- display: flex !important;
- padding: 0.5em 0.5em 0.5em 1em;
- justify-content: space-between;
- align-items: center;
- transition: .2s ease bottom;
-}
-
-#listing #multiple-selection.active {
- bottom: 0;
-}
-
-#listing #multiple-selection p,
-#listing #multiple-selection i {
- color: #fff;
-}
diff --git a/assets/src/css/login.css b/assets/src/css/login.css
deleted file mode 100644
index 01788f0b..00000000
--- a/assets/src/css/login.css
+++ /dev/null
@@ -1,76 +0,0 @@
-#login {
- background: #fff;
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
-}
-
-#login img {
- width: 4em;
- height: 4em;
- margin: 0 auto;
- display: block;
-}
-
-#login h1 {
- text-align: center;
- font-size: 2.5em;
- margin: .4em 0 .67em;
-}
-
-#login form {
- position: fixed;
- top: 50%;
- left: 50%;
- transform: translate(-50%, -50%);
- max-width: 16em;
- width: 90%;
-}
-
-#login.recaptcha form {
- min-width: 304px;
-}
-
-#login #recaptcha {
- margin: .5em 0 0;
-}
-
-#login input {
- width: 100%;
- width: 100%;
- margin: .5em 0 0;
-}
-
-#login .wrong {
- background: #F44336;
- color: #fff;
- padding: .5em;
- text-align: center;
- animation: .2s opac forwards;
-}
-
-@keyframes opac {
- 0% {
- opacity: 0;
- }
- 100% {
- opacity: 1;
- }
-}
-
-#login input[type="text"],
-#login input[type="password"] {
- padding: .5em 1em;
- border: 1px solid #e9e9e9;
- transition: .2s ease border;
- color: #333;
-}
-
-#login input[type="text"]:focus,
-#login input[type="password"]:focus,
-#login input[type="text"]:hover,
-#login input[type="password"]:hover {
- border-color: #9f9f9f;
-}
diff --git a/assets/src/css/mobile.css b/assets/src/css/mobile.css
deleted file mode 100644
index 79d21b90..00000000
--- a/assets/src/css/mobile.css
+++ /dev/null
@@ -1,113 +0,0 @@
-@media (max-width: 1024px) {
- nav {
- width: 10em
- }
-}
-
-@media (max-width: 1024px) {
- #listing.list .item.header,
- main {
- width: calc(100% - 13em)
- }
-}
-
-@media (max-width: 736px) {
- #more {
- display: inherit
- }
- header .overlay {
- width: 100%;
- height: 100%;
- background-color: rgba(0, 0, 0, 0.1);
- }
- #dropdown {
- position: fixed;
- top: 1em;
- right: 1em;
- display: block;
- background-color: #fff;
- box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
- transform: scale(0);
- transition: .1s ease-in-out transform;
- transform-origin: top right;
- z-index: 99999;
- }
- #dropdown > div {
- display: block;
- }
- #dropdown.active {
- transform: scale(1);
- }
- #dropdown .action {
- display: flex;
- align-items: center;
- border-radius: 0;
- width: 100%;
- }
- #dropdown .action span:not(.counter) {
- display: inline-block;
- padding: .4em;
- }
- #dropdown .counter {
- left: 2.25em;
- }
- #file-selection {
- position: fixed;
- bottom: 1em;
- left: 50%;
- transform: translateX(-50%);
- display: flex;
- align-items: center;
- background: #fff;
- box-shadow: rgba(0, 0, 0, 0.06) 0px 1px 3px, rgba(0, 0, 0, 0.12) 0px 1px 2px;
- width: 95%;
- max-width: 20em;
- }
- #file-selection .action {
- border-radius: 50%;
- width: auto;
- }
- #file-selection > span {
- display: inline-block;
- margin-left: 1em;
- color: #6f6f6f;
- margin-right: auto;
- }
- nav {
- top: 0;
- z-index: 99999;
- background: #fff;
- height: 100%;
- width: 16em;
- box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
- transition: .1s ease left;
- left: -17em;
- }
- nav.active {
- left: 0;
- }
- header .search-button,
- header>div:first-child>.action {
- display: inherit;
- }
- header img {
- display: none;
- }
- #listing {
- margin-bottom: 5em;
- }
- #listing.list .item.header,
- main {
- width: calc(100% - 2em);
- }
- main {
- margin: 0 1em;
- width: calc(100% - 2em);
- }
- #search {
- display: none;
- }
- #search.active {
- display: block;
- }
-}
diff --git a/assets/src/css/styles.css b/assets/src/css/styles.css
deleted file mode 100644
index 69335280..00000000
--- a/assets/src/css/styles.css
+++ /dev/null
@@ -1,228 +0,0 @@
-@import "~normalize.css/normalize.css";
-@import "~noty/lib/noty.css";
-@import "./fonts.css";
-@import "./base.css";
-@import "./header.css";
-@import "./listing.css";
-@import "./editor.css";
-@import "./dashboard.css";
-@import "./login.css";
-
-/* * * * * * * * * * * * * * * *
- * ACTION *
- * * * * * * * * * * * * * * * */
-
-.action {
- display: inline-block;
- cursor: pointer;
- transition: 0.2s ease all;
- border: 0;
- margin: 0;
- color: #546E7A;
- border-radius: 50%;
- background: transparent;
- padding: 0;
- box-shadow: none;
- vertical-align: middle;
- text-align: left;
- position: relative;
-}
-
-.action.disabled {
- opacity: 0.2;
- cursor: not-allowed;
-}
-
-.action i {
- padding: 0.4em;
- transition: .1s ease-in-out all;
- border-radius: 50%;
-}
-
-.action:hover {
- background-color: rgba(0, 0, 0, .1);
-}
-
-.action ul {
- position: absolute;
- top: 0;
- color: #7d7d7d;
- list-style: none;
- margin: 0;
- padding: 0;
- flex-direction: column;
- display: flex;
-}
-
-.action ul li {
- line-height: 1;
- padding: .7em;
- transition: .1s ease background-color;
-}
-
-.action ul li:hover {
- background-color: rgba(0, 0, 0, 0.04);
-}
-
-#click-overlay {
- display: none;
- position: fixed;
- cursor: pointer;
- top: 0;
- left: 0;
- height: 100%;
- width: 100%;
-}
-
-#click-overlay.active {
- display: block;
-}
-
-.action .counter {
- display: block;
- position: absolute;
- bottom: 0;
- right: 0;
- background: #2196f3;
- color: #fff;
- border-radius: 50%;
- font-size: .75em;
- width: 1.5em;
- height: 1.5em;
- text-align: center;
- line-height: 1.25em;
- border: 2px solid white;
-}
-
-
-/* PREVIEWER */
-
-#previewer {
- background-color: rgba(0, 0, 0, 0.9);
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- z-index: 9999;
- overflow: hidden;
-}
-
-#previewer .bar {
- width: 100%;
- text-align: right;
- display: flex;
- padding: 0.5em;
- height: 3.7em;
-}
-
-#previewer .action:first-of-type {
- margin-right: auto;
-}
-
-#previewer .action i {
- color: #fff;
-}
-
-#previewer .action:hover {
- background-color: rgba(255, 255, 255, 0.3)
-}
-
-#previewer .action span {
- display: none;
-}
-
-#previewer .preview {
- margin: 2em auto 4em;
- max-width: 80%;
- text-align: center;
- height: calc(100vh - 9.7em);
-}
-
-#previewer .preview pre {
- text-align: left;
- overflow: auto;
-}
-
-#previewer .preview pre,
-#previewer .preview video,
-#previewer .preview img {
- max-height: 100%;
- margin: 0;
-}
-
-#previewer .pdf {
- width: 100%;
- height: 100%;
-}
-
-#previewer h2.message {
- color: rgba(255, 255, 255, 0.5)
-}
-
-#previewer>button {
- margin: 0;
- position: fixed;
- top: 50%;
- transform: translateY(-50%);
-}
-
-#previewer>button:first-of-type {
- left: 0.5em;
-}
-
-#previewer>button:last-of-type {
- right: 0.5em;
-}
-
-
-/* * * * * * * * * * * * * * * *
- * PROMPT *
- * * * * * * * * * * * * * * * */
-
-.noty_buttons {
- text-align: right;
- padding: 0 10px 10px !important;
-}
-
-.noty_buttons button {
- background: rgba(0, 0, 0, 0.05);
- border: 1px solid rgba(0,0,0,0.1);
- box-shadow: 0 0 0 0;
- font-size: 14px;
-}
-
-/* * * * * * * * * * * * * * * *
- * FOOTER *
- * * * * * * * * * * * * * * * */
-
-.credits {
- font-size: 0.6em;
- margin: 3em 2.5em;
- color: #a5a5a5;
-}
-
-.credits span {
- display: block;
- margin: .3em 0;
-}
-
-.credits a,
-.credits a:hover {
- color: inherit;
- cursor: pointer;
-}
-
-
-/* * * * * * * * * * * * * * * *
- * ANIMATIONS *
- * * * * * * * * * * * * * * * */
-
-@keyframes spin {
- 100% {
- -webkit-transform: rotate(-360deg);
- transform: rotate(-360deg);
- }
-}
-
-@import './mobile.css';
diff --git a/assets/src/i18n/en.yaml b/assets/src/i18n/en.yaml
deleted file mode 100644
index 1b3ec70e..00000000
--- a/assets/src/i18n/en.yaml
+++ /dev/null
@@ -1,201 +0,0 @@
-permanent: Permanent
-buttons:
- cancel: Cancel
- close: Close
- copy: Copy
- copyFile: Copy file
- copyToClipboard: Copy to clipboard
- create: Create
- delete: Delete
- download: Download
- info: Info
- more: More
- move: Move
- moveFile: Move file
- new: New
- next: Next
- ok: OK
- replace: Replace
- previous: Previous
- rename: Rename
- reportIssue: Report Issue
- save: Save
- search: Search
- select: Select
- share: Share
- publish: Publish
- selectMultiple: Select multiple
- schedule: Schedule
- switchView: Switch view
- toggleSidebar: Toggle sidebar
- update: Update
- upload: Upload
- permalink: Get Permanent Link
-success:
- linkCopied: Link copied!
-errors:
- forbidden: You're not welcome here.
- internal: Something really went wrong.
- notFound: This location can't be reached.
-files:
- folders: Folders
- files: Files
- body: Body
- clear: Clear
- closePreview: Close preview
- home: Home
- lastModified: Last modified
- loading: Loading...
- lonely: It feels lonely here...
- metadata: Metadata
- multipleSelectionEnabled: Multiple selection enabled
- name: Name
- size: Size
- sortByName: Sort by name
- sortBySize: Sort by size
- sortByLastModified: Sort by last modified
-help:
- click: select file or directory
- ctrl:
- click: select multiple files or directories
- f: opens search
- s: save a file or download the directory where you are
- del: delete selected items
- doubleClick: open a file or directory
- esc: clear selection and/or close the prompt
- f1: this information
- f2: rename file
- help: Help
-login:
- password: Password
- submit: Login
- username: Username
- wrongCredentials: Wrong credentials
-prompts:
- copy: Copy
- copyMessage: 'Choose the place to copy your files:'
- currentlyNavigating: 'Currently navigating on:'
- deleteMessageMultiple: Are you sure you want to delete {count} file(s)?
- deleteMessageSingle: Are you sure you want to delete this file/folder?
- deleteTitle: Delete files
- displayName: 'Display Name:'
- download: Download files
- downloadMessage: Choose the format you want to download.
- error: Something went wrong
- fileInfo: File information
- filesSelected: "{count} files selected."
- lastModified: Last Modified
- move: Move
- moveMessage: 'Choose new house for your file(s)/folder(s):'
- newDir: New directory
- newDirMessage: Write the name of the new directory.
- newFile: New file
- newFileMessage: Write the name of the new file.
- numberDirs: Number of directories
- numberFiles: Number of files
- replace: Replace
- replaceMessage: >
- One of the files you're trying to upload is conflicting because of its name.
- Do you wish to replace the existing one?
- rename: Rename
- renameMessage: Insert a new name for
- show: Show
- size: Size
- schedule: Schedule
- scheduleMessage: Pick a date and time to schedule the publication of this post.
- newArchetype: Create a new post based on an archetype. Your file will be created on content folder.
-settings:
- admin: Admin
- administrator: Administrator
- allowCommands: Execute commands
- allowEdit: Edit, rename and delete files or directories
- allowNew: Create new files and directories
- allowPublish: Publish new posts and pages
- avoidChanges: "(leave blank to avoid changes)"
- changePassword: Change Password
- commands: Commands
- commandsHelp: >
- Here you can set commands that are executed in the named events. You
- write one command per line. If the event is related to files, such as before and
- after saving, the environment variable "FILE" will be available with the path
- of the file.
- commandsUpdated: Commands updated!
- customStylesheet: Custom Stylesheet
- examples: Examples
- globalSettings: Global Settings
- language: Language
- lockPassword: Prevent the user from changing the password
- newPassword: Your new password
- newPasswordConfirm: Confirm your new password
- newUser: New User
- password: Password
- passwordUpdated: Password updated!
- 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.
- profileSettings: Profile Settings
- ruleExample1: >
- prevents the access to any dot file (such as .git, .gitignore) in
- every folder.
- ruleExample2: blocks the access to the file named Caddyfile on the root of the scope.
- rules: Rules
- rulesHelp1: >
- 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.
- rulesHelp2: >
- Each rule goes in one different line and must start with the keyword
- {0} or {1}. Then you should write {2} if you are using a regular expression and
- then the expression or the path.
- scope: Scope
- settingsUpdated: Settings updated!
- user: User
- userCommands: Commands
- userCommandsHelp: >
- A space separated list with the available commands for this user.
- Example:
- userCreated: User created!
- userDeleted: User deleted!
- userManagement: User Management
- username: Username
- users: Users
- userUpdated: User updated!
-sidebar:
- help: Help
- logout: Logout
- myFiles: My files
- newFile: New file
- newFolder: New folder
- settings: Settings
- siteSettings: Site Settings
- hugoNew: Hugo New
- preview: Preview
-search:
- images: Images
- music: Music
- pdf: PDF
- pressToExecute: Press enter to execute.
- pressToSearch: Press enter to search.
- search: Search...
- searchOrCommand: Search or execute a command...
- searchOrSupportedCommand: 'Search or use one of your supported commands:'
- type: Type and press enter to search.
- types: Types
- video: Video
- writeToSearch: Write here to search
-languages:
- en: English
- fr: Français
- pt: Português
- ja: 日本語
- zhCN: 中文 (简体)
- zhTW: 中文 (繁體)
- es: Español
-time:
- unit: Time Unit
- seconds: Seconds
- minutes: Minutes
- hours: Hours
- days: Days
diff --git a/assets/src/i18n/es.yaml b/assets/src/i18n/es.yaml
deleted file mode 100644
index 78e875f1..00000000
--- a/assets/src/i18n/es.yaml
+++ /dev/null
@@ -1,202 +0,0 @@
-permanent: Permanente
-buttons:
- cancel: Cancelar
- close: Cerrar
- copy: Copiar
- copyFile: Copiar archivo
- copyToClipboard: Copiar al portapapeles
- create: Crear
- delete: Borrar
- download: Descargar
- info: Info
- more: Más
- move: Mover
- moveFile: Mover archivo
- new: Nuevo
- next: Siguiente
- ok: OK
- replace: Reemplazar
- previous: Anterior
- rename: Renombrar
- reportIssue: Reportar problema
- save: Guardar
- search: Buscar
- select: Seleccionar
- share: Compartir
- publish: Publicar
- selectMultiple: Selección múltiple
- schedule: Programar
- switchView: Cambiar vista
- toggleSidebar: Mostrar/Ocultar menú
- update: Actualizar
- upload: Subir
- permalink: Link permanente
-success:
- linkCopied: ¡Link copiado!
-errors:
- forbidden: No eres bienvenido aquí.
- internal: La verdad es que algo ha ido mal.
- notFound: No se puede acceder a este lugar.
-files:
- folders: Carpetas
- files: Archivos
- body: Cuerpo
- clear: Limpiar
- closePreview: Cerrar vista previa
- home: Inicio
- lastModified: Última modificación
- loading: Cargando...
- lonely: Uno se siente muy sólo aquí...
- metadata: Metadatos
- multipleSelectionEnabled: Selección múltiple activada
- name: Nombre
- size: Tamaño
- sortByName: Ordenar por nombre
- sortBySize: Ordenar por tamaño
- sortByLastModified: Ordenar por última modificación
-help:
- click: seleccionar archivo o carpeta
- ctrl:
- click: seleccionar múltiples archivos o carpetas
- f: abre la búsqueda
- s: guarda un archivo o lo descarga a la carpeta en la que estás
- del: elimina los items seleccionados
- doubleClick: abre un archivo o carpeta
- esc: limpia la selección y/o cierra la ventana
- f1: esta información
- f2: renombrar archivo
- help: Ayuda
-login:
- password: Contraseña
- submit: Iniciar sesión
- username: Usuario
- wrongCredentials: Usuario y/o contraseña incorrectos
-prompts:
- copy: Copiar
- copyMessage: 'Elige el lugar donde quieres copiar tus archivos:'
- currentlyNavigating: 'Actualmente estás en:'
- deleteMessageMultiple: ¿Estás seguro que quieres eliminar {count} archivo(s)?
- deleteMessageSingle: ¿Estás seguro que quieres eliminar este archivo/carpeta?
- deleteTitle: Borrar archivos
- displayName: 'Nombre:'
- download: Descargar archivos
- downloadMessage: Elige el formato de descarga.
- error: Algo ha fallado
- fileInfo: Información del archivo
- filesSelected: "{count} archivos seleccionados."
- lastModified: Última modificación
- move: Mover
- moveMessage: 'Elige una nueva casa para tus archivo(s)/carpeta(s):'
- newDir: Nueva carpeta
- newDirMessage: Escribe el nombre de la nueva carpeta.
- newFile: Nuevo archivo
- newFileMessage: Escribe el nombre del nuevo archivo.
- numberDirs: Número de carpetas
- numberFiles: Número de archivos
- replace: Reemplazar
- replaceMessage: >
- Uno de los archivos ue intentas subir está creando conflicto por su nombre.
- ¿Quieres cambiar el nombre del ya existente?
- rename: Renombrar
- renameMessage: Escribe el nuevo nombre para
- show: Mostrar
- size: Tamaño
- schedule: Programar
- scheduleMessage: Elige una hora y fecha para programar la publicación de este post.
- newArchetype: Crea un nuevo post basado en un arquetipo. Tu archivo será creado en la carpeta de contenido.
-settings:
- admin: Admin
- administrator: Administrador
- allowCommands: Ejecutar comandos
- allowEdit: Editar, renombrar y borrar archivos o carpetas
- allowNew: Crear nuevos archivos y carpetas
- allowPublish: Publicar nuevos posts y páginas
- avoidChanges: "(dejar en blanco para evitar cambios)"
- changePassword: Cambiar contraseña
- commands: Comandos
- commandsHelp: >
- Aquí puedes crear comandos que serán ejecutados en los eventos. Debes
- escribir un comando por linea. Si el evento está relacionado con archivos, como
- por ejemplo, antes y después de guardar, la variable de entorno "FILE" estará
- disponible en la ruta del archivo.
- commandsUpdated: ¡Comandos actualizados!
- customStylesheet: Modificar hoja de estilos
- examples: Ejemplos
- globalSettings: Ajustes globales
- language: Idioma
- lockPassword: Evitar que el usuario cambie la contraseña
- newPassword: Tu nueva contraseña
- newPasswordConfirm: Confirma tu contraseña
- newUser: Nuevo usuario
- password: Contraseña
- passwordUpdated: ¡Contraseña actualizada!
- permissions: Permisos
- permissionsHelp: >
- Puedes nombrar al usuario como administrador o elegir los permisos
- individualmente. Si seleccionas "Administrador", todas las otras opciones
- serán activadas automáticamente. La administración de usuarios es un privilegio de administrador.
- profileSettings: Ajustes del perfil
- ruleExample1: >
- previene el acceso a una extensión de archivo (Como .git) en
- cada carpeta.
- ruleExample2: bloquea el acceso al archivo llamado Caddyfile en la carpeta raíz.
- rules: Reglas
- rulesHelp1: >
- Aquí puedes definir un conjunto de reglas de permisos para este usuario
- específico. Los archivos bloqueados no se mostrarán en las listas y no serán accesibles
- por el usuario. Puedes utilizar regex y rutas relativas a la raíz del usuario.
- rulesHelp2: >
- Cada regla va en una línea diferente, y debe comenzar con la palabra clave
- {0} or {1}. Entonces, debes escribir {2} si estás usando una expresión regular (REGEX) y
- luego la expresión o la ruta.
- scope: Raíz
- settingsUpdated: ¡Ajustes actualizados!
- user: Usuario
- userCommands: Comandos
- userCommandsHelp: >
- Una lista separada por espacios con los comandos permitidos para este usuario.
- Ejemplo:
- userCreated: ¡Usuario creado!
- userDeleted: ¡Usuario eliminado!
- userManagement: Administración de usuarios
- username: Usuario
- users: Usuarios
- userUpdated: ¡Usuario actualizado!
-sidebar:
- help: Ayuda
- logout: Cerrar sesión
- myFiles: Mis archivos
- newFile: Nuevo archivo
- newFolder: Nueva carpeta
- settings: Ajustes
- siteSettings: Ajustes del sitio
- hugoNew: Nuevo Hugo
- preview: Vista previa
-search:
- images: Images
- music: Música
- pdf: PDF
- pressToExecute: Presiona enter para ejecutar.
- pressToSearch: Presiona enter para buscar.
- search: Buscar...
- searchOrCommand: Buscar o ejecutar un comando...
- searchOrSupportedCommand: 'Buscar o ejecutar uno de los comandos soportados:'
- type: Escribe y presiona enter para buscar.
- types: Tipos
- video: Vídeo
- writeToSearch: Escribe aquí para buscar
-languages:
- en: English
- fr: Français
- pt: Português
- es: Español
- ja: 日本語
- zhCN: 中文 (简体)
- zhTW: 中文 (繁體)
-
-time:
- unit: Unidad
- seconds: Segundos
- minutes: Minutos
- hours: Horas
- days: Días
diff --git a/assets/src/i18n/fr.yaml b/assets/src/i18n/fr.yaml
deleted file mode 100644
index 5d94d5a7..00000000
--- a/assets/src/i18n/fr.yaml
+++ /dev/null
@@ -1,194 +0,0 @@
-permanent: Permanent
-buttons:
- cancel: Annuler
- close: Fermer
- copy: Copier
- copyFile: Copier le fichier
- copyToClipboard: Copier dans le presse-papier
- create: Créer
- delete: Supprimer
- download: Télécharger
- info: Info
- more: Plus
- move: Déplacer
- moveFile: Déplacer le fichier
- new: Nouveau
- next: Suivant
- ok: OK
- replace: Remplacer
- previous: Précédent
- rename: Renommer
- reportIssue: Rapport d'erreur
- save: Enregistrer
- search: Chercher
- select: Sélectionner
- share: Partager
- publish: Publier
- selectMultiple: Sélection multiple
- schedule: Fixer la date
- switchView: Changer le mode d'affichage
- toggleSidebar: Afficher/Masquer la barre latérale
- update: Mettre à jour
- upload: Importer
- permalink: Obtenir un lien permanent
-errors:
- forbidden: Vous n'êtes pas autorisé à être ici.
- internal: Aïe ! Quelque chose s'est mal passé.
- notFound: Impossible d'accéder à cet emplacement.
-files:
- folders: Dossiers
- files: Fichiers
- body: Corps
- clear: Fermer
- closePreview: Fermer la prévisualisation
- home: Accueil
- lastModified: Dernière modification
- loading: Chargement...
- lonely: Il semble qu'il n'y ai rien par ici...
- metadata: Metadonnées
- multipleSelectionEnabled: Sélection multiple activée
- name: Nom
- size: Taille
- sortByName: Trier par nom
- sortBySize: Trier par taille
- sortByLastModified: Trier par date de dernière modification
-help:
- click: Sélectionner un élément
- ctrl:
- click: Sélectionner plusieurs éléments
- f: Ouvrir l'invité de recherche
- s: Télécharger l'élément actuel
- del: Supprimer les éléments sélectionnés
- doubleClick: Ouvrir un élément
- esc: Désélectionner et/ou fermer la boîte de dialogue
- f1: Ouvrir l'aide
- f2: Renommer le fichier
- help: Aide
-login:
- password: Mot de passe
- submit: Se connecter
- username: Utilisateur
- wrongCredentials: Identifiants incorrects !
-prompts:
- copy: Copier
- copyMessage: 'Choisissez l''emplacement où copier la sélection :'
- currentlyNavigating: 'Dossier courant :'
- deleteMessageMultiple: Etes-vous sûr de vouloir supprimer ces {count} élément(s) ?
- deleteMessageSingle: Etes-vous sûr de vouloir supprimer cet élément ?
- deleteTitle: Supprimer
- displayName: 'Nom :'
- download: Télécharger
- downloadMessage: 'Choisissez le format de téléchargement :'
- error: Quelque chose s'est mal passé
- fileInfo: Informations
- filesSelected: "{count} éléments sélectionnés"
- lastModified: Dernière modification
- move: Déplacer
- moveMessage: 'Choisissez l''emplacement où déplacer la sélection :'
- newDir: Nouveau dossier
- newDirMessage: 'Nom du nouveau dossier :'
- newFile: Nouveau fichier
- newFileMessage: 'Nom du nouveau fichier :'
- numberDirs: Nombre de dossiers
- numberFiles: Nombre de fichiers
- replace: Remplacer
- replaceMessage: >
- Un des fichiers que vous êtes en train d'importer a le même nom qu'un autre déjà présent.
- Voulez-vous remplacer le fichier actuel par le nouveau ?
- rename: Renommer
- renameMessage: Nouveau nom pour
- show: Montrer
- size: Taille
- schedule: Fixer la date
- scheduleMessage: Choisissez une date pour planifier la publication de ce post
- newArchetype: Créer un nouveau post basé sur un archétype. Votre fichier sera créé dans le dossier de contenu.
-settings:
- admin: Admin
- administrator: Administrateur
- allowCommands: Exécuter des commandes
- allowEdit: Editer, renommer et supprimer des fichiers ou des dossiers
- allowNew: Créer de nouveaux fichiers et dossiers
- allowPublish: Publier de nouveaux posts et pages
- avoidChanges: "(Laisser vide pour conserver l'actuel)"
- changePassword: Modifier le mot de passe
- commands: Commandes
- commandsHelp: >
- Ici vous pouvez définir des commandes qui seront exécutées lors de l'évènement correspondant.
- Vous devez indiquer une commande par ligne. Si l'évènement est en rapport avec des fichiers,
- par exemple avant et après enregistrement, la variable d'environement "FILE" sera disponible
- et contiendra le chemin d'accès vers le fichier.
- commandsUpdated: Commandes mises à jour !
- customStylesheet: Feuille de style personnalisée
- examples: Exemples
- globalSettings: Paramètres généraux
- language: Langue
- newPassword: Votre nouveau mot de passe
- newPasswordConfirm: Confirmation du nouveau mot de passe
- newUser: Nouvel Utilisateur
- password: Mot de passe
- passwordUpdated: Mot de passe mis à jour !
- permissions: Permissions
- permissionsHelp: >
- Vous pouvez définir l'utilisateur comme étant un administrateur ou encore choisir les
- permissions individuellement. Si vous sélectionnez "Administrateur", toutes les autres
- options seront automatiquement activées. La gestion des utilisateurs est un privilège que
- seul l'administrateur possède.
- profileSettings: Paramètres du profil
- ruleExample1: Bloque l'accès à tous les fichiers commençant par un point (comme par exemple .git, .gitignore) dans tous les dossiers
- ruleExample2: Bloque l'accès au fichier nommé "Caddyfile" à la racine du dossier utilisateur
- rules: Règles
- rulesHelp1: >
- Vous pouvez définir ici un ensemble de règles pour cet utilisateur.
- Les fichiers bloqués ne seront pas affichés et ne seront pas accessibles par l'utilisateur.
- Les expressions régulières sont supportées et les chemins d'accès sont relatifs par rapport au dossier de l'utilisateur.
- rulesHelp2: >
- Chaque règle est définie sur une ligne différente et doit commencer par le mot clé {0} ou {1}.
- Vous devez ensuite ajouter {2} si vous utilisez une expression régulière puis l'expression en question ou bien seulement le chemin d'accès.
- scope: Portée du dossier utilisateur
- settingsUpdated: Les paramètres ont été mis à jour !
- user: Utilisateur
- userCommands: Commandes
- userCommandsHelp: 'Une liste séparée par des espaces des commandes permises pour l''utilisateur. Exemple :'
- userCreated: Utilisateur créé !
- userDeleted: Utilisateur supprimé !
- userManagement: Gestion des utilisateurs
- username: Nom d'utilisateur
- users: Utilisateurs
- userUpdated: Utilisateur mis à jour !
-sidebar:
- help: Aide
- logout: Se déconnecter
- myFiles: Mes fichiers
- newFile: Nouveau fichier
- newFolder: Nouveau dossier
- settings: Paramètres
- siteSettings: Paramètres du site
- hugoNew: Nouveau Hugo
- preview: Prévisualiser
-search:
- images: Images
- music: Musique
- pdf: PDF
- pressToExecute: Appuyez sur Entrée pour exécuter
- pressToSearch: Appuyez sur Entrée pour lancer la recherche
- search: Recherche en cours...
- searchOrCommand: Rechercher ou exécuter une commande...
- searchOrSupportedCommand: 'Lancez une recherche ou exécutez une commande parmis les suivantes :'
- type: Tapez votre recherche et appuyez sur Entrée
- types: Types
- video: Video
- writeToSearch: Ecrivez ici pour lancer une recherche
-languages:
- en: English
- fr: Français
- pt: Português
- ja: 日本語
- zhCN: 中文 (简体)
- zhTW: 中文 (繁體)
- es: Español
-time:
- unit: Unité de temps
- seconds: Secondes
- minutes: Minutes
- hours: Heures
- days: Jours
diff --git a/assets/src/i18n/index.js b/assets/src/i18n/index.js
deleted file mode 100644
index 7ce5ffe5..00000000
--- a/assets/src/i18n/index.js
+++ /dev/null
@@ -1,61 +0,0 @@
-import Vue from 'vue'
-import VueI18n from 'vue-i18n'
-import en from './en.yaml'
-import fr from './fr.yaml'
-import pt from './pt.yaml'
-import ja from './ja.yaml'
-import zhCN from './zh-cn.yaml'
-import zhTW from './zh-tw.yaml'
-import es from './es.yaml'
-
-Vue.use(VueI18n)
-
-export function detectLocale () {
- let locale = (navigator.language || navigator.browserLangugae).toLowerCase()
- switch (true) {
- case /^en.*/i.test(locale):
- locale = 'en'
- break
- case /^fr.*/i.test(locale):
- locale = 'fr'
- break
- case /^pt.*/i.test(locale):
- locale = 'pt'
- break
- case /^ja.*/i.test(locale):
- locale = 'ja'
- break
- case /^zh-CN/i.test(locale):
- locale = 'zh-cn'
- break
- case /^zh-TW/i.test(locale):
- locale = 'zh-tw'
- break
- case /^zh.*/i.test(locale):
- locale = 'zh-cn'
- break
- case /^es.*/i.test(locale):
- locale = 'es'
- break
- default:
- locale = 'en'
- }
-
- return locale
-}
-
-const i18n = new VueI18n({
- locale: detectLocale(),
- fallbackLocale: 'en',
- messages: {
- 'en': en,
- 'fr': fr,
- 'pt': pt,
- 'ja': ja,
- 'zh-cn': zhCN,
- 'zh-tw': zhTW,
- 'es': es
- }
-})
-
-export default i18n
diff --git a/assets/src/i18n/ja.yaml b/assets/src/i18n/ja.yaml
deleted file mode 100644
index efd5fe9a..00000000
--- a/assets/src/i18n/ja.yaml
+++ /dev/null
@@ -1,201 +0,0 @@
-permanent: 永久
-buttons:
- cancel: キャンセル
- close: 閉じる
- copy: コピー
- copyFile: ファイルをコピー
- copyToClipboard: クリップボードにコピー
- create: 作成
- delete: 削除
- download: ダウンロード
- info: 情報
- more: More
- move: 移動
- moveFile: ファイルを移動
- new: 新規
- next: 次
- ok: OK
- replace: 置き換える
- previous: 前
- rename: 名前を変更
- reportIssue: 問題を報告
- save: 保存
- search: 検索
- select: 選択
- share: シェア
- publish: 発表
- selectMultiple: 複数選択
- schedule: スケジュール
- switchView: 表示を切り替わる
- toggleSidebar: サイドバーを表示する
- update: 更新
- upload: アップロード
- permalink: 固定リンク
-success:
- linkCopied: リンクがコピーされました!
-errors:
- forbidden: アクセスが拒否されました。
- internal: 内部エラーが発生しました。
- notFound: リソースが見つからなりませんでした。
-files:
- folders: フォルダ
- files: ファイル
- body: 本文
- clear: クリアー
- closePreview: プレビューを閉じる
- home: ホーム
- lastModified: 最終変更
- loading: ローディング...
- lonely: ここには何もない...
- metadata: メタデータ
- multipleSelectionEnabled: 複数選択有効
- name: 名前
- size: サイズ
- sortByName: 名前によるソート
- sortBySize: サイズによるソート
- sortByLastModified: 最終変更日付によるソート
-help:
- click: ファイルやディレクトリを選択
- ctrl:
- click: 複数のファイルやディレクトリを選択
- f: 検索を有効にする
- s: ファイルを保存またはカレントディレクトリをダウンロード
- del: 選択した項目を削除
- doubleClick: ファイルやディレクトリをオープン
- esc: 選択をクリアーまたはプロンプトを閉じる
- f1: このヘルプを表示
- f2: ファイルの名前を変更
- help: ヘルプ
-login:
- password: パスワード
- submit: ログイン
- username: ユーザ名
- wrongCredentials: ユーザ名またはパスワードが間違っています。
-prompts:
- copy: コピー
- copyMessage: コピーの目標ディレクトリを選択してください:
- currentlyNavigating: 現在閲覧しているディレクトリ:
- deleteMessageMultiple: '{count} つのファイルを本当に削除してよろしいですか。'
- deleteMessageSingle: このファイル/フォルダを本当に削除してよろしいですか。
- deleteTitle: ファイルを削除
- displayName: 名前:
- download: ファイルをダウンロード
- downloadMessage: 圧縮形式を選択してください。
- error: あるエラーが発生しました。
- fileInfo: ファイル情報
- filesSelected: '{count} つのファイルは選択されました。'
- lastModified: 最終変更
- move: 移動
- moveMessage: 移動の目標ディレクトリを選択してください:
- newDir: 新しいディレクトリを作成
- newDirMessage: 新しいディレクトリの名前を入力してください。
- newFile: 新しいファイルを作成
- newFileMessage: 新しいファイルの名前を入力してください。
- numberDirs: ディレクトリ個数
- numberFiles: ファイル個数
- replace: 置き換える
- replaceMessage: >
- アップロードするファイルの中でかち合う名前が一つあります。
- 既存のファイルを置き換えりませんか。
- rename: 名前を変更
- renameMessage: 名前を変更しようファイルは:
- show: 表示
- size: サイズ
- schedule: スケジュール
- scheduleMessage: このポストの発表日付をスケジュールしてください。
- newArchetype: ある元型に基づいて新しいポストを作成します。ファイルは コンテンツフォルダに作成されます。
-settings:
- admin: 管理者
- administrator: 管理者
- allowCommands: コマンドの実行
- allowEdit: ファイルやディレクトリの編集、名前変更と削除
- allowNew: ファイルとディレクトリの作成
- allowPublish: ポストとぺーじの発表
- avoidChanges: "(変更を避けるために空白にしてください)"
- changePassword: パスワードを変更
- commands: コマンド
- commandsHelp: "\
- ここで、名前付きイベントに実行するコマンドを設定することができます。\
- 一行にコマンド一つを入力してください。\
- イベントはファイルに関連する場合、例えばファイル保存の前にまたは後で、\
- 環境変数 FILE はファイルのパスに割り当てられます。"
- commandsUpdated: コマンドは更新されました!
- customStylesheet: カスタムスタイルシ ート
- examples: 例
- globalSettings: グローバル設定
- language: 言語
- lockPassword: 新しいパスワードを変更に禁止
- newPassword: 新しいパスワード
- newPasswordConfirm: 新しいパスワードを確認します
- newUser: 新しいユーザー
- password: パスワード
- passwordUpdated: パスワードは更新されました!
- permissions: 権限
- permissionsHelp: "\
- あなたはユーザーを管理者に設定し、または権限を個々に設定しできます。\
- \"管理者\"を選択する場合、その他のすべての選択肢は自動的に設定されます。\
- ユーザーの管理は管理者の権限として保留されました。"
- profileSettings: プロファイル設定
- ruleExample1: "\
- 各フォルダに名前はドットで始まるファイル(例えば、.git、.gitignore)\
- へのアクセスを制限します。"
- ruleExample2: 範囲のルートパスに名前は Caddyfile のファイルへのアクセスを制限します。
- rules: 規則
- rulesHelp1: "\
- ここに、あなたはこのユーザーの許可または拒否規則を設定できます。\
- ブロックされたファイルはリストに表示されません、それではアクセスも制限されます。\
- 正規表現(regex)のサポートと範囲に相対のパスが提供されています。"
- rulesHelp2: "\
- 一行に規則一つを入力してください、\
- その間に規則はキーワード {0} や {1} で始める必要があります。\
- そして正規表現を使う場合、{2} と入力し、表現やパスを入力してください。"
- scope: 範囲
- settingsUpdated: 設定は更新されました!
- user: ユーザー
- userCommands: ユーザーのコマンド
- userCommandsHelp: "\
- 空白区切りの有効のコマンドのリストを指定してください。\
- 例:"
- userCreated: ユーザーは作成されました!
- userDeleted: ユーザーは削除されました!
- userManagement: ユーザー管理
- username: ユーザー名
- users: ユーザー
- userUpdated: ユーザーは更新されました!
-sidebar:
- help: ヘルプ
- logout: ログアウト
- myFiles: 私のファイル
- newFile: 新しいファイルを作成
- newFolder: 新しいフォルダを作成
- settings: 設定
- siteSettings: サイト設定
- hugoNew: Hugo New
- preview: プレビュー
-search:
- images: 画像
- music: 音楽
- pdf: PDF
- pressToExecute: Enter を押して実行します。
- pressToSearch: Enter を押して検索します。
- search: 検索...
- searchOrCommand: コマンドを検索または実行します。
- searchOrSupportedCommand: サポートしているコマンドを検索または実行します:
- type: キーワードを入力し、Enter を押して検索します。
- types: 種類
- video: ビデオ
- writeToSearch: ここにキーワードを入力してください
-languages:
- en: English
- fr: Français
- pt: Português
- ja: 日本語
- zhCN: 中文 (简体)
- zhTW: 中文 (繁體)
- es: Español
-time:
- unit: 時間単位
- seconds: 秒
- minutes: 分
- hours: 時間
- days: 日
diff --git a/assets/src/i18n/pt.yaml b/assets/src/i18n/pt.yaml
deleted file mode 100644
index 33daed4a..00000000
--- a/assets/src/i18n/pt.yaml
+++ /dev/null
@@ -1,204 +0,0 @@
-permanent: Permanente
-buttons:
- cancel: Cancelar
- close: Fechar
- copy: Copiar
- copyFile: Copiar ficheiro
- copyToClipboard: Copiar
- create: Criar
- delete: Eliminar
- download: Descarregar
- info: Info
- more: Mais
- move: Mover
- moveFile: Mover ficheiro
- new: Novo
- next: Próximo
- ok: OK
- previous: Anterior
- publish: Publicar
- rename: Renomear
- replace: Substituir
- reportIssue: Reportar Erro
- save: Guardar
- share: Partilhar
- schedule: Agendar
- search: Pesquisar
- select: Selecionar
- selectMultiple: Selecionar múltiplos
- switchView: Alterar modo de visão
- toggleSidebar: Alternar barra lateral
- update: Atualizar
- upload: Enviar
- permalink: Obter link permanente
-success:
- linkCopied: Link copiado!
-errors:
- forbidden: Tu não és bem-vindo aqui.
- internal: Algo correu bastante mal.
- notFound: Não conseguimos chegar a esta localização.
-files:
- body: Corpo
- clear: Limpar
- closePreview: Fechar pré-visualização
- files: Ficheiros
- folders: Pastas
- home: Início
- lastModified: Última modificação
- loading: A carregar...
- lonely: Sinto-me sozinho...
- metadata: Metadados
- multipleSelectionEnabled: Seleção múltipla ativada
- name: Nome
- size: Tamanho
- sortByLastModified: Ordenar pela última modificação
- sortByName: Ordenar pelo nome
- sortBySize: Ordenar pelo tamanho
-help:
- click: selecionar pasta ou ficheiro
- ctrl:
- click: selecionar várias pastas e ficheiros
- f: pesquisar
- s: guardar um ficheiro ou descarregar a pasta em que estás a navegar
- del: eliminar os ficheiros selecionados
- doubleClick: abrir pasta ou ficheiro
- esc: limpar seleção e/ou fechar menu
- f1: esta informação
- f2: renomear ficheiro
- help: Ajuda
-languages:
- en: English
- fr: Français
- pt: Português
- ja: 日本語
- zhCN: 中文 (简体)
- zhTW: 中文 (繁體)
- es: Español
-login:
- password: Palavra-passe
- submit: Login
- username: Nome de utilizador
- wrongCredentials: Dados errados
-prompts:
- copy: Copiar
- copyMessage: 'Escolhe um lugar para copiar os ficheiros:'
- currentlyNavigating: 'A navegar em:'
- deleteMessageMultiple: Deseja eliminar {count} ficheiro(s)?
- deleteMessageSingle: Deseja eliminar esta pasta/ficheiro?
- deleteTitle: Eliminar ficheiros
- displayName: 'Nome:'
- download: Descarregar ficheiros
- downloadMessage: Escolha o formato do ficheiro.
- error: Algo correu mal
- fileInfo: Informação do ficheiro
- filesSelected: "{count} ficheiros selecionados."
- lastModified: Última Modificação
- move: Mover
- moveMessage: 'Escolha uma nova casa para os seus ficheiros:'
- newArchetype: Criar um novo post baseado num "archetype". O seu ficheiro será criado
- na pasta "content".
- newDir: Nova pasta
- newDirMessage: Escreva o nome da nova pasta.
- newFile: Novo ficheiro
- newFileMessage: Escreva o nome do novo ficheiro.
- numberDirs: Número de pastas
- numberFiles: Número de ficheiros
- rename: Renomear
- renameMessage: Insira um novo nome para
- replace: Substituir
- replaceMessage: >
- Já existe um ficheiro com nome igual a um dos que está a tentar
- enviar. Deseja substituir?
- schedule: Agendar
- scheduleMessage: Escolha uma data para publicar este post.
- show: Mostrar
- size: Tamanho
-search:
- images: Imagens
- music: Música
- pdf: PDF
- pressToExecute: Prima enter para executar.
- pressToSearch: Prima enter para pesquisar.
- search: Pesquise...
- searchOrCommand: Pesquise ou execute um comando...
- searchOrSupportedCommand: 'Pesquise ou utilize um dos seus comandos:'
- type: Escreva e prima enter para pesquisar.
- types: Tipos
- video: Vídeos
- writeToSearch: Escreva aqui para pesquisar
-settings:
- admin: Admin
- administrator: Administrador
- allowCommands: Executar comandos
- allowEdit: Editar, renomear e eliminar ficheiros ou pastas
- allowNew: Criar novos ficheiros e pastas
- allowPublish: Publicar novas páginas e conteúdos
- avoidChanges: "(deixe em branco para manter)"
- changePassword: Alterar Password
- commands: Comandos
- commandsHelp: >
- Pode definir um conjunto de comandos a executar em determiandos eventos.
- Deve escrever um comando por linha. Se o evento estiver relacionado com ficheiros,
- como antes e depois de guardar, irá existir uma variável de ambiente denominada
- "FILE" com o caminho do ficheiro.
- commandsUpdated: Comandos atualizados!
- customStylesheet: Estilos Personalizados
- examples: Exemplos
- globalSettings: Configurações Globais
- language: Linguagem
- lockPassword: Não permitir que o utilizador altere a palavra-passe
- newPassword: Nova palavra-passe
- newPasswordConfirm: Confirme a nova palavra-passe
- newUser: Novo Utilizador
- password: Palavra-passe
- passwordUpdated: Palavra-passe atualizada!
- permissions: Permissões
- permissionsHelp: >
- Pode definir o utilizador como administrador ou escolher as permissões
- manualmente. Se selecionar a opção "Administrador", todas as outras opções serão
- automaticamente selecionadas. A gestão dos utilizadores é um privilégio restringido
- aos administradores.
- profileSettings: Configurações do Utilizador
- ruleExample1: >
- previne o acesso a qualquer "dotfile" (como .git, .gitignore) em
- qualquer pasta
- ruleExample2: bloqueia o acesso ao ficheiro chamado Caddyfile.
- rules: Regras
- rulesHelp1: >
- Aqui pode definir um conjunto de regras para permitir ou bloquear o
- acesso do utilizador a determinados ficheiros ou pastas. Os ficheiros bloqueados
- não irão aparecer durante a navegação. Suportamos expressões regulares e os caminhos
- dos ficheiros devem ser relativos à base do utilizador.
- rulesHelp2: >
- Cada regra deve ser colocada numa linha diferente e deve começar com
- as palavras {0} (permite) ou {1} (bloqueia). Deve escrever, logo de seguida, {2},
- caso queira utilizar uma expressão regular. Depois, escreva o caminho do ficheiro/pasta
- ou a expressão regular.
- scope: Base
- settingsUpdated: Configurações atualizadas!
- user: Utilizador
- userCommands: Comandos
- userCommandsHelp: 'Uma lista, separada com espaços, de comandos disponíveis para
- este utilizados. Exemplo:'
- userCreated: Utilizador criado!
- userDeleted: Utilizador eliminado!
- userManagement: Gestão de Utilizadores
- username: Nome de utilizador
- users: Utilizadores
- userUpdated: Utilizador atualizado!
-sidebar:
- help: Ajuda
- hugoNew: Hugo New
- logout: Sair
- myFiles: Ficheiros
- newFile: Novo ficheiro
- newFolder: Nova pasta
- preview: Pré-visualizar
- settings: Configurações
- siteSettings: Configurações do Site
-time:
- unit: Unidades de Tempo
- seconds: Segundos
- minutes: Minutos
- hours: Horas
- days: Dias
diff --git a/assets/src/i18n/zh-cn.yaml b/assets/src/i18n/zh-cn.yaml
deleted file mode 100644
index 4f2622d8..00000000
--- a/assets/src/i18n/zh-cn.yaml
+++ /dev/null
@@ -1,199 +0,0 @@
-permanent: 永久
-buttons:
- cancel: 取消
- close: 关闭
- copy: 复制
- copyFile: 复制文件
- copyToClipboard: 复制到剪贴板
- create: 创建
- delete: 删除
- download: 下载
- info: 信息
- more: 更多
- move: 移动
- moveFile: 移动文件
- new: 新
- next: 下一个
- ok: 确定
- replace: 替换
- previous: 上一个
- rename: 重命名
- reportIssue: 报告问题
- save: 保存
- search: 搜索
- select: 选择
- share: 分享
- publish: 发布
- selectMultiple: 选择多个
- schedule: 计划
- switchView: 切换显示方式
- toggleSidebar: 切换侧边栏
- update: 更新
- upload: 上传
- permalink: 获取永久链接
-success:
- linkCopied: 链接已复制!
-errors:
- forbidden: 你被禁止访问。
- internal: 内部出现麻烦了。
- notFound: 找不到文件。
-files:
- folders: 文件夹
- files: 文件
- body: Body
- clear: 清空
- closePreview: 关闭预览
- home: 主页
- lastModified: 最后修改
- loading: 加载中...
- lonely: 这里没有任何文件...
- metadata: 元数据
- multipleSelectionEnabled: 多选模式已开启
- name: 名称
- size: 大小
- sortByName: 按名称排序
- sortBySize: 按大小排序
- sortByLastModified: 按最后修改时间排序
-help:
- click: 选择文件或目录
- ctrl:
- click: 选择多个文件或目录
- f: 打开搜索框
- s: 保存文件或下载当前文件夹
- del: 删除所选的文件/文件夹
- doubleClick: 打开文件/文件夹
- esc: 清除已选项或关闭提示信息
- f1: 显示该帮助信息
- f2: 重命名文件/文件夹
- help: 帮助
-login:
- password: 密码
- submit: 登录
- username: 用户名
- wrongCredentials: 用户名或密码错误
-prompts:
- copy: 复制
- copyMessage: 请选择欲复制至的目录:
- currentlyNavigating: 当前目录:
- deleteMessageMultiple: 你确定要删除这 {count} 个文件吗?
- deleteMessageSingle: 你确定要删除这个文件/文件夹吗?
- deleteTitle: 删除文件
- displayName: 名称:
- download: 下载文件
- downloadMessage: 请选择要下载的压缩格式。
- error: 出了一点问题...
- fileInfo: 文件信息
- filesSelected: 已选择 {count} 个文件。
- lastModified: 最后修改
- move: 移动
- moveMessage: 请选择欲移动至的目录:
- newDir: 新建目录
- newDirMessage: 请输入新目录的名称。
- newFile: 新建文件
- newFileMessage: 请输入新文件的名称。
- numberDirs: 目录数
- numberFiles: 文件数
- replace: 替换
- replaceMessage: "\
- 您尝试上传的文件中有一个与现有文件的名称存在冲突。\
- 是否替换现有的同名文件?"
- rename: 重命名
- renameMessage: 请输入新名称,旧名称为:
- show: 揭示
- size: 大小
- schedule: 计划
- scheduleMessage: 请选择发布这篇帖子的日期。
- newArchetype: 创建一个基于原型的新帖子。您的文件将会创建在内容文件夹中。
-settings:
- admin: 管理员
- administrator: 管理员
- allowCommands: 执行命令(Linux 代码)
- allowEdit: 编辑、重命名或删除文件/目录
- allowNew: 创建新文件和目录
- allowPublish: 发布新的帖子与页面
- avoidChanges: '(留空以避免更改)'
- changePassword: 更改密码
- commands: 命令(linux 代码)
- commandsHelp: "\
- 在这里,您可以设置在指定事件下执行的命令,一行一条。\
- 若事件与文件相关,如“在保存文件前”,\
- 则文件的路径会被赋值给环境变量 \"FILE\"。"
- commandsUpdated: 命令已更新!
- customStylesheet: 自定义样式表
- examples: 例子
- globalSettings: 全局设置
- language: 语言
- lockPassword: 禁止用户修改密码
- newPassword: 您的新密码
- newPasswordConfirm: 重输一遍新密码
- newUser: 新建用户
- password: 密码
- passwordUpdated: 密码已更新!
- permissions: 权限
- permissionsHelp: "\
- 您可以将该用户设置为管理员,也可以单独选择各项权限。\
- 如果选择了“管理员”,则其他的选项会被自动勾上,\
- 同时该用户可以管理其他用户。"
- profileSettings: 个人设置
- ruleExample1: "\
- 阻止用户访问所有文件夹下任何以 . 开头的文件\
- (隐藏文件, 例如: .git, .gitignore)。"
- ruleExample2: 阻止用户访问其目录范围的根目录下名为 Caddyfile 的文件。
- rules: 规则
- rulesHelp1: "\
- 您可以为该用户制定一组黑名单或白名单式的规则,\
- 被屏蔽的文件将不会显示在列表中,用户也无权限访问,\
- 支持相对于目录范围的路径。"
- rulesHelp2: "\
- 每行一条规则,且必须以关键词 {0} 或 {1} 开头。\
- 如要使用正则表达式,请在加上 {2} 之后再附上表达式或路径。"
- scope: 目录范围
- settingsUpdated: 设置已更新!
- user: 用户
- userCommands: 用户命令(Linux 代码)
- userCommandsHelp: "\
- 指定该用户可以执行的命令(Linux 代码),用空格分隔。\
- 例如:"
- userCreated: 用户已创建!
- userDeleted: 用户已删除!
- userManagement: 用户管理
- username: 用户名
- users: 用户
- userUpdated: 用户已更新!
-sidebar:
- help: 帮助
- logout: 登出
- myFiles: 我的文件
- newFile: 新建文件
- newFolder: 新建文件夹
- settings: 设置
- siteSettings: 网站设置
- hugoNew: Hugo New
- preview: 预览
-search:
- images: 图像
- music: 音乐
- pdf: PDF
- pressToExecute: 按回车键执行。
- pressToSearch: 按回车键搜索。
- search: 搜索...
- searchOrCommand: 搜索或者执行命令(Linux 代码)...
- searchOrSupportedCommand: 搜索或使用您可以使用的命令(一次只能执行一个命令):
- type: 键入并按回车键进行搜索。
- types: 类型
- video: 视频
- writeToSearch: 请输入要搜索的内容
-languages:
- en: English
- fr: Français
- pt: Português
- ja: 日本語
- zhCN: 中文 (简体)
- zhTW: 中文 (繁體)
- es: Español
-time:
- unit: 时间单位
- seconds: 秒
- minutes: 分钟
- hours: 小时
- days: 天
diff --git a/assets/src/i18n/zh-tw.yaml b/assets/src/i18n/zh-tw.yaml
deleted file mode 100644
index 2c32caea..00000000
--- a/assets/src/i18n/zh-tw.yaml
+++ /dev/null
@@ -1,199 +0,0 @@
-permanent: 永久
-buttons:
- cancel: 取消
- close: 關閉
- copy: 複製
- copyFile: 複製檔案
- copyToClipboard: 複製到剪貼簿
- create: 建立
- delete: 刪除
- download: 下載
- info: 資訊
- more: 更多
- move: 移動
- moveFile: 移動檔案
- new: 新
- next: 下一個
- ok: 確認
- replace: 更換
- previous: 上一個
- rename: 重新命名
- reportIssue: 報告問題
- save: 儲存
- search: 搜尋
- select: 選擇
- share: 分享
- publish: 發佈
- selectMultiple: 選擇多個
- schedule: 計畫
- switchView: 切換顯示方式
- toggleSidebar: 切換側邊欄
- update: 更新
- upload: 上傳
- permalink: 獲取永久連結
-success:
- linkCopied: 連結已複製!
-errors:
- forbidden: 你被禁止存取。
- internal: 內部出現麻煩了。
- notFound: 找不到檔案。
-files:
- folders: 資料夾
- files: 檔案
- body: Body
- clear: 清空
- closePreview: 關閉預覽
- home: 主頁
- lastModified: 最後修改
- loading: 讀取中...
- lonely: 這裡沒有任何檔案...
- metadata: 詮釋資料
- multipleSelectionEnabled: 多選模式已開啟
- name: 名稱
- size: 大小
- sortByName: 按名稱排序
- sortBySize: 按大小排序
- sortByLastModified: 按最後修改時間排序
-help:
- click: 選擇檔案或目錄
- ctrl:
- click: 選擇多個檔案或目錄
- f: 打開搜尋列
- s: 儲存檔案或下載目前資料夾
- del: 刪除所選的檔案/資料夾
- doubleClick: 打開檔案/資料夾
- esc: 清除已選項或關閉提示資訊
- f1: 顯示該幫助資訊
- f2: 重新命名檔案/資料夾
- help: 幫助
-login:
- password: 密碼
- submit: 登入
- username: 帳號
- wrongCredentials: 帳號或密碼錯誤
-prompts:
- copy: 複製
- copyMessage: 請選擇欲複製至的目錄:
- currentlyNavigating: 目前目錄:
- deleteMessageMultiple: 你確定要刪除這 {count} 個檔案嗎?
- deleteMessageSingle: 你確定要刪除這個檔案/資料夾嗎?
- deleteTitle: 刪除檔案
- displayName: 名稱:
- download: 下載檔案
- downloadMessage: 請選擇要下載的壓縮格式。
- error: 發出了一點錯誤...
- fileInfo: 檔案資訊
- filesSelected: 已選擇 {count} 個檔案。
- lastModified: 最後修改
- move: 移動
- moveMessage: 請選擇欲移動至的目錄:
- newDir: 建立目錄
- newDirMessage: 請輸入新目錄的名稱。
- newFile: 建立檔案
- newFileMessage: 請輸入新檔案的名稱。
- numberDirs: 目錄數
- numberFiles: 檔案數
- replace: 替換
- replaceMessage: "\
- 您嘗試上傳的檔案中有一個與現有檔案的名稱存在衝突。\
- 是否取代現有的同名檔案?"
- rename: 重新命名
- renameMessage: 請輸入新名稱,舊名稱為:
- show: 顯示
- size: 大小
- schedule: 計畫
- scheduleMessage: 請選擇發佈這篇貼文的日期。
- newArchetype: 建立一個基於原型的新貼文。您的檔案將會建立在內容資料夾中。
-settings:
- admin: 管理員
- administrator: 管理員
- allowCommands: 執行命令
- allowEdit: 編輯、重命名或刪除檔案/目錄
- allowNew: 創建新檔案和目錄
- allowPublish: 發佈新的貼文與頁面
- avoidChanges: '(留空以避免更改)'
- changePassword: 更改密碼
- commands: 命令
- commandsHelp: "\
- 在這裡,您可以設定在指定事件下執行的命令,一行一條。\
- 若事件與檔案相關,如“在保存檔案前”,\
- 則檔案的路徑會被賦值給環境變數 \"FILE\"。"
- commandsUpdated: 命令已更新!
- customStylesheet: 自定義樣式表
- examples: 範例
- globalSettings: 全域設定
- language: 語言
- lockPassword: 禁止使用者修改密碼
- newPassword: 您的新密碼
- newPasswordConfirm: 重輸一遍新密碼
- newUser: 建立使用者
- password: 密碼
- passwordUpdated: 密碼已更新!
- permissions: 權限
- permissionsHelp: "\
- 您可以將該使用者設置為管理員,也可以單獨選擇各項權限。\
- 如果選擇了“管理員”,則其他的選項會被自動勾上,\
- 同時該使用者可以管理其他使用者。"
- profileSettings: 個人設定
- ruleExample1: "\
- 封鎖使用者存取所有資料夾下任何以 . 開頭的檔案\
- (隱藏文件, 例如: .git, .gitignore)。"
- ruleExample2: 封鎖使用者存取其目錄範圍的根目錄下名為 Caddyfile 的檔案。
- rules: 規則
- rulesHelp1: "\
- 您可以為該使用者製定一組黑名單或白名單式的規則,\
- 被屏蔽的檔案將不會顯示在清單中,使用者也無權限存取,\
- 支持相對於目錄範圍的路徑。"
- rulesHelp2: "\
- 每行一條規則,且必須以關鍵字 {0} 或 {1} 開頭。\
- 如要使用規則運算式,請在加上 {2} 之後再附上運算式或路徑。"
- scope: 目錄範圍
- settingsUpdated: 設定已更新!
- user: 使用者
- userCommands: 使用者命令
- userCommandsHelp: "\
- 指定該使用者可以執行的命令,用空格分隔。\
- 例如:"
- userCreated: 使用者已建立!
- userDeleted: 使用者已刪除!
- userManagement: 使用者管理
- username: 使用者名稱
- users: 使用者
- userUpdated: 使用者已更新!
-sidebar:
- help: 幫助
- logout: 登出
- myFiles: 我的檔案
- newFile: 建立檔案
- newFolder: 建立資料夾
- settings: 設定
- siteSettings: 網站設定
- hugoNew: Hugo New
- preview: 預覽
-search:
- images: 影像
- music: 音樂
- pdf: PDF
- pressToExecute: 按確定鍵執行。
- pressToSearch: 按確定鍵搜尋。
- search: 搜尋...
- searchOrCommand: 搜尋或者執行命令...
- searchOrSupportedCommand: 搜尋或使用您可以使用的命令(一次只能執行一個命令):
- type: 輸入並按確定鍵進行搜尋。
- types: 類型
- video: 影片
- writeToSearch: 請輸入要搜尋的內容
-languages:
- en: English
- fr: Français
- pt: Português
- ja: 日本語
- zhCN: 中文 (简体)
- zhTW: 中文 (繁體)
- es: Español
-time:
- unit: 時間單位
- seconds: 秒
- minutes: 分鐘
- hours: 小時
- days: 天
diff --git a/assets/src/main.js b/assets/src/main.js
deleted file mode 100644
index b071129c..00000000
--- a/assets/src/main.js
+++ /dev/null
@@ -1,54 +0,0 @@
-import Vue from 'vue'
-import App from './App'
-import store from './store'
-import router from './router'
-import i18n from './i18n'
-import Noty from 'noty'
-
-Vue.config.productionTip = true
-
-const notyDefault = {
- type: 'info',
- layout: 'bottomRight',
- timeout: 1000,
- progressBar: true
-}
-
-Vue.prototype.$noty = function (opts) {
- new Noty(Object.assign({}, notyDefault, opts)).show()
-}
-
-Vue.prototype.$showSuccess = function (message) {
- new Noty(Object.assign({}, notyDefault, {
- text: message,
- type: 'success'
- })).show()
-}
-
-Vue.prototype.$showError = function (error) {
- let n = new Noty(Object.assign({}, notyDefault, {
- text: error,
- type: 'error',
- timeout: null,
- buttons: [
- Noty.button(i18n.t('buttons.reportIssue'), '', function () {
- window.open('https://github.com/hacdias/filemanager/issues/new')
- }),
- Noty.button(i18n.t('buttons.close'), '', function () {
- n.close()
- })
- ]
- }))
-
- n.show()
-}
-
-/* eslint-disable no-new */
-new Vue({
- el: '#app',
- store,
- router,
- i18n,
- template: ' ',
- components: { App }
-})
diff --git a/assets/src/router/index.js b/assets/src/router/index.js
deleted file mode 100644
index 58ca1d87..00000000
--- a/assets/src/router/index.js
+++ /dev/null
@@ -1,161 +0,0 @@
-import Vue from 'vue'
-import Router from 'vue-router'
-import Login from '@/views/Login'
-import Layout from '@/views/Layout'
-import Files from '@/views/Files'
-import Users from '@/views/settings/Users'
-import User from '@/views/settings/User'
-import Settings from '@/views/Settings'
-import GlobalSettings from '@/views/settings/Global'
-import ProfileSettings from '@/views/settings/Profile'
-import Error403 from '@/views/errors/403'
-import Error404 from '@/views/errors/404'
-import Error500 from '@/views/errors/500'
-import auth from '@/utils/auth'
-import store from '@/store'
-
-Vue.use(Router)
-
-const router = new Router({
- base: document.querySelector('meta[name="base"]').getAttribute('content'),
- mode: 'history',
- routes: [
- {
- path: '/login',
- name: 'Login',
- component: Login,
- beforeEnter: function (to, from, next) {
- auth.loggedIn()
- .then(() => {
- next({ path: '/files' })
- })
- .catch(() => {
- document.title = 'Login'
- next()
- })
- }
- },
- {
- path: '/*',
- component: Layout,
- meta: {
- requiresAuth: true
- },
- children: [
- {
- path: '/files/*',
- name: 'Files',
- component: Files
- },
- {
- path: '/settings',
- name: 'Settings',
- component: Settings,
- redirect: {
- path: '/settings/profile'
- },
- meta: {
- disableOnNoAuth: true
- },
- children: [
- {
- path: '/settings/profile',
- name: 'Profile Settings',
- component: ProfileSettings
- },
- {
- path: '/settings/global',
- name: 'Global Settings',
- component: GlobalSettings,
- meta: {
- requiresAdmin: true
- }
- },
- {
- path: '/settings/users',
- name: 'Users',
- component: Users,
- meta: {
- requiresAdmin: true
- }
- },
- {
- path: '/settings/users/*',
- name: 'User',
- component: User,
- meta: {
- requiresAdmin: true
- }
- }
- ]
- },
- {
- path: '/403',
- name: 'Forbidden',
- component: Error403
- },
- {
- path: '/404',
- name: 'Not Found',
- component: Error404
- },
- {
- path: '/500',
- name: 'Internal Server Error',
- component: Error500
- },
- {
- path: '/files',
- redirect: {
- path: '/files/'
- }
- },
- {
- path: '/*',
- redirect: {
- name: 'Files'
- }
- }
- ]
- }
- ]
-})
-
-router.beforeEach((to, from, next) => {
- document.title = to.name
-
- if (to.matched.some(record => record.meta.requiresAuth)) {
- // this route requires auth, check if logged in
- // if not, redirect to login page.
- auth.loggedIn()
- .then(() => {
- if (to.matched.some(record => record.meta.requiresAdmin)) {
- if (!store.state.user.admin) {
- next({ path: '/403' })
- return
- }
- }
-
- if (to.matched.some(record => record.meta.disableOnNoAuth)) {
- if (store.state.noAuth) {
- next({ path: '/403' })
- return
- }
- }
-
- next()
- })
- .catch(e => {
- next({
- path: '/login',
- query: { redirect: to.fullPath }
- })
- })
-
- return
- }
-
- next()
-})
-
-export default router
diff --git a/assets/src/store/getters.js b/assets/src/store/getters.js
deleted file mode 100644
index 370bc589..00000000
--- a/assets/src/store/getters.js
+++ /dev/null
@@ -1,5 +0,0 @@
-const getters = {
- selectedCount: state => state.selected.length
-}
-
-export default getters
diff --git a/assets/src/store/index.js b/assets/src/store/index.js
deleted file mode 100644
index 655222cb..00000000
--- a/assets/src/store/index.js
+++ /dev/null
@@ -1,42 +0,0 @@
-import Vue from 'vue'
-import Vuex from 'vuex'
-import mutations from './mutations'
-import getters from './getters'
-
-Vue.use(Vuex)
-
-const state = {
- user: {},
- req: {},
- clipboard: {
- key: '',
- items: []
- },
- css: (() => {
- let css = window.CSS
- window.CSS = null
- return css
- })(),
- recaptcha: document.querySelector('meta[name="recaptcha"]').getAttribute('content'),
- staticGen: document.querySelector('meta[name="staticgen"]').getAttribute('content'),
- baseURL: document.querySelector('meta[name="base"]').getAttribute('content'),
- noAuth: (document.querySelector('meta[name="noauth"]').getAttribute('content') === 'true'),
- version: document.querySelector('meta[name="version"]').getAttribute('content'),
- jwt: '',
- progress: 0,
- schedule: '',
- loading: false,
- reload: false,
- selected: [],
- multiple: false,
- show: null,
- showMessage: null,
- showConfirm: null
-}
-
-export default new Vuex.Store({
- strict: process.env.NODE_ENV !== 'production',
- state,
- getters,
- mutations
-})
diff --git a/assets/src/store/mutations.js b/assets/src/store/mutations.js
deleted file mode 100644
index cf608511..00000000
--- a/assets/src/store/mutations.js
+++ /dev/null
@@ -1,81 +0,0 @@
-import * as i18n from '@/i18n'
-import moment from 'moment'
-
-const mutations = {
- closeHovers: state => {
- state.show = null
- state.showMessage = null
- },
- showHover: (state, value) => {
- if (typeof value !== 'object') {
- state.show = value
- return
- }
-
- state.show = value.prompt
- state.showMessage = value.message
- state.showConfirm = value.confirm
- },
- showError: (state, value) => {
- state.show = 'error'
- state.showMessage = value
- },
- showSuccess: (state, value) => {
- state.show = 'success'
- state.showMessage = value
- },
- setLoading: (state, value) => { state.loading = value },
- setReload: (state, value) => { state.reload = value },
- setUser: (state, value) => {
- let locale = value.locale
-
- if (locale === '') {
- locale = i18n.detectLocale()
- }
-
- moment.locale(locale)
- i18n.default.locale = locale
- state.user = value
- },
- setCSS: (state, value) => (state.css = value),
- setJWT: (state, value) => (state.jwt = value),
- multiple: (state, value) => (state.multiple = value),
- addSelected: (state, value) => (state.selected.push(value)),
- addPlugin: (state, value) => {
- state.plugins.push(value)
- },
- removeSelected: (state, value) => {
- let i = state.selected.indexOf(value)
- if (i === -1) return
- state.selected.splice(i, 1)
- },
- resetSelected: (state) => {
- state.selected = []
- },
- updateUser: (state, value) => {
- if (typeof value !== 'object') return
-
- for (let field in value) {
- state.user[field] = value[field]
- }
- },
- updateRequest: (state, value) => {
- state.req = value
- },
- updateClipboard: (state, value) => {
- state.clipboard.key = value.key
- state.clipboard.items = value.items
- },
- resetClipboard: (state) => {
- state.clipboard.key = ''
- state.clipboard.items = []
- },
- setSchedule: (state, value) => {
- state.schedule = value
- },
- setProgress: (state, value) => {
- state.progress = value
- }
-}
-
-export default mutations
diff --git a/assets/src/utils/api.js b/assets/src/utils/api.js
deleted file mode 100644
index 9d429062..00000000
--- a/assets/src/utils/api.js
+++ /dev/null
@@ -1,455 +0,0 @@
-import store from '@/store'
-
-const ssl = (window.location.protocol === 'https:')
-
-export function removePrefix (url) {
- if (url.startsWith('/files')) {
- url = url.slice(6)
- }
-
- if (url === '') url = '/'
- if (url[0] !== '/') url = '/' + url
- return url
-}
-
-export function fetch (url) {
- url = removePrefix(url)
-
- return new Promise((resolve, reject) => {
- let request = new window.XMLHttpRequest()
- request.open('GET', `${store.state.baseURL}/api/resource${url}`, true)
- if (!store.state.noAuth) request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
-
- request.onload = () => {
- switch (request.status) {
- case 200:
- resolve(JSON.parse(request.responseText))
- break
- default:
- reject(new Error(request.status))
- break
- }
- }
- request.onerror = (error) => reject(error)
- request.send()
- })
-}
-
-export function remove (url) {
- url = removePrefix(url)
-
- return new Promise((resolve, reject) => {
- let request = new window.XMLHttpRequest()
- request.open('DELETE', `${store.state.baseURL}/api/resource${url}`, true)
- if (!store.state.noAuth) request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
-
- request.onload = () => {
- if (request.status === 200) {
- resolve(request.responseText)
- } else {
- reject(request.responseText)
- }
- }
-
- request.onerror = (error) => reject(error)
- request.send()
- })
-}
-
-export function post (url, content = '', overwrite = false, onupload) {
- url = removePrefix(url)
-
- return new Promise((resolve, reject) => {
- let request = new window.XMLHttpRequest()
- request.open('POST', `${store.state.baseURL}/api/resource${url}`, true)
- if (!store.state.noAuth) request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
-
- if (typeof onupload === 'function') {
- request.upload.onprogress = onupload
- }
-
- if (overwrite) {
- request.setRequestHeader('Action', `override`)
- }
-
- request.onload = () => {
- if (request.status === 200) {
- resolve(request.responseText)
- } else if (request.status === 409) {
- reject(request.status)
- } else {
- reject(request.responseText)
- }
- }
-
- request.onerror = (error) => {
- reject(error)
- }
- request.send(content)
- })
-}
-
-export function put (url, content = '', publish = false, date = '') {
- url = removePrefix(url)
-
- return new Promise((resolve, reject) => {
- let request = new window.XMLHttpRequest()
- request.open('PUT', `${store.state.baseURL}/api/resource${url}`, true)
- if (!store.state.noAuth) request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
- request.setRequestHeader('Publish', publish)
-
- if (date !== '') {
- request.setRequestHeader('Schedule', date)
- }
-
- request.onload = () => {
- if (request.status === 200) {
- resolve(request.responseText)
- } else {
- reject(request.responseText)
- }
- }
-
- request.onerror = (error) => reject(error)
- request.send(content)
- })
-}
-
-function moveCopy (items, copy = false) {
- let promises = []
-
- for (let item of items) {
- let from = removePrefix(item.from)
- let to = removePrefix(item.to)
-
- promises.push(new Promise((resolve, reject) => {
- let request = new window.XMLHttpRequest()
- request.open('PATCH', `${store.state.baseURL}/api/resource${from}`, true)
- if (!store.state.noAuth) request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
- request.setRequestHeader('Destination', to)
-
- if (copy) {
- request.setRequestHeader('Action', 'copy')
- }
-
- request.onload = () => {
- if (request.status === 200) {
- resolve(request.responseText)
- } else {
- reject(request.responseText)
- }
- }
-
- request.onerror = (error) => reject(error)
- request.send()
- }))
- }
-
- return Promise.all(promises)
-}
-
-export function move (items) {
- return moveCopy(items)
-}
-
-export function copy (items) {
- return moveCopy(items, true)
-}
-
-export function checksum (url, algo) {
- url = removePrefix(url)
-
- return new Promise((resolve, reject) => {
- let request = new window.XMLHttpRequest()
- request.open('GET', `${store.state.baseURL}/api/checksum${url}?algo=${algo}`, true)
- if (!store.state.noAuth) request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
-
- request.onload = () => {
- if (request.status === 200) {
- resolve(request.responseText)
- } else {
- reject(request.responseText)
- }
- }
- request.onerror = (error) => reject(error)
- request.send()
- })
-}
-
-export function command (url, command, onmessage, onclose) {
- let protocol = (ssl ? 'wss:' : 'ws:')
- url = removePrefix(url)
- url = `${protocol}//${window.location.host}${store.state.baseURL}/api/command${url}`
-
- let conn = new window.WebSocket(url)
- conn.onopen = () => conn.send(command)
- conn.onmessage = onmessage
- conn.onclose = onclose
-}
-
-export function search (url, search, onmessage, onclose) {
- let protocol = (ssl ? 'wss:' : 'ws:')
- url = removePrefix(url)
- url = `${protocol}//${window.location.host}${store.state.baseURL}/api/search${url}`
-
- let conn = new window.WebSocket(url)
- conn.onopen = () => conn.send(search)
- conn.onmessage = onmessage
- conn.onclose = onclose
-}
-
-export function download (format, ...files) {
- let url = `${store.state.baseURL}/api/download`
-
- if (files.length === 1) {
- url += removePrefix(files[0]) + '?'
- } else {
- let arg = ''
-
- for (let file of files) {
- arg += removePrefix(file) + ','
- }
-
- arg = arg.substring(0, arg.length - 1)
- arg = encodeURIComponent(arg)
- url += `/?files=${arg}&`
- }
-
- if (format !== null) {
- url += `&format=${format}`
- }
-
- window.open(url)
-}
-
-export function getSettings () {
- return new Promise((resolve, reject) => {
- let request = new window.XMLHttpRequest()
- request.open('GET', `${store.state.baseURL}/api/settings/`, true)
- if (!store.state.noAuth) request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
-
- request.onload = () => {
- switch (request.status) {
- case 200:
- resolve(JSON.parse(request.responseText))
- break
- default:
- reject(request.responseText)
- break
- }
- }
- request.onerror = (error) => reject(error)
- request.send()
- })
-}
-
-export function updateSettings (param, which) {
- return new Promise((resolve, reject) => {
- let data = {
- what: 'settings',
- which: which,
- data: {}
- }
-
- data.data[which] = param
-
- let request = new window.XMLHttpRequest()
- request.open('PUT', `${store.state.baseURL}/api/settings/`, true)
- if (!store.state.noAuth) request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
-
- request.onload = () => {
- switch (request.status) {
- case 200:
- resolve()
- break
- default:
- reject(request.responseText)
- break
- }
- }
- request.onerror = (error) => { reject(error) }
- request.send(JSON.stringify(data))
- })
-}
-
-// USERS
-
-export function getUsers () {
- return new Promise((resolve, reject) => {
- let request = new window.XMLHttpRequest()
- request.open('GET', `${store.state.baseURL}/api/users/`, true)
- if (!store.state.noAuth) request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
-
- request.onload = () => {
- switch (request.status) {
- case 200:
- resolve(JSON.parse(request.responseText))
- break
- default:
- reject(request.responseText)
- break
- }
- }
- request.onerror = (error) => reject(error)
- request.send()
- })
-}
-
-export function getUser (id) {
- return new Promise((resolve, reject) => {
- let request = new window.XMLHttpRequest()
- request.open('GET', `${store.state.baseURL}/api/users/${id}`, true)
- if (!store.state.noAuth) request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
-
- request.onload = () => {
- switch (request.status) {
- case 200:
- resolve(JSON.parse(request.responseText))
- break
- default:
- reject(request.responseText)
- break
- }
- }
- request.onerror = (error) => reject(error)
- request.send()
- })
-}
-
-export function newUser (user) {
- return new Promise((resolve, reject) => {
- let request = new window.XMLHttpRequest()
- request.open('POST', `${store.state.baseURL}/api/users/`, true)
- if (!store.state.noAuth) request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
-
- request.onload = () => {
- switch (request.status) {
- case 201:
- resolve(request.getResponseHeader('Location'))
- break
- default:
- reject(request.responseText)
- break
- }
- }
- request.onerror = (error) => reject(error)
- request.send(JSON.stringify({
- what: 'user',
- which: 'new',
- data: user
- }))
- })
-}
-
-export function updateUser (user, which) {
- return new Promise((resolve, reject) => {
- let request = new window.XMLHttpRequest()
- request.open('PUT', `${store.state.baseURL}/api/users/${user.ID}`, true)
- if (!store.state.noAuth) request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
-
- request.onload = () => {
- switch (request.status) {
- case 200:
- resolve(request.getResponseHeader('Location'))
- break
- default:
- reject(request.responseText)
- break
- }
- }
- request.onerror = (error) => reject(error)
- request.send(JSON.stringify({
- what: 'user',
- which: (typeof which === 'string') ? which : 'all',
- data: user
- }))
- })
-}
-
-export function deleteUser (id) {
- return new Promise((resolve, reject) => {
- let request = new window.XMLHttpRequest()
- request.open('DELETE', `${store.state.baseURL}/api/users/${id}`, true)
- if (!store.state.noAuth) request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
-
- request.onload = () => {
- switch (request.status) {
- case 200:
- resolve()
- break
- default:
- reject(request.responseText)
- break
- }
- }
- request.onerror = (error) => reject(error)
- request.send()
- })
-}
-
-// SHARE
-
-export function getShare (url) {
- url = removePrefix(url)
-
- return new Promise((resolve, reject) => {
- let request = new window.XMLHttpRequest()
- request.open('GET', `${store.state.baseURL}/api/share${url}`, true)
- if (!store.state.noAuth) request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
-
- request.onload = () => {
- if (request.status === 200) {
- resolve(JSON.parse(request.responseText))
- } else {
- reject(request.status)
- }
- }
-
- request.onerror = (error) => reject(error)
- request.send()
- })
-}
-
-export function deleteShare (hash) {
- return new Promise((resolve, reject) => {
- let request = new window.XMLHttpRequest()
- request.open('DELETE', `${store.state.baseURL}/api/share/${hash}`, true)
- if (!store.state.noAuth) request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
-
- request.onload = () => {
- if (request.status === 200) {
- resolve()
- } else {
- reject(request.status)
- }
- }
-
- request.onerror = (error) => reject(error)
- request.send()
- })
-}
-
-export function share (url, expires = '', unit = 'hours') {
- url = removePrefix(url)
- url = `${store.state.baseURL}/api/share${url}`
- if (expires !== '') {
- url += `?expires=${expires}&unit=${unit}`
- }
-
- return new Promise((resolve, reject) => {
- let request = new window.XMLHttpRequest()
- request.open('POST', url, true)
- if (!store.state.noAuth) request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
-
- request.onload = () => {
- if (request.status === 200) {
- resolve(JSON.parse(request.responseText))
- } else {
- reject(request.responseStatus)
- }
- }
-
- request.onerror = (error) => reject(error)
- request.send()
- })
-}
diff --git a/assets/src/utils/auth.js b/assets/src/utils/auth.js
deleted file mode 100644
index a5130c91..00000000
--- a/assets/src/utils/auth.js
+++ /dev/null
@@ -1,69 +0,0 @@
-import cookie from './cookie'
-import store from '@/store'
-import router from '@/router'
-import { Base64 } from 'js-base64'
-
-function parseToken (token) {
- let path = store.state.baseURL
- if (path === '') path = '/'
- document.cookie = `auth=${token}; max-age=86400; path=${path}`
- let res = token.split('.')
- let user = JSON.parse(Base64.decode(res[1]))
- if (!user.commands) {
- user.commands = []
- }
-
- store.commit('setJWT', token)
- store.commit('setUser', user)
-}
-
-function loggedIn () {
- return new Promise((resolve, reject) => {
- let request = new window.XMLHttpRequest()
- request.open('GET', `${store.state.baseURL}/api/auth/renew`, true)
- if (!store.state.noAuth) request.setRequestHeader('Authorization', `Bearer ${cookie('auth')}`)
-
- request.onload = () => {
- if (request.status === 200) {
- parseToken(request.responseText)
- resolve()
- } else {
- reject(new Error(request.responseText))
- }
- }
- request.onerror = () => reject(new Error('Could not finish the request'))
- request.send()
- })
-}
-
-function login (user, password, captcha) {
- let data = {username: user, password: password, recaptcha: captcha}
- return new Promise((resolve, reject) => {
- let request = new window.XMLHttpRequest()
- request.open('POST', `${store.state.baseURL}/api/auth/get`, true)
-
- request.onload = () => {
- if (request.status === 200) {
- parseToken(request.responseText)
- resolve()
- } else {
- reject(request.responseText)
- }
- }
- request.onerror = () => reject(new Error('Could not finish the request'))
- request.send(JSON.stringify(data))
- })
-}
-
-function logout () {
- let path = store.state.baseURL
- if (path === '') path = '/'
- document.cookie = `auth='nothing'; max-age=0; path=${path}`
- router.push({path: '/login'})
-}
-
-export default {
- loggedIn: loggedIn,
- login: login,
- logout: logout
-}
diff --git a/assets/src/utils/buttons.js b/assets/src/utils/buttons.js
deleted file mode 100644
index 0d266e2b..00000000
--- a/assets/src/utils/buttons.js
+++ /dev/null
@@ -1,66 +0,0 @@
-function loading (button) {
- let el = document.querySelector(`#${button}-button > i`)
-
- if (el === undefined || el === null) {
- console.log('Error getting button ' + button)
- return
- }
-
- el.dataset.icon = el.innerHTML
- el.style.opacity = 0
-
- setTimeout(() => {
- el.classList.add('spin')
- el.innerHTML = 'autorenew'
- el.style.opacity = 1
- }, 100)
-}
-
-function done (button) {
- let el = document.querySelector(`#${button}-button > i`)
-
- if (el === undefined || el === null) {
- console.log('Error getting button ' + button)
- return
- }
-
- el.style.opacity = 0
-
- setTimeout(() => {
- el.classList.remove('spin')
- el.innerHTML = el.dataset.icon
- el.style.opacity = 1
- }, 100)
-}
-
-function success (button) {
- let el = document.querySelector(`#${button}-button > i`)
-
- if (el === undefined || el === null) {
- console.log('Error getting button ' + button)
- return
- }
-
- el.style.opacity = 0
-
- setTimeout(() => {
- el.classList.remove('spin')
- el.innerHTML = 'done'
- el.style.opacity = 1
-
- setTimeout(() => {
- el.style.opacity = 0
-
- setTimeout(() => {
- el.innerHTML = el.dataset.icon
- el.style.opacity = 1
- }, 100)
- }, 500)
- }, 100)
-}
-
-export default {
- loading,
- done,
- success
-}
diff --git a/assets/src/utils/codemirror.js b/assets/src/utils/codemirror.js
deleted file mode 100644
index d8c574fc..00000000
--- a/assets/src/utils/codemirror.js
+++ /dev/null
@@ -1,60 +0,0 @@
-// Most of the code from this file comes from:
-// https://github.com/codemirror/CodeMirror/blob/master/addon/mode/loadmode.js
-import * as CodeMirror from 'codemirror'
-import store from '@/store'
-
-// Make CodeMirror available globally so the modes' can register themselves.
-window.CodeMirror = CodeMirror
-CodeMirror.modeURL = store.state.baseURL + '/static/js/codemirror/mode/%N/%N.js'
-
-var loading = {}
-
-function splitCallback (cont, n) {
- var countDown = n
- return function () {
- if (--countDown === 0) cont()
- }
-}
-
-function ensureDeps (mode, cont) {
- var deps = CodeMirror.modes[mode].dependencies
- if (!deps) return cont()
- var missing = []
- for (var i = 0; i < deps.length; ++i) {
- if (!CodeMirror.modes.hasOwnProperty(deps[i])) missing.push(deps[i])
- }
- if (!missing.length) return cont()
- var split = splitCallback(cont, missing.length)
- for (i = 0; i < missing.length; ++i) CodeMirror.requireMode(missing[i], split)
-}
-
-CodeMirror.requireMode = function (mode, cont) {
- if (typeof mode !== 'string') mode = mode.name
- if (CodeMirror.modes.hasOwnProperty(mode)) return ensureDeps(mode, cont)
- if (loading.hasOwnProperty(mode)) return loading[mode].push(cont)
-
- var file = CodeMirror.modeURL.replace(/%N/g, mode)
-
- var script = document.createElement('script')
- script.src = file
- var others = document.getElementsByTagName('script')[0]
- var list = loading[mode] = [cont]
-
- CodeMirror.on(script, 'load', function () {
- ensureDeps(mode, function () {
- for (var i = 0; i < list.length; ++i) list[i]()
- })
- })
-
- others.parentNode.insertBefore(script, others)
-}
-
-CodeMirror.autoLoadMode = function (instance, mode) {
- if (CodeMirror.modes.hasOwnProperty(mode)) return
-
- CodeMirror.requireMode(mode, function () {
- instance.setOption('mode', mode)
- })
-}
-
-export default CodeMirror
diff --git a/assets/src/utils/cookie.js b/assets/src/utils/cookie.js
deleted file mode 100644
index 5b6b2a86..00000000
--- a/assets/src/utils/cookie.js
+++ /dev/null
@@ -1,4 +0,0 @@
-export default function (name) {
- let re = new RegExp('(?:(?:^|.*;\\s*)' + name + '\\s*\\=\\s*([^;]*).*$)|^.*$')
- return document.cookie.replace(re, '$1')
-}
diff --git a/assets/src/utils/css.js b/assets/src/utils/css.js
deleted file mode 100644
index eea62472..00000000
--- a/assets/src/utils/css.js
+++ /dev/null
@@ -1,28 +0,0 @@
-export default function getRule (rules) {
- for (let i = 0; i < rules.length; i++) {
- rules[i] = rules[i].toLowerCase()
- }
-
- let result = null
- let find = Array.prototype.find
-
- find.call(document.styleSheets, styleSheet => {
- result = find.call(styleSheet.cssRules, cssRule => {
- let found = false
-
- if (cssRule instanceof window.CSSStyleRule) {
- for (let i = 0; i < rules.length; i++) {
- if (cssRule.selectorText.toLowerCase() === rules[i]) {
- found = true
- }
- }
- }
-
- return found
- })
-
- return result != null
- })
-
- return result
-}
diff --git a/assets/src/utils/url.js b/assets/src/utils/url.js
deleted file mode 100644
index 832314fd..00000000
--- a/assets/src/utils/url.js
+++ /dev/null
@@ -1,12 +0,0 @@
-function removeLastDir (url) {
- var arr = url.split('/')
- if (arr.pop() === '') {
- arr.pop()
- }
-
- return arr.join('/')
-}
-
-export default {
- removeLastDir: removeLastDir
-}
diff --git a/assets/src/views/Files.vue b/assets/src/views/Files.vue
deleted file mode 100644
index 10a2fa05..00000000
--- a/assets/src/views/Files.vue
+++ /dev/null
@@ -1,231 +0,0 @@
-
-
-
-
- home
-
-
-
- keyboard_arrow_right
- {{ link.name }}
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('files.loading') }}
-
-
-
-
-
-
diff --git a/assets/src/views/Layout.vue b/assets/src/views/Layout.vue
deleted file mode 100644
index d2bc6b9d..00000000
--- a/assets/src/views/Layout.vue
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
-
-
-
diff --git a/assets/src/views/Login.vue b/assets/src/views/Login.vue
deleted file mode 100644
index fe3449bf..00000000
--- a/assets/src/views/Login.vue
+++ /dev/null
@@ -1,71 +0,0 @@
-
-
-
-
-
diff --git a/assets/src/views/Settings.vue b/assets/src/views/Settings.vue
deleted file mode 100644
index 39db5de2..00000000
--- a/assets/src/views/Settings.vue
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
- {{ $t('settings.profileSettings') }}
- {{ $t('settings.globalSettings') }}
- {{ $t('settings.userManagement') }}
-
-
-
-
-
-
-
diff --git a/assets/src/views/errors/403.vue b/assets/src/views/errors/403.vue
deleted file mode 100644
index 5c7d9489..00000000
--- a/assets/src/views/errors/403.vue
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
- error
- {{ $t('errors.forbidden') }}
-
-
-
-
-
-
diff --git a/assets/src/views/errors/404.vue b/assets/src/views/errors/404.vue
deleted file mode 100644
index 66961fcc..00000000
--- a/assets/src/views/errors/404.vue
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
- gps_off
- {{ $t('errors.notFound') }}
-
-
-
-
-
-
diff --git a/assets/src/views/errors/500.vue b/assets/src/views/errors/500.vue
deleted file mode 100644
index f3d4a195..00000000
--- a/assets/src/views/errors/500.vue
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
- error_outline
- {{ $t('errors.internal') }}
-
-
-
-
-
-
diff --git a/assets/src/views/settings/Global.vue b/assets/src/views/settings/Global.vue
deleted file mode 100644
index 50a6bf30..00000000
--- a/assets/src/views/settings/Global.vue
+++ /dev/null
@@ -1,187 +0,0 @@
-
-
-
-
-
-
-
-
-
{{ $t('settings.commands') }}
-
-
-
-
{{ $t('settings.commandsHelp') }}
-
-
-
-
- {{ capitalize(command.name) }}
- arrow_drop_down
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/assets/src/views/settings/Profile.vue b/assets/src/views/settings/Profile.vue
deleted file mode 100644
index bcf11738..00000000
--- a/assets/src/views/settings/Profile.vue
+++ /dev/null
@@ -1,109 +0,0 @@
-
-
-
-
-
{{ $t('settings.profileSettings') }}
-
-
-
-
{{ $t('settings.language') }}
-
-
{{ $t('settings.customStylesheet') }}
-
-
-
-
-
-
-
-
-
-
-
{{ $t('settings.changePassword') }}
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/assets/src/views/settings/User.vue b/assets/src/views/settings/User.vue
deleted file mode 100644
index 53a4175b..00000000
--- a/assets/src/views/settings/User.vue
+++ /dev/null
@@ -1,319 +0,0 @@
-
-
-
-
-
{{ $t('settings.newUser') }}
- {{ $t('settings.user') }} {{ username }}
-
-
-
-
- {{ $t('settings.username') }}
-
-
-
-
- {{ $t('settings.password') }}
-
-
-
-
- {{ $t('settings.scope') }}
-
-
-
-
- {{ $t('settings.language') }}
-
-
-
-
{{ $t('settings.lockPassword') }}
-
-
{{ $t('settings.permissions') }}
-
{{ $t('settings.permissionsHelp') }}
-
-
{{ $t('settings.administrator') }}
-
{{ $t('settings.allowNew') }}
-
{{ $t('settings.allowEdit') }}
-
{{ $t('settings.allowCommands') }}
-
{{ $t('settings.allowPublish') }}
-
-
{{ $t('settings.userCommands') }}
-
{{ $t('settings.userCommandsHelp') }} git svn hg .
-
-
-
{{ $t('settings.rules') }}
-
-
{{ $t('settings.rulesHelp1') }}
-
-
- allow
disallow
regex
-
-
-
{{ $t('settings.examples') }}
-
-
- disallow regex [\\\/]\..+
- {{ $t('settings.ruleExample1') }}
- disallow /Caddyfile
- {{ $t('settings.ruleExample2') }}
-
-
-
-
-
{{ $t('settings.customStylesheet') }}
-
-
-
-
-
- {{ $t('buttons.delete') }}
-
-
-
-
-
-
-
Are you sure you want to delete this user?
-
-
-
-
- {{ $t('buttons.cancel') }}
-
-
- {{ $t('buttons.delete') }}
-
-
-
-
-
-
-
diff --git a/assets/src/views/settings/Users.vue b/assets/src/views/settings/Users.vue
deleted file mode 100644
index 355aaaed..00000000
--- a/assets/src/views/settings/Users.vue
+++ /dev/null
@@ -1,48 +0,0 @@
-
-
-
-
{{ $t('settings.users') }}
- {{ $t('buttons.new') }}
-
-
-
-
-
- {{ $t('settings.username') }}
- {{ $t('settings.admin') }}
- {{ $t('settings.scope') }}
-
-
-
-
- {{ user.username }}
- done close
- {{ user.filesystem }}
-
- mode_edit
-
-
-
-
-
-
-
-
diff --git a/assets/static/img/icons/android-chrome-192x192.png b/assets/static/img/icons/android-chrome-192x192.png
deleted file mode 100644
index 685cdea9..00000000
Binary files a/assets/static/img/icons/android-chrome-192x192.png and /dev/null differ
diff --git a/assets/static/img/icons/android-chrome-512x512.png b/assets/static/img/icons/android-chrome-512x512.png
deleted file mode 100644
index be4f0526..00000000
Binary files a/assets/static/img/icons/android-chrome-512x512.png and /dev/null differ
diff --git a/assets/static/img/icons/apple-touch-icon-120x120.png b/assets/static/img/icons/apple-touch-icon-120x120.png
deleted file mode 100644
index f204c14b..00000000
Binary files a/assets/static/img/icons/apple-touch-icon-120x120.png and /dev/null differ
diff --git a/assets/static/img/icons/apple-touch-icon-152x152.png b/assets/static/img/icons/apple-touch-icon-152x152.png
deleted file mode 100644
index f7f0e00f..00000000
Binary files a/assets/static/img/icons/apple-touch-icon-152x152.png and /dev/null differ
diff --git a/assets/static/img/icons/apple-touch-icon-180x180.png b/assets/static/img/icons/apple-touch-icon-180x180.png
deleted file mode 100644
index 8c3ee3a9..00000000
Binary files a/assets/static/img/icons/apple-touch-icon-180x180.png and /dev/null differ
diff --git a/assets/static/img/icons/apple-touch-icon-60x60.png b/assets/static/img/icons/apple-touch-icon-60x60.png
deleted file mode 100644
index 00f82e94..00000000
Binary files a/assets/static/img/icons/apple-touch-icon-60x60.png and /dev/null differ
diff --git a/assets/static/img/icons/apple-touch-icon-76x76.png b/assets/static/img/icons/apple-touch-icon-76x76.png
deleted file mode 100644
index d9cc0f35..00000000
Binary files a/assets/static/img/icons/apple-touch-icon-76x76.png and /dev/null differ
diff --git a/assets/static/img/icons/apple-touch-icon.png b/assets/static/img/icons/apple-touch-icon.png
deleted file mode 100644
index 685cdea9..00000000
Binary files a/assets/static/img/icons/apple-touch-icon.png and /dev/null differ
diff --git a/assets/static/img/icons/favicon-16x16.png b/assets/static/img/icons/favicon-16x16.png
deleted file mode 100644
index 8de7c05e..00000000
Binary files a/assets/static/img/icons/favicon-16x16.png and /dev/null differ
diff --git a/assets/static/img/icons/favicon-32x32.png b/assets/static/img/icons/favicon-32x32.png
deleted file mode 100644
index 9b74a094..00000000
Binary files a/assets/static/img/icons/favicon-32x32.png and /dev/null differ
diff --git a/assets/static/img/icons/favicon.ico b/assets/static/img/icons/favicon.ico
deleted file mode 100644
index cc2b4690..00000000
Binary files a/assets/static/img/icons/favicon.ico and /dev/null differ
diff --git a/assets/static/img/icons/msapplication-icon-144x144.png b/assets/static/img/icons/msapplication-icon-144x144.png
deleted file mode 100644
index a7db463f..00000000
Binary files a/assets/static/img/icons/msapplication-icon-144x144.png and /dev/null differ
diff --git a/assets/static/img/icons/mstile-150x150.png b/assets/static/img/icons/mstile-150x150.png
deleted file mode 100644
index 8515f250..00000000
Binary files a/assets/static/img/icons/mstile-150x150.png and /dev/null differ
diff --git a/assets/static/manifest.json b/assets/static/manifest.json
deleted file mode 100644
index 5e776eba..00000000
--- a/assets/static/manifest.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "name": "File Manager",
- "short_name": "File Manager",
- "icons": [
- {
- "src": "{{ .BaseURL }}/static/img/icons/android-chrome-192x192.png",
- "sizes": "192x192",
- "type": "image/png"
- },
- {
- "src": "{{ .BaseURL }}/static/img/icons/android-chrome-512x512.png",
- "sizes": "512x512",
- "type": "image/png"
- }
- ],
- "start_url": "{{ .BaseURL }}/",
- "display": "standalone",
- "background_color": "#ffffff",
- "theme_color": "#2979ff"
-}
diff --git a/assets/static/share/404.html b/assets/static/share/404.html
deleted file mode 100644
index 155804a9..00000000
--- a/assets/static/share/404.html
+++ /dev/null
@@ -1,50 +0,0 @@
-
-
-
-
-
-
- File Manager
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
404 Not Found
-
-
diff --git a/assets/static/share/index.html b/assets/static/share/index.html
deleted file mode 100644
index 3a863fd1..00000000
--- a/assets/static/share/index.html
+++ /dev/null
@@ -1,86 +0,0 @@
-
-
-
-
-
-
- {{ .File.Name }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Download {{ if .File.IsDir }}Folder{{ else }}File{{ end }}
-
- {{ if .File.IsDir -}}
-
-
-
-
- {{ else -}}
-
-
-
-
- {{ end -}}
-
{{ .File.Name }}
-
-
-
-
diff --git a/bolt/config.go b/bolt/config.go
index e3d7fb81..2ecfc663 100644
--- a/bolt/config.go
+++ b/bolt/config.go
@@ -2,7 +2,7 @@ package bolt
import (
"github.com/asdine/storm"
- fm "github.com/hacdias/filemanager"
+ fm "github.com/filebrowser/filebrowser"
)
// ConfigStore is a configuration store.
diff --git a/bolt/share.go b/bolt/share.go
index 07ab628a..df4c5796 100644
--- a/bolt/share.go
+++ b/bolt/share.go
@@ -3,7 +3,7 @@ package bolt
import (
"github.com/asdine/storm"
"github.com/asdine/storm/q"
- fm "github.com/hacdias/filemanager"
+ fm "github.com/filebrowser/filebrowser"
)
// ShareStore is a shareable links store.
diff --git a/bolt/users.go b/bolt/users.go
index 6189016b..58976306 100644
--- a/bolt/users.go
+++ b/bolt/users.go
@@ -4,7 +4,7 @@ import (
"reflect"
"github.com/asdine/storm"
- fm "github.com/hacdias/filemanager"
+ fm "github.com/filebrowser/filebrowser"
)
// UsersStore is a users store.
diff --git a/caddy/filemanager/filemanager.go b/caddy/filemanager/filemanager.go
deleted file mode 100644
index 979854cc..00000000
--- a/caddy/filemanager/filemanager.go
+++ /dev/null
@@ -1,55 +0,0 @@
-// Package filemanager provides middleware for managing files in a directory
-// when directory path is requested instead of a specific file. Based on browse
-// middleware.
-package filemanager
-
-import (
- "net/http"
-
- "github.com/hacdias/filemanager"
- "github.com/hacdias/filemanager/caddy/parser"
- h "github.com/hacdias/filemanager/http"
- "github.com/mholt/caddy"
- "github.com/mholt/caddy/caddyhttp/httpserver"
-)
-
-func init() {
- caddy.RegisterPlugin("filemanager", caddy.Plugin{
- ServerType: "http",
- Action: setup,
- })
-}
-
-type plugin struct {
- Next httpserver.Handler
- Configs []*filemanager.FileManager
-}
-
-// ServeHTTP determines if the request is for this plugin, and if all prerequisites are met.
-func (f plugin) ServeHTTP(w http.ResponseWriter, r *http.Request) (int, error) {
- for i := range f.Configs {
- // Checks if this Path should be handled by File Manager.
- if !httpserver.Path(r.URL.Path).Matches(f.Configs[i].BaseURL) {
- continue
- }
-
- h.Handler(f.Configs[i]).ServeHTTP(w, r)
- return 0, nil
- }
-
- return f.Next.ServeHTTP(w, r)
-}
-
-// setup configures a new FileManager middleware instance.
-func setup(c *caddy.Controller) error {
- configs, err := parser.Parse(c, "")
- if err != nil {
- return err
- }
-
- httpserver.GetConfig(c).AddMiddleware(func(next httpserver.Handler) httpserver.Handler {
- return plugin{Configs: configs, Next: next}
- })
-
- return nil
-}
diff --git a/caddy/hugo/hugo.go b/caddy/hugo/hugo.go
deleted file mode 100644
index dedb24ce..00000000
--- a/caddy/hugo/hugo.go
+++ /dev/null
@@ -1,52 +0,0 @@
-package hugo
-
-import (
- "net/http"
-
- "github.com/hacdias/filemanager"
- "github.com/hacdias/filemanager/caddy/parser"
- h "github.com/hacdias/filemanager/http"
- "github.com/mholt/caddy"
- "github.com/mholt/caddy/caddyhttp/httpserver"
-)
-
-func init() {
- caddy.RegisterPlugin("hugo", caddy.Plugin{
- ServerType: "http",
- Action: setup,
- })
-}
-
-type plugin struct {
- Next httpserver.Handler
- Configs []*filemanager.FileManager
-}
-
-// ServeHTTP determines if the request is for this plugin, and if all prerequisites are met.
-func (f plugin) ServeHTTP(w http.ResponseWriter, r *http.Request) (int, error) {
- for i := range f.Configs {
- // Checks if this Path should be handled by File Manager.
- if !httpserver.Path(r.URL.Path).Matches(f.Configs[i].BaseURL) {
- continue
- }
-
- h.Handler(f.Configs[i]).ServeHTTP(w, r)
- return 0, nil
- }
-
- return f.Next.ServeHTTP(w, r)
-}
-
-// setup configures a new FileManager middleware instance.
-func setup(c *caddy.Controller) error {
- configs, err := parser.Parse(c, "hugo")
- if err != nil {
- return err
- }
-
- httpserver.GetConfig(c).AddMiddleware(func(next httpserver.Handler) httpserver.Handler {
- return plugin{Configs: configs, Next: next}
- })
-
- return nil
-}
diff --git a/caddy/jekyll/jekyll.go b/caddy/jekyll/jekyll.go
deleted file mode 100644
index b41d4f5e..00000000
--- a/caddy/jekyll/jekyll.go
+++ /dev/null
@@ -1,52 +0,0 @@
-package jekyll
-
-import (
- "net/http"
-
- "github.com/hacdias/filemanager"
- "github.com/hacdias/filemanager/caddy/parser"
- h "github.com/hacdias/filemanager/http"
- "github.com/mholt/caddy"
- "github.com/mholt/caddy/caddyhttp/httpserver"
-)
-
-func init() {
- caddy.RegisterPlugin("jekyll", caddy.Plugin{
- ServerType: "http",
- Action: setup,
- })
-}
-
-type plugin struct {
- Next httpserver.Handler
- Configs []*filemanager.FileManager
-}
-
-// ServeHTTP determines if the request is for this plugin, and if all prerequisites are met.
-func (f plugin) ServeHTTP(w http.ResponseWriter, r *http.Request) (int, error) {
- for i := range f.Configs {
- // Checks if this Path should be handled by File Manager.
- if !httpserver.Path(r.URL.Path).Matches(f.Configs[i].BaseURL) {
- continue
- }
-
- h.Handler(f.Configs[i]).ServeHTTP(w, r)
- return 0, nil
- }
-
- return f.Next.ServeHTTP(w, r)
-}
-
-// setup configures a new FileManager middleware instance.
-func setup(c *caddy.Controller) error {
- configs, err := parser.Parse(c, "jekyll")
- if err != nil {
- return err
- }
-
- httpserver.GetConfig(c).AddMiddleware(func(next httpserver.Handler) httpserver.Handler {
- return plugin{Configs: configs, Next: next}
- })
-
- return nil
-}
diff --git a/caddy/parser/parser.go b/caddy/parser/parser.go
deleted file mode 100644
index ab8de961..00000000
--- a/caddy/parser/parser.go
+++ /dev/null
@@ -1,295 +0,0 @@
-package parser
-
-import (
- "crypto/md5"
- "encoding/hex"
- "fmt"
- "io/ioutil"
- "os"
- "path/filepath"
- "strconv"
- "strings"
-
- "github.com/asdine/storm"
- "github.com/hacdias/filemanager"
- "github.com/hacdias/filemanager/bolt"
- "github.com/hacdias/filemanager/staticgen"
- "github.com/hacdias/fileutils"
- "github.com/mholt/caddy"
- "github.com/mholt/caddy/caddyhttp/httpserver"
-)
-
-var databases = map[string]*storm.DB{}
-
-// Parse ...
-func Parse(c *caddy.Controller, plugin string) ([]*filemanager.FileManager, error) {
- var (
- configs []*filemanager.FileManager
- err error
- )
-
- for c.Next() {
- u := &filemanager.User{
- Locale: "en",
- AllowCommands: true,
- AllowEdit: true,
- AllowNew: true,
- AllowPublish: true,
- Commands: []string{"git", "svn", "hg"},
- CSS: "",
- ViewMode: "mosaic",
- Rules: []*filemanager.Rule{{
- Regex: true,
- Allow: false,
- Regexp: &filemanager.Regexp{Raw: "\\/\\..+"},
- }},
- }
-
- baseURL := "/"
- scope := "."
- database := ""
- noAuth := false
- reCaptchaKey := ""
- reCaptchaSecret := ""
-
- if plugin != "" {
- baseURL = "/admin"
- }
-
- // Get the baseURL and scope
- args := c.RemainingArgs()
-
- if plugin == "" {
- if len(args) >= 1 {
- baseURL = args[0]
- }
-
- if len(args) > 1 {
- scope = args[1]
- }
- } else {
- if len(args) >= 1 {
- scope = args[0]
- }
-
- if len(args) > 1 {
- baseURL = args[1]
- }
- }
-
- for c.NextBlock() {
- switch c.Val() {
- case "database":
- if !c.NextArg() {
- return nil, c.ArgErr()
- }
-
- database = c.Val()
- case "locale":
- if !c.NextArg() {
- return nil, c.ArgErr()
- }
-
- u.Locale = c.Val()
- case "allow_commands":
- if !c.NextArg() {
- u.AllowCommands = true
- continue
- }
-
- u.AllowCommands, err = strconv.ParseBool(c.Val())
- if err != nil {
- return nil, err
- }
- case "allow_edit":
- if !c.NextArg() {
- u.AllowEdit = true
- continue
- }
-
- u.AllowEdit, err = strconv.ParseBool(c.Val())
- if err != nil {
- return nil, err
- }
- case "allow_new":
- if !c.NextArg() {
- u.AllowNew = true
- continue
- }
-
- u.AllowNew, err = strconv.ParseBool(c.Val())
- if err != nil {
- return nil, err
- }
- case "allow_publish":
- if !c.NextArg() {
- u.AllowPublish = true
- continue
- }
-
- u.AllowPublish, err = strconv.ParseBool(c.Val())
- if err != nil {
- return nil, err
- }
- case "commands":
- if !c.NextArg() {
- return nil, c.ArgErr()
- }
-
- u.Commands = strings.Split(c.Val(), " ")
- case "css":
- if !c.NextArg() {
- return nil, c.ArgErr()
- }
-
- file := c.Val()
- css, err := ioutil.ReadFile(file)
- if err != nil {
- return nil, err
- }
-
- u.CSS = string(css)
- case "view_mode":
- if !c.NextArg() {
- return nil, c.ArgErr()
- }
-
- u.ViewMode = c.Val()
- if u.ViewMode != filemanager.MosaicViewMode && u.ViewMode != filemanager.ListViewMode {
- return nil, c.ArgErr()
- }
- case "recaptcha_key":
- if !c.NextArg() {
- return nil, c.ArgErr()
- }
-
- reCaptchaKey = c.Val()
- case "recaptcha_secret":
- if !c.NextArg() {
- return nil, c.ArgErr()
- }
-
- reCaptchaSecret = c.Val()
- case "no_auth":
- if !c.NextArg() {
- noAuth = true
- continue
- }
-
- noAuth, err = strconv.ParseBool(c.Val())
- if err != nil {
- return nil, err
- }
- }
- }
-
- caddyConf := httpserver.GetConfig(c)
-
- path := filepath.Join(caddy.AssetsPath(), "filemanager")
- err := os.MkdirAll(path, 0700)
- if err != nil {
- return nil, err
- }
-
- // if there is a database path and it is not absolute,
- // it will be relative to Caddy folder.
- if !filepath.IsAbs(database) && database != "" {
- database = filepath.Join(path, database)
- }
-
- // If there is no database path on the settings,
- // store one in .caddy/filemanager/name.db.
- if database == "" {
- // The name of the database is the hashed value of a string composed
- // by the host, address path and the baseurl of this File Manager
- // instance.
- hasher := md5.New()
- hasher.Write([]byte(caddyConf.Addr.Host + caddyConf.Addr.Path + baseURL))
- sha := hex.EncodeToString(hasher.Sum(nil))
- database = filepath.Join(path, sha+".db")
-
- fmt.Println("[WARNING] A database is going to be created for your File Manager instance at " + database +
- ". It is highly recommended that you set the 'database' option to '" + sha + ".db'\n")
- }
-
- u.Scope = scope
- u.FileSystem = fileutils.Dir(scope)
-
- var db *storm.DB
- if stored, ok := databases[database]; ok {
- db = stored
- } else {
- db, err = storm.Open(database)
- databases[database] = db
- }
-
- if err != nil {
- return nil, err
- }
-
- m := &filemanager.FileManager{
- NoAuth: noAuth,
- BaseURL: "",
- PrefixURL: "",
- ReCaptchaKey: reCaptchaKey,
- ReCaptchaSecret: reCaptchaSecret,
- DefaultUser: u,
- Store: &filemanager.Store{
- Config: bolt.ConfigStore{DB: db},
- Users: bolt.UsersStore{DB: db},
- Share: bolt.ShareStore{DB: db},
- },
- NewFS: func(scope string) filemanager.FileSystem {
- return fileutils.Dir(scope)
- },
- }
-
- err = m.Setup()
- if err != nil {
- return nil, err
- }
-
- switch plugin {
- case "hugo":
- // Initialize the default settings for Hugo.
- hugo := &staticgen.Hugo{
- Root: scope,
- Public: filepath.Join(scope, "public"),
- Args: []string{},
- CleanPublic: true,
- }
-
- // Attaches Hugo plugin to this file manager instance.
- err = m.Attach(hugo)
- if err != nil {
- return nil, err
- }
- case "jekyll":
- // Initialize the default settings for Jekyll.
- jekyll := &staticgen.Jekyll{
- Root: scope,
- Public: filepath.Join(scope, "_site"),
- Args: []string{},
- CleanPublic: true,
- }
-
- // Attaches Hugo plugin to this file manager instance.
- err = m.Attach(jekyll)
- if err != nil {
- return nil, err
- }
- }
-
- if err != nil {
- return nil, err
- }
-
- m.NoAuth = noAuth
- m.SetBaseURL(baseURL)
- m.SetPrefixURL(strings.TrimSuffix(caddyConf.Addr.Path, "/"))
-
- configs = append(configs, m)
- }
-
- return configs, nil
-}
diff --git a/cmd/filemanager/main.go b/cmd/filebrowser/main.go
similarity index 91%
rename from cmd/filemanager/main.go
rename to cmd/filebrowser/main.go
index a54cdfad..b9317b33 100644
--- a/cmd/filemanager/main.go
+++ b/cmd/filebrowser/main.go
@@ -14,10 +14,10 @@ import (
"gopkg.in/natefinch/lumberjack.v2"
- "github.com/hacdias/filemanager"
- "github.com/hacdias/filemanager/bolt"
- h "github.com/hacdias/filemanager/http"
- "github.com/hacdias/filemanager/staticgen"
+ "github.com/filebrowser/filebrowser"
+ "github.com/filebrowser/filebrowser/bolt"
+ h "github.com/filebrowser/filebrowser/http"
+ "github.com/filebrowser/filebrowser/staticgen"
"github.com/hacdias/fileutils"
flag "github.com/spf13/pflag"
"github.com/spf13/viper"
@@ -50,7 +50,7 @@ func init() {
flag.StringVarP(&config, "config", "c", "", "Configuration file")
flag.IntVarP(&port, "port", "p", 0, "HTTP Port (default is random)")
flag.StringVarP(&addr, "address", "a", "", "Address to listen to (default is all of them)")
- flag.StringVarP(&database, "database", "d", "./filemanager.db", "Database file")
+ flag.StringVarP(&database, "database", "d", "./filebrowser.db", "Database file")
flag.StringVarP(&logfile, "log", "l", "stdout", "Errors logger; can use 'stdout', 'stderr' or file")
flag.StringVarP(&scope, "scope", "s", ".", "Default scope option for new users")
flag.StringVarP(&baseurl, "baseurl", "b", "", "Base URL")
@@ -72,7 +72,7 @@ func init() {
func setupViper() {
viper.SetDefault("Address", "")
viper.SetDefault("Port", "0")
- viper.SetDefault("Database", "./filemanager.db")
+ viper.SetDefault("Database", "./filebrowser.db")
viper.SetDefault("Scope", ".")
viper.SetDefault("Logger", "stdout")
viper.SetDefault("Commands", []string{"git", "svn", "hg"})
@@ -85,7 +85,7 @@ func setupViper() {
viper.SetDefault("NoAuth", false)
viper.SetDefault("BaseURL", "")
viper.SetDefault("PrefixURL", "")
- viper.SetDefault("ViewMode", filemanager.MosaicViewMode)
+ viper.SetDefault("ViewMode", filebrowser.MosaicViewMode)
viper.SetDefault("ReCaptchaKey", "")
viper.SetDefault("ReCaptchaSecret", "")
@@ -108,12 +108,12 @@ func setupViper() {
viper.BindPFlag("ReCaptchaKey", flag.Lookup("recaptcha-key"))
viper.BindPFlag("ReCaptchaSecret", flag.Lookup("recaptcha-secret"))
- viper.SetConfigName("filemanager")
+ viper.SetConfigName("filebrowser")
viper.AddConfigPath(".")
}
func printVersion() {
- fmt.Println("filemanager version", filemanager.Version)
+ fmt.Println("filebrowser version", filebrowser.Version)
os.Exit(0)
}
@@ -186,31 +186,31 @@ func handler() http.Handler {
log.Fatal(err)
}
- fm := &filemanager.FileManager{
+ fm := &filebrowser.FileBrowser{
NoAuth: viper.GetBool("NoAuth"),
BaseURL: viper.GetString("BaseURL"),
PrefixURL: viper.GetString("PrefixURL"),
ReCaptchaKey: viper.GetString("ReCaptchaKey"),
ReCaptchaSecret: viper.GetString("ReCaptchaSecret"),
- DefaultUser: &filemanager.User{
+ DefaultUser: &filebrowser.User{
AllowCommands: viper.GetBool("AllowCommands"),
AllowEdit: viper.GetBool("AllowEdit"),
AllowNew: viper.GetBool("AllowNew"),
AllowPublish: viper.GetBool("AllowPublish"),
Commands: viper.GetStringSlice("Commands"),
- Rules: []*filemanager.Rule{},
+ Rules: []*filebrowser.Rule{},
Locale: viper.GetString("Locale"),
CSS: "",
Scope: viper.GetString("Scope"),
FileSystem: fileutils.Dir(viper.GetString("Scope")),
ViewMode: viper.GetString("ViewMode"),
},
- Store: &filemanager.Store{
+ Store: &filebrowser.Store{
Config: bolt.ConfigStore{DB: db},
Users: bolt.UsersStore{DB: db},
Share: bolt.ShareStore{DB: db},
},
- NewFS: func(scope string) filemanager.FileSystem {
+ NewFS: func(scope string) filebrowser.FileSystem {
return fileutils.Dir(scope)
},
}
diff --git a/doc.go b/doc.go
index d6cc768f..d4371a1d 100644
--- a/doc.go
+++ b/doc.go
@@ -1,20 +1,20 @@
/*
-Package filemanager provides a web interface to access your files
+Package filebrowser provides a web interface to access your files
wherever you are. To use this package as a middleware for your app,
you'll need to import both File Manager and File Manager HTTP packages.
import (
- fm "github.com/hacdias/filemanager"
- h "github.com/hacdias/filemanager/http"
+ fm "github.com/filebrowser/filebrowser"
+ h "github.com/filebrowser/filebrowser/http"
)
-Then, you should create a new FileManager object with your options. In this
+Then, you should create a new FileBrowser object with your options. In this
case, I'm using BoltDB (via Storm package) as a Store. So, you'll also need
-to import "github.com/hacdias/filemanager/bolt".
+to import "github.com/filebrowser/filebrowser/bolt".
db, _ := storm.Open("bolt.db")
- m := &fm.FileManager{
+ m := &fm.FileBrowser{
NoAuth: false,
DefaultUser: &fm.User{
AllowCommands: true,
@@ -70,4 +70,4 @@ One simple implementation for this, at port 80, in the root of the domain, would
http.ListenAndServe(":80", h.Handler(m))
*/
-package filemanager
+package filebrowser
diff --git a/file.go b/file.go
index 2b0eb958..be63c07b 100644
--- a/file.go
+++ b/file.go
@@ -1,4 +1,4 @@
-package filemanager
+package filebrowser
import (
"bytes"
@@ -71,7 +71,7 @@ type Listing struct {
// GetInfo gets the file information and, in case of error, returns the
// respective HTTP error code
-func GetInfo(url *url.URL, c *FileManager, u *User) (*File, error) {
+func GetInfo(url *url.URL, c *FileBrowser, u *User) (*File, error) {
var err error
i := &File{
diff --git a/filemanager.go b/filebrowser.go
similarity index 96%
rename from filemanager.go
rename to filebrowser.go
index fb323d78..5868dd36 100644
--- a/filemanager.go
+++ b/filebrowser.go
@@ -1,4 +1,4 @@
-package filemanager
+package filebrowser
import (
"crypto/rand"
@@ -41,9 +41,9 @@ var (
ErrInvalidOption = errors.New("invalid option")
)
-// FileManager is a file manager instance. It should be creating using the
+// FileBrowser is a file manager instance. It should be creating using the
// 'New' function and not directly.
-type FileManager struct {
+type FileBrowser struct {
// Cron job to manage schedulings.
Cron *cron.Cron
@@ -107,7 +107,7 @@ var commandEvents = []string{
}
// Command is a command function.
-type Command func(r *http.Request, m *FileManager, u *User) error
+type Command func(r *http.Request, m *FileBrowser, u *User) error
// FSBuilder is the File System Builder.
type FSBuilder func(scope string) FileSystem
@@ -115,7 +115,7 @@ type FSBuilder func(scope string) FileSystem
// Setup loads the configuration from the database and configures
// the Assets and the Cron job. It must always be run after
// creating a File Manager object.
-func (m *FileManager) Setup() error {
+func (m *FileBrowser) Setup() error {
// Creates a new File Manager instance with the Users
// map and Assets box.
m.Assets = rice.MustFindBox("./assets/dist")
@@ -229,13 +229,13 @@ func (m *FileManager) Setup() error {
// RootURL returns the actual URL where
// File Manager interface can be accessed.
-func (m FileManager) RootURL() string {
+func (m FileBrowser) RootURL() string {
return m.PrefixURL + m.BaseURL
}
// SetPrefixURL updates the prefixURL of a File
// Manager object.
-func (m *FileManager) SetPrefixURL(url string) {
+func (m *FileBrowser) SetPrefixURL(url string) {
url = strings.TrimPrefix(url, "/")
url = strings.TrimSuffix(url, "/")
url = "/" + url
@@ -244,7 +244,7 @@ func (m *FileManager) SetPrefixURL(url string) {
// SetBaseURL updates the baseURL of a File Manager
// object.
-func (m *FileManager) SetBaseURL(url string) {
+func (m *FileBrowser) SetBaseURL(url string) {
url = strings.TrimPrefix(url, "/")
url = strings.TrimSuffix(url, "/")
url = "/" + url
@@ -252,7 +252,7 @@ func (m *FileManager) SetBaseURL(url string) {
}
// Attach attaches a static generator to the current File Manager.
-func (m *FileManager) Attach(s StaticGen) error {
+func (m *FileBrowser) Attach(s StaticGen) error {
if reflect.TypeOf(s).Kind() != reflect.Ptr {
return errors.New("data should be a pointer to interface, not interface")
}
@@ -274,7 +274,7 @@ func (m *FileManager) Attach(s StaticGen) error {
// ShareCleaner removes sharing links that are no longer active.
// This function is set to run periodically.
-func (m FileManager) ShareCleaner() {
+func (m FileBrowser) ShareCleaner() {
// Get all links.
links, err := m.Store.Share.Gets()
if err != nil {
@@ -294,7 +294,7 @@ func (m FileManager) ShareCleaner() {
}
// Runner runs the commands for a certain event type.
-func (m FileManager) Runner(event string, path string, destination string, user *User) error {
+func (m FileBrowser) Runner(event string, path string, destination string, user *User) error {
commands := []string{}
// Get the commands from the File Manager instance itself.
@@ -530,7 +530,7 @@ type FileSystem interface {
// Context contains the needed information to make handlers work.
type Context struct {
- *FileManager
+ *FileBrowser
User *User
File *File
// On API handlers, Router is the APi handler we want.
diff --git a/http/auth.go b/http/auth.go
index fbe8f3f8..68ea6faf 100644
--- a/http/auth.go
+++ b/http/auth.go
@@ -9,7 +9,7 @@ import (
"github.com/dgrijalva/jwt-go"
"github.com/dgrijalva/jwt-go/request"
- fm "github.com/hacdias/filemanager"
+ fm "github.com/filebrowser/filebrowser"
)
const reCaptchaAPI = "https://www.google.com/recaptcha/api/siteverify"
diff --git a/http/download.go b/http/download.go
index 5622a3b9..a401f9d9 100644
--- a/http/download.go
+++ b/http/download.go
@@ -1,3 +1,4 @@
+
package http
import (
@@ -7,7 +8,7 @@ import (
"path/filepath"
"strings"
- fm "github.com/hacdias/filemanager"
+ fm "github.com/filebrowser/filebrowser"
"github.com/hacdias/fileutils"
"github.com/mholt/archiver"
)
diff --git a/http/http.go b/http/http.go
index c40435c5..1fd4f319 100644
--- a/http/http.go
+++ b/http/http.go
@@ -10,14 +10,14 @@ import (
"strings"
"time"
- fm "github.com/hacdias/filemanager"
+ fm "github.com/filebrowser/filebrowser"
)
// Handler returns a function compatible with http.HandleFunc.
-func Handler(m *fm.FileManager) http.Handler {
+func Handler(m *fm.FileBrowser) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
code, err := serve(&fm.Context{
- FileManager: m,
+ FileBrowser: m,
User: nil,
File: nil,
}, w, r)
@@ -139,7 +139,7 @@ func apiHandler(c *fm.Context, w http.ResponseWriter, r *http.Request) (int, err
if c.Router == "checksum" || c.Router == "download" {
var err error
- c.File, err = fm.GetInfo(r.URL, c.FileManager, c.User)
+ c.File, err = fm.GetInfo(r.URL, c.FileBrowser, c.User)
if err != nil {
return ErrorToHTTP(err, false), err
}
diff --git a/http/resource.go b/http/resource.go
index a312de90..83687e82 100644
--- a/http/resource.go
+++ b/http/resource.go
@@ -13,7 +13,7 @@ import (
"strings"
"time"
- fm "github.com/hacdias/filemanager"
+ fm "github.com/filebrowser/filebrowser"
"github.com/hacdias/fileutils"
)
@@ -64,7 +64,7 @@ func resourceHandler(c *fm.Context, w http.ResponseWriter, r *http.Request) (int
func resourceGetHandler(c *fm.Context, w http.ResponseWriter, r *http.Request) (int, error) {
// Gets the information of the directory/file.
- f, err := fm.GetInfo(r.URL, c.FileManager, c.User)
+ f, err := fm.GetInfo(r.URL, c.FileBrowser, c.User)
if err != nil {
return ErrorToHTTP(err, false), err
}
diff --git a/http/settings.go b/http/settings.go
index ae676bac..cf427f44 100644
--- a/http/settings.go
+++ b/http/settings.go
@@ -6,7 +6,7 @@ import (
"net/http"
"reflect"
- fm "github.com/hacdias/filemanager"
+ fm "github.com/filebrowser/filebrowser"
"github.com/mitchellh/mapstructure"
)
diff --git a/http/share.go b/http/share.go
index 5269cd29..6b95d0dd 100644
--- a/http/share.go
+++ b/http/share.go
@@ -8,7 +8,7 @@ import (
"strings"
"time"
- fm "github.com/hacdias/filemanager"
+ fm "github.com/filebrowser/filebrowser"
)
func shareHandler(c *fm.Context, w http.ResponseWriter, r *http.Request) (int, error) {
diff --git a/http/users.go b/http/users.go
index 9e6601ca..97ad7ca2 100644
--- a/http/users.go
+++ b/http/users.go
@@ -9,7 +9,7 @@ import (
"strconv"
"strings"
- fm "github.com/hacdias/filemanager"
+ fm "github.com/filebrowser/filebrowser"
)
type modifyRequest struct {
diff --git a/http/websockets.go b/http/websockets.go
index 8f6d867f..2fba9303 100644
--- a/http/websockets.go
+++ b/http/websockets.go
@@ -13,7 +13,7 @@ import (
"time"
"github.com/gorilla/websocket"
- fm "github.com/hacdias/filemanager"
+ fm "github.com/filebrowser/filebrowser"
)
var upgrader = websocket.Upgrader{
diff --git a/package.json b/package.json
index 6e3e7051..0671f64f 100644
--- a/package.json
+++ b/package.json
@@ -1,5 +1,5 @@
{
- "name": "filemanager",
+ "name": "filebrowser",
"version": "1.0.0",
"author": "Henrique Dias ",
"private": true,
diff --git a/publish.sh b/publish.sh
index 5bcd6fc7..14f33b9b 100644
--- a/publish.sh
+++ b/publish.sh
@@ -5,7 +5,7 @@ echo "Building assets"
./build.sh
echo "Updating version number to $1..."
-sed -i "s|(untracked)|$1|g" filemanager.go
+sed -i "s|(untracked)|$1|g" filebrowser.go
echo "Commiting..."
git add -A
@@ -17,7 +17,7 @@ git tag "v$1"
git push --tags
echo "Commiting untracked version notice..."
-sed -i "s|$1|(untracked)|g" filemanager.go
+sed -i "s|$1|(untracked)|g" filebrowser.go
git add -A
git commit -m "chore: setting untracked version [ci skip]"
git push
diff --git a/rice-box.go.REMOVED.git-id b/rice-box.go.REMOVED.git-id
index 0b86f646..de0f8ff5 100644
--- a/rice-box.go.REMOVED.git-id
+++ b/rice-box.go.REMOVED.git-id
@@ -1 +1 @@
-e48e71dd340a2bf3434e06c86032565365132976
\ No newline at end of file
+4279154c1ebe0e4a8ef7ee0008a3371c7136ec9f
\ No newline at end of file
diff --git a/staticgen/hugo.go b/staticgen/hugo.go
index eb9b5b18..dd79938b 100644
--- a/staticgen/hugo.go
+++ b/staticgen/hugo.go
@@ -10,7 +10,7 @@ import (
"path/filepath"
"strings"
- fm "github.com/hacdias/filemanager"
+ fm "github.com/filebrowser/filebrowser"
"github.com/hacdias/varutils"
)
diff --git a/staticgen/jekyll.go b/staticgen/jekyll.go
index fea4dd1a..00bdeb2c 100644
--- a/staticgen/jekyll.go
+++ b/staticgen/jekyll.go
@@ -9,7 +9,7 @@ import (
"path/filepath"
"strings"
- fm "github.com/hacdias/filemanager"
+ fm "github.com/filebrowser/filebrowser"
)
// Jekyll is the Jekyll static website generator.