Mercurial > libervia-backend
changeset 1801:07390a9d1c09
tools (strings): add method fixXHTMLLinks to add a scheme if missing, and force opening in new tab
author | souliane <souliane@mailoo.org> |
---|---|
date | Fri, 15 Jan 2016 12:27:34 +0100 |
parents | 5f4d688d8b6e |
children | fed95a6c56f8 |
files | frontends/src/tools/strings.py |
diffstat | 1 files changed, 22 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/frontends/src/tools/strings.py Wed Jan 13 22:10:06 2016 +0100 +++ b/frontends/src/tools/strings.py Fri Jan 15 12:27:34 2016 +0100 @@ -18,6 +18,7 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. import re +from feed.atom import Content def getURLParams(url): @@ -72,3 +73,24 @@ return '<a href="%s" target="_blank">%s</a>' % (url, match.group(0)) pattern = r"""<img[^>]* src="([^"]+)"[^>]*>""" return re.sub(pattern, repl, string) + + +def fixXHTMLLinks(xhtml): + """Add http:// if the scheme is missing and force opening in a new window. + + @param string (unicode): XHTML Content + """ + subs = [] + for match in re.finditer(r'<a( \w+="[^"]*")* ?/?>', xhtml): + tag = match.group(0) + url = re.search(r'href="([^"]*)"', tag) + if url: + if not re.search(r'target="([^"]*)"', tag): # no target + subs.append((tag, '<a target="_blank"%s' % tag[2:])) + if not re.match(r"^\w+://", url.group(1)): # no scheme + subs.append((url.group(0), 'href="http://%s"' % url.group(1))) + + for url, new_url in subs: + xhtml = xhtml.replace(url, new_url) + return xhtml +