sharkey/src/client/app/common/views/components/media-list.vue

94 lines
1.8 KiB
Vue
Raw Normal View History

2018-02-12 09:06:22 +09:00
<template>
2018-05-29 11:45:01 +09:00
<div class="mk-media-list">
2018-05-29 13:21:38 +09:00
<div :data-count="mediaList.length" ref="grid">
2018-05-29 11:45:01 +09:00
<template v-for="media in mediaList">
<mk-media-video :video="media" :key="media.id" v-if="media.type.startsWith('video')" :inline-playable="mediaList.length === 1"/>
2018-09-04 21:07:41 +09:00
<mk-media-audio :audio="media" :key="media.id" v-else-if="media.type.startsWith('audio')"/>
<mk-media-image :image="media" :key="media.id" v-else-if="media.type.startsWith('image')" :raw="raw"/>
<mk-media-download :download="media" :key="media.id" v-else/>
2018-05-29 11:45:01 +09:00
</template>
</div>
2018-02-12 09:06:22 +09:00
</div>
</template>
<script lang="ts">
import Vue from 'vue';
export default Vue.extend({
2018-05-04 16:27:03 +09:00
props: {
mediaList: {
required: true
},
raw: {
default: false
}
2018-05-29 13:21:38 +09:00
},
mounted() {
// for Safari bug
2018-05-29 15:38:48 +09:00
this.$refs.grid.style.height = this.$refs.grid.clientHeight ? `${this.$refs.grid.clientHeight}px` : '128px';
2018-05-04 16:27:03 +09:00
}
2018-02-12 09:06:22 +09:00
});
</script>
2018-02-15 15:14:28 +09:00
<style lang="stylus" scoped>
.mk-media-list
2018-05-29 11:45:01 +09:00
width 100%
2018-02-15 15:14:28 +09:00
2018-05-29 11:45:01 +09:00
&:before
content ''
display block
padding-top 56.25% // 16:9
> div
position absolute
top 0
2018-05-29 11:53:28 +09:00
right 0
2018-05-29 13:21:38 +09:00
bottom 0
left 0
2018-05-29 11:45:01 +09:00
display grid
grid-gap 4px
2018-07-20 02:40:37 +09:00
> *
overflow hidden
border-radius 4px
2018-05-29 11:45:01 +09:00
&[data-count="1"]
grid-template-rows 1fr
2018-07-20 02:40:37 +09:00
2018-05-29 11:45:01 +09:00
&[data-count="2"]
grid-template-columns 1fr 1fr
grid-template-rows 1fr
2018-07-20 02:40:37 +09:00
2018-05-29 11:45:01 +09:00
&[data-count="3"]
grid-template-columns 1fr 0.5fr
grid-template-rows 1fr 1fr
2018-07-20 02:40:37 +09:00
> *:nth-child(1)
2018-05-29 11:45:01 +09:00
grid-row 1 / 3
2018-07-20 02:40:37 +09:00
> *:nth-child(3)
2018-05-29 11:45:01 +09:00
grid-column 2 / 3
2018-05-29 13:21:38 +09:00
grid-row 2 / 3
2018-07-20 02:40:37 +09:00
2018-05-29 11:45:01 +09:00
&[data-count="4"]
grid-template-columns 1fr 1fr
grid-template-rows 1fr 1fr
2018-05-04 16:27:03 +09:00
2018-07-20 02:40:37 +09:00
> *:nth-child(1)
2018-05-29 11:45:01 +09:00
grid-column 1 / 2
grid-row 1 / 2
2018-07-20 02:40:37 +09:00
> *:nth-child(2)
2018-05-29 11:45:01 +09:00
grid-column 2 / 3
grid-row 1 / 2
2018-07-20 02:40:37 +09:00
> *:nth-child(3)
2018-05-29 11:45:01 +09:00
grid-column 1 / 2
grid-row 2 / 3
2018-07-20 02:40:37 +09:00
> *:nth-child(4)
grid-column 2 / 3
2018-05-29 11:45:01 +09:00
grid-row 2 / 3
2018-05-04 16:27:03 +09:00
2018-02-15 15:14:28 +09:00
</style>