Modified linkify to accept a callable for extra_params. This allows different params based for each link, for example to treat internal and external links differently
This commit is contained in:
parent
50244877b5
commit
53e7c751c3
|
@ -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 linkify(text, shorten=False, extra_params="",
|
|||
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
|
||||
|
|
Loading…
Reference in New Issue