diff --git a/sleekxmpp/stanza/htmlim.py b/sleekxmpp/stanza/htmlim.py
index 50195b11..c2f2f0c8 100644
--- a/sleekxmpp/stanza/htmlim.py
+++ b/sleekxmpp/stanza/htmlim.py
@@ -5,31 +5,76 @@
See the file LICENSE for copying permission.
"""
-from .. xmlstream.stanzabase import registerStanzaPlugin, ElementBase, ET
+
+from sleekxmpp.stanza import Message
+from sleekxmpp.xmlstream.stanzabase import registerStanzaPlugin
+from sleekxmpp.xmlstream.stanzabase import ElementBase, ET
+
class HTMLIM(ElementBase):
- namespace = 'http://jabber.org/protocol/xhtml-im'
- name = 'html'
- plugin_attrib = 'html'
- interfaces = set(('html',))
- plugin_attrib_map = set()
- plugin_xml_map = set()
- def setHtml(self, html):
- if isinstance(html, str):
- html = ET.XML(html)
- if html.tag != '{http://www.w3.org/1999/xhtml}body':
- body = ET.Element('{http://www.w3.org/1999/xhtml}body')
- body.append(html)
- self.xml.append(body)
- else:
- self.xml.append(html)
-
- def getHtml(self):
- html = self.xml.find('{http://www.w3.org/1999/xhtml}body')
- if html is None: return ''
- return html
-
- def delHtml(self):
- if self.parent is not None:
- self.parent().xml.remove(self.xml)
+ """
+ XEP-0071: XHTML-IM defines a method for embedding XHTML content
+ within a stanza so that lightweight markup can be used
+ to format the message contents and to create links.
+
+ Only a subset of XHTML is recommended for use with XHTML-IM.
+ See the full spec at 'http://xmpp.org/extensions/xep-0071.html'
+ for more information.
+
+ Example stanza:
+
+ Non-html message content.
+
+
+ HTML!
+
+
+
+
+ Stanza Interface:
+ body -- The contents of the HTML body tag.
+
+ Methods:
+ getBody -- Return the HTML body contents.
+ setBody -- Set the HTML body contents.
+ delBody -- Remove the HTML body contents.
+ """
+
+ namespace = 'http://jabber.org/protocol/xhtml-im'
+ name = 'html'
+ interfaces = set(('body',))
+ plugin_attrib = name
+
+ def setBody(self, html):
+ """
+ Set the contents of the HTML body.
+
+ Arguments:
+ html -- Either a string or XML object. If the top level
+ element is not with a namespace of
+ 'http://www.w3.org/1999/xhtml', it will be wrapped.
+ """
+ if isinstance(html, str):
+ html = ET.XML(html)
+ if html.tag != '{http://www.w3.org/1999/xhtml}body':
+ body = ET.Element('{http://www.w3.org/1999/xhtml}body')
+ body.append(html)
+ self.xml.append(body)
+ else:
+ self.xml.append(html)
+
+ def getBody(self):
+ """Return the contents of the HTML body."""
+ html = self.xml.find('{http://www.w3.org/1999/xhtml}body')
+ if html is None:
+ return ''
+ return html
+
+ def delBody(self):
+ """Remove the HTML body contents."""
+ if self.parent is not None:
+ self.parent().xml.remove(self.xml)
+
+
+registerStanzaPlugin(Message, HTMLIM)
diff --git a/tests/test_messagestanzas.py b/tests/test_messagestanzas.py
index f55211db..5e2a667a 100644
--- a/tests/test_messagestanzas.py
+++ b/tests/test_messagestanzas.py
@@ -32,7 +32,7 @@ class TestMessageStanzas(SleekTest):
msg['type'] = 'chat'
p = ET.Element('{http://www.w3.org/1999/xhtml}p')
p.text = "This is the htmlim message"
- msg['html']['html'] = p
+ msg['html']['body'] = p
self.checkMessage(msg, """
this is the plaintext message