file view refactoring

This commit is contained in:
Čarodej
2021-10-27 09:53:59 +02:00
parent e3ddf27023
commit 21d6410f76
42 changed files with 866 additions and 1467 deletions
+10 -4
View File
@@ -3555,7 +3555,7 @@
}, },
"defined": { "defined": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", "resolved": "https://registry.npm.taobao.org/defined/download/defined-1.0.0.tgz",
"integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM="
}, },
"del": { "del": {
@@ -6541,7 +6541,7 @@
}, },
"lodash.topath": { "lodash.topath": {
"version": "4.5.2", "version": "4.5.2",
"resolved": "https://registry.npmjs.org/lodash.topath/-/lodash.topath-4.5.2.tgz", "resolved": "https://registry.npm.taobao.org/lodash.topath/download/lodash.topath-4.5.2.tgz",
"integrity": "sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak=" "integrity": "sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak="
}, },
"lodash.tostring": { "lodash.tostring": {
@@ -8179,7 +8179,7 @@
}, },
"postcss-functions": { "postcss-functions": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/postcss-functions/-/postcss-functions-3.0.0.tgz", "resolved": "https://registry.npm.taobao.org/postcss-functions/download/postcss-functions-3.0.0.tgz",
"integrity": "sha1-DpTQFERwCkgd4g3k1V+yZAVkJQ4=", "integrity": "sha1-DpTQFERwCkgd4g3k1V+yZAVkJQ4=",
"requires": { "requires": {
"glob": "^7.1.2", "glob": "^7.1.2",
@@ -8787,7 +8787,7 @@
}, },
"pretty-hrtime": { "pretty-hrtime": {
"version": "1.0.3", "version": "1.0.3",
"resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", "resolved": "https://registry.npm.taobao.org/pretty-hrtime/download/pretty-hrtime-1.0.3.tgz",
"integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=" "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE="
}, },
"private": { "private": {
@@ -10894,6 +10894,12 @@
} }
} }
}, },
"tailwindcss-debug-screens": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/tailwindcss-debug-screens/-/tailwindcss-debug-screens-2.2.0.tgz",
"integrity": "sha512-0WJj6mu2EC93a9Ac762TdPF5vIOdZEIpvP5yvTDP5r6kk6/5usMmMVUTGipT4qzCUGcgvuA+azmDl34k2fckhw==",
"dev": true
},
"tapable": { "tapable": {
"version": "1.1.3", "version": "1.1.3",
"resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
+1
View File
@@ -15,6 +15,7 @@
"laravel-mix": "^5.0.9", "laravel-mix": "^5.0.9",
"resolve-url-loader": "^2.3.1", "resolve-url-loader": "^2.3.1",
"sass-loader": "^8.0.2", "sass-loader": "^8.0.2",
"tailwindcss-debug-screens": "^2.2.0",
"vue-template-compiler": "^2.6.12" "vue-template-compiler": "^2.6.12"
}, },
"dependencies": { "dependencies": {
+356 -791
View File
File diff suppressed because it is too large Load Diff
+1 -16
View File
@@ -1,5 +1,5 @@
<template> <template>
<div id="vuefilemanager" @click="unClick" v-cloak> <div @click="unClick" v-cloak>
<!--UI components--> <!--UI components-->
<Alert /> <Alert />
@@ -154,21 +154,6 @@ export default {
height: 100%; height: 100%;
} }
#vuefilemanager {
position: absolute;
width: 100%;
height: 100%;
overflow-y: auto;
scroll-behavior: smooth;
}
@media only screen and (max-width: 690px) {
.is-scaled-down {
@include transform(scale(0.95));
}
}
// Dark mode support // Dark mode support
.dark { .dark {
@@ -1,5 +1,5 @@
<template> <template>
<div id="desktop-toolbar"> <div id="desktop-toolbar" class="md:block hidden">
<div class="toolbar-wrapper"> <div class="toolbar-wrapper">
<div @click="goBack" class="location"> <div @click="goBack" class="location">
<chevron-left-icon :class="{'is-active': isNotHomepage }" class="icon-back" size="17" /> <chevron-left-icon :class="{'is-active': isNotHomepage }" class="icon-back" size="17" />
@@ -360,12 +360,6 @@
} }
} }
@media only screen and (max-width: 960px) {
#desktop-toolbar {
display: none;
}
}
.dark { .dark {
.team-preview:hover { .team-preview:hover {
background: $dark_mode_foreground; background: $dark_mode_foreground;
@@ -1,5 +1,5 @@
<template> <template>
<div id="mobile-actions-wrapper"> <div class="sticky dark:bg-dark-background bg-white top-12 pb-3 px-4 z-10 whitespace-nowrap overflow-x-auto md:hidden block">
<!--Show Buttons--> <!--Show Buttons-->
<div v-if="! isSelectMode" class="mobile-actions"> <div v-if="! isSelectMode" class="mobile-actions">
@@ -20,7 +20,7 @@
</div> </div>
<!--Upload Progressbar--> <!--Upload Progressbar-->
<UploadProgress /> <UploadProgress class="pt-3"/>
</div> </div>
</template> </template>
@@ -82,32 +82,4 @@
.button-leave-active { .button-leave-active {
position: absolute; position: absolute;
} }
#mobile-actions-wrapper {
display: none;
background: white;
position: sticky;
top: 35px;
z-index: 3;
}
.mobile-actions {
white-space: nowrap;
overflow-x: auto;
margin: 0 -15px;
padding: 10px 0 10px 15px;
}
@media only screen and (max-width: 960px) {
#mobile-actions-wrapper {
display: block;
}
}
.dark {
#mobile-actions-wrapper {
background: $dark_mode_background;
}
}
</style> </style>
@@ -1,7 +1,7 @@
<template> <template>
<div <div
:class="{'is-offset': filesInQueueTotal > 0, 'is-dragging': isDragging }" :class="{'is-offset': filesInQueueTotal > 0, 'is-dragging': isDragging }"
class="file-content" class="file-content md:w-full md:overflow-y-auto md:h-full"
id="file-content-id" id="file-content-id"
@drop.stop.prevent="dropUpload($event)" @drop.stop.prevent="dropUpload($event)"
@keydown.delete="deleteItems" @keydown.delete="deleteItems"
@@ -9,20 +9,8 @@
@dragleave="dragLeave" @dragleave="dragLeave"
@dragover.prevent @dragover.prevent
tabindex="-1" tabindex="-1"
>
<div
:class="{'is-visible': isVisibleSidebar, 'mobile-multi-select': isMultiSelect}"
@click.self="filesContainerClick" @click.self="filesContainerClick"
class="files-container"
ref="fileContainer"
> >
<MobileToolbar />
<!--Mobile Actions-->
<FileActionsMobile>
<slot name="file-actions-mobile" />
</FileActionsMobile>
<!--Show empty page if no content--> <!--Show empty page if no content-->
<EmptyFilePage> <EmptyFilePage>
<slot name="empty-file-page" /> <slot name="empty-file-page" />
@@ -69,18 +57,10 @@
/> />
</transition-group> </transition-group>
</div> </div>
</div>
<!--File Info Panel-->
<div :class="{'is-visible': isVisibleSidebar }" class="file-info-container">
<InfoSidebar />
</div>
</div> </div>
</template> </template>
<script> <script>
import FileActionsMobile from '/resources/js/components/FilesView/FileActionsMobile'
import MobileToolbar from '/resources/js/components/FilesView/MobileToolbar'
import EmptyFilePage from '/resources/js/components/FilesView/EmptyFilePage' import EmptyFilePage from '/resources/js/components/FilesView/EmptyFilePage'
import EmptyMessage from '/resources/js/components/FilesView/EmptyMessage' import EmptyMessage from '/resources/js/components/FilesView/EmptyMessage'
import FileItemList from '/resources/js/components/FilesView/FileItemList' import FileItemList from '/resources/js/components/FilesView/FileItemList'
@@ -88,14 +68,11 @@
import InfoSidebar from '/resources/js/components/FilesView/InfoSidebar' import InfoSidebar from '/resources/js/components/FilesView/InfoSidebar'
import {mapGetters} from 'vuex' import {mapGetters} from 'vuex'
import {events} from '/resources/js/bus' import {events} from '/resources/js/bus'
import {debounce} from "lodash";
export default { export default {
name: 'FileBrowser', name: 'FileBrowser',
components: { components: {
FileActionsMobile,
EmptyFilePage, EmptyFilePage,
MobileToolbar,
FileItemList, FileItemList,
FileItemGrid, FileItemGrid,
EmptyMessage, EmptyMessage,
@@ -231,7 +208,7 @@
// Scroll top // Scroll top
let container = document.getElementsByClassName( let container = document.getElementsByClassName(
'files-container' 'file-content'
)[0] )[0]
if (container) if (container)
@@ -264,11 +241,6 @@
} }
.mobile-multi-select {
bottom: 50px !important;
top: 0px;
}
.button-upload { .button-upload {
display: block; display: block;
text-align: center; text-align: center;
@@ -282,7 +254,6 @@
} }
.file-content { .file-content {
display: flex;
&.is-dragging { &.is-dragging {
@include transform(scale(0.99)); @include transform(scale(0.99));
@@ -290,16 +261,6 @@
} }
.files-container { .files-container {
overflow-x: hidden;
overflow-y: auto;
flex: 0 0 100%;
@include transition(150ms);
position: relative;
scroll-behavior: smooth;
&.is-visible {
flex: 0 1 100%;
}
.file-list { .file-list {
@@ -311,12 +272,6 @@
} }
} }
.file-info-container {
flex: 0 0 300px;
padding-left: 20px;
overflow: auto;
}
// Transition // Transition
.file-move { .file-move {
transition: transform 0.6s; transition: transform 0.6s;
@@ -336,60 +291,16 @@
transform: translateX(-20px); transform: translateX(-20px);
} }
@media only screen and (min-width: 960px) {
.file-content {
position: absolute;
top: 72px;
left: 15px;
right: 15px;
bottom: 0;
@include transition;
overflow-y: auto;
overflow-x: hidden;
&.is-offset {
margin-top: 50px;
}
}
}
@media only screen and (max-width: 960px) { @media only screen and (max-width: 960px) {
.file-info-container {
display: none;
}
.mobile-search { .mobile-search {
display: block; display: block;
} }
.file-content {
position: absolute;
top: 0px;
left: 15px;
right: 15px;
bottom: 0;
@include transition;
overflow-y: auto;
overflow-x: hidden;
&.is-offset {
margin-top: 50px;
}
}
} }
@media only screen and (max-width: 690px) { @media only screen and (max-width: 690px) {
.files-container { .files-container {
padding-left: 15px;
padding-right: 15px;
top: 0;
left: 0;
right: 0;
bottom: 0;
position: fixed;
overflow-y: auto;
.file-list { .file-list {
@@ -399,25 +310,8 @@
} }
} }
.file-content {
position: absolute;
top: 0;
left: 0px;
right: 0px;
bottom: 0;
@include transition;
&.is-offset {
margin-top: 50px;
}
}
.mobile-search { .mobile-search {
margin-bottom: 0; margin-bottom: 0;
} }
.file-info-container {
display: none;
}
} }
</style> </style>
@@ -182,8 +182,7 @@
<style scoped lang="scss"> <style scoped lang="scss">
.info-wrapper { .info-wrapper {
padding-bottom: 20px; padding-bottom: 50px;
height: 100%;
} }
.info-headline { .info-headline {
@@ -1,8 +1,8 @@
<template> <template>
<div class="mobile-toolbar"> <div class="sticky top-0 dark:bg-dark-background bg-white flex text-center py-4 px-4 w-full justify-between items-center z-10 md:hidden block">
<!-- Go back--> <!-- Go back-->
<div @click="goBack" class="go-back-button"> <div @click="goBack" class="go-back-button flex text-left items-center">
<chevron-left-icon size="17" class="icon-back" :class="{'is-visible': isLoadedFolder }" /> <chevron-left-icon size="17" class="icon-back" :class="{'is-visible': isLoadedFolder }" />
<!--Folder Title--> <!--Folder Title-->
@@ -13,7 +13,7 @@
<!--More Actions--> <!--More Actions-->
<div class="more-actions-button"> <div class="more-actions-button">
<div v-if="$checkPermission('master')" @click="showMobileNavigation" class="tap-area"> <div v-if="$checkPermission('master')" @click="showMobileNavigation" class="tap-area px-1.5">
<menu-icon size="17" /> <menu-icon size="17" />
</div> </div>
</div> </div>
@@ -66,25 +66,7 @@
@import '/resources/sass/vuefilemanager/_variables'; @import '/resources/sass/vuefilemanager/_variables';
@import '/resources/sass/vuefilemanager/_mixins'; @import '/resources/sass/vuefilemanager/_mixins';
.mobile-toolbar {
background: white;
text-align: center;
display: none;
padding: 10px 0;
position: sticky;
top: 0;
z-index: 6;
> div {
width: 100%;
flex-grow: 1;
align-self: center;
white-space: nowrap;
}
.go-back-button { .go-back-button {
text-align: left;
flex: 1;
.icon-back { .icon-back {
pointer-events: none; pointer-events: none;
@@ -116,36 +98,18 @@
} }
.more-actions-button { .more-actions-button {
flex: 1;
text-align: right;
position: relative; position: relative;
.tap-area { .tap-area {
display: inline-block;
padding: 10px;
position: absolute;
right: -10px;
top: -20px;
path, line, polyline, rect, circle { path, line, polyline, rect, circle {
stroke: $text; stroke: $text;
} }
} }
} }
}
@media only screen and (max-width: 960px) {
.mobile-toolbar {
display: flex;
}
}
.dark { .dark {
.mobile-toolbar {
background: $dark_mode_background;
.directory-name { .directory-name {
color: $dark_mode_text_primary; color: $dark_mode_text_primary;
} }
@@ -157,5 +121,4 @@
} }
} }
} }
}
</style> </style>
+4 -10
View File
@@ -1,5 +1,5 @@
<template> <template>
<li class="menu-option group" :class="{'hover-disabled': isHoverDisabled}"> <li class="menu-option group flex items-center" :class="{'hover-disabled': isHoverDisabled}">
<div class="icon-left group-hover-text-theme"> <div class="icon-left group-hover-text-theme">
<calendar-icon v-if="icon === 'calendar'" size="17" class="group-hover-text-theme" :class="{'text-theme': isActive}"/> <calendar-icon v-if="icon === 'calendar'" size="17" class="group-hover-text-theme" :class="{'text-theme': isActive}"/>
<grid-icon v-if="icon === 'grid'" size="17" class="group-hover-text-theme" :class="{'text-theme': isActive}"/> <grid-icon v-if="icon === 'grid'" size="17" class="group-hover-text-theme" :class="{'text-theme': isActive}"/>
@@ -41,9 +41,9 @@
{{ title }} {{ title }}
</div> </div>
<div v-if="arrow" class="icon-right group-hover-text-theme"> <div v-if="arrow" class="icon-right group-hover-text-theme">
<chevron-right-icon v-if="arrow === 'right'" size="17" class="group-hover-text-theme" :class="{'text-theme': isActive}"/> <chevron-right-icon v-if="arrow === 'right'" size="17" class="group-hover-text-theme inline-block" :class="{'text-theme': isActive}"/>
<arrow-up-icon v-if="arrow === 'up'" size="17" class="group-hover-text-theme" :class="{'text-theme': isActive}"/> <arrow-up-icon v-if="arrow === 'up'" size="17" class="group-hover-text-theme inline-block" :class="{'text-theme': isActive}"/>
<arrow-down-icon v-if="arrow === 'down'" size="17" class="group-hover-text-theme" :class="{'text-theme': isActive}"/> <arrow-down-icon v-if="arrow === 'down'" size="17" class="group-hover-text-theme inline-block" :class="{'text-theme': isActive}"/>
</div> </div>
</li> </li>
</template> </template>
@@ -150,18 +150,12 @@ import {
cursor: pointer; cursor: pointer;
width: 100%; width: 100%;
color: $text; color: $text;
display: flex;
align-items: center;
.icon-right { .icon-right {
vertical-align: middle; vertical-align: middle;
text-align: right; text-align: right;
width: 100%; width: 100%;
svg {
@include transform(translateY(3px));
}
polyline, line { polyline, line {
color: inherit; color: inherit;
} }
@@ -4,7 +4,7 @@
<div class="progress-title"> <div class="progress-title">
<!--Is processing--> <!--Is processing-->
<span v-if="isProcessingFile"> <span v-if="isProcessingFile" class="flex items-center justify-center">
<refresh-cw-icon size="12" class="sync-alt text-theme" /> <refresh-cw-icon size="12" class="sync-alt text-theme" />
{{ $t('uploading.processing_file') }} {{ $t('uploading.processing_file') }}
</span> </span>
@@ -89,7 +89,6 @@
.upload-progress { .upload-progress {
width: 100%; width: 100%;
padding-bottom: 10px;
position: relative; position: relative;
z-index: 1; z-index: 1;
@@ -98,7 +97,7 @@
.cancel-icon { .cancel-icon {
cursor: pointer; cursor: pointer;
padding: 0 13px; padding: 0 7px 0 13px;
&:hover { &:hover {
@@ -119,16 +118,6 @@
} }
} }
@media only screen and (max-width: 690px) {
.upload-progress {
.progress-wrapper .cancel-icon {
padding: 0 9px;
}
}
}
.dark { .dark {
.progress-bar { .progress-bar {
background: $dark_mode_foreground; background: $dark_mode_foreground;
@@ -1,10 +1,10 @@
<template> <template>
<div class="empty-page-content"> <div class="empty-page-content">
<div class="content"> <div class="content">
<div class="icon"> <div class="icon inline-block">
<file-icon v-if="icon === 'file'" size="38"></file-icon> <file-icon v-if="icon === 'file'" size="38" />
<file-text-icon v-if="icon === 'file-text'" size="38"></file-text-icon> <file-text-icon v-if="icon === 'file-text'" size="38" />
<settings-icon v-if="icon === 'settings'" size="38"></settings-icon> <settings-icon v-if="icon === 'settings'" size="38" />
</div> </div>
<div class="header"> <div class="header">
<h1 class="title">{{ title }}</h1> <h1 class="title">{{ title }}</h1>
@@ -1,5 +1,5 @@
<template> <template>
<section class="content-sidebar" id="content-sidebar"> <section class="content-sidebar flex-none xl:w-56 w-52 sm:block hidden overflow-y-auto pt-6 select-none" id="content-sidebar">
<slot></slot> <slot></slot>
</section> </section>
</template> </template>
@@ -15,30 +15,10 @@
@import '/resources/sass/vuefilemanager/_mixins'; @import '/resources/sass/vuefilemanager/_mixins';
.content-sidebar { .content-sidebar {
//background: linear-gradient(0deg, rgba(246, 245, 241, 0.4) 0%, rgba(243, 244, 246, 0.4) 100%);
background: rgba($light_background, 0.6); background: rgba($light_background, 0.6);
user-select: none;
padding-top: 25px;
overflow-y: auto;
flex: 0 0 225px;
} }
@media only screen and (max-width: 1024px) { .dark .content-sidebar {
.content-sidebar {
flex: 0 0 205px;
}
}
@media only screen and (max-width: 690px) {
.content-sidebar {
display: none;
}
}
.dark {
.content-sidebar {
background: rgba($dark_mode_foreground, 0.2); background: rgba($dark_mode_foreground, 0.2);
} }
}
</style> </style>
@@ -1,5 +1,5 @@
<template> <template>
<nav class="menu-bar"> <nav class="menu-bar flex-none xl:w-20 w-16 sm:grid hidden">
<div class="icon-navigation menu" v-if="user"> <div class="icon-navigation menu" v-if="user">
<router-link :to="{name: 'Profile'}" class="icon-navigation-item user"> <router-link :to="{name: 'Profile'}" class="icon-navigation-item user">
@@ -104,8 +104,6 @@
background: $light_background; background: $light_background;
user-select: none; user-select: none;
padding-top: 25px; padding-top: 25px;
display: grid;
flex: 0 0 72px;
} }
.icon-navigation { .icon-navigation {
@@ -190,9 +188,6 @@
} }
@media only screen and (max-width: 1024px) { @media only screen and (max-width: 1024px) {
.menu-bar {
flex: 0 0 60px;
}
.icon-navigation { .icon-navigation {
@@ -206,12 +201,6 @@
} }
} }
@media only screen and (max-width: 690px) {
.menu-bar {
display: none;
}
}
.dark { .dark {
.dark-switcher { .dark-switcher {
@@ -181,6 +181,8 @@
}) })
this.$nextTick(() => { this.$nextTick(() => {
if (this.$refs.email)
this.$refs.email.focus() this.$refs.email.focus()
}) })
}) })
+2 -2
View File
@@ -1,5 +1,5 @@
<template> <template>
<section id="viewport"> <div class="sm:flex md:h-screen md:overflow-hidden">
<!--On Top of App Components--> <!--On Top of App Components-->
<FilePreview /> <FilePreview />
<Spotlight /> <Spotlight />
@@ -88,7 +88,7 @@
</ContentSidebar> </ContentSidebar>
<router-view/> <router-view/>
</section> </div>
</template> </template>
<script> <script>
+1 -1
View File
@@ -10,7 +10,7 @@
</div> </div>
<h1>{{ title }}</h1> <h1>{{ title }}</h1>
<h2>{{ description }}:</h2> <h2>{{ description }}</h2>
</div> </div>
</template> </template>
<script> <script>
+6 -3
View File
@@ -79,8 +79,7 @@
</template> </template>
</ContextMenu> </ContextMenu>
<FileBrowser> <FileActionsMobile>
<template v-slot:file-actions-mobile>
<MobileActionButton @click.native="$openSpotlight" icon="search"> <MobileActionButton @click.native="$openSpotlight" icon="search">
{{ $t('actions.search') }} {{ $t('actions.search') }}
</MobileActionButton> </MobileActionButton>
@@ -96,7 +95,9 @@
<MobileActionButton @click.native="$showViewOptions" icon="preview-sorting"> <MobileActionButton @click.native="$showViewOptions" icon="preview-sorting">
{{ $t('preview_sorting.preview_sorting_button') }} {{ $t('preview_sorting.preview_sorting_button') }}
</MobileActionButton> </MobileActionButton>
</template> </FileActionsMobile>
<FileBrowser>
<template v-slot:empty-file-page> <template v-slot:empty-file-page>
<h1 class="title"> <h1 class="title">
@@ -114,6 +115,7 @@
</template> </template>
<script> <script>
import FileActionsMobile from "../../components/FilesView/FileActionsMobile";
import MobileActionButtonUpload from '/resources/js/components/FilesView/MobileActionButtonUpload' import MobileActionButtonUpload from '/resources/js/components/FilesView/MobileActionButtonUpload'
import MobileMultiSelectToolbar from "/resources/js/components/FilesView/MobileMultiSelectToolbar" import MobileMultiSelectToolbar from "/resources/js/components/FilesView/MobileMultiSelectToolbar"
import MobileActionButton from '/resources/js/components/FilesView/MobileActionButton' import MobileActionButton from '/resources/js/components/FilesView/MobileActionButton'
@@ -132,6 +134,7 @@
export default { export default {
name: 'Files', name: 'Files',
components: { components: {
FileActionsMobile,
MobileActionButtonUpload, MobileActionButtonUpload,
MobileMultiSelectToolbar, MobileMultiSelectToolbar,
MobileActionButton, MobileActionButton,
@@ -48,8 +48,7 @@
</OptionGroup> </OptionGroup>
</MobileContextMenu> </MobileContextMenu>
<FileBrowser> <FileActionsMobile>
<template v-slot:file-actions-mobile>
<MobileActionButton @click.native="$openSpotlight" icon="search"> <MobileActionButton @click.native="$openSpotlight" icon="search">
{{ $t('actions.search')}} {{ $t('actions.search')}}
</MobileActionButton> </MobileActionButton>
@@ -62,8 +61,9 @@
<MobileActionButton @click.native="$showViewOptions" icon="preview-sorting"> <MobileActionButton @click.native="$showViewOptions" icon="preview-sorting">
{{ $t('preview_sorting.preview_sorting_button') }} {{ $t('preview_sorting.preview_sorting_button') }}
</MobileActionButton> </MobileActionButton>
</template> </FileActionsMobile>
<FileBrowser>
<template v-slot:empty-file-page> <template v-slot:empty-file-page>
<h1 class="title">{{ $t('shared.empty_shared') }}</h1> <h1 class="title">{{ $t('shared.empty_shared') }}</h1>
</template> </template>
@@ -77,6 +77,7 @@
</template> </template>
<script> <script>
import FileActionsMobile from "../../components/FilesView/FileActionsMobile";
import MobileActionButtonUpload from '/resources/js/components/FilesView/MobileActionButtonUpload' import MobileActionButtonUpload from '/resources/js/components/FilesView/MobileActionButtonUpload'
import MobileActionButton from '/resources/js/components/FilesView/MobileActionButton' import MobileActionButton from '/resources/js/components/FilesView/MobileActionButton'
import MobileMultiSelectToolbar from "/resources/js/components/FilesView/MobileMultiSelectToolbar" import MobileMultiSelectToolbar from "/resources/js/components/FilesView/MobileMultiSelectToolbar"
@@ -101,6 +102,7 @@
FileBrowser, FileBrowser,
ContextMenu, ContextMenu,
Option, Option,
FileActionsMobile,
}, },
computed: { computed: {
...mapGetters([ ...mapGetters([
+5 -3
View File
@@ -71,8 +71,7 @@
</template> </template>
</ContextMenu> </ContextMenu>
<FileBrowser> <FileActionsMobile>
<template v-slot:file-actions-mobile>
<template v-if="$checkPermission('editor')"> <template v-if="$checkPermission('editor')">
<MobileActionButton @click.native="$openSpotlight" icon="search"> <MobileActionButton @click.native="$openSpotlight" icon="search">
{{ $t('actions.search') }} {{ $t('actions.search') }}
@@ -98,8 +97,9 @@
{{ $t('preview_sorting.preview_sorting_button') }} {{ $t('preview_sorting.preview_sorting_button') }}
</MobileActionButton> </MobileActionButton>
</template> </template>
</template> </FileActionsMobile>
<FileBrowser>
<template v-slot:empty-file-page> <template v-slot:empty-file-page>
<template v-if="$checkPermission('editor')"> <template v-if="$checkPermission('editor')">
<h1 class="title"> <h1 class="title">
@@ -123,6 +123,7 @@
</template> </template>
<script> <script>
import FileActionsMobile from "../../components/FilesView/FileActionsMobile";
import MobileMultiSelectToolbar from "/resources/js/components/FilesView/MobileMultiSelectToolbar" import MobileMultiSelectToolbar from "/resources/js/components/FilesView/MobileMultiSelectToolbar"
import MobileActionButton from '/resources/js/components/FilesView/MobileActionButton' import MobileActionButton from '/resources/js/components/FilesView/MobileActionButton'
import MobileContextMenu from "/resources/js/components/FilesView/MobileContextMenu" import MobileContextMenu from "/resources/js/components/FilesView/MobileContextMenu"
@@ -151,6 +152,7 @@
FileBrowser, FileBrowser,
ContextMenu, ContextMenu,
Option, Option,
FileActionsMobile,
}, },
computed: { computed: {
...mapGetters([ ...mapGetters([
@@ -39,8 +39,7 @@
</OptionGroup> </OptionGroup>
</MobileContextMenu> </MobileContextMenu>
<FileBrowser> <FileActionsMobile>
<template v-slot:file-actions-mobile>
<MobileActionButton @click.native="$openSpotlight" icon="search"> <MobileActionButton @click.native="$openSpotlight" icon="search">
{{ $t('actions.search')}} {{ $t('actions.search')}}
</MobileActionButton> </MobileActionButton>
@@ -56,8 +55,9 @@
<MobileActionButton @click.native="$showViewOptions" icon="preview-sorting"> <MobileActionButton @click.native="$showViewOptions" icon="preview-sorting">
{{ $t('preview_sorting.preview_sorting_button') }} {{ $t('preview_sorting.preview_sorting_button') }}
</MobileActionButton> </MobileActionButton>
</template> </FileActionsMobile>
<FileBrowser>
<template v-slot:empty-file-page> <template v-slot:empty-file-page>
<h1 class="title"> <h1 class="title">
{{ $t('empty_page.title') }} {{ $t('empty_page.title') }}
@@ -79,6 +79,7 @@
</template> </template>
<script> <script>
import FileActionsMobile from "../../components/FilesView/FileActionsMobile";
import MobileActionButtonUpload from '/resources/js/components/FilesView/MobileActionButtonUpload' import MobileActionButtonUpload from '/resources/js/components/FilesView/MobileActionButtonUpload'
import MobileActionButton from '/resources/js/components/FilesView/MobileActionButton' import MobileActionButton from '/resources/js/components/FilesView/MobileActionButton'
import MobileMultiSelectToolbar from "/resources/js/components/FilesView/MobileMultiSelectToolbar" import MobileMultiSelectToolbar from "/resources/js/components/FilesView/MobileMultiSelectToolbar"
@@ -105,6 +106,7 @@
FileBrowser, FileBrowser,
ContextMenu, ContextMenu,
Option, Option,
FileActionsMobile,
}, },
computed: { computed: {
...mapGetters([ ...mapGetters([
+5 -3
View File
@@ -57,8 +57,7 @@
</template> </template>
</ContextMenu> </ContextMenu>
<FileBrowser> <FileActionsMobile>
<template v-slot:file-actions-mobile>
<MobileActionButton @click.native="$openSpotlight" icon="search"> <MobileActionButton @click.native="$openSpotlight" icon="search">
{{ $t('actions.search') }} {{ $t('actions.search') }}
</MobileActionButton> </MobileActionButton>
@@ -74,8 +73,9 @@
<MobileActionButton @click.native="$showViewOptions" icon="preview-sorting"> <MobileActionButton @click.native="$showViewOptions" icon="preview-sorting">
{{ $t('preview_sorting.preview_sorting_button') }} {{ $t('preview_sorting.preview_sorting_button') }}
</MobileActionButton> </MobileActionButton>
</template> </FileActionsMobile>
<FileBrowser>
<template v-slot:empty-file-page> <template v-slot:empty-file-page>
<!--Homepage--> <!--Homepage-->
@@ -113,6 +113,7 @@
</template> </template>
<script> <script>
import FileActionsMobile from "../../components/FilesView/FileActionsMobile";
import MobileActionButtonUpload from '/resources/js/components/FilesView/MobileActionButtonUpload' import MobileActionButtonUpload from '/resources/js/components/FilesView/MobileActionButtonUpload'
import MobileMultiSelectToolbar from "/resources/js/components/FilesView/MobileMultiSelectToolbar" import MobileMultiSelectToolbar from "/resources/js/components/FilesView/MobileMultiSelectToolbar"
import MobileActionButton from '/resources/js/components/FilesView/MobileActionButton' import MobileActionButton from '/resources/js/components/FilesView/MobileActionButton'
@@ -147,6 +148,7 @@
ContextMenu, ContextMenu,
ButtonBase, ButtonBase,
Option, Option,
FileActionsMobile,
}, },
computed: { computed: {
...mapGetters([ ...mapGetters([
+5 -3
View File
@@ -80,8 +80,7 @@
</template> </template>
</ContextMenu> </ContextMenu>
<FileBrowser> <FileActionsMobile>
<template v-slot:file-actions-mobile>
<MobileActionButton @click.native="$openSpotlight" icon="search"> <MobileActionButton @click.native="$openSpotlight" icon="search">
{{ $t('actions.search') }} {{ $t('actions.search') }}
</MobileActionButton> </MobileActionButton>
@@ -97,8 +96,9 @@
<MobileActionButton @click.native="$showViewOptions" icon="preview-sorting"> <MobileActionButton @click.native="$showViewOptions" icon="preview-sorting">
{{ $t('preview_sorting.preview_sorting_button') }} {{ $t('preview_sorting.preview_sorting_button') }}
</MobileActionButton> </MobileActionButton>
</template> </FileActionsMobile>
<FileBrowser>
<template v-slot:empty-file-page> <template v-slot:empty-file-page>
<template v-if="isTeamFolderHomepage"> <template v-if="isTeamFolderHomepage">
@@ -130,6 +130,7 @@
</template> </template>
<script> <script>
import FileActionsMobile from "../../components/FilesView/FileActionsMobile";
import MobileActionButtonUpload from '/resources/js/components/FilesView/MobileActionButtonUpload' import MobileActionButtonUpload from '/resources/js/components/FilesView/MobileActionButtonUpload'
import MobileMultiSelectToolbar from "/resources/js/components/FilesView/MobileMultiSelectToolbar" import MobileMultiSelectToolbar from "/resources/js/components/FilesView/MobileMultiSelectToolbar"
import MobileActionButton from '/resources/js/components/FilesView/MobileActionButton' import MobileActionButton from '/resources/js/components/FilesView/MobileActionButton'
@@ -164,6 +165,7 @@
ContextMenu, ContextMenu,
ButtonBase, ButtonBase,
Option, Option,
FileActionsMobile,
}, },
computed: { computed: {
...mapGetters([ ...mapGetters([
+5 -3
View File
@@ -42,8 +42,7 @@
</OptionGroup> </OptionGroup>
</MobileContextMenu> </MobileContextMenu>
<FileBrowser> <FileActionsMobile>
<template v-slot:file-actions-mobile>
<MobileActionButton @click.native="$openSpotlight" icon="search"> <MobileActionButton @click.native="$openSpotlight" icon="search">
{{ $t('actions.search')}} {{ $t('actions.search')}}
</MobileActionButton> </MobileActionButton>
@@ -59,8 +58,9 @@
<MobileActionButton @click.native="$showViewOptions" icon="preview-sorting"> <MobileActionButton @click.native="$showViewOptions" icon="preview-sorting">
{{ $t('preview_sorting.preview_sorting_button') }} {{ $t('preview_sorting.preview_sorting_button') }}
</MobileActionButton> </MobileActionButton>
</template> </FileActionsMobile>
<FileBrowser>
<template v-slot:empty-file-page> <template v-slot:empty-file-page>
<h1 class="title">{{ $t('empty_page.title') }}</h1> <h1 class="title">{{ $t('empty_page.title') }}</h1>
</template> </template>
@@ -74,6 +74,7 @@
</template> </template>
<script> <script>
import FileActionsMobile from "../../components/FilesView/FileActionsMobile";
import MobileActionButtonUpload from '/resources/js/components/FilesView/MobileActionButtonUpload' import MobileActionButtonUpload from '/resources/js/components/FilesView/MobileActionButtonUpload'
import MobileActionButton from '/resources/js/components/FilesView/MobileActionButton' import MobileActionButton from '/resources/js/components/FilesView/MobileActionButton'
import MobileMultiSelectToolbar from "/resources/js/components/FilesView/MobileMultiSelectToolbar" import MobileMultiSelectToolbar from "/resources/js/components/FilesView/MobileMultiSelectToolbar"
@@ -98,6 +99,7 @@
FileBrowser, FileBrowser,
ContextMenu, ContextMenu,
Option, Option,
FileActionsMobile,
}, },
computed: { computed: {
...mapGetters([ ...mapGetters([
+38 -32
View File
@@ -1,5 +1,5 @@
<template> <template>
<div id="application-wrapper"> <div class="sm:flex md:h-screen md:overflow-hidden">
<!--On Top of App Components--> <!--On Top of App Components-->
<FilePreview /> <FilePreview />
@@ -33,9 +33,30 @@
<SidebarNavigation /> <SidebarNavigation />
<PanelNavigationFiles /> <PanelNavigationFiles />
<div @contextmenu.prevent.capture="contextMenu($event, undefined)" id="file-view"> <div
<DesktopToolbar/> @contextmenu.prevent.capture="contextMenu($event, undefined)"
<router-view :key="$route.fullPath" /> class="md:grid md:content-start sm:flex-grow sm:px-3.5 transition-transform duration-200"
:class="{'transform scale-97 origin-center': isScaledDown}"
>
<DesktopToolbar />
<MobileToolbar />
<!--File list & info sidebar-->
<div class="flex space-x-6 md:overflow-hidden md:h-full">
<router-view
id="file-view"
:class="{'2xl:w-5/6 md:w-4/6 w-full': isVisibleSidebar, 'w-full': ! isVisibleSidebar}"
class="relative"
:key="$route.fullPath"
/>
<InfoSidebar
v-if="isVisibleSidebar"
class="2xl:w-72 w-2/6 overflow-y-auto overflow-x-hidden h-screen md:block hidden"
/>
</div>
</div> </div>
</div> </div>
</template> </template>
@@ -50,16 +71,19 @@
import ShareCreatePopup from '/resources/js/components/Others/ShareCreatePopup' import ShareCreatePopup from '/resources/js/components/Others/ShareCreatePopup'
import DesktopToolbar from '/resources/js/components/FilesView/DesktopToolbar' import DesktopToolbar from '/resources/js/components/FilesView/DesktopToolbar'
import CreateTeamFolderPopup from "../components/Teams/CreateTeamFolderPopup" import CreateTeamFolderPopup from "../components/Teams/CreateTeamFolderPopup"
import EditTeamFolderPopup from "../components/Teams/EditTeamFolderPopup"
import ConfirmPopup from '/resources/js/components/Others/Popup/ConfirmPopup' import ConfirmPopup from '/resources/js/components/Others/Popup/ConfirmPopup'
import RenameItemPopup from '/resources/js/components/Others/RenameItemPopup' import RenameItemPopup from '/resources/js/components/Others/RenameItemPopup'
import PanelNavigationFiles from "./FileView/Components/PanelNavigationFiles"
import MobileToolbar from '/resources/js/components/FilesView/MobileToolbar'
import ShareEditPopup from '/resources/js/components/Others/ShareEditPopup' import ShareEditPopup from '/resources/js/components/Others/ShareEditPopup'
import MoveItemPopup from '/resources/js/components/Others/MoveItemPopup'
import FilePreview from '/resources/js/components/FilePreview/FilePreview' import FilePreview from '/resources/js/components/FilePreview/FilePreview'
import MoveItemPopup from '/resources/js/components/Others/MoveItemPopup'
import EditTeamFolderPopup from "../components/Teams/EditTeamFolderPopup"
import Spotlight from '/resources/js/components/Spotlight/Spotlight' import Spotlight from '/resources/js/components/Spotlight/Spotlight'
import DragUI from '/resources/js/components/FilesView/DragUI' import DragUI from '/resources/js/components/FilesView/DragUI'
import PanelNavigationFiles from "./FileView/Components/PanelNavigationFiles" import InfoSidebar from "../components/FilesView/InfoSidebar"
import {events} from '/resources/js/bus' import {events} from '/resources/js/bus'
import {mapGetters} from "vuex"
export default { export default {
name: 'Platform', name: 'Platform',
@@ -78,11 +102,18 @@
ShareEditPopup, ShareEditPopup,
DesktopToolbar, DesktopToolbar,
MoveItemPopup, MoveItemPopup,
MobileToolbar,
ConfirmPopup, ConfirmPopup,
InfoSidebar,
FilePreview, FilePreview,
Spotlight, Spotlight,
DragUI, DragUI,
}, },
computed: {
...mapGetters([
'isVisibleSidebar'
])
},
data() { data() {
return { return {
isScaledDown: false isScaledDown: false
@@ -100,28 +131,3 @@
} }
} }
</script> </script>
<style lang="scss">
@import '/resources/sass/vuefilemanager/_mixins';
#file-view {
font-family: 'Nunito', sans-serif;
font-size: 16px;
width: 100%;
height: 100%;
position: relative;
min-width: 320px;
overflow-x: hidden;
padding-left: 15px;
padding-right: 15px;
overflow-y: hidden;
@include transition(120ms);
}
@media only screen and (max-width: 690px) {
.is-scaled-down {
@include transform(scale(0.95));
}
}
</style>
+9 -9
View File
@@ -1,9 +1,16 @@
<template> <template>
<section id="viewport"> <div class="sm:flex md:h-screen md:overflow-hidden">
<!--On Top of App Components--> <!--On Top of App Components-->
<FilePreview /> <FilePreview />
<Spotlight /> <Spotlight />
<!--2FA popups-->
<TwoFactorRecoveryCodesPopup />
<TwoFactorSetupPopup />
<!--Access Token Popup-->
<CreatePersonaTokenPopup />
<SidebarNavigation /> <SidebarNavigation />
<PanelNavigationUser /> <PanelNavigationUser />
@@ -61,14 +68,7 @@
<Spinner></Spinner> <Spinner></Spinner>
</div> </div>
</div> </div>
</div>
<!--2FA popups-->
<TwoFactorRecoveryCodesPopup />
<TwoFactorSetupPopup />
<!--Access Token Popup-->
<CreatePersonaTokenPopup />
</section>
</template> </template>
<script> <script>
+9 -5
View File
@@ -3,11 +3,13 @@
<!--Database Credentials--> <!--Database Credentials-->
<AuthContent name="database-credentials" :visible="true"> <AuthContent name="database-credentials" :visible="true">
<div class="content-headline"> <Headline
<settings-icon size="40" class="title-icon text-theme" /> class="container mx-auto max-w-screen-sm"
<h1>Setup Wizard</h1> title="Setup Wizard"
<h2>Set up your application appearance, analytics, etc.</h2> description="Set up your application appearance, analytics, etc."
</div> >
<settings-icon size="40" class="title-icon text-theme mx-auto" />
</Headline>
<ValidationObserver @submit.prevent="appSetupSubmit" ref="appSetup" v-slot="{ invalid }" tag="form" <ValidationObserver @submit.prevent="appSetupSubmit" ref="appSetup" v-slot="{ invalid }" tag="form"
class="form block-form"> class="form block-form">
@@ -145,6 +147,7 @@
import AuthContent from '/resources/js/components/Auth/AuthContent' import AuthContent from '/resources/js/components/Auth/AuthContent'
import AuthButton from '/resources/js/components/Auth/AuthButton' import AuthButton from '/resources/js/components/Auth/AuthButton'
import {SettingsIcon} from 'vue-feather-icons' import {SettingsIcon} from 'vue-feather-icons'
import Headline from "../Auth/Headline"
import {required} from 'vee-validate/dist/rules' import {required} from 'vee-validate/dist/rules'
import {mapGetters} from 'vuex' import {mapGetters} from 'vuex'
import axios from 'axios' import axios from 'axios'
@@ -164,6 +167,7 @@
FormLabel, FormLabel,
required, required,
InfoBox, InfoBox,
Headline,
}, },
data() { data() {
return { return {
@@ -3,12 +3,13 @@
<!--Database Credentials--> <!--Database Credentials-->
<AuthContent name="database-credentials" :visible="true"> <AuthContent name="database-credentials" :visible="true">
<div class="content-headline"> <Headline
<settings-icon size="40" class="title-icon text-theme"/> class="container mx-auto max-w-screen-sm"
<h1>Setup Wizard</h1> title="Setup Wizard"
<h2>Set up your billing information.</h2> description="Set up your billing information."
</div> >
<settings-icon size="40" class="title-icon text-theme mx-auto" />
</Headline>
<ValidationObserver @submit.prevent="billingInformationSubmit" ref="billingInformation" v-slot="{ invalid }" <ValidationObserver @submit.prevent="billingInformationSubmit" ref="billingInformation" v-slot="{ invalid }"
tag="form" class="form block-form"> tag="form" class="form block-form">
<FormLabel>Company Information</FormLabel> <FormLabel>Company Information</FormLabel>
@@ -114,6 +115,7 @@
import AuthContent from '/resources/js/components/Auth/AuthContent' import AuthContent from '/resources/js/components/Auth/AuthContent'
import AuthButton from '/resources/js/components/Auth/AuthButton' import AuthButton from '/resources/js/components/Auth/AuthButton'
import {SettingsIcon} from 'vue-feather-icons' import {SettingsIcon} from 'vue-feather-icons'
import Headline from "../Auth/Headline"
import {required} from 'vee-validate/dist/rules' import {required} from 'vee-validate/dist/rules'
import {mapGetters} from 'vuex' import {mapGetters} from 'vuex'
import axios from 'axios' import axios from 'axios'
@@ -131,6 +133,7 @@
FormLabel, FormLabel,
required, required,
InfoBox, InfoBox,
Headline,
}, },
computed: { computed: {
...mapGetters(['countries']), ...mapGetters(['countries']),
+9 -5
View File
@@ -3,11 +3,13 @@
<!--Database Credentials--> <!--Database Credentials-->
<AuthContent name="database-credentials" :visible="true"> <AuthContent name="database-credentials" :visible="true">
<div class="content-headline"> <Headline
<settings-icon size="40" class="title-icon text-theme"/> class="container mx-auto max-w-screen-sm"
<h1>Setup Wizard</h1> title="Setup Wizard"
<h2>Set up your database connection to install application database.</h2> description="Set up your database connection to install application database."
</div> >
<settings-icon size="40" class="title-icon text-theme mx-auto" />
</Headline>
<ValidationObserver @submit.prevent="databaseCredentialsSubmit" ref="verifyPurchaseCode" v-slot="{ invalid }" tag="form" class="form block-form"> <ValidationObserver @submit.prevent="databaseCredentialsSubmit" ref="verifyPurchaseCode" v-slot="{ invalid }" tag="form" class="form block-form">
<FormLabel>Database Credentials</FormLabel> <FormLabel>Database Credentials</FormLabel>
@@ -94,6 +96,7 @@
import AuthButton from '/resources/js/components/Auth/AuthButton' import AuthButton from '/resources/js/components/Auth/AuthButton'
import { SettingsIcon } from 'vue-feather-icons' import { SettingsIcon } from 'vue-feather-icons'
import {required} from 'vee-validate/dist/rules' import {required} from 'vee-validate/dist/rules'
import Headline from "../Auth/Headline"
import {mapGetters} from 'vuex' import {mapGetters} from 'vuex'
import axios from 'axios' import axios from 'axios'
@@ -110,6 +113,7 @@
FormLabel, FormLabel,
required, required,
InfoBox, InfoBox,
Headline,
}, },
computed: { computed: {
submitButtonText() { submitButtonText() {
@@ -3,12 +3,13 @@
<!--Database Credentials--> <!--Database Credentials-->
<AuthContent name="database-credentials" :visible="true"> <AuthContent name="database-credentials" :visible="true">
<div class="content-headline"> <Headline
<settings-icon size="40" class="title-icon text-theme"/> class="container mx-auto max-w-screen-sm"
<h1>Setup Wizard</h1> title="Setup Wizard"
<h2>Set up your storage driver and email client.</h2> description="Set up your storage driver and email client."
</div> >
<settings-icon size="40" class="title-icon text-theme mx-auto" />
</Headline>
<ValidationObserver @submit.prevent="EnvironmentSetupSubmit" ref="environmentSetup" v-slot="{ invalid }" tag="form" class="form block-form"> <ValidationObserver @submit.prevent="EnvironmentSetupSubmit" ref="environmentSetup" v-slot="{ invalid }" tag="form" class="form block-form">
<InfoBox> <InfoBox>
<p>If you dont know which storage driver set, keep selected <b>'Local Driver'</b>. For more info, where <p>If you dont know which storage driver set, keep selected <b>'Local Driver'</b>. For more info, where
@@ -141,6 +142,7 @@ import InfoBox from '/resources/js/components/Others/Forms/InfoBox'
import AuthContent from '/resources/js/components/Auth/AuthContent' import AuthContent from '/resources/js/components/Auth/AuthContent'
import AuthButton from '/resources/js/components/Auth/AuthButton' import AuthButton from '/resources/js/components/Auth/AuthButton'
import {SettingsIcon} from 'vue-feather-icons' import {SettingsIcon} from 'vue-feather-icons'
import Headline from "../Auth/Headline"
import {required} from 'vee-validate/dist/rules' import {required} from 'vee-validate/dist/rules'
import {mapGetters} from 'vuex' import {mapGetters} from 'vuex'
import axios from 'axios' import axios from 'axios'
@@ -158,6 +160,7 @@ export default {
FormLabel, FormLabel,
required, required,
InfoBox, InfoBox,
Headline,
}, },
watch: { watch: {
'storage.driver': function () { 'storage.driver': function () {
@@ -3,12 +3,13 @@
<!--Database Credentials--> <!--Database Credentials-->
<AuthContent name="database-credentials" :visible="true"> <AuthContent name="database-credentials" :visible="true">
<div class="content-headline"> <Headline
<settings-icon size="40" class="title-icon text-theme"/> class="container mx-auto max-w-screen-sm"
<h1>Setup Wizard</h1> title="Setup Wizard"
<h2>Database was installed successfully. Let's set up application, Make sure you have these informations before continue:</h2> description="Database was installed successfully. Let's set up application, Make sure you have these informations before continue:"
</div> >
<settings-icon size="40" class="title-icon text-theme mx-auto" />
</Headline>
<div id="loader" v-if="isLoading"> <div id="loader" v-if="isLoading">
<Spinner></Spinner> <Spinner></Spinner>
</div> </div>
@@ -77,6 +78,7 @@
import Spinner from '/resources/js/components/FilesView/Spinner' import Spinner from '/resources/js/components/FilesView/Spinner'
import { SettingsIcon } from 'vue-feather-icons' import { SettingsIcon } from 'vue-feather-icons'
import {required} from 'vee-validate/dist/rules' import {required} from 'vee-validate/dist/rules'
import Headline from "../Auth/Headline"
import {mapGetters} from 'vuex' import {mapGetters} from 'vuex'
import axios from 'axios' import axios from 'axios'
@@ -94,6 +96,7 @@
required, required,
Spinner, Spinner,
InfoBox, InfoBox,
Headline,
}, },
data() { data() {
return { return {
@@ -4,11 +4,13 @@
<!--Licence Verify--> <!--Licence Verify-->
<AuthContent name="licence-verify" :visible="true"> <AuthContent name="licence-verify" :visible="true">
<div class="content-headline"> <Headline
<settings-icon size="40" class="title-icon text-theme"/> class="container mx-auto max-w-screen-sm"
<h1>Setup Wizard</h1> title="Setup Wizard"
<h2>Please set your purchase code before continue to set up your application.</h2> description="Please set your purchase code before continue to set up your application."
</div> >
<settings-icon size="40" class="title-icon text-theme mx-auto" />
</Headline>
<ValidationObserver @submit.prevent="verifyPurchaseCode" ref="verifyPurchaseCode" v-slot="{ invalid }" tag="form" class="form inline-form"> <ValidationObserver @submit.prevent="verifyPurchaseCode" ref="verifyPurchaseCode" v-slot="{ invalid }" tag="form" class="form inline-form">
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Purchase Code" rules="required" v-slot="{ errors }"> <ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Purchase Code" rules="required" v-slot="{ errors }">
@@ -38,6 +40,7 @@
import AuthButton from '/resources/js/components/Auth/AuthButton' import AuthButton from '/resources/js/components/Auth/AuthButton'
import { SettingsIcon } from 'vue-feather-icons' import { SettingsIcon } from 'vue-feather-icons'
import {required} from 'vee-validate/dist/rules' import {required} from 'vee-validate/dist/rules'
import Headline from "../Auth/Headline"
import {mapGetters} from 'vuex' import {mapGetters} from 'vuex'
import axios from 'axios' import axios from 'axios'
@@ -52,6 +55,7 @@
AuthButton, AuthButton,
required, required,
InfoBox, InfoBox,
Headline,
}, },
data() { data() {
return { return {
+10 -5
View File
@@ -3,11 +3,14 @@
<!--Database Credentials--> <!--Database Credentials-->
<AuthContent name="database-credentials" :visible="true"> <AuthContent name="database-credentials" :visible="true">
<div class="content-headline">
<settings-icon size="40" class="title-icon text-theme" /> <Headline
<h1>Server Check</h1> class="container mx-auto max-w-screen-sm"
<h2>At first, we have to check if all modules and setup is ready for running VueFileManager.</h2> title="Server Check"
</div> description="At first, we have to check if all modules and setup is ready for running VueFileManager"
>
<settings-icon size="40" class="title-icon text-theme mx-auto" />
</Headline>
<div class="form block-form"> <div class="form block-form">
@@ -107,6 +110,7 @@
import AuthButton from '/resources/js/components/Auth/AuthButton' import AuthButton from '/resources/js/components/Auth/AuthButton'
import {SettingsIcon} from 'vue-feather-icons' import {SettingsIcon} from 'vue-feather-icons'
import {required} from 'vee-validate/dist/rules' import {required} from 'vee-validate/dist/rules'
import Headline from "../Auth/Headline"
import {mapGetters} from 'vuex' import {mapGetters} from 'vuex'
import axios from 'axios' import axios from 'axios'
import { import {
@@ -128,6 +132,7 @@
required, required,
InfoBox, InfoBox,
CheckIcon, CheckIcon,
Headline,
XIcon, XIcon,
}, },
computed: { computed: {
@@ -3,11 +3,14 @@
<!--Database Credentials--> <!--Database Credentials-->
<AuthContent name="database-credentials" :visible="true"> <AuthContent name="database-credentials" :visible="true">
<div class="content-headline">
<settings-icon size="40" class="title-icon text-theme"/> <Headline
<h1>Setup Wizard</h1> class="container mx-auto max-w-screen-sm"
<h2>Set up your database credentials.</h2> title="Setup Wizard"
</div> description="Set up your database credentials."
>
<settings-icon size="40" class="title-icon text-theme mx-auto" />
</Headline>
<ValidationObserver @submit.prevent="stripeCredentialsSubmit" ref="stripeCredentials" v-slot="{ invalid }" tag="form" class="form block-form"> <ValidationObserver @submit.prevent="stripeCredentialsSubmit" ref="stripeCredentials" v-slot="{ invalid }" tag="form" class="form block-form">
<InfoBox> <InfoBox>
@@ -86,8 +89,9 @@
import InfoBox from '/resources/js/components/Others/Forms/InfoBox' import InfoBox from '/resources/js/components/Others/Forms/InfoBox'
import AuthContent from '/resources/js/components/Auth/AuthContent' import AuthContent from '/resources/js/components/Auth/AuthContent'
import AuthButton from '/resources/js/components/Auth/AuthButton' import AuthButton from '/resources/js/components/Auth/AuthButton'
import {SettingsIcon} from 'vue-feather-icons'
import {required} from 'vee-validate/dist/rules' import {required} from 'vee-validate/dist/rules'
import {SettingsIcon} from 'vue-feather-icons'
import Headline from "../Auth/Headline"
import {mapGetters} from 'vuex' import {mapGetters} from 'vuex'
import axios from 'axios' import axios from 'axios'
@@ -104,6 +108,7 @@
FormLabel, FormLabel,
required, required,
InfoBox, InfoBox,
Headline,
}, },
computed: { computed: {
...mapGetters(['config', 'currencyList']), ...mapGetters(['config', 'currencyList']),
@@ -3,11 +3,14 @@
<!--Database Credentials--> <!--Database Credentials-->
<AuthContent name="database-credentials" :visible="true"> <AuthContent name="database-credentials" :visible="true">
<div class="content-headline">
<settings-icon size="40" class="title-icon text-theme"/> <Headline
<h1>Setup Wizard</h1> class="container mx-auto max-w-screen-sm"
<h2>Set up plans for your customers.</h2> title="Setup Wizard"
</div> description="Set up plans for your customers."
>
<settings-icon size="40" class="title-icon text-theme mx-auto" />
</Headline>
<ValidationObserver @submit.prevent="subscriptionPlansSubmit" ref="subscriptionPlans" v-slot="{ invalid }" <ValidationObserver @submit.prevent="subscriptionPlansSubmit" ref="subscriptionPlans" v-slot="{ invalid }"
tag="form" class="form block-form"> tag="form" class="form block-form">
@@ -99,6 +102,7 @@
import {SettingsIcon} from 'vue-feather-icons' import {SettingsIcon} from 'vue-feather-icons'
import {required} from 'vee-validate/dist/rules' import {required} from 'vee-validate/dist/rules'
import {XIcon} from 'vue-feather-icons' import {XIcon} from 'vue-feather-icons'
import Headline from "../Auth/Headline"
import {mapGetters} from 'vuex' import {mapGetters} from 'vuex'
import axios from 'axios' import axios from 'axios'
@@ -117,6 +121,7 @@
required, required,
InfoBox, InfoBox,
XIcon, XIcon,
Headline,
}, },
computed: { computed: {
submitButtonText() { submitButtonText() {
@@ -4,11 +4,13 @@
<!--Licence Verify--> <!--Licence Verify-->
<AuthContent name="subscription-service" :visible="true"> <AuthContent name="subscription-service" :visible="true">
<div class="content-headline"> <Headline
<settings-icon size="40" class="title-icon text-theme"/> class="container mx-auto max-w-screen-sm"
<h1>Setup Wizard</h1> title="Setup Wizard"
<h2>You can charge users for storage space by monthly billing plans. Please, select your charging service or skip this step if you don't want charge users:</h2> description="You can charge users for storage space by monthly billing plans. Please, select your charging service or skip this step if you don't want charge users:"
</div> >
<settings-icon size="40" class="title-icon text-theme mx-auto" />
</Headline>
<div class="services"> <div class="services">
<router-link :to="{name: 'StripeCredentials'}" tag="div" class="service-card"> <router-link :to="{name: 'StripeCredentials'}" tag="div" class="service-card">
@@ -42,6 +44,7 @@
import AuthButton from '/resources/js/components/Auth/AuthButton' import AuthButton from '/resources/js/components/Auth/AuthButton'
import { SettingsIcon, ChevronRightIcon } from 'vue-feather-icons' import { SettingsIcon, ChevronRightIcon } from 'vue-feather-icons'
import {required} from 'vee-validate/dist/rules' import {required} from 'vee-validate/dist/rules'
import Headline from "../Auth/Headline"
import {mapGetters} from 'vuex' import {mapGetters} from 'vuex'
import axios from 'axios' import axios from 'axios'
@@ -56,6 +59,7 @@
AuthContent, AuthContent,
AuthButton, AuthButton,
required, required,
Headline,
}, },
data() { data() {
return { return {
+30 -30
View File
@@ -1,5 +1,5 @@
<template> <template>
<div id="application-wrapper"> <div class="sm:flex md:h-screen md:overflow-hidden">
<!--Loading Spinner--> <!--Loading Spinner-->
<Spinner v-if="isLoading" /> <Spinner v-if="isLoading" />
@@ -26,15 +26,37 @@
<NavigationSharePanel v-if="sharedDetail && $router.currentRoute.name === 'Public'"/> <NavigationSharePanel v-if="sharedDetail && $router.currentRoute.name === 'Public'"/>
<div @contextmenu.prevent.capture="contextMenu($event, undefined)" id="file-view"> <div
<DesktopToolbar/> @contextmenu.prevent.capture="contextMenu($event, undefined)"
<!--TODO: fix desktopbar on authentication screen--> class="md:grid md:content-start sm:flex-grow sm:px-3.5 transition-transform duration-300"
<router-view :key="$route.fullPath" /> :class="{'transform scale-97 origin-center': isScaledDown}"
>
<DesktopToolbar />
<MobileToolbar />
<!--File list & info sidebar-->
<div class="flex space-x-6 md:overflow-hidden md:h-full">
<router-view
id="file-view"
:class="{'2xl:w-5/6 md:w-4/6 w-full': isVisibleSidebar, 'w-full': ! isVisibleSidebar}"
class="relative"
:key="$route.fullPath"
/>
<InfoSidebar
v-if="isVisibleSidebar"
class="2xl:w-72 w-2/6 overflow-y-auto overflow-x-hidden h-screen md:block hidden"
/>
</div>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import MobileToolbar from '/resources/js/components/FilesView/MobileToolbar'
import InfoSidebar from "../components/FilesView/InfoSidebar";
import MobileMultiSelectToolbar from '/resources/js/components/FilesView/MobileMultiSelectToolbar' import MobileMultiSelectToolbar from '/resources/js/components/FilesView/MobileMultiSelectToolbar'
import FileSortingMobile from '/resources/js/components/FilesView/FileSortingMobile' import FileSortingMobile from '/resources/js/components/FilesView/FileSortingMobile'
import CreateFolderPopup from '/resources/js/components/Others/CreateFolderPopup' import CreateFolderPopup from '/resources/js/components/Others/CreateFolderPopup'
@@ -55,6 +77,8 @@
export default { export default {
name: 'Shared', name: 'Shared',
components: { components: {
MobileToolbar,
InfoSidebar,
NavigationSharePanel, NavigationSharePanel,
MobileMultiSelectToolbar, MobileMultiSelectToolbar,
CreateFolderPopup, CreateFolderPopup,
@@ -72,6 +96,7 @@
}, },
computed: { computed: {
...mapGetters([ ...mapGetters([
'isVisibleSidebar',
'sharedDetail', 'sharedDetail',
'config', 'config',
]) ])
@@ -122,28 +147,3 @@
} }
} }
</script> </script>
<style lang="scss">
@import '/resources/sass/vuefilemanager/_mixins';
#file-view {
font-family: 'Nunito', sans-serif;
font-size: 16px;
width: 100%;
height: 100%;
position: relative;
min-width: 320px;
overflow-x: hidden;
padding-left: 15px;
padding-right: 15px;
overflow-y: hidden;
@include transition(120ms);
}
@media only screen and (max-width: 690px) {
.is-scaled-down {
@include transform(scale(0.95));
}
}
</style>
-10
View File
@@ -11,16 +11,6 @@
flex: 1; flex: 1;
} }
#application-wrapper {
display: flex;
height: 100%;
#content {
position: relative;
width: 100%;
}
}
#single-page { #single-page {
overflow-x: hidden; overflow-x: hidden;
width: 100%; width: 100%;
+3 -2
View File
@@ -34,8 +34,9 @@
@include('vuefilemanager.others.color-template') @include('vuefilemanager.others.color-template')
</head> </head>
<body> <body class="{{ is_dev() ? 'debug-screens' : '' }}">
<div id="app"></div>
<div id="app"></div>
<script> <script>
let config = { let config = {
@@ -99,6 +99,8 @@
.StripeElement--focus {border-color: {{ $color }} !important;} .StripeElement--focus {border-color: {{ $color }} !important;}
{{-- Dark mode --}} {{-- Dark mode --}}
.dark .dark-text-theme {color: {{ $color }} !important;}
.dark .text-theme { .dark .text-theme {
color: {{ $color }} color: {{ $color }}
} }
+15 -3
View File
@@ -1,8 +1,14 @@
module.exports = { module.exports = {
purge: [], purge: { content: ['./resources/js/**/*.{js,jsx,ts,tsx,vue}',] },
darkMode: 'class', // or 'media' or 'class' darkMode: 'class', // or 'media' or 'class'
theme: { theme: {
debugScreens: {
position: ['bottom', 'right'],
},
extend: { extend: {
scale: {
'97': '.97',
},
borderWidth: { borderWidth: {
'3': '3px', '3': '3px',
}, },
@@ -12,11 +18,17 @@ module.exports = {
}), }),
fontSize: { fontSize: {
tiny: ['11px', '16px'], tiny: ['11px', '16px'],
} },
backgroundColor: theme => ({
'dark-background': '#151515',
'dark-foreground': '#1e2024',
}),
}, },
}, },
variants: { variants: {
extend: {}, extend: {},
}, },
plugins: [], plugins: [
require('tailwindcss-debug-screens'),
],
} }
+3 -3
View File
@@ -35,12 +35,12 @@ mix.js('resources/js/main.js', 'public/js')
clientLogLevel: 'none' clientLogLevel: 'none'
} }
}) })
/*.options({ .options({
hmrOptions: { hmrOptions: {
host: '192.168.1.198', host: '192.168.1.112',
port: '8080' port: '8080'
}, },
})*/ })
.disableNotifications(); .disableNotifications();
if (mix.inProduction()) { if (mix.inProduction()) {