BrowseView.razor 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. @inherits ViewBase
  2. <div class="row justify-content-evenly mt-2">
  3. <div class="d-flex flex-row">
  4. <span>Library (@FnzDataSet.AllLibrary.Length):&nbsp;</span>
  5. <LibSelector SelectedLibs="@SelectedLibs" OnValueChanged="SelectedLibraryChanged"></LibSelector>
  6. </div>
  7. </div>
  8. <div class="row mt-2">
  9. <div class="col-12">
  10. <ul class="nav justify-content-start align-items-center">
  11. <li class="nav-item mb-1">
  12. <span>
  13. Play all track (@(CurrentLibrary?.Discs.Sum(p => p.TrackSets.First().Tracks.Length).ToString() ?? "..."))
  14. </span>
  15. </li>
  16. @if (CurrentLibrary != null)
  17. {
  18. foreach (var cat in (CurrentLibrary?.Catalogs).KeepNoEmpty())
  19. {
  20. <li class="nav-item mb-1 mx-2">
  21. <a class="nav-link btn btn-secondary"
  22. href="@cat?.PlaylistPath"
  23. target="@FnzConst.PlaylistPageTarget"
  24. onclick="return BlockDownloadAndOpenHtmlPage(this)">
  25. <small class="font-monospace text-muted">@cat?.TotalDuration.SecondToDur() @cat?.TotalBytes.BytesToFileSize()</small>
  26. @cat?.Name
  27. </a>
  28. </li>
  29. }
  30. }
  31. </ul>
  32. </div>
  33. </div>
  34. <div class="row">
  35. <div class="col-12">
  36. <div class="row">
  37. @foreach (var disc in (CurrentLibrary?.Discs).KeepNoEmpty())
  38. {
  39. <div class="col-md-3 d-flex align-items-stretch">
  40. @*TODO: Card Component*@
  41. <div class="card mb-3 shadow-sm" @onclick="()=>{ if (disc!=null) SelectDisc(disc); }">
  42. <img class="card-img-top" src="@disc.CoverPath" onerror="this.src='blazor-192.png'">
  43. <div class="card-body d-flex align-content-between flex-wrap p-2">
  44. <p class="card-text">@disc?.Name</p>
  45. <div class="w-100">
  46. <div class="w-100 text-center">
  47. <small class="font-monospace text-muted">Track @disc.TrackSets.First().Tracks.Length</small>
  48. </div>
  49. @foreach (var tSet in (disc?.TrackSets).KeepNoEmpty())
  50. {
  51. <div class="d-flex justify-content-between w-100">
  52. <span class="align-self-center">@(tSet?.Name.StartsWith("AAC_Q1.00") == true ? "Q1" + tSet?.Name.Substring(9) : tSet?.Name)</span>
  53. <small class="text-nowrap font-monospace text-muted align-self-center">@tSet?.TotalDuration.SecondToDur() @tSet?.TotalBytes.BytesToFileSize()</small>
  54. </div>
  55. }
  56. </div>
  57. </div>
  58. </div>
  59. </div>
  60. }
  61. </div>
  62. </div>
  63. </div>
  64. <div class="modal fade" id="ModalDisc" aria-hidden="true" aria-labelledby="ModalDiscLabel" tabindex="-1">
  65. <div class="modal-dialog modal-dialog-centered modal-xl">
  66. <div class="modal-content">
  67. <div class="modal-header">
  68. <h5 class="modal-title" id="ModalDiscLabel">@CurrentDisc?.Name</h5>
  69. <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
  70. </div>
  71. <div class="modal-body">
  72. @*TODO: Disc Modal*@
  73. <div class="container-fluid">
  74. <div class="row">
  75. <div class="col-md-4 mb-1"><img class="card-img-top" src="@CurrentDisc?.CoverPath" onerror="this.src='blazor-192.png'"></div>
  76. <div class="col-md-8">
  77. <ul class="nav nav-tabs justify-content-center nav-fill" id="ModalDiscTab" role="tablist">
  78. @foreach (var subSet in (CurrentDisc?.TrackSets).KeepNoEmpty().WithIndex())
  79. {
  80. <li class="nav-item " role="presentation">
  81. <button class="nav-link" id="main-tab" data-bs-toggle="tab" data-bs-target="#tracks-@subSet.index" type="button" role="tab" aria-controls="home" aria-selected="true">
  82. @subSet.item?.Name
  83. </button>
  84. </li>
  85. }
  86. </ul>
  87. <div class="tab-content" id="ModalDiscTabContent">
  88. @foreach (var subSet in (CurrentDisc?.TrackSets).KeepNoEmpty().WithIndex())
  89. {
  90. <div class="tab-pane fade" id="tracks-@subSet.index" role="tabpanel" aria-labelledby="home-tab">
  91. <TrackSetTable TrackSet="subSet.item"></TrackSetTable>
  92. </div>
  93. }
  94. </div>
  95. </div>
  96. </div>
  97. </div>
  98. </div>
  99. <div class="modal-footer">
  100. <button class="btn btn-primary" data-bs-dismiss="modal">Close</button>
  101. </div>
  102. </div>
  103. </div>
  104. </div>