navigation: add function to go to parent URL
This commit is contained in:
parent
5d1e13ea6a
commit
cf6b67f78b
|
@ -12,7 +12,7 @@ from bebop.command_line import CommandLine
|
||||||
from bebop.history import History
|
from bebop.history import History
|
||||||
from bebop.links import Links
|
from bebop.links import Links
|
||||||
from bebop.mouse import ButtonState
|
from bebop.mouse import ButtonState
|
||||||
from bebop.navigation import join_url, parse_url, sanitize_url, set_parameter
|
from bebop.navigation import *
|
||||||
from bebop.page import Page, PagePad
|
from bebop.page import Page, PagePad
|
||||||
from bebop.protocol import Request, Response
|
from bebop.protocol import Request, Response
|
||||||
|
|
||||||
|
@ -111,6 +111,8 @@ class Browser:
|
||||||
self.quick_command("open")
|
self.quick_command("open")
|
||||||
elif char == ord("p"):
|
elif char == ord("p"):
|
||||||
self.go_back()
|
self.go_back()
|
||||||
|
elif char == ord("u"):
|
||||||
|
self.go_to_parent_page()
|
||||||
elif curses.ascii.isdigit(char):
|
elif curses.ascii.isdigit(char):
|
||||||
self.handle_digit_input(char)
|
self.handle_digit_input(char)
|
||||||
elif char == curses.KEY_MOUSE:
|
elif char == curses.KEY_MOUSE:
|
||||||
|
@ -463,6 +465,11 @@ class Browser:
|
||||||
if self.history.has_links():
|
if self.history.has_links():
|
||||||
self.open_gemini_url(self.history.pop(), history=False)
|
self.open_gemini_url(self.history.pop(), history=False)
|
||||||
|
|
||||||
|
def go_to_parent_page(self):
|
||||||
|
"""Go to the parent URL if possible."""
|
||||||
|
if self.current_url:
|
||||||
|
self.open_gemini_url(get_parent_url(self.current_url))
|
||||||
|
|
||||||
def open_web_url(self, url):
|
def open_web_url(self, url):
|
||||||
"""Open a Web URL. Currently relies in Python's webbrowser module."""
|
"""Open a Web URL. Currently relies in Python's webbrowser module."""
|
||||||
self.set_status(f"Opening {url}")
|
self.set_status(f"Opening {url}")
|
||||||
|
|
|
@ -49,3 +49,12 @@ def set_parameter(url: str, user_input: str):
|
||||||
if "?" in url:
|
if "?" in url:
|
||||||
url = url.split("?", maxsplit=1)[0]
|
url = url.split("?", maxsplit=1)[0]
|
||||||
return url + "?" + quoted_input
|
return url + "?" + quoted_input
|
||||||
|
|
||||||
|
|
||||||
|
def get_parent_url(url: str) -> str:
|
||||||
|
"""Return the parent URL (one level up)."""
|
||||||
|
scheme, netloc, path, params, query, frag = parse_url(url)
|
||||||
|
last_slash = path.rstrip("/").rfind("/")
|
||||||
|
if last_slash > -1:
|
||||||
|
path = path[:last_slash + 1]
|
||||||
|
return urllib.parse.urlunparse((scheme, netloc, path, params, query, frag))
|
||||||
|
|
Reference in a new issue