""" 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 from . import utils def __create_new_tab_links(filters: list[str]): class NewTabLinks: FILTERS = filters def render_link(self, element: marko.inline.Link) -> str: if utils.is_foreign_url(element.dest, 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)] )