Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Merge remote-tracking branch 'jjwchoy/master'

Modified linkify to accept a callable for extra_params.

Closes #506.
  • Loading branch information...
commit e4ee4709db7a3f8416dec521aaf627ee3327232a 2 parents b1df663 + 783d76c
@bdarnell bdarnell authored
Showing with 21 additions and 3 deletions.
  1. +13 −3 tornado/escape.py
  2. +8 −0 tornado/test/escape_test.py
View
16 tornado/escape.py
@@ -246,8 +246,15 @@ def linkify(text, shorten=False, extra_params="",
shorten: Long urls will be shortened for display.
- extra_params: Extra text to include in the link tag,
+ extra_params: Extra text to include in the link tag, or a callable
+ taking the link as an argument and returning the extra text
e.g. linkify(text, extra_params='rel="nofollow" class="external"')
+ or def extra_params_cb(url):
+ if url.startswith("http://example.com"):
+ return 'class="internal"'
+ else:
+ return 'class="external" rel="nofollow"'
+ linkify(text, extra_params=extra_params_cb)
require_protocol: Only linkify urls which include a protocol. If this is
False, urls such as www.facebook.com will also be linkified.
@@ -256,7 +263,7 @@ def linkify(text, shorten=False, extra_params="",
e.g. linkify(text, permitted_protocols=["http", "ftp", "mailto"]).
It is very unsafe to include protocols such as "javascript".
"""
- if extra_params:
+ if extra_params and not callable(extra_params):
extra_params = " " + extra_params.strip()
def make_link(m):
@@ -272,7 +279,10 @@ def make_link(m):
if not proto:
href = "http://" + href # no proto specified, use http
- params = extra_params
+ if callable(extra_params):
+ params = " " + extra_params(href).strip()
+ else:
+ params = extra_params
# clip long urls. max_len is just an approximation
max_len = 30
View
8 tornado/test/escape_test.py
@@ -121,6 +121,14 @@
("www.external-link.com",
{"extra_params": 'rel="nofollow" class="external"'},
u'<a href="http://www.external-link.com" rel="nofollow" class="external">www.external-link.com</a>'),
+
+ ("www.external-link.com and www.internal-link.com/blogs extra",
+ {"extra_params": lambda(href):'class="internal"' if href.startswith("http://www.internal-link.com") else 'rel="nofollow" class="external"'},
+ u'<a href="http://www.external-link.com" rel="nofollow" class="external">www.external-link.com</a> and <a href="http://www.internal-link.com/blogs" class="internal">www.internal-link.com/blogs</a> extra'),
+
+ ("www.external-link.com",
+ {"extra_params": lambda(href):' rel="nofollow" class="external" '},
+ u'<a href="http://www.external-link.com" rel="nofollow" class="external">www.external-link.com</a>'),
]
Please sign in to comment.
Something went wrong with that request. Please try again.