rework fallback image handling
This commit is contained in:
		
							parent
							
								
									0aee1b3918
								
							
						
					
					
						commit
						0ca10eb316
					
				| @ -2,7 +2,8 @@ | |||||||
|   <div v-if="album"> |   <div v-if="album"> | ||||||
|     <div class="d-flex mb-3"> |     <div class="d-flex mb-3"> | ||||||
|       <div class="mr-3 mr-md-4 image-container"> |       <div class="mr-3 mr-md-4 image-container"> | ||||||
|         <b-img height="300" width="300" fluid :src="album.image" /> |         <img v-if="album.image" class="img-fluid" height="300" width="300" :src="album.image"> | ||||||
|  |         <img v-else class="img-fluid" height="300" width="300" src="@/shared/assets/fallback.svg"> | ||||||
|       </div> |       </div> | ||||||
|       <div> |       <div> | ||||||
|         <h1>{{ album.name }}</h1> |         <h1>{{ album.name }}</h1> | ||||||
|  | |||||||
| @ -2,7 +2,8 @@ | |||||||
|   <div class="d-flex player"> |   <div class="d-flex player"> | ||||||
|     <div v-if="track" class="d-none d-sm-block"> |     <div v-if="track" class="d-none d-sm-block"> | ||||||
|       <router-link :to="{name: 'album', params: {id: track.albumId}}"> |       <router-link :to="{name: 'album', params: {id: track.albumId}}"> | ||||||
|         <b-img :src="track.image" block width="80px" height="80px" /> |         <img v-if="track.image" width="80px" height="80px" :src="track.image"> | ||||||
|  |         <img v-else width="80px" height="80px" src="@/shared/assets/fallback.svg"> | ||||||
|       </router-link> |       </router-link> | ||||||
|     </div> |     </div> | ||||||
|     <div class="flex-fill"> |     <div class="flex-fill"> | ||||||
|  | |||||||
| @ -20,7 +20,6 @@ export interface Artist { | |||||||
|   albumCount: number |   albumCount: number | ||||||
|   description?: string |   description?: string | ||||||
|   starred: boolean |   starred: boolean | ||||||
|   image?: string |  | ||||||
|   lastFmUrl?: string |   lastFmUrl?: string | ||||||
|   musicBrainzUrl?: string |   musicBrainzUrl?: string | ||||||
|   similarArtist?: Artist[] |   similarArtist?: Artist[] | ||||||
| @ -292,7 +291,6 @@ export class API { | |||||||
|       name: item.name, |       name: item.name, | ||||||
|       description: (item.biography || '').replace(/<a[^>]*>.*?<\/a>/gm, ''), |       description: (item.biography || '').replace(/<a[^>]*>.*?<\/a>/gm, ''), | ||||||
|       starred: !!item.starred, |       starred: !!item.starred, | ||||||
|       image: item.largeImageUrl || item.mediumImageUrl || item.smallImageUrl, |  | ||||||
|       albumCount: item.albumCount, |       albumCount: item.albumCount, | ||||||
|       lastFmUrl: item.lastFmUrl, |       lastFmUrl: item.lastFmUrl, | ||||||
|       musicBrainzUrl: item.musicBrainzId |       musicBrainzUrl: item.musicBrainzId | ||||||
|  | |||||||
							
								
								
									
										21
									
								
								src/shared/assets/fallback.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								src/shared/assets/fallback.svg
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,21 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <svg width="512" height="512" fill="#999" version="1.1" viewBox="0 0 135.47 135.47" | ||||||
|  |   xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#"> | ||||||
|  |   <rect width="100%" height="100%" fill="#6c757d"/> | ||||||
|  |   <g transform="translate(0 -161.53)"> | ||||||
|  |     <g transform="matrix(1.0344 0 0 1.0869 -2.0685 -19.991)"> | ||||||
|  |     <rect x="9.9294" y="224.55" width="5.9939" height="23.366" rx="2.997" ry="2.997" /> | ||||||
|  |     <rect x="19.849" y="215.2" width="5.9939" height="41.989" rx="2.997" ry="2.819" /> | ||||||
|  |     <rect x="29.768" y="211.49" width="5.9939" height="49.213" rx="2.997" ry="2.997" /> | ||||||
|  |     <rect x="39.688" y="202.01" width="5.9939" height="58.69" rx="2.997" ry="3.0381" /> | ||||||
|  |     <rect x="49.607" y="198.3" width="5.9939" height="62.402" rx="2.997" ry="2.997" /> | ||||||
|  |     <rect x="59.526" y="197.97" width="5.9939" height="62.733" rx="2.997" ry="2.997" /> | ||||||
|  |     <rect x="69.446" y="201.81" width="5.9939" height="58.889" rx="2.997" ry="2.997" /> | ||||||
|  |     <rect x="79.365" y="211.29" width="5.9939" height="49.412" rx="2.997" ry="2.997" /> | ||||||
|  |     <rect x="89.285" y="211.75" width="5.9939" height="48.948" rx="2.997" ry="2.997" /> | ||||||
|  |     <rect x="99.204" y="216.53" width="5.9939" height="44.176" rx="2.997" ry="2.997" /> | ||||||
|  |     <rect x="109.12" y="223.55" width="5.9939" height="36.886" rx="2.997" ry="2.997" /> | ||||||
|  |     <rect x="119.04" y="230.78" width="5.9939" height="22.372" rx="2.997" ry="2.997" /> | ||||||
|  |     </g> | ||||||
|  |   </g> | ||||||
|  | </svg> | ||||||
| After Width: | Height: | Size: 1.4 KiB | 
| @ -17,7 +17,6 @@ | |||||||
|     BIconSkipEndFill, |     BIconSkipEndFill, | ||||||
|     BIconPlus, |     BIconPlus, | ||||||
|     BIconThreeDotsVertical, |     BIconThreeDotsVertical, | ||||||
|     BIconMusicNoteBeamed, |  | ||||||
|     BIconBoxArrowRight, |     BIconBoxArrowRight, | ||||||
|     BIconPersonFill, |     BIconPersonFill, | ||||||
|     BIconPersonCircle, |     BIconPersonCircle, | ||||||
| @ -38,7 +37,6 @@ | |||||||
|       BIconSkipEndFill, |       BIconSkipEndFill, | ||||||
|       BIconPlus, |       BIconPlus, | ||||||
|       BIconThreeDotsVertical, |       BIconThreeDotsVertical, | ||||||
|       BIconMusicNoteBeamed, |  | ||||||
|       BIconBoxArrowRight, |       BIconBoxArrowRight, | ||||||
|       BIconPersonFill, |       BIconPersonFill, | ||||||
|       BIconPersonCircle, |       BIconPersonCircle, | ||||||
|  | |||||||
| @ -1,52 +0,0 @@ | |||||||
| <template functional> |  | ||||||
|   <div class="fixed-img bg-secondary"> |  | ||||||
|     <div class="fixed-img-inner"> |  | ||||||
|       <img v-if="props.src" :src="props.src"> |  | ||||||
|       <div v-else class="text-muted"> |  | ||||||
|         <Icon icon="music-note-beamed" /> |  | ||||||
|       </div> |  | ||||||
|     </div> |  | ||||||
|   </div> |  | ||||||
| </template> |  | ||||||
| <style lang="scss"> |  | ||||||
|   .fixed-img-sq { |  | ||||||
|     padding-bottom: 100%; |  | ||||||
|   } |  | ||||||
|   .fixed-img-rect { |  | ||||||
|     padding-bottom: 70%; |  | ||||||
|   } |  | ||||||
|   .fixed-img { |  | ||||||
|     position: relative; |  | ||||||
|     width: 100%; |  | ||||||
| 
 |  | ||||||
|     .tile-img-inner { |  | ||||||
|       position: absolute; |  | ||||||
|       width: 100%; |  | ||||||
|       height: 100%; |  | ||||||
| 
 |  | ||||||
|        img { |  | ||||||
| 
 |  | ||||||
|          width: 100%; |  | ||||||
|          height: 100%; |  | ||||||
|         object-fit: cover; |  | ||||||
|       } |  | ||||||
| 
 |  | ||||||
|       span { |  | ||||||
|         position: absolute; |  | ||||||
|         top: 50%; |  | ||||||
|         left: 50%; |  | ||||||
|         transform: translate(-50%, -50%); |  | ||||||
|         font-size: 4.5rem; |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| </style> |  | ||||||
| <script lang="ts"> |  | ||||||
|   import Vue from 'vue' |  | ||||||
| 
 |  | ||||||
|   export default Vue.extend({ |  | ||||||
|     props: { |  | ||||||
|       square: { type: Boolean, default: false }, |  | ||||||
|     } |  | ||||||
|   }) |  | ||||||
| </script> |  | ||||||
| @ -2,7 +2,7 @@ | |||||||
|   <div class="tile card"> |   <div class="tile card"> | ||||||
|     <router-link class="tile-img" :to="props.to"> |     <router-link class="tile-img" :to="props.to"> | ||||||
|       <img v-if="props.image" :src="props.image"> |       <img v-if="props.image" :src="props.image"> | ||||||
|       <Icon v-else class="tile-img-fallback text-muted" icon="music-note-beamed" /> |       <img v-else src="@/shared/assets/fallback.svg"> | ||||||
|     </router-link> |     </router-link> | ||||||
|     <div class="card-body"> |     <div class="card-body"> | ||||||
|       <div class="text-truncate font-weight-bold"> |       <div class="text-truncate font-weight-bold"> | ||||||
| @ -24,7 +24,6 @@ | |||||||
|   .tile-img { |   .tile-img { | ||||||
|     position: relative; |     position: relative; | ||||||
|     width: 100%; |     width: 100%; | ||||||
|     background-color: #6c757d; |  | ||||||
| 
 | 
 | ||||||
|     img { |     img { | ||||||
|       position: absolute; |       position: absolute; | ||||||
| @ -33,12 +32,4 @@ | |||||||
|       object-fit: cover; |       object-fit: cover; | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 
 |  | ||||||
|   .tile-img-fallback { |  | ||||||
|     position: absolute; |  | ||||||
|     top: 50%; |  | ||||||
|     left: 50%; |  | ||||||
|     transform: translate(-50%, -50%); |  | ||||||
|     font-size: 4.5rem; |  | ||||||
|   } |  | ||||||
| </style> | </style> | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user