""" 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)] )