Skip to content

Commit 475e357

Browse files
authored
fix: fix relative navigation (#24)
1 parent 5336360 commit 475e357

File tree

2 files changed

+41
-1
lines changed

2 files changed

+41
-1
lines changed

js/src/index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ export function History({ onChange }) {
3333
export function Link({ to, onClick, children, ...props }) {
3434
const handleClick = (event) => {
3535
event.preventDefault();
36-
window.history.pushState({}, to, window.location.origin + to);
36+
window.history.pushState({}, to, new URL(to, window.location));
3737
onClick({
3838
pathname: window.location.pathname,
3939
search: window.location.search,

tests/test_core.py

+40
Original file line numberDiff line numberDiff line change
@@ -183,3 +183,43 @@ def sample():
183183

184184
await display.page.go_back()
185185
await display.page.wait_for_selector("#root")
186+
187+
188+
async def test_relative_links(display: DisplayFixture):
189+
@component
190+
def sample():
191+
return simple.router(
192+
route("/", link("Root", to="/a", id="root")),
193+
route("/a", link("A", to="/a/b", id="a")),
194+
route("/a/b", link("B", to="../a/b/c", id="b")),
195+
route("/a/b/c", link("C", to="../d", id="c")),
196+
route("/a/d", link("D", to="e", id="d")),
197+
route("/a/e", link("E", to="../default", id="e")),
198+
route("*", html.h1({"id": "default"}, "Default")),
199+
)
200+
201+
await display.show(sample)
202+
203+
for link_selector in ["#root", "#a", "#b", "#c", "#d", "#e"]:
204+
lnk = await display.page.wait_for_selector(link_selector)
205+
await lnk.click()
206+
207+
await display.page.wait_for_selector("#default")
208+
209+
await display.page.go_back()
210+
await display.page.wait_for_selector("#e")
211+
212+
await display.page.go_back()
213+
await display.page.wait_for_selector("#d")
214+
215+
await display.page.go_back()
216+
await display.page.wait_for_selector("#c")
217+
218+
await display.page.go_back()
219+
await display.page.wait_for_selector("#b")
220+
221+
await display.page.go_back()
222+
await display.page.wait_for_selector("#a")
223+
224+
await display.page.go_back()
225+
await display.page.wait_for_selector("#root")

0 commit comments

Comments
 (0)