Instant Messaging for Plone with javascript and XMPP
backbone.js xmpp javascript screencast strophe.js ploneLate last year Yiorgis Gozadinos who at the time was still working for Jarn, released a video showing his work in integrating XMPP (eXtended Messaging and Presence Protocol) into Zope/Plone.
I had some experience in creating a chat client for Plone before and was inspired by the possibility of porting it to XMPP. In the end it wasn’t so much of a port but rather a complete rewrite.
Today, I’m relieved and happy that it’s finally in a state where I can show it to you. I’ve been spending most of my free time the last two months writing collective.xmpp.chat.
It’s been both frustrating and fun (mostly fun) and a very valuable learning experience. Like that one week where I rewrote the entire codebase to make use of backbone.js. Aaah, fun times.
Some features already implemented:
Single user chat Roster support (adding/removing contacts) (XEP-0144) Setting presence status (online, offline, away, busy) Custom status messages Multi-user chatrooms (XEP-0045) Chat windows stay open upon page reload Offline storage of messages using HTML5 localstorage (still needs to be secured) Message actions (/me) Setting the topic of a chatroom (/topic)
Because almost all the code is written in Javascript (converse.js is about 1500 LOC), you can even stop the Zope server and still continue to chat. Unfortunately I forgot to show this in the screencast.
If anyone has any questions about the code, how to install, configure and use it, please don’t hesitate to contact me. The add-on includes a buildout.cfg file that will set up Zope/Plone, Nginx and ejabberd for you. But please beware, the code is still in a pre-alpha state.
And then lastly, I plan to give a talk at the upcoming Plone Conference in Arnhem. This talk will focus on collective.xmpp.chat, the underlying technologies and how to write XMPP-enabled add-ons.
If you consider this an interesting topic, please go and vote for this talk to ensure that it gets accepted.