Addon Manager: Fix relative external links

This commit is contained in:
Chris Hennes
2024-03-11 17:00:00 -05:00
parent 4f136e4613
commit e0e1aef0ae
2 changed files with 23 additions and 0 deletions

View File

@@ -49,6 +49,7 @@ class WidgetReadmeBrowser(QtWidgets.QTextBrowser):
correctly."""
load_resource = QtCore.Signal(str) # Str is a URL to a resource
follow_link = QtCore.Signal(str) # Str is a URL to another page
def __init__(self, parent: QtWidgets.QWidget = None):
super().__init__(parent)
@@ -108,6 +109,12 @@ class WidgetReadmeBrowser(QtWidgets.QTextBrowser):
self.load_resource.emit(full_url)
self.image_map[full_url] = None
return self.image_map[full_url]
elif resource_type == QtGui.QTextDocument.MarkdownResource:
self.follow_link.emit(name.toString())
return self.toMarkdown()
elif resource_type == QtGui.QTextDocument.HtmlResource:
self.follow_link.emit(name.toString())
return self.toHtml()
return super().loadResource(resource_type, name)
def _ensure_appropriate_width(self, image: QtGui.QImage) -> QtGui.QImage:

View File

@@ -63,6 +63,7 @@ class ReadmeController(QtCore.QObject):
self.stop = True
self.widget = widget
self.widget.load_resource.connect(self.loadResource)
self.widget.follow_link.connect(self.follow_link)
def set_addon(self, repo: Addon):
"""Set which Addon's information is displayed"""
@@ -152,6 +153,16 @@ class ReadmeController(QtCore.QObject):
NetworkManager.AM_NETWORK_MANAGER.abort(request)
self.resource_requests.clear()
def follow_link(self, url: str) -> None:
final_url = url
if not url.startswith("http"):
if url.endswith(".md"):
final_url = self._create_markdown_url(url)
else:
final_url = self._create_full_url(url)
FreeCAD.Console.PrintLog(f"Loading {final_url} in the system browser")
QtGui.QDesktopServices.openUrl(final_url)
def _create_full_url(self, url: str) -> str:
if url.startswith("http"):
return url
@@ -160,6 +171,11 @@ class ReadmeController(QtCore.QObject):
lhs, slash, _ = self.url.rpartition("/")
return lhs + slash + url
def _create_markdown_url(self, file: str) -> str:
base_url = utils.get_readme_html_url(self.addon)
lhs, slash, _ = base_url.rpartition("/")
return lhs + slash + file
class WikiCleaner(HTMLParser):
"""This HTML parser cleans up FreeCAD Macro Wiki Page for display in a