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