def parse_links(html, request_path=None, encoding=None): """Process all links in given html and replace them if markup is added.""" if encoding is None: encoding = settings.DEFAULT_CHARSET # The passed HTML may be a string or bytes, depending on what is calling # this method. For example, Django response.content is always bytes. We # always want this content to be a string for our purposes. html_as_text = force_str(html, encoding=encoding) # This call invokes Wagtail-specific logic that converts references to # Wagtail pages, documents, and images to their proper link URLs. expanded_html = expand_db_html(html_as_text) # Parse links only in the <body> of the HTML body_html = get_body_html(expanded_html) if body_html is None: return expanded_html link_tags = get_link_tags(body_html) for tag in link_tags: tag_with_markup = add_link_markup(tag, request_path) if tag_with_markup: expanded_html = expanded_html.replace(tag, tag_with_markup) return expanded_html
def parse_links(html, encoding=None): """Process all links in given html and replace them if markup is added.""" if encoding is None: encoding = settings.DEFAULT_CHARSET # The passed HTML may be a string or bytes, depending on what is calling # this method. For example, Django response.content is always bytes. We # always want this content to be a string for our purposes. html_as_text = force_text(html, encoding=encoding) # This call invokes Wagail-specific logic that converts references to # Wagtail pages, documents, and images to their proper link URLs. expanded_html = expand_db_html(html_as_text) soup = BeautifulSoup(expanded_html, 'html.parser') link_tags = get_link_tags(soup) for tag in link_tags: original_link = str(tag) link_with_markup = add_link_markup(tag) if link_with_markup: expanded_html = expanded_html.replace( original_link, link_with_markup ) return expanded_html
def test_get_link_tags_spacing(self): """Test for case where tag renders with only whitespace after tag name Template conditions within a tag, e.g., `<a {% if some_condition %}class="some-class"{% endif %}>` can result in output with only whitespace following the tag name if the condition is false, like: `<a >`. """ self.assertEqual(get_link_tags('outer <a >inner</a>'), [ '<a >inner</a>', ])
def parse_links(html, encoding=None): """Process all links in given html and replace them if markup is added.""" if encoding is None: encoding = settings.DEFAULT_CHARSET html = html.decode(encoding) html = expand_db_html(html) soup = BeautifulSoup(html, 'html.parser') link_tags = get_link_tags(soup) for tag in link_tags: original_link = str(tag) link_with_markup = add_link_markup(tag) if link_with_markup: html = html.replace(original_link, link_with_markup) return html.encode(encoding)
def parse_links(html, encoding=None): """Process all links in given html and replace them if markup is added.""" if encoding is None: encoding = settings.DEFAULT_CHARSET # The passed HTML may be a string or bytes, depending on what is calling # this method. For example, Django response.content is always bytes. We # always want this content to be a string for our purposes. html_as_text = force_text(html, encoding=encoding) # This call invokes Wagail-specific logic that converts references to # Wagtail pages, documents, and images to their proper link URLs. expanded_html = expand_db_html(html_as_text) soup = BeautifulSoup(expanded_html, 'html.parser') link_tags = get_link_tags(soup) for tag in link_tags: original_link = str(tag) link_with_markup = add_link_markup(tag) if link_with_markup: expanded_html = expanded_html.replace(original_link, link_with_markup) return expanded_html
def test_get_link_tags_does_not_match_aside(self): self.assertEqual( get_link_tags('outer <aside>inner <a href="">link</a></aside>'), [ '<a href="">link</a>', ])
def test_get_link_tags(self): self.assertEqual(get_link_tags('outer <a href="">inner</a>'), [ '<a href="">inner</a>', ])