Implementation should follow the following formal specification:
"title" and "content" data can be passed in raw, xhtml or rich format.
When we receive from a frontend a new/updated microblog item:
- keys "title" or "content" have to be escaped (disable HTML tags)
- keys "title_rich" or "content_rich" have to be converted from the current syntax to XHTML
- keys "title_xhtml" or "content_xhtml" have to be cleaned from unwanted XHTML content
Rules to deal with concurrent keys:
- existence of both "*_xhtml" and "*_rich" keys must raise an exception
- existence of both raw and ("*_xhtml" or "*_rich") is OK
As the storage always need raw data, if it is not given by the user it can be
extracted from the "*_rich" or "*_xhtml" data (remove the XHTML tags).
When a frontend wants to edit a blog post that contains XHTML title or content,
the conversion is made from XHTML to the current user-defined syntax.
- plugin text_syntaxes: added "text" syntax (using lxml)
- simplification for retrieving the sent messages
- an expected bridge call which is already set can no more be
overwritten with new arguments for the same method name. The
new arguments are stored in a FIFO list instead, and each call
of the method also registers the arguments for the next call.
- _() is no more installed in __builtin__
- instead, there is a new sat.core.i18n module
- added D_() method for deferred translation
- languageSwitch method allow to dynamically change translation language
- import gettext is tested against ImportError, and dummy methods are used when not available (mainly useful for Libervia)
- added extra data in getHistory return value
- extra data is saved in database
/!\ WARNING: DATABASE SCHEMA HAS CHANGED /!\
to update sqlite database: ALTER TABLE history ADD COLUMN extra BLOB;
- FakeParent renamed FakeClient
- added FakeRoster class, and an instance of it in FakeClient (FakeClient.roster)
- b2s function to convert boolean value to strings used in bridge
- some fake methods (FakeClient.send, FakeSat.delContact) to avoid exceptions
- history now store message type
- sqlite3 storage: fixed resource management in getHistory
- bridge: added message type in getHistory return value
- quick_chats: (ugly) hacks to manage private history filtering/nickname printing
- first unit tests, finally \o/
- some helping methods/classes
- first tests for core.xmpp module
- update .hgignore to ignore test dir
- updated setup.py with new modules