| @@ -19,23 +19,34 @@ | |||||
| # SOFTWARE. | # SOFTWARE. | ||||
| from typing import TYPE_CHECKING, Any, Optional, Generator, Callable | |||||
| from ._base import Node | from ._base import Node | ||||
| from ..utils import parse_anything | from ..utils import parse_anything | ||||
| if TYPE_CHECKING: | |||||
| from ..wikicode import Wikicode | |||||
| __all__ = ["ExternalLink"] | __all__ = ["ExternalLink"] | ||||
| class ExternalLink(Node): | class ExternalLink(Node): | ||||
| """Represents an external link, like ``[http://example.com/ Example]``.""" | """Represents an external link, like ``[http://example.com/ Example]``.""" | ||||
| def __init__(self, url, title=None, brackets=True, suppress_space=False): | |||||
| def __init__( | |||||
| self, | |||||
| url: Any, | |||||
| title: Any = None, | |||||
| brackets: bool = True, | |||||
| suppress_space: bool = False, | |||||
| ): | |||||
| super().__init__() | super().__init__() | ||||
| self.url = url | self.url = url | ||||
| self.title = title | self.title = title | ||||
| self.brackets = brackets | self.brackets = brackets | ||||
| self.suppress_space = suppress_space | self.suppress_space = suppress_space | ||||
| def __str__(self): | |||||
| def __str__(self) -> str: | |||||
| if self.brackets: | if self.brackets: | ||||
| if self.title is not None: | if self.title is not None: | ||||
| if self.suppress_space is True: | if self.suppress_space is True: | ||||
| @@ -44,19 +55,24 @@ class ExternalLink(Node): | |||||
| return "[" + str(self.url) + "]" | return "[" + str(self.url) + "]" | ||||
| return str(self.url) | return str(self.url) | ||||
| def __children__(self): | |||||
| def __children__(self) -> Generator["Wikicode"]: | |||||
| yield self.url | yield self.url | ||||
| if self.title is not None: | if self.title is not None: | ||||
| yield self.title | yield self.title | ||||
| def __strip__(self, **kwargs): | |||||
| def __strip__(self, **kwargs: Any) -> Optional[str]: | |||||
| if self.brackets: | if self.brackets: | ||||
| if self.title: | if self.title: | ||||
| return self.title.strip_code(**kwargs) | return self.title.strip_code(**kwargs) | ||||
| return None | return None | ||||
| return self.url.strip_code(**kwargs) | return self.url.strip_code(**kwargs) | ||||
| def __showtree__(self, write, get, mark): | |||||
| def __showtree__( | |||||
| self, | |||||
| write: Callable[[str], None], | |||||
| get: Callable[["Wikicode"], None], | |||||
| mark: Callable[[], None], | |||||
| ) -> None: | |||||
| if self.brackets: | if self.brackets: | ||||
| write("[") | write("[") | ||||
| get(self.url) | get(self.url) | ||||
| @@ -66,31 +82,31 @@ class ExternalLink(Node): | |||||
| write("]") | write("]") | ||||
| @property | @property | ||||
| def url(self): | |||||
| def url(self) -> "Wikicode": | |||||
| """The URL of the link target, as a :class:`.Wikicode` object.""" | """The URL of the link target, as a :class:`.Wikicode` object.""" | ||||
| return self._url | return self._url | ||||
| @property | |||||
| def title(self): | |||||
| """The link title (if given), as a :class:`.Wikicode` object.""" | |||||
| return self._title | |||||
| @property | |||||
| def brackets(self): | |||||
| """Whether to enclose the URL in brackets or display it straight.""" | |||||
| return self._brackets | |||||
| @url.setter | @url.setter | ||||
| def url(self, value): | |||||
| def url(self, value: Any) -> None: | |||||
| # pylint: disable=import-outside-toplevel | # pylint: disable=import-outside-toplevel | ||||
| from ..parser import contexts | from ..parser import contexts | ||||
| self._url = parse_anything(value, contexts.EXT_LINK_URI) | self._url = parse_anything(value, contexts.EXT_LINK_URI) | ||||
| @property | |||||
| def title(self) -> Optional["Wikicode"]: | |||||
| """The link title (if given), as a :class:`.Wikicode` object.""" | |||||
| return self._title | |||||
| @title.setter | @title.setter | ||||
| def title(self, value): | |||||
| def title(self, value: Any) -> None: | |||||
| self._title = None if value is None else parse_anything(value) | self._title = None if value is None else parse_anything(value) | ||||
| @property | |||||
| def brackets(self) -> bool: | |||||
| """Whether to enclose the URL in brackets or display it straight.""" | |||||
| return self._brackets | |||||
| @brackets.setter | @brackets.setter | ||||
| def brackets(self, value): | |||||
| def brackets(self, value: bool) -> None: | |||||
| self._brackets = bool(value) | self._brackets = bool(value) | ||||