|
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() |
|
|