Skip to content

Commit

Permalink
bugdown: Convert GitHub image-preview urls to image urls.
Browse files Browse the repository at this point in the history
This makes inline image previews work for links to image files' pages
on GitHub.

Fixes zulip#4658.
  • Loading branch information
aero31aero authored and timabbott committed May 9, 2017
1 parent 5be7494 commit 0414ac6
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 1 deletion.
17 changes: 16 additions & 1 deletion zerver/lib/bugdown/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -359,6 +359,21 @@ def __init__(self, md, bugdown):
self.bugdown = bugdown
markdown.treeprocessors.Treeprocessor.__init__(self, md)

def get_actual_image_url(self, url):
# type: (Text) -> Text
# Add specific per-site cases to convert image-preview urls to image urls.
# See https://github.com/zulip/zulip/issues/4658 for more information
parsed_url = urllib.parse.urlparse(url)
if (parsed_url.netloc == 'github.com' or parsed_url.netloc.endswith('.github.com')):
# https://github.com/zulip/zulip/blob/master/static/images/logo/zulip-icon-128x128.png ->
# https://raw.githubusercontent.com/zulip/zulip/master/static/images/logo/zulip-icon-128x128.png
split_path = parsed_url.path.split('/')
if len(split_path) > 3 and split_path[3] == "blob":
return urllib.parse.urljoin('https://raw.githubusercontent.com',
'/'.join(split_path[0:3] + split_path[4:]))

return url

def is_image(self, url):
# type: (Text) -> bool
if not image_preview_enabled_for_realm():
Expand Down Expand Up @@ -628,7 +643,7 @@ def run(self, root):
class_attr=class_attr)
continue
if self.is_image(url):
add_a(root, url, url, title=text)
add_a(root, self.get_actual_image_url(url), url, title=text)
continue
if get_tweet_id(url) is not None:
if rendered_tweet_count >= self.TWITTER_MAX_TO_PREVIEW:
Expand Down
13 changes: 13 additions & 0 deletions zerver/tests/test_bugdown.py
Original file line number Diff line number Diff line change
Expand Up @@ -349,6 +349,19 @@ def test_inline_dropbox_bad(self):
converted = bugdown_convert(msg)
self.assertEqual(converted, '<p><a href="https://zulip-test.dropbox.com/photos/cl/ROmr9K1XYtmpneM" target="_blank" title="https://zulip-test.dropbox.com/photos/cl/ROmr9K1XYtmpneM">https://zulip-test.dropbox.com/photos/cl/ROmr9K1XYtmpneM</a></p>')

def test_inline_github_preview(self):
# type: () -> None
# Test photo album previews
msg = 'https://github.com/zulip/zulip/blob/master/static/images/logo/zulip-icon-128x128.png'
converted = bugdown_convert(msg)

self.assertEqual(converted, '<p><a href="https://github.com/zulip/zulip/blob/master/static/images/logo/zulip-icon-128x128.png" target="_blank" title="https://github.com/zulip/zulip/blob/master/static/images/logo/zulip-icon-128x128.png">https://github.com/zulip/zulip/blob/master/static/images/logo/zulip-icon-128x128.png</a></p>\n<div class="message_inline_image"><a href="https://github.com/zulip/zulip/blob/master/static/images/logo/zulip-icon-128x128.png" target="_blank" title="https://github.com/zulip/zulip/blob/master/static/images/logo/zulip-icon-128x128.png"><img src="https://raw.githubusercontent.com/zulip/zulip/master/static/images/logo/zulip-icon-128x128.png"></a></div>')

msg = 'https://developer.github.com/assets/images/hero-circuit-bg.png'
converted = bugdown_convert(msg)

self.assertEqual(converted, '<p><a href="https://developer.github.com/assets/images/hero-circuit-bg.png" target="_blank" title="https://developer.github.com/assets/images/hero-circuit-bg.png">https://developer.github.com/assets/images/hero-circuit-bg.png</a></p>\n<div class="message_inline_image"><a href="https://developer.github.com/assets/images/hero-circuit-bg.png" target="_blank" title="https://developer.github.com/assets/images/hero-circuit-bg.png"><img src="https://developer.github.com/assets/images/hero-circuit-bg.png"></a></div>')

def test_twitter_id_extraction(self):
# type: () -> None
self.assertEqual(bugdown.get_tweet_id('http://twitter.com/#!/VizzQuotes/status/409030735191097344'), '409030735191097344')
Expand Down

0 comments on commit 0414ac6

Please sign in to comment.