diff options
Diffstat (limited to 'newtablink.py')
-rw-r--r-- | newtablink.py | 33 |
1 files changed, 33 insertions, 0 deletions
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"<a href=\"{element.dest}\" target=\"_blank\">{self.render_children(element)}</a>" + + 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)] + ) |