feat(nav,i18n): sticky footer with Back-to-Home + localized tool headers
Two unrelated UX issues addressed in one sweep across all nine tool
pages because they share the same edit surface.
(1) Sticky footer replaces the top + bottom back-link buttons.
Reported: a big white empty footer space at the bottom of every page;
the Back to Home button at the top scrolled out of view on long pages.
New ``render_sticky_footer()`` helper in ``components/_legacy.py``
injects a fixed-position bar at ``bottom: 0`` of the viewport with:
- A border-top so it visually reads as a non-movable bar.
- A semi-transparent background (rgba 0.96 + ``backdrop-filter: blur``)
so content underneath shows through faintly when the user scrolls.
- A styled ``<a href="home">`` anchor (not an ``st.button``) because
Streamlit widgets can't be CSS-positioned reliably — Streamlit owns
the widget's DOM container and re-mounts it on every rerun. A real
anchor sits exactly where the CSS puts it and triggers Streamlit's
URL routing to the home page.
- ``padding-bottom: 3.5rem`` on the main container so the last widget
isn't hidden behind the bar.
Called once per tool page, immediately after ``hide_streamlit_chrome()``
so it renders even on pages that ``st.stop()`` early before any other
content runs. The old top-and-bottom ``back_to_home_link()`` calls are
removed from every tool page; their entry/exit points were dropping
the button when the script short-circuited.
(2) Tool-page headers now localize.
Reported: switching the sidebar language picker to Spanish left the
tool page's title + caption in English. Root cause: every page had
hard-coded ``st.title("✂️ Clean Text")`` / ``st.caption("Trim
whitespace...")`` strings.
Added per-tool ``tools.<id>.page_title`` and
``tools.<id>.page_caption`` keys to ``en.json`` and ``es.json`` for
all nine tools. Routed each page's title/caption call through ``t()``.
Verified: with ``ui_lang=es`` set, the Clean Text page now renders
"✂️ Limpiar texto" + the Spanish caption.
Updated ``tests/gui/test_smoke.py::EXPECTED_SUBSTRINGS`` so the
``es`` column for each tool page asserts the actual Spanish string
(was a duplicate of the English string back when the page bodies
were English-only).
2220 tests pass.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -16,11 +16,13 @@ if str(_project_root) not in sys.path:
|
||||
|
||||
from src.gui.components import (
|
||||
back_to_home_link,
|
||||
render_sticky_footer,
|
||||
hide_streamlit_chrome,
|
||||
html_download_button,
|
||||
pickup_or_upload,
|
||||
require_feature_or_render_upgrade,
|
||||
)
|
||||
from src.i18n import t
|
||||
from src.core.format_standardize import (
|
||||
PRESETS,
|
||||
FieldType,
|
||||
@@ -30,7 +32,7 @@ from src.core.format_standardize import (
|
||||
from src.license import FeatureFlag
|
||||
|
||||
hide_streamlit_chrome()
|
||||
back_to_home_link()
|
||||
render_sticky_footer()
|
||||
require_feature_or_render_upgrade(FeatureFlag.FORMAT_STANDARDIZER)
|
||||
|
||||
|
||||
@@ -38,12 +40,8 @@ require_feature_or_render_upgrade(FeatureFlag.FORMAT_STANDARDIZER)
|
||||
# Header
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
st.title("📐 Standardize Formats")
|
||||
st.caption(
|
||||
"Canonicalize dates, phone numbers, currency, names, addresses, and "
|
||||
"booleans on a per-column basis. Runs locally — your data never leaves "
|
||||
"this computer."
|
||||
)
|
||||
st.title(t("tools.03_format_standardizer.page_title"))
|
||||
st.caption(t("tools.03_format_standardizer.page_caption"))
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
@@ -650,8 +648,6 @@ with dl_c:
|
||||
mime="application/json",
|
||||
)
|
||||
|
||||
back_to_home_link(key="_back_to_home_link_bottom")
|
||||
|
||||
st.divider()
|
||||
st.caption("Runs locally. Your data never leaves this computer. | DataTools v3.0")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user