Compare commits
No commits in common. "5b2aafc4e52324503ce4c87d7414c523824d7a8c" and "6c879038f6cc6c84e664109c879af3f9275d33ca" have entirely different histories.
5b2aafc4e5
...
6c879038f6
|
@ -18,7 +18,6 @@ namespace Portfolio.Application.Services.PokemonSubskillService
|
|||
}
|
||||
public async Task<List<PokemonSubskill>> GetAllPokemonSubskillsAsync()
|
||||
{
|
||||
Console.WriteLine("Does this fire every time");
|
||||
return await _pokemonSubskillRepository.GetAllPokemonSubskillsAsync();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,10 +13,9 @@
|
|||
<HeadOutlet />
|
||||
</head>
|
||||
|
||||
<body class="bg-primary-subtle">
|
||||
<body>
|
||||
<Routes />
|
||||
<script src="_framework/blazor.web.js"></script>
|
||||
<script src="js/site.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
|
@ -25,38 +25,38 @@ namespace Portfolio.WebUI.Server.Components.Component.Pokemon_Components
|
|||
private List<PokemonImage> _shinyPokemonImages = new List<PokemonImage>();
|
||||
private Random random = new Random();
|
||||
|
||||
//protected override async Task OnInitializedAsync()
|
||||
//{
|
||||
// await LoadPokemonBackgrounds();
|
||||
//}
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
await LoadPokemonBackgrounds();
|
||||
}
|
||||
|
||||
//private async Task LoadPokemonBackgrounds()
|
||||
//{
|
||||
private async Task LoadPokemonBackgrounds()
|
||||
{
|
||||
|
||||
// foreach (var pokemonimgurl in PokemonImages)
|
||||
// {
|
||||
// Console.WriteLine(pokemonimgurl);
|
||||
// _pokemonImages.Add(new PokemonImage
|
||||
// {
|
||||
// Url = pokemonimgurl, // URL retrieved from the database
|
||||
// Left = random.Next(0, 100),
|
||||
// Top = random.Next(0, 100),
|
||||
// Size = random.Next(50, 130),
|
||||
// Rotation = random.Next(0, 360)
|
||||
// });
|
||||
// }
|
||||
// foreach (var pokemonimgurl in ShinyPokemonImages)
|
||||
// {
|
||||
// _shinyPokemonImages.Add(new PokemonImage
|
||||
// {
|
||||
// Url = pokemonimgurl, // URL retrieved from the database
|
||||
// Left = random.Next(0, 100),
|
||||
// Top = random.Next(0, 100),
|
||||
// Size = random.Next(50, 130),
|
||||
// Rotation = random.Next(0, 360)
|
||||
// });
|
||||
// }
|
||||
//}
|
||||
foreach (var pokemonimgurl in PokemonImages)
|
||||
{
|
||||
Console.WriteLine(pokemonimgurl);
|
||||
_pokemonImages.Add(new PokemonImage
|
||||
{
|
||||
Url = pokemonimgurl, // URL retrieved from the database
|
||||
Left = random.Next(0, 100),
|
||||
Top = random.Next(0, 100),
|
||||
Size = random.Next(50, 130),
|
||||
Rotation = random.Next(0, 360)
|
||||
});
|
||||
}
|
||||
foreach (var pokemonimgurl in ShinyPokemonImages)
|
||||
{
|
||||
_shinyPokemonImages.Add(new PokemonImage
|
||||
{
|
||||
Url = pokemonimgurl, // URL retrieved from the database
|
||||
Left = random.Next(0, 100),
|
||||
Top = random.Next(0, 100),
|
||||
Size = random.Next(50, 130),
|
||||
Rotation = random.Next(0, 360)
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -1,22 +1,17 @@
|
|||
.badge {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 90px;
|
||||
height: 30px;
|
||||
padding: 0.25rem;
|
||||
border-radius: 30px;
|
||||
color: white;
|
||||
font-size: clamp(0.7rem, 1vw, 0.9rem);
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
padding: 4px 8px;
|
||||
border-radius: 30px;
|
||||
}
|
||||
|
||||
.statText {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
font-size: .8rem;
|
||||
}
|
||||
|
||||
/* Sleep Type Badge Styling */
|
||||
|
|
|
@ -1,59 +1,53 @@
|
|||
@attribute [StreamRendering]
|
||||
@rendermode InteractiveServer
|
||||
|
||||
<div class="card-wrapper d-flex flex-column align-items-center">
|
||||
<div class="pokemon-card card-holo animated @GetTypeCssClass(_pokemon.PokemonType)">
|
||||
<!-- Pokemon Name, Number, and Type -->
|
||||
<div class="z-3">
|
||||
@if (_pokemon.IsVariation)
|
||||
{
|
||||
<div class="pokemon-name"><p class="fw-bold card-title">@_pokemon.VariationName @_pokemon.PokemonName</p></div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="pokemon-name"><p class="fw-bold card-title">@_pokemon.PokemonName</p></div>
|
||||
}
|
||||
<div class="pokemon-number">
|
||||
<p class="fw-light card-text">Pokédex #<strong>@_pokemon.PokemonId</strong></p>
|
||||
</div>
|
||||
<div >
|
||||
<img class="pokemon-type" src="@GetTypeImageUrl(_pokemon.PokemonType)" />
|
||||
</div>
|
||||
<div class="mx-2 pokemon-card card-holo animated @GetTypeCssClass(_pokemon.PokemonType)">
|
||||
<!-- Pokemon Name, Number, and Type -->
|
||||
<div class="z-3">
|
||||
@if (_pokemon.IsVariation)
|
||||
{
|
||||
<div class="pokemon-name"><p class="fw-bold card-title">@_pokemon.VariationName @_pokemon.PokemonName</p></div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="pokemon-name"><p class="fw-bold card-title">@_pokemon.PokemonName</p></div>
|
||||
}
|
||||
<div class="pokemon-number">
|
||||
<p class="fw-light card-text">Pokédex #<strong>@_pokemon.PokemonId</strong></p>
|
||||
</div>
|
||||
|
||||
<!-- Pokemon Image -->
|
||||
<div class="flip-container z-1" @onclick="() => ToggleImage()">
|
||||
<div class="flipper @(isShiny ? "flipped" : "")">
|
||||
<img class="pokemon-image front" src="@_pokemon.PokemonImageUrl" />
|
||||
<img class="pokemon-image back" src="@_pokemon.PokemonShinyImageUrl" />
|
||||
</div>
|
||||
<div >
|
||||
<img class="pokemon-type" src="@GetTypeImageUrl(_pokemon.PokemonType)" />
|
||||
</div>
|
||||
|
||||
<!-- Pokemon Flavortext -->
|
||||
<div class="z-3 pokemon-flavor-text @(GetTypeCssClass(_pokemon.PokemonType))">
|
||||
@if (string.IsNullOrEmpty(_pokemon.FlavorText))
|
||||
{
|
||||
<p class="fw-light">[ Pokemon Flavor Text Placeholder ]</p>
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
<p class="fw-light">@_pokemon.FlavorText</p>
|
||||
|
||||
}
|
||||
</div>
|
||||
|
||||
<!-- Pokemon Sleep Type and Specialty Badges -->
|
||||
<div class="position-absolute bottom-0 end-0 z-2">
|
||||
<div class="d-flex justify-content-between">
|
||||
<PokemonBadge BadgeItem="@_pokemon.SleepType" />
|
||||
<PokemonBadge BadgeItem="@_pokemon.Speciality" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="mt-3">
|
||||
<PokemonEditButton PokemonId="@_pokemon.Id" />
|
||||
<!-- Pokemon Image -->
|
||||
<div class="flip-container z-1" @onclick="() => ToggleImage()">
|
||||
<div class="flipper @(isShiny ? "flipped" : "")">
|
||||
<img class="pokemon-image front" src="@_pokemon.PokemonImageUrl" />
|
||||
<img class="pokemon-image back" src="@_pokemon.PokemonShinyImageUrl" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Pokemon Flavortext -->
|
||||
<div class="z-3 pokemon-flavor-text @(GetTypeCssClass(_pokemon.PokemonType))">
|
||||
@if (string.IsNullOrEmpty(_pokemon.FlavorText))
|
||||
{
|
||||
<p class="">[ Pokemon Flavor Text Placeholder ]</p>
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
<p class="fw-light ">@_pokemon.FlavorText</p>
|
||||
|
||||
}
|
||||
</div>
|
||||
|
||||
<!-- Pokemon Sleep Type and Specialty Badges -->
|
||||
<div class="position-absolute bottom-0 end-0 mb-1 me-1 z-2">
|
||||
<div class="d-flex justify-content-between">
|
||||
<PokemonBadge BadgeItem="@_pokemon.SleepType" />
|
||||
<PokemonBadge BadgeItem="@_pokemon.Speciality" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
|
|
@ -42,6 +42,5 @@ namespace Portfolio.WebUI.Server.Components.Component.Pokemon_Components
|
|||
return "pokemon-type-" + type.ToLower();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
.pokemon-card {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
max-width: 350px; /* Prevent it from getting too huge */
|
||||
aspect-ratio: 3 / 4; /* Maintains card shape dynamically */
|
||||
overflow: hidden;
|
||||
width: 24rem;
|
||||
height: 32rem;
|
||||
max-width: 24rem;
|
||||
max-height: 32rem;
|
||||
background-color: var(--bg-color);
|
||||
border-width: .5rem;
|
||||
border-style: solid;
|
||||
|
@ -20,37 +20,36 @@
|
|||
transform: translateY(-13px);
|
||||
}
|
||||
|
||||
.card-wrapper {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
|
||||
.pokemon-name {
|
||||
position: absolute;
|
||||
top: 5%;
|
||||
left: 3%;
|
||||
top: 0 !important;
|
||||
left: 0 !important;
|
||||
margin-top: 1.5rem !important;
|
||||
margin-left: 0.5rem !important;
|
||||
transform: translateY(-50%) !important;
|
||||
font-size: clamp(1.2rem, 2vw, 2rem);
|
||||
font-size: 2.5rem;
|
||||
}
|
||||
|
||||
.pokemon-number {
|
||||
position: absolute;
|
||||
top: 10%;
|
||||
left: 6%;
|
||||
|
||||
top: 0 !important;
|
||||
left: 0 !important;
|
||||
margin-top: 3.3rem !important;
|
||||
margin-left: 1.5rem !important;
|
||||
transform: translateY(-50%) !important;
|
||||
font-size: clamp(0.7rem, 1.2vw, 0.75rem);
|
||||
font-size: .75rem;
|
||||
}
|
||||
|
||||
.pokemon-type {
|
||||
position: absolute;
|
||||
top: 2%;
|
||||
right: 2%;
|
||||
width: clamp(1.5rem, 2.5vw, 2.5rem);
|
||||
height: clamp(1.5rem, 2.5vw, 2.5rem);
|
||||
top: 0 !important;
|
||||
right: 0 !important;
|
||||
width: 2.5rem;
|
||||
height: 2.5rem;
|
||||
margin-top: .5rem !important;
|
||||
margin-right: .5rem !important;
|
||||
}
|
||||
|
||||
.pokemon-image {
|
||||
|
@ -77,6 +76,7 @@
|
|||
justify-content: center; /* Horizontally centers text */
|
||||
overflow: hidden; /* Ensures no scrollbar */
|
||||
|
||||
|
||||
border-width: 2px;
|
||||
border-radius: 5% / 13%;
|
||||
border-style: solid;
|
||||
|
@ -88,7 +88,7 @@
|
|||
margin: 0;
|
||||
width: 100%;
|
||||
text-align: start;
|
||||
font-size: min(12.5px, 1.5vw); /* Scales font but won't exceed 12.5px */
|
||||
font-size: min(13px, 1.5vw); /* Scales font but won't exceed 13px */
|
||||
line-height: 1.2; /* Adjust spacing for readability */
|
||||
white-space: normal; /* Ensures wrapping */
|
||||
word-wrap: break-word;
|
||||
|
@ -102,10 +102,8 @@
|
|||
transform: translate(-50%, -50%) !important;
|
||||
perspective: 1000px;
|
||||
display: inline-block;
|
||||
width: 80%;
|
||||
aspect-ratio: 1 / 1;
|
||||
max-width: 280px;
|
||||
margin: 0 auto;
|
||||
width: 20rem;
|
||||
height: 20rem;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
|
@ -247,10 +245,7 @@
|
|||
|
||||
.card-holo {
|
||||
position: relative;
|
||||
background-image:
|
||||
url("https://assets.codepen.io/13471/sparkles.gif"),
|
||||
url("https://assets.codepen.io/13471/holo.png"),
|
||||
linear-gradient(125deg, #ff008450 15%, #fca40040 30%, #ffff0030 40%, #00ff8a20 60%, #00cfff40 70%, #cc4cfa50 85% );
|
||||
background-image: url("https://assets.codepen.io/13471/sparkles.gif"), url("https://assets.codepen.io/13471/holo.png"), linear-gradient(125deg, #ff008450 15%, #fca40040 30%, #ffff0030 40%, #00ff8a20 60%, #00cfff40 70%, #cc4cfa50 85% );
|
||||
background-blend-mode: screen;
|
||||
background-size: cover;
|
||||
background-position: center;
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
<!-- Home -->
|
||||
<button class="btn btn-primary mx-1 align-content-center" style="border-radius: 50px 15px; max-width: 60px;">
|
||||
<NavLink href="/pokemonsleep">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="#FFF" class="bi bi-house-fill mb-1" viewBox="0 0 16 16">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-house-fill mb-1" viewBox="0 0 16 16">
|
||||
<path d="M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L8 2.207l6.646 6.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293z" />
|
||||
<path d="m8 3.293 6 6V13.5a1.5 1.5 0 0 1-1.5 1.5h-9A1.5 1.5 0 0 1 2 13.5V9.293z" />
|
||||
</svg>
|
||||
|
@ -23,7 +23,7 @@
|
|||
<!-- Pokemon Table-->
|
||||
<button class="btn btn-info mx-1" style="border-radius: 50px 15px; max-width: 60px;">
|
||||
<NavLink href="/pokemon">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="#FFF" class="bi bi-table mb-1" viewBox="0 0 16 16">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-table mb-1" viewBox="0 0 16 16">
|
||||
<path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm15 2h-4v3h4zm0 4h-4v3h4zm0 4h-4v3h3a1 1 0 0 0 1-1zm-5 3v-3H6v3zm-5 0v-3H1v2a1 1 0 0 0 1 1zm-4-4h4V8H1zm0-4h4V4H1zm5-3v3h4V4zm4 4H6v3h4z" />
|
||||
</svg>
|
||||
</NavLink>
|
||||
|
@ -32,7 +32,7 @@
|
|||
<!-- Rate Pokemon -->
|
||||
<button class="btn btn-success mx-1" style="border-radius: 50px 15px; max-width: 60px;">
|
||||
<NavLink href="/rate-pokemon">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="#FFF" class="bi bi-award-fill mb-1" viewBox="0 0 16 16">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-award-fill mb-1" viewBox="0 0 16 16">
|
||||
<path d="m8 0 1.669.864 1.858.282.842 1.68 1.337 1.32L13.4 6l.306 1.854-1.337 1.32-.842 1.68-1.858.282L8 12l-1.669-.864-1.858-.282-.842-1.68-1.337-1.32L2.6 6l-.306-1.854 1.337-1.32.842-1.68L6.331.864z" />
|
||||
<path d="M4 11.794V16l4-1 4 1v-4.206l-2.018.306L8 13.126 6.018 12.1z" />
|
||||
</svg>
|
||||
|
@ -42,7 +42,7 @@
|
|||
<!-- Add Pokemon (Wrap in Auth) -->
|
||||
<button class="btn btn-warning mx-1" style="border-radius: 50px 15px; max-width: 60px;">
|
||||
<NavLink href="/pokemonsleep/add-new-pokemon">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="#FFF" class="bi bi-plus-circle-fill mb-1" viewBox="0 0 16 16">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-plus-circle-fill mb-1" viewBox="0 0 16 16">
|
||||
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0M8.5 4.5a.5.5 0 0 0-1 0v3h-3a.5.5 0 0 0 0 1h3v3a.5.5 0 0 0 1 0v-3h3a.5.5 0 0 0 0-1h-3z" />
|
||||
</svg>
|
||||
</NavLink>
|
||||
|
|
|
@ -1,135 +0,0 @@
|
|||
<div class="pokemon-rating-panel container">
|
||||
|
||||
<!-- Dropdown Selects -->
|
||||
<div class="ratings bg-light-subtle col">
|
||||
<h3 class="mb-3 row">Select Nature & Subskills</h3>
|
||||
|
||||
<!-- Nature -->
|
||||
<div class="d-flex justify-content-between align-items-center row">
|
||||
<div class="col">
|
||||
<label>Select Nature</label>
|
||||
<select class="form-control" @bind="SelectedNatureId">
|
||||
<option value="" disabled selected >Choose Nature...</option>
|
||||
@foreach (var nature in NatureList)
|
||||
{
|
||||
<option value="@nature.Id">@nature.Nature</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
<div class="text-center col">
|
||||
<h4 class="mt-4">
|
||||
<span class="text-muted">@lastnaturescore</span>
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Subskill 1 -->
|
||||
<div class="d-flex justify-content-between align-items-center mt-3 row">
|
||||
<div class="col">
|
||||
<label for="subskillSelect1">Select Level 10 Subskill</label>
|
||||
<select id="subskillSelect1" class="form-control" @bind="Subskill1">
|
||||
<option value="" disabled selected>Choose Subskill...</option>
|
||||
@foreach (var subskill in SubskillList)
|
||||
{
|
||||
<option value="@subskill.Id">@subskill.SubSkill</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
<div class="text-center col">
|
||||
<h4 class="mt-4">
|
||||
<span class="text-muted">@lastS1score</span>
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Subskill 2 -->
|
||||
<div class="d-flex justify-content-between align-items-center mt-3 row">
|
||||
<div class="col">
|
||||
<label for="subskillSelect2">Select Level 25 Subskill</label>
|
||||
<select id="subskillSelect2" class="form-control" @bind="Subskill2">
|
||||
<option value="" disabled selected>Choose Subskill...</option>
|
||||
@foreach (var subskill in SubskillList)
|
||||
{
|
||||
<option value="@subskill.Id">@subskill.SubSkill</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
<div class="text-center col">
|
||||
<h4 class="mt-4">
|
||||
<span class="text-muted">@lastS2score</span>
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Subskill 3 -->
|
||||
<div class="d-flex justify-content-between align-items-center mt-3 row">
|
||||
<div class="col">
|
||||
<label for="subskillSelect3">Select Level 50 Subskill</label>
|
||||
<select id="subskillSelect3" class="form-control" @bind="Subskill3">
|
||||
<option value="" selected disabled>Choose Subskill...</option>
|
||||
@foreach (var subskill in SubskillList)
|
||||
{
|
||||
<option value="@subskill.Id">@subskill.SubSkill</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
<div class="text-center col">
|
||||
<h4 class="mt-4">
|
||||
<span class="text-muted">@lastS3score</span>
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Subskill 4 Disabled -->
|
||||
<div class="d-flex justify-content-between align-items-center mt-3 row">
|
||||
<div class="col">
|
||||
<label for="subskillSelect4">Select Level 75 Subskill</label>
|
||||
<select id="subskillSelect4" disabled class="form-control" @bind="Subskill4">
|
||||
<option value="" disabled selected>Choose Subskill...</option>
|
||||
@foreach (var subskill in SubskillList)
|
||||
{
|
||||
<option value="@subskill.Id">@subskill.SubSkill</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
<div class="text-center col">
|
||||
<h4 class="mt-4">
|
||||
<span class="text-muted">0</span>
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Subskill 5 Disabled -->
|
||||
<div class="d-flex justify-content-between align-items-center mt-3 row">
|
||||
<div class="col">
|
||||
<label for="subskillSelect5">Select Level 100 Subskill</label>
|
||||
<select id="subskillSelect5" disabled class="form-control mb-2" @bind="Subskill5">
|
||||
<option value="" disabled selected>Choose Subskill...</option>
|
||||
@foreach (var subskill in SubskillList)
|
||||
{
|
||||
<option value="@subskill.Id">@subskill.SubSkill</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
<div class="text-center col">
|
||||
<h4 class="mt-4">
|
||||
<span class="text-muted">0</span>
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr/>
|
||||
|
||||
<!-- Score Output -->
|
||||
<div class="d-flex justify-content-between align-items-center mt-3 row">
|
||||
<h3 class="col">Final Score:</h3>
|
||||
<div class="p-2 rounded text-center col"
|
||||
style="background-color:@ScoreBackgroundColor; color:@ScoreColor; ">
|
||||
<h3>@FinalScore</h3>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
|
@ -1,156 +0,0 @@
|
|||
using Microsoft.AspNetCore.Components;
|
||||
using Portfolio.Domain.Features.Pokemon;
|
||||
using Portfolio.Domain.Features.Pokemon_Natures;
|
||||
using Portfolio.Domain.Features.Pokemon_Subskills;
|
||||
|
||||
namespace Portfolio.WebUI.Server.Components.Component.Pokemon_Components
|
||||
{
|
||||
partial class PokemonRatingPanel
|
||||
{
|
||||
[Parameter] public Pokemon PokemonToRate { get; set; }
|
||||
[Parameter] public List<PokemonNature> NatureList { get; set; } = new();
|
||||
[Parameter] public List<PokemonSubskill> SubskillList { get; set; } = new();
|
||||
|
||||
private int SelectedNatureId;
|
||||
private int Subskill1;
|
||||
private int Subskill2;
|
||||
private int Subskill3;
|
||||
private int Subskill4;
|
||||
private int Subskill5;
|
||||
|
||||
private int FinalScore;
|
||||
private string ScoreBackgroundColor = "#FFFFFF";
|
||||
private string ScoreColor = "#000000";
|
||||
|
||||
|
||||
private int lastNatureId;
|
||||
private int lastS1, lastS2, lastS3;
|
||||
private int lastnaturescore, lastS1score, lastS2score, lastS3score;
|
||||
|
||||
protected override void OnAfterRender(bool firstRender)
|
||||
{
|
||||
// If last Nature or Subskill is different than previous
|
||||
if (PokemonToRate != null) {
|
||||
if (SelectedNatureId != lastNatureId)
|
||||
{
|
||||
lastNatureId = SelectedNatureId;
|
||||
var nature = NatureList.FirstOrDefault(n => n.Id == lastNatureId);
|
||||
lastnaturescore = PokemonToRate.Speciality switch
|
||||
{
|
||||
"Berries" => nature.BerryRating,
|
||||
"Ingredients" => nature.IngredientRating,
|
||||
"Skills" => nature.SkillRating,
|
||||
_ => 0
|
||||
};
|
||||
|
||||
}
|
||||
if (Subskill1 != lastS1)
|
||||
{
|
||||
|
||||
lastS1 = Subskill1;
|
||||
var s1 = SubskillList.FirstOrDefault(s => s.Id == Subskill1);
|
||||
lastS1score = PokemonToRate.Speciality switch
|
||||
{
|
||||
"Berries" => s1.BerryRank,
|
||||
"Ingredients" => s1.IngredientRank,
|
||||
"Skills" => s1.SkillRank,
|
||||
_ => 0
|
||||
};
|
||||
|
||||
}
|
||||
if (Subskill2 != lastS2)
|
||||
{
|
||||
|
||||
lastS2 = Subskill2;
|
||||
var s2 = SubskillList.FirstOrDefault(s => s.Id == Subskill2);
|
||||
lastS2score = PokemonToRate.Speciality switch
|
||||
{
|
||||
"Berries" => s2.BerryRank,
|
||||
"Ingredients" => s2.IngredientRank,
|
||||
"Skills" => s2.SkillRank,
|
||||
_ => 0
|
||||
};
|
||||
|
||||
|
||||
|
||||
}
|
||||
if (Subskill3 != lastS3)
|
||||
{
|
||||
lastS3 = Subskill3;
|
||||
var s3 = SubskillList.FirstOrDefault(s => s.Id == Subskill3);
|
||||
lastS3score = PokemonToRate.Speciality switch
|
||||
{
|
||||
"Berries" => s3.BerryRank,
|
||||
"Ingredients" => s3.IngredientRank,
|
||||
"Skills" => s3.SkillRank,
|
||||
_ => 0
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
CalculateScore();
|
||||
StateHasChanged();
|
||||
|
||||
}
|
||||
|
||||
private void CalculateScore()
|
||||
{
|
||||
if (PokemonToRate == null || SelectedNatureId == 0 || lastS1 == 0 || lastS2 == 0 || lastS3 == 0)
|
||||
{
|
||||
|
||||
FinalScore = 0;
|
||||
ScoreBackgroundColor = "#FFFFFF";
|
||||
ScoreColor = "#000000";
|
||||
return;
|
||||
}
|
||||
|
||||
var nature = NatureList.FirstOrDefault(n => n.Id == SelectedNatureId);
|
||||
var s1 = SubskillList.FirstOrDefault(s => s.Id == Subskill1);
|
||||
var s2 = SubskillList.FirstOrDefault(s => s.Id == Subskill2);
|
||||
var s3 = SubskillList.FirstOrDefault(s => s.Id == Subskill3);
|
||||
|
||||
if (nature == null || s1 == null || s2 == null || s3 == null)
|
||||
{
|
||||
FinalScore = 0;
|
||||
ScoreBackgroundColor = "#FFFFFF";
|
||||
ScoreColor = "#000000";
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
FinalScore = PokemonToRate.Speciality switch
|
||||
{
|
||||
"Berries" => nature.BerryRating + s1.BerryRank + s2.BerryRank + s3.BerryRank,
|
||||
"Ingredients" => nature.IngredientRating + s1.IngredientRank + s2.IngredientRank + s3.IngredientRank,
|
||||
"Skills" => nature.SkillRating + s1.SkillRank + s2.SkillRank + s3.SkillRank,
|
||||
_ => 0
|
||||
};
|
||||
|
||||
|
||||
// Set score background based on value
|
||||
ScoreBackgroundColor = FinalScore switch
|
||||
{
|
||||
8 => "#16C47F",
|
||||
7 => "#33CB8F",
|
||||
6 => "#50D39F",
|
||||
5 => "#6DDAAF",
|
||||
4 => "#8BE2BF",
|
||||
3 => "#A8E9CF",
|
||||
2 => "#C5F0DF",
|
||||
1 => "#E2F8EF",
|
||||
0 => "#FFFFFF",
|
||||
-1 => "#FFE7E7",
|
||||
-2 => "#FED0D0",
|
||||
-3 => "#FEB8B8",
|
||||
-4 => "#FDA0A0",
|
||||
-5 => "#FD8888",
|
||||
-6 => "#FC7171",
|
||||
-7 => "#FC5959",
|
||||
-8 => "#FB4141",
|
||||
_ => "#FFFFFF"
|
||||
};
|
||||
|
||||
ScoreColor = FinalScore == 0 ? "#000000" : "#FFFFFF";
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,49 +0,0 @@
|
|||
.pokemon-rating-panel {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1.5rem;
|
||||
width: 100%;
|
||||
|
||||
}
|
||||
|
||||
|
||||
.ratings {
|
||||
flex: 2;
|
||||
padding: 1.5rem;
|
||||
border-radius: 5% / 3.5%;
|
||||
}
|
||||
|
||||
.select-width {
|
||||
width: 16rem;
|
||||
}
|
||||
|
||||
.score-width {
|
||||
width: 6rem;
|
||||
}
|
||||
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.pokemon-rating-panel {
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
.ratings {
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
.d-flex.justify-content-between.align-items-center {
|
||||
flex-direction: column;
|
||||
align-items: stretch !important;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
.select-width
|
||||
{
|
||||
width: 4rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.score-width h4 {
|
||||
margin-top: 0.5rem !important;
|
||||
}
|
||||
}
|
|
@ -1,27 +0,0 @@
|
|||
|
||||
<!-- Search Input -->
|
||||
<div class="pokemon-selector p-3 bg-light ">
|
||||
<input class="form-control mb-3" placeholder="Search Pokémon..." @bind="SearchTerm" @oninput="HandleSearch" />
|
||||
|
||||
<!-- Scrollable Pokémon Grid -->
|
||||
<div class="row pokemon-grid">
|
||||
@foreach (var pokemon in FilteredPokemon)
|
||||
{
|
||||
bool isSelected = SelectedPokemon?.Id == pokemon.Id;
|
||||
|
||||
<div class="col-6 col-md-3 mb-3">
|
||||
<div class="card pokemon-card small-card @(isSelected ? "border-primary border-2 shadow" : "border-2 border-white")"
|
||||
@onclick="() => SelectPokemon(pokemon)">
|
||||
<img src="@pokemon.PokemonImageUrl" class="card-img-top" style="height: 50px; object-fit: contain;" />
|
||||
<div class="card-body p-2 text-center">
|
||||
<small>@pokemon.PokemonId</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
|
||||
</style>
|
|
@ -1,37 +0,0 @@
|
|||
using Microsoft.AspNetCore.Components;
|
||||
using Portfolio.Domain.Features.Pokemon;
|
||||
|
||||
namespace Portfolio.WebUI.Server.Components.Component.Pokemon_Components
|
||||
{
|
||||
partial class PokemonSelector
|
||||
{
|
||||
|
||||
[Parameter]
|
||||
public List<Pokemon> PokemonList { get; set; } = new();
|
||||
|
||||
[Parameter]
|
||||
public Pokemon? SelectedPokemon { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public EventCallback<Pokemon> OnPokemonSelected { get; set; }
|
||||
|
||||
private string SearchTerm { get; set; } = string.Empty;
|
||||
|
||||
private List<Pokemon> FilteredPokemon =>
|
||||
string.IsNullOrWhiteSpace(SearchTerm)
|
||||
? PokemonList
|
||||
: PokemonList.Where(p =>
|
||||
p.PokemonName.Contains(SearchTerm, StringComparison.OrdinalIgnoreCase)).ToList();
|
||||
|
||||
private async Task HandleSearch(ChangeEventArgs e)
|
||||
{
|
||||
SearchTerm = e?.Value?.ToString() ?? "";
|
||||
}
|
||||
|
||||
private async Task SelectPokemon(Pokemon pokemon)
|
||||
{
|
||||
await OnPokemonSelected.InvokeAsync(pokemon);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,31 +0,0 @@
|
|||
.pokemon-selector {
|
||||
height: 66vh;
|
||||
width: 20vw;
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 5% / 3.5%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.pokemon-grid {
|
||||
flex: 1 1 auto;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
|
||||
.pokemon-card {
|
||||
cursor: pointer;
|
||||
transition: transform 0.15s ease-in-out;
|
||||
}
|
||||
|
||||
.pokemon-card:hover {
|
||||
transform: scale(1.05);
|
||||
}
|
||||
|
||||
.small-card {
|
||||
font-size: 0.75rem;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -6,15 +6,13 @@
|
|||
@rendermode InteractiveServer
|
||||
|
||||
<!-- Table A: Desktop View-->
|
||||
<div class="container d-none d-md-block ">
|
||||
<div class="container d-none d-md-block">
|
||||
<!-- Main UI -->
|
||||
<div class="card shadow-sm border-0 mt-4 mx-auto col-12 col-md-10 col-lg-8 pokemontable">
|
||||
<div class="card shadow-sm border-0 mt-4 mx-auto col-12 col-md-10 col-lg-8">
|
||||
<!-- Table Header -->
|
||||
<div class="row card-header bg-secondary bg-gradient py-3 border-0">
|
||||
<div class="row card-header bg-secondary bg-gradient ml-0 py-3 border-0">
|
||||
<div class="flex-row justify-content-between">
|
||||
<div class="text-center position-relative">
|
||||
<input class="form-control position-absolute top-0 start-0 border-0 w-25" placeholder="Search Pokémon..." @bind="SearchTerm" @oninput="HandleSearch" />
|
||||
|
||||
<h2 class="text-info text-decoration-underline">Available Pokémon</h2>
|
||||
<div class="m-1 badge bg-info position-absolute top-0 end-0 border-0"><p class="statText">@(pokemons.Count()) Pokemon</p></div>
|
||||
</div>
|
||||
|
@ -22,7 +20,7 @@
|
|||
</div>
|
||||
|
||||
|
||||
<div class="tableFixHead bg-secondary table-responsive row">
|
||||
<div class="tableFixHead table-responsive row">
|
||||
<table class="table col table-borderless border-0 table-secondary table-striped align-middle">
|
||||
<!-- Table Head -->
|
||||
<thead class="">
|
||||
|
@ -47,8 +45,7 @@
|
|||
{
|
||||
<!-- Table Body -->
|
||||
<tbody>
|
||||
<tr></tr>
|
||||
@foreach (var pokemon in FilteredPokemon)
|
||||
@foreach (var pokemon in pokemons)
|
||||
{
|
||||
<tr class="flex-row">
|
||||
<!-- Section: Pokemon Image -->
|
||||
|
@ -177,8 +174,8 @@
|
|||
<!-- Stats -->
|
||||
<div class="d-flex flex-wrap align-items-center gap-2">
|
||||
<img src="@GetTypeImageUrl(pokemon.PokemonType)" style="width:28px;" />
|
||||
<PokemonBadge BadgeItem="@pokemon.SleepType" />
|
||||
<PokemonBadge BadgeItem="@pokemon.Speciality" />
|
||||
<div class=" badge @pokemon.SleepType.ToLower() border-0"><p class="statText">@pokemon.SleepType</p></div>
|
||||
<div class=" badge @pokemon.Speciality.ToLower() border-0"><p class="statText">@pokemon.Speciality</p></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -25,18 +25,7 @@ namespace Portfolio.WebUI.Server.Components.Component.Pokemon_Components
|
|||
}
|
||||
}
|
||||
}
|
||||
private string SearchTerm { get; set; } = string.Empty;
|
||||
|
||||
private List<Pokemon> FilteredPokemon =>
|
||||
string.IsNullOrWhiteSpace(SearchTerm)
|
||||
? AllPokemon
|
||||
: AllPokemon.Where(p =>
|
||||
p.PokemonName.Contains(SearchTerm, StringComparison.OrdinalIgnoreCase)).ToList();
|
||||
|
||||
private async Task HandleSearch(ChangeEventArgs e)
|
||||
{
|
||||
SearchTerm = e?.Value?.ToString() ?? "";
|
||||
}
|
||||
private void ToggleImage(int Id)
|
||||
{
|
||||
if (isShiny.ContainsKey(Id))
|
||||
|
|
|
@ -5,10 +5,6 @@
|
|||
width: 10%;
|
||||
}
|
||||
|
||||
.pokemontable {
|
||||
height: 69vh;
|
||||
}
|
||||
|
||||
.tableFixHead {
|
||||
overflow: auto;
|
||||
height: 600px;
|
||||
|
|
|
@ -1,11 +0,0 @@
|
|||
<div class="position-absolute bottom-0 vw-100">
|
||||
<footer class="d-flex flex-column align-content-center">
|
||||
<hr class="border-bottom border-primary border-1 mx-5">
|
||||
<p class="text-center text-primary">
|
||||
Made with Love
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-through-heart" viewBox="0 0 16 16">
|
||||
<path fill-rule="evenodd" d="M2.854 15.854A.5.5 0 0 1 2 15.5V14H.5a.5.5 0 0 1-.354-.854l1.5-1.5A.5.5 0 0 1 2 11.5h1.793l.53-.53c-.771-.802-1.328-1.58-1.704-2.32-.798-1.575-.775-2.996-.213-4.092C3.426 2.565 6.18 1.809 8 3.233c1.25-.98 2.944-.928 4.212-.152L13.292 2 12.147.854A.5.5 0 0 1 12.5 0h3a.5.5 0 0 1 .5.5v3a.5.5 0 0 1-.854.354L14 2.707l-1.006 1.006c.236.248.44.531.6.845.562 1.096.585 2.517-.213 4.092-.793 1.563-2.395 3.288-5.105 5.08L8 13.912l-.276-.182a22 22 0 0 1-2.685-2.062l-.539.54V14a.5.5 0 0 1-.146.354zm2.893-4.894A20.4 20.4 0 0 0 8 12.71c2.456-1.666 3.827-3.207 4.489-4.512.679-1.34.607-2.42.215-3.185-.817-1.595-3.087-2.054-4.346-.761L8 4.62l-.358-.368c-1.259-1.293-3.53-.834-4.346.761-.392.766-.464 1.845.215 3.185.323.636.815 1.33 1.519 2.065l1.866-1.867a.5.5 0 1 1 .708.708z" />
|
||||
</svg>
|
||||
</p>
|
||||
</footer>
|
||||
</div>
|
|
@ -1,13 +1,10 @@
|
|||
@inherits LayoutComponentBase
|
||||
|
||||
<div class="page bg-primary-subtle h-100">
|
||||
<div class="page bg-primary-subtle">
|
||||
<main class="h-100 w-100">
|
||||
<NavMenu3 />
|
||||
<article class="container m-auto">
|
||||
<div class="">
|
||||
@Body
|
||||
</div>
|
||||
<article class="container w-100 m-auto">
|
||||
@Body
|
||||
</article>
|
||||
</main>
|
||||
@* <MadeWithLoveFooter/> *@
|
||||
</div>
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
<div class="navbar navbar-expand bg-primary border-0">
|
||||
<div class="navbar navbar-expand bg-primary">
|
||||
<div class="d-flex align-items-center mb-3 mb-md-0 me-md-auto link-light text-decoration-none px-2">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#FFFFFF" class="bi bi-arrow-through-heart" viewBox="0 0 16 16" style="cursor: pointer;">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="currentColor" class="bi bi-arrow-through-heart" viewBox="0 0 16 16" style="cursor: pointer;">
|
||||
<path fill-rule="evenodd" d="M2.854 15.854A.5.5 0 0 1 2 15.5V14H.5a.5.5 0 0 1-.354-.854l1.5-1.5A.5.5 0 0 1 2 11.5h1.793l.53-.53c-.771-.802-1.328-1.58-1.704-2.32-.798-1.575-.775-2.996-.213-4.092C3.426 2.565 6.18 1.809 8 3.233c1.25-.98 2.944-.928 4.212-.152L13.292 2 12.147.854A.5.5 0 0 1 12.5 0h3a.5.5 0 0 1 .5.5v3a.5.5 0 0 1-.854.354L14 2.707l-1.006 1.006c.236.248.44.531.6.845.562 1.096.585 2.517-.213 4.092-.793 1.563-2.395 3.288-5.105 5.08L8 13.912l-.276-.182a22 22 0 0 1-2.685-2.062l-.539.54V14a.5.5 0 0 1-.146.354zm2.893-4.894A20.4 20.4 0 0 0 8 12.71c2.456-1.666 3.827-3.207 4.489-4.512.679-1.34.607-2.42.215-3.185-.817-1.595-3.087-2.054-4.346-.761L8 4.62l-.358-.368c-1.259-1.293-3.53-.834-4.346.761-.392.766-.464 1.845.215 3.185.323.636.815 1.33 1.519 2.065l1.866-1.867a.5.5 0 1 1 .708.708z" />
|
||||
</svg>
|
||||
<span class="fs-4 mx-1 text-white">Kira Jiroux</span>
|
||||
<span class="fs-4 mx-1">Kira Jiroux</span>
|
||||
</div>
|
||||
<ul class="navbar-nav">
|
||||
|
||||
|
|
|
@ -7,8 +7,3 @@
|
|||
<p>Ensuring that git is connected properly.</p>
|
||||
|
||||
Welcome to your new app.
|
||||
|
||||
|
||||
<div class="w-75 h-100 bg-white">
|
||||
|
||||
</div>
|
||||
|
|
|
@ -112,18 +112,11 @@ else
|
|||
<label for="ImageUrl" class="form-label">Base Image URL</label>
|
||||
<InputText id="ImageUrl" @bind-Value="NewPokemon.PokemonImageUrl" class="form-control" />
|
||||
</div>
|
||||
<!-- Shiny Image URL Input -->
|
||||
<div class="row mb-3 m-auto">
|
||||
<label for="ImageUrl" class="form-label">Shiny Image URL</label>
|
||||
<InputText id="ImageUrl" @bind-Value="NewPokemon.PokemonShinyImageUrl" class="form-control" />
|
||||
</div>
|
||||
|
||||
<!-- Flavor Text Input -->
|
||||
<div class="row mb-3 m-auto">
|
||||
<label for="FlavorText" class="form-label">Flavor Text</label>
|
||||
<InputText id="FlavorText" @bind-Value="NewPokemon.FlavorText" class="form-control" />
|
||||
</div>
|
||||
|
||||
<!-- Form Buttons -->
|
||||
<div class="d-flex justify-content-between">
|
||||
<button type="button" class="btn btn-secondary mb-3" @onclick="Cancel">Cancel</button>
|
||||
|
|
|
@ -32,13 +32,13 @@ namespace Portfolio.WebUI.Server.Components.Pages.Pokemon_Pages
|
|||
isSubmitting = true;
|
||||
await PokemonService.AddPokemonAsync(NewPokemon);
|
||||
isSubmitting = false;
|
||||
Navigation.NavigateTo("/pokemon");
|
||||
Navigation.NavigateTo("/pokemonsleep");
|
||||
}
|
||||
|
||||
protected void Cancel(MouseEventArgs e)
|
||||
{
|
||||
Console.WriteLine("Testing in Cancel");
|
||||
Navigation.NavigateTo("/pokemon");
|
||||
Navigation.NavigateTo("/pokemonsleep");
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -8,9 +8,6 @@
|
|||
|
||||
<PageTitle>Edit Pokémon</PageTitle>
|
||||
<PokemonHeader />
|
||||
<head>
|
||||
<link rel="stylesheet" href="bootstrap/bootstrap-lumen.css" /> <!-- app.css -->
|
||||
</head>
|
||||
|
||||
@if (pokemon == null)
|
||||
{
|
||||
|
|
|
@ -3,63 +3,183 @@
|
|||
@inject IPokemonService PokemonService
|
||||
@inject IPokemonNatureService PokemonNatureService
|
||||
@inject IPokemonSubskillService PokemonSubskillService
|
||||
|
||||
@inject NavigationManager Navigation
|
||||
|
||||
@attribute [StreamRendering]
|
||||
@rendermode InteractiveServer
|
||||
|
||||
<head>
|
||||
<link rel="stylesheet" href="bootstrap/bootstrap-lumen.css" /> <!-- app.css -->
|
||||
</head>
|
||||
|
||||
<PageTitle>Rate Pokémon</PageTitle>
|
||||
|
||||
<PokemonHeader />
|
||||
|
||||
<div class="mt-4">
|
||||
<div class="row">
|
||||
@if (PokemonList == null || NatureList == null || SubskillList == null)
|
||||
{
|
||||
<div class="d-flex justify-content-center align-items-center" style="height: 60vh;">
|
||||
<Loading />
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<!-- Left Panel: Selector -->
|
||||
<div class="col-4">
|
||||
<PokemonSelector
|
||||
PokemonList="PokemonList"
|
||||
SelectedPokemon="SelectedPokemon"
|
||||
OnPokemonSelected="SelectPokemon" />
|
||||
</div>
|
||||
@if (PokemonList == null || NatureList == null || SubskillList == null)
|
||||
{
|
||||
<p>Loading...</p>
|
||||
}
|
||||
else
|
||||
{
|
||||
<!-- Total Component -->
|
||||
<div class="w-75 mt-3 m-auto rate-container bg-info ">
|
||||
|
||||
<!-- Center Panel: Pokemon View -->
|
||||
<div class="col-4">
|
||||
<div class="d-flex justify-content-center align-items-center h-100">
|
||||
<!-- Header -->
|
||||
<div class="card-header bg-secondary ml-0 py-3 w-100 ">
|
||||
<div class="row">
|
||||
<div class=" text-center">
|
||||
<h2 class="text-info">Pokémon Rater</h2>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@if (SelectedPokemon != null)
|
||||
{
|
||||
<PokemonCard Pokemon="SelectedPokemon" />
|
||||
}
|
||||
else
|
||||
{
|
||||
<p class="text-muted">Please select a Pokémon to rate.</p>
|
||||
}
|
||||
<!-- Body -->
|
||||
<div class="p-3 w-100 flex-column ">
|
||||
<!-- Section 1: Top - Pokemon Selection -->
|
||||
<div class="row flex-row justify-content-end">
|
||||
<div class="pokemon-search col">
|
||||
<div class="position-relative pb-3" >
|
||||
<!-- Pokemon Selection -->
|
||||
<input type="text"
|
||||
class="form-control form-control"
|
||||
@bind="PokemonSearchTerm"
|
||||
placeholder="Search Pokémon..."
|
||||
@oninput="OnSearchTextChanged"
|
||||
/>
|
||||
@if (FilteredPokemonList.Any() && !string.IsNullOrWhiteSpace(PokemonSearchTerm))
|
||||
{
|
||||
<ul class="list-group position-absolute w-100" style="z-index: 1000; max-height: 200px; overflow-y: auto;">
|
||||
@foreach (var pokemon in FilteredPokemonList)
|
||||
{
|
||||
<li class="list-group-item list-group-item-action" @onclick="() => SelectPokemon(pokemon)">
|
||||
@if (pokemon.IsVariation)
|
||||
{
|
||||
@($"{pokemon.PokemonId} {pokemon.VariationName} {pokemon.PokemonName}")
|
||||
}
|
||||
else
|
||||
{
|
||||
@($"{pokemon.PokemonId} {pokemon.PokemonName}")
|
||||
}
|
||||
</li>
|
||||
}
|
||||
</ul>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-2">
|
||||
<button class="btn btn-danger">Clear</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- Right Panel: Rating View -->
|
||||
<div class="col-4">
|
||||
<PokemonRatingPanel
|
||||
PokemonToRate="SelectedPokemon"
|
||||
NatureList="NatureList"
|
||||
SubskillList="SubskillList"
|
||||
/>
|
||||
</div>
|
||||
<!-- Section 2: Bottom - Pokemon -->
|
||||
@if (SelectedPokemon != null)
|
||||
{
|
||||
<div class="row w-100">
|
||||
<!-- Section 2A: Left Side - Pokemon Card View -->
|
||||
<div class="col">
|
||||
<div class="position-relative d-flex justify-content-center">
|
||||
<PokemonCard Pokemon="SelectedPokemon" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
}
|
||||
<!-- Section 2B: Right Side - Stat Selection + Form Submission -->
|
||||
<div class="col">
|
||||
<h4 class="mb-3">Select Nature & Subskills</h4>
|
||||
|
||||
<!-- Nature -->
|
||||
<div class="">
|
||||
<div class="">
|
||||
<label>Select Nature</label>
|
||||
<select class="form-control form-control-sm mb-2" @bind="SelectedNatureId">
|
||||
<option value="" disabled>Choose Nature...</option>
|
||||
@foreach (var nature in NatureList)
|
||||
{
|
||||
<option value="@nature.Id">@nature.Nature</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Subskill 1 -->
|
||||
<div class="">
|
||||
<div class="">
|
||||
<label for="subskillSelect1">Select Level 10 Subskill</label>
|
||||
<select id="subskillSelect1" class="form-control form-control-sm mb-2" @bind="subskillSelect1">
|
||||
<option value="" disabled selected>Choose Subskill...</option>
|
||||
@foreach (var subskill in SubskillList)
|
||||
{
|
||||
<option value="@subskill.Id">@subskill.SubSkill</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Subskill 2 -->
|
||||
<div class="">
|
||||
<div class="">
|
||||
<label for="subskillSelect2">Select Level 25 Subskill</label>
|
||||
<select id="subskillSelect2" class="form-control form-control-sm mb-2" @bind="subskillSelect2">
|
||||
<option value="" disabled selected>Choose Subskill...</option>
|
||||
@foreach (var subskill in SubskillList)
|
||||
{
|
||||
<option value="@subskill.Id">@subskill.SubSkill</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Subskill 3 -->
|
||||
<div class="">
|
||||
<div class="">
|
||||
<label for="subskillSelect3">Select Level 50 Subskill</label>
|
||||
<select id="subskillSelect3" class="form-control form-control-sm mb-2" @bind="subskillSelect3">
|
||||
<option value="" disabled selected>Choose Subskill...</option>
|
||||
@foreach (var subskill in SubskillList)
|
||||
{
|
||||
<option value="@subskill.Id">@subskill.SubSkill</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Subskill 4 Disabled -->
|
||||
<div class="">
|
||||
<div class="">
|
||||
<label for="subskillSelect4">Select Level 75 Subskill</label>
|
||||
<select id="subskillSelect4" disabled class="form-control form-control-sm mb-2" @bind="subskillSelect4">
|
||||
<option value="" disabled selected>Choose Subskill...</option>
|
||||
@foreach (var subskill in SubskillList)
|
||||
{
|
||||
<option value="@subskill.Id">@subskill.SubSkill</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Subskill 5 Disabled -->
|
||||
<div class="">
|
||||
<div class="">
|
||||
<label for="subskillSelect5">Select Level 100 Subskill</label>
|
||||
<select id="subskillSelect5" disabled class="form-control form-control-sm mb-2" @bind="subskillSelect5">
|
||||
<option value="" disabled selected>Choose Subskill...</option>
|
||||
@foreach (var subskill in SubskillList)
|
||||
{
|
||||
<option value="@subskill.Id">@subskill.SubSkill</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Calculate Score -->
|
||||
<div class="">
|
||||
<div class="d-flex justify-content-between align-items-center mt-3">
|
||||
<button class="btn btn-primary" @onclick="CalculateScore">Calculate Final Score</button>
|
||||
<h4 class="bg-white border border-1 rounded p-2 m-2">
|
||||
<span class="finalScore rounded" style="background-color: @ScoreBackgroundColor">@FinalScore</span>
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
|
|
@ -58,8 +58,7 @@ namespace Portfolio.WebUI.Server.Components.Pages.Pokemon_Pages
|
|||
{
|
||||
SelectedPokemon = pokemon;
|
||||
PokemonSearchTerm = string.Empty; // Reset search term
|
||||
StateHasChanged();
|
||||
//FilteredPokemonList.Clear(); // Clear the filtered list to hide dropdown
|
||||
FilteredPokemonList.Clear(); // Clear the filtered list to hide dropdown
|
||||
}
|
||||
|
||||
private async void OnPokemonSelected()
|
||||
|
|
|
@ -1 +1,92 @@
|
|||
|
||||
|
||||
.rate-container {
|
||||
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2),
|
||||
0 6px 20px 0 rgba(255,255, 255, 0.19);
|
||||
border-radius: 15px;
|
||||
|
||||
}
|
||||
|
||||
.pokemon-search {
|
||||
width: 95%;
|
||||
}
|
||||
|
||||
.flip-container {
|
||||
perspective: 1000px;
|
||||
display: inline-block;
|
||||
width: 250px;
|
||||
height: 250px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.flipper {
|
||||
transition: transform 0.6s;
|
||||
transform-style: preserve-3d;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.flipped {
|
||||
transform: rotateY(180deg);
|
||||
}
|
||||
|
||||
.front, .back {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
backface-visibility: hidden;
|
||||
}
|
||||
|
||||
.back {
|
||||
transform: rotateY(180deg);
|
||||
}
|
||||
|
||||
.badge {
|
||||
width: 90px;
|
||||
height: 30px;
|
||||
color: white;
|
||||
padding: 4px 8px;
|
||||
border-radius: 30px;
|
||||
}
|
||||
|
||||
.statText {
|
||||
position: relative;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.dozing {
|
||||
background-color: #fcdc5e;
|
||||
}
|
||||
|
||||
.snoozing {
|
||||
background-color: #4ce8ed;
|
||||
}
|
||||
|
||||
.slumbering {
|
||||
background-color: #4588fb;
|
||||
}
|
||||
|
||||
.berries {
|
||||
background-color: #24d86b;
|
||||
}
|
||||
|
||||
.ingredients {
|
||||
background-color: #fdbe4d;
|
||||
}
|
||||
|
||||
.skills {
|
||||
background-color: #47a0fc;
|
||||
}
|
||||
|
||||
.finalScore {
|
||||
color: white;
|
||||
padding: 4px 8px;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
|
|
@ -9,10 +9,6 @@
|
|||
|
||||
<PageTitle>Pokémon Sleep</PageTitle>
|
||||
|
||||
<head>
|
||||
<link rel="stylesheet" href="bootstrap/bootstrap-lumen.css" /> <!-- app.css -->
|
||||
</head>
|
||||
|
||||
<div class="w-100">
|
||||
<!-- <PokemonBackground PokemonImages="pokemonImageUrls" ShinyPokemonImages="pokemonShinyImageUrls" /> -->
|
||||
|
||||
|
|
|
@ -6,17 +6,14 @@
|
|||
|
||||
|
||||
<PageTitle>Pokémon Sleep</PageTitle>
|
||||
<head>
|
||||
<link rel="stylesheet" href="bootstrap/bootstrap-lumen.css" /> <!-- app.css -->
|
||||
</head>
|
||||
|
||||
<div class="">
|
||||
<div class="container">
|
||||
<div class="row w-100">
|
||||
<!-- <PokemonBackground PokemonImages="pokemonImageUrls" ShinyPokemonImages="pokemonShinyImageUrls" /> -->
|
||||
<div class="row"><PokemonHeader /></div>
|
||||
|
||||
<!-- Card -->
|
||||
<div class="row card shadow-sm border-0 p-3 pb-4 mt-4 m-auto w-75 mb-5 bg-white">
|
||||
<div class="row card shadow-sm border-0 p-3 pb-4 mt-4 m-auto w-75">
|
||||
<!-- Top Row-->
|
||||
<div class="row d-flex flex-row">
|
||||
<!-- Image side -->
|
||||
|
|
|
@ -8,10 +8,6 @@
|
|||
|
||||
<PokemonHeader />
|
||||
|
||||
<head>
|
||||
<link rel="stylesheet" href="bootstrap/bootstrap-lumen.css" /> <!-- app.css -->
|
||||
</head>
|
||||
|
||||
@if (_pokemon == null)
|
||||
{
|
||||
<Loading />
|
||||
|
@ -21,20 +17,14 @@ else
|
|||
<PageTitle>@_pokemon.PokemonName</PageTitle>
|
||||
<!-- Total Componenet-->
|
||||
|
||||
<div class="container">
|
||||
<div class="w-75 row mt-4 m-auto">
|
||||
|
||||
<!-- Previous Pokemon Button -->
|
||||
<div class="col-auto">
|
||||
<button class="mt-1 p-2 btn btn-danger rounded-5 align-self-start text-white" disabled="@(!_previousPokemonId.HasValue)" @onclick="NavigateToPrevious">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="currentColor" class="bi bi-arrow-left-circle-fill" viewBox="0 0 16 16">
|
||||
<path d="M8 0a8 8 0 1 0 0 16A8 8 0 0 0 8 0m3.5 7.5a.5.5 0 0 1 0 1H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5z" />
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<!-- Pokemon Presentation -->
|
||||
<div class="mt-5 mx-5 col justify-content-center">
|
||||
<div class="w-100">
|
||||
<div class="d-flex justify-content-center mt-4">
|
||||
<button class="mt-1 p-2 btn btn-danger rounded-5 align-self-start text-white" disabled="@(!_previousPokemonId.HasValue)" @onclick="NavigateToPrevious">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="currentColor" class="bi bi-arrow-left-circle-fill" viewBox="0 0 16 16">
|
||||
<path d="M8 0a8 8 0 1 0 0 16A8 8 0 0 0 8 0m3.5 7.5a.5.5 0 0 1 0 1H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5z" />
|
||||
</svg>
|
||||
</button>
|
||||
<div class="mt-5 mx-5 d-flex justify-content-center">
|
||||
@if (_variationPokemonId != null)
|
||||
{
|
||||
@if (_variationPokemonId != null && _pokemonVariant == null){
|
||||
|
@ -42,54 +32,50 @@ else
|
|||
}
|
||||
else
|
||||
{
|
||||
<!-- If Variation Pokemon have same PokemonId -->
|
||||
@if(_pokemon.Id != _pokemonVariant.Id)
|
||||
{
|
||||
<div class="d-flex justify-content-center">
|
||||
<div class="pokemoncard m-1">
|
||||
<PokemonCard Pokemon="_pokemon" />
|
||||
<div class="position-relative">
|
||||
<PokemonCard Pokemon="_pokemon" />
|
||||
<div class="position-absolute top-100 start-50 translate-middle mt-5">
|
||||
<PokemonEditButton PokemonId="_pokemon.Id" />
|
||||
</div>
|
||||
|
||||
<div class="pokemoncard m-1">
|
||||
<PokemonCard Pokemon="_pokemonVariant" />
|
||||
</div>
|
||||
<div class="position-relative">
|
||||
<PokemonCard Pokemon="_pokemonVariant" />
|
||||
<div class="position-absolute top-100 start-50 translate-middle mt-5">
|
||||
<PokemonEditButton PokemonId="_pokemonVariant.Id" />
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
}
|
||||
<!-- If Variation Pokemon has diff PokemonId -->
|
||||
else
|
||||
{
|
||||
<div class="d-flex justify-content-center align-items-center h-100">
|
||||
<div class="pokemoncard">
|
||||
<PokemonCard Pokemon="_pokemonVariant" />
|
||||
<div class="position-relative">
|
||||
<PokemonCard Pokemon="_pokemonVariant" />
|
||||
<div class="position-absolute top-100 start-50 translate-middle mt-5">
|
||||
<PokemonEditButton PokemonId="_pokemonVariant.Id" />
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
else{
|
||||
<!-- Standard Pokemon Display -->
|
||||
<div class="d-flex justify-content-center align-items-center h-100">
|
||||
<div class="pokemoncard m-1">
|
||||
<PokemonCard Pokemon="_pokemon" />
|
||||
<div class="position-relative">
|
||||
<PokemonCard Pokemon="_pokemon" />
|
||||
<div class="position-absolute top-100 start-50 translate-middle mt-5">
|
||||
<PokemonEditButton PokemonId="_pokemon.Id" />
|
||||
</div>
|
||||
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
|
||||
<!-- Next Pokemon Button -->
|
||||
<div class="col-auto">
|
||||
<button class="mt-1 p-2 btn btn-danger rounded rounded-5 align-self-start text-white" disabled="@(!_nextPokemonId.HasValue)" @onclick="NavigateToNext">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="currentColor" class="bi bi-arrow-right-circle-fill" viewBox="0 0 16 16">
|
||||
<path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0M4.5 7.5a.5.5 0 0 0 0 1h5.793l-2.147 2.146a.5.5 0 0 0 .708.708l3-3a.5.5 0 0 0 0-.708l-3-3a.5.5 0 1 0-.708.708L10.293 7.5z" />
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
}
|
||||
|
|
|
@ -1,9 +1,2 @@
|
|||
.pokemoncard {
|
||||
width: 100%;
|
||||
max-width: 350px;
|
||||
flex: 0 0 auto; /* prevent flex shrink/grow */
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
padding: 0.5rem;
|
||||
body {
|
||||
}
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
window.getScreenWidth = () => {
|
||||
return window.innerWidth;
|
||||
};
|
||||
|
||||
window.registerResizeCallback = (dotNetHelper) => {
|
||||
window.onresize = () => {
|
||||
dotNetHelper.invokeMethodAsync('UpdateScreenWidth', window.innerWidth);
|
||||
};
|
||||
};
|
Loading…
Reference in New Issue