| import importlib |
| import re |
| from pathlib import Path |
|
|
| import streamlit as st |
| import yaml |
|
|
| REGEX_YAML_BLOCK = re.compile(r"---[\n\r]+([\S\s]*?)[\n\r]+---[\n\r](.*)", re.DOTALL) |
|
|
|
|
| def render_preview(image, title, description): |
| with st.container(): |
| image_col, text_col = st.columns((1, 4)) |
| with image_col: |
| st.image(image) |
|
|
| with text_col: |
| st.subheader(title) |
| st.write(description) |
|
|
|
|
| def render_page(post_path: Path): |
| mod = importlib.import_module(str(post_path)) |
| mod.run_article() |
|
|
|
|
| def get_page_data(post_path: Path): |
| mod = importlib.import_module(str(post_path)) |
| return { |
| "title": mod.title, |
| "description": mod.description, |
| "date": mod.date, |
| "thumbnail": mod.thumbnail, |
| } |
|
|
|
|
| def main(): |
| st.set_page_config(layout="wide") |
| posts = { |
| "posts.welcome": "Welcome", |
| "posts.context": "Hate Speech in ACM", |
| "posts.dataset_exploration": "ACM Datasets", |
| "posts.model_exploration": "ACM Models", |
| "posts.conclusion": "Key Takeaways", |
| } |
| page_to_show = list(posts.keys())[0] |
| with st.sidebar: |
|
|
| st.markdown( |
| """ |
| <div align="center"> |
| <h1>Task Exploration: Hate Speech Detection</h1> |
| </div> |
| """, |
| unsafe_allow_html=True, |
| ) |
| st.markdown("---") |
|
|
| page_to_show = st.selectbox( |
| "Navigation menu:", |
| posts, |
| format_func=lambda x:posts[x], |
| ) |
|
|
| for post in posts: |
| data = get_page_data(Path(post)) |
| clicked = render_preview( |
| data.get("thumbnail"), data.get("title"), data.get("description") |
| ) |
|
|
| if page_to_show: |
| render_page(Path(page_to_show)) |
|
|
|
|
| main() |
|
|