Updated XHTML-IM stanza with documentation and PEP8 style.
This commit is contained in:
parent
18683d2b75
commit
183a3f1b87
2 changed files with 71 additions and 26 deletions
|
@ -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 <message> 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:
|
||||
<message to="user@example.com">
|
||||
<body>Non-html message content.</body>
|
||||
<html xmlns="http://jabber.org/protocol/xhtml-im">
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<p><b>HTML!</b></p>
|
||||
</body>
|
||||
</html>
|
||||
</message>
|
||||
|
||||
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 <body> 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)
|
||||
|
|
|
@ -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, """
|
||||
<message to="fritzy@netflint.net/sleekxmpp" type="chat">
|
||||
<body>this is the plaintext message</body>
|
||||
|
|
Loading…
Reference in a new issue