Changeset fa0fbaf for KernelRecordsMVC.Web/Views/Release/Details.cshtml
- Timestamp:
- 09/01/26 06:11:34 (4 weeks ago)
- Branches:
- main
- Children:
- d2eccb3
- Parents:
- 08aefc6
- File:
-
- 1 edited
-
KernelRecordsMVC.Web/Views/Release/Details.cshtml (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
KernelRecordsMVC.Web/Views/Release/Details.cshtml
r08aefc6 rfa0fbaf 1 1 @model KernelRecordsMVC.Models.Release 2 2 3 <div class="row"> 4 5 <div class="col-md-5"> 6 7 <img src="@Model.CoverPhoto" 8 class="img-fluid rounded" 9 alt="@Model.Title" /> 3 @{ 4 ViewData["Title"] = Model.Title; 5 6 var isAlbum = Model.Album != null; 7 var isSingle = Model.SingleRelease != null; 8 9 var releaseType = 10 isAlbum ? "ALBUM" : 11 isSingle ? "SINGLE" : 12 "RELEASE"; 13 14 var artists = string.Join( 15 ", ", 16 Model.ReleaseArtists 17 .OrderBy(x => x.ReleaseOrdinal) 18 .Select(x => x.Artist.ArtistName) 19 ); 20 } 21 22 <div class="release-details-page"> 23 24 <div class="release-hero"> 25 26 <div class="release-hero-cover"> 27 28 @if (!string.IsNullOrWhiteSpace(Model.CoverPhoto)) 29 { 30 <img src="@Model.CoverPhoto" 31 alt="@Model.Title" /> 32 } 33 else 34 { 35 <div class="release-no-cover"> 36 <span>♪</span> 37 </div> 38 } 39 40 </div> 41 42 43 <div class="release-hero-info"> 44 45 <span class="page-eyebrow"> 46 @releaseType 47 </span> 48 49 <h1> 50 @Model.Title 51 </h1> 52 53 <p class="release-artists-main"> 54 @artists 55 </p> 56 57 58 <div class="release-facts"> 59 60 <div> 61 62 <span>Genre</span> 63 64 <strong> 65 @Model.Genre 66 </strong> 67 68 </div> 69 70 <div> 71 72 <span>Released</span> 73 74 <strong> 75 @Model.ReleaseDate.ToString("MMM dd, yyyy") 76 </strong> 77 78 </div> 79 80 <div> 81 82 <span>Label</span> 83 84 <strong> 85 @Model.RecordLabel 86 </strong> 87 88 </div> 89 90 </div> 91 92 93 <div class="artist-section"> 94 95 <span class="section-label"> 96 ARTISTS 97 </span> 98 99 <div class="release-artists"> 100 101 @foreach (var artist in Model.ReleaseArtists 102 .OrderBy(x => x.ReleaseOrdinal)) 103 { 104 <span class="artist-tag"> 105 106 @artist.Artist.ArtistName 107 108 @if (artist.Type.ToString() == "FEATURE") 109 { 110 <span class="artist-role"> 111 Featured 112 </span> 113 } 114 115 </span> 116 } 117 118 </div> 119 120 </div> 121 122 </div> 10 123 11 124 </div> 12 125 13 126 14 <div class="col-md-7"> 15 16 <h1>@Model.Title</h1> 17 18 <p class="lead"> 19 @Model.Genre 20 </p> 21 22 <p> 23 <strong>Record Label:</strong> 24 @Model.RecordLabel 25 </p> 26 27 <p> 28 <strong>Release Date:</strong> 29 @Model.ReleaseDate.ToString("MMMM dd, yyyy") 30 </p> 31 32 33 <h5>Artists</h5> 34 35 <p> 36 37 @string.Join( 38 ", ", 39 Model.ReleaseArtists 40 .OrderBy(x => x.ReleaseOrdinal) 41 .Select(x => x.Artist.ArtistName) 42 ) 43 44 </p> 45 46 </div> 127 <!-- ===================================================== 128 PRODUCTS 129 ===================================================== --> 130 131 <section class="release-section"> 132 133 <div class="section-heading"> 134 135 <div> 136 137 <span class="section-label"> 138 AVAILABLE FORMATS 139 </span> 140 141 <h2> 142 Choose your format 143 </h2> 144 145 </div> 146 147 <span class="track-count"> 148 @Model.Products.Count product(s) 149 </span> 150 151 </div> 152 153 154 @if (!Model.Products.Any()) 155 { 156 <div class="no-products"> 157 No physical products are currently available. 158 </div> 159 } 160 else 161 { 162 <div class="product-grid"> 163 164 @foreach (var product in Model.Products 165 .OrderBy(x => x.Format)) 166 { 167 <div class="store-product-card"> 168 169 <div class="product-card-top"> 170 171 <span class="product-format"> 172 @product.Format 173 </span> 174 175 @if (product.Stock > 0) 176 { 177 <span class="product-stock available"> 178 In stock 179 </span> 180 } 181 else 182 { 183 <span class="product-stock unavailable"> 184 Out of stock 185 </span> 186 } 187 188 </div> 189 190 191 <div class="product-price"> 192 @product.Price.ToString("C") 193 </div> 194 195 196 <p class="product-description"> 197 @product.ProductDescription 198 </p> 199 200 201 @if (product.Stock > 0) 202 { 203 <div class="product-actions"> 204 205 <a asp-controller="Order" 206 asp-action="AddProduct" 207 asp-route-id="@product.ProductId" 208 class="store-button primary"> 209 210 Add to Cart 211 212 </a> 213 214 <a asp-controller="Wishlist" 215 asp-action="Add" 216 asp-route-productId="@product.ProductId" 217 class="store-button secondary"> 218 219 ♡ Wishlist 220 221 </a> 222 223 </div> 224 } 225 else 226 { 227 <div class="product-actions"> 228 229 <a asp-controller="Wishlist" 230 asp-action="Add" 231 asp-route-productId="@product.ProductId" 232 class="store-button secondary full"> 233 234 ♡ Add to Wishlist 235 236 </a> 237 238 </div> 239 } 240 241 </div> 242 } 243 244 </div> 245 } 246 247 </section> 248 249 250 <!-- ===================================================== 251 ALBUM 252 ===================================================== --> 253 254 @if (Model.Album != null) 255 { 256 <section class="release-section"> 257 258 <div class="section-heading"> 259 260 <div> 261 262 <span class="section-label"> 263 ALBUM 264 </span> 265 266 <h2> 267 Track List 268 </h2> 269 270 </div> 271 272 <span class="track-count"> 273 @Model.Album.AlbumSongs.Count tracks 274 </span> 275 276 </div> 277 278 279 <ol class="track-list"> 280 281 @{ 282 var trackNumber = 1; 283 } 284 285 @foreach (var albumSong in Model.Album.AlbumSongs 286 .OrderBy(x => x.SongId)) 287 { 288 <li class="track-row"> 289 290 <span class="track-number"> 291 @trackNumber.ToString("00") 292 </span> 293 294 <div class="track-main"> 295 296 <strong> 297 @albumSong.Song.SongName 298 </strong> 299 300 @if (albumSong.Song.SongArtists.Any()) 301 { 302 <div class="song-artists"> 303 304 @string.Join( 305 ", ", 306 albumSong.Song.SongArtists 307 .OrderBy(x => x.SongOrdinal) 308 .Select(x => x.Artist.ArtistName) 309 ) 310 311 </div> 312 } 313 314 </div> 315 316 <span class="track-duration"> 317 @albumSong.Song.SongDuration 318 </span> 319 320 </li> 321 322 trackNumber++; 323 } 324 325 </ol> 326 327 </section> 328 } 329 330 331 <!-- ===================================================== 332 SINGLE 333 ===================================================== --> 334 335 @if (Model.SingleRelease != null) 336 { 337 <section class="release-section"> 338 339 <div class="section-heading"> 340 341 <div> 342 343 <span class="section-label"> 344 SINGLE 345 </span> 346 347 <h2> 348 Single Information 349 </h2> 350 351 </div> 352 353 </div> 354 355 356 <div class="single-info-card"> 357 358 <div> 359 360 <span class="section-label"> 361 RELEASE TYPE 362 </span> 363 364 <h2> 365 Single 366 </h2> 367 368 </div> 369 370 <div class="single-duration"> 371 372 <span> 373 Duration 374 </span> 375 376 <strong> 377 @Model.SingleRelease.Duration 378 </strong> 379 380 </div> 381 382 </div> 383 384 </section> 385 } 47 386 48 387 </div> 49 50 51 <hr />52 53 54 <h2>Available Products</h2>55 56 <div class="row">57 58 @foreach (var product in Model.Products)59 {60 <div class="col-md-4 mb-3">61 62 <div class="card h-100">63 64 <div class="card-body">65 66 <h4>67 @product.Format68 </h4>69 70 <h5>71 $@product.Price72 </h5>73 74 <p>75 @product.ProductDescription76 </p>77 78 79 @if (product.Stock > 0)80 {81 <p class="text-success">82 In stock: @product.Stock83 </p>84 85 <a asp-controller="Order"86 asp-action="AddProduct"87 asp-route-id="@product.ProductId"88 class="btn btn-success">89 90 Add to Cart91 92 </a>93 }94 else95 {96 <p class="text-danger">97 Out of stock98 </p>99 }100 101 </div>102 103 </div>104 105 </div>106 }107 108 </div>109 110 111 @if (Model.Album != null)112 {113 <hr />114 115 <h2>Track List</h2>116 117 <ol>118 119 @foreach (var albumSong in Model.Album.AlbumSongs120 .OrderBy(x => x.SongId))121 {122 <li>123 124 @albumSong.Song.SongName125 126 <span class="text-muted">127 (@albumSong.Song.SongDuration)128 </span>129 130 </li>131 }132 133 </ol>134 }135 136 137 @if (Model.SingleRelease != null)138 {139 <hr />140 141 <h2>Single</h2>142 143 <p>144 Duration:145 @Model.SingleRelease.Duration146 </p>147 }
Note:
See TracChangeset
for help on using the changeset viewer.
