SongThumbnail.vue 1.8 KB

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