Basic page for ingredients listings
parent
c716e08c45
commit
45a9950c70
|
|
@ -16,15 +16,4 @@ table {
|
||||||
color: #ff7400;
|
color: #ff7400;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tbody tr:hover {
|
|
||||||
background-color: #4f4f4f;
|
|
||||||
}
|
|
||||||
|
|
||||||
& tr,
|
|
||||||
th,
|
|
||||||
td {
|
|
||||||
border: 1px solid #fff;
|
|
||||||
padding: 7px;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,17 @@ table {
|
||||||
thead th {
|
thead th {
|
||||||
background-color: var(--bg-dark-color);
|
background-color: var(--bg-dark-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tbody tr:hover {
|
||||||
|
background-color: #4f4f4f;
|
||||||
|
}
|
||||||
|
|
||||||
|
& tr,
|
||||||
|
th,
|
||||||
|
td {
|
||||||
|
border: 1px solid #515151;
|
||||||
|
padding: 7px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ul {
|
ul {
|
||||||
|
|
@ -118,3 +129,37 @@ input[type="checkbox"] {
|
||||||
color: var(--primary-light-color);
|
color: var(--primary-light-color);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.help {
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: middle;
|
||||||
|
padding: 0px 8px;
|
||||||
|
|
||||||
|
&:after {
|
||||||
|
content: "?";
|
||||||
|
font-size: 24px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.tooltip-wrapper {
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
.tooltip {
|
||||||
|
visibility: hidden;
|
||||||
|
background-color: var(--bg-light-color);
|
||||||
|
position: absolute;
|
||||||
|
top: -42px;
|
||||||
|
color: var(--text-color);
|
||||||
|
text-align: center;
|
||||||
|
border-radius: 6px;
|
||||||
|
padding: 8px;
|
||||||
|
opacity: 0;
|
||||||
|
transition: opacity 0.3s;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover .tooltip {
|
||||||
|
visibility: visible;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
li {
|
||||||
|
max-height: 3rem;
|
||||||
|
min-height: 3rem;
|
||||||
|
align-content: center;
|
||||||
|
}
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
use std::path::PathBuf;
|
use std::{fmt::Display, path::PathBuf};
|
||||||
|
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
|
|
||||||
#[derive(Debug, Deserialize, PartialEq, Eq)]
|
#[derive(Debug, Deserialize, PartialEq, Eq, PartialOrd, Ord)]
|
||||||
#[serde(rename_all = "lowercase")]
|
#[serde(rename_all = "lowercase")]
|
||||||
pub enum IngredientGroup {
|
pub enum IngredientGroup {
|
||||||
Meat,
|
Meat,
|
||||||
|
|
@ -15,6 +15,23 @@ pub enum IngredientGroup {
|
||||||
Special,
|
Special,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Display for IngredientGroup {
|
||||||
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
|
let str = match self {
|
||||||
|
IngredientGroup::Meat => "Meat",
|
||||||
|
IngredientGroup::Seafood => "Seafood",
|
||||||
|
IngredientGroup::Vegetable => "Vegetable",
|
||||||
|
IngredientGroup::Mushroom => "Mushroom",
|
||||||
|
IngredientGroup::Herb => "Herb",
|
||||||
|
IngredientGroup::Fruit => "Fruit",
|
||||||
|
IngredientGroup::Other => "Other",
|
||||||
|
IngredientGroup::Special => "Special",
|
||||||
|
};
|
||||||
|
|
||||||
|
f.write_str(str)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Deserialize, PartialEq, Eq)]
|
#[derive(Debug, Deserialize, PartialEq, Eq)]
|
||||||
pub struct Ingredient {
|
pub struct Ingredient {
|
||||||
pub name: String,
|
pub name: String,
|
||||||
|
|
@ -23,13 +40,6 @@ pub struct Ingredient {
|
||||||
pub locations: Vec<Location>,
|
pub locations: Vec<Location>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Deserialize, PartialEq, Eq)]
|
|
||||||
pub struct Location {
|
|
||||||
pub world: String,
|
|
||||||
pub room: String,
|
|
||||||
pub note: Option<String>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Ingredient {
|
impl Ingredient {
|
||||||
pub fn import(path: &str) -> Vec<Ingredient> {
|
pub fn import(path: &str) -> Vec<Ingredient> {
|
||||||
let mut ingredients: Vec<Ingredient> = vec![];
|
let mut ingredients: Vec<Ingredient> = vec![];
|
||||||
|
|
@ -53,6 +63,15 @@ impl Ingredient {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ingredients.sort_by(|a, b| a.group.cmp(&b.group));
|
||||||
|
|
||||||
ingredients
|
ingredients
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Deserialize, PartialEq, Eq)]
|
||||||
|
pub struct Location {
|
||||||
|
pub world: String,
|
||||||
|
pub room: String,
|
||||||
|
pub note: Option<String>,
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@
|
||||||
<h1>Kingdom Hearts III</h1>
|
<h1>Kingdom Hearts III</h1>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="./kh3/drops.html">Material Drops</a></li>
|
<li><a href="./kh3/drops.html">Material Drops</a></li>
|
||||||
|
<li><a href="./kh3/ingredients.html">Ingredients</a></li>
|
||||||
<li><a href="./kh3/food-sim.html">Food Simulator</a></li>
|
<li><a href="./kh3/food-sim.html">Food Simulator</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
|
||||||
|
|
@ -3,12 +3,30 @@
|
||||||
{% block title %}KH3 - Ingredients{% endblock %}
|
{% block title %}KH3 - Ingredients{% endblock %}
|
||||||
|
|
||||||
{% block head %}
|
{% block head %}
|
||||||
<link rel="stylesheet" href="{{ crate::find_hash("/public/styles/common/ingredients.css") }}"></link>
|
<link rel="stylesheet" href="{{ crate::find_hash("/public/styles/kh3/ingredients.css") }}"></link>
|
||||||
<script
|
<script
|
||||||
type="module"
|
type="module"
|
||||||
src="{{ crate::find_hash("/public/scripts/common/ingredients.js") }}"
|
src="{{ crate::find_hash("/public/scripts/kh3/ingredients.js") }}"
|
||||||
></script>
|
></script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
{% for ingredient in ingredients %}
|
||||||
|
<div>
|
||||||
|
<h1>{{ingredient.name}}</h1>
|
||||||
|
<ul>
|
||||||
|
{% for location in ingredient.locations %}
|
||||||
|
<li class="tooltip-wrapper" {% if location.note.is_some() %}style="cursor: help"{% endif %}>
|
||||||
|
{{location.world+}} - {{+location.room}}
|
||||||
|
{% match location.note %}
|
||||||
|
{% when Some with (val) %}
|
||||||
|
<div class="help"></div>
|
||||||
|
<div class="tooltip">{{ val }}</div>
|
||||||
|
{% when None %}
|
||||||
|
{% endmatch %}
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue