Mercurial > libervia-web
comparison browser/sat_browser/html_tools.py @ 1124:28e3eb3bb217
files reorganisation and installation rework:
- files have been reorganised to follow other SàT projects and usual Python organisation (no more "/src" directory)
- VERSION file is now used, as for other SàT projects
- replace the overcomplicated setup.py be a more sane one. Pyjamas part is not compiled anymore by setup.py, it must be done separatly
- removed check for data_dir if it's empty
- installation tested working in virtual env
- libervia launching script is now in bin/libervia
author | Goffi <goffi@goffi.org> |
---|---|
date | Sat, 25 Aug 2018 17:59:48 +0200 |
parents | src/browser/sat_browser/html_tools.py@f2170536ba23 |
children | 2af117bfe6cc |
comparison
equal
deleted
inserted
replaced
1123:63a4b8fe9782 | 1124:28e3eb3bb217 |
---|---|
1 #!/usr/bin/python | |
2 # -*- coding: utf-8 -*- | |
3 | |
4 # Libervia: a Salut à Toi frontend | |
5 # Copyright (C) 2011-2018 Jérôme Poisson <goffi@goffi.org> | |
6 | |
7 # This program is free software: you can redistribute it and/or modify | |
8 # it under the terms of the GNU Affero General Public License as published by | |
9 # the Free Software Foundation, either version 3 of the License, or | |
10 # (at your option) any later version. | |
11 | |
12 # This program is distributed in the hope that it will be useful, | |
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 # GNU Affero General Public License for more details. | |
16 | |
17 # You should have received a copy of the GNU Affero General Public License | |
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
19 | |
20 from sat_frontends.tools import xmltools | |
21 | |
22 import nativedom | |
23 from __pyjamas__ import JS | |
24 | |
25 dom = nativedom.NativeDOM() | |
26 | |
27 | |
28 def html_sanitize(html): | |
29 """Naive sanitization of HTML""" | |
30 return html.replace('<', '<').replace('>', '>') | |
31 | |
32 | |
33 def html_strip(html): | |
34 """Strip leading/trailing white spaces, HTML line breaks and sequences.""" | |
35 JS("""return html.replace(/(^(<br\/?>| |\s)+)|((<br\/?>| |\s)+$)/g, "");""") | |
36 | |
37 def inlineRoot(xhtml): | |
38 """ make root element inline """ | |
39 doc = dom.parseString(xhtml) | |
40 return xmltools.inlineRoot(doc) | |
41 | |
42 | |
43 def convertNewLinesToXHTML(text): | |
44 """Replace all the \n with <br/>""" | |
45 return text.replace('\n', '<br/>') | |
46 | |
47 | |
48 def XHTML2Text(xhtml): | |
49 """Helper method to apply both html_sanitize and convertNewLinesToXHTML""" | |
50 return convertNewLinesToXHTML(html_sanitize(xhtml)) | |
51 | |
52 | |
53 def buildPresenceStyle(presence, base_style=None): | |
54 """Return the CSS classname to be used for displaying the given presence information. | |
55 | |
56 @param presence (unicode): presence is a value in ('', 'chat', 'away', 'dnd', 'xa') | |
57 @param base_style (unicode): base classname | |
58 @return: unicode | |
59 """ | |
60 if not base_style: | |
61 base_style = "contactLabel" | |
62 return '%s-%s' % (base_style, presence or 'connected') | |
63 | |
64 | |
65 def setPresenceStyle(widget, presence, base_style=None): | |
66 """ | |
67 Set the CSS style of a contact's element according to its presence. | |
68 | |
69 @param widget (Widget): the UI element of the contact | |
70 @param presence (unicode): a value in ("", "chat", "away", "dnd", "xa"). | |
71 @param base_style (unicode): the base name of the style to apply | |
72 """ | |
73 if not hasattr(widget, 'presence_style'): | |
74 widget.presence_style = None | |
75 style = buildPresenceStyle(presence, base_style) | |
76 if style == widget.presence_style: | |
77 return | |
78 if widget.presence_style is not None: | |
79 widget.removeStyleName(widget.presence_style) | |
80 widget.addStyleName(style) | |
81 widget.presence_style = style |