SongThumbnail.vue 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. <template>
  2. <div class="thumbnail">
  3. <slot name="icon" />
  4. <div
  5. v-if="
  6. song.youtubeId &&
  7. (!song.thumbnail ||
  8. (song.thumbnail &&
  9. (song.thumbnail.lastIndexOf('notes-transparent') !==
  10. -1 ||
  11. song.thumbnail.lastIndexOf('/assets/notes.png') !==
  12. -1 ||
  13. song.thumbnail.lastIndexOf('i.ytimg.com') !==
  14. -1)) ||
  15. song.thumbnail === 'empty' ||
  16. song.thumbnail == null)
  17. "
  18. class="yt-thumbnail-bg"
  19. :style="{
  20. 'background-image':
  21. 'url(' +
  22. `https://img.youtube.com/vi/${song.youtubeId}/mqdefault.jpg` +
  23. ')'
  24. }"
  25. ></div>
  26. <img
  27. v-if="
  28. song.youtubeId &&
  29. (!song.thumbnail ||
  30. (song.thumbnail &&
  31. (song.thumbnail.lastIndexOf('notes-transparent') !==
  32. -1 ||
  33. song.thumbnail.lastIndexOf('/assets/notes.png') !==
  34. -1 ||
  35. song.thumbnail.lastIndexOf('i.ytimg.com') !==
  36. -1)) ||
  37. song.thumbnail === 'empty' ||
  38. song.thumbnail == null)
  39. "
  40. loading="lazy"
  41. :src="`https://img.youtube.com/vi/${song.youtubeId}/mqdefault.jpg`"
  42. onerror="this.src='/assets/notes-transparent.png'"
  43. />
  44. <img
  45. v-else
  46. loading="lazy"
  47. :src="song.thumbnail"
  48. onerror="this.src='/assets/notes-transparent.png'"
  49. />
  50. </div>
  51. </template>
  52. <script>
  53. export default {
  54. props: {
  55. song: {
  56. type: Object,
  57. default: () => {}
  58. }
  59. }
  60. };
  61. </script>
  62. <style lang="scss">
  63. .thumbnail {
  64. min-width: 130px;
  65. height: 130px;
  66. position: relative;
  67. margin-top: -15px;
  68. margin-bottom: -15px;
  69. margin-left: -10px;
  70. .yt-thumbnail-bg {
  71. height: 100%;
  72. width: 100%;
  73. position: absolute;
  74. top: 0;
  75. filter: blur(1px);
  76. background: url("/assets/notes-transparent.png") no-repeat center center;
  77. }
  78. img {
  79. height: auto;
  80. width: 100%;
  81. margin-top: auto;
  82. margin-bottom: auto;
  83. z-index: 1;
  84. position: absolute;
  85. top: 0;
  86. bottom: 0;
  87. left: 0;
  88. right: 0;
  89. }
  90. }
  91. </style>