Spaces:
Sleeping
Sleeping
| 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) | |