summaryrefslogtreecommitdiff
path: root/sleekxmpp/plugins/xep_0071/stanza.py
diff options
context:
space:
mode:
authorLance Stout <lancestout@gmail.com>2012-10-18 21:13:08 -0700
committerLance Stout <lancestout@gmail.com>2013-01-26 14:33:52 -0800
commit79a8c5ceae0cefb34d64172d95dded21872adf02 (patch)
treed70708acdb610eab14c341bcf41a433942ef7df7 /sleekxmpp/plugins/xep_0071/stanza.py
parent97a2f4449dd2d2cc2dc941cf5ad7e12cd088e021 (diff)
downloadslixmpp-79a8c5ceae0cefb34d64172d95dded21872adf02.tar.gz
slixmpp-79a8c5ceae0cefb34d64172d95dded21872adf02.tar.bz2
slixmpp-79a8c5ceae0cefb34d64172d95dded21872adf02.tar.xz
slixmpp-79a8c5ceae0cefb34d64172d95dded21872adf02.zip
Add proper XEP-0071 plugin.
Diffstat (limited to 'sleekxmpp/plugins/xep_0071/stanza.py')
-rw-r--r--sleekxmpp/plugins/xep_0071/stanza.py73
1 files changed, 73 insertions, 0 deletions
diff --git a/sleekxmpp/plugins/xep_0071/stanza.py b/sleekxmpp/plugins/xep_0071/stanza.py
new file mode 100644
index 00000000..77957541
--- /dev/null
+++ b/sleekxmpp/plugins/xep_0071/stanza.py
@@ -0,0 +1,73 @@
+"""
+ SleekXMPP: The Sleek XMPP Library
+ Copyright (C) 2012 Nathanael C. Fritz
+ This file is part of SleekXMPP.
+
+ See the file LICENSE for copying permission.
+"""
+
+from sleekxmpp.stanza import Message
+from sleekxmpp.thirdparty import OrderedDict
+from sleekxmpp.xmlstream import ElementBase, ET, register_stanza_plugin, tostring
+
+
+XHTML_NS = 'http://www.w3.org/1999/xhtml'
+
+
+class XHTML_IM(ElementBase):
+
+ namespace = 'http://jabber.org/protocol/xhtml-im'
+ name = 'html'
+ interfaces = set(['body'])
+ lang_interfaces = set(['body'])
+ plugin_attrib = name
+
+ def set_body(self, content, lang=None):
+ if lang is None:
+ lang = self.get_lang()
+ self.del_body(lang)
+ content = str(content)
+ header = '<body xmlns="%s"' % XHTML_NS
+ if lang:
+ header = '%s xml:lang="%s"' % (header, lang)
+ content = '%s>%s</body>' % (header, content)
+ xhtml = ET.fromstring(content)
+ self.xml.append(xhtml)
+
+ def get_body(self, lang=None):
+ """Return the contents of the HTML body."""
+ if lang is None:
+ lang = self.get_lang()
+
+ bodies = self.xml.findall('{%s}body' % XHTML_NS)
+
+ if lang == '*':
+ result = OrderedDict()
+ for body in bodies:
+ body_lang = body.attrib.get('{%s}lang' % self.xml_ns, '')
+ body_result = []
+ body_result.append(body.text if body.text else '')
+ for child in body:
+ body_result.append(tostring(child, xmlns=XHTML_NS))
+ body_result.append(body.tail if body.tail else '')
+ result[body_lang] = ''.join(body_result)
+ return result
+ else:
+ for body in bodies:
+ if body.attrib.get('{%s}lang' % self.xml_ns, self.get_lang()) == lang:
+ result = []
+ result.append(body.text if body.text else '')
+ for child in body:
+ result.append(tostring(child, xmlns=XHTML_NS))
+ result.append(body.tail if body.tail else '')
+ return ''.join(result)
+ return ''
+
+ def del_body(self, lang):
+ if lang is None:
+ lang = self.get_lang()
+ bodies = self.xml.findall('{%s}body' % XHTML_NS)
+ for body in bodies:
+ if body.attrib.get('{%s}lang' % self.xml_ns, self.get_lang()) == lang:
+ self.xml.remove(body)
+ return