forked from DebaucheryLibrarian/traxxx
				
			
		
			
				
	
	
		
			126 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Vue
		
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Vue
		
	
	
	
| <template>
 | |
| 	<div class="releases">
 | |
| 		<h3
 | |
| 			v-if="context"
 | |
| 			class="heading"
 | |
| 		><span class="range">{{ range }}</span> releases for '{{ context }}'</h3>
 | |
| 
 | |
| 		<ul
 | |
| 			v-if="releases.length > 0"
 | |
| 			:key="sfw"
 | |
| 			v-lazy-container="{ selector: '.thumbnail' }"
 | |
| 			class="nolist tiles"
 | |
| 		>
 | |
| 			<li
 | |
| 				v-for="(release, index) in releases"
 | |
| 				:key="`release-${release.id}`"
 | |
| 			>
 | |
| 				<SceneTile
 | |
| 					:release="release"
 | |
| 					:referer="referer"
 | |
| 					:index="index"
 | |
| 				/>
 | |
| 			</li>
 | |
| 		</ul>
 | |
| 
 | |
| 		<span
 | |
| 			v-if="releases.length === 0 && range !== 'all'"
 | |
| 			class="empty"
 | |
| 		>No {{ range }} releases</span>
 | |
| 
 | |
| 		<span
 | |
| 			v-else-if="releases.length === 0"
 | |
| 			class="empty"
 | |
| 		>No recent or upcoming releases</span>
 | |
| 	</div>
 | |
| </template>
 | |
| 
 | |
| <script>
 | |
| import SceneTile from './scene-tile.vue';
 | |
| 
 | |
| function range() {
 | |
| 	return this.$route.params.range;
 | |
| }
 | |
| 
 | |
| function sfw() {
 | |
| 	return this.$store.state.ui.sfw;
 | |
| }
 | |
| 
 | |
| export default {
 | |
| 	components: {
 | |
| 		SceneTile,
 | |
| 	},
 | |
| 	props: {
 | |
| 		releases: {
 | |
| 			type: Array,
 | |
| 			default: () => [],
 | |
| 		},
 | |
| 		context: {
 | |
| 			type: String,
 | |
| 			default: null,
 | |
| 		},
 | |
| 		referer: {
 | |
| 			type: String,
 | |
| 			default: null,
 | |
| 		},
 | |
| 	},
 | |
| 	computed: {
 | |
| 		range,
 | |
| 		sfw,
 | |
| 	},
 | |
| };
 | |
| </script>
 | |
| 
 | |
| <style lang="scss" scoped>
 | |
| @import 'theme';
 | |
| 
 | |
| .heading {
 | |
|     padding: 0;
 | |
|     margin: 0 0 1rem 0;
 | |
| 
 | |
|     .range {
 | |
|         text-transform: capitalize;
 | |
|     }
 | |
| }
 | |
| 
 | |
| .releases {
 | |
| 	border-top: solid 1px var(--crease);
 | |
| 
 | |
| 	&.embedded {
 | |
| 		border: none;
 | |
| 
 | |
| 		.tiles {
 | |
| 			padding: 0;
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| .tiles {
 | |
|     width: 100%;
 | |
|     display: grid;
 | |
|     grid-template-columns: repeat(auto-fill, minmax(22rem, 1fr));
 | |
|     grid-gap: 1rem;
 | |
| 	box-sizing: border-box;
 | |
| 	padding: 1rem;
 | |
| }
 | |
| 
 | |
| .empty {
 | |
| 	display: inline-block;
 | |
| 	padding: 1rem;
 | |
|     color: var(--shadow-strong);
 | |
|     font-weight: bold;
 | |
| }
 | |
| 
 | |
| @media(max-width: $breakpoint3) {
 | |
|     .tiles {
 | |
|         grid-template-columns: repeat(auto-fill, minmax(20rem, 1fr));
 | |
|     }
 | |
| }
 | |
| 
 | |
| @media(max-width: $breakpoint2) {
 | |
|     .tiles {
 | |
|         grid-template-columns: repeat(auto-fill, minmax(18rem, 1fr));
 | |
|     }
 | |
| }
 | |
| </style>
 |