wip
This commit is contained in:
parent
e707c3d5e3
commit
533f36aac3
4 changed files with 227 additions and 204 deletions
|
@ -1,151 +0,0 @@
|
||||||
<mk-drive-file data-is-selected={ isSelected }>
|
|
||||||
<a @click="onclick" href="/i/drive/file/{ file.id }">
|
|
||||||
<div class="container">
|
|
||||||
<div class="thumbnail" style={ thumbnail }></div>
|
|
||||||
<div class="body">
|
|
||||||
<p class="name"><span>{ file.name.lastIndexOf('.') != -1 ? file.name.substr(0, file.name.lastIndexOf('.')) : file.name }</span><span class="ext" v-if="file.name.lastIndexOf('.') != -1">{ file.name.substr(file.name.lastIndexOf('.')) }</span></p>
|
|
||||||
<!--
|
|
||||||
if file.tags.length > 0
|
|
||||||
ul.tags
|
|
||||||
each tag in file.tags
|
|
||||||
li.tag(style={background: tag.color, color: contrast(tag.color)})= tag.name
|
|
||||||
-->
|
|
||||||
<footer>
|
|
||||||
<p class="type"><mk-file-type-icon type={ file.type }/>{ file.type }</p>
|
|
||||||
<p class="separator"></p>
|
|
||||||
<p class="data-size">{ bytesToSize(file.datasize) }</p>
|
|
||||||
<p class="separator"></p>
|
|
||||||
<p class="created-at">
|
|
||||||
%fa:R clock%<mk-time time={ file.created_at }/>
|
|
||||||
</p>
|
|
||||||
</footer>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</a>
|
|
||||||
<style lang="stylus" scoped>
|
|
||||||
:scope
|
|
||||||
display block
|
|
||||||
|
|
||||||
> a
|
|
||||||
display block
|
|
||||||
text-decoration none !important
|
|
||||||
|
|
||||||
*
|
|
||||||
user-select none
|
|
||||||
pointer-events none
|
|
||||||
|
|
||||||
> .container
|
|
||||||
max-width 500px
|
|
||||||
margin 0 auto
|
|
||||||
padding 16px
|
|
||||||
|
|
||||||
&:after
|
|
||||||
content ""
|
|
||||||
display block
|
|
||||||
clear both
|
|
||||||
|
|
||||||
> .thumbnail
|
|
||||||
display block
|
|
||||||
float left
|
|
||||||
width 64px
|
|
||||||
height 64px
|
|
||||||
background-size cover
|
|
||||||
background-position center center
|
|
||||||
|
|
||||||
> .body
|
|
||||||
display block
|
|
||||||
float left
|
|
||||||
width calc(100% - 74px)
|
|
||||||
margin-left 10px
|
|
||||||
|
|
||||||
> .name
|
|
||||||
display block
|
|
||||||
margin 0
|
|
||||||
padding 0
|
|
||||||
font-size 0.9em
|
|
||||||
font-weight bold
|
|
||||||
color #555
|
|
||||||
text-overflow ellipsis
|
|
||||||
overflow-wrap break-word
|
|
||||||
|
|
||||||
> .ext
|
|
||||||
opacity 0.5
|
|
||||||
|
|
||||||
> .tags
|
|
||||||
display block
|
|
||||||
margin 4px 0 0 0
|
|
||||||
padding 0
|
|
||||||
list-style none
|
|
||||||
font-size 0.5em
|
|
||||||
|
|
||||||
> .tag
|
|
||||||
display inline-block
|
|
||||||
margin 0 5px 0 0
|
|
||||||
padding 1px 5px
|
|
||||||
border-radius 2px
|
|
||||||
|
|
||||||
> footer
|
|
||||||
display block
|
|
||||||
margin 4px 0 0 0
|
|
||||||
font-size 0.7em
|
|
||||||
|
|
||||||
> .separator
|
|
||||||
display inline
|
|
||||||
margin 0
|
|
||||||
padding 0 4px
|
|
||||||
color #CDCDCD
|
|
||||||
|
|
||||||
> .type
|
|
||||||
display inline
|
|
||||||
margin 0
|
|
||||||
padding 0
|
|
||||||
color #9D9D9D
|
|
||||||
|
|
||||||
> mk-file-type-icon
|
|
||||||
margin-right 4px
|
|
||||||
|
|
||||||
> .data-size
|
|
||||||
display inline
|
|
||||||
margin 0
|
|
||||||
padding 0
|
|
||||||
color #9D9D9D
|
|
||||||
|
|
||||||
> .created-at
|
|
||||||
display inline
|
|
||||||
margin 0
|
|
||||||
padding 0
|
|
||||||
color #BDBDBD
|
|
||||||
|
|
||||||
> [data-fa]
|
|
||||||
margin-right 2px
|
|
||||||
|
|
||||||
&[data-is-selected]
|
|
||||||
background $theme-color
|
|
||||||
|
|
||||||
&, *
|
|
||||||
color #fff !important
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<script lang="typescript">
|
|
||||||
import bytesToSize from '../../../common/scripts/bytes-to-size';
|
|
||||||
this.bytesToSize = bytesToSize;
|
|
||||||
|
|
||||||
this.browser = this.parent;
|
|
||||||
this.file = this.opts.file;
|
|
||||||
this.thumbnail = {
|
|
||||||
'background-color': this.file.properties.average_color ? `rgb(${this.file.properties.average_color.join(',')})` : 'transparent',
|
|
||||||
'background-image': `url(${this.file.url}?thumbnail&size=128)`
|
|
||||||
};
|
|
||||||
this.isSelected = this.browser.selectedFiles.some(f => f.id == this.file.id);
|
|
||||||
|
|
||||||
this.browser.on('change-selection', selections => {
|
|
||||||
this.isSelected = selections.some(f => f.id == this.file.id);
|
|
||||||
});
|
|
||||||
|
|
||||||
this.onclick = ev => {
|
|
||||||
ev.preventDefault();
|
|
||||||
this.browser.chooseFile(this.file);
|
|
||||||
return false;
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
</mk-drive-file>
|
|
|
@ -1,53 +0,0 @@
|
||||||
<mk-drive-folder>
|
|
||||||
<a @click="onclick" href="/i/drive/folder/{ folder.id }">
|
|
||||||
<div class="container">
|
|
||||||
<p class="name">%fa:folder%{ folder.name }</p>%fa:angle-right%
|
|
||||||
</div>
|
|
||||||
</a>
|
|
||||||
<style lang="stylus" scoped>
|
|
||||||
:scope
|
|
||||||
display block
|
|
||||||
|
|
||||||
> a
|
|
||||||
display block
|
|
||||||
color #777
|
|
||||||
text-decoration none !important
|
|
||||||
|
|
||||||
*
|
|
||||||
user-select none
|
|
||||||
pointer-events none
|
|
||||||
|
|
||||||
> .container
|
|
||||||
max-width 500px
|
|
||||||
margin 0 auto
|
|
||||||
padding 16px
|
|
||||||
|
|
||||||
> .name
|
|
||||||
display block
|
|
||||||
margin 0
|
|
||||||
padding 0
|
|
||||||
|
|
||||||
> [data-fa]
|
|
||||||
margin-right 6px
|
|
||||||
|
|
||||||
> [data-fa]
|
|
||||||
position absolute
|
|
||||||
top 0
|
|
||||||
bottom 0
|
|
||||||
right 20px
|
|
||||||
|
|
||||||
> *
|
|
||||||
height 100%
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<script lang="typescript">
|
|
||||||
this.browser = this.parent;
|
|
||||||
this.folder = this.opts.folder;
|
|
||||||
|
|
||||||
this.onclick = ev => {
|
|
||||||
ev.preventDefault();
|
|
||||||
this.browser.cd(this.folder);
|
|
||||||
return false;
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
</mk-drive-folder>
|
|
169
src/web/app/mobile/views/components/drive.file.vue
Normal file
169
src/web/app/mobile/views/components/drive.file.vue
Normal file
|
@ -0,0 +1,169 @@
|
||||||
|
<template>
|
||||||
|
<a class="file" @click.prevent="onClick" :href="`/i/drive/file/${ file.id }`" :data-is-selected="isSelected">
|
||||||
|
<div class="container">
|
||||||
|
<div class="thumbnail" :style="thumbnail"></div>
|
||||||
|
<div class="body">
|
||||||
|
<p class="name">
|
||||||
|
<span>{{ file.name.lastIndexOf('.') != -1 ? file.name.substr(0, file.name.lastIndexOf('.')) : file.name }}</span>
|
||||||
|
<span class="ext" v-if="file.name.lastIndexOf('.') != -1">{{ file.name.substr(file.name.lastIndexOf('.')) }}</span>
|
||||||
|
</p>
|
||||||
|
<!--
|
||||||
|
if file.tags.length > 0
|
||||||
|
ul.tags
|
||||||
|
each tag in file.tags
|
||||||
|
li.tag(style={background: tag.color, color: contrast(tag.color)})= tag.name
|
||||||
|
-->
|
||||||
|
<footer>
|
||||||
|
<p class="type"><mk-file-type-icon :type="file.type"/>{{ file.type }}</p>
|
||||||
|
<p class="separator"></p>
|
||||||
|
<p class="data-size">{{ file.datasize | bytes }}</p>
|
||||||
|
<p class="separator"></p>
|
||||||
|
<p class="created-at">
|
||||||
|
%fa:R clock%<mk-time :time="file.created_at"/>
|
||||||
|
</p>
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import Vue from 'vue';
|
||||||
|
export default Vue.extend({
|
||||||
|
props: ['file'],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
isSelected: false
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
browser(): any {
|
||||||
|
return this.$parent;
|
||||||
|
},
|
||||||
|
thumbnail(): any {
|
||||||
|
return {
|
||||||
|
'background-color': this.file.properties.average_color ? `rgb(${this.file.properties.average_color.join(',')})` : 'transparent',
|
||||||
|
'background-image': `url(${this.file.url}?thumbnail&size=128)`
|
||||||
|
};
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.isSelected = this.browser.selectedFiles.some(f => f.id == this.file.id)
|
||||||
|
|
||||||
|
this.browser.$on('change-selection', this.onBrowserChangeSelection);
|
||||||
|
},
|
||||||
|
beforeDestroy() {
|
||||||
|
this.browser.$off('change-selection', this.onBrowserChangeSelection);
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
onBrowserChangeSelection(selections) {
|
||||||
|
this.isSelected = selections.some(f => f.id == this.file.id);
|
||||||
|
},
|
||||||
|
onClick() {
|
||||||
|
this.browser.chooseFile(this.file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="stylus" scoped>
|
||||||
|
.file
|
||||||
|
display block
|
||||||
|
text-decoration none !important
|
||||||
|
|
||||||
|
*
|
||||||
|
user-select none
|
||||||
|
pointer-events none
|
||||||
|
|
||||||
|
> .container
|
||||||
|
max-width 500px
|
||||||
|
margin 0 auto
|
||||||
|
padding 16px
|
||||||
|
|
||||||
|
&:after
|
||||||
|
content ""
|
||||||
|
display block
|
||||||
|
clear both
|
||||||
|
|
||||||
|
> .thumbnail
|
||||||
|
display block
|
||||||
|
float left
|
||||||
|
width 64px
|
||||||
|
height 64px
|
||||||
|
background-size cover
|
||||||
|
background-position center center
|
||||||
|
|
||||||
|
> .body
|
||||||
|
display block
|
||||||
|
float left
|
||||||
|
width calc(100% - 74px)
|
||||||
|
margin-left 10px
|
||||||
|
|
||||||
|
> .name
|
||||||
|
display block
|
||||||
|
margin 0
|
||||||
|
padding 0
|
||||||
|
font-size 0.9em
|
||||||
|
font-weight bold
|
||||||
|
color #555
|
||||||
|
text-overflow ellipsis
|
||||||
|
overflow-wrap break-word
|
||||||
|
|
||||||
|
> .ext
|
||||||
|
opacity 0.5
|
||||||
|
|
||||||
|
> .tags
|
||||||
|
display block
|
||||||
|
margin 4px 0 0 0
|
||||||
|
padding 0
|
||||||
|
list-style none
|
||||||
|
font-size 0.5em
|
||||||
|
|
||||||
|
> .tag
|
||||||
|
display inline-block
|
||||||
|
margin 0 5px 0 0
|
||||||
|
padding 1px 5px
|
||||||
|
border-radius 2px
|
||||||
|
|
||||||
|
> footer
|
||||||
|
display block
|
||||||
|
margin 4px 0 0 0
|
||||||
|
font-size 0.7em
|
||||||
|
|
||||||
|
> .separator
|
||||||
|
display inline
|
||||||
|
margin 0
|
||||||
|
padding 0 4px
|
||||||
|
color #CDCDCD
|
||||||
|
|
||||||
|
> .type
|
||||||
|
display inline
|
||||||
|
margin 0
|
||||||
|
padding 0
|
||||||
|
color #9D9D9D
|
||||||
|
|
||||||
|
> mk-file-type-icon
|
||||||
|
margin-right 4px
|
||||||
|
|
||||||
|
> .data-size
|
||||||
|
display inline
|
||||||
|
margin 0
|
||||||
|
padding 0
|
||||||
|
color #9D9D9D
|
||||||
|
|
||||||
|
> .created-at
|
||||||
|
display inline
|
||||||
|
margin 0
|
||||||
|
padding 0
|
||||||
|
color #BDBDBD
|
||||||
|
|
||||||
|
> [data-fa]
|
||||||
|
margin-right 2px
|
||||||
|
|
||||||
|
&[data-is-selected]
|
||||||
|
background $theme-color
|
||||||
|
|
||||||
|
&, *
|
||||||
|
color #fff !important
|
||||||
|
|
||||||
|
</style>
|
58
src/web/app/mobile/views/components/drive.folder.vue
Normal file
58
src/web/app/mobile/views/components/drive.folder.vue
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
<template>
|
||||||
|
<a class="folder" @click.prevent="onClick" :href="`/i/drive/folder/${ folder.id }`">
|
||||||
|
<div class="container">
|
||||||
|
<p class="name">%fa:folder%{{ folder.name }}</p>%fa:angle-right%
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import Vue from 'vue';
|
||||||
|
export default Vue.extend({
|
||||||
|
props: ['folder'],
|
||||||
|
computed: {
|
||||||
|
browser(): any {
|
||||||
|
return this.$parent;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
onClick() {
|
||||||
|
this.browser.cd(this.folder);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="stylus" scoped>
|
||||||
|
.folder
|
||||||
|
display block
|
||||||
|
color #777
|
||||||
|
text-decoration none !important
|
||||||
|
|
||||||
|
*
|
||||||
|
user-select none
|
||||||
|
pointer-events none
|
||||||
|
|
||||||
|
> .container
|
||||||
|
max-width 500px
|
||||||
|
margin 0 auto
|
||||||
|
padding 16px
|
||||||
|
|
||||||
|
> .name
|
||||||
|
display block
|
||||||
|
margin 0
|
||||||
|
padding 0
|
||||||
|
|
||||||
|
> [data-fa]
|
||||||
|
margin-right 6px
|
||||||
|
|
||||||
|
> [data-fa]
|
||||||
|
position absolute
|
||||||
|
top 0
|
||||||
|
bottom 0
|
||||||
|
right 20px
|
||||||
|
|
||||||
|
> *
|
||||||
|
height 100%
|
||||||
|
|
||||||
|
</style>
|
Loading…
Reference in a new issue