39 lines
1.3 KiB
Python
39 lines
1.3 KiB
Python
from pathlib import Path
|
|
from typing import Union
|
|
|
|
import rio
|
|
|
|
|
|
class NewsPost(rio.Component):
|
|
def __init__(self, header: str, article_text: Union[str, Path], date: str):
|
|
super().__init__()
|
|
self.align_y = 0
|
|
self.margin_top = 1
|
|
self.margin_right = 1
|
|
self._header = header
|
|
self._date = date
|
|
if isinstance(article_text, str):
|
|
self._article_text = article_text
|
|
elif isinstance(article_text, Path):
|
|
with open(article_text, "r", encoding="utf-8") as f:
|
|
self._article_text = f.read()
|
|
|
|
def build(self) -> rio.Component:
|
|
return rio.Rectangle(
|
|
content=rio.Column(
|
|
rio.Row(
|
|
rio.Text(self._header, align_x=0.1, style="heading2"),
|
|
rio.Text(self._date, align_x=0.9, style=rio.TextStyle(italic=True)),
|
|
margin_top=0.5
|
|
),
|
|
rio.Column(
|
|
rio.Markdown(self._article_text, margin=1)
|
|
)
|
|
),
|
|
fill=self.session.theme.neutral_color,
|
|
corner_radius=self.session.theme.corner_radius_medium,
|
|
shadow_radius=0.5,
|
|
shadow_color=self.session.theme.hud_color,
|
|
shadow_offset_y=0
|
|
)
|