ebr / app.py
q275343119's picture
mod - Modify the Title and Navigation Bar
9ff08e9
raw
history blame
3.79 kB
import os
import streamlit as st
from app.backend.constant import LEADERBOARD_MAP
from app.backend.data_engine import DataEngine
from app.backend.data_page import render_page
# init global data engine
data_engine = DataEngine()
data_engine.jsons_to_df()
st.session_state["data_engine"] = data_engine
st.set_page_config(layout="wide")
# Add custom CSS
st.markdown("""
<style>
/* Sidebar background color */
section[data-testid="stSidebar"] {
background-color: #f0f2f6;
}
/* Navigation button style */
section[data-testid="stSidebar"] .stButton button {
width: 100%;
padding: 0.75rem 1rem;
background-color: transparent;
border: none;
text-align: left;
color: rgb(49, 51, 63);
font-size: 0.9rem;
font-weight: 400;
line-height: 1.6;
margin: 0.1rem 0;
}
.st-emotion-cache-64tehz {
gap: 0rem;
}
.st-emotion-cache-qsto9u {
justify-content: left;
}
[data-testid="stVerticalBlock"] .stVerticalBlock {
text-indent: 2rem;
}
/* Navigation button hover effect */
section[data-testid="stSidebar"] .stButton button:hover {
background-color: rgba(151, 166, 195, 0.15);
}
/* Selected state */
section[data-testid="stSidebar"] .stButton button.selected,
section[data-testid="stSidebar"] .stButton button:active,
section[data-testid="stSidebar"] .stButton button:focus {
background-color: #fff;
border: none;
box-shadow: none;
}
/* Page title style */
h1 {
font-size: 3rem !important;
font-weight: 600 !important;
color: rgb(49, 51, 63) !important;
margin-bottom: 1rem !important;
}
/* Divider style */
hr {
margin: 0.5rem 0;
border-color: rgba(49, 51, 63, 0.1);
}
/* Subpage indentation */
.child-page {
padding-left: 1rem;
}
</style>
""", unsafe_allow_html=True)
# Implement navigation using sidebar
with st.sidebar:
# Initialize session state
if "selected_page" not in st.session_state:
st.session_state.selected_page = "text"
# Text Leaderboard as clickable button
selected_class = "selected" if st.session_state.selected_page == "text" else ""
if st.button("📚 Text Leaderboard", key="text",
use_container_width=True,
):
st.session_state.selected_page = "text"
st.rerun()
# Subpage list
pages = [
("law", "⚖️ Law"),
("multilingual", "🌎 Multilingual"),
("german", "🇩🇪 German"),
("code", "💻 Code"),
("tech", "🛠️ Tech")
]
# Use container for indentation
with st.container():
st.markdown('<div class="child-page">', unsafe_allow_html=True)
for page_id, page_title in pages:
selected_class = "selected" if st.session_state.selected_page == page_id else ""
if st.button(page_title, key=page_id, use_container_width=True):
st.session_state.selected_page = page_id
# st.rerun()
st.markdown('</div>', unsafe_allow_html=True)
# Add page title
if st.session_state.selected_page == "text":
st.title("📚 Text Leaderboard")
elif st.session_state.selected_page == "law":
st.title("⚖️ Law")
elif st.session_state.selected_page == "multilingual":
st.title("🌎 Multilingual")
elif st.session_state.selected_page == "german":
st.title("🇩🇪 German")
elif st.session_state.selected_page == "code":
st.title("💻 Code")
elif st.session_state.selected_page == "tech":
st.title("🛠️ Tech")
# Render current selected page
render_page(st.session_state.selected_page)