From c307de76f9b54d5c65196341ee12ea38ac3d6e6b Mon Sep 17 00:00:00 2001 From: Botond Hende Date: Wed, 24 Jul 2024 23:45:48 +0200 Subject: new tab link module --- newtablink.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 newtablink.py diff --git a/newtablink.py b/newtablink.py new file mode 100644 index 0000000..df42833 --- /dev/null +++ b/newtablink.py @@ -0,0 +1,33 @@ +""" +Adds 'target="_blank"' to links, so they open in a new tab. +Filter base urls can be added so that every absolute path link containing the filter is ignored by the extension. + +Usage: +MyExtension = get_new_tab_links(["example.org"]) +""" +import marko.inline +from marko.helpers import MarkoExtension + + +def __create_new_tab_links(filters: list[str]): + class NewTabLinks: + FILTERS = filters + + def render_link(self, element: marko.inline.Link) -> str: + dest_lower = element.dest.lower() + + if (dest_lower.startswith("http://") or dest_lower.startswith("https://")) and not any((elem in dest_lower for elem in NewTabLinks.FILTERS)): + return f"{self.render_children(element)}" + + return super().render_link(element) + + return NewTabLinks + + +def get_new_tab_links(filters: list[str] = None): + if filters is None: + filters = [] + + return MarkoExtension( + renderer_mixins=[__create_new_tab_links(filters)] + ) -- cgit v1.2.3-70-g09d2