1
1
<template >
2
- <div class =" fm-grid" >
3
- <div class =" d-flex align-content-start flex-wrap" >
4
- <div v-if =" !isRootPath" v-on:click =" levelUp" class =" fm-grid-item text-center" >
5
- <div class =" fm-item-icon" >
6
- <i class =" fas fa-level-up-alt fa-5x pb-2" />
7
- </div >
8
- <div class =" fm-item-info" ><strong >..</strong ></div >
9
- </div >
10
-
11
- <div class =" fm-grid-item text-center unselectable"
12
- v-for =" (directory, index) in directories"
13
- v-bind:key =" `d-${index}`"
14
- v-bind:title =" directory.basename"
15
- v-bind:class =" {'active': checkSelect('directories', directory.path)}"
16
- v-on:click =" selectItem('directories', directory.path, $event)"
17
- v-on:dblclick.stop =" selectDirectory(directory.path)"
18
- v-on:contextmenu.prevent =" contextMenu(directory, $event)" >
19
- <div class =" fm-item-icon" >
20
- <i class =" fa-5x pb-2"
21
- v-bind:class =" (acl && directory.acl === 0) ? 'fas fa-unlock-alt' : 'far fa-folder'" />
22
- </div >
23
- <div class =" fm-item-info" >{{ directory.basename }}</div >
24
- </div >
25
-
26
- <div class =" fm-grid-item text-center unselectable"
27
- v-for =" (file, index) in files"
28
- v-bind:key =" `f-${index}`"
29
- v-bind:title =" file.basename"
30
- v-bind:class =" {'active': checkSelect('files', file.path)}"
31
- v-on:click =" selectItem('files', file.path, $event)"
32
- v-on:dblclick =" selectAction(file.path, file.extension)"
33
- v-on:contextmenu.prevent =" contextMenu(file, $event)" >
34
- <div class =" fm-item-icon" >
35
- <i v-if =" acl && file.acl === 0" class =" fas fa-unlock-alt fa-5x pb-2" />
36
- <thumbnail v-else-if =" thisImage(file.extension)"
37
- v-bind:disk =" disk"
38
- v-bind:file =" file" >
39
- </thumbnail >
40
- <i v-else class =" far fa-5x pb-2"
41
- v-bind:class =" extensionToIcon(file.extension)" />
42
- </div >
43
- <div class =" fm-item-info" >
44
- {{ `${file.filename}.${file.extension}` }}
45
- <br >
46
- {{ bytesToHuman(file.size) }}
47
- </div >
48
- </div >
2
+ <div class =" fm-grid" v-if =" !isLoading" >
3
+ <div class =" d-flex align-content-start flex-wrap" >
4
+ <div v-if =" !isRootPath" v-on:click =" levelUp" class =" fm-grid-item text-center" >
5
+ <div class =" fm-item-icon" >
6
+ <i class =" fas fa-level-up-alt fa-5x pb-2" />
7
+ </div >
8
+ <div class =" fm-item-info" ><strong >..</strong ></div >
9
+ </div >
10
+ <div class =" fm-grid-item text-center unselectable" v-for =" (directory, index) in directories" v-bind:key =" `d-${index}`" v-bind:title =" directory.basename" v-bind:class =" {'active': checkSelect('directories', directory.path)}" v-on:click =" selectItem('directories', directory.path, $event)" v-on:dblclick.stop =" selectDirectory(directory.path)" v-on:contextmenu.prevent =" contextMenu(directory, $event)" >
11
+ <div class =" fm-item-icon" >
12
+ <i class =" fa-5x pb-2" v-bind:class =" (acl && directory.acl === 0) ? 'fas fa-unlock-alt' : 'far fa-folder'" />
13
+ </div >
14
+ <div class =" fm-item-info" >{{ directory.basename }}</div >
15
+ </div >
16
+ <div class =" fm-grid-item text-center unselectable" v-for =" (file, index) in files" v-bind:key =" `f-${index}`" v-bind:title =" file.basename" v-bind:class =" {'active': checkSelect('files', file.path)}" v-on:click =" selectItem('files', file.path, $event)" v-on:dblclick =" selectAction(file.path, file.extension)" v-on:contextmenu.prevent =" contextMenu(file, $event)" >
17
+ <div class =" fm-item-icon" >
18
+ <i v-if =" acl && file.acl === 0" class =" fas fa-unlock-alt fa-5x pb-2" />
19
+ <thumbnail v-else-if =" thisImage(file.extension)" v-bind:disk =" disk" v-bind:file =" file" >
20
+ </thumbnail >
21
+ <i v-else class =" far fa-5x pb-2" v-bind:class =" extensionToIcon(file.extension)" />
22
+ </div >
23
+ <div class =" fm-item-info" >
24
+ {{ `${file.filename}.${file.extension}` }}
25
+ <br > {{ bytesToHuman(file.size) }}
26
+ <br > <small ><b >{{ file.dimensions }}</b ></small >
49
27
</div >
28
+ </div >
50
29
</div >
30
+ </div >
51
31
</template >
52
32
53
33
<script >
@@ -62,6 +42,7 @@ export default {
62
42
mixins: [translate, helper, managerHelper],
63
43
data () {
64
44
return {
45
+ isLoading: false ,
65
46
disk: ' ' ,
66
47
};
67
48
},
@@ -70,6 +51,21 @@ export default {
70
51
},
71
52
mounted () {
72
53
this .disk = this .selectedDisk ;
54
+ /* eslint space-before-function-paren: ["error", "never"] */
55
+ this .isLoading = true ;
56
+ const filesBuilder = new Promise ((resolve ) => {
57
+ this .files .forEach (async (image, index) => {
58
+ const dimensions = await this .getFileDimension (this .disk , image);
59
+ this .files [index].dimensions = dimensions;
60
+ if (index === this .files .length - 1 ) {
61
+ resolve ();
62
+ }
63
+ });
64
+ });
65
+
66
+ filesBuilder .then (() => {
67
+ this .isLoading = false ;
68
+ });
73
69
},
74
70
beforeUpdate () {
75
71
// if disk changed
@@ -103,41 +99,35 @@ export default {
103
99
</script >
104
100
105
101
<style lang="scss">
106
- .fm-grid {
107
- padding-top : 1rem ;
108
-
109
- .fm-grid-item {
110
- position : relative ;
111
- width : 125px ;
112
- padding : 0.4rem ;
113
- margin-bottom : 1rem ;
114
- margin-right : 1rem ;
115
- border-radius : 5px ;
116
-
117
- & .active {
118
- background-color : #c2e5eb ;
119
- box-shadow : 3px 2px 5px gray ;
120
- }
121
-
122
- & :not (.active ):hover {
123
- background-color : #f8f9fa ;
124
- box-shadow : 3px 2px 5px gray ;
125
- }
126
-
127
- .fm-item-icon {
128
- cursor : pointer ;
129
- }
130
-
131
- .fm-item-icon > i ,
132
- .fm-item-icon > figure > i {
133
- color : #6d757d ;
134
- }
135
-
136
- .fm-item-info {
137
- overflow : hidden ;
138
- text-overflow : ellipsis ;
139
- white-space : nowrap ;
140
- }
141
- }
102
+ .fm-grid {
103
+ padding-top : 1rem ;
104
+ .fm-grid-item {
105
+ position : relative ;
106
+ width : 125px ;
107
+ padding : 0.4rem ;
108
+ margin-bottom : 1rem ;
109
+ margin-right : 1rem ;
110
+ border-radius : 5px ;
111
+ & .active {
112
+ background-color : #c2e5eb ;
113
+ box-shadow : 3px 2px 5px gray ;
114
+ }
115
+ & :not (.active ):hover {
116
+ background-color : #f8f9fa ;
117
+ box-shadow : 3px 2px 5px gray ;
118
+ }
119
+ .fm-item-icon {
120
+ cursor : pointer ;
121
+ }
122
+ .fm-item-icon > i ,
123
+ .fm-item-icon > figure > i {
124
+ color : #6d757d ;
125
+ }
126
+ .fm-item-info {
127
+ overflow : hidden ;
128
+ text-overflow : ellipsis ;
129
+ white-space : nowrap ;
142
130
}
131
+ }
132
+ }
143
133
</style >
0 commit comments