Mercurial > libervia-web
changeset 784:f3cd261ea12f
browser side: workaround for a pyjamas bug which freeze the browser in some case with addURLToText regex
author | Goffi <goffi@goffi.org> |
---|---|
date | Tue, 01 Dec 2015 13:55:01 +0100 |
parents | d24e56a5f2ef |
children | 103f0f01ba54 |
files | src/browser/libervia_main.py src/browser/sat_browser/chat.py src/browser/sat_browser/editor_widget.py src/browser/sat_browser/strings.py src/browser/sat_browser/xmlui.py |
diffstat | 5 files changed, 70 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/browser/libervia_main.py Tue Dec 01 12:34:26 2015 +0100 +++ b/src/browser/libervia_main.py Tue Dec 01 13:55:01 2015 +0100 @@ -32,7 +32,7 @@ from sat_frontends.quick_frontend import quick_menus from sat_frontends.tools.misc import InputHistory -from sat_frontends.tools import strings +from sat_browser import strings from sat_frontends.tools import jid from sat_frontends.tools import host_listener from sat.core.i18n import _
--- a/src/browser/sat_browser/chat.py Tue Dec 01 12:34:26 2015 +0100 +++ b/src/browser/sat_browser/chat.py Tue Dec 01 13:55:01 2015 +0100 @@ -21,7 +21,7 @@ log = getLogger(__name__) # from sat_frontends.tools.games import SYMBOLS -from sat_frontends.tools import strings +from sat_browser import strings from sat_frontends.tools import jid from sat_frontends.quick_frontend import quick_widgets, quick_games, quick_menus from sat_frontends.quick_frontend.quick_chat import QuickChat
--- a/src/browser/sat_browser/editor_widget.py Tue Dec 01 12:34:26 2015 +0100 +++ b/src/browser/sat_browser/editor_widget.py Tue Dec 01 13:55:01 2015 +0100 @@ -19,7 +19,7 @@ from sat.core.log import getLogger log = getLogger(__name__) -from sat_frontends.tools import strings +from sat_browser import strings from pyjamas.ui.HTML import HTML from pyjamas.ui.SimplePanel import SimplePanel
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/browser/sat_browser/strings.py Tue Dec 01 13:55:01 2015 +0100 @@ -0,0 +1,66 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# SAT helpers methods for plugins +# Copyright (C) 2013, 2014, 2015 Adrien Cossa (souliane@mailoo.org) + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. + +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +import re +from __pyjamas__ import JS + + +def getURLParams(url): + """This comes from pyjamas.Location.makeUrlDict with a small change + to also parse full URLs, and parameters with no value specified + (in that case the default value "" is used). + @param url: any URL with or without parameters + @return: a dictionary of the parameters, if any was given, or {} + """ + dict_ = {} + if "/" in url: + # keep the part after the last "/" + url = url[url.rindex("/") + 1:] + if url.startswith("?"): + # remove the first "?" + url = url[1:] + pairs = url.split("&") + for pair in pairs: + if len(pair) < 3: + continue + kv = pair.split("=", 1) + dict_[kv[0]] = kv[1] if len(kv) > 1 else "" + return dict_ + + +def addURLToText(text): + """Workaround for a pyjamas bug with regex + + In some case, Pyjamas' re module get crazy and freeze browsers (tested with Iceweasel and Chromium). + we use javascript as a workaround + This method is inspired from https://stackoverflow.com/questions/1500260/detect-urls-in-text-with-javascript + """ + JS("""var urlRegex = /(https?:\/\/[^\s]+)/g; + return text.replace(urlRegex, function(url) { + return '<a href="' + url + '">' + url + '</a>'; + })""") + + +def addURLToImage(string): + """Check a XHTML text for what looks like an imageURL and make it clickable""" + def repl(match): + url = match.group(1) + return '<a href="%s" target="_blank">%s</a>' % (url, match.group(0)) + pattern = r"""<img[^>]* src="([^"]+)"[^>]*>""" + return re.sub(pattern, repl, string)
--- a/src/browser/sat_browser/xmlui.py Tue Dec 01 12:34:26 2015 +0100 +++ b/src/browser/sat_browser/xmlui.py Tue Dec 01 13:55:01 2015 +0100 @@ -20,7 +20,7 @@ from sat.core.log import getLogger log = getLogger(__name__) from sat_frontends.tools import xmlui -from sat_frontends.tools import strings +from sat_browser import strings from sat_frontends.tools import jid from sat_browser.constants import Const as C from sat_browser import dialog