Browse Source

use fragment navigation with letter bar (#139)

pull/140/head
Jason Dove 5 years ago committed by GitHub
parent
commit
c1b41e2865
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 20
      ErsatzTV/Pages/MovieList.razor
  2. 15
      ErsatzTV/Pages/MusicVideoList.razor
  3. 15
      ErsatzTV/Pages/TelevisionShowList.razor
  4. 2
      ErsatzTV/Shared/LetterBar.razor

20
ErsatzTV/Pages/MovieList.razor

@ -56,8 +56,23 @@
</MudPaper> </MudPaper>
<MudContainer MaxWidth="MaxWidth.ExtraLarge" Class="pt-8" Style="margin-top: 64px"> <MudContainer MaxWidth="MaxWidth.ExtraLarge" Class="pt-8" Style="margin-top: 64px">
<MudContainer MaxWidth="MaxWidth.False" Class="media-card-grid"> <MudContainer MaxWidth="MaxWidth.False" Class="media-card-grid">
@{ var letters = new System.Collections.Generic.HashSet<char>(); }
@foreach (MovieCardViewModel card in _data.Cards.Where(m => !string.IsNullOrWhiteSpace(m.Title)).OrderBy(m => m.SortTitle)) @foreach (MovieCardViewModel card in _data.Cards.Where(m => !string.IsNullOrWhiteSpace(m.Title)).OrderBy(m => m.SortTitle))
{ {
@if (!letters.Contains(card.SortTitle.Head()))
{
Option<char> maybeLetter = card.SortTitle.ToLowerInvariant().HeadOrNone();
if (maybeLetter.IsSome)
{
char letter = maybeLetter.ValueUnsafe();
if (letter >= '0' && letter <= '9')
{
letter = '#';
}
letters.Add(letter);
<div id="@($"letter-{letter}")" style="scroll-margin-top: 128px"></div>
}
}
<MediaCard Data="@card" <MediaCard Data="@card"
Link="@($"/media/movies/{card.MovieId}")" Link="@($"/media/movies/{card.MovieId}")"
AddToCollectionClicked="@AddToCollection" AddToCollectionClicked="@AddToCollection"
@ -131,10 +146,7 @@
private void SelectClicked(MediaCardViewModel card, MouseEventArgs e) private void SelectClicked(MediaCardViewModel card, MouseEventArgs e)
{ {
List<MediaCardViewModel> GetSortedItems() List<MediaCardViewModel> GetSortedItems() => _data.Cards.OrderBy(m => m.SortTitle).ToList<MediaCardViewModel>();
{
return _data.Cards.OrderBy(m => m.SortTitle).ToList<MediaCardViewModel>();
}
SelectClicked(GetSortedItems, card, e); SelectClicked(GetSortedItems, card, e);
} }

15
ErsatzTV/Pages/MusicVideoList.razor

@ -56,8 +56,23 @@
</MudPaper> </MudPaper>
<MudContainer MaxWidth="MaxWidth.ExtraLarge" Class="pt-8" Style="margin-top: 64px"> <MudContainer MaxWidth="MaxWidth.ExtraLarge" Class="pt-8" Style="margin-top: 64px">
<MudContainer MaxWidth="MaxWidth.False" Class="media-card-grid"> <MudContainer MaxWidth="MaxWidth.False" Class="media-card-grid">
@{ var letters = new System.Collections.Generic.HashSet<char>(); }
@foreach (MusicVideoCardViewModel card in _data.Cards.Where(m => !string.IsNullOrWhiteSpace(m.Title)).OrderBy(m => m.SortTitle)) @foreach (MusicVideoCardViewModel card in _data.Cards.Where(m => !string.IsNullOrWhiteSpace(m.Title)).OrderBy(m => m.SortTitle))
{ {
@if (!letters.Contains(card.SortTitle.Head()))
{
Option<char> maybeLetter = card.SortTitle.ToLowerInvariant().HeadOrNone();
if (maybeLetter.IsSome)
{
char letter = maybeLetter.ValueUnsafe();
if (letter >= '0' && letter <= '9')
{
letter = '#';
}
letters.Add(letter);
<div id="@($"letter-{letter}")" style="scroll-margin-top: 128px"></div>
}
}
<MediaCard Data="@card" <MediaCard Data="@card"
Link="" Link=""
ArtworkKind="ArtworkKind.Thumbnail" ArtworkKind="ArtworkKind.Thumbnail"

15
ErsatzTV/Pages/TelevisionShowList.razor

@ -56,8 +56,23 @@
</MudPaper> </MudPaper>
<MudContainer MaxWidth="MaxWidth.ExtraLarge" Class="pt-8" Style="margin-top: 64px"> <MudContainer MaxWidth="MaxWidth.ExtraLarge" Class="pt-8" Style="margin-top: 64px">
<MudContainer MaxWidth="MaxWidth.False" Class="media-card-grid"> <MudContainer MaxWidth="MaxWidth.False" Class="media-card-grid">
@{ var letters = new System.Collections.Generic.HashSet<char>(); }
@foreach (TelevisionShowCardViewModel card in _data.Cards.OrderBy(s => s.SortTitle)) @foreach (TelevisionShowCardViewModel card in _data.Cards.OrderBy(s => s.SortTitle))
{ {
@if (!letters.Contains(card.SortTitle.Head()))
{
Option<char> maybeLetter = card.SortTitle.ToLowerInvariant().HeadOrNone();
if (maybeLetter.IsSome)
{
char letter = maybeLetter.ValueUnsafe();
if (letter >= '0' && letter <= '9')
{
letter = '#';
}
letters.Add(letter);
<div id="@($"letter-{letter}")" style="scroll-margin-top: 128px"></div>
}
}
<MediaCard Data="@card" <MediaCard Data="@card"
Link="@($"/media/tv/shows/{card.TelevisionShowId}")" Link="@($"/media/tv/shows/{card.TelevisionShowId}")"
AddToCollectionClicked="@AddToCollection" AddToCollectionClicked="@AddToCollection"

2
ErsatzTV/Shared/LetterBar.razor

@ -50,7 +50,7 @@
{ {
uri = QueryHelpers.AddQueryString(uri, "query", Query); uri = QueryHelpers.AddQueryString(uri, "query", Query);
} }
return uri; return uri + $"#letter-{letter}";
} }
} }
Loading…
Cancel
Save