Mercurial > libervia-web
view browser_side/tools.py @ 230:266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
- do not create a new chat panel for contacts/groups if a similar one is found in the same tab
- this goes with a modification of the methods to create new panels, especially arguments handling
- improvement of the accepted groups list for MicroblogPanel (remove duplicates and keep sorted)
Details for the new flag:
# Set to true to not create a new LiberviaWidget when a similar one
# already exist (i.e. a chat panel with the same target). Instead
# the existing widget will be eventually removed from its parent
# and added to new WidgetsPanel, or replaced to the expected
# position if the previous and the new parent are the same.
author | souliane <souliane@mailoo.org> |
---|---|
date | Tue, 08 Oct 2013 13:57:35 +0200 |
parents | f7ec248192de |
children | d7c41c84d062 |
line wrap: on
line source
#!/usr/bin/python # -*- coding: utf-8 -*- """ Libervia: a Salut à Toi frontend Copyright (C) 2011, 2012, 2013 Jérôme Poisson <goffi@goffi.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/>. """ from pyjamas.ui.DragWidget import DragWidget import re def html_sanitize(html): """Naive sanitization of HTML""" return html.replace('<','<').replace('>','>') def addURLToText(string): """Check a text for what looks like an URL and make it clickable. Regexp from http://daringfireball.net/2010/07/improved_regex_for_matching_urls""" def repl(match): url = match.group(0) if not re.match(r"""[a-z]{3,}://|mailto:|xmpp:""", url): url = "http://" + url return '<a href="%s" target="_blank" class="url">%s</a>' % (url, match.group(0)) pattern = r"""(?i)\b((?:[a-z]{3,}://|(www|ftp)\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/|mailto:|xmpp:)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?]))""" return re.sub(pattern, repl, string) class DragLabel(DragWidget): def __init__(self, text, _type): DragWidget.__init__(self) self._text = text self._type = _type def onDragStart(self, event): dt = event.dataTransfer dt.setData('text/plain', "%s\n%s" % (self._text, self._type)) dt.setDragImage(self.getElement(), 15, 15) class LiberviaDragWidget(DragLabel): """ A DragLabel which keep the widget being dragged as class value """ current = None # widget currently dragged def __init__(self, text, _type, widget): DragLabel.__init__(self, text, _type) self.widget = widget def onDragStart(self, event): LiberviaDragWidget.current = self.widget DragLabel.onDragStart(self, event) def onDragEnd(self, event): LiberviaDragWidget.current = None