Skip to content

Commit 5da9973

Browse files
committed
Update
1 parent fd9f0b1 commit 5da9973

1 file changed

Lines changed: 39 additions & 6 deletions

File tree

app/spec_renderer.py

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,15 @@ def fetch_issue_details(issue_number: int) -> tuple[dict | None, str | None]:
183183
}, None
184184

185185

186+
def sanitize_title_for_markdown_link(title: str) -> str:
187+
"""Remove or escape markdown special characters from title for use in link text."""
188+
# Remove backticks which break markdown link syntax
189+
sanitized = title.replace("`", "")
190+
# Remove square brackets which interfere with link syntax
191+
sanitized = sanitized.replace("[", "(").replace("]", ")")
192+
return sanitized
193+
194+
186195
def replace_issue_references_with_previews(markdown_content: str) -> str:
187196
"""Replace issue references with styled previews."""
188197
# Pattern for issue links like [#12331](https://github.com/streamlit/streamlit/issues/12331)
@@ -206,8 +215,8 @@ def create_issue_preview(issue_number: int) -> str:
206215
else:
207216
status_icon = ":violet[:material/check_circle:]"
208217

209-
# Truncate title if too long
210-
title = issue_details["title"]
218+
# Sanitize and truncate title for use in markdown link
219+
title = sanitize_title_for_markdown_link(issue_details["title"])
211220
if len(title) > 50:
212221
title = title[:50] + "..."
213222

@@ -582,12 +591,36 @@ def main() -> None:
582591
fetch_merged_specs.clear()
583592
st.markdown("Read product specs from the Streamlit repo.")
584593

585-
tab_open, tab_merged = st.tabs(["Open PRs", "Merged Specs"])
594+
# Determine initial view from query params
595+
view_param = st.query_params.get("view")
596+
if view_param == "open" or "pr" in st.query_params:
597+
default_view = "Open PRs"
598+
elif view_param == "merged" or "spec" in st.query_params:
599+
default_view = "Merged Specs"
600+
else:
601+
default_view = "Merged Specs" # Default to merged specs
602+
603+
view_options = ["Open PRs", "Merged Specs"]
604+
selected_view = st.segmented_control(
605+
"View",
606+
options=view_options,
607+
default=default_view,
608+
label_visibility="collapsed",
609+
)
586610

587-
with tab_open:
611+
# Update query param when view changes and clean up conflicting params
612+
new_view_param = "merged" if selected_view == "Merged Specs" else "open"
613+
if st.query_params.get("view") != new_view_param:
614+
st.query_params["view"] = new_view_param
615+
# Remove conflicting query params when switching views
616+
if new_view_param == "merged" and "pr" in st.query_params:
617+
del st.query_params["pr"]
618+
elif new_view_param == "open" and "spec" in st.query_params:
619+
del st.query_params["spec"]
620+
621+
if selected_view == "Open PRs":
588622
render_open_spec_prs()
589-
590-
with tab_merged:
623+
else:
591624
render_merged_specs()
592625

593626

0 commit comments

Comments
 (0)